X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcodec%2Fcc.c;h=ee20e50d5e28faa6cd46b0a3d026b450f67e9ae2;hb=c60652e38ac6afd74bd8225e9dae5406f13aaa4f;hp=59614a161707ed0fc6e4d332035efa9f63329242;hpb=152b1687c0ec112f3ab1360006d048d6b9cf7258;p=vlc diff --git a/modules/codec/cc.c b/modules/codec/cc.c index 59614a1617..ee20e50d5e 100644 --- a/modules/codec/cc.c +++ b/modules/codec/cc.c @@ -42,13 +42,11 @@ #include #include -#include #include #include #include #include #include -#include #include #include @@ -294,11 +292,11 @@ static block_t *Pop( decoder_t *p_dec ) return NULL; p_block = p_sys->pp_block[i_index = 0]; - if( p_block->i_pts > 0 ) + if( p_block->i_pts > VLC_TS_INVALID ) { for( i = 1; i < p_sys->i_block-1; i++ ) { - if( p_sys->pp_block[i]->i_pts > 0 && p_block->i_pts > 0 && + if( p_sys->pp_block[i]->i_pts > VLC_TS_INVALID && p_block->i_pts > VLC_TS_INVALID && p_sys->pp_block[i]->i_pts < p_block->i_pts ) p_block = p_sys->pp_block[i_index = i]; } @@ -317,7 +315,7 @@ static subpicture_t *Subtitle( decoder_t *p_dec, char *psz_subtitle, char *psz_h video_format_t fmt; /* We cannot display a subpicture with no date */ - if( i_pts == 0 ) + if( i_pts <= VLC_TS_INVALID ) { msg_Warn( p_dec, "subtitle without a date" ); return NULL; @@ -328,7 +326,7 @@ static subpicture_t *Subtitle( decoder_t *p_dec, char *psz_subtitle, char *psz_h EnsureUTF8( psz_html ); /* Create the subpicture unit */ - p_spu = decoder_NewSubpicture( p_dec ); + p_spu = decoder_NewSubpicture( p_dec, NULL ); if( !p_spu ) { msg_Warn( p_dec, "can't get spu buffer" ); @@ -340,7 +338,6 @@ static subpicture_t *Subtitle( decoder_t *p_dec, char *psz_subtitle, char *psz_h /* Create a new subpicture region */ memset( &fmt, 0, sizeof(video_format_t) ); fmt.i_chroma = VLC_CODEC_TEXT; - fmt.i_aspect = 0; fmt.i_width = fmt.i_height = 0; fmt.i_x_offset = fmt.i_y_offset = 0; p_spu->p_region = subpicture_region_New( &fmt ); @@ -565,6 +562,9 @@ static void Eia608EraseToEndOfRow( eia608_t *h ) static void Eia608RollUp( eia608_t *h ) { + if( h->mode == EIA608_MODE_TEXT ) + return; + const int i_screen = Eia608GetWritingScreenIndex( h ); eia608_screen *screen = &h->screen[i_screen]; @@ -603,7 +603,7 @@ static void Eia608RollUp( eia608_t *h ) /* Reset current row */ Eia608ClearScreenRow( h, i_screen, h->cursor.i_row ); } -static void Eia608ParseChannel( eia608_t *h, uint8_t d[2] ) +static void Eia608ParseChannel( eia608_t *h, const uint8_t d[2] ) { /* Check odd parity */ static const int p4[16] = { @@ -618,15 +618,10 @@ static void Eia608ParseChannel( eia608_t *h, uint8_t d[2] ) /* */ const int d1 = d[0] & 0x7f; - const int d2 = d[1] & 0x7f; - if( d1 == 0x14 ) - h->i_channel = 1; - else if( d1 == 0x1c ) - h->i_channel = 2; - else if( d1 == 0x15 ) + if( d1 >= 0x10 && d1 <= 0x1f ) + h->i_channel = 1 + ((d1 & 0x08) != 0); + else if( d1 < 0x10 ) h->i_channel = 3; - else if( d1 == 0x1d ) - h->i_channel = 4; } static bool Eia608ParseTextAttribute( eia608_t *h, uint8_t d2 ) { @@ -1143,5 +1138,6 @@ static char *Eia608Text( eia608_t *h, bool b_html ) static void Eia608Exit( eia608_t *h ) { + VLC_UNUSED( h ); }