me option implemented as an AVOption

patch by Stefano Sabatini: [stefano sabatini-lala poste it]
original thread:
[FFmpeg-devel] [PATCH] ffmpeg.c -me option implemented as an AVOption
date: 07/05/2007 03:12 PM

Originally committed as revision 9501 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Stefano Sabatini 2007-07-06 11:47:02 +00:00 committed by Benoit Fouet
parent 3b7660b002
commit c0de00dac5
3 changed files with 17 additions and 49 deletions

View File

@ -468,7 +468,7 @@ Set rate control equation (@pxref{FFmpeg formula
evaluator}) (default = @code{tex^qComp}). evaluator}) (default = @code{tex^qComp}).
@item -rc_override override @item -rc_override override
rate control override for specific intervals rate control override for specific intervals
@item -me method @item -me_method method
Set motion estimation method to @var{method}. Set motion estimation method to @var{method}.
Available methods are (from lowest to best quality): Available methods are (from lowest to best quality):
@table @samp @table @samp
@ -477,6 +477,8 @@ Try just the (0, 0) vector.
@item phods @item phods
@item log @item log
@item x1 @item x1
@item hex
@item umh
@item epzs @item epzs
(default method) (default method)
@item full @item full

View File

@ -127,7 +127,6 @@ static int video_rc_qmod_freq=0;
#endif #endif
static char *video_rc_override_string=NULL; static char *video_rc_override_string=NULL;
static char *video_rc_eq="tex^qComp"; static char *video_rc_eq="tex^qComp";
static int me_method = ME_EPZS;
static int video_disable = 0; static int video_disable = 0;
static int video_discard = 0; static int video_discard = 0;
static int video_codec_id = CODEC_ID_NONE; static int video_codec_id = CODEC_ID_NONE;
@ -2417,35 +2416,6 @@ static void add_frame_hooker(const char *arg)
} }
} }
const char *motion_str[] = {
"zero",
"full",
"log",
"phods",
"epzs",
"x1",
"hex",
"umh",
"iter",
NULL,
};
static void opt_motion_estimation(const char *arg)
{
const char **p;
p = motion_str;
for(;;) {
if (!*p) {
fprintf(stderr, "Unknown motion estimation method '%s'\n", arg);
exit(1);
}
if (!strcmp(*p, arg))
break;
p++;
}
me_method = (p - motion_str) + 1;
}
static void opt_video_codec(const char *arg) static void opt_video_codec(const char *arg)
{ {
opt_codec(&video_stream_copy, &video_codec_id, CODEC_TYPE_VIDEO, arg); opt_codec(&video_stream_copy, &video_codec_id, CODEC_TYPE_VIDEO, arg);
@ -2839,8 +2809,6 @@ static void new_video_stream(AVFormatContext *oc)
if (do_psnr) if (do_psnr)
video_enc->flags|= CODEC_FLAG_PSNR; video_enc->flags|= CODEC_FLAG_PSNR;
video_enc->me_method = me_method;
/* two pass mode */ /* two pass mode */
if (do_pass) { if (do_pass) {
if (do_pass == 1) { if (do_pass == 1) {
@ -3167,7 +3135,7 @@ static void show_formats(void)
AVOutputFormat *ofmt; AVOutputFormat *ofmt;
URLProtocol *up; URLProtocol *up;
AVCodec *p, *p2; AVCodec *p, *p2;
const char **pp, *last_name; const char *last_name;
printf("File formats:\n"); printf("File formats:\n");
last_name= "000"; last_name= "000";
@ -3268,19 +3236,7 @@ static void show_formats(void)
printf("\n"); printf("\n");
printf("Frame size, frame rate abbreviations:\n ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif\n"); printf("Frame size, frame rate abbreviations:\n ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif\n");
printf("Motion estimation methods:\n"); printf("\n");
pp = motion_str;
while (*pp) {
printf(" %s", *pp);
if ((pp - motion_str + 1) == ME_ZERO)
printf("(fastest)");
else if ((pp - motion_str + 1) == ME_FULL)
printf("(slowest)");
else if ((pp - motion_str + 1) == ME_EPZS)
printf("(default)");
pp++;
}
printf("\n\n");
printf( printf(
"Note, the names of encoders and decoders do not always match, so there are\n" "Note, the names of encoders and decoders do not always match, so there are\n"
"several cases where the above table shows encoder only or decoder only entries\n" "several cases where the above table shows encoder only or decoder only entries\n"
@ -3633,8 +3589,6 @@ const OptionDef options[] = {
{ "rc_eq", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_video_rc_eq}, "set rate control equation", "equation" }, { "rc_eq", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_video_rc_eq}, "set rate control equation", "equation" },
{ "rc_override", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_video_rc_override_string}, "rate control override for specific intervals", "override" }, { "rc_override", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_video_rc_override_string}, "rate control override for specific intervals", "override" },
{ "vcodec", HAS_ARG | OPT_VIDEO, {(void*)opt_video_codec}, "force video codec ('copy' to copy stream)", "codec" }, { "vcodec", HAS_ARG | OPT_VIDEO, {(void*)opt_video_codec}, "force video codec ('copy' to copy stream)", "codec" },
{ "me", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_motion_estimation}, "set motion estimation method",
"method" },
{ "me_threshold", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_me_threshold}, "motion estimaton threshold", "" }, { "me_threshold", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_me_threshold}, "motion estimaton threshold", "" },
{ "strict", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_strict}, "how strictly to follow the standards", "strictness" }, { "strict", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_strict}, "how strictly to follow the standards", "strictness" },
{ "sameq", OPT_BOOL | OPT_VIDEO, {(void*)&same_quality}, { "sameq", OPT_BOOL | OPT_VIDEO, {(void*)&same_quality},

View File

@ -455,6 +455,18 @@ static const AVOption options[]={
{"local_header", "place global headers at every keyframe instead of in extradata", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_LOCAL_HEADER, INT_MIN, INT_MAX, V|E, "flags2"}, {"local_header", "place global headers at every keyframe instead of in extradata", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_LOCAL_HEADER, INT_MIN, INT_MAX, V|E, "flags2"},
{"sub_id", NULL, OFFSET(sub_id), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, {"sub_id", NULL, OFFSET(sub_id), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},
{"me_method", "set motion estimation method", OFFSET(me_method), FF_OPT_TYPE_INT, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method"}, {"me_method", "set motion estimation method", OFFSET(me_method), FF_OPT_TYPE_INT, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method"},
#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0)
{"me", "set motion estimation method (deprecated, use me_method instead)", OFFSET(me_method), FF_OPT_TYPE_INT, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method"},
#endif
{"zero", "zero motion estimation (fastest)", 0, FF_OPT_TYPE_CONST, ME_ZERO, INT_MIN, INT_MAX, V|E, "me_method" },
{"full", "full motion estimation (slowest)", 0, FF_OPT_TYPE_CONST, ME_FULL, INT_MIN, INT_MAX, V|E, "me_method" },
{"epzs", "EPZS motion estimation (default)", 0, FF_OPT_TYPE_CONST, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method" },
{"log", "log motion estimation", 0, FF_OPT_TYPE_CONST, ME_LOG, INT_MIN, INT_MAX, V|E, "me_method" },
{"phods", "phods motion estimation", 0, FF_OPT_TYPE_CONST, ME_PHODS, INT_MIN, INT_MAX, V|E, "me_method" },
{"x1", "X1 motion estimation", 0, FF_OPT_TYPE_CONST, ME_X1, INT_MIN, INT_MAX, V|E, "me_method" },
{"hex", "hex motion estimation", 0, FF_OPT_TYPE_CONST, ME_HEX, INT_MIN, INT_MAX, V|E, "me_method" },
{"umh", "umh motion estimation", 0, FF_OPT_TYPE_CONST, ME_UMH, INT_MIN, INT_MAX, V|E, "me_method" },
{"iter", "iter motion estimation", 0, FF_OPT_TYPE_CONST, ME_ITER, INT_MIN, INT_MAX, V|E, "me_method" },
{"extradata_size", NULL, OFFSET(extradata_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, {"extradata_size", NULL, OFFSET(extradata_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},
{"time_base", NULL, OFFSET(time_base), FF_OPT_TYPE_RATIONAL, DEFAULT, INT_MIN, INT_MAX}, {"time_base", NULL, OFFSET(time_base), FF_OPT_TYPE_RATIONAL, DEFAULT, INT_MIN, INT_MAX},
{"g", "set the group of picture size", OFFSET(gop_size), FF_OPT_TYPE_INT, 12, INT_MIN, INT_MAX, V|E}, {"g", "set the group of picture size", OFFSET(gop_size), FF_OPT_TYPE_INT, 12, INT_MIN, INT_MAX, V|E},