* 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 <massiot@via.ecp.fr>
*
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'",
* libvlc.h: main libvlc header
*****************************************************************************
* Copyright (C) 1998-2002 VideoLAN
- * $Id: libvlc.h,v 1.35 2003/01/11 20:25:36 gitan Exp $
+ * $Id: libvlc.h,v 1.36 2003/01/22 10:44:50 fenrir Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
#define Nothing here, this is just to prevent update-po from being stupid
+static char *ppsz_sout_acodec[] = { "", "mpeg1", "mpeg2", "mpeg4", "vorbis", NULL };
+static char *ppsz_sout_vcodec[] = { "", "mpeg1", "mpeg2", "mpeg4", NULL };
+
/*****************************************************************************
* Configuration options for the main program. Each module will also separatly
* define its own configuration options.
"'any' at the end of the list to make sure there is a fallback for the " \
"types you didn't specify.")
+#define ENCODER_VIDEO_TEXT N_("choose prefered video encoder list")
+#define ENCODER_VIDEO_LONGTEXT N_( \
+ "This allows you to select the order in which vlc will choose its " \
+ "codecs. " )
+#define ENCODER_AUDIO_TEXT N_("choose prefered audio encoder list")
+#define ENCODER_AUDIO_LONGTEXT N_( \
+ "This allows you to select the order in which vlc will choose its " \
+ "codecs. " )
+
#define SOUT_TEXT N_("choose a stream output")
#define SOUT_LONGTEXT N_( \
"Empty if no stream output.")
"This allows you to choose if the video stream should be redirected to " \
"the stream output facility when this last one is enabled.")
+#define SOUT_VCODEC_TEXT N_("video encoding codec" )
+#define SOUT_VCODEC_LONGTEXT N_( \
+ "This allows you to force video encoding")
+
#define SOUT_AUDIO_TEXT N_("enable audio stream output")
#define SOUT_AUDIO_LONGTEXT N_( \
"This allows you to choose if the video stream should be redirected to " \
"the stream output facility when this last one is enabled.")
+#define SOUT_ACODEC_TEXT N_("audio encoding codec" )
+#define SOUT_ACODEC_LONGTEXT N_( \
+ "This allows you to force audio encoding")
+
#define PACKETIZER_TEXT N_("choose prefered packetizer list")
#define PACKETIZER_LONGTEXT N_( \
"This allows you to select the order in which vlc will choose its " \
add_category_hint( N_("Decoders"), NULL );
add_module( "codec", "decoder", NULL, NULL, CODEC_TEXT, CODEC_LONGTEXT );
+ add_category_hint( N_("Encoders"), NULL );
+ add_module( "video-encoder", "video encoder", NULL, NULL, ENCODER_VIDEO_TEXT, ENCODER_VIDEO_LONGTEXT );
+ add_module( "audio-encoder", "audio encoder", NULL, NULL, ENCODER_AUDIO_TEXT, ENCODER_AUDIO_LONGTEXT );
+
/* Stream output options */
add_category_hint( N_("Stream output"), NULL );
+ add_string( "sout", NULL, NULL, SOUT_TEXT, SOUT_LONGTEXT );
+ add_bool( "sout-audio", 1, NULL, SOUT_AUDIO_TEXT, SOUT_AUDIO_LONGTEXT );
+ add_bool( "sout-video", 1, NULL, SOUT_VIDEO_TEXT, SOUT_VIDEO_LONGTEXT );
+ add_string_from_list( "sout-acodec", "", ppsz_sout_acodec, NULL, SOUT_ACODEC_TEXT, SOUT_ACODEC_LONGTEXT );
+ add_string_from_list( "sout-vcodec", "", ppsz_sout_vcodec, NULL, SOUT_VCODEC_TEXT, SOUT_VCODEC_LONGTEXT );
add_module( "packetizer", "packetizer", NULL, NULL,
PACKETIZER_TEXT, PACKETIZER_LONGTEXT );
add_module( "mux", "sout mux", NULL, NULL, MUX_TEXT, MUX_LONGTEXT );
add_module( "access_output", "sout access", NULL, NULL,
ACCESS_OUTPUT_TEXT, ACCESS_OUTPUT_LONGTEXT );
- add_string( "sout", NULL, NULL, SOUT_TEXT, SOUT_LONGTEXT );
- add_bool( "sout-video", 1, NULL, SOUT_VIDEO_TEXT, SOUT_VIDEO_LONGTEXT );
- add_bool( "sout-audio", 1, NULL, SOUT_AUDIO_TEXT, SOUT_AUDIO_LONGTEXT );
/* CPU options */
add_category_hint( N_("CPU"), NULL );
* thread, and destroy a previously oppened video output thread.
*****************************************************************************
* Copyright (C) 2000-2001 VideoLAN
- * $Id: video_output.c,v 1.206 2003/01/12 15:38:35 sigmunau Exp $
+ * $Id: video_output.c,v 1.207 2003/01/22 10:44:50 fenrir Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
/* Reattach video output to p_vlc before bailing out */
if( p_vout )
{
- vlc_object_detach( p_vout );
- vlc_object_attach( p_vout, p_this->p_vlc );
+ char *psz_sout = config_GetPsz( p_this, "sout" );
+
+ if( !psz_sout || !*psz_sout )
+ {
+ vlc_object_detach( p_vout );
+ vlc_object_attach( p_vout, p_this->p_vlc );
+ }
+ else
+ {
+ vlc_object_detach( p_vout );
+// vlc_object_release( p_vout );
+ vout_Destroy( p_vout );
+ }
+ if( psz_sout ) free( psz_sout );
}
return NULL;