Commit 621e5f40 authored by Laurent Aimar's avatar Laurent Aimar

* asf: pes -> block

parent 52226f31
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* asf.c : ASFv01 file input module for vlc * asf.c : ASFv01 file input module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2003 VideoLAN * Copyright (C) 2002-2003 VideoLAN
* $Id: asf.c,v 1.44 2003/11/21 00:38:01 gbazin Exp $ * $Id: asf.c,v 1.45 2003/11/21 16:02:36 fenrir Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -61,7 +61,7 @@ typedef struct asf_stream_s ...@@ -61,7 +61,7 @@ typedef struct asf_stream_s
mtime_t i_time; mtime_t i_time;
pes_packet_t *p_pes; /* used to keep uncomplete frames */ block_t *p_frame; /* use to gather complete frame */
} asf_stream_t; } asf_stream_t;
...@@ -176,6 +176,7 @@ static int Open( vlc_object_t * p_this ) ...@@ -176,6 +176,7 @@ static int Open( vlc_object_t * p_this )
p_stream->i_time = -1; p_stream->i_time = -1;
p_stream->p_sp = p_sp; p_stream->p_sp = p_sp;
p_stream->p_es = NULL; p_stream->p_es = NULL;
p_stream->p_frame = NULL;
if( ASF_CmpGUID( &p_sp->i_stream_type, &asf_object_stream_type_audio ) && if( ASF_CmpGUID( &p_sp->i_stream_type, &asf_object_stream_type_audio ) &&
p_sp->i_type_specific_data_length >= sizeof( WAVEFORMATEX ) - 2 ) p_sp->i_type_specific_data_length >= sizeof( WAVEFORMATEX ) - 2 )
...@@ -443,16 +444,16 @@ static void Close( vlc_object_t * p_this ) ...@@ -443,16 +444,16 @@ static void Close( vlc_object_t * p_this )
ASF_FreeObjectRoot( p_input->s, p_sys->p_root ); ASF_FreeObjectRoot( p_input->s, p_sys->p_root );
for( i_stream = 0; i_stream < 128; i_stream++ ) for( i_stream = 0; i_stream < 128; i_stream++ )
{ {
#define p_stream p_sys->stream[i_stream] asf_stream_t *p_stream = p_sys->stream[i_stream];
if( p_stream ) if( p_stream )
{ {
if( p_stream->p_pes ) if( p_stream->p_frame )
{ {
input_DeletePES( p_input->p_method_data, p_stream->p_pes ); block_ChainRelease( p_stream->p_frame );
} }
free( p_stream ); free( p_stream );
} }
#undef p_stream
} }
free( p_sys ); free( p_sys );
} }
...@@ -469,7 +470,8 @@ static mtime_t GetMoviePTS( demux_sys_t *p_sys ) ...@@ -469,7 +470,8 @@ static mtime_t GetMoviePTS( demux_sys_t *p_sys )
i_time = -1; i_time = -1;
for( i_stream = 0; i_stream < 128 ; i_stream++ ) for( i_stream = 0; i_stream < 128 ; i_stream++ )
{ {
#define p_stream p_sys->stream[i_stream] asf_stream_t *p_stream = p_sys->stream[i_stream];
if( p_stream && p_stream->p_es && p_stream->i_time > 0) if( p_stream && p_stream->p_es && p_stream->i_time > 0)
{ {
if( i_time < 0 ) if( i_time < 0 )
...@@ -481,7 +483,6 @@ static mtime_t GetMoviePTS( demux_sys_t *p_sys ) ...@@ -481,7 +483,6 @@ static mtime_t GetMoviePTS( demux_sys_t *p_sys )
i_time = __MIN( i_time, p_stream->i_time ); i_time = __MIN( i_time, p_stream->i_time );
} }
} }
#undef p_stream
} }
return( i_time ); return( i_time );
...@@ -697,8 +698,9 @@ static int DemuxPacket( input_thread_t *p_input, vlc_bool_t b_play_audio ) ...@@ -697,8 +698,9 @@ static int DemuxPacket( input_thread_t *p_input, vlc_bool_t b_play_audio )
i_packet_size_left > 0; i_packet_size_left > 0;
i_payload_data_pos += i_sub_payload_data_length ) i_payload_data_pos += i_sub_payload_data_length )
{ {
data_packet_t *p_data; block_t *p_frag;
int i_read; int i_read;
// read sub payload length // read sub payload length
if( i_replicated_data_length == 1 ) if( i_replicated_data_length == 1 )
{ {
...@@ -711,55 +713,40 @@ static int DemuxPacket( input_thread_t *p_input, vlc_bool_t b_play_audio ) ...@@ -711,55 +713,40 @@ static int DemuxPacket( input_thread_t *p_input, vlc_bool_t b_play_audio )
} }
/* FIXME I don't use i_media_object_number, sould I ? */ /* FIXME I don't use i_media_object_number, sould I ? */
if( p_stream->p_pes && i_media_object_offset == 0 ) if( p_stream->p_frame && i_media_object_offset == 0 )
{ {
/* send complete packet to decoder */ /* send complete packet to decoder */
if( p_stream->p_pes->i_pes_size > 0 ) block_t *p_gather = block_ChainGather( p_stream->p_frame );
{
es_out_SendPES( p_input->p_es_out, p_stream->p_es, p_stream->p_pes );
p_stream->p_pes = NULL;
}
}
if( !p_stream->p_pes ) // add a new PES es_out_Send( p_input->p_es_out, p_stream->p_es, p_gather );
{
p_stream->i_time =
( (mtime_t)i_pts + i_payload * (mtime_t)i_pts_delta );
p_stream->p_pes = input_NewPES( p_input->p_method_data ); p_stream->p_frame = NULL;
p_stream->p_pes->i_dts =
p_stream->p_pes->i_pts =
input_ClockGetTS( p_input,
p_input->stream.p_selected_program,
p_stream->i_time * 9 /100 );
//msg_Err( p_input, "stream[0x%2x] pts=%lld", i_stream_number, p_stream->p_pes->i_pts );
p_stream->p_pes->p_next = NULL;
p_stream->p_pes->i_nb_data = 0;
p_stream->p_pes->i_pes_size = 0;
} }
i_read = i_sub_payload_data_length + i_skip; i_read = i_sub_payload_data_length + i_skip;
if((p_data = stream_DataPacket( p_input->s,i_read,VLC_TRUE))==NULL) if( ( p_frag = stream_Block( p_input->s, i_read ) ) == NULL )
{ {
msg_Warn( p_input, "cannot read data" ); msg_Warn( p_input, "cannot read data" );
return( 0 ); return( 0 );
} }
p_data->p_payload_start += i_skip;
i_packet_size_left -= i_read; i_packet_size_left -= i_read;
p_frag->p_buffer += i_skip;
p_frag->i_buffer -= i_skip;
if( !p_stream->p_pes->p_first ) if( p_stream->p_frame == NULL )
{
p_stream->p_pes->p_first = p_stream->p_pes->p_last = p_data;
}
else
{ {
p_stream->p_pes->p_last->p_next = p_data; p_stream->i_time =
p_stream->p_pes->p_last = p_data; ( (mtime_t)i_pts + i_payload * (mtime_t)i_pts_delta );
p_frag->i_dts =
p_frag->i_pts =
input_ClockGetTS( p_input,
p_input->stream.p_selected_program,
p_stream->i_time * 9 /100 );
} }
p_stream->p_pes->i_pes_size += i_sub_payload_data_length;
p_stream->p_pes->i_nb_data++; block_ChainAppend( &p_stream->p_frame, p_frag );
i_skip = 0; i_skip = 0;
if( i_packet_size_left > 0 ) if( i_packet_size_left > 0 )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment