From 590597091763c057e42c735745c38011281c4616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Thu, 16 Feb 2017 18:37:59 +0100 Subject: [PATCH] vaapiencode: merge tags for downstream's info Add encoder and codec name and the bitrate into the output for informational purposes. Some muxers or application use it as media metadata. https://bugzilla.gnome.org/show_bug.cgi?id=778781 --- gst/vaapi/gstvaapiencode.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/gst/vaapi/gstvaapiencode.c b/gst/vaapi/gstvaapiencode.c index 61f0fbe4b6..dd609014d1 100644 --- a/gst/vaapi/gstvaapiencode.c +++ b/gst/vaapi/gstvaapiencode.c @@ -537,6 +537,7 @@ static gboolean gst_vaapiencode_set_format (GstVideoEncoder * venc, GstVideoCodecState * state) { GstVaapiEncode *const encode = GST_VAAPIENCODE_CAST (venc); + gboolean ret; g_return_val_if_fail (state->caps != NULL, FALSE); @@ -552,8 +553,39 @@ gst_vaapiencode_set_format (GstVideoEncoder * venc, GstVideoCodecState * state) encode->input_state = gst_video_codec_state_ref (state); encode->input_state_changed = TRUE; - return gst_pad_start_task (GST_VAAPI_PLUGIN_BASE_SRC_PAD (encode), + ret = gst_pad_start_task (GST_VAAPI_PLUGIN_BASE_SRC_PAD (encode), (GstTaskFunction) gst_vaapiencode_buffer_loop, encode, NULL); + + if (!ret) + return FALSE; + + /* Store some tags */ + { + GstTagList *tags = gst_tag_list_new_empty (); + const gchar *encoder, *codec; + guint bitrate = 0; + + g_object_get (encode, "bitrate", &bitrate, NULL); + gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_NOMINAL_BITRATE, + bitrate, NULL); + + if ((encoder = + gst_element_class_get_metadata (GST_ELEMENT_GET_CLASS (encode), + GST_ELEMENT_METADATA_LONGNAME))) + gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, encoder, + NULL); + + if ((codec = + gst_vaapi_codec_get_name (gst_vaapi_profile_get_codec + (gst_vaapi_profile_from_caps (state->caps))))) + gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_CODEC, codec, + NULL); + + gst_video_encoder_merge_tags (venc, tags, GST_TAG_MERGE_REPLACE); + gst_tag_list_unref (tags); + } + + return TRUE; } static GstFlowReturn