Commit graph

1091 commits

Author SHA1 Message Date
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
Mathieu Duponchelle
cbf1266a8c textwrap: expose accumulate-time property
In its standard mode, textwrap simply splits up text in chained
buffers into multiple lines / buffers, not keeping any state.

When accumulate-time is specified, multiple input buffers will be
wrapped together, outputting one-line buffers of text once a
sufficient width (specified by the columns property) is reached,
or the interval between two input buffers is greater than
accumulate-time.

This is useful to format the output of an element such as
awstranscribe, which outputs its transcription with one buffer
per word.
2021-01-20 02:29:19 +01:00
Mathieu Duponchelle
b062f63ec3 Add new text/json crate
This new crate consists of two elements, jsongstenc and jsongstparse

Both these elements can deal with an ndjson based format, consisting
for now of two item types: "Buffer" and "Header"

eg:

{"Header":{"format":"foobar"}}
{"Buffer":{"pts":0,"duration":43,"data":{"foo":"bar"}}}

jsongstparse will interpret this by first sending caps
application/x-json, format=foobar, then a buffer containing
{"foo":"bar"}, timestamped as required.

Elements further downstream can then interpret the data further.

jsongstenc will simply perform the reverse operation.
2021-01-20 02:29:19 +01:00
Mathieu Duponchelle
6267e00c20 libcaption: implement eia608_to_text 2021-01-19 16:40:00 +01:00
Mathieu Duponchelle
a7180e3995 libcaption: fix bit set on indent preambles
style preambles look like:

|P|0|0|1|C|0|ROW| |P|1|N|0|STYLE|U|

and column preambles look like:

|P|0|0|1|C|0|ROW| |P|1|N|1|CURSR|U|

Both preambles go through eia608_row_pramble(), the value they
pass as the x parameter is supposed to hold 4 bits, either
0|STYLE

or 1|CURSR

This value then gets bit-shifted by 1 and or'd in the second byte.

The value is also and' with 0x1E to ensure it can't leak into
the upper bits.

The previous code resulted in x being a 5-bit value, 0x10 (0b10000).
This resulted in outputting a style preamble, as 0x10 << 1 & 0x1E
is 0b00000. When the indent was 0 (the usual case), this went
undetected, but with any other value it resulted in no indent being
applied, but the text getting colored or italicized.

This patch fixes x to have the correct value of 0x8 | indent.
2021-01-19 16:40:00 +01:00
Mathieu Duponchelle
a3dafea688 libcaption: fix parity code calculation
A misplaced parenthesis was causing the odd parity bit to
be set based on an incomplete version of the preamble
2021-01-19 16:40:00 +01:00
Seungha Yang
084c9d1447 fallbackswitch,togglerecord: Don't apply clipped PTS to buffer DTS
Setting DTS on raw video buffers doesn't make sense and it's even wrong
in case of compressed video stream because PTS might be able to
go back when B frames are placed, but DTS is expected to be monotonically
increased.
2021-01-19 19:45:14 +09:00
Sebastian Dröge
72700fb07e deny.toml: Update 2021-01-16 10:19:51 +02:00
Sebastian Dröge
27b2de1d05 rav1enc: Make use of the opaque API to map frames/packets to the video encoder frames 2021-01-15 11:58:26 +02:00
Sebastian Dröge
fa4cd38f75 rav1enc: Update to rav1e 0.4 2021-01-15 11:38:31 +02:00
Sebastian Dröge
d28fda6bc3 deny: Update 2021-01-09 12:46:09 +02:00
Sebastian Dröge
84896e6468 Update to rand 0.8 2021-01-09 12:34:42 +02:00
Sebastian Dröge
65c9c33f88 rusoto: Port to nom 6 2021-01-09 12:34:41 +02:00
Sebastian Dröge
e3aa368d94 rusoto: Port to tokio 1.0 2021-01-09 12:34:31 +02:00
Sebastian Dröge
c380a3ea3d requesthttpsrc: Port to tokio 1.0 2021-01-09 12:04:38 +02:00
Seungha Yang
2b7cebb02a togglerecord: Update recording state on EOS
If all input streams are in EOS state, update recording state
to Stopped and notify the change as well
2021-01-07 22:16:51 +09:00
Guillaume Desmottes
9d8fe31a5b meson: bump minimal version to 0.56
Needed because of substring().

Fix #138
2021-01-07 10:03:01 +01:00
Guillaume Desmottes
0754c98f9d meson: check if cargo-c is installed 2021-01-04 16:04:52 +01:00
Guillaume Desmottes
595616fe2d ci: install cargo-c to proper location
Need to define CARGO_HOME so it's installed to the same places as the
rest of the Rust tools.
2021-01-04 16:04:52 +01:00
Guillaume Desmottes
fdc3ea68e8 ci: test linking on all static plugins
Will ensure that our static libraries and pkg-config files are properly
generated.
2021-01-04 12:26:45 +01:00
Guillaume Desmottes
9167e5e561 ci: factor out iterate_plugins()
Will be re-used for another test.

