int i_offsetv;
uint8_t screen[CDG_SCREEN_PITCH*CDG_SCREEN_HEIGHT];
uint8_t *p_screen;
+
+ int i_packet;
};
#define CDG_PACKET_SIZE (24)
/* Init */
p_sys->p_screen = p_sys->screen;
+ p_sys->i_packet = 0;
/* Set output properties
* TODO maybe it would be better to use RV16 or RV24 ? */
return NULL;
p_block = *pp_block;
+ if( p_block->i_flags & (BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) )
+ {
+ p_sys->i_packet = 0;
+ goto exit;
+ }
+
/* Decode packet */
while( p_block->i_buffer >= CDG_PACKET_SIZE )
{
p_block->p_buffer += CDG_PACKET_SIZE;
}
- /* Get a new picture */
- p_pic = decoder_NewPicture( p_dec );
- if( !p_pic )
- goto error;
+ /* Only display 25 frame per second (there is 75 packets per second) */
+ if( (p_sys->i_packet%3) == 1 )
+ {
+ /* Get a new picture */
+ p_pic = decoder_NewPicture( p_dec );
+ if( !p_pic )
+ goto exit;
- Render( p_sys, p_pic );
- p_pic->date = p_block->i_pts > 0 ? p_block->i_pts : p_block->i_dts;
+ Render( p_sys, p_pic );
+ p_pic->date = p_block->i_pts > 0 ? p_block->i_pts : p_block->i_dts;
+ }
+exit:
block_Release( p_block ); *pp_block = NULL;
return p_pic;
-
-error:
- block_Release( p_block ); *pp_block = NULL;
- return NULL;
}
/*****************************************************************************
if( i_buffer != CDG_PACKET_SIZE )
return -1;
+ p_cdg->i_packet++;
+
/* Handle CDG command only */
if( i_cmd != 0x09 )
return 0;