* modules/gui/wxwindows/streamout.cpp: added vorbis transcoding + fixed default codec...
authorGildas Bazin <gbazin@videolan.org>
Mon, 7 Jul 2003 15:50:44 +0000 (15:50 +0000)
committerGildas Bazin <gbazin@videolan.org>
Mon, 7 Jul 2003 15:50:44 +0000 (15:50 +0000)
* modules/stream_out/transcode.c: fixed segfault when muxer doesn't handle an audio codec, fixed mp3 transcoding support.
* modules/stream_out/standard.c: clean-up.

modules/gui/wxwindows/streamout.cpp
modules/stream_out/standard.c
modules/stream_out/transcode.c

index 4aa5758..8f6fde8 100644 (file)
@@ -2,7 +2,7 @@
  * streamout.cpp : wxWindows plugin for vlc
  *****************************************************************************
  * Copyright (C) 2000-2001 VideoLAN
- * $Id: streamout.cpp,v 1.21 2003/07/07 07:14:56 adn Exp $
+ * $Id: streamout.cpp,v 1.22 2003/07/07 15:50:44 gbazin Exp $
  *
  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  *
@@ -592,9 +592,10 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
     video_transc_checkbox =
         new wxCheckBox( panel, VideoTranscEnable_Event, wxU(_("Video codec")));
     video_codec_combo =