Also explicitly list the 'rs' prefixed plugins.
2021-01-04 12:26:45 +01:00
Guillaume Desmottes
32d511684e meson: install plugins pc files 2021-01-04 12:26:45 +01:00
Guillaume Desmottes
dfdbd370f9 meson: use cargo-c
We now have to run 'cbuild' and 'ctest' on each plugin individually.
Replace plugins_rep key by the source path so we can easily discard the
excluded plugins.
2021-01-04 12:26:45 +01:00
Guillaume Desmottes
8bc2e5ebb8 use cargo-c to produce cdy and static libs
cargo-c will produce a pkg-config file making it easier to statically
link plugins.

Also add 'static' features for plugins depending on < 1.14 as this is the
minimal required version to use static linking because of ABI changes in
core.
2021-01-04 12:26:45 +01:00
Guillaume Desmottes
fc1bae347e ci: install cargo-c 2021-01-04 10:38:05 +01:00
Marijn Suijten
a2b766d568 CI: Remove unnecessary lint-ignore for clippy::cast_lossless 2021-01-02 17:55:06 +01:00
Marijn Suijten
1a7c4c14cc Fix clippy::redundant_pattern_matching 2021-01-02 17:55:06 +01:00
Marijn Suijten
61270a337b tutorial/1: gst_plugin_define! is renamed to gst::plugin_define!
Fixes: 3d61737 ("Update for macro renames")
2021-01-02 17:55:06 +01:00
Marijn Suijten
d36218fe35 tutorial/1: Fix unclosed ```rust block
Fixes: 4829e31 ("tutorial: Update for subclassing API changes")
2021-01-02 17:54:57 +01:00
Sebastian Dröge
817a4710f3 ci: Add some more ignored lints to the clippy configuration 2020-12-31 17:28:51 +02:00
Sebastian Dröge
0f4383a8a0 ci: Update to dav1d 0.8.0 2020-12-31 17:28:04 +02:00
Sebastian Dröge
c09dc96c2c togglerecord: Also check for flushing at the top of the chain function
It would return further down anyway but there's no point in doing
useless work if it can be avoided.
2020-12-31 12:06:18 +02:00
Sebastian Dröge
cdca6c9372 togglerecord: Check for flushing when the main stream waits for the other streams
Otherwise it would not wake up and return when shutting down the element.
2020-12-31 12:05:37 +02:00
Sebastian Dröge
514f6ea7ec textwrap: Remove workaround that is not needed anymore with textwrap 0.13.2 2020-12-30 18:49:13 +02:00
Sebastian Dröge
078bf81b85 sccparse: Work around invalid drop-frame timecodes
Various SCC files have invalid drop frame timecodes.

Every full minute the first two timecodes are skipped, except for every
tenth minute, which means that e.g. "00:01:00;00" is not a valid
timecode and the next valid timecode would be "00:01:00;02".
2020-12-30 13:33:25 +02:00
Sebastian Dröge
3b739530bf sccparse: Parse timecode only once when seeking
Also avoids an unwrap().
2020-12-30 13:04:55 +02:00
Sebastian Dröge
02310d8720 sccparse: Simplify timecode handling a bit 2020-12-30 13:02:09 +02:00
Sebastian Dröge
a88fe95fee mccparse: Use the last known timecode as duration even if there were more invalid ones afterwards 2020-12-30 13:01:41 +02:00
Sebastian Dröge
38ecd43074 Use typed integer literals instead of casting 2020-12-29 17:29:46 +02:00
Sebastian Dröge
7e1181ab84 threadshare: Return a proper error type instead of () 2020-12-29 17:29:27 +02:00
Sebastian Dröge
640d8ef904 rusoto/aws_transcriber: Don't hold mutex across await points
This mutex is actually only ever used from a single thread, so use
AtomicRefCell instead. It provides the guarantees of a mutex but panics
instead of blocking.
2020-12-29 17:28:19 +02:00
Sebastian Dröge
005c62425b closedcaption: Update for glib::DateTime API changes 2020-12-24 13:36:07 +02:00
Blaxar Waldarax
348b865187 Added hsv plugin with hsvfilter and hsvdetector elements 2020-12-23 18:40:20 +01:00
Wonchul Lee
0d93910a39 tutorial: Sync doc link with gstreamer crates 2020-12-22 17:13:55 +09:00
Sebastian Dröge
3d617371af Update for macro renames 2020-12-20 20:43:45 +02:00
Sebastian Dröge
ea6c05e16c Update everything for glib macro renamings 2020-12-18 00:44:49 +02:00
Sebastian Dröge
708c6aa57e Update for new simplified glib::Object::new() API 2020-12-17 18:15:54 +02:00
Jan Schmidt
b80a607737 fallbackswitch: Reset fallback pad state on remove. 2020-12-11 13:02:00 +00:00
Jan Schmidt
f57ce41e89 fallbackswitch: Document return parameters for get_next_buffer()
The return type for get_next_buffer() is quite complex, so add some
comments about what is what.
2020-12-11 13:02:00 +00:00
Jan Schmidt
fddf33d339 fallbackswitch: Use pad as the debug object
Instead of using the aggregator as the object in debug statements
relating to pad dataflow, use the pad itself.
2020-12-11 13:02:00 +00:00