From 1ca4f2bd7940b6eac6ef1c372f948476c5f2e350 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Mon, 19 Feb 2018 16:23:22 +0100 Subject: WIP decklink --- sys/decklink/gstdecklinkvideosrc.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp index 4545cb6a3..18291efcf 100644 --- a/sys/decklink/gstdecklinkvideosrc.cpp +++ b/sys/decklink/gstdecklinkvideosrc.cpp @@ -913,8 +913,10 @@ gst_decklink_video_src_create (GstPushSrc * bsrc, GstBuffer ** buffer) vf = gst_decklink_video_format_from_type (vanc_frame->GetPixelFormat ()); GST_DEBUG_OBJECT (self, "Have ancillary data ?"); - // FIXME : restrict what vbi lines to look for depending on the format - for (fi = 1; fi < 42; fi++) { + // FIXME : We are blindly assuming that: + // 1) The first active video line is 22 + // 2) That there is only one field + for (fi = 1; fi < 22; fi++) { if (vanc_frame->GetBufferForVerticalBlankingLine (fi, (void **) &vancdata) == S_OK) { GstVideoAncillary gstanc; @@ -922,7 +924,13 @@ gst_decklink_video_src_create (GstPushSrc * bsrc, GstBuffer ** buffer) parser = gst_video_vbi_parser_new (vf, mode->width); GST_DEBUG_OBJECT (self, "Might have data on line %d", fi); gst_video_vbi_parser_add_line (parser, vancdata); - gst_video_vbi_parser_get_ancillary (parser, &gstanc); + while (gst_video_vbi_parser_get_ancillary (parser, &gstanc) == GST_VIDEO_VBI_PARSER_RESULT_OK) { + if (GST_VIDEO_ANCILLARY_DID16 (&gstanc) == GST_VIDEO_ANCILLARY_DID16_S334_EIA_708) { + GST_DEBUG_OBJECT (self, "Adding CEA-708 CDP meta to buffer"); + GST_MEMDUMP_OBJECT (self, "CDP", gstanc.data, gstanc.data_count); + gst_buffer_add_video_caption_meta (*buffer, GST_VIDEO_CAPTION_TYPE_CEA708_CDP, gstanc.data, gstanc.data_count); + } + } } } vanc_frame->Release (); -- cgit v1.2.3