mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-06-05 15:08:58 +00:00
tttocea608: implement paint-on mode
That mode has been mostly obsoleted by roll-up modes, but let's include it for completeness' sake.
This commit is contained in:
parent
13efa59252
commit
875c3efb91
2 changed files with 38 additions and 7 deletions
|
@ -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) {
|
fn roll_up_2(&mut self, element: &super::TtToCea608, bufferlist: &mut gst::BufferListRef) {
|
||||||
self.cc_data(
|
self.cc_data(
|
||||||
element,
|
element,
|
||||||
|
@ -438,7 +462,7 @@ impl TtToCea608 {
|
||||||
let mut ret = true;
|
let mut ret = true;
|
||||||
|
|
||||||
let do_preamble = match state.mode {
|
let do_preamble = match state.mode {
|
||||||
Cea608Mode::PopOn => true,
|
Cea608Mode::PopOn | Cea608Mode::PaintOn => true,
|
||||||
Cea608Mode::RollUp2 | Cea608Mode::RollUp3 | Cea608Mode::RollUp4 => {
|
Cea608Mode::RollUp2 | Cea608Mode::RollUp3 | Cea608Mode::RollUp4 => {
|
||||||
if let Some(carriage_return) = carriage_return {
|
if let Some(carriage_return) = carriage_return {
|
||||||
if 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.tab_offset(element, bufferlist, offset);
|
||||||
|
|
||||||
state.underline = chunk.underline;
|
state.underline = chunk.underline;
|
||||||
|
@ -522,7 +550,7 @@ impl TtToCea608 {
|
||||||
let mut bufferlist = gst::BufferList::new();
|
let mut bufferlist = gst::BufferList::new();
|
||||||
let mut_list = bufferlist.get_mut().unwrap();
|
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
|
0
|
||||||
} else {
|
} else {
|
||||||
state.column
|
state.column
|
||||||
|
@ -564,7 +592,7 @@ impl TtToCea608 {
|
||||||
if clear && !cleared {
|
if clear && !cleared {
|
||||||
state.erase_display_frame_no = None;
|
state.erase_display_frame_no = None;
|
||||||
state.erase_display_memory(element, mut_list);
|
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;
|
state.send_roll_up_preamble = true;
|
||||||
}
|
}
|
||||||
col = 0;
|
col = 0;
|
||||||
|
@ -578,6 +606,8 @@ impl TtToCea608 {
|
||||||
}
|
}
|
||||||
state.resume_caption_loading(element, mut_list);
|
state.resume_caption_loading(element, mut_list);
|
||||||
state.cc_data(element, mut_list, erase_non_displayed_memory());
|
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;
|
let mut prev_char = 0;
|
||||||
|
@ -600,11 +630,11 @@ impl TtToCea608 {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(line_column) = line.column {
|
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;
|
state.send_roll_up_preamble = true;
|
||||||
}
|
}
|
||||||
col = line_column;
|
col = line_column;
|
||||||
} else if state.mode == Cea608Mode::PopOn {
|
} else if state.mode == Cea608Mode::PopOn || state.mode == Cea608Mode::PaintOn {
|
||||||
col = 0;
|
col = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -686,7 +716,7 @@ impl TtToCea608 {
|
||||||
|
|
||||||
if col > 31 {
|
if col > 31 {
|
||||||
match state.mode {
|
match state.mode {
|
||||||
Cea608Mode::PopOn => {
|
Cea608Mode::PaintOn | Cea608Mode::PopOn => {
|
||||||
gst_warning!(
|
gst_warning!(
|
||||||
CAT,
|
CAT,
|
||||||
obj: element,
|
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 {
|
if prev_char != 0 {
|
||||||
state.cc_data(element, mut_list, prev_char);
|
state.cc_data(element, mut_list, prev_char);
|
||||||
prev_char = 0;
|
prev_char = 0;
|
||||||
|
|
|
@ -24,6 +24,7 @@ use serde::{Deserialize, Serialize};
|
||||||
#[genum(type_name = "GstTtToCea608Mode")]
|
#[genum(type_name = "GstTtToCea608Mode")]
|
||||||
pub enum Cea608Mode {
|
pub enum Cea608Mode {
|
||||||
PopOn,
|
PopOn,
|
||||||
|
PaintOn,
|
||||||
RollUp2,
|
RollUp2,
|
||||||
RollUp3,
|
RollUp3,
|
||||||
RollUp4,
|
RollUp4,
|
||||||
|
|
Loading…
Reference in a new issue