* all: modified files for video transcoding. Still needed configure.ac.in
authorLaurent Aimar <fenrir@videolan.org>
Wed, 22 Jan 2003 10:44:50 +0000 (10:44 +0000)
committerLaurent Aimar <fenrir@videolan.org>
Wed, 22 Jan 2003 10:44:50 +0000 (10:44 +0000)
Makefile.am
modules/Makefile.am
modules/video_output/Modules.am
src/input/input_dec.c
src/libvlc.h
src/video_output/video_output.c
src/video_output/vout_pictures.c

index 6fffb5a..4527a4a 100644 (file)
@@ -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 \
index 9b877b4..2c668ba 100644 (file)
@@ -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 \
index a384a24..600420b 100644 (file)
@@ -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
index f319f46..7fbc665 100644 (file)
@@ -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 <massiot@via.ecp.fr>
  *
@@ -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'",
index 8608c43..94c524f 100644 (file)
@@ -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 <seguin@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -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.
     "'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 " \
@@ -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 );
index cd1162e..eed2c83 100644 (file)
@@ -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 <seguin@via.ecp.fr>
  *
@@ -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;
index 74830bd..19c07e6 100644 (file)
@@ -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 <seguin@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -674,4 +674,5 @@ static void CopyPicture( vout_thread_t * p_vout,
             }
         }
     }
+    p_dest->date = p_src->date;
 }