int i_noise_reduction;
vlc_bool_t b_mpeg4_matrix;
vlc_bool_t b_trellis;
+ int i_quality; /* for VBR */
};
static const char *ppsz_enc_options[] = {
"keyint", "bframes", "vt", "qmin", "qmax", "hq", "strict_rc",
"rc-buffer-size", "rc-buffer-aggressivity", "pre-me", "hurry-up",
"interlace", "i-quant-factor", "noise-reduction", "mpeg4-matrix",
- "trellis", NULL
+ "trellis", "qscale", "strict", NULL
};
/*****************************************************************************
var_Get( p_enc, ENC_CFG_PREFIX "mpeg4-matrix", &val );
p_sys->b_mpeg4_matrix = val.b_bool;
+ var_Get( p_enc, ENC_CFG_PREFIX "qscale", &val );
+ if( val.f_float < 0.01 || val.f_float > 255.0 ) val.f_float = 0;
+ p_sys->i_quality = (int)(FF_QP2LAMBDA * val.f_float + 0.5);
+
var_Get( p_enc, ENC_CFG_PREFIX "hq", &val );
if( val.psz_string && *val.psz_string )
{
var_Get( p_enc, ENC_CFG_PREFIX "trellis", &val );
p_sys->b_trellis = val.b_bool;
+ var_Get( p_enc, ENC_CFG_PREFIX "strict", &val );
+ if( val.i_int < - 1 || val.i_int > 1 ) val.i_int = 0;
+ p_context->strict_std_compliance = val.i_int;
+
if( p_enc->fmt_in.i_cat == VIDEO_ES )
{
if( !p_enc->fmt_in.video.i_width || !p_enc->fmt_in.video.i_height )
#if LIBAVCODEC_BUILD >= 4687
av_reduce( &p_context->sample_aspect_ratio.num,
- &p_context->sample_aspect_ratio.den,
- p_enc->fmt_in.video.i_aspect *
- (int64_t)p_context->height / p_context->width,
- VOUT_ASPECT_FACTOR, 1 << 30 /* something big */ );
+ &p_context->sample_aspect_ratio.den,
+ p_enc->fmt_in.video.i_aspect *
+ (int64_t)p_context->height / p_context->width,
+ VOUT_ASPECT_FACTOR, 1 << 30 /* something big */ );
#else
p_context->aspect_ratio = ((float)p_enc->fmt_in.video.i_aspect) /
VOUT_ASPECT_FACTOR;
p_context->max_qdiff = 3;
p_context->mb_decision = p_sys->i_hq;
+
+ if( p_sys->i_quality )
+ {
+ p_context->flags |= CODEC_FLAG_QSCALE;
+#if LIBAVCODEC_BUILD >= 4668
+ p_context->global_quality = p_sys->i_quality;
+#endif
+ }
}
else if( p_enc->fmt_in.i_cat == AUDIO_ES )
{
}
}
+ frame.quality = p_sys->i_quality;
+
i_out = avcodec_encode_video( p_sys->p_context, p_sys->p_buffer_out,
AVCODEC_MAX_VIDEO_FRAME_SIZE, &frame );
ENC_QMAX_TEXT, ENC_QMAX_LONGTEXT, VLC_TRUE );
add_bool( ENC_CFG_PREFIX "trellis", 0, NULL,
ENC_TRELLIS_TEXT, ENC_TRELLIS_LONGTEXT, VLC_TRUE );
+ add_float( ENC_CFG_PREFIX "qscale", 0, NULL,
+ ENC_QSCALE_TEXT, ENC_QSCALE_LONGTEXT, VLC_TRUE );
+ add_integer( ENC_CFG_PREFIX "strict", 0, NULL,
+ ENC_STRICT_TEXT, ENC_STRICT_LONGTEXT, VLC_TRUE );
/* demux submodule */
add_submodule();
VIDEO_ES, "Sierra VMD Video" },
#endif
+#if LIBAVCODEC_BUILD >= 4718
+ /* FFMPEG's SNOW wavelet codec */
+ { VLC_FOURCC('S','N','O','W'), CODEC_ID_SNOW,
+ VIDEO_ES, "FFMpeg SNOW wavelet Video" },
+#endif
+
/*
* Audio Codecs
*/
{ VLC_FOURCC('a','5','2','b'), CODEC_ID_AC3, /* VLC specific hack */
AUDIO_ES, "A52 Audio (aka AC3)" },
+#if LIBAVCODEC_BUILD >= 4718
+ /* DTS Audio */
+ { VLC_FOURCC('d','t','s',' '), CODEC_ID_DTS,
+ AUDIO_ES, "DTS Audio" },
+#endif
+
/* AAC audio */
{ VLC_FOURCC('m','p','4','a'), CODEC_ID_AAC,
AUDIO_ES, "MPEG AAC Audio" },