- block_t *p_frag;
- int i_read;
-
- // read sub payload length
- if( i_replicated_data_length == 1 )
- {
- i_sub_payload_data_length = p_peek[i_skip]; i_skip++;
- i_payload_data_pos++;
- }
- else
- {
- i_sub_payload_data_length = i_payload_data_length;
- }
-
- /* FIXME I don't use i_media_object_number, sould I ? */
- if( tk->p_frame && i_media_object_offset == 0 )
- {
- /* send complete packet to decoder */
- block_t *p_gather = block_ChainGather( tk->p_frame );
-
- if( p_sys->i_time < 0 )
- es_out_Control( p_demux->out, ES_OUT_SET_PCR, tk->i_time );
-
- es_out_Send( p_demux->out, tk->p_es, p_gather );
-
- tk->p_frame = NULL;
- }
-
- i_read = i_sub_payload_data_length + i_skip;
- if( ( p_frag = stream_Block( p_demux->s, i_read ) ) == NULL )
- {
- msg_Warn( p_demux, "cannot read data" );
- return 0;
- }
- i_packet_size_left -= i_read;
-
- p_frag->p_buffer += i_skip;
- p_frag->i_buffer -= i_skip;
-
- if( tk->p_frame == NULL )
- {
- tk->i_time =
- ( (mtime_t)i_pts + i_payload * (mtime_t)i_pts_delta );
-
- p_frag->i_pts = tk->i_time;
-
- if( tk->i_cat != VIDEO_ES )
- p_frag->i_dts = p_frag->i_pts;
- else
- {
- p_frag->i_dts = p_frag->i_pts;
- p_frag->i_pts = 0;
- }
- }
-
- block_ChainAppend( &tk->p_frame, p_frag );
-
- i_skip = 0;
- if( i_packet_size_left > 0 )
- {
- if( stream_Peek( p_demux->s, &p_peek, i_packet_size_left )
- < i_packet_size_left )
- {
- msg_Warn( p_demux, "cannot peek, EOF ?" );
- return 0;
- }
- }