Commit graph

72 commits

Author SHA1 Message Date
Matthew Waters
12edc0d9b8 ccconverter: implement discont handling
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
ba1558a7ab ccconverter: use a better padding byte sequence for writing cdp
0xf8 can be interpreted as cea608 data at the beginning of a cdp packet
as the cc_valid bit is not checked when cc_valid in (0b00 or 0b01).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
7ed0bc539f ccconverter: split temporary storage into 3
Instead of storing the raw cc_data, store the 2 cea608 fields individually
as well as the ccp data.

Simply copying the input cc_data to the output cc_data violates a number of
requirements in the cea708 specification.  The most prominent being, that
cea608 triples must be placed at the beginning of each cdp.

We also need to comply with the framerate-dpendent limits for both the
cea608 and the ccp data which may involve splitting or merging some
cea608 data but not ccp data or vice versa.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
3417a1709c ccconvert: compact input cc_data where possible
Skip over padding cc_data triples.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
7d028af675 ccconverter: implement support for CDP framerate conversions
- Any format involving CDP is supported.
- Time codes (if present) are scaled as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
75503017c2 ccconverter: introduce define for max cdp packet length
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
44c874fd9e ccconverter: don't rely on external state in *_internal()
This allows using the _internal() variants for simply converting some
caption data without relying on any external state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
31a0bf367d ccconverter: cc_count limits are per framerate
Enforce this and add a test for cdp input being too large.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
b25d75f201 ccconverter: refactor cdp id, fps, max_cc_count into a table
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Matthew Waters
afc120fa74 ccconverter: pivot to implementing generate_output
Will make a n-n buffer element much easier to implement.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1116>
2020-05-11 12:30:31 +00:00
Mathieu Duponchelle
62d1a3a143 cccombiner: don't drop buffers on video timestamp discontinuities
If we receive video buffers with non-perfect timestamps, the
caption buffers' timestamps might fall in the interval between
the end of one video buffer and the start of the next one.

Make our criteria for dropping that the caption buffer has
a timestamp older than the end of the previous video buffer,
not older than the start of the new one, unless of course
this is the first video buffer.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1207>
2020-04-24 08:47:50 +00:00
Mathieu Duponchelle
f02300eef5 cccombiner: handle gap buffers adequately
- Don't try to map them as actual CC data, that was raising
  a critical

- Consume video buffers up to the end of the gap

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1207>
2020-04-24 08:47:50 +00:00
Sebastian Dröge
0478e2dc1a ccconverter: Fill remainder of the cc_data in CDP packets with empty packets
Instead of filling it completely with zeroes. Filling with zeroes is
considered invalid by various CC implementations.
2020-01-24 09:26:28 +00:00
Olivier Crête
fad9096647 Revert "ccextractor: support new CEA 608 formats"
This reverts commit 80dd7b2d3d.
2019-12-17 16:43:54 -05:00
Aaron Boxer
80dd7b2d3d ccextractor: support new CEA 608 formats 2019-12-17 18:26:35 +00:00
Aaron Boxer
6d3429af34 documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
Sebastian Dröge
f6b4e24f72 ccconverter: Instead of erroring out on too big input drop additional data 2019-11-04 13:43:25 +00:00
Sebastian Dröge
d8372736c6 ccextractor: Remove unused set/get_property() functions 2019-10-28 13:40:16 +02:00
Sebastian Dröge
8aca7f2056 ccextractor: Always forward all sticky events to the caption pad
And only update the caps and stream-start event accordingly. This
ensures that we'll always forward sticky events that arrive after the
caption pad was created, and especially updates to existing sticky
events like the segment event.

Also create a proper stream id based on the upstream stream id for the
stream-start event, and make sure that all the sticky events we know are
already on the caption pad at the time it is added to the element.
2019-10-28 13:40:16 +02:00
Tim-Philipp Müller
f218ec2794 Remove autotools build system 2019-10-14 13:54:27 +01:00
Sebastian Dröge
92dd72b7ee cccombiner: Make use of new GstAggregator::negotiate()
Simplifies the caps handling code considerably here and removes some
spurious negotiation.
2019-08-14 17:37:59 +00:00
Sebastian Dröge
dad6e51165 cccombiner: Proxy POSITION/DURATION/URI/CAPS/ALLOCATION queries between video sinkpad and source pad
We pass-through the video as is, only putting a GstMeta on it from the
caption sinkpad.

This fixes negotation problems caused by not passing through caps
queries in both directions.

Also handle CAPS/ACCEPT_CAPS queries directly for the caption pad
instead of proxying.
2019-07-09 14:11:34 +00:00
Tim-Philipp Müller
7853700b50 meson: add more plugins to plugins list
Makes sure their path gets added to the uninstalled environment
and makes sure they get included in the docs.
2019-05-30 20:41:57 +02:00
Mathieu Duponchelle
da6afdec9c doc: remove xml from comments 2019-05-29 22:58:08 +02:00
Thibault Saunier
7fe3f36ac8 Minor documentation fixes 2019-05-13 11:36:27 -04:00
Aaron Boxer
8d4ce1e853 ccextractor: copy input buffer flags to output buffer
GST_VIDEO_BUFFER_FLAG_INTERLACED and GST_VIDEO_BUFFER_FLAG_TFF
flags are needed when processing SCTE 20 closed captions for an interlaced
stream, when we need to convert back to analog, in which case we need to match
the caption to the top or bottom field
2019-05-02 15:46:15 +00:00
Aaron Boxer
f3e7469094 ccextractor: document importance of pipeline order for this element 2019-04-09 11:28:33 -04:00
Aaron Boxer
c41617b9a2 cea708decoder: use correct mask for font style
First three bits are used for font style, so mask
should be 0111 rather than 011 (in binary)
2019-04-09 07:52:56 +00:00
Josep Torra
dbef8c43e8 closedcaption: fix build error in OSX
Fixes the following error.

