X-Git-Url: http://git.videolan.org/gitweb.cgi/vlc.git/?p=vlc.git;p=vlc.git;a=blobdiff_plain;f=src%2Finput%2Finput_dec.c;h=7fbc665d7241a51ea90f2ce24dbdafbb381d4eb8;hp=f319f46bbdda54cb164639a8d4696722fe283471;hb=2b9dfff88360ed512ccb00c6ac6424697d602d7e;hpb=412d64b1e9973f1037d9e9d45934a0c05a2c39b0;ds=sidebyside diff --git a/src/input/input_dec.c b/src/input/input_dec.c index f319f46bbd..7fbc665d72 100644 --- a/src/input/input_dec.c +++ b/src/input/input_dec.c @@ -2,7 +2,7 @@ * input_dec.c: Functions for the management of decoders ***************************************************************************** * Copyright (C) 1999-2001 VideoLAN - * $Id: input_dec.c,v 1.55 2003/01/07 21:49:01 fenrir Exp $ + * $Id: input_dec.c,v 1.56 2003/01/22 10:44:50 fenrir Exp $ * * Authors: Christophe Massiot * @@ -76,20 +76,48 @@ decoder_fifo_t * input_RunDecoder( input_thread_t * p_input, if( b_sout ) { - p_fifo->p_module = - module_Need( p_fifo, "packetizer", "$packetizer" ); + vlc_bool_t b_reencode = VLC_FALSE; + + if( p_es->i_cat == AUDIO_ES ) + { + char *psz_sout_acodec = config_GetPsz( p_input, "sout-acodec" ); + if( psz_sout_acodec != NULL && *psz_sout_acodec != '\0' ) + { + msg_Dbg( p_input, "audio reencoding requested -> unsupported" ); + b_reencode = VLC_TRUE; + } + } + else if( p_es->i_cat == VIDEO_ES ) + { + char *psz_sout_vcodec = config_GetPsz( p_input, "sout-vcodec" ); + if( psz_sout_vcodec != NULL && *psz_sout_vcodec != '\0' ) + { + msg_Dbg( p_input, "video reencoding requested" ); + /* force encoder video output */ + config_PutPsz( p_input, "vout", "encoder" ); + b_reencode = VLC_TRUE; + } + } + + if( !b_reencode ) + { + /* we don't want to reencode so search for a packetizer */ + p_fifo->p_module = + module_Need( p_fifo, "packetizer", "$packetizer" ); + } + else + { + /* get a suitable decoder module to do reencoding*/ + p_fifo->p_module = module_Need( p_fifo, "decoder", "$codec" ); + } } } - - /* default Get a suitable decoder module */ - if( p_fifo->p_module == NULL ) + else { + /* default Get a suitable decoder module */ p_fifo->p_module = module_Need( p_fifo, "decoder", "$codec" ); } -#if 0 - /* Get a suitable module */ - p_fifo->p_module = module_Need( p_fifo, "decoder", "$codec" ); -#endif + if( p_fifo->p_module == NULL ) { msg_Err( p_fifo, "no suitable decoder module for fourcc `%4.4s'",