diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2018-11-01 17:59:17 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2018-11-01 19:21:47 +0200 |
commit | 3d8a0b8996bd540b9d23b42713b9fed6edaafd11 (patch) | |
tree | 6c504d2784bf0de1b905272a5b6534b1df1c1cc5 /sys | |
parent | dcad6d10315b4e34924542c90d59da1e6e18c1b5 (diff) | |
download | gstreamer-plugins-bad-3d8a0b8996bd540b9d23b42713b9fed6edaafd11.tar.gz |
decklinkvideosrc: Add support for extracing CEA608 according to S334-1 Annex A
https://bugzilla.gnome.org/show_bug.cgi?id=797363
Diffstat (limited to 'sys')
-rw-r--r-- | sys/decklink/gstdecklinkvideosrc.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp index deda24a8b..0fdcbd4bd 100644 --- a/sys/decklink/gstdecklinkvideosrc.cpp +++ b/sys/decklink/gstdecklinkvideosrc.cpp @@ -836,18 +836,37 @@ extract_cc_from_vbi (GstDecklinkVideoSrc * self, GstBuffer ** buffer, while (gst_video_vbi_parser_get_ancillary (self->vbiparser, &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 for line %d", fi); - 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); - found = TRUE; - self->last_cc_vbi_line = fi; - break; + switch (GST_VIDEO_ANCILLARY_DID16 (&gstanc)) { + case GST_VIDEO_ANCILLARY_DID16_S334_EIA_708: + GST_DEBUG_OBJECT (self, + "Adding CEA-708 CDP meta to buffer for line %d", fi); + 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); + + break; + case GST_VIDEO_ANCILLARY_DID16_S334_EIA_608: + GST_DEBUG_OBJECT (self, + "Adding CEA-608 meta to buffer for line %d", fi); + GST_MEMDUMP_OBJECT (self, "CEA608", gstanc.data, gstanc.data_count); + /* The first byte actually contains the field and line offset but + * for CEA608-in-CEA708 we can't store the line offset, and it's + * generally not needed + */ + gstanc.data[0] = (gstanc.data[0] & 0x80) ? 0xFD : 0xFC; + gst_buffer_add_video_caption_meta (*buffer, + GST_VIDEO_CAPTION_TYPE_CEA608_IN_CEA708_RAW, gstanc.data, + gstanc.data_count); + break; + default: + /* otherwise continue looking */ + continue; } + + found = TRUE; + self->last_cc_vbi_line = fi; + break; } } |