/*****************************************************************************
* twolame.c: libtwolame encoder (MPEG-1/2 layer II) module
- * (using libtwolame from http://users.tpg.com.au/adslblvi/)
+ * (using libtwolame from http://www.twolame.org/)
*****************************************************************************
* Copyright (C) 2004-2005 the VideoLAN team
* $Id$
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
+ * Gildas Bazin
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_codec.h>
-#include <vlc_sout.h>
-#include <vlc_aout.h>
#include <twolame.h>
{ N_("Stereo"), N_("Dual mono"), N_("Joint stereo") };
-vlc_module_begin();
- set_shortname( "Twolame");
- set_description( N_("Libtwolame audio encoder") );
- set_capability( "encoder", 50 );
- set_callbacks( OpenEncoder, CloseEncoder );
- set_category( CAT_INPUT );
- set_subcategory( SUBCAT_INPUT_ACODEC );
-
- add_float( ENC_CFG_PREFIX "quality", 0.0, NULL, ENC_QUALITY_TEXT,
- ENC_QUALITY_LONGTEXT, false );
- add_integer( ENC_CFG_PREFIX "mode", 0, NULL, ENC_MODE_TEXT,
- ENC_MODE_LONGTEXT, false );
- change_integer_list( pi_stereo_values, ppsz_stereo_descriptions, NULL );
- add_bool( ENC_CFG_PREFIX "vbr", 0, NULL, ENC_VBR_TEXT,
- ENC_VBR_LONGTEXT, false );
- add_integer( ENC_CFG_PREFIX "psy", 3, NULL, ENC_PSY_TEXT,
- ENC_PSY_LONGTEXT, false );
-vlc_module_end();
+vlc_module_begin ()
+ set_shortname( "Twolame")
+ set_description( N_("Libtwolame audio encoder") )
+ set_capability( "encoder", 50 )
+ set_callbacks( OpenEncoder, CloseEncoder )
+ set_category( CAT_INPUT )
+ set_subcategory( SUBCAT_INPUT_ACODEC )
+
+ add_float( ENC_CFG_PREFIX "quality", 0.0, ENC_QUALITY_TEXT,
+ ENC_QUALITY_LONGTEXT, false )
+ add_integer( ENC_CFG_PREFIX "mode", 0, ENC_MODE_TEXT,
+ ENC_MODE_LONGTEXT, false )
+ change_integer_list( pi_stereo_values, ppsz_stereo_descriptions );
+ add_bool( ENC_CFG_PREFIX "vbr", false, ENC_VBR_TEXT,
+ ENC_VBR_LONGTEXT, false )
+ add_integer( ENC_CFG_PREFIX "psy", 3, ENC_PSY_TEXT,
+ ENC_PSY_LONGTEXT, false )
+vlc_module_end ()
static const char *const ppsz_enc_options[] = {
"quality", "mode", "vbr", "psy", NULL
{
encoder_t *p_enc = (encoder_t *)p_this;
encoder_sys_t *p_sys;
- vlc_value_t val;
int i_frequency;
- if( p_enc->fmt_out.i_codec != VLC_FOURCC('m','p','g','a') &&
- p_enc->fmt_out.i_codec != VLC_FOURCC('m','p','2','a') &&
- p_enc->fmt_out.i_codec != VLC_FOURCC('m','p','2',' ') &&
+ if( p_enc->fmt_out.i_codec != VLC_CODEC_MP2 &&
+ p_enc->fmt_out.i_codec != VLC_CODEC_MPGA &&
!p_enc->b_force )
{
return VLC_EGENERIC;
p_enc->p_sys = p_sys;
p_enc->pf_encode_audio = Encode;
- p_enc->fmt_in.i_codec = AOUT_FMT_S16_NE;
- p_enc->fmt_out.i_codec = VLC_FOURCC('m','p','g','a');
+ p_enc->fmt_in.i_codec = VLC_CODEC_S16N;
+
+ p_enc->fmt_out.i_cat = AUDIO_ES;
+ p_enc->fmt_out.i_codec = VLC_CODEC_MPGA;
config_ChainParse( p_enc, ENC_CFG_PREFIX, ppsz_enc_options, p_enc->p_cfg );
twolame_set_in_samplerate( p_sys->p_twolame, p_enc->fmt_out.audio.i_rate );
twolame_set_out_samplerate( p_sys->p_twolame, p_enc->fmt_out.audio.i_rate );
- var_Get( p_enc, ENC_CFG_PREFIX "vbr", &val );
- if ( val.b_bool )
+ if( var_GetBool( p_enc, ENC_CFG_PREFIX "vbr" ) )
{
- float i_quality;
- var_Get( p_enc, ENC_CFG_PREFIX "quality", &val );
- i_quality = val.i_int;
- if ( i_quality > 50.0 ) i_quality = 50.0;
- if ( i_quality < 0.0 ) i_quality = 0.0;
+ float f_quality = var_GetFloat( p_enc, ENC_CFG_PREFIX "quality" );
+ if ( f_quality > 50.0 ) f_quality = 50.0;
+ if ( f_quality < 0.0 ) f_quality = 0.0;
twolame_set_VBR( p_sys->p_twolame, 1 );
- twolame_set_VBR_q( p_sys->p_twolame, i_quality );
+ twolame_set_VBR_q( p_sys->p_twolame, f_quality );
}
else
{
else
{
twolame_set_num_channels( p_sys->p_twolame, 2 );
- var_Get( p_enc, ENC_CFG_PREFIX "mode", &val );
- switch ( val.i_int )
+ switch( var_GetInteger( p_enc, ENC_CFG_PREFIX "mode" ) )
{
case 1:
twolame_set_mode( p_sys->p_twolame, TWOLAME_DUAL_CHANNEL );
}
}
- var_Get( p_enc, ENC_CFG_PREFIX "psy", &val );
- twolame_set_psymodel( p_sys->p_twolame, val.i_int );
+ twolame_set_psymodel( p_sys->p_twolame,
+ var_GetInteger( p_enc, ENC_CFG_PREFIX "psy" ) );
if ( twolame_init_params( p_sys->p_twolame ) )
{
int i_nb_samples = p_aout_buf->i_nb_samples;
block_t *p_chain = NULL;
- p_sys->i_pts = p_aout_buf->start_date -
+ p_sys->i_pts = p_aout_buf->i_pts -
(mtime_t)1000000 * (mtime_t)p_sys->i_nb_samples /
(mtime_t)p_enc->fmt_out.audio.i_rate;