mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-13 15:54:09 +09:00
overlay artist:title metadata on coverart in -ca audio mode
This commit is contained in:
@@ -77,7 +77,7 @@ typedef enum {
|
||||
#define NCODECS 3 /* renderers for h264,h265, and jpeg images */
|
||||
|
||||
struct video_renderer_s {
|
||||
GstElement *appsrc, *pipeline;
|
||||
GstElement *appsrc, *pipeline, *textsrc;
|
||||
GstBus *bus;
|
||||
const char *codec;
|
||||
bool autovideo;
|
||||
@@ -278,6 +278,7 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, video
|
||||
renderer_type[i]->id = i;
|
||||
renderer_type[i]->bus = NULL;
|
||||
renderer_type[i]->appsrc = NULL;
|
||||
renderer_type[i]->textsrc = NULL;
|
||||
renderer_type[i]->uri = NULL;
|
||||
renderer_type[i]->eos = FALSE;
|
||||
if (hls_video) {
|
||||
@@ -350,7 +351,7 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, video
|
||||
g_string_append(launch, " ! ");
|
||||
g_string_append(launch, "videoscale ! ");
|
||||
if (jpeg_pipeline) {
|
||||
g_string_append(launch, " imagefreeze allow-replace=TRUE ! ");
|
||||
g_string_append(launch, " imagefreeze allow-replace=TRUE ! textoverlay name=metadata_overlay ! ");
|
||||
}
|
||||
g_string_append(launch, videosink);
|
||||
g_string_append(launch, " name=");
|
||||
@@ -402,6 +403,10 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, video
|
||||
g_string_free(launch, TRUE);
|
||||
gst_caps_unref(caps);
|
||||
gst_object_unref(clock);
|
||||
if (jpeg_pipeline) {
|
||||
renderer_type[i]->textsrc = gst_bin_get_by_name(GST_BIN(renderer_type[i]->pipeline), "metadata_overlay");
|
||||
g_object_set(G_OBJECT(renderer_type[i]->textsrc), "text", "", "shaded-background", TRUE, "font-desc", "Sans, 16", NULL);
|
||||
}
|
||||
}
|
||||
#ifdef X_DISPLAY_FIX
|
||||
use_x11 = (strstr(videosink, "xvimagesink") || strstr(videosink, "ximagesink") || auto_videosink);
|
||||
@@ -664,10 +669,23 @@ void video_renderer_set_device_model(const char *model, const char *name) {
|
||||
}
|
||||
|
||||
void video_renderer_set_track_metadata(const char *title, const char *artist, const char *album) {
|
||||
// Track metadata display not supported in GStreamer renderer
|
||||
(void)title;
|
||||
(void)artist;
|
||||
(void)album;
|
||||
// Track metadata display superimposed on coverart is now supported in GStreamer renderer
|
||||
GString *metadata = g_string_new("");
|
||||
if (artist) {
|
||||
g_string_append(metadata, artist);
|
||||
}
|
||||
if (artist && title) {
|
||||
g_string_append(metadata, ": ");
|
||||
}
|
||||
if (title) {
|
||||
g_string_append(metadata, "\"");
|
||||
g_string_append(metadata, title);
|
||||
g_string_append(metadata, "\"");
|
||||
}
|
||||
if (renderer && renderer->textsrc && (artist || title)) {
|
||||
g_object_set(G_OBJECT(renderer->textsrc), "text", metadata->str, NULL);
|
||||
}
|
||||
g_string_free(metadata, TRUE);
|
||||
}
|
||||
|
||||
static void video_renderer_destroy_instance(video_renderer_t *renderer) {
|
||||
@@ -691,6 +709,10 @@ static void video_renderer_destroy_instance(video_renderer_t *renderer) {
|
||||
gst_object_unref (renderer->appsrc);
|
||||
renderer->appsrc = NULL;
|
||||
}
|
||||
if (renderer->textsrc) {
|
||||
gst_object_unref (renderer->textsrc);
|
||||
renderer->textsrc = NULL;
|
||||
}
|
||||
gst_object_unref(renderer->bus);
|
||||
gst_object_unref(renderer->pipeline);
|
||||
#ifdef X_DISPLAY_FIX
|
||||
|
||||
Reference in New Issue
Block a user