]> git.sesse.net Git - vlc/commitdiff
Add option to encode aac low, main, sbr or ltp profiles.
authorJean-Paul Saman <jpsaman@videolan.org>
Sun, 2 Mar 2008 18:49:35 +0000 (19:49 +0100)
committerJean-Paul Saman <jpsaman@videolan.org>
Tue, 11 Mar 2008 09:06:32 +0000 (10:06 +0100)
modules/codec/ffmpeg/encoder.c
modules/codec/ffmpeg/ffmpeg.c
modules/codec/ffmpeg/ffmpeg.h

index ce5db9e055c46e05d7ef41c69be5dc69585c45b8..dcd0bea094f015a719812b86f47fb1745e75658d 100644 (file)
@@ -141,6 +141,7 @@ struct encoder_sys_t
     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;
+    int        i_aac_profile; /* AAC profile to use.*/
 
     /* Used to work around stupid timestamping behaviour in libavcodec */
     uint64_t i_framenum;
@@ -153,7 +154,7 @@ static const char *ppsz_enc_options[] = {
     "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", "aac-profile", NULL
 };
 
 static const uint16_t mpa_bitrate_tab[2][15] =
@@ -187,7 +188,6 @@ static const uint16_t mpeg4_default_non_intra_matrix[64] = {
  23, 24, 25, 27, 28, 30, 31, 33,
 };
 
-
 /*****************************************************************************
  * OpenEncoder: probe the encoder
  *****************************************************************************/
@@ -333,6 +333,7 @@ int E_(OpenEncoder)( vlc_object_t *p_this )
     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" ) )
@@ -344,8 +345,6 @@ int E_(OpenEncoder)( vlc_object_t *p_this )
         else
             p_sys->i_hq = FF_MB_DECISION_RD;
     }
-    else
-        p_sys->i_hq = FF_MB_DECISION_RD;
     if( val.psz_string ) free( val.psz_string );
 
     var_Get( p_enc, ENC_CFG_PREFIX "qmin", &val );
@@ -372,6 +371,26 @@ int E_(OpenEncoder)( vlc_object_t *p_this )
     var_Get( p_enc, ENC_CFG_PREFIX "chroma-elim-threshold", &val );
     p_sys->i_chroma_elim = val.i_int;
 
+    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
+            p_sys->i_aac_profile = FF_PROFILE_UNKNOWN;
+msg_Info( p_enc, "AAC profile %s", val.psz_string );
+    }
+    if( val.psz_string ) free( val.psz_string );
+
     if( p_enc->fmt_in.i_cat == VIDEO_ES )
     {
         int i_aspect_num, i_aspect_den;
@@ -536,6 +555,9 @@ int E_(OpenEncoder)( vlc_object_t *p_this )
         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( p_enc->fmt_out.i_codec == VLC_FOURCC('m', 'p', '4', 'a') )
+            p_context->profile     = p_sys->i_aac_profile;
     }
 
     /* Misc parameters */
index d766597c1d69cbfab8f6fd20e0e249ec5a0e89ee..ee9a7ea535edcf77e7af9e228950ce625273b421 100644 (file)
@@ -198,7 +198,12 @@ vlc_module_begin();
     add_integer( ENC_CFG_PREFIX "chroma-elim-threshold", 0, NULL,
                  ENC_CHROMA_ELIM_TEXT, ENC_CHROMA_ELIM_LONGTEXT, VLC_TRUE );
 
+    /* Audio AAC encoder profile */
+    add_string( ENC_CFG_PREFIX "aac-profile", "main", NULL,
+                ENC_PROFILE_TEXT, ENC_PROFILE_LONGTEXT, VLC_TRUE );
+
 #if defined(HAVE_LIBAVFORMAT_AVFORMAT_H) || defined(HAVE_FFMPEG_AVFORMAT_H) || defined(HAVE_LIBAVFORMAT_TREE)
+
     /* demux submodule */
     add_submodule();
     set_description( _("FFmpeg demuxer" ) );
index 252e1604f9116375889e418ec8fb9e395ff9a717..05257ede25f2f41ad4430c19b4b48f3cd63215eb 100644 (file)
@@ -306,6 +306,11 @@ N_("<filterName>[:<option>[:<option>...]][[,|/][-]<filterName>[:<option>...]]...
   "the PSNR isn't much changed (default: 0.0). The H264 specification " \
   "recommends 7." )
 
+#define ENC_PROFILE_TEXT N_( "Specify AAC audio profile to use" )
+#define ENC_PROFILE_LONGTEXT N_( "Specify the AAC audio profile to use " \
+   "for encoding the audio bitstream. It takes the following options: " \
+   "main, low, ssr (not supported) and ltp (default: main)" )
+
 #define SCALEMODE_TEXT N_("Scaling mode")
 #define SCALEMODE_LONGTEXT N_("Scaling mode to use.")