vlc | branch: master | Devin Heitmueller <[email protected]> | Wed Jan 23 17:09:12 2019 -0500| [b1d1aca72ffaafb5af6abd2308bbc28ebe105fff] | committer: Jean-Baptiste Kempf
cea708: Render the correct number of lines in BT mode The existing logic was making the decision on which lines to render based exclusively on the i_firstrow/i_lastrow attributes, which may be larger than the rowcount specified when the window is created. This can result in more lines being rendered than requested by the sender. Take into account the window rowcount property to render the correct number of lines, and in cases where that number is less than the delta between first/last, make sure to render the correct subset of lines (i.e. the last N lines in the case of TB). Signed-off-by: Devin Heitmueller <[email protected]> Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b1d1aca72ffaafb5af6abd2308bbc28ebe105fff --- modules/codec/cea708.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/modules/codec/cea708.c b/modules/codec/cea708.c index 34b2f37d4a..0a4b40ab64 100644 --- a/modules/codec/cea708.c +++ b/modules/codec/cea708.c @@ -987,8 +987,27 @@ static void CEA708SpuConvert( const cea708_window_t *p_w, if( p_region == NULL && !(p_region = SubpictureUpdaterSysRegionNew()) ) return; + int first, last; + + if (p_w->style.scroll_direction == CEA708_WA_DIRECTION_BT) { + /* BT is a bit of a special case since we need to grab the last N + rows between first and last, rather than the first... */ + last = p_w->i_lastrow; + if (p_w->i_lastrow - p_w->i_row_count < p_w->i_firstrow) + first = p_w->i_firstrow; + else + first = p_w->i_lastrow - p_w->i_row_count + 1; + + } else { + first = p_w->i_firstrow; + if (p_w->i_firstrow + p_w->i_row_count > p_w->i_lastrow) + last = p_w->i_lastrow; + else + last = p_w->i_firstrow + p_w->i_row_count - 1; + } + text_segment_t **pp_last = &p_region->p_segments; - for( uint8_t i=p_w->i_firstrow; i<=p_w->i_lastrow; i++ ) + for( uint8_t i=first; i<=last; i++ ) { if( !p_w->rows[i] ) continue; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
