/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
#include <vlc/vlc.h>
#include <vlc_sout.h>
/* FIXME: FFMPEG isn't happy at all if you leave this */
if( p_dec->fmt_out.i_extra ) free( p_dec->fmt_out.p_extra );
p_dec->fmt_out.i_extra = 0; p_dec->fmt_out.p_extra = NULL;
-
+
/* Set the new extradata */
p_dec->fmt_out.i_extra = p_sys->p_pps->i_buffer + p_sys->p_sps->i_buffer;
p_dec->fmt_out.p_extra = (uint8_t*)malloc( p_dec->fmt_out.i_extra );
}
else
{
- /* This type of stream contains data with 3 of 4 byte startcodes
+ /* This type of stream contains data with 3 of 4 byte startcodes
* The fmt_in.p_extra MAY contain SPS/PPS with 4 byte startcodes
* The fmt_out.p_extra should be the same */
-
+
/* Set callback */
p_dec->pf_packetize = Packetize;
decoder_sys_t *p_sys = p_dec->p_sys;
block_t *p_pic;
- if( !pp_block || !*pp_block ) return NULL;
+ if( !pp_block || !*pp_block )
+ return NULL;
+
+ if( (*pp_block)->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) )
+ {
+ if( (*pp_block)->i_flags&BLOCK_FLAG_CORRUPTED )
+ {
+ p_sys->i_state = STATE_NOSYNC;
+ block_BytestreamFlush( &p_sys->bytestream );
+
+ if( p_sys->p_frame )
+ block_ChainRelease( p_sys->p_frame );
+ p_sys->p_frame = NULL;
+ p_sys->slice.i_frame_type = 0;
+ p_sys->b_slice = VLC_FALSE;
+ }
+ block_Release( *pp_block );
+ return NULL;
+ }
block_BytestreamPush( &p_sys->bytestream, *pp_block );
block_t *p_ret = NULL;
uint8_t *p;
- if( !pp_block || !*pp_block ) return NULL;
+ if( !pp_block || !*pp_block )
+ return NULL;
+ if( (*pp_block)->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) )
+ {
+ block_Release( *pp_block );
+ return NULL;
+ }
p_block = *pp_block;
*pp_block = NULL;
/*****************************************************************************
* ParseNALBlock: parses annexB type NALs
- * All p_frag blocks are required to start with 0 0 0 1 4-byte startcode
+ * All p_frag blocks are required to start with 0 0 0 1 4-byte startcode
*****************************************************************************/
static block_t *ParseNALBlock( decoder_t *p_dec, block_t *p_frag )
{