Add cls pointer to the logger
[deb_shairplay.git] / src / test / example.c
index 15f91f620c923e74449ac920eda3c4a013da3f72..e857642da911b77cfd288e906a010f10bdc4efce 100644 (file)
@@ -2,13 +2,17 @@
 #include <stdio.h>
 #include <unistd.h>
 
+#ifdef WIN32
+#include <windows.h>
+#endif
+
 #include "dnssd.h"
 #include "raop.h"
 
-static void
-audio_init(void *cls, void **session, int bits, int channels, int samplerate)
+static void *
+audio_init(void *cls, int bits, int channels, int samplerate)
 {
-       *session = fopen("audio.pcm", "wb");
+       return fopen("audio.pcm", "wb");
 }
 
 static void
@@ -17,6 +21,30 @@ audio_set_volume(void *cls, void *session, float volume)
        printf("Setting volume to %f\n", volume);
 }
 
+static void
+audio_set_metadata(void *cls, void *session, const void *buffer, int buflen)
+{
+       int orig = buflen;
+       FILE *file = fopen("metadata.bin", "wb");
+       while (buflen > 0) {
+               buflen -= fwrite(buffer+orig-buflen, 1, buflen, file);
+       }
+       fclose(file);
+       printf("Metadata of length %d saved as metadata.bin\n", orig);
+}
+
+static void
+audio_set_coverart(void *cls, void *session, const void *buffer, int buflen)
+{
+       int orig = buflen;
+       FILE *file = fopen("coverart.jpg", "wb");
+       while (buflen > 0) {
+               buflen -= fwrite(buffer+orig-buflen, 1, buflen, file);
+       }
+       fclose(file);
+       printf("Coverart of length %d saved as coverart.jpg\n", orig);
+}
+
 static void
 audio_process(void *cls, void *session, const void *buffer, int buflen)
 {
@@ -38,6 +66,12 @@ audio_destroy(void *cls, void *session)
        fclose(session);
 }
 
+static void
+raop_log_callback(void *cls, int level, const char *msg)
+{
+       printf("RAOP LOG(%d): %s\n", level, msg);
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -52,17 +86,25 @@ main(int argc, char *argv[])
        raop_cbs.cls = NULL;
        raop_cbs.audio_init = audio_init;
        raop_cbs.audio_set_volume = audio_set_volume;
+       raop_cbs.audio_set_metadata = audio_set_metadata;
+       raop_cbs.audio_set_coverart = audio_set_coverart;
        raop_cbs.audio_process = audio_process;
        raop_cbs.audio_flush = audio_flush;
        raop_cbs.audio_destroy = audio_destroy;
 
-       raop = raop_init_from_keyfile(&raop_cbs, "airport.key", hwaddr, sizeof(hwaddr));
-       raop_start(raop, &raop_port);
+       raop = raop_init_from_keyfile(10, &raop_cbs, "airport.key");
+       raop_set_log_level(raop, RAOP_LOG_DEBUG);
+       raop_set_log_callback(raop, &raop_log_callback, NULL);
+       raop_start(raop, &raop_port, hwaddr, sizeof(hwaddr), "test");
 
-       dnssd = dnssd_init(hwaddr, sizeof(hwaddr), NULL);
-       dnssd_register_raop(dnssd, name, raop_port);
+       dnssd = dnssd_init(NULL);
+       dnssd_register_raop(dnssd, name, raop_port, hwaddr, sizeof(hwaddr), 1);
 
+#ifndef WIN32
        sleep(100);
+#else
+       Sleep(100*1000);
+#endif
 
        dnssd_unregister_raop(dnssd);
        dnssd_destroy(dnssd);