Commit graph

107 commits

Author SHA1 Message Date
Sebastian Dröge d0466b3eee closedcaption/mccenc: Fix unit test 2021-08-31 08:49:18 +03:00
Sebastian Dröge 75327b72fa Update versions to 0.7.2 2021-08-30 19:38:37 +03:00
Sebastian Dröge 4e0c3374bd Update various dependencies 2021-08-30 12:47:08 +03:00
Sebastian Dröge 089abdb5d4 Add capi feature to all plugin crates
This fixes the build with cargo-c 0.9.2.
2021-08-12 12:06:30 +03:00
Sebastian Dröge 39c1d4dd21 closedcaption/mccenc: Fix unit test again 2021-08-10 08:23:26 +03:00
Sebastian Dröge 0af7a0c913 Update versions to 0.7.1 2021-08-05 18:12:54 +03:00
Mathieu Duponchelle 2092059f71 tttocea608: clean up locking
Locking order of state and settings was inconsistent, and causing
deadlocks. Fix and document it, consistently drop locks before
chaining up events / pushing and avoid sequentially unlocking /
relocking settings in the same local code path.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/539>
2021-08-05 15:57:56 +03:00
Mathieu Duponchelle 1372ffe0e1 transcriberbin: remove leftover debug dot dumps
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/531>
2021-08-05 15:50:01 +03:00
Sebastian Dröge afdd000d92 Fix various needless-borrow clippy warnings and others 2021-08-05 14:43:08 +03:00
Sebastian Dröge 3b9a680338 closedcaption/mccenc: Fix unit test
The expected output contains the plugin version.
2021-07-09 14:14:14 +03:00
Sebastian Dröge 2a15127368 Update gst-plugin-version-helper dependency with the correct version 2021-07-09 13:46:10 +03:00
Sebastian Dröge 2ac4f9896d Update versions to 0.7.0 2021-07-09 13:43:29 +03:00
Sebastian Dröge 686196f885 Update crate dependencies from git to released versions 2021-07-02 12:16:59 +03:00
Mathieu Duponchelle 3cdc5870a1 transcriberbin: new high-level bin for speech to Closed Caption
This new element puts together some of the elements we've written
in recent times (awstranscriber, tttocea608, textwrap, cccombiner)
into a convenience high-level element.

The design of the element is AV in -> AV (+ CC metas) out.

The element exposes property to set and unset a "passthrough" mode,
during which the transcriber element's state is set to NULL but kept
in the bin, in order for the user to be able to set properties on
sub elements no matter what the current mode is, using the
GstChildProxy interface.

In addition, the element ensures that the latency it reports stays
fixed so that playback continues uninterrupted.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/528>
2021-06-30 02:07:01 +02:00
Mathieu Duponchelle 23219c3c09 tttocea608: don't pad up to first input timestamp
When receiving data from a live upstream element, the first buffer
may have a non-0 timestamp (running time), and the element incorrectly
pushed padding buffers up to that timestamp, resulting in much confusion

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/527>
2021-06-25 23:26:30 +00:00
Mathieu Duponchelle d6f6f1a777 cea608overlay: expose "black-background" property
As stated in the spec:

> In addition, the user must have the capability to select a black
> background over which the captioned letters are displaced.

The property is MUTABLE_PLAYING
2021-06-18 09:48:44 +00:00
François Laignel 5439f14e57 fix clippy warnings 2021-06-05 10:36:22 +02:00
François Laignel e16cad7c8f video: migrate to new ClockTime design 2021-06-05 10:36:21 +02:00
François Laignel 8dfc872544 use gst::glib where applicable 2021-06-03 20:53:16 +02:00
Sebastian Dröge 04a60b8f46 Update repository URL for gtk-rs "core" crates 2021-05-13 09:50:08 +03:00
Sebastian Dröge 3d24f1da22 closedcaption/cea608overlay: Fix compilation with cairo API changes 2021-05-04 14:31:58 +03:00
Sebastian Dröge 15cf738616 Update for Value trait refactoring 2021-04-25 15:48:55 +03:00
Mathieu Duponchelle 7923e26545 tttocea608: implement word wrapping in roll-up modes.
In roll-up modes, we open new lines when the last column is reached.
This commit implements lookahead on a word basis, in order to avoid
splitting words unless absolutely necessary (when a word won't fit
on a full row)
2021-04-20 17:53:12 +00:00
François Laignel 67c5871957 fix-getters-calls 0.3.0 pass 2021-04-20 18:19:58 +02:00
François Laignel 27bc5c89ca fix-getters-def 0.3.0 pass 2021-04-20 18:19:58 +02:00
Mathieu Duponchelle 61214b5788 tttocea608: only warn when we do drop characters
In roll-up mode, we drop out of the loop and warn when the 32nd
character is reached, the warning is unnecessary when there were
no characters left to loop on.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/499>
2021-04-16 21:16:46 +02:00
Mathieu Duponchelle f95b5ee666 closedcaption/caption.c: fix deletion
Trying to write "" in order to erase characters in the caption
frame simply fails silently, the proper way to implement
delete_to_end_of_row and backspace was to memset the relevant
cells.
2021-04-15 14:35:22 +00:00
François Laignel 7d17f88941 post fix-getters manual updates 2021-04-13 17:24:20 +02:00
François Laignel 06accc8d98 fix-getters-{def,calls} pass 2021-04-12 15:57:19 +02:00
Seungha Yang 3dda2aebe9 closedcaption: Fix build with MSVC
Undefined ssize_t is used in eia608.h file as well
2021-04-01 05:13:24 +00:00
Sebastian Dröge bb8931c39b closedcaption: Don't needlessly create a full-range subslice of a slice 2021-03-25 22:59:14 +02:00
Mathieu Duponchelle a500166082 cea608overlay: remove debug prints
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/480>
2021-03-17 14:22:00 +01:00
Mathieu Duponchelle 0335893559 closedcaption: implement cea608tojson element
This element outputs the same format expected by tttocea608 in
json mode.

