summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2018-02-19 16:23:22 +0100
committerEdward Hervey <bilboed@bilboed.com>2018-03-06 14:47:02 +0100
commit1ca4f2bd7940b6eac6ef1c372f948476c5f2e350 (patch)
tree825e07b543ec44101b2d9a0b537f890d97d64eea
parent29f58d9db05b4008478252b41c0c17d6fd39b037 (diff)
WIP decklink
-rw-r--r--sys/decklink/gstdecklinkvideosrc.cpp14
1 files 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 ();