Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2021-01-20 00:22:51 +0300
committerMathieu Duponchelle <mathieu@centricular.com>2021-01-20 04:29:19 +0300
commit875c3efb916f2400df355f8517f1daeff6f7ae85 (patch)
treef59f61fce53ea1b34177f4c685d6650d36aa6bda /video/closedcaption
parent13efa592521385e7e36d0a621852eacf66afdd9e (diff)
tttocea608: implement paint-on mode
That mode has been mostly obsoleted by roll-up modes, but let's include it for completeness' sake.
Diffstat (limited to 'video/closedcaption')
-rw-r--r--video/closedcaption/src/tttocea608/imp.rs44
-rw-r--r--video/closedcaption/src/ttutils.rs1
2 files changed, 38 insertions, 7 deletions
diff --git a/video/closedcaption/src/tttocea608/imp.rs b/video/closedcaption/src/tttocea608/imp.rs
index 562a83d73..ebb9aa731 100644
--- a/video/closedcaption/src/tttocea608/imp.rs
+++ b/video/closedcaption/src/tttocea608/imp.rs
@@ -263,6 +263,30 @@ impl State {
)
}
+ fn resume_direct_captioning(
+ &mut self,
+ element: &super::TtToCea608,
+ bufferlist: &mut gst::BufferListRef,
+ ) {
+ self.cc_data(
+ element,
+ bufferlist,
+ eia608_control_command(ffi::eia608_control_t_eia608_control_resume_direct_captioning),
+ )
+ }
+
+ fn delete_to_end_of_row(
+ &mut self,
+ element: &super::TtToCea608,
+ bufferlist: &mut gst::BufferListRef,
+ ) {
+ self.cc_data(
+ element,
+ bufferlist,
+ eia608_control_command(ffi::eia608_control_t_eia608_control_delete_to_end_of_row),
+ )
+ }
+
fn roll_up_2(&mut self, element: &super::TtToCea608, bufferlist: &mut gst::BufferListRef) {
self.cc_data(
element,
@@ -438,7 +462,7 @@ impl TtToCea608 {
let mut ret = true;
let do_preamble = match state.mode {
- Cea608Mode::PopOn => true,
+ Cea608Mode::PopOn | Cea608Mode::PaintOn => true,
Cea608Mode::RollUp2 | Cea608Mode::RollUp3 | Cea608Mode::RollUp4 => {
if let Some(carriage_return) = carriage_return {
if carriage_return {
@@ -495,6 +519,10 @@ impl TtToCea608 {
);
}
+ if state.mode == Cea608Mode::PaintOn {
+ state.delete_to_end_of_row(element, bufferlist);
+ }
+
state.tab_offset(element, bufferlist, offset);
state.underline = chunk.underline;
@@ -522,7 +550,7 @@ impl TtToCea608 {
let mut bufferlist = gst::BufferList::new();
let mut_list = bufferlist.get_mut().unwrap();
- let mut col = if state.mode == Cea608Mode::PopOn {
+ let mut col = if state.mode == Cea608Mode::PopOn || state.mode == Cea608Mode::PaintOn {
0
} else {
state.column
@@ -564,7 +592,7 @@ impl TtToCea608 {
if clear && !cleared {
state.erase_display_frame_no = None;
state.erase_display_memory(element, mut_list);
- if state.mode != Cea608Mode::PopOn {
+ if state.mode != Cea608Mode::PopOn && state.mode != Cea608Mode::PaintOn {
state.send_roll_up_preamble = true;
}
col = 0;
@@ -578,6 +606,8 @@ impl TtToCea608 {
}
state.resume_caption_loading(element, mut_list);
state.cc_data(element, mut_list, erase_non_displayed_memory());
+ } else if state.mode == Cea608Mode::PaintOn {
+ state.resume_direct_captioning(element, mut_list);
}
let mut prev_char = 0;
@@ -600,11 +630,11 @@ impl TtToCea608 {
}
if let Some(line_column) = line.column {
- if state.mode != Cea608Mode::PopOn {
+ if state.mode != Cea608Mode::PopOn && state.mode != Cea608Mode::PaintOn {
state.send_roll_up_preamble = true;
}
col = line_column;
- } else if state.mode == Cea608Mode::PopOn {
+ } else if state.mode == Cea608Mode::PopOn || state.mode == Cea608Mode::PaintOn {
col = 0;
}
@@ -686,7 +716,7 @@ impl TtToCea608 {
if col > 31 {
match state.mode {
- Cea608Mode::PopOn => {
+ Cea608Mode::PaintOn | Cea608Mode::PopOn => {
gst_warning!(
CAT,
obj: element,
@@ -716,7 +746,7 @@ impl TtToCea608 {
}
}
- if state.mode == Cea608Mode::PopOn {
+ if state.mode == Cea608Mode::PopOn || state.mode == Cea608Mode::PaintOn {
if prev_char != 0 {
state.cc_data(element, mut_list, prev_char);
prev_char = 0;
diff --git a/video/closedcaption/src/ttutils.rs b/video/closedcaption/src/ttutils.rs
index 3ff84f387..c4738c71e 100644
--- a/video/closedcaption/src/ttutils.rs
+++ b/video/closedcaption/src/ttutils.rs
@@ -24,6 +24,7 @@ use serde::{Deserialize, Serialize};
#[genum(type_name = "GstTtToCea608Mode")]
pub enum Cea608Mode {
PopOn,
+ PaintOn,
RollUp2,
RollUp3,
RollUp4,