mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-09-03 18:23:49 +00:00
closedcaption: fix roll up mode not always using the correct base row
The row used in roll up mode was inconsistently referenced (row vs base_row) and could result in incorrect output being produced. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2051>
This commit is contained in:
parent
12811f9bc3
commit
5c7ab9b491
1 changed files with 19 additions and 12 deletions
|
@ -216,6 +216,16 @@ impl Cea608Frame {
|
|||
self.selected_channel = None;
|
||||
}
|
||||
|
||||
fn row(&self) -> usize {
|
||||
self.mode.map_or(self.row, |mode| {
|
||||
if mode.is_rollup() {
|
||||
self.base_row as usize
|
||||
} else {
|
||||
self.row
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn set_channel(&mut self, channel: Channel) {
|
||||
if Some(channel) != self.selected_channel {
|
||||
gst::log!(CAT, "reset (channel change)");
|
||||
|
@ -272,13 +282,7 @@ impl Cea608Frame {
|
|||
}
|
||||
|
||||
fn push_char(&mut self, c: char) -> bool {
|
||||
let row = self.mode.map_or(self.row, |mode| {
|
||||
if mode.is_rollup() {
|
||||
self.base_row as usize
|
||||
} else {
|
||||
self.row
|
||||
}
|
||||
});
|
||||
let row = self.row();
|
||||
self.ensure_cell(row, self.column);
|
||||
if self.column == 0 {
|
||||
let preamble = self.preamble;
|
||||
|
@ -353,8 +357,9 @@ impl Cea608Frame {
|
|||
}
|
||||
|
||||
fn midrow(&mut self, midrow: MidRow) -> bool {
|
||||
self.ensure_cell(self.row, self.column);
|
||||
let Some(cell) = self.cell_mut(self.row, self.column) else {
|
||||
let row = self.row();
|
||||
self.ensure_cell(row, self.column);
|
||||
let Some(cell) = self.cell_mut(row, self.column) else {
|
||||
return false;
|
||||
};
|
||||
*cell = Cea608Cell::MidRow(midrow);
|
||||
|
@ -388,8 +393,9 @@ impl Cea608Frame {
|
|||
if self.column == 0 {
|
||||
return false;
|
||||
}
|
||||
self.ensure_cell(self.row, self.column - 1);
|
||||
let Some(cell) = self.cell_mut(self.row, self.column - 1) else {
|
||||
let row = self.row();
|
||||
self.ensure_cell(row, self.column - 1);
|
||||
let Some(cell) = self.cell_mut(row, self.column - 1) else {
|
||||
return false;
|
||||
};
|
||||
*cell = Cea608Cell::Empty;
|
||||
|
@ -399,7 +405,8 @@ impl Cea608Frame {
|
|||
|
||||
fn delete_to_end_of_row(&mut self) -> bool {
|
||||
let column = self.column;
|
||||
let Some(line) = self.line_mut(self.row) else {
|
||||
let row = self.row();
|
||||
let Some(line) = self.line_mut(row) else {
|
||||
return false;
|
||||
};
|
||||
while line.line.len() > column {
|
||||
|
|
Loading…
Reference in a new issue