mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +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 */
|
#define NCODECS 3 /* renderers for h264,h265, and jpeg images */
|
||||||
|
|
||||||
struct video_renderer_s {
|
struct video_renderer_s {
|
||||||
GstElement *appsrc, *pipeline;
|
GstElement *appsrc, *pipeline, *textsrc;
|
||||||
GstBus *bus;
|
GstBus *bus;
|
||||||
const char *codec;
|
const char *codec;
|
||||||
bool autovideo;
|
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]->id = i;
|
||||||
renderer_type[i]->bus = NULL;
|
renderer_type[i]->bus = NULL;
|
||||||
renderer_type[i]->appsrc = NULL;
|
renderer_type[i]->appsrc = NULL;
|
||||||
|
renderer_type[i]->textsrc = NULL;
|
||||||
renderer_type[i]->uri = NULL;
|
renderer_type[i]->uri = NULL;
|
||||||
renderer_type[i]->eos = FALSE;
|
renderer_type[i]->eos = FALSE;
|
||||||
if (hls_video) {
|
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, " ! ");
|
||||||
g_string_append(launch, "videoscale ! ");
|
g_string_append(launch, "videoscale ! ");
|
||||||
if (jpeg_pipeline) {
|
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, videosink);
|
||||||
g_string_append(launch, " name=");
|
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);
|
g_string_free(launch, TRUE);
|
||||||
gst_caps_unref(caps);
|
gst_caps_unref(caps);
|
||||||
gst_object_unref(clock);
|
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
|
#ifdef X_DISPLAY_FIX
|
||||||
use_x11 = (strstr(videosink, "xvimagesink") || strstr(videosink, "ximagesink") || auto_videosink);
|
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) {
|
void video_renderer_set_track_metadata(const char *title, const char *artist, const char *album) {
|
||||||
// Track metadata display not supported in GStreamer renderer
|
// Track metadata display superimposed on coverart is now supported in GStreamer renderer
|
||||||
(void)title;
|
GString *metadata = g_string_new("");
|
||||||
(void)artist;
|
if (artist) {
|
||||||
(void)album;
|
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) {
|
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);
|
gst_object_unref (renderer->appsrc);
|
||||||
renderer->appsrc = NULL;
|
renderer->appsrc = NULL;
|
||||||
}
|
}
|
||||||
|
if (renderer->textsrc) {
|
||||||
|
gst_object_unref (renderer->textsrc);
|
||||||
|
renderer->textsrc = NULL;
|
||||||
|
}
|
||||||
gst_object_unref(renderer->bus);
|
gst_object_unref(renderer->bus);
|
||||||
gst_object_unref(renderer->pipeline);
|
gst_object_unref(renderer->pipeline);
|
||||||
#ifdef X_DISPLAY_FIX
|
#ifdef X_DISPLAY_FIX
|
||||||
|
|||||||
Reference in New Issue
Block a user