-        new wxComboBox( panel, VideoTranscCodec_Event, wxT("mp4v"),
+        new wxComboBox( panel, VideoTranscCodec_Event, wxT(""),
                         wxPoint(20,25), wxDefaultSize, WXSIZEOF(vcodecs_array),
                         vcodecs_array, wxCB_READONLY );
+    video_codec_combo->SetSelection(1);
     wxStaticText *bitrate_label =
         new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
     video_bitrate_combo =
@@ -615,7 +616,8 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
     {
         wxT("mpga"),
         wxT("mp3"),
-        wxT("a52")
+        wxT("a52"),
+        wxT("vorb")
     };
     static const wxString abitrates_array[] =
     {
@@ -630,9 +632,10 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
     audio_transc_checkbox =
         new wxCheckBox( panel, AudioTranscEnable_Event, wxU(_("Audio codec")));
     audio_codec_combo =
-        new wxComboBox( panel, AudioTranscCodec_Event, wxT("mpga"),
+        new wxComboBox( panel, AudioTranscCodec_Event, wxT(""),
                         wxPoint(20,25), wxDefaultSize, WXSIZEOF(acodecs_array),
                         acodecs_array, wxCB_READONLY );
+    audio_codec_combo->SetSelection(0);
     bitrate_label =
         new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
     audio_bitrate_combo =
index 4b70ec9..1e962d7 100644 (file)
@@ -2,7 +2,7 @@
  * standard.c
  *****************************************************************************
  * Copyright (C) 2001, 2002 VideoLAN
- * $Id: standard.c,v 1.7 2003/07/05 15:00:28 zorglub Exp $
+ * $Id: standard.c,v 1.8 2003/07/07 15:50:43 gbazin Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
@@ -59,7 +59,6 @@ struct sout_stream_sys_t
 {
     sout_mux_t           *p_mux;
     sap_session_t        *p_sap;
-    vlc_bool_t           b_sap;
 };
 
 /*****************************************************************************
@@ -71,49 +70,27 @@ static int Open( vlc_object_t *p_this )
     sout_instance_t     *p_sout = p_stream->p_sout;
     sout_stream_sys_t   *p_sys = malloc( sizeof( sout_stream_sys_t) );
 
-    char   *psz_mux      = sout_cfg_find_value( p_stream->p_cfg, "mux" );
-    char   *psz_access   = sout_cfg_find_value( p_stream->p_cfg, "access" );
-    char   *psz_url      = sout_cfg_find_value( p_stream->p_cfg, "url" );
-    char   *psz_ipv      = sout_cfg_find_value( p_stream->p_cfg, "sap_ipv" );
-    char   *psz_v6_scope = sout_cfg_find_value( p_stream->p_cfg, "sap_v6scope");
-    sout_cfg_t          *p_sap_cfg  = sout_cfg_find( p_stream->p_cfg, "sap" );
-
-    
-    char                *psz_sap = NULL;
-
-    sap_session_t       *p_sap = NULL;
-    
-    sout_access_out_t *p_access;
-    sout_mux_t        *p_mux;    
-  
-   p_sys->b_sap=0;
-   /* SAP is only valid for UDP or RTP streaming */
-  if( psz_access == NULL )
-          psz_access="udp";
-   
-   if(p_sap_cfg && (strstr(psz_access,"udp") || strstr( psz_access ,  "rtp" )))
-   {
-        msg_Info( p_this, "SAP Enabled");
-        p_sys->b_sap=1;
-        if(p_sap_cfg->psz_value)
-        {
-                psz_sap = strdup( p_sap_cfg->psz_value );
-        }
-        else
-        {
-                psz_sap = strdup ( psz_url );
-        }        
-   }
-   
-   /* Get SAP IP version to use */
-   if(psz_ipv == NULL)
-           psz_ipv = "4";
-   if(psz_v6_scope == NULL)
-           psz_v6_scope= DEFAULT_IPV6_SCOPE;
-   
-   msg_Dbg( p_this, "creating `%s/%s://%s'",
+    char *psz_mux      = sout_cfg_find_value( p_stream->p_cfg, "mux" );
+    char *psz_access   = sout_cfg_find_value( p_stream->p_cfg, "access" );
+    char *psz_url      = sout_cfg_find_value( p_stream->p_cfg, "url" );
+    char *psz_ipv      = sout_cfg_find_value( p_stream->p_cfg, "sap_ipv" );
+    char *psz_v6_scope = sout_cfg_find_value( p_stream->p_cfg, "sap_v6scope" );
+    sout_cfg_t *p_sap_cfg = sout_cfg_find( p_stream->p_cfg, "sap" );
+
+    sout_access_out_t   *p_access;
+    sout_mux_t          *p_mux;    
+
+    /* SAP is only valid for UDP or RTP streaming */
+    if( psz_access == NULL ) psz_access = "udp";
+
+    /* Get SAP IP version to use */
+    if(psz_ipv == NULL) psz_ipv = "4";
+    if(psz_v6_scope == NULL) psz_v6_scope = DEFAULT_IPV6_SCOPE;
+    p_sys->p_sap = NULL;
+
+    msg_Dbg( p_this, "creating `%s/%s://%s'",
              psz_access, psz_mux, psz_url );
-       
+
     /* *** find and open appropriate access module *** */
     p_access = sout_AccessOutNew( p_sout, psz_access, psz_url );
     if( p_access == NULL )
@@ -137,24 +114,26 @@ static int Open( vlc_object_t *p_this )
     msg_Dbg( p_stream, "mux opened" );
 
     /*  *** Create the SAP Session structure *** */
-    if(p_sys->b_sap)
-    {        
-        msg_Dbg( p_sout , "Creating SAP with IPv%i",atoi(psz_ipv) );
-        p_sap = sout_SAPNew( p_sout , psz_url , psz_sap, atoi(psz_ipv), psz_v6_scope );
-        if(!p_sap)
-        {
-                msg_Err( p_sout,"Unable to initialize SAP. SAP disabled");
-                p_sys->b_sap=0;
-        }
+    if( p_sap_cfg && ( strstr( psz_access, "udp" ) ||
+                       strstr( psz_access ,  "rtp" ) ) )
+    {
+        msg_Info( p_this, "SAP Enabled");
+        msg_Dbg( p_sout , "Creating SAP with IPv%i", atoi(psz_ipv) );
+
+        p_sys->p_sap = sout_SAPNew( p_sout , psz_url ,
+            p_sap_cfg->psz_value ? p_sap_cfg->psz_value : psz_url,
+            atoi(psz_ipv), psz_v6_scope );
+
+        if( !p_sys->p_sap )
+            msg_Err( p_sout,"Unable to initialize SAP. SAP disabled");
     }   
-    
+
     /* XXX beurk */
     p_sout->i_preheader = __MAX( p_sout->i_preheader, p_mux->i_preheader );
 
 
     p_sys->p_mux = p_mux;
-    p_sys->p_sap = p_sap;
-    
+
     p_stream->pf_add    = Add;
     p_stream->pf_del    = Del;
     p_stream->pf_send   = Send;
@@ -170,12 +149,11 @@ static int Open( vlc_object_t *p_this )
 static void Close( vlc_object_t * p_this )
 {
     sout_stream_t     *p_stream = (sout_stream_t*)p_this;
-    sout_stream_sys_t *p_sys = p_stream->p_sys;
-
+    sout_stream_sys_t *p_sys    = p_stream->p_sys;
     sout_access_out_t *p_access = p_sys->p_mux->p_access;
 
-    if(p_sys -> b_sap)
-          sout_SAPDelete( (sout_instance_t *)p_this ,p_sys->p_sap ); 
+    if( p_sys->p_sap )
+        sout_SAPDelete( (sout_instance_t *)p_this , p_sys->p_sap ); 
 
     sout_MuxDelete( p_sys->p_mux );
     sout_AccessOutDelete( p_access );
@@ -189,7 +167,7 @@ struct sout_stream_id_t
 };
 
 
-static sout_stream_id_t * Add      ( sout_stream_t *p_stream, sout_format_t *p_fmt )
+static sout_stream_id_t * Add( sout_stream_t *p_stream, sout_format_t *p_fmt )
 {
     sout_stream_sys_t *p_sys = p_stream->p_sys;
     sout_stream_id_t  *id;
@@ -205,7 +183,7 @@ static sout_stream_id_t * Add      ( sout_stream_t *p_stream, sout_format_t *p_f
     return id;
 }
 
-static int     Del      ( sout_stream_t *p_stream, sout_stream_id_t *id )
+static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
 {
     sout_stream_sys_t *p_sys = p_stream->p_sys;
 
@@ -216,18 +194,16 @@ static int     Del      ( sout_stream_t *p_stream, sout_stream_id_t *id )
     return VLC_SUCCESS;
 }
 
-static int     Send     ( sout_stream_t *p_stream, sout_stream_id_t *id, sout_buffer_t *p_buffer )
+static int Send( sout_stream_t *p_stream, sout_stream_id_t *id,
+                 sout_buffer_t *p_buffer )
 {
     sout_stream_sys_t *p_sys = p_stream->p_sys;
+    sout_instance_t   *p_sout = p_stream->p_sout;
 
-        sout_instance_t         *p_sout = p_stream->p_sout;
-
-    
     sout_MuxSendBuffer( p_sys->p_mux, id->p_input, p_buffer );
 
-    if(p_sys -> b_sap)
+    if( p_sys->p_sap )
        sout_SAPSend( p_sout , p_sys->p_sap );
-   
+
     return VLC_SUCCESS;
 }
-
index f22b262..dd547f5 100644 (file)
@@ -2,7 +2,7 @@
  * transcode.c
  *****************************************************************************
  * Copyright (C) 2001, 2002 VideoLAN
- * $Id: transcode.c,v 1.23 2003/07/06 16:22:15 gbazin Exp $
+ * $Id: transcode.c,v 1.24 2003/07/07 15:50:44 gbazin Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
@@ -362,6 +362,12 @@ static sout_stream_id_t * Add( sout_stream_t *p_stream, sout_format_t *p_fmt )
         /* open output stream */
         id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->f_dst );
         id->b_transcode = VLC_TRUE;
+
+        if( id->id == NULL )
+        {
+            free( id );
+            return NULL;
+        }
     }
     else if( p_fmt->i_cat == VIDEO_ES && p_sys->i_vcodec != 0 )
     {
@@ -656,6 +662,10 @@ static int transcode_audio_ffmpeg_new( sout_stream_t *p_stream,
         return VLC_EGENERIC;
     }
 
+    /* Hack for mp3 transcoding support */
+    if( id->f_dst.i_fourcc == VLC_FOURCC( 'm','p','3',' ' ) )
+        id->f_dst.i_fourcc = VLC_FOURCC( 'm','p','g','a' );
+
     id->ff_enc_c = avcodec_alloc_context();
     id->ff_enc_c->bit_rate    = id->f_dst.i_bitrate;
     id->ff_enc_c->sample_rate = id->f_dst.i_sample_rate;