Commit 2ba0953d authored by Gildas Bazin's avatar Gildas Bazin

* modules/gui/wxwindows/streamout.cpp: added vorbis transcoding + fixed default codec selection.

* 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.
parent 0afe4616
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* streamout.cpp : wxWindows plugin for vlc * streamout.cpp : wxWindows plugin for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2000-2001 VideoLAN * 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> * Authors: Gildas Bazin <gbazin@netcourrier.com>
* *
...@@ -592,9 +592,10 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent ) ...@@ -592,9 +592,10 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
video_transc_checkbox = video_transc_checkbox =
new wxCheckBox( panel, VideoTranscEnable_Event, wxU(_("Video codec"))); new wxCheckBox( panel, VideoTranscEnable_Event, wxU(_("Video codec")));
video_codec_combo = video_codec_combo =
new wxComboBox( panel, VideoTranscCodec_Event, wxT("mp4v"), new wxComboBox( panel, VideoTranscCodec_Event, wxT(""),
wxPoint(20,25), wxDefaultSize, WXSIZEOF(vcodecs_array), wxPoint(20,25), wxDefaultSize, WXSIZEOF(vcodecs_array),
vcodecs_array, wxCB_READONLY ); vcodecs_array, wxCB_READONLY );
video_codec_combo->SetSelection(1);
wxStaticText *bitrate_label = wxStaticText *bitrate_label =
new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)"))); new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
video_bitrate_combo = video_bitrate_combo =
...@@ -615,7 +616,8 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent ) ...@@ -615,7 +616,8 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
{ {
wxT("mpga"), wxT("mpga"),
wxT("mp3"), wxT("mp3"),
wxT("a52") wxT("a52"),
wxT("vorb")
}; };
static const wxString abitrates_array[] = static const wxString abitrates_array[] =
{ {
...@@ -630,9 +632,10 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent ) ...@@ -630,9 +632,10 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
audio_transc_checkbox = audio_transc_checkbox =
new wxCheckBox( panel, AudioTranscEnable_Event, wxU(_("Audio codec"))); new wxCheckBox( panel, AudioTranscEnable_Event, wxU(_("Audio codec")));
audio_codec_combo = audio_codec_combo =
new wxComboBox( panel, AudioTranscCodec_Event, wxT("mpga"), new wxComboBox( panel, AudioTranscCodec_Event, wxT(""),
wxPoint(20,25), wxDefaultSize, WXSIZEOF(acodecs_array), wxPoint(20,25), wxDefaultSize, WXSIZEOF(acodecs_array),
acodecs_array, wxCB_READONLY ); acodecs_array, wxCB_READONLY );
audio_codec_combo->SetSelection(0);
bitrate_label = bitrate_label =
new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)"))); new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
audio_bitrate_combo = audio_bitrate_combo =
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* standard.c * standard.c
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * 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> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -59,7 +59,6 @@ struct sout_stream_sys_t ...@@ -59,7 +59,6 @@ struct sout_stream_sys_t
{ {
sout_mux_t *p_mux; sout_mux_t *p_mux;
sap_session_t *p_sap; sap_session_t *p_sap;
vlc_bool_t b_sap;
}; };
/***************************************************************************** /*****************************************************************************
...@@ -71,49 +70,27 @@ static int Open( vlc_object_t *p_this ) ...@@ -71,49 +70,27 @@ static int Open( vlc_object_t *p_this )
sout_instance_t *p_sout = p_stream->p_sout; sout_instance_t *p_sout = p_stream->p_sout;
sout_stream_sys_t *p_sys = malloc( sizeof( sout_stream_sys_t) ); 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_mux = sout_cfg_find_value( p_stream->p_cfg, "mux" );
char *psz_access = sout_cfg_find_value( p_stream->p_cfg, "access" ); 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_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_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"); 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_cfg_t *p_sap_cfg = sout_cfg_find( p_stream->p_cfg, "sap" );
sout_access_out_t *p_access;
char *psz_sap = NULL; sout_mux_t *p_mux;
sap_session_t *p_sap = NULL; /* SAP is only valid for UDP or RTP streaming */
if( psz_access == NULL ) psz_access = "udp";
sout_access_out_t *p_access;
sout_mux_t *p_mux; /* Get SAP IP version to use */
if(psz_ipv == NULL) psz_ipv = "4";
p_sys->b_sap=0; if(psz_v6_scope == NULL) psz_v6_scope = DEFAULT_IPV6_SCOPE;
/* SAP is only valid for UDP or RTP streaming */ p_sys->p_sap = NULL;
if( psz_access == NULL )
psz_access="udp"; msg_Dbg( p_this, "creating `%s/%s://%s'",
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'",
psz_access, psz_mux, psz_url ); psz_access, psz_mux, psz_url );
/* *** find and open appropriate access module *** */ /* *** find and open appropriate access module *** */
p_access = sout_AccessOutNew( p_sout, psz_access, psz_url ); p_access = sout_AccessOutNew( p_sout, psz_access, psz_url );
if( p_access == NULL ) if( p_access == NULL )
...@@ -137,24 +114,26 @@ static int Open( vlc_object_t *p_this ) ...@@ -137,24 +114,26 @@ static int Open( vlc_object_t *p_this )
msg_Dbg( p_stream, "mux opened" ); msg_Dbg( p_stream, "mux opened" );
/* *** Create the SAP Session structure *** */ /* *** Create the SAP Session structure *** */
if(p_sys->b_sap) if( p_sap_cfg && ( strstr( psz_access, "udp" ) ||
{ strstr( psz_access , "rtp" ) ) )
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 ); msg_Info( p_this, "SAP Enabled");
if(!p_sap) msg_Dbg( p_sout , "Creating SAP with IPv%i", atoi(psz_ipv) );
{
msg_Err( p_sout,"Unable to initialize SAP. SAP disabled"); p_sys->p_sap = sout_SAPNew( p_sout , psz_url ,
p_sys->b_sap=0; 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 */ /* XXX beurk */
p_sout->i_preheader = __MAX( p_sout->i_preheader, p_mux->i_preheader ); p_sout->i_preheader = __MAX( p_sout->i_preheader, p_mux->i_preheader );
p_sys->p_mux = p_mux; p_sys->p_mux = p_mux;
p_sys->p_sap = p_sap;
p_stream->pf_add = Add; p_stream->pf_add = Add;
p_stream->pf_del = Del; p_stream->pf_del = Del;
p_stream->pf_send = Send; p_stream->pf_send = Send;
...@@ -170,12 +149,11 @@ static int Open( vlc_object_t *p_this ) ...@@ -170,12 +149,11 @@ static int Open( vlc_object_t *p_this )
static void Close( 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_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; sout_access_out_t *p_access = p_sys->p_mux->p_access;
if(p_sys -> b_sap) if( p_sys->p_sap )
sout_SAPDelete( (sout_instance_t *)p_this ,p_sys->p_sap ); sout_SAPDelete( (sout_instance_t *)p_this , p_sys->p_sap );
sout_MuxDelete( p_sys->p_mux ); sout_MuxDelete( p_sys->p_mux );
sout_AccessOutDelete( p_access ); sout_AccessOutDelete( p_access );
...@@ -189,7 +167,7 @@ struct sout_stream_id_t ...@@ -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_sys_t *p_sys = p_stream->p_sys;
sout_stream_id_t *id; 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 ...@@ -205,7 +183,7 @@ static sout_stream_id_t * Add ( sout_stream_t *p_stream, sout_format_t *p_f
return id; 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; 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 ) ...@@ -216,18 +194,16 @@ static int Del ( sout_stream_t *p_stream, sout_stream_id_t *id )
return VLC_SUCCESS; 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_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 ); 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 ); sout_SAPSend( p_sout , p_sys->p_sap );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* transcode.c * transcode.c
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * 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> * 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 ) ...@@ -362,6 +362,12 @@ static sout_stream_id_t * Add( sout_stream_t *p_stream, sout_format_t *p_fmt )
/* open output stream */ /* open output stream */
id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->f_dst ); id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->f_dst );
id->b_transcode = VLC_TRUE; 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 ) 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, ...@@ -656,6 +662,10 @@ static int transcode_audio_ffmpeg_new( sout_stream_t *p_stream,
return VLC_EGENERIC; 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 = avcodec_alloc_context();
id->ff_enc_c->bit_rate = id->f_dst.i_bitrate; id->ff_enc_c->bit_rate = id->f_dst.i_bitrate;
id->ff_enc_c->sample_rate = id->f_dst.i_sample_rate; id->ff_enc_c->sample_rate = id->f_dst.i_sample_rate;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment