mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
restore check for compression type
This commit is contained in:
@@ -42,7 +42,7 @@ struct raop_callbacks_s {
|
||||
void (*conn_destroy)(void *cls);
|
||||
void (*audio_flush)(void *cls);
|
||||
void (*video_flush)(void *cls);
|
||||
void (*audio_get_format)(void *cls, unsigned int audioFormat);
|
||||
void (*audio_compression_type)(void *cls, unsigned char *compression_type);
|
||||
void (*audio_set_volume)(void *cls, float volume);
|
||||
void (*audio_set_metadata)(void *cls, const void *buffer, int buflen);
|
||||
void (*audio_set_coverart)(void *cls, const void *buffer, int buflen);
|
||||
|
||||
@@ -432,13 +432,12 @@ raop_handler_setup(raop_conn_t *conn,
|
||||
} case 96: {
|
||||
// Audio
|
||||
unsigned short cport = conn->raop->control_lport, dport = conn->raop->data_lport;
|
||||
|
||||
if (conn->raop->callbacks.audio_get_format) {
|
||||
/* get audio format of connection */
|
||||
uint64_t uint_val;
|
||||
plist_t audio_format_node = plist_dict_get_item(req_stream_node, "audioFormat");
|
||||
plist_get_uint_val(audio_format_node, &uint_val);
|
||||
conn->raop->callbacks.audio_get_format(conn->raop->callbacks.cls, (unsigned int) uint_val);
|
||||
uint64_t ct;
|
||||
if (conn->raop->callbacks.audio_compression_type) {
|
||||
/* get audio compression type */
|
||||
plist_t req_stream_ct_node = plist_dict_get_item(req_stream_node, "ct");
|
||||
plist_get_uint_val(req_stream_ct_node, &ct);
|
||||
conn->raop->callbacks.audio_compression_type(conn->raop->callbacks.cls, (unsigned char*) &ct);
|
||||
}
|
||||
|
||||
if (conn->raop_rtp) {
|
||||
|
||||
@@ -32,7 +32,7 @@ extern "C" {
|
||||
|
||||
typedef struct audio_renderer_s audio_renderer_t;
|
||||
|
||||
audio_renderer_t *audio_renderer_init(logger_t *logger, video_renderer_t *video_renderer, const char* audiosink);
|
||||
audio_renderer_t *audio_renderer_init(logger_t *logger, unsigned char *compression_type, const char* audiosink);
|
||||
void audio_renderer_start(audio_renderer_t *renderer);
|
||||
void audio_renderer_render_buffer(audio_renderer_t *renderer, raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts);
|
||||
void audio_renderer_set_volume(audio_renderer_t *renderer, float volume);
|
||||
|
||||
@@ -66,23 +66,21 @@ static gboolean check_plugins (void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
audio_renderer_t *audio_renderer_init(logger_t *logger, video_renderer_t *video_renderer, const char* audiosink) {
|
||||
audio_renderer_t *audio_renderer_init(logger_t *logger, unsigned char *compression_type, const char* audiosink) {
|
||||
audio_renderer_t *renderer;
|
||||
GError *error = NULL;
|
||||
GstCaps *caps = NULL;
|
||||
|
||||
|
||||
//logger_log(logger, LOGGER_INFO , "audio_renderer_init: compression_type ct = %d", *compression_type);
|
||||
|
||||
int ct = 8;
|
||||
int *compression_type = &ct;
|
||||
|
||||
|
||||
switch (*compression_type) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 4:
|
||||
case 8:
|
||||
break;
|
||||
case 1: /* uncompressed PCM */
|
||||
case 2: /* Apple lossless ALAC */
|
||||
case 4: /* AAC-LC */
|
||||
case 8: /* AAC-ELD */
|
||||
logger_log(logger, LOGGER_INFO , "audio_renderer_init: compression_type ct = %d", *compression_type);
|
||||
break;
|
||||
default:
|
||||
logger_log(logger, LOGGER_ERR, "audio_renderer_init: unsupported compression_type ct = %d", *compression_type);
|
||||
return NULL;
|
||||
|
||||
35
uxplay.cpp
35
uxplay.cpp
@@ -60,6 +60,8 @@ static bool connections_stopped = false;
|
||||
static unsigned int server_timeout = 0;
|
||||
static unsigned int counter;
|
||||
static bool use_video = true;
|
||||
static unsigned char compression_type = 8;
|
||||
|
||||
|
||||
gboolean connection_callback (gpointer loop){
|
||||
if (!connections_stopped) {
|
||||
@@ -464,26 +466,7 @@ extern "C" void audio_set_volume (void *cls, float volume) {
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void audio_get_format (void *cls, unsigned int audioFormat) {
|
||||
const char * audio_format;
|
||||
switch (audioFormat) {
|
||||
case 0x1000000:
|
||||
audio_format = "AAC_ELD";
|
||||
break;
|
||||
case 0x40000:
|
||||
audio_format = "ALAC";
|
||||
break;
|
||||
case 0x400000:
|
||||
audio_format = "AAC";
|
||||
break;
|
||||
case 0x0:
|
||||
audio_format = "PCM";
|
||||
break;
|
||||
default:
|
||||
audio_format = "UNKNOWN";
|
||||
break;
|
||||
}
|
||||
printf("new audio connection with audio format 0x%X %s\n", audioFormat, audio_format);
|
||||
extern "C" void audio_compression_type (void *cls, unsigned char *ct) {
|
||||
}
|
||||
|
||||
extern "C" void log_callback (void *cls, int level, const char *msg) {
|
||||
@@ -522,7 +505,7 @@ int start_server (std::vector<char> hw_addr, std::string name, unsigned short di
|
||||
raop_cbs.audio_flush = audio_flush;
|
||||
raop_cbs.video_flush = video_flush;
|
||||
raop_cbs.audio_set_volume = audio_set_volume;
|
||||
raop_cbs.audio_get_format = audio_get_format;
|
||||
raop_cbs.audio_compression_type = audio_compression_type;
|
||||
|
||||
raop = raop_init(10, &raop_cbs);
|
||||
if (raop == NULL) {
|
||||
@@ -567,7 +550,7 @@ int start_server (std::vector<char> hw_addr, std::string name, unsigned short di
|
||||
|
||||
if (! use_audio) {
|
||||
LOGI("Audio disabled");
|
||||
} else if ((audio_renderer = audio_renderer_init(render_logger, video_renderer, audiosink.c_str())) ==
|
||||
} else if ((audio_renderer = audio_renderer_init(render_logger, &compression_type, audiosink.c_str())) ==
|
||||
NULL) {
|
||||
LOGE("Could not init audio renderer");
|
||||
stop_server();
|
||||
@@ -604,9 +587,11 @@ int start_server (std::vector<char> hw_addr, std::string name, unsigned short di
|
||||
|
||||
int stop_server () {
|
||||
if (raop) raop_destroy(raop);
|
||||
if (dnssd) dnssd_unregister_raop(dnssd);
|
||||
if (dnssd) dnssd_unregister_airplay(dnssd);
|
||||
if (dnssd) dnssd_destroy(dnssd);
|
||||
if (dnssd) {
|
||||
dnssd_unregister_raop(dnssd);
|
||||
dnssd_unregister_airplay(dnssd);
|
||||
dnssd_destroy(dnssd);
|
||||
}
|
||||
if (audio_renderer) audio_renderer_destroy(audio_renderer);
|
||||
if (video_renderer) video_renderer_destroy(video_renderer);
|
||||
if (render_logger) logger_destroy(render_logger);
|
||||
|
||||
Reference in New Issue
Block a user