summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2018-11-01 17:59:17 +0200
committerSebastian Dröge <sebastian@centricular.com>2018-11-01 19:21:47 +0200
commit3d8a0b8996bd540b9d23b42713b9fed6edaafd11 (patch)
tree6c504d2784bf0de1b905272a5b6534b1df1c1cc5 /sys
parentdcad6d10315b4e34924542c90d59da1e6e18c1b5 (diff)
downloadgstreamer-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.cpp41
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;
}
}