/* ffmpeg header */
#define HAVE_MMX 1
-#ifdef HAVE_FFMPEG_AVCODEC_H
+#ifdef HAVE_LIBAVCODEC_AVCODEC_H
+# include <libavcodec/avcodec.h>
+#elif defined(HAVE_FFMPEG_AVCODEC_H)
# include <ffmpeg/avcodec.h>
#else
# include <avcodec.h>
int i_quality; /* for VBR */
float f_lumi_masking, f_dark_masking, f_p_masking, f_border_masking;
int i_luma_elim, i_chroma_elim;
-
+#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+4)
+ int i_aac_profile; /* AAC profile to use.*/
+#endif
/* Used to work around stupid timestamping behaviour in libavcodec */
uint64_t i_framenum;
mtime_t pi_delay_pts[MAX_FRAME_DELAY];
"interlace", "i-quant-factor", "noise-reduction", "mpeg4-matrix",
"trellis", "qscale", "strict", "lumi-masking", "dark-masking",
"p-masking", "border-masking", "luma-elim-threshold",
- "chroma-elim-threshold", NULL
+ "chroma-elim-threshold",
+#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+4)
+ "aac-profile",
+#endif
+ NULL
};
static const uint16_t mpa_bitrate_tab[2][15] =
23, 24, 25, 27, 28, 30, 31, 33,
};
-
/*****************************************************************************
* OpenEncoder: probe the encoder
*****************************************************************************/
p_sys->i_quality = (int)(FF_QP2LAMBDA * val.f_float + 0.5);
var_Get( p_enc, ENC_CFG_PREFIX "hq", &val );
+ p_sys->i_hq = FF_MB_DECISION_RD;
if( val.psz_string && *val.psz_string )
{
if( !strcmp( val.psz_string, "rd" ) )
}
else
p_sys->i_hq = FF_MB_DECISION_RD;
- if( val.psz_string ) free( val.psz_string );
+ free( val.psz_string );
var_Get( p_enc, ENC_CFG_PREFIX "qmin", &val );
p_sys->i_qmin = val.i_int;
var_Get( p_enc, ENC_CFG_PREFIX "chroma-elim-threshold", &val );
p_sys->i_chroma_elim = val.i_int;
+#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+4)
+ var_Get( p_enc, ENC_CFG_PREFIX "aac-profile", &val );
+ p_sys->i_aac_profile = FF_PROFILE_UNKNOWN;
+ if( val.psz_string && *val.psz_string )
+ {
+ if( !strncmp( val.psz_string, "main", 4 ) )
+ p_sys->i_aac_profile = FF_PROFILE_AAC_MAIN;
+ else if( !strncmp( val.psz_string, "low", 3 ) )
+ p_sys->i_aac_profile = FF_PROFILE_AAC_LOW;
+#if 0 /* Not supported by FAAC encoder */
+ else if( !strncmp( val.psz_string, "ssr", 3 ) )
+ p_sys->i_aac_profile = FF_PROFILE_AAC_SSR;
+#endif
+ else if( !strncmp( val.psz_string, "ltp", 3 ) )
+ p_sys->i_aac_profile = FF_PROFILE_AAC_LTP;
+ else
+ {
+ msg_Warn( p_enc, "unknown AAC profile requested" );
+ p_sys->i_aac_profile = FF_PROFILE_UNKNOWN;
+ }
+ }
+ free( val.psz_string );
+#endif
+
if( p_enc->fmt_in.i_cat == VIDEO_ES )
{
int i_aspect_num, i_aspect_den;
p_enc->fmt_in.i_codec = AOUT_FMT_S16_NE;
p_context->sample_rate = p_enc->fmt_in.audio.i_rate;
p_context->channels = p_enc->fmt_in.audio.i_channels;
+
+#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+4)
+ /* Ignore FF_PROFILE_UNKNOWN */
+ if( ( p_sys->i_aac_profile >= FF_PROFILE_AAC_MAIN ) &&
+ ( p_enc->fmt_out.i_codec == VLC_FOURCC('m','p','4','a') ) )
+ p_context->profile = p_sys->i_aac_profile;
+#endif
}
/* Misc parameters */
vlc_thread_join( pp_contexts[i] );
vlc_mutex_destroy( &pp_contexts[i]->lock );
vlc_cond_destroy( &pp_contexts[i]->cond );
- vlc_object_destroy( pp_contexts[i] );
+ vlc_object_release( pp_contexts[i] );
}
free( pp_contexts );
vlc_mutex_unlock( lock );
av_free( p_sys->p_context );
- if( p_sys->p_buffer ) free( p_sys->p_buffer );
- if( p_sys->p_buffer_out ) free( p_sys->p_buffer_out );
+ free( p_sys->p_buffer );
+ free( p_sys->p_buffer_out );
free( p_sys );
}