mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
option -ad n to add delay n millisec to ALAC streams (undocumented)
This commit is contained in:
@@ -30,7 +30,7 @@ extern "C" {
|
||||
#include "../lib/raop_ntp.h"
|
||||
|
||||
bool gstreamer_init();
|
||||
void audio_renderer_init(logger_t *logger, const char* audiosink);
|
||||
void audio_renderer_init(logger_t *logger, const char* audiosink, const char* audiodelay);
|
||||
void audio_renderer_start(unsigned char* compression_type);
|
||||
void audio_renderer_stop();
|
||||
void audio_renderer_render_buffer(raop_ntp_t *ntp, unsigned char* data, int data_len,
|
||||
|
||||
@@ -80,7 +80,7 @@ static audio_renderer_t *renderer = NULL;
|
||||
static logger_t *logger = NULL;
|
||||
const char * format[NFORMATS];
|
||||
|
||||
void audio_renderer_init(logger_t *render_logger, const char* audiosink) {
|
||||
void audio_renderer_init(logger_t *render_logger, const char* audiosink, const char* audio_delay) {
|
||||
GError *error = NULL;
|
||||
GstCaps *caps = NULL;
|
||||
logger = render_logger;
|
||||
@@ -89,14 +89,19 @@ void audio_renderer_init(logger_t *render_logger, const char* audiosink) {
|
||||
renderer_type[i] = (audio_renderer_t *) calloc(1,sizeof(audio_renderer_t));
|
||||
g_assert(renderer_type[i]);
|
||||
GString *launch = g_string_new("appsrc name=audio_source ! ");
|
||||
g_string_append(launch, "queue ! ");
|
||||
g_string_append(launch, "queue ");
|
||||
switch (i) {
|
||||
case 0: /* AAC-ELD */
|
||||
case 2: /* AAC-LC */
|
||||
g_string_append(launch, "avdec_aac ! ");
|
||||
g_string_append(launch, "! avdec_aac ! ");
|
||||
break;
|
||||
case 1: /* ALAC */
|
||||
g_string_append(launch, "avdec_alac ! ");
|
||||
if (audio_delay[0]) {
|
||||
g_string_append(launch, "min-threshold-time=");
|
||||
g_string_append(launch, audio_delay);
|
||||
g_string_append(launch, "000000 ");
|
||||
}
|
||||
g_string_append(launch, "! avdec_alac ! ");
|
||||
break;
|
||||
case 3: /*PCM*/
|
||||
break;
|
||||
@@ -113,7 +118,7 @@ void audio_renderer_init(logger_t *render_logger, const char* audiosink) {
|
||||
g_error ("gst_parse_launch error (audio %d):\n %s\n", i+1, error->message);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
g_string_free(launch, TRUE);
|
||||
|
||||
g_assert (renderer_type[i]->pipeline);
|
||||
|
||||
renderer_type[i]->appsrc = gst_bin_get_by_name (GST_BIN (renderer_type[i]->pipeline), "audio_source");
|
||||
@@ -142,7 +147,9 @@ void audio_renderer_init(logger_t *render_logger, const char* audiosink) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
logger_log(logger, LOGGER_DEBUG, "supported audio format %d: %s",i+1,format[i]);
|
||||
logger_log(logger, LOGGER_DEBUG, "Audio format %d: %s",i+1,format[i]);
|
||||
logger_log(logger, LOGGER_DEBUG, "GStreamer audio pipeline %d: \"%s\"", i+1, launch->str);
|
||||
g_string_free(launch, TRUE);
|
||||
g_object_set(renderer_type[i]->appsrc, "caps", caps, "stream-type", 0, "is-live", TRUE, "format", GST_FORMAT_TIME, NULL);
|
||||
gst_caps_unref(caps);
|
||||
}
|
||||
|
||||
19
uxplay.cpp
19
uxplay.cpp
@@ -73,6 +73,7 @@ static videoflip_t videoflip[2] = { NONE , NONE };
|
||||
static bool use_video = true;
|
||||
static unsigned char compression_type = 0;
|
||||
static std::string audiosink = "autoaudiosink";
|
||||
static std::string audiodelay = "";
|
||||
static bool use_audio = true;
|
||||
static bool new_window_closing_behavior = true;
|
||||
static bool close_window;
|
||||
@@ -735,6 +736,19 @@ static void parse_arguments (int argc, char *argv[]) {
|
||||
bt709_fix = true;
|
||||
} else if (arg == "-nohold") {
|
||||
max_connections = 3;
|
||||
} else if (arg == "-ad") {
|
||||
if (i < argc - 1 && *argv[i+1] != '-') {
|
||||
unsigned int n = 0;
|
||||
if (get_value (argv[++i], &n)) {
|
||||
audiodelay.erase();
|
||||
if (n > 0) {
|
||||
audiodelay = argv[i];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LOGE("option -ad must be followed by a positive time delay in millisecs");
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
LOGE("unknown option %s, stopping\n",argv[i]);
|
||||
exit(1);
|
||||
@@ -1259,7 +1273,10 @@ int main (int argc, char *argv[]) {
|
||||
logger_set_level(render_logger, debug_log ? LOGGER_DEBUG : LOGGER_INFO);
|
||||
|
||||
if (use_audio) {
|
||||
audio_renderer_init(render_logger, audiosink.c_str());
|
||||
if (audiodelay.c_str()[0]) {
|
||||
LOGI("Audio-only ALAC streams will be delayed by %s millisecs", audiodelay.c_str());
|
||||
}
|
||||
audio_renderer_init(render_logger, audiosink.c_str(), audiodelay.c_str());
|
||||
} else {
|
||||
LOGI("audio_disabled");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user