c1ae7f0150f4974f3bc5c8e139e3d8b6498d7cc1
[deb_shairplay.git] / src / test / example.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <unistd.h>
4
5 #ifdef WIN32
6 #include <windows.h>
7 #endif
8
9 #include "dnssd.h"
10 #include "raop.h"
11
12 static void *
13 audio_init(void *cls, int bits, int channels, int samplerate)
14 {
15 return fopen("audio.pcm", "wb");
16 }
17
18 static void
19 audio_set_volume(void *cls, void *session, float volume)
20 {
21 printf("Setting volume to %f\n", volume);
22 }
23
24 static void
25 audio_set_metadata(void *cls, void *session, const void *buffer, int buflen)
26 {
27 int orig = buflen;
28 FILE *file = fopen("metadata.bin", "wb");
29 while (buflen > 0) {
30 buflen -= fwrite(buffer+orig-buflen, 1, buflen, file);
31 }
32 fclose(file);
33 printf("Metadata of length %d saved as metadata.bin\n", orig);
34 }
35
36 static void
37 audio_set_coverart(void *cls, void *session, const void *buffer, int buflen)
38 {
39 int orig = buflen;
40 FILE *file = fopen("coverart.jpg", "wb");
41 while (buflen > 0) {
42 buflen -= fwrite(buffer+orig-buflen, 1, buflen, file);
43 }
44 fclose(file);
45 printf("Coverart of length %d saved as coverart.jpg\n", orig);
46 }
47
48 static void
49 audio_process(void *cls, void *session, const void *buffer, int buflen)
50 {
51 int orig = buflen;
52 while (buflen > 0) {
53 buflen -= fwrite(buffer+orig-buflen, 1, buflen, session);
54 }
55 }
56
57 static void
58 audio_flush(void *cls, void *session)
59 {
60 printf("Flushing audio\n");
61 }
62
63 static void
64 audio_destroy(void *cls, void *session)
65 {
66 fclose(session);
67 }
68
69 int
70 main(int argc, char *argv[])
71 {
72 const char *name = "AppleTV";
73 unsigned short raop_port = 5000;
74 const char hwaddr[] = { 0x48, 0x5d, 0x60, 0x7c, 0xee, 0x22 };
75
76 dnssd_t *dnssd;
77 raop_t *raop;
78 raop_callbacks_t raop_cbs;
79
80 raop_cbs.cls = NULL;
81 raop_cbs.audio_init = audio_init;
82 raop_cbs.audio_set_volume = audio_set_volume;
83 raop_cbs.audio_set_metadata = audio_set_metadata;
84 raop_cbs.audio_set_coverart = audio_set_coverart;
85 raop_cbs.audio_process = audio_process;
86 raop_cbs.audio_flush = audio_flush;
87 raop_cbs.audio_destroy = audio_destroy;
88
89 raop = raop_init_from_keyfile(&raop_cbs, "airport.key");
90 raop_start(raop, &raop_port, hwaddr, sizeof(hwaddr), "test");
91
92 dnssd = dnssd_init(NULL);
93 dnssd_register_raop(dnssd, name, raop_port, hwaddr, sizeof(hwaddr), 1);
94
95 #ifndef WIN32
96 sleep(100);
97 #else
98 Sleep(100*1000);
99 #endif
100
101 dnssd_unregister_raop(dnssd);
102 dnssd_destroy(dnssd);
103
104 raop_stop(raop);
105 raop_destroy(raop);
106
107 return 0;
108 }
109