From 2b9dfff88360ed512ccb00c6ac6424697d602d7e Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Wed, 22 Jan 2003 10:44:50 +0000 Subject: [PATCH] * all: modified files for video transcoding. Still needed configure.ac.in --- Makefile.am | 1 + modules/Makefile.am | 2 ++ modules/video_output/Modules.am | 1 + src/input/input_dec.c | 48 +++++++++++++++++++++++++------- src/libvlc.h | 34 +++++++++++++++++++--- src/video_output/video_output.c | 18 ++++++++++-- src/video_output/vout_pictures.c | 3 +- 7 files changed, 89 insertions(+), 18 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6fffb5a0f8..4527a4a06c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -160,6 +160,7 @@ HEADERS_include = \ include/darwin_specific.h \ include/codecs.h \ include/error.h \ + include/encoder.h \ include/input_ext-dec.h \ include/input_ext-intf.h \ include/input_ext-plugins.h \ diff --git a/modules/Makefile.am b/modules/Makefile.am index 9b877b49f5..2c668ba739 100644 --- a/modules/Makefile.am +++ b/modules/Makefile.am @@ -36,6 +36,8 @@ EXTRA_DIST = \ demux/mpeg/Modules.am \ demux/util/Modules.am \ demux/wav/Modules.am \ + encoder/Modules.am \ + encoder/ffmpeg/Modules.am \ gui/beos/Modules.am \ gui/familiar/Modules.am \ gui/gtk/Modules.am \ diff --git a/modules/video_output/Modules.am b/modules/video_output/Modules.am index a384a24d2f..600420b5f5 100644 --- a/modules/video_output/Modules.am +++ b/modules/video_output/Modules.am @@ -5,3 +5,4 @@ SOURCES_glide = modules/video_output/glide.c SOURCES_vout_sdl = modules/video_output/sdl.c SOURCES_svgalib = modules/video_output/svgalib.c SOURCES_wingdi = modules/video_output/wingdi.c +SOURCES_vout_encoder = modules/video_output/encoder.c 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'", diff --git a/src/libvlc.h b/src/libvlc.h index 8608c43811..94c524fab7 100644 --- a/src/libvlc.h +++ b/src/libvlc.h @@ -2,7 +2,7 @@ * 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 * Samuel Hocevar @@ -25,6 +25,9 @@ #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. @@ -262,6 +265,15 @@ "'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.") @@ -271,11 +283,19 @@ "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 " \ @@ -478,16 +498,22 @@ vlc_module_begin(); 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 ); diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index cd1162e3f3..eed2c83a4c 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -5,7 +5,7 @@ * 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 * @@ -71,8 +71,20 @@ vout_thread_t * __vout_Request ( vlc_object_t *p_this, vout_thread_t *p_vout, /* 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; diff --git a/src/video_output/vout_pictures.c b/src/video_output/vout_pictures.c index 74830bddbc..19c07e6f63 100644 --- a/src/video_output/vout_pictures.c +++ b/src/video_output/vout_pictures.c @@ -2,7 +2,7 @@ * vout_pictures.c : picture management functions ***************************************************************************** * Copyright (C) 2000 VideoLAN - * $Id: vout_pictures.c,v 1.33 2003/01/15 13:16:40 sam Exp $ + * $Id: vout_pictures.c,v 1.34 2003/01/22 10:44:50 fenrir Exp $ * * Authors: Vincent Seguin * Samuel Hocevar @@ -674,4 +674,5 @@ static void CopyPicture( vout_thread_t * p_vout, } } } + p_dest->date = p_src->date; } -- 2.39.5