gstccconverter.c:677:7: error: variable 'len' is used uninitialized whenever 'if' condition is false
      [-Werror,-Wsometimes-uninitialized]
  if (flags & 0x40) {
      ^~~~~~~~~~~~
gstccconverter.c:698:10: note: uninitialized use occurs here
  return len;
         ^~~
gstccconverter.c:677:3: note: remove the 'if' if its condition is always true
  if (flags & 0x40) {
  ^~~~~~~~~~~~~~~~~~
gstccconverter.c:572:12: note: initialize the variable 'len' to silence this warning
  guint len;
           ^
            = 0
2019-03-25 18:28:55 +01:00
Josep Torra
e73280782c closedcaption: fix build error in OSX
Fixes the following error by commenting an unused block.

./misc.h:503:11: error: 'strlcpy' macro redefined [-Werror,-Wmacro-redefined]
2019-03-25 18:28:55 +01:00
Mathieu Duponchelle
17343aa3be cccombiner: improve behaviour on timeout
Prior to this, cccombiner stopped consuming video buffers when
data wasn't arriving on its caption pad. In a live situation,
when aggregator is timing out we should still output whatever
video buffers are present, even if no caption buffers can be
aggregated with them.
2019-03-13 13:50:29 +01:00
Nirbheek Chauhan
4430fa0e3e closedcaption: Fix build with Visual Studio
../ext/closedcaption/io-sim.c(440): error C2065: 'M_PI': undeclared identifier
../ext/closedcaption/io-sim.c(442): error C2065: 'M_LN2': undeclared identifier
2019-03-11 15:02:53 +05:30
Tim-Philipp Müller
92e5c5a85a closedcaption: cea708decoder: fix some memory leaks 2019-03-08 01:18:39 +00:00
Tim-Philipp Müller
6dad8b7c78 closedcaption: fix leak in line21 decoder
Destroy old decoder instance when shutting down the
element, and also in case the input format changes.

Fix harness/pipeline leak in unit test.
2019-03-08 01:18:39 +00:00
Mathieu Duponchelle
919cd44f47 line21dec: general cleanup
This ports over the review comments made on line21enc in !217
2019-03-06 11:29:20 +01:00
Mathieu Duponchelle
156865541f closedcaption: add line21 encoder
This element acts as a counterpart of line21encoder.

Also adds a simple test validating each element using the
other.
2019-03-06 11:29:20 +01:00
Mathieu Duponchelle
fa8134ed11 Check in vbi encoder 2019-03-06 10:32:43 +01:00
Mathieu Duponchelle
74d281fbc2 cccombiner: implement update_src_caps
It is necessary to implement this vmethod, as when the src pad
is marked as reconfigure, the base class will reset to src caps,
and the default update_src_caps simply queries the caps allowed
downstream without taking into account the caps set by
gst_aggregator_set_src_caps.
2019-02-28 17:03:33 +00:00
Mathieu Duponchelle
daaa1c3aa8 ccconverter: fix typo in framerate 2019-02-21 23:51:39 +01:00
Nirbheek Chauhan
81fd48bcb5 closedcaption: Use portable variadic macro syntax
args... is not understood by MSVC:

error C2010: '.': unexpected in macro parameter list
2019-02-15 23:50:11 +05:30
Nirbheek Chauhan
a4323638b3 closedcaption: Port plugin to MSVC
pthread is not portable, so we can't use a pthread mutex use GMutex
instead.
2019-02-15 23:39:35 +05:30
Sebastian Dröge
8006979109 ccconverter: Don't output empty buffers 2019-02-12 14:38:40 +02:00
Sebastian Dröge
39381643c8 closedcaption: Add ccconverter element that can convert between different types of Closed Caption formats 2018-12-19 00:19:39 +02:00
Sebastian Dröge
aa72783b95 closedcaption: Use new API for converting GstVideoCaptionType from/to GstCaps 2018-12-15 21:31:28 +00:00
Sebastian Dröge
48f48cc4ba closedcaption: Replace GST_VIDEO_CAPTION_TYPE_CEA608_IN_CEA708_RAW with CEA608_S334_1A
As a side-effect we can now actually store the line offset in the
line21dec element, and have to perform fewer transformations in the
decklink elements (which were also buggy as they assumed a single byte
triplet per meta).
2018-12-15 21:31:28 +00:00
Sebastian Dröge
f9e4ed99b0 line21dec: If CCs are not found at the previous line, reset and search from the beginning again 2018-12-15 21:31:28 +00:00
Sebastian Dröge
36ba1e80b6 line21dec: Don't read more lines than the height of the frame 2018-12-15 21:31:28 +00:00
Sebastian Dröge
98b2c705c4 ccextractor: Copy over timecode meta from the input buffers to the outgoing caption buffers
Formats like SCC and MCC work based on timecodes so ideally we pass
through the timecodes when writing them.
2018-12-06 16:06:05 +00:00
Sebastian Dröge
f0571a94fb ccextractor: Include framerate in the closedcaption caps
It depends on the framerate how many cc_data byte pairs are allowed per
frame, and the framerate is also needed for converting into the CDP or
MCC format as the framerate is part of the header metadata.
2018-12-06 16:06:05 +00:00
Tim-Philipp Müller
4f935e1e7f cc708overlay: fix deadlock
We would forget to unlock when a caption data buffer is deemed
out of segment, which makes everything lock up next time buffers
are received.
2018-11-29 11:24:39 +00:00