X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fraop_rtp.c;h=e80da78d0d1ee3bc86c2712c377e5e66420a23d7;hb=597bc69b0a31b9f1834911aeb34e389f28ea0ae7;hp=77814ba08680528e9a2d96b9ee9d42d40792d16a;hpb=b4cc5b07433c16215f903a67ae9ca59e7114dc90;p=deb_shairplay.git diff --git a/src/lib/raop_rtp.c b/src/lib/raop_rtp.c index 77814ba..e80da78 100644 --- a/src/lib/raop_rtp.c +++ b/src/lib/raop_rtp.c @@ -45,6 +45,7 @@ struct raop_rtp_s { int joined; float volume; + int volume_changed; unsigned char *metadata; int metadata_len; unsigned char *coverart; @@ -120,13 +121,15 @@ raop_rtp_parse_remote(raop_rtp_t *raop_rtp, const char *remote) raop_rtp_t * raop_rtp_init(logger_t *logger, raop_callbacks_t *callbacks, const char *remote, - const char *fmtp, const unsigned char *aeskey, const unsigned char *aesiv) + const char *rtpmap, const char *fmtp, + const unsigned char *aeskey, const unsigned char *aesiv) { raop_rtp_t *raop_rtp; assert(logger); assert(callbacks); assert(remote); + assert(rtpmap); assert(fmtp); raop_rtp = calloc(1, sizeof(raop_rtp_t)); @@ -135,7 +138,7 @@ raop_rtp_init(logger_t *logger, raop_callbacks_t *callbacks, const char *remote, } raop_rtp->logger = logger; memcpy(&raop_rtp->callbacks, callbacks, sizeof(raop_callbacks_t)); - raop_rtp->buffer = raop_buffer_init(fmtp, aeskey, aesiv); + raop_rtp->buffer = raop_buffer_init(rtpmap, fmtp, aeskey, aesiv); if (!raop_rtp->buffer) { free(raop_rtp); return NULL; @@ -246,9 +249,10 @@ raop_rtp_resend_callback(void *opaque, unsigned short seqnum, unsigned short cou } static int -raop_rtp_process_events(raop_rtp_t *raop_rtp, void *cb_data, float *volume) +raop_rtp_process_events(raop_rtp_t *raop_rtp, void *cb_data) { int flush; + float volume; int volume_changed; unsigned char *metadata; int metadata_len; @@ -256,7 +260,6 @@ raop_rtp_process_events(raop_rtp_t *raop_rtp, void *cb_data, float *volume) int coverart_len; assert(raop_rtp); - assert(volume); MUTEX_LOCK(raop_rtp->run_mutex); if (!raop_rtp->running) { @@ -265,8 +268,9 @@ raop_rtp_process_events(raop_rtp_t *raop_rtp, void *cb_data, float *volume) } /* Read the volume level */ - volume_changed = (*volume != raop_rtp->volume); - *volume = raop_rtp->volume; + volume = raop_rtp->volume; + volume_changed = raop_rtp->volume_changed; + raop_rtp->volume_changed = 0; /* Read the flush value */ flush = raop_rtp->flush; @@ -288,7 +292,7 @@ raop_rtp_process_events(raop_rtp_t *raop_rtp, void *cb_data, float *volume) /* Call set_volume callback if changed */ if (volume_changed) { if (raop_rtp->callbacks.audio_set_volume) { - raop_rtp->callbacks.audio_set_volume(raop_rtp->callbacks.cls, cb_data, *volume); + raop_rtp->callbacks.audio_set_volume(raop_rtp->callbacks.cls, cb_data, volume); } } @@ -324,7 +328,6 @@ raop_rtp_thread_udp(void *arg) unsigned int packetlen; struct sockaddr_storage saddr; socklen_t saddrlen; - float volume = 0.0; const ALACSpecificConfig *config; void *cb_data = NULL; @@ -343,7 +346,7 @@ raop_rtp_thread_udp(void *arg) int nfds, ret; /* Check if we are still running and process callbacks */ - if (raop_rtp_process_events(raop_rtp, cb_data, &volume)) { + if (raop_rtp_process_events(raop_rtp, cb_data)) { break; } @@ -432,7 +435,6 @@ raop_rtp_thread_tcp(void *arg) int stream_fd = -1; unsigned char packet[RAOP_PACKET_LEN]; unsigned int packetlen = 0; - float volume = 0.0; const ALACSpecificConfig *config; void *cb_data = NULL; @@ -451,7 +453,7 @@ raop_rtp_thread_tcp(void *arg) int nfds, ret; /* Check if we are still running and process callbacks */ - if (raop_rtp_process_events(raop_rtp, cb_data, &volume)) { + if (raop_rtp_process_events(raop_rtp, cb_data)) { break; } @@ -606,6 +608,7 @@ raop_rtp_set_volume(raop_rtp_t *raop_rtp, float volume) /* Set volume in thread instead */ MUTEX_LOCK(raop_rtp->run_mutex); raop_rtp->volume = volume; + raop_rtp->volume_changed = 1; MUTEX_UNLOCK(raop_rtp->run_mutex); }