+static block_t *OutputPicture( decoder_t *p_dec )
+{
+ decoder_sys_t *p_sys = p_dec->p_sys;
+ block_t *p_pic;
+
+ if( !p_sys->b_header && p_sys->slice.i_frame_type != BLOCK_FLAG_TYPE_I)
+ return NULL;
+
+ if( p_sys->slice.i_frame_type == 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_sys->p_frame->i_dts;
+ p_sps->i_pts = p_sys->p_frame->i_pts;
+ block_ChainAppend( &p_sps, p_pps );
+ block_ChainAppend( &p_sps, p_sys->p_frame );
+ p_sys->b_header = true;
+ p_pic = block_ChainGather( p_sps );
+ }
+ else
+ {
+ p_pic = block_ChainGather( p_sys->p_frame );
+ }
+ p_pic->i_length = 0; /* FIXME */
+ p_pic->i_flags |= p_sys->slice.i_frame_type;
+
+ p_sys->slice.i_frame_type = 0;
+ p_sys->p_frame = NULL;
+ p_sys->b_slice = false;
+
+ return p_pic;
+}
+