It notably differs from cea608tott in that it only uses libcaption's
low-level API, as it needs to maintain its own view of the current
state of the screen, and make fine-grained decisions as to when
to output data and how to timestamp it.

It covers a large portion of the 608 spec, with the exception of
a few features that probably haven't ever seen widespread usage,
those are listed in a TODO list at the top.

It has been tested with a reference file produced by CEA and covers
all the features it demonstrates.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/480>
2021-03-17 14:22:00 +01:00
Mathieu Duponchelle 11238579a5 tttocea608: pad immediately for the duration of the input buffer
Pushing the pending padding once we receive the following gap
or buffer means we will push it too late otherwise.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/480>
2021-03-12 11:20:44 +01:00
Sebastian Dröge 2cada57efc Update for the subclassing glib/gstreamer bindings API changes 2021-03-09 17:07:13 +02:00
Sebastian Dröge aa354058f5 Update pretty-assertions to 0.7, async-tungstenite to 0.13 and num-rational to 0.4
Also get rid of the funty workaround as nom now depends on the right
version.
2021-03-09 11:42:33 +02:00
Sebastian Dröge dc0c5f7611 Update for new #[glib::object_subclass] attribute macro 2021-03-07 18:27:00 +02:00
Mathieu Duponchelle a7df50e68f ccdetect: fix 608 detection
When cc_type is 00 or 01 the CC is 608 data, the last bit only
denotes the field

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/474>
2021-02-15 19:25:18 +00:00
Mathieu Duponchelle cc402f769c cea608overlay: support all VideoCaptionType meta
Also expose a field property, to allow selecting CC for a
specific field when the information is available. Defaults
to automatically picking the first field encountered.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/474>
2021-02-15 19:25:18 +00:00
Mathieu Duponchelle 3c982a3de0 ccdetect: extract CDP parser to a separate module
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/474>
2021-02-15 19:25:18 +00:00
Mathieu Duponchelle 19611f0ebe tttocea608: be more conservative when inserting spaces
We don't need to insert a space when starting a new line,
or before punctuation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/474>
2021-02-15 19:25:18 +00:00
Mathieu Duponchelle 20607fe346 tttocea608: expose origin-column and origin-row properties
These can be controlled more precisely using json as the input
format, but exposing them as properties is still useful when
the input format is text.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/474>
2021-02-15 19:25:18 +00:00
Mathieu Duponchelle 126df546c0 tttocea608: make mode property mutable in PLAYING
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/474>
2021-02-15 19:25:18 +00:00
Sebastian Dröge 1cd5d5ef45 Temporarily depend on funty 1.1.0 to work around breakage in 1.2.0
See https://github.com/myrrlyn/funty/issues/3
2021-02-14 11:07:26 +02:00
Sebastian Dröge b649e9b076 Use gst::PARAM_FLAG_MUTABLE_PLAYING and others consistently everywhere
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/139
2021-01-31 15:43:00 +02:00
Sebastian Dröge 1a826caf75 cea608overlay: Handle errors when rendering captions more gracefully
Just don't output anything and log an error instead of panicking.
2021-01-31 11:18:37 +02:00
Sebastian Dröge d4ce1a33f2 Update for glib/gstreamer bindings API changes 2021-01-25 14:43:05 +02:00
Mathieu Duponchelle 875c3efb91 tttocea608: implement paint-on mode
That mode has been mostly obsoleted by roll-up modes, but let's
include it for completeness' sake.
2021-01-20 02:29:19 +01:00
Mathieu Duponchelle 13efa59252 closedcaption: implement a tttojson element
That new element can for example be used to serialize the output
of awstranscribe, ready for further editing
2021-01-20 02:29:19 +01:00
Mathieu Duponchelle 42b4defb5c tttocea608: in-depth refactoring, support for new input format
Up to now, tttocea608 supported text/utf8, and no interface to
control the positioning of closed captions apart from new lines
in the input text.

CEA 608 supports a larger set of features than that, such as
positioning CC precisely in its 32 x 15 grid, styling text,
switching from one mode to another, resetting the base row
in roll-up mode etc ..

A custom, JSON-based format is now supported by the element
(caps application/x-json, format=cea608), allowing users to
control those features in a pretty advanced manner.

A side effect of this is that the approach previously used
by the element to ensure frame-accurate CC display is now
untenable: where we knew before that an input buffer would
at most span 74 buffers and calculate a somewhat reasonable
latency based on that, this is no longer possible. Instead
we pick the approach most CC encoders seem to pick, and
accept a certain latency at display time: for example the
flipping of the back buffer to the display buffer for a
10-character text buffer will occur 7 frames after its
PTS. This has obvious benefits in terms of code complexity
and should generally be acceptable.

+ Removes a now irrelevant test, updates other tests

+ Extracts the Mode enum to the root of the crate, it will
  be used by another element in a follow-up commit
2021-01-20 02:29:19 +01:00