Commit 1091a5bb authored by Gildas Bazin's avatar Gildas Bazin

* src/input/input_dec.c: use VLC_OBJECT_PACKETIZER for packetizers.
* modules/mux/ogg.c: win32 fix for ogg muxing with several elementary streams.
parent f2b00777
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ogg.c: ogg muxer module for vlc * ogg.c: ogg muxer module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * Copyright (C) 2001, 2002 VideoLAN
* $Id: ogg.c,v 1.17 2003/10/09 19:31:38 gbazin Exp $ * $Id: ogg.c,v 1.18 2003/10/10 17:09:42 gbazin Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Gildas Bazin <gbazin@netcourrier.com> * Gildas Bazin <gbazin@netcourrier.com>
...@@ -27,7 +27,10 @@ ...@@ -27,7 +27,10 @@
*****************************************************************************/ *****************************************************************************/
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/types.h>
#ifdef HAVE_TIME_H
# include <time.h>
#endif
#include <vlc/vlc.h> #include <vlc/vlc.h>
#include <vlc/input.h> #include <vlc/input.h>
...@@ -226,6 +229,7 @@ struct sout_mux_sys_t ...@@ -226,6 +229,7 @@ struct sout_mux_sys_t
int i_streams; int i_streams;
mtime_t i_start_dts; mtime_t i_start_dts;
int i_next_serial_no;
/* number of logical streams pending to be added */ /* number of logical streams pending to be added */
int i_add_streams; int i_add_streams;
...@@ -262,6 +266,12 @@ static int Open( vlc_object_t *p_this ) ...@@ -262,6 +266,12 @@ static int Open( vlc_object_t *p_this )
p_mux->pf_mux = Mux; p_mux->pf_mux = Mux;
p_mux->i_preheader = 1; p_mux->i_preheader = 1;
/* First serial number is random.
* (Done like this because on win32 you need to seed the random number
* generator once per thread). */
srand( (unsigned int)time( NULL ) );
p_sys->i_next_serial_no = rand();
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -330,7 +340,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) ...@@ -330,7 +340,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
p_stream->i_cat = p_input->p_fmt->i_cat; p_stream->i_cat = p_input->p_fmt->i_cat;
p_stream->i_fourcc = p_input->p_fmt->i_fourcc; p_stream->i_fourcc = p_input->p_fmt->i_fourcc;
p_stream->i_serial_no = rand(); p_stream->i_serial_no = p_sys->i_next_serial_no++;
p_stream->i_packet_no = 0; p_stream->i_packet_no = 0;
p_stream->i_sout_headers = 0; p_stream->i_sout_headers = 0;
...@@ -883,7 +893,7 @@ static int Mux( sout_mux_t *p_mux ) ...@@ -883,7 +893,7 @@ static int Mux( sout_mux_t *p_mux )
if( p_stream->i_fourcc == VLC_FOURCC( 't', 'h', 'e', 'o' ) ) if( p_stream->i_fourcc == VLC_FOURCC( 't', 'h', 'e', 'o' ) )
{ {
/* FIXME, we assume only keyframes and 25fps */ /* FIXME, we assume only keyframes and 25fps */
op.granulepos = ( ( i_dts - p_sys->i_start_dts ) * I64C(25) op.granulepos = ( ( i_dts - p_sys->i_start_dts ) * I64C(25)
/ I64C(1000000) ) << p_stream->i_keyframe_granule_shift; / I64C(1000000) ) << p_stream->i_keyframe_granule_shift;
} }
else else
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_dec.c: Functions for the management of decoders * input_dec.c: Functions for the management of decoders
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: input_dec.c,v 1.64 2003/10/08 21:01:07 gbazin Exp $ * $Id: input_dec.c,v 1.65 2003/10/10 17:09:42 gbazin Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include "input_ext-intf.h" #include "input_ext-intf.h"
#include "input_ext-plugins.h" #include "input_ext-plugins.h"
static decoder_t * CreateDecoder( input_thread_t *, es_descriptor_t * ); static decoder_t * CreateDecoder( input_thread_t *, es_descriptor_t *, int );
static int DecoderThread( decoder_t * ); static int DecoderThread( decoder_t * );
static void DeleteDecoder( decoder_t * ); static void DeleteDecoder( decoder_t * );
...@@ -44,19 +44,9 @@ decoder_fifo_t * input_RunDecoder( input_thread_t * p_input, ...@@ -44,19 +44,9 @@ decoder_fifo_t * input_RunDecoder( input_thread_t * p_input,
es_descriptor_t * p_es ) es_descriptor_t * p_es )
{ {
vlc_value_t val; vlc_value_t val;
decoder_t *p_dec; decoder_t *p_dec = NULL;
int i_priority; int i_priority;
/* Create the decoder configuration structure */
p_dec = CreateDecoder( p_input, p_es );
if( p_dec == NULL )
{
msg_Err( p_input, "could not create decoder" );
return NULL;
}
p_dec->p_module = NULL;
/* If we are in sout mode, search for packetizer module */ /* If we are in sout mode, search for packetizer module */
var_Get( p_input, "sout", &val ); var_Get( p_input, "sout", &val );
if( !p_es->b_force_decoder && val.psz_string && *val.psz_string ) if( !p_es->b_force_decoder && val.psz_string && *val.psz_string )
...@@ -75,19 +65,35 @@ decoder_fifo_t * input_RunDecoder( input_thread_t * p_input, ...@@ -75,19 +65,35 @@ decoder_fifo_t * input_RunDecoder( input_thread_t * p_input,
if( val.b_bool ) if( val.b_bool )
{ {
/* Create the decoder configuration structure */
p_dec = CreateDecoder( p_input, p_es, VLC_OBJECT_PACKETIZER );
if( p_dec == NULL )
{
msg_Err( p_input, "could not create packetizer" );
return NULL;
}
p_dec->p_module = p_dec->p_module =
module_Need( p_dec, "packetizer", "$packetizer" ); module_Need( p_dec, "packetizer", "$packetizer" );
} }
} }
else else
{ {
/* Create the decoder configuration structure */
p_dec = CreateDecoder( p_input, p_es, VLC_OBJECT_DECODER );
if( p_dec == NULL )
{
msg_Err( p_input, "could not create decoder" );
return NULL;
}
/* default Get a suitable decoder module */ /* default Get a suitable decoder module */
p_dec->p_module = module_Need( p_dec, "decoder", "$codec" ); p_dec->p_module = module_Need( p_dec, "decoder", "$codec" );
if( val.psz_string ) free( val.psz_string ); if( val.psz_string ) free( val.psz_string );
} }
if( p_dec->p_module == NULL ) if( !p_dec || !p_dec->p_module )
{ {
msg_Err( p_dec, "no suitable decoder module for fourcc `%4.4s'.\n" msg_Err( p_dec, "no suitable decoder module for fourcc `%4.4s'.\n"
"VLC probably does not support this sound or video format.", "VLC probably does not support this sound or video format.",
...@@ -278,11 +284,11 @@ void input_EscapeAudioDiscontinuity( input_thread_t * p_input ) ...@@ -278,11 +284,11 @@ void input_EscapeAudioDiscontinuity( input_thread_t * p_input )
* CreateDecoderFifo: create a decoder_fifo_t * CreateDecoderFifo: create a decoder_fifo_t
*****************************************************************************/ *****************************************************************************/
static decoder_t * CreateDecoder( input_thread_t * p_input, static decoder_t * CreateDecoder( input_thread_t * p_input,
es_descriptor_t * p_es ) es_descriptor_t * p_es, int i_object_type )
{ {
decoder_t * p_dec; decoder_t * p_dec;
p_dec = vlc_object_create( p_input, VLC_OBJECT_DECODER ); p_dec = vlc_object_create( p_input, i_object_type );
if( p_dec == NULL ) if( p_dec == NULL )
{ {
msg_Err( p_input, "out of memory" ); msg_Err( p_input, "out of memory" );
...@@ -372,21 +378,21 @@ static int DecoderThread( decoder_t * p_dec ) ...@@ -372,21 +378,21 @@ static int DecoderThread( decoder_t * p_dec )
break; break;
} }
for( i_size = 0, p_data = p_pes->p_first; for( i_size = 0, p_data = p_pes->p_first;
p_data != NULL; p_data = p_data->p_next ) p_data != NULL; p_data = p_data->p_next )
{ {
i_size += p_data->p_payload_end - p_data->p_payload_start; i_size += p_data->p_payload_end - p_data->p_payload_start;
} }
p_block = block_New( p_dec, i_size ); p_block = block_New( p_dec, i_size );
for( i_size = 0, p_data = p_pes->p_first; for( i_size = 0, p_data = p_pes->p_first;
p_data != NULL; p_data = p_data->p_next ) p_data != NULL; p_data = p_data->p_next )
{ {
if( p_data->p_payload_end == p_data->p_payload_start ) if( p_data->p_payload_end == p_data->p_payload_start )
continue; continue;
memcpy( p_block->p_buffer + i_size, p_data->p_payload_start, memcpy( p_block->p_buffer + i_size, p_data->p_payload_start,
p_data->p_payload_end - p_data->p_payload_start ); p_data->p_payload_end - p_data->p_payload_start );
i_size += p_data->p_payload_end - p_data->p_payload_start; i_size += p_data->p_payload_end - p_data->p_payload_start;
} }
p_block->i_pts = p_pes->i_pts; p_block->i_pts = p_pes->i_pts;
p_block->i_dts = p_pes->i_dts; p_block->i_dts = p_pes->i_dts;
......
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