- do { \
- p_pic = block_ChainGather( p_sys->p_frame ); \
- p_pic->i_length = 0; /* FIXME */ \
- \
- p_sys->p_frame = NULL; \
- p_sys->b_slice = VLC_FALSE; \
+ do { \
+ p_pic = block_ChainGather( p_sys->p_frame ); \
+ p_pic->i_length = 0; /* FIXME */ \
+ \
+ p_sys->p_frame = NULL; \
+ p_sys->b_slice = VLC_FALSE; \
+ \
+ if( ( p_pic->i_flags & BLOCK_FLAG_TYPE_I ) && \
+ p_sys->p_sps && p_sys->p_pps ) \
+ { \
+ block_t *p_sps = block_Duplicate( p_sys->p_sps ); \
+ block_t *p_pps = block_Duplicate( p_sys->p_pps ); \
+ p_sps->i_dts = p_pps->i_dts = p_pic->i_dts; \
+ p_sps->i_pts = p_pps->i_pts = p_pic->i_pts; \
+ block_ChainAppend( &p_sps, p_pps ); \
+ block_ChainAppend( &p_sps, p_pic ); \
+ p_pic = block_ChainGather( p_sps ); \
+ } \