X-Git-Url: https://git.piment-noir.org/?p=deb_shairplay.git;a=blobdiff_plain;f=src%2Flib%2Fraop_rtp.c;h=1896e160b562c50e1b67081cb65c1950c86165fe;hp=3c7c17745bfd551726bdff1d2688a45273349654;hb=3baaba9d370042e04c70653d46e18bc289d83269;hpb=e66980f2bba24986245c30f481ceee6d977d65b9 diff --git a/src/lib/raop_rtp.c b/src/lib/raop_rtp.c index 3c7c177..1896e16 100644 --- a/src/lib/raop_rtp.c +++ b/src/lib/raop_rtp.c @@ -39,13 +39,21 @@ struct raop_rtp_s { struct sockaddr_storage remote_saddr; socklen_t remote_saddr_len; + /* MUTEX LOCKED VARIABLES START */ /* These variables only edited mutex locked */ int running; int joined; + float volume; + unsigned char *metadata; + int metadata_len; + unsigned char *coverart; + int coverart_len; + int flush; thread_handle_t thread; mutex_handle_t run_mutex; + /* MUTEX LOCKED VARIABLES END */ /* Remote control and timing ports */ unsigned short control_rport; @@ -153,6 +161,8 @@ raop_rtp_destroy(raop_rtp_t *raop_rtp) MUTEX_DESTROY(raop_rtp->run_mutex); raop_buffer_destroy(raop_rtp->buffer); + free(raop_rtp->metadata); + free(raop_rtp->coverart); free(raop_rtp); } } @@ -560,6 +570,48 @@ raop_rtp_set_volume(raop_rtp_t *raop_rtp, float volume) MUTEX_UNLOCK(raop_rtp->run_mutex); } +void +raop_rtp_set_metadata(raop_rtp_t *raop_rtp, const char *data, int datalen) +{ + unsigned char *metadata; + + assert(raop_rtp); + + if (datalen <= 0) { + return; + } + metadata = malloc(datalen); + assert(metadata); + memcpy(metadata, data, datalen); + + /* Set metadata in thread instead */ + MUTEX_LOCK(raop_rtp->run_mutex); + raop_rtp->metadata = metadata; + raop_rtp->metadata_len = datalen; + MUTEX_UNLOCK(raop_rtp->run_mutex); +} + +void +raop_rtp_set_coverart(raop_rtp_t *raop_rtp, const char *data, int datalen) +{ + unsigned char *coverart; + + assert(raop_rtp); + + if (datalen <= 0) { + return; + } + coverart = malloc(datalen); + assert(coverart); + memcpy(coverart, data, datalen); + + /* Set coverart in thread instead */ + MUTEX_LOCK(raop_rtp->run_mutex); + raop_rtp->coverart = coverart; + raop_rtp->coverart_len = datalen; + MUTEX_UNLOCK(raop_rtp->run_mutex); +} + void raop_rtp_flush(raop_rtp_t *raop_rtp, int next_seq) {