[vlc-devel] commit: Cosmetics (spudec). (Laurent Aimar )
git version control
git at videolan.org
Wed May 20 18:53:56 CEST 2009
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Tue May 19 18:47:00 2009 +0200| [008e357c7cdc343f671363e6d6cf70d6e3b40f07] | committer: Laurent Aimar
Cosmetics (spudec).
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=008e357c7cdc343f671363e6d6cf70d6e3b40f07
---
modules/codec/spudec/parse.c | 90 ++++++++++++++----------------------------
1 files changed, 30 insertions(+), 60 deletions(-)
diff --git a/modules/codec/spudec/parse.c b/modules/codec/spudec/parse.c
index 84db8df..4dce106 100644
--- a/modules/codec/spudec/parse.c
+++ b/modules/codec/spudec/parse.c
@@ -50,8 +50,6 @@ typedef struct
typedef struct
{
- mtime_t i_pts; /* presentation timestamp */
-
int pi_offset[2]; /* byte offsets to data */
uint16_t *p_data;
@@ -68,7 +66,7 @@ typedef struct
} subpicture_data_t;
static int ParseControlSeq( decoder_t *, subpicture_t *, subpicture_data_t *,
- spu_properties_t * );
+ spu_properties_t *, mtime_t i_pts );
static int ParseRLE ( decoder_t *, subpicture_data_t *,
const spu_properties_t * );
static void Render ( decoder_t *, subpicture_t *, subpicture_data_t *,
@@ -78,7 +76,7 @@ static void Render ( decoder_t *, subpicture_t *, subpicture_data_t *,
* AddNibble: read a nibble from a source packet and add it to our integer.
*****************************************************************************/
static inline unsigned int AddNibble( unsigned int i_code,
- uint8_t *p_src, unsigned int *pi_index )
+ const uint8_t *p_src, unsigned int *pi_index )
{
if( *pi_index & 0x1 )
{
@@ -107,30 +105,13 @@ subpicture_t * ParsePacket( decoder_t *p_dec )
p_spu = decoder_NewSubpicture( p_dec );
if( !p_spu ) return NULL;
- /* */
- spu_data.p_data = NULL;
- spu_data.b_palette = false;
- spu_data.b_auto_crop = false;
- spu_data.i_y_top_offset = 0;
- spu_data.i_y_bottom_offset = 0;
-
- spu_data.pi_alpha[0] = 0x00;
- spu_data.pi_alpha[1] = 0x0f;
- spu_data.pi_alpha[2] = 0x0f;
- spu_data.pi_alpha[3] = 0x0f;
-
- /* Get display time now. If we do it later, we may miss the PTS. */
- spu_data.i_pts = p_sys->i_pts;
-
p_spu->i_original_picture_width =
p_dec->fmt_in.subs.spu.i_original_frame_width;
p_spu->i_original_picture_height =
p_dec->fmt_in.subs.spu.i_original_frame_height;
- memset( &spu_properties, 0, sizeof(spu_properties) );
-
/* Getting the control part */
- if( ParseControlSeq( p_dec, p_spu, &spu_data, &spu_properties ) )
+ if( ParseControlSeq( p_dec, p_spu, &spu_data, &spu_properties, p_sys->i_pts ) )
{
/* There was a parse error, delete the subpicture */
decoder_DeleteSubpicture( p_dec, p_spu );
@@ -176,7 +157,7 @@ subpicture_t * ParsePacket( decoder_t *p_dec )
* subtitles format, see http://sam.zoy.org/doc/dvd/subtitles/index.html
*****************************************************************************/
static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu,
- subpicture_data_t *p_spu_data, spu_properties_t *p_spu_properties )
+ subpicture_data_t *p_spu_data, spu_properties_t *p_spu_properties, mtime_t i_pts )
{
decoder_sys_t *p_sys = p_dec->p_sys;
@@ -197,6 +178,20 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu,
p_spu->i_start = p_spu->i_stop = 0;
p_spu->b_ephemer = false;
+ memset( p_spu_properties, 0, sizeof(*p_spu_properties) );
+
+ /* */
+ p_spu_data->p_data = NULL;
+ p_spu_data->b_palette = false;
+ p_spu_data->b_auto_crop = false;
+ p_spu_data->i_y_top_offset = 0;
+ p_spu_data->i_y_bottom_offset = 0;
+
+ p_spu_data->pi_alpha[0] = 0x00;
+ p_spu_data->pi_alpha[1] = 0x0f;
+ p_spu_data->pi_alpha[2] = 0x0f;
+ p_spu_data->pi_alpha[3] = 0x0f;
+
for( i_index = 4 + p_sys->i_rle_size; i_index < p_sys->i_spu_size ; )
{
/* If we just read a command sequence, read the next one;
@@ -231,19 +226,19 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu,
switch( i_command )
{
case SPU_CMD_FORCE_DISPLAY: /* 00 (force displaying) */
- p_spu->i_start = p_spu_data->i_pts + date;
+ p_spu->i_start = i_pts + date;
p_spu->b_ephemer = true;
i_index += 1;
break;
/* Convert the dates in seconds to PTS values */
case SPU_CMD_START_DISPLAY: /* 01 (start displaying) */
- p_spu->i_start = p_spu_data->i_pts + date;
+ p_spu->i_start = i_pts + date;
i_index += 1;
break;
case SPU_CMD_STOP_DISPLAY: /* 02 (stop displaying) */
- p_spu->i_stop = p_spu_data->i_pts + date;
+ p_spu->i_stop = i_pts + date;
i_index += 1;
break;
@@ -428,9 +423,7 @@ static int ParseRLE( decoder_t *p_dec,
const spu_properties_t *p_spu_properties )
{
decoder_sys_t *p_sys = p_dec->p_sys;
- uint8_t *p_src = &p_sys->buffer[4];
-
- unsigned int i_code;
+ const uint8_t *p_src = &p_sys->buffer[4];
unsigned int i_width = p_spu_properties->i_width;
unsigned int i_height = p_spu_properties->i_height;
@@ -457,42 +450,19 @@ static int ParseRLE( decoder_t *p_dec,
for( i_y = 0 ; i_y < i_height ; i_y++ )
{
+ unsigned int i_code;
pi_offset = pi_table + i_id;
for( i_x = 0 ; i_x < i_width ; i_x += i_code >> 2 )
{
- i_code = AddNibble( 0, p_src, pi_offset );
-
- if( i_code < 0x04 )
- {
+ i_code = 0;
+ for( unsigned int i_min = 1; i_min <= 0x40 && i_code < i_min; i_min <<= 2 )
i_code = AddNibble( i_code, p_src, pi_offset );
-
- if( i_code < 0x10 )
- {
- i_code = AddNibble( i_code, p_src, pi_offset );
-
- if( i_code < 0x040 )
- {
- i_code = AddNibble( i_code, p_src, pi_offset );
-
- if( i_code < 0x0100 )
- {
- /* If the 14 first bits are set to 0, then it's a
- * new line. We emulate it. */
- if( i_code < 0x0004 )
- {
- i_code |= ( i_width - i_x ) << 2;
- }
- else
- {
- /* We have a boo boo ! */
- msg_Err( p_dec, "unknown RLE code "
- "0x%.4x", i_code );
- return VLC_EGENERIC;
- }
- }
- }
- }
+ if( i_code < 0x0004 )
+ {
+ /* If the 14 first bits are set to 0, then it's a
+ * new line. We emulate it. */
+ i_code |= ( i_width - i_x ) << 2;
}
if( ( (i_code >> 2) + i_x + i_y * i_width ) > i_height * i_width )
More information about the vlc-devel
mailing list