From b2cc8a57d4b1f9d7d399606d194a55583b3639df Mon Sep 17 00:00:00 2001 From: Aaron Boxer Date: Thu, 28 Mar 2019 14:24:42 -0400 Subject: [PATCH] avviddec: do not add 708 caption meta if already exists (this is only used for CEA 708 raw data). another element such as mpegvideoparse may have already added the meta. --- ext/libav/gstavviddec.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c index 8c9a794..374bd9e 100644 --- a/ext/libav/gstavviddec.c +++ b/ext/libav/gstavviddec.c @@ -1598,12 +1598,35 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec, AVFrameSideData *side_data = av_frame_get_side_data (ffmpegdec->picture, AV_FRAME_DATA_A53_CC); if (side_data) { - GST_LOG_OBJECT (ffmpegdec, "Found CC of size %d", side_data->size); + GstVideoCaptionMeta *cc_meta = NULL; + gpointer iter = NULL; + gboolean found_708_raw_meta = FALSE; + + GST_LOG_OBJECT (ffmpegdec, + "Found CC side data of type AV_FRAME_DATA_A53_CC, size %d", + side_data->size); GST_MEMDUMP ("A53 CC", side_data->data, side_data->size); - out_frame->output_buffer = - gst_buffer_make_writable (out_frame->output_buffer); - gst_buffer_add_video_caption_meta (out_frame->output_buffer, - GST_VIDEO_CAPTION_TYPE_CEA708_RAW, side_data->data, side_data->size); + + while ((cc_meta = (GstVideoCaptionMeta *) + gst_buffer_iterate_meta_filtered (out_frame->input_buffer, &iter, + GST_VIDEO_CAPTION_META_API_TYPE))) { + if (cc_meta->caption_type != GST_VIDEO_CAPTION_TYPE_CEA708_RAW) + continue; + found_708_raw_meta = TRUE; + break; + } + + /* do not add CEA 708 caption meta if it already exists */ + if (!found_708_raw_meta) { + out_frame->output_buffer = + gst_buffer_make_writable (out_frame->output_buffer); + gst_buffer_add_video_caption_meta (out_frame->output_buffer, + GST_VIDEO_CAPTION_TYPE_CEA708_RAW, side_data->data, + side_data->size); + } else { + GST_LOG_OBJECT (ffmpegdec, + "CEA 708 caption meta already exists: will not add new caption meta"); + } } } -- 2.7.4