Browse Source

codec: spu: move rendered buffer out of spudata

(cherry picked from commit cf0f363c26)
pull/135/head
Francois Cartegnie 7 years ago
parent
commit
5973ee2123
  1. 29
      modules/codec/spudec/parse.c

29
modules/codec/spudec/parse.c

@ -50,7 +50,6 @@ typedef struct
typedef struct
{
int pi_offset[2]; /* byte offsets to data */
uint16_t *p_data;
/* Color information */
bool b_palette;
@ -67,9 +66,9 @@ typedef struct
static int ParseControlSeq( decoder_t *, subpicture_t *, subpicture_data_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 *,
const spu_properties_t * );
const spu_properties_t *, uint16_t * );
static void Render ( decoder_t *, subpicture_t *, const uint16_t *,
const subpicture_data_t *, const spu_properties_t * );
/*****************************************************************************
* AddNibble: read a nibble from a source packet and add it to our integer.
@ -99,6 +98,7 @@ void ParsePacket( decoder_t *p_dec, void(*pf_queue)(decoder_t *, subpicture_t *)
subpicture_t *p_spu;
subpicture_data_t spu_data;
spu_properties_t spu_properties;
uint16_t *p_pixeldata;
/* Allocate the subpicture internal data. */
p_spu = decoder_NewSubpicture( p_dec, NULL );
@ -125,14 +125,14 @@ void ParsePacket( decoder_t *p_dec, void(*pf_queue)(decoder_t *, subpicture_t *)
* one byte gaves two nibbles and may be used twice (once per field)
* generating 4 codes.
*/
spu_data.p_data = vlc_alloc( p_sys->i_rle_size, sizeof(*spu_data.p_data) * 2 * 2 );
p_pixeldata = vlc_alloc( p_sys->i_rle_size, sizeof(*p_pixeldata) * 2 * 2 );
/* We try to display it */
if( ParseRLE( p_dec, &spu_data, &spu_properties ) )
if( ParseRLE( p_dec, &spu_data, &spu_properties, p_pixeldata ) )
{
/* There was a parse error, delete the subpicture */
subpicture_Delete( p_spu );
free( spu_data.p_data );
free( p_pixeldata );
return;
}
@ -142,8 +142,8 @@ void ParsePacket( decoder_t *p_dec, void(*pf_queue)(decoder_t *, subpicture_t *)
spu_data.pi_offset[0], spu_data.pi_offset[1] );
#endif
Render( p_dec, p_spu, &spu_data, &spu_properties );
free( spu_data.p_data );
Render( p_dec, p_spu, p_pixeldata, &spu_data, &spu_properties );
free( p_pixeldata );
pf_queue( p_dec, p_spu );
}
@ -180,7 +180,6 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu,
memset( &spu_data_cmd, 0, sizeof(spu_data_cmd) );
spu_data_cmd.pi_offset[0] = -1;
spu_data_cmd.pi_offset[1] = -1;
spu_data_cmd.p_data = NULL;
spu_data_cmd.b_palette = false;
spu_data_cmd.b_auto_crop = false;
spu_data_cmd.i_y_top_offset = 0;
@ -467,7 +466,8 @@ static int ParseControlSeq( decoder_t *p_dec, subpicture_t *p_spu,
*****************************************************************************/
static int ParseRLE( decoder_t *p_dec,
subpicture_data_t *p_spu_data,
const spu_properties_t *p_spu_properties )
const spu_properties_t *p_spu_properties,
uint16_t *p_pixeldata )
{
decoder_sys_t *p_sys = p_dec->p_sys;
@ -475,7 +475,7 @@ static int ParseRLE( decoder_t *p_dec,
const unsigned int i_height = p_spu_properties->i_height;
unsigned int i_x, i_y;
uint16_t *p_dest = p_spu_data->p_data;
uint16_t *p_dest = p_pixeldata;
/* The subtitles are interlaced, we need two offsets */
unsigned int i_id = 0; /* Start on the even SPU layer */
@ -701,12 +701,13 @@ static int ParseRLE( decoder_t *p_dec,
}
static void Render( decoder_t *p_dec, subpicture_t *p_spu,
subpicture_data_t *p_spu_data,
const uint16_t *p_pixeldata,
const subpicture_data_t *p_spu_data,
const spu_properties_t *p_spu_properties )
{
uint8_t *p_p;
int i_x, i_y, i_len, i_color, i_pitch;
const uint16_t *p_source = p_spu_data->p_data;
const uint16_t *p_source = p_pixeldata;
video_format_t fmt;
video_palette_t palette;

Loading…
Cancel
Save