packetizer_Init( &p_sys->packetizer,
p_h264_startcode, sizeof(p_h264_startcode),
- p_h264_startcode, 1,
+ p_h264_startcode, 1, 5,
PacketizeReset, PacketizeParse, PacketizeValidate, p_dec );
p_sys->b_slice = false;
decoder_t *p_dec = p_private;
/* Remove trailing 0 bytes */
- while( p_block->i_buffer && p_block->p_buffer[p_block->i_buffer-1] == 0x00 )
+ while( p_block->i_buffer > 5 && p_block->p_buffer[p_block->i_buffer-1] == 0x00 )
p_block->i_buffer--;
return ParseNALBlock( p_dec, pb_ts_used, p_block );
/* Misc init */
packetizer_Init( &p_sys->packetizer,
p_mp4v_startcode, sizeof(p_mp4v_startcode),
- NULL, 0,
+ NULL, 0, 4,
PacketizeReset, PacketizeParse, PacketizeValidate, p_dec );
p_sys->p_frame = NULL;
/* Misc init */
packetizer_Init( &p_sys->packetizer,
p_mp2v_startcode, sizeof(p_mp2v_startcode),
- NULL, 0,
+ NULL, 0, 4,
PacketizeReset, PacketizeParse, PacketizeValidate, p_dec );
p_sys->p_seq = NULL;
decoder_t *p_dec = p_private;
/* Check if we have a picture start code */
- *pb_ts_used = p_block->i_buffer >= 4 && p_block->p_buffer[3] == 0x00;
+ *pb_ts_used = p_block->p_buffer[3] == 0x00;
return ParseMPEGBlock( p_dec, p_block );
}
int i_au_prepend;
const uint8_t *p_au_prepend;
+ unsigned i_au_min_size;
+
void *p_private;
packetizer_reset_t pf_reset;
packetizer_parse_t pf_parse;
static inline void packetizer_Init( packetizer_t *p_pack,
const uint8_t *p_startcode, int i_startcode,
const uint8_t *p_au_prepend, int i_au_prepend,
+ unsigned i_au_min_size,
packetizer_reset_t pf_reset,
packetizer_parse_t pf_parse,
packetizer_validate_t pf_validate,
p_pack->i_au_prepend = i_au_prepend;
p_pack->p_au_prepend = p_au_prepend;
+ p_pack->i_au_min_size = i_au_min_size;
p_pack->i_startcode = i_startcode;
p_pack->p_startcode = p_startcode;
p_pack->i_offset = 0;
/* Parse the NAL */
- p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic );
- if( b_used_ts )
+ if( p_pic->i_buffer < p_pack->i_au_min_size )
+ {
+ block_Release( p_pic );
+ p_pic = NULL;
+ }
+ else
{
- p_block_bytestream->i_dts = VLC_TS_INVALID;
- p_block_bytestream->i_pts = VLC_TS_INVALID;
+ p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic );
+ if( b_used_ts )
+ {
+ p_block_bytestream->i_dts = VLC_TS_INVALID;
+ p_block_bytestream->i_pts = VLC_TS_INVALID;
+ }
}
if( !p_pic )
packetizer_Init( &p_sys->packetizer,
p_vc1_startcode, sizeof(p_vc1_startcode),
- NULL, 0,
+ NULL, 0, 4,
PacketizeReset, PacketizeParse, PacketizeValidate, p_dec );
p_sys->b_sequence_header = false;