summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--doc/Makefile21
-rw-r--r--doc/avtools-common-opts.texi3
-rw-r--r--doc/ffmpeg.texi242
-rw-r--r--doc/muxers.texi7
-rw-r--r--doc/print_options.c123
-rw-r--r--doc/protocols.texi6
-rwxr-xr-xdoc/texi2pod.pl19
-rw-r--r--ffmpeg.c7
-rw-r--r--libavcodec/Makefile2
-rw-r--r--libavcodec/bink.c2
-rw-r--r--libavcodec/options.c376
-rw-r--r--libavcodec/options_table.h408
-rw-r--r--libavcodec/utils.c9
-rw-r--r--libavcodec/vp8.c2
-rw-r--r--libavformat/avformat.h24
-rw-r--r--libavformat/avidec.c6
-rw-r--r--libavformat/gxfenc.c2
-rw-r--r--libavformat/id3v2.c1
-rw-r--r--libavformat/internal.h27
-rw-r--r--libavformat/movenc.c15
-rw-r--r--libavformat/movenc.h1
-rw-r--r--libavformat/mpegenc.c2
-rw-r--r--libavformat/mpegtsenc.c3
-rw-r--r--libavformat/oggparsevorbis.c83
-rw-r--r--libavformat/options.c50
-rw-r--r--libavformat/options_table.h73
-rw-r--r--libavformat/rtpdec_asf.c2
-rw-r--r--libavformat/rtpenc.c2
-rw-r--r--libavformat/rtsp.c7
-rw-r--r--libavformat/utils.c72
-rw-r--r--libavformat/version.h6
-rw-r--r--libavformat/xa.c20
-rw-r--r--tests/fate/adpcm.mak3
-rw-r--r--tests/fate/demux.mak2
-rw-r--r--tests/fate/vpx.mak2
-rw-r--r--tests/ref/fate/adpcm-ea-maxis-xa31
-rw-r--r--tests/ref/fate/amv308
-rw-r--r--tests/ref/fate/maxis-xa32
-rw-r--r--tests/ref/fate/pcm_dvd238
-rw-r--r--tests/ref/fate/smjpeg684
-rw-r--r--tests/ref/fate/truemotion1-15210
-rw-r--r--tests/ref/fate/truemotion1-2440
43 files changed, 1708 insertions, 1467 deletions
diff --git a/Makefile b/Makefile
index f2341955c7..467691bc7e 100644
--- a/Makefile
+++ b/Makefile
@@ -19,7 +19,7 @@ PROGS := $(PROGS-yes:%=%$(EXESUF))
INSTPROGS = $(PROGS-yes:%=%$(PROGSSUF)$(EXESUF))
OBJS = $(PROGS-yes:%=%.o) cmdutils.o
TESTTOOLS = audiogen videogen rotozoom tiny_psnr base64
-HOSTPROGS := $(TESTTOOLS:%=tests/%)
+HOSTPROGS := $(TESTTOOLS:%=tests/%) doc/print_options
TOOLS = qt-faststart trasher
TOOLS-$(CONFIG_ZLIB) += cws2fws
diff --git a/doc/Makefile b/doc/Makefile
index 2dbf30a0db..ed1425fc3e 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -28,18 +28,27 @@ doc/%.txt: doc/%.texi
$(Q)$(TEXIDEP)
$(M)makeinfo --force --no-headers -o $@ $< 2>/dev/null
+doc/print_options.o: libavformat/options_table.h libavcodec/options_table.h
+
+GENTEXI = format codec
+GENTEXI := $(GENTEXI:%=doc/avoptions_%.texi)
+
+$(GENTEXI): TAG = GENTEXI
+$(GENTEXI): doc/avoptions_%.texi: doc/print_options
+ $(M)doc/print_options $* > $@
+
doc/%.html: TAG = HTML
-doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.init
+doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.init $(GENTEXI)
$(Q)$(TEXIDEP)
- $(M)texi2html -monolithic --init-file $(SRC_PATH)/doc/t2h.init --output $@ $<
+ $(M)texi2html -I doc -monolithic --init-file $(SRC_PATH)/doc/t2h.init --output $@ $<
doc/%.pod: TAG = POD
-doc/%.pod: doc/%.texi
+doc/%.pod: doc/%.texi $(GENTEXI)
$(Q)$(TEXIDEP)
- $(M)$(SRC_PATH)/doc/texi2pod.pl $< $@
+ $(M)$(SRC_PATH)/doc/texi2pod.pl -Idoc $< $@
doc/%.1: TAG = MAN
-doc/%.1: doc/%.pod
+doc/%.1: doc/%.pod $(GENTEXI)
$(M)pod2man --section=1 --center=" " --release=" " $< > $@
$(DOCS): | doc
@@ -57,7 +66,7 @@ uninstall-man:
$(RM) $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
clean::
- $(RM) $(TXTPAGES) doc/*.html doc/*.pod doc/*.1 $(CLEANSUFFIXES:%=doc/%)
+ $(RM) $(TXTPAGES) doc/*.html doc/*.pod doc/*.1 $(CLEANSUFFIXES:%=doc/%) doc/avoptions_*.texi
-include $(wildcard $(DOCS:%=%.d))
diff --git a/doc/avtools-common-opts.texi b/doc/avtools-common-opts.texi
index c891016f41..c25b535a9d 100644
--- a/doc/avtools-common-opts.texi
+++ b/doc/avtools-common-opts.texi
@@ -175,3 +175,6 @@ use @option{-option 0}/@option{-option 1}.
Note2 old undocumented way of specifying per-stream AVOptions by prepending
v/a/s to the options name is now obsolete and will be removed soon.
+
+@include avoptions_codec.texi
+@include avoptions_format.texi
diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi
index 2cb1050b8e..402a4ae3fb 100644
--- a/doc/ffmpeg.texi
+++ b/doc/ffmpeg.texi
@@ -370,25 +370,7 @@ pad=width:height:x:y:color instead.
@item -vn (@emph{output})
Disable video recording.
-@item -bt @var{tolerance}
-Set video bitrate tolerance (in bits, default 4000k).
-Has a minimum value of: (target_bitrate/target_framerate).
-In 1-pass mode, bitrate tolerance specifies how far ratecontrol is
-willing to deviate from the target average bitrate value. This is
-not related to min/max bitrate. Lowering tolerance too much has
-an adverse effect on quality.
-@item -maxrate @var{bitrate}
-Set max video bitrate (in bit/s).
-Requires -bufsize to be set.
-@item -minrate @var{bitrate}
-Set min video bitrate (in bit/s).
-Most useful in setting up a CBR encode:
-@example
-ffmpeg -i myfile.avi -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
-@end example
-It is of little use elsewise.
-@item -bufsize @var{size}
-Set video buffer verifier buffer size (in bits).
+
@item -vcodec @var{codec} (@emph{output})
Set the video codec. This is an alias for @code{-codec:v}.
@item -same_quant
@@ -435,197 +417,14 @@ Set pixel format. Use @code{-pix_fmts} to show all the supported
pixel formats.
@item -sws_flags @var{flags} (@emph{input/output})
Set SwScaler flags.
-@item -g @var{gop_size}
-Set the group of pictures size.
-@item -intra
-deprecated, use -g 1
@item -vdt @var{n}
Discard threshold.
-@item -qmin @var{q}
-minimum video quantizer scale (VBR)
-@item -qmax @var{q}
-maximum video quantizer scale (VBR)
-@item -qdiff @var{q}
-maximum difference between the quantizer scales (VBR)
-@item -qblur @var{blur}
-video quantizer scale blur (VBR) (range 0.0 - 1.0)
-@item -qcomp @var{compression}
-video quantizer scale compression (VBR) (default 0.5).
-Constant of ratecontrol equation. Recommended range for default rc_eq: 0.0-1.0
-
-@item -lmin @var{lambda}
-minimum video lagrange factor (VBR)
-@item -lmax @var{lambda}
-max video lagrange factor (VBR)
-@item -mblmin @var{lambda}
-minimum macroblock quantizer scale (VBR)
-@item -mblmax @var{lambda}
-maximum macroblock quantizer scale (VBR)
-
-These four options (lmin, lmax, mblmin, mblmax) use 'lambda' units,
-but you may use the QP2LAMBDA constant to easily convert from 'q' units:
-@example
-ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
-@end example
-
-@item -rc_init_cplx @var{complexity}
-initial complexity for single pass encoding
-@item -b_qfactor @var{factor}
-qp factor between P- and B-frames
-@item -i_qfactor @var{factor}
-qp factor between P- and I-frames
-@item -b_qoffset @var{offset}
-qp offset between P- and B-frames
-@item -i_qoffset @var{offset}
-qp offset between P- and I-frames
-@item -rc_eq @var{equation}
-Set rate control equation (see section "Expression Evaluation")
-(default = @code{tex^qComp}).
-
-When computing the rate control equation expression, besides the
-standard functions defined in the section "Expression Evaluation", the
-following functions are available:
-@table @var
-@item bits2qp(bits)
-@item qp2bits(qp)
-@end table
-
-and the following constants are available:
-@table @var
-@item iTex
-@item pTex
-@item tex
-@item mv
-@item fCode
-@item iCount
-@item mcVar
-@item var
-@item isI
-@item isP
-@item isB
-@item avgQP
-@item qComp
-@item avgIITex
-@item avgPITex
-@item avgPPTex
-@item avgBPTex
-@item avgTex
-@end table
@item -rc_override[:@var{stream_specifier}] @var{override} (@emph{output,per-stream})
Rate control override for specific intervals, formatted as "int,int,int"
list separated with slashes. Two first values are the beginning and
end frame numbers, last one is quantizer to use if positive, or quality
factor if negative.
-@item -me_method @var{method}
-Set motion estimation method to @var{method}.
-Available methods are (from lowest to best quality):
-@table @samp
-@item zero
-Try just the (0, 0) vector.
-@item phods
-@item log
-@item x1
-@item hex
-@item umh
-@item epzs
-(default method)
-@item full
-exhaustive search (slow and marginally better than epzs)
-@end table
-
-@item -dct_algo @var{algo}
-Set DCT algorithm to @var{algo}. Available values are:
-@table @samp
-@item 0
-FF_DCT_AUTO (default)
-@item 1
-FF_DCT_FASTINT
-@item 2
-FF_DCT_INT
-@item 3
-FF_DCT_MMX
-@item 4
-FF_DCT_MLIB
-@item 5
-FF_DCT_ALTIVEC
-@end table
-
-@item -idct_algo @var{algo}
-Set IDCT algorithm to @var{algo}. Available values are:
-@table @samp
-@item 0
-FF_IDCT_AUTO (default)
-@item 1
-FF_IDCT_INT
-@item 2
-FF_IDCT_SIMPLE
-@item 3
-FF_IDCT_SIMPLEMMX
-@item 4
-FF_IDCT_LIBMPEG2MMX
-@item 5
-FF_IDCT_PS2
-@item 6
-FF_IDCT_MLIB
-@item 7
-FF_IDCT_ARM
-@item 8
-FF_IDCT_ALTIVEC
-@item 9
-FF_IDCT_SH4
-@item 10
-FF_IDCT_SIMPLEARM
-@end table
-
-@item -er @var{n}
-Set error resilience to @var{n}.
-@table @samp
-@item 1
-FF_ER_CAREFUL (default)
-@item 2
-FF_ER_COMPLIANT
-@item 3
-FF_ER_AGGRESSIVE
-@item 4
-FF_ER_VERY_AGGRESSIVE
-@end table
-
-@item -ec @var{bit_mask}
-Set error concealment to @var{bit_mask}. @var{bit_mask} is a bit mask of
-the following values:
-@table @samp
-@item 1
-FF_EC_GUESS_MVS (default = enabled)
-@item 2
-FF_EC_DEBLOCK (default = enabled)
-@end table
-
-@item -bf @var{frames}
-Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
-@item -mbd @var{mode}
-macroblock decision
-@table @samp
-@item 0
-FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in ffmpeg).
-@item 1
-FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
-@item 2
-FF_MB_DECISION_RD: rate distortion
-@end table
-
-@item -4mv
-Use four motion vector by macroblock (MPEG-4 only).
-@item -part
-Use data partitioning (MPEG-4 only).
-@item -bug @var{param}
-Work around encoder bugs that are not auto-detected.
-@item -strict @var{strictness}
-How strictly to follow the standards.
-@item -aic
-Enable Advanced intra coding (h263+).
-@item -umv
-Enable Unlimited Motion Vector (h263+)
@item -deinterlace
Deinterlace pictures.
@@ -696,28 +495,6 @@ of supported sample formats.
@table @option
@item -atag @var{fourcc/tag} (@emph{output})
Force audio tag/fourcc. This is an alias for @code{-tag:a}.
-@item -audio_service_type @var{type}
-Set the type of service that the audio stream contains.
-@table @option
-@item ma
-Main Audio Service (default)
-@item ef
-Effects
-@item vi
-Visually Impaired
-@item hi
-Hearing Impaired
-@item di
-Dialogue
-@item co
-Commentary
-@item em
-Emergency
-@item vo
-Voice Over
-@item ka
-Karaoke
-@end table
@item -absf @var{bitstream_filter}
Deprecated, see -bsf
@end table
@@ -945,8 +722,6 @@ Exit after ffmpeg has been running for @var{duration} seconds.
Dump each input packet to stderr.
@item -hex (@emph{global})
When dumping packets, also dump the payload.
-@item -ps @var{size}
-Set RTP payload size in bytes.
@item -re (@emph{input})
Read input at native frame rate. Mainly used to simulate a grab device.
@item -loop_input
@@ -957,8 +732,6 @@ This option is deprecated, use -loop 1.
Repeatedly loop output for formats that support looping such as animated GIF
(0 will loop the output infinitely).
This option is deprecated, use -loop.
-@item -threads @var{count}
-Thread count.
@item -vsync @var{parameter}
Video sync method.
For compatibility reasons old values can be specified as numbers.
@@ -1294,6 +1067,19 @@ ffmpeg -i test1.avi -i test2.avi -map 0.3 -map 0.2 -map 0.1 -map 0.0 -c copy tes
The resulting output file @file{test12.avi} will contain first four streams from
the input file in reverse order.
+@item
+To force CBR video output:
+@example
+ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
+@end example
+
+@item
+The four options lmin, lmax, mblmin and mblmax use 'lambda' units,
+but you may use the QP2LAMBDA constant to easily convert from 'q' units:
+@example
+ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
+@end example
+
@end itemize
@c man end EXAMPLES
diff --git a/doc/muxers.texi b/doc/muxers.texi
index f500f0ab0e..7d64482bc7 100644
--- a/doc/muxers.texi
+++ b/doc/muxers.texi
@@ -181,8 +181,15 @@ Allow the caller to manually choose when to cut fragments, by
calling @code{av_write_frame(ctx, NULL)} to write a fragment with
the packets written so far. (This is only useful with other
applications integrating libavformat, not from @command{ffmpeg}.)
+@item -min_frag_duration @var{duration}
+Don't create fragments that are shorter than @var{duration} microseconds long.
@end table
+If more than one condition is specified, fragments are cut when
+one of the specified conditions is fulfilled. The exception to this is
+@code{-min_frag_duration}, which has to be fulfilled for any of the other
+conditions to apply.
+
Additionally, the way the output file is written can be adjusted
through a few other options:
diff --git a/doc/print_options.c b/doc/print_options.c
new file mode 100644
index 0000000000..4283e6a86d
--- /dev/null
+++ b/doc/print_options.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2012 Anton Khirnov
+ *
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/*
+ * generate texinfo manpages for avoptions
+ */
+
+#include <stddef.h>
+#include <string.h>
+#include <float.h>
+
+#include "libavformat/avformat.h"
+#include "libavcodec/avcodec.h"
+#include "libavutil/opt.h"
+
+static void print_usage(void)
+{
+ fprintf(stderr, "Usage: enum_options type\n"
+ "type: format codec\n");
+ exit(1);
+}
+
+static void print_option(const AVOption *opts, const AVOption *o, int per_stream)
+{
+ printf("@item -%s%s @var{", o->name, per_stream ? "[:stream_specifier]" : "");
+ switch (o->type) {
+ case AV_OPT_TYPE_BINARY: printf("hexadecimal string"); break;
+ case AV_OPT_TYPE_STRING: printf("string"); break;
+ case AV_OPT_TYPE_INT:
+ case AV_OPT_TYPE_INT64: printf("integer"); break;
+ case AV_OPT_TYPE_FLOAT:
+ case AV_OPT_TYPE_DOUBLE: printf("float"); break;
+ case AV_OPT_TYPE_RATIONAL: printf("rational number"); break;
+ case AV_OPT_TYPE_FLAGS: printf("flags"); break;
+ default: printf("value"); break;
+ }
+ printf("} (@emph{");
+
+ if (o->flags & AV_OPT_FLAG_DECODING_PARAM) {
+ printf("input");
+ if (o->flags & AV_OPT_FLAG_ENCODING_PARAM)
+ printf("/");
+ }
+ if (o->flags & AV_OPT_FLAG_ENCODING_PARAM) printf("output");
+ if (o->flags & AV_OPT_FLAG_AUDIO_PARAM) printf(",audio");
+ if (o->flags & AV_OPT_FLAG_VIDEO_PARAM) printf(",video");
+ if (o->flags & AV_OPT_FLAG_SUBTITLE_PARAM) printf(",subtitles");
+
+ printf("})\n");
+ if (o->help)
+ printf("%s\n", o->help);
+
+ if (o->unit) {
+ const AVOption *u;
+ printf("\nPossible values:\n@table @samp\n");
+
+ for (u = opts; u->name; u++) {
+ if (u->type == AV_OPT_TYPE_CONST && u->unit && !strcmp(u->unit, o->unit))
+ printf("@item %s\n%s\n", u->name, u->help ? u->help : "");
+ }
+ printf("@end table\n");
+ }
+}
+
+static void show_opts(const AVOption *opts, int per_stream)
+{
+ const AVOption *o;
+
+ printf("@table @option\n");
+ for (o = opts; o->name; o++) {
+ if (o->type != AV_OPT_TYPE_CONST)
+ print_option(opts, o, per_stream);
+ }
+ printf("@end table\n");
+}
+
+static void show_format_opts(void)
+{
+#include "libavformat/options_table.h"
+
+ printf("@section Format AVOptions\n");
+ show_opts(options, 0);
+}
+
+static void show_codec_opts(void)
+{
+#include "libavcodec/options_table.h"
+
+ printf("@section Codec AVOptions\n");
+ show_opts(options, 1);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc < 2)
+ print_usage();
+
+ if (!strcmp(argv[1], "format"))
+ show_format_opts();
+ else if (!strcmp(argv[1], "codec"))
+ show_codec_opts();
+ else
+ print_usage();
+
+ return 0;
+}
diff --git a/doc/protocols.texi b/doc/protocols.texi
index 782e2b069b..ae1c9b84e6 100644
--- a/doc/protocols.texi
+++ b/doc/protocols.texi
@@ -318,9 +318,9 @@ Accept packets only from negotiated peer address and port.
@end table
When receiving data over UDP, the demuxer tries to reorder received packets
-(since they may arrive out of order, or packets may get lost totally). In
-order for this to be enabled, a maximum delay must be specified in the
-@code{max_delay} field of AVFormatContext.
+(since they may arrive out of order, or packets may get lost totally). This
+can be disabled by setting the maximum demuxing delay to zero (via
+the @code{max_delay} field of AVFormatContext).
When watching multi-bitrate Real-RTSP streams with @command{ffplay}, the
streams to display can be chosen with @code{-vst} @var{n} and
diff --git a/doc/texi2pod.pl b/doc/texi2pod.pl
index 0eb5e8d9fe..94323be340 100755
--- a/doc/texi2pod.pl
+++ b/doc/texi2pod.pl
@@ -36,7 +36,7 @@ $shift = "";
%defs = ();
$fnno = 1;
$inf = "";
-$ibase = "";
+@ibase = ();
while ($_ = shift) {
if (/^-D(.*)$/) {
@@ -52,6 +52,8 @@ while ($_ = shift) {
die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
unless $flag =~ /^[a-zA-Z0-9_-]+$/;
$defs{$flag} = $value;
+ } elsif (/^-I(.*)$/) {
+ push @ibase, $1 ne "" ? $1 : shift;
} elsif (/^-/) {
usage();
} else {
@@ -61,10 +63,12 @@ while ($_ = shift) {
}
}
+push @ibase, ".";
+
if (defined $in) {
$inf = gensym();
open($inf, "<$in") or die "opening \"$in\": $!\n";
- $ibase = $1 if $in =~ m|^(.+)/[^/]+$|;
+ push @ibase, $1 if $in =~ m|^(.+)/[^/]+$|;
} else {
$inf = \*STDIN;
}
@@ -74,7 +78,7 @@ if (defined $out) {
}
while(defined $inf) {
-while(<$inf>) {
+INF: while(<$inf>) {
# Certain commands are discarded without further processing.
/^\@(?:
[a-z]+index # @*index: useful only in complete manual
@@ -104,11 +108,10 @@ while(<$inf>) {
push @instack, $inf;
$inf = gensym();
- # Try cwd and $ibase.
- open($inf, "<" . $1)
- or open($inf, "<" . $ibase . "/" . $1)
- or die "cannot open $1 or $ibase/$1: $!\n";
- next;
+ for (@ibase) {
+ open($inf, "<" . $_ . "/" . $1) and next INF;
+ }
+ die "cannot open $1: $!\n";
};
# Look for blocks surrounded by @c man begin SECTION ... @c man end.
diff --git a/ffmpeg.c b/ffmpeg.c
index 6d1d3f710d..2a64182674 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1007,8 +1007,10 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
* reordering, see do_video_out()
*/
if (!(avctx->codec_type == AVMEDIA_TYPE_VIDEO && avctx->codec)) {
- if (ost->frame_number >= ost->max_frames)
+ if (ost->frame_number >= ost->max_frames) {
+ av_free_packet(pkt);
return;
+ }
ost->frame_number++;
}
@@ -1083,6 +1085,7 @@ static int encode_audio_frame(AVFormatContext *s, OutputStream *ost,
exit_program(1);
}
+ frame->pts = ost->sync_opts;
ost->sync_opts += frame->nb_samples;
}
@@ -5065,7 +5068,7 @@ static const OptionDef options[] = {
{ "padleft", HAS_ARG | OPT_VIDEO, {(void*)opt_pad}, "Removed, use the pad filter instead", "size" },
{ "padright", HAS_ARG | OPT_VIDEO, {(void*)opt_pad}, "Removed, use the pad filter instead", "size" },
{ "padcolor", HAS_ARG | OPT_VIDEO, {(void*)opt_pad}, "Removed, use the pad filter instead", "color" },
- { "intra", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&intra_only}, "use only intra frames"},
+ { "intra", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&intra_only}, "deprecated use -g 1"},
{ "vn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET, {.off = OFFSET(video_disable)}, "disable video" },
{ "vdt", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)&video_discard}, "discard threshold", "n" },
{ "rc_override", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_STRING | OPT_SPEC, {.off = OFFSET(rc_overrides)}, "rate control override for specific intervals", "override" },
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index d5e7499f38..92e68fad86 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -616,7 +616,7 @@ OBJS-$(CONFIG_MPEGTS_DEMUXER) += mpeg4audio.o mpegaudiodata.o
OBJS-$(CONFIG_MXF_MUXER) += timecode.o
OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o
OBJS-$(CONFIG_OGG_DEMUXER) += flacdec.o flacdata.o flac.o \
- dirac.o mpeg12data.o vorbis_data.o
+ dirac.o mpeg12data.o vorbis_parser.o vorbis_data.o
OBJS-$(CONFIG_OGG_MUXER) += xiph.o flacdec.o flacdata.o flac.o \
vorbis_data.o
OBJS-$(CONFIG_RTP_MUXER) += mpeg4audio.o mpegvideo.o xiph.o
diff --git a/libavcodec/bink.c b/libavcodec/bink.c
index 7df5871030..c8daab38ee 100644
--- a/libavcodec/bink.c
+++ b/libavcodec/bink.c
@@ -146,6 +146,8 @@ enum BlockTypes {
*/
static void init_lengths(BinkContext *c, int width, int bw)
{
+ width = FFALIGN(width, 8);
+
c->bundle[BINK_SRC_BLOCK_TYPES].len = av_log2((width >> 3) + 511) + 1;
c->bundle[BINK_SRC_SUB_BLOCK_TYPES].len = av_log2(((width + 7) >> 4) + 511) + 1;
diff --git a/libavcodec/options.c b/libavcodec/options.c
index 9aae191150..ef598d5871 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -30,6 +30,8 @@
#include "libavutil/opt.h"
#include <float.h> /* FLT_MIN, FLT_MAX */
+#include "options_table.h"
+
static const char* context_to_name(void* ptr) {
AVCodecContext *avc= ptr;
@@ -63,384 +65,12 @@ static const AVClass *codec_child_class_next(const AVClass *prev)
return NULL;
}
-#define OFFSET(x) offsetof(AVCodecContext,x)
-#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
-//these names are too long to be readable
-#define V AV_OPT_FLAG_VIDEO_PARAM
-#define A AV_OPT_FLAG_AUDIO_PARAM
-#define S AV_OPT_FLAG_SUBTITLE_PARAM
-#define E AV_OPT_FLAG_ENCODING_PARAM
-#define D AV_OPT_FLAG_DECODING_PARAM
-
-#define AV_CODEC_DEFAULT_BITRATE 200*1000
-
-static const AVOption options[]={
-{"b", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT, {.dbl = AV_CODEC_DEFAULT_BITRATE }, INT_MIN, INT_MAX, A|V|E},
-{"ab", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT, {.dbl = 128*1000 }, INT_MIN, INT_MAX, A|E},
-{"bt", "set video bitrate tolerance (in bits/s)", OFFSET(bit_rate_tolerance), AV_OPT_TYPE_INT, {.dbl = AV_CODEC_DEFAULT_BITRATE*20 }, 1, INT_MAX, V|E},
-{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, UINT_MAX, V|A|E|D, "flags"},
-{"mv4", "use four motion vector by macroblock (mpeg4)", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"},
-{"qpel", "use 1/4 pel motion compensation", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"},
-{"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"},
-{"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"},
-{"gmc", "use gmc", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_GMC }, INT_MIN, INT_MAX, V|E, "flags"},
-{"mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_MV0 }, INT_MIN, INT_MAX, V|E, "flags"},
-{"input_preserved", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_INPUT_PRESERVED }, INT_MIN, INT_MAX, 0, "flags"},
-{"pass1", "use internal 2pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"},
-{"pass2", "use internal 2pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"},
-{"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"},
-{"emu_edge", "don't draw edges", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_EMU_EDGE }, INT_MIN, INT_MAX, 0, "flags"},
-{"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"},
-{"truncated", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_TRUNCATED }, INT_MIN, INT_MAX, 0, "flags"},
-{"naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_NORMALIZE_AQP }, INT_MIN, INT_MAX, V|E, "flags"},
-{"ildct", "use interlaced dct", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, "flags"},
-{"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, "flags"},
-{"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, "flags"},
-{"bitexact", "use only bitexact stuff (except (i)dct)", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_BITEXACT }, INT_MIN, INT_MAX, A|V|S|D|E, "flags"},
-{"aic", "h263 advanced intra coding / mpeg4 ac prediction", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_AC_PRED }, INT_MIN, INT_MAX, V|E, "flags"},
-#if FF_API_MPV_GLOBAL_OPTS
-{"cbp", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_CBP_RD }, INT_MIN, INT_MAX, V|E, "flags"},
-{"qprd", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QP_RD }, INT_MIN, INT_MAX, V|E, "flags"},
-#endif
-{"ilme", "interlaced motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_INTERLACED_ME }, INT_MIN, INT_MAX, V|E, "flags"},
-{"cgop", "closed gop", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_CLOSED_GOP }, INT_MIN, INT_MAX, V|E, "flags"},
-{"fast", "allow non spec compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, "flags2"},
-#if FF_API_MPV_GLOBAL_OPTS
-{"sgop", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_STRICT_GOP }, INT_MIN, INT_MAX, V|E, "flags2"},
-#endif
-{"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"},
-{"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"},
-{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"},
-#if FF_API_SUB_ID
-{"sub_id", NULL, OFFSET(sub_id), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-#endif
-{"me_method", "set motion estimation method", OFFSET(me_method), AV_OPT_TYPE_INT, {.dbl = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method"},
-{"zero", "zero motion estimation (fastest)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_ZERO }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"full", "full motion estimation (slowest)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"epzs", "EPZS motion estimation (default)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"esa", "esa motion estimation (alias for full)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"tesa", "tesa motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_TESA }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"dia", "dia motion estimation (alias for epzs)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"log", "log motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_LOG }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"phods", "phods motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_PHODS }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"x1", "X1 motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_X1 }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"hex", "hex motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_HEX }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"umh", "umh motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_UMH }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"iter", "iter motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_ITER }, INT_MIN, INT_MAX, V|E, "me_method" },
-{"extradata_size", NULL, OFFSET(extradata_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, INT_MIN, INT_MAX},
-{"g", "set the group of picture size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.dbl = 12 }, INT_MIN, INT_MAX, V|E},
-{"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|D|E},
-{"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|D|E},
-{"cutoff", "set cutoff bandwidth", OFFSET(cutoff), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|E},
-{"frame_size", NULL, OFFSET(frame_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|E},
-{"frame_number", NULL, OFFSET(frame_number), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"delay", NULL, OFFSET(delay), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"qcomp", "video quantizer scale compression (VBR)", OFFSET(qcompress), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -FLT_MAX, FLT_MAX, V|E},
-{"qblur", "video quantizer scale blur (VBR)", OFFSET(qblur), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -1, FLT_MAX, V|E},
-{"qmin", "min video quantizer scale (VBR)", OFFSET(qmin), AV_OPT_TYPE_INT, {.dbl = 2 }, -1, 69, V|E},
-{"qmax", "max video quantizer scale (VBR)", OFFSET(qmax), AV_OPT_TYPE_INT, {.dbl = 31 }, -1, 1024, V|E},
-{"qdiff", "max difference between the quantizer scale (VBR)", OFFSET(max_qdiff), AV_OPT_TYPE_INT, {.dbl = 3 }, INT_MIN, INT_MAX, V|E},
-{"bf", "use 'frames' B frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, -1, FF_MAX_B_FRAMES, V|E},
-{"b_qfactor", "qp factor between p and b frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
-{"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX, V|E},
-{"ps", "rtp payload size in bytes", OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"mv_bits", NULL, OFFSET(mv_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"header_bits", NULL, OFFSET(header_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"i_tex_bits", NULL, OFFSET(i_tex_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"p_tex_bits", NULL, OFFSET(p_tex_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"i_count", NULL, OFFSET(i_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"p_count", NULL, OFFSET(p_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"skip_count", NULL, OFFSET(skip_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"misc_bits", NULL, OFFSET(misc_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"frame_bits", NULL, OFFSET(frame_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"codec_tag", NULL, OFFSET(codec_tag), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"bug", "workaround not auto detected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.dbl = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"},
-{"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"},
-{"old_msmpeg4", "some old lavc generated msmpeg4v3 files (no autodetection)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_OLD_MSMPEG4 }, INT_MIN, INT_MAX, V|D, "bug"},
-{"xvid_ilace", "Xvid interlacing bug (autodetected if fourcc==XVIX)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_XVID_ILACE }, INT_MIN, INT_MAX, V|D, "bug"},
-{"ump4", "(autodetected if fourcc==UMP4)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_UMP4 }, INT_MIN, INT_MAX, V|D, "bug"},
-{"no_padding", "padding bug (autodetected)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_NO_PADDING }, INT_MIN, INT_MAX, V|D, "bug"},
-{"amv", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_AMV }, INT_MIN, INT_MAX, V|D, "bug"},
-{"ac_vlc", "illegal vlc bug (autodetected per fourcc)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_AC_VLC }, INT_MIN, INT_MAX, V|D, "bug"},
-{"qpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_QPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"},
-{"std_qpel", "old standard qpel (autodetected per fourcc/version)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_STD_QPEL }, INT_MIN, INT_MAX, V|D, "bug"},
-{"qpel_chroma2", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_QPEL_CHROMA2 }, INT_MIN, INT_MAX, V|D, "bug"},
-{"direct_blocksize", "direct-qpel-blocksize bug (autodetected per fourcc/version)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_DIRECT_BLOCKSIZE }, INT_MIN, INT_MAX, V|D, "bug"},
-{"edge", "edge padding bug (autodetected per fourcc/version)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_EDGE }, INT_MIN, INT_MAX, V|D, "bug"},
-{"hpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_HPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"},
-{"dc_clip", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_DC_CLIP }, INT_MIN, INT_MAX, V|D, "bug"},
-{"ms", "workaround various bugs in microsofts broken decoders", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_MS }, INT_MIN, INT_MAX, V|D, "bug"},
-{"trunc", "trancated frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_TRUNCATED}, INT_MIN, INT_MAX, V|D, "bug"},
-#if FF_API_MPV_GLOBAL_OPTS
-{"lelim", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)", OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"celim", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)", OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-#endif
-{"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
-{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, V|D|E, "strict"},
-{"strict", "strictly conform to all the things in the spec no matter what consequences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, V|D|E, "strict"},
-{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
-{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
-{"experimental", "allow non standardized experimental things", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
-{"b_qoffset", "qp offset between P and B frames", OFFSET(b_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
-{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"careful", "consider things that violate the spec and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"aggressive", "consider things that a sane encoder shouldnt do as an error", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
-{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"stats_out", NULL, OFFSET(stats_out), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX},
-{"stats_in", NULL, OFFSET(stats_in), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX},
-{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E},
-{"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
-{"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"rc_eq", "set rate control equation", OFFSET(rc_eq), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, V|E},
-{"maxrate", "set max bitrate tolerance (in bits/s)", OFFSET(rc_max_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
-{"minrate", "set min bitrate tolerance (in bits/s)", OFFSET(rc_min_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
-{"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|V|E},
-{"rc_buf_aggressivity", "currently useless", OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, V|E},
-{"i_qfactor", "qp factor between P and I frames", OFFSET(i_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = -0.8 }, -FLT_MAX, FLT_MAX, V|E},
-{"i_qoffset", "qp offset between P and I frames", OFFSET(i_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 0.0 }, -FLT_MAX, FLT_MAX, V|E},
-{"rc_init_cplx", "initial complexity for 1-pass encoding", OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
-{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, V|E, "dct"},
-{"auto", "autoselect a good one (default)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
-{"fastint", "fast integer", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"},
-{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"},
-{"mmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"},
-{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"},
-{"faan", "floating point AAN DCT", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"},
-{"lumi_mask", "compresses bright areas stronger than medium ones", OFFSET(lumi_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
-{"tcplx_mask", "temporal complexity masking", OFFSET(temporal_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
-{"scplx_mask", "spatial complexity masking", OFFSET(spatial_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
-{"p_mask", "inter masking", OFFSET(p_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
-{"dark_mask", "compresses dark areas stronger than medium ones", OFFSET(dark_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
-{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, V|E|D, "idct"},
-{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"int", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"libmpeg2mmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_LIBMPEG2MMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"mmi", NULL, 0, AV_OPT_TYPE_CONST, { .dbl = FF_IDCT_MMI }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"sh4", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SH4 }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simplearm", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simplearmv5te", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simplearmv6", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simpleneon", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simplealpha", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEALPHA }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"h264", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_H264 }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"vp3", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_VP3 }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"ipp", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_IPP }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"xvidmmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_XVIDMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
-{"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.dbl = 3 }, INT_MIN, INT_MAX, V|D, "ec"},
-{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, "ec"},
-{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.dbl = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"},
-{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"pred", "prediction method", OFFSET(prediction_method), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "pred"},
-{"left", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PRED_LEFT }, INT_MIN, INT_MAX, V|E, "pred"},
-{"plane", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PRED_PLANE }, INT_MIN, INT_MAX, V|E, "pred"},
-{"median", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PRED_MEDIAN }, INT_MIN, INT_MAX, V|E, "pred"},
-{"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E},
-{"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, INT_MAX, V|A|S|E|D, "debug"},
-{"pict", "picture info", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_PICT_INFO }, INT_MIN, INT_MAX, V|D, "debug"},
-{"rc", "rate control", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_RC }, INT_MIN, INT_MAX, V|E, "debug"},
-{"bitstream", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_BITSTREAM }, INT_MIN, INT_MAX, V|D, "debug"},
-{"mb_type", "macroblock (MB) type", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"},
-{"qp", "per-block quantization parameter (QP)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_QP }, INT_MIN, INT_MAX, V|D, "debug"},
-{"mv", "motion vector", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_MV }, INT_MIN, INT_MAX, V|D, "debug"},
-{"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, "debug"},
-{"skip", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_SKIP }, INT_MIN, INT_MAX, V|D, "debug"},
-{"startcode", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_STARTCODE }, INT_MIN, INT_MAX, V|D, "debug"},
-{"pts", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_PTS }, INT_MIN, INT_MAX, V|D, "debug"},
-{"er", "error recognition", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_ER }, INT_MIN, INT_MAX, V|D, "debug"},
-{"mmco", "memory management control operations (H.264)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_MMCO }, INT_MIN, INT_MAX, V|D, "debug"},
-{"bugs", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_BUGS }, INT_MIN, INT_MAX, V|D, "debug"},
-{"vis_qp", "visualize quantization parameter (QP), lower QP are tinted greener", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_QP }, INT_MIN, INT_MAX, V|D, "debug"},
-{"vis_mb_type", "visualize block types", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"},
-{"buffers", "picture buffer allocations", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_BUFFERS }, INT_MIN, INT_MAX, V|D, "debug"},
-{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|D, "debug"},
-{"vismv", "visualize motion vectors (MVs)", OFFSET(debug_mv), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, V|D, "debug_mv"},
-{"pf", "forward predicted MVs of P-frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MV_P_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"},
-{"bf", "forward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MV_B_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"},
-{"bb", "backward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MV_B_BACK }, INT_MIN, INT_MAX, V|D, "debug_mv"},
-{"cmp", "full pel me compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"subcmp", "sub pel me compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"ildctcmp", "interlaced dct compare function", OFFSET(ildct_cmp), AV_OPT_TYPE_INT, {.dbl = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"dia_size", "diamond type & size for motion estimation", OFFSET(dia_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"last_pred", "amount of motion predictors from the previous frame", OFFSET(last_predictor_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"preme", "pre motion estimation", OFFSET(pre_me), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"sad", "sum of absolute differences, fast (default)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"sse", "sum of squared errors", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_SSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"satd", "sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_SATD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"dct", "sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_DCT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"psnr", "sum of squared quantization errors (avoid, low quality)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_PSNR }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"bit", "number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_BIT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"rd", "rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_RD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"zero", "0", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_ZERO }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"vsad", "sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"vsse", "sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_VSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"nsse", "noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_NSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-#if CONFIG_SNOW_ENCODER
-{"w53", "5/3 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_W53 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"w97", "9/7 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_W97 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-#endif
-{"dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"chroma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_CHROMA }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"subq", "sub pel motion estimation quality", OFFSET(me_subpel_quality), AV_OPT_TYPE_INT, {.dbl = 8 }, INT_MIN, INT_MAX, V|E},
-{"dtg_active_format", NULL, OFFSET(dtg_active_format), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"me_range", "limit motion vectors range (1023 for DivX player)", OFFSET(me_range), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"ibias", "intra quant bias", OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.dbl = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, V|E},
-{"pbias", "inter quant bias", OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.dbl = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, V|E},
-#if FF_API_COLOR_TABLE_ID
-{"color_table_id", NULL, OFFSET(color_table_id), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-#endif
-{"global_quality", NULL, OFFSET(global_quality), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
-{"coder", NULL, OFFSET(coder_type), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "coder"},
-{"vlc", "variable length coder / huffman coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_VLC }, INT_MIN, INT_MAX, V|E, "coder"},
-{"ac", "arithmetic coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_AC }, INT_MIN, INT_MAX, V|E, "coder"},
-{"raw", "raw (no encoding)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_RAW }, INT_MIN, INT_MAX, V|E, "coder"},
-{"rle", "run-length coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_RLE }, INT_MIN, INT_MAX, V|E, "coder"},
-{"deflate", "deflate-based coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_DEFLATE }, INT_MIN, INT_MAX, V|E, "coder"},
-{"context", "context model", OFFSET(context_model), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"slice_flags", NULL, OFFSET(slice_flags), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"xvmc_acceleration", NULL, OFFSET(xvmc_acceleration), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "mbd"},
-{"simple", "use mbcmp (default)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"},
-{"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.dbl = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, "mbd"},
-{"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.dbl = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"},
-{"stream_codec_tag", NULL, OFFSET(stream_codec_tag), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"lmin", "min lagrange factor (VBR)", OFFSET(lmin), AV_OPT_TYPE_INT, {.dbl = 2*FF_QP2LAMBDA }, 0, INT_MAX, V|E},
-{"lmax", "max lagrange factor (VBR)", OFFSET(lmax), AV_OPT_TYPE_INT, {.dbl = 31*FF_QP2LAMBDA }, 0, INT_MAX, V|E},
-{"nr", "noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-#if FF_API_INTER_THRESHOLD
-{"inter_threshold", NULL, OFFSET(inter_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-#endif
-{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT}, 0, UINT_MAX, V|A|E|D, "flags2"},
-{"error", NULL, OFFSET(error_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-#if FF_API_MPV_GLOBAL_OPTS
-{"qns", "deprecated, use mpegvideo private options instead", OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-#endif
-{"threads", NULL, OFFSET(thread_count), AV_OPT_TYPE_INT, {.dbl = 1 }, 0, INT_MAX, V|E|D, "threads"},
-{"auto", "detect a good number of threads", 0, AV_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"},
-{"me_threshold", "motion estimaton threshold", OFFSET(me_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX, V|E},
-{"nssew", "nsse weight", OFFSET(nsse_weight), AV_OPT_TYPE_INT, {.dbl = 8 }, INT_MIN, INT_MAX, V|E},
-{"skip_top", "number of macroblock rows at the top which are skipped", OFFSET(skip_top), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|D},
-{"skip_bottom", "number of macroblock rows at the bottom which are skipped", OFFSET(skip_bottom), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|D},
-{"profile", NULL, OFFSET(profile), AV_OPT_TYPE_INT, {.dbl = FF_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "profile"},
-{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "profile"},
-{"aac_main", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_MAIN }, INT_MIN, INT_MAX, A|E, "profile"},
-{"aac_low", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_LOW }, INT_MIN, INT_MAX, A|E, "profile"},
-{"aac_ssr", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_SSR }, INT_MIN, INT_MAX, A|E, "profile"},
-{"aac_ltp", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_LTP }, INT_MIN, INT_MAX, A|E, "profile"},
-{"dts", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS }, INT_MIN, INT_MAX, A|E, "profile"},
-{"dts_es", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_ES }, INT_MIN, INT_MAX, A|E, "profile"},
-{"dts_96_24", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_96_24 }, INT_MIN, INT_MAX, A|E, "profile"},
-{"dts_hd_hra", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_HD_HRA }, INT_MIN, INT_MAX, A|E, "profile"},
-{"dts_hd_ma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_HD_MA }, INT_MIN, INT_MAX, A|E, "profile"},
-{"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.dbl = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"},
-{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"},
-{"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, V|A|D},
-{"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.dbl = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"},
-{"border_mask", "increases the quantizer for macroblocks close to borders", OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
-{"mblmin", "min macroblock lagrange factor (VBR)", OFFSET(mb_lmin), AV_OPT_TYPE_INT, {.dbl = FF_QP2LAMBDA * 2 }, 1, FF_LAMBDA_MAX, V|E},
-{"mblmax", "max macroblock lagrange factor (VBR)", OFFSET(mb_lmax), AV_OPT_TYPE_INT, {.dbl = FF_QP2LAMBDA * 31 }, 1, FF_LAMBDA_MAX, V|E},
-{"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.dbl = 256 }, INT_MIN, INT_MAX, V|E},
-{"skip_loop_filter", NULL, OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"skip_idct" , NULL, OFFSET(skip_idct) , AV_OPT_TYPE_INT, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"skip_frame" , NULL, OFFSET(skip_frame) , AV_OPT_TYPE_INT, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"none" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_NONE }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"default" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"noref" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_NONREF }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"bidir" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_BIDIR }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"nokey" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_NONKEY }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"all" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, "avdiscard"},
-{"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), AV_OPT_TYPE_INT, {.dbl = 1 }, 0, 4, V|E},
-{"brd_scale", "downscales frames for dynamic B-frame decision", OFFSET(brd_scale), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, 10, V|E},
-{"keyint_min", "minimum interval between IDR-frames", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.dbl = 25 }, INT_MIN, INT_MAX, V|E},
-{"refs", "reference frames to consider for motion compensation", OFFSET(refs), AV_OPT_TYPE_INT, {.dbl = 1 }, INT_MIN, INT_MAX, V|E},
-{"chromaoffset", "chroma qp offset from luma", OFFSET(chromaoffset), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
-{"trellis", "rate-distortion optimal quantization", OFFSET(trellis), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
-#if FF_API_MPV_GLOBAL_OPTS
-{"skiprd", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_SKIP_RD }, INT_MIN, INT_MAX, V|E, "flags2"},
-#endif
-{"sc_factor", "multiplied by qscale for each frame and added to scene_change_score", OFFSET(scenechange_factor), AV_OPT_TYPE_INT, {.dbl = 6 }, 0, INT_MAX, V|E},
-{"mv0_threshold", NULL, OFFSET(mv0_threshold), AV_OPT_TYPE_INT, {.dbl = 256 }, 0, INT_MAX, V|E},
-{"b_sensitivity", "adjusts sensitivity of b_frame_strategy 1", OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.dbl = 40 }, 1, INT_MAX, V|E},
-{"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.dbl = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E},
-{"min_prediction_order", NULL, OFFSET(min_prediction_order), AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX, A|E},
-{"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX, A|E},
-{"timecode_frame_start", "GOP timecode frame start number, in non drop frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.dbl = 0 }, 0, INT64_MAX, V|E},
-#if FF_API_REQUEST_CHANNELS
-{"request_channels", "set desired number of audio channels", OFFSET(request_channels), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, A|D},
-#endif
-{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
-{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_INT64, {.dbl = DEFAULT }, 0, INT64_MAX, A|E|D, "channel_layout"},
-{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_INT64, {.dbl = DEFAULT }, 0, INT64_MAX, A|D, "request_channel_layout"},
-{"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 1.0/3 }, 0.0, FLT_MAX, V|E},
-{"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use), AV_OPT_TYPE_FLOAT, {.dbl = 3 }, 0.0, FLT_MAX, V|E},
-{"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.dbl = 1 }, 1, INT_MAX, A|V|E|D},
-{"color_primaries", NULL, OFFSET(color_primaries), AV_OPT_TYPE_INT, {.dbl = AVCOL_PRI_UNSPECIFIED }, 1, AVCOL_PRI_NB-1, V|E|D},
-{"color_trc", NULL, OFFSET(color_trc), AV_OPT_TYPE_INT, {.dbl = AVCOL_TRC_UNSPECIFIED }, 1, AVCOL_TRC_NB-1, V|E|D},
-{"colorspace", NULL, OFFSET(colorspace), AV_OPT_TYPE_INT, {.dbl = AVCOL_SPC_UNSPECIFIED }, 1, AVCOL_SPC_NB-1, V|E|D},
-{"color_range", NULL, OFFSET(color_range), AV_OPT_TYPE_INT, {.dbl = AVCOL_RANGE_UNSPECIFIED }, 0, AVCOL_RANGE_NB-1, V|E|D},
-{"chroma_sample_location", NULL, OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.dbl = AVCHROMA_LOC_UNSPECIFIED }, 0, AVCHROMA_LOC_NB-1, V|E|D},
-{"log_level_offset", "set the log level offset", OFFSET(log_level_offset), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX },
-{"slices", "number of slices, used in parallelized encoding", OFFSET(slices), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, V|E},
-{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.dbl = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|E|D, "thread_type"},
-{"slice", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
-{"frame", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
-{"audio_service_type", "audio service type", OFFSET(audio_service_type), AV_OPT_TYPE_INT, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, "audio_service_type"},
-{"ma", "Main Audio Service", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"ef", "Effects", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_EFFECTS }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"vi", "Visually Impaired", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"hi", "Hearing Impaired", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"di", "Dialogue", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_DIALOGUE }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"co", "Commentary", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_COMMENTARY }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"em", "Emergency", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_EMERGENCY }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"vo", "Voice Over", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_VOICE_OVER }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"ka", "Karaoke", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_KARAOKE }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
-{"request_sample_fmt", "sample format audio decoders should prefer", OFFSET(request_sample_fmt), AV_OPT_TYPE_INT, {.dbl = AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE, AV_SAMPLE_FMT_NB-1, A|D, "request_sample_fmt"},
-{"u8" , "8-bit unsigned integer", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_U8 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
-{"s16", "16-bit signed integer", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_S16 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
-{"s32", "32-bit signed integer", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_S32 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
-{"flt", "32-bit float", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_FLT }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
-{"dbl", "64-bit double", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_DBL }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
-{NULL},
-};
-
-#undef A
-#undef V
-#undef S
-#undef E
-#undef D
-#undef DEFAULT
-
static const AVClass av_codec_context_class = {
.class_name = "AVCodecContext",
.item_name = context_to_name,
.option = options,
.version = LIBAVUTIL_VERSION_INT,
- .log_level_offset_offset = OFFSET(log_level_offset),
+ .log_level_offset_offset = offsetof(AVCodecContext, log_level_offset),
.child_next = codec_child_next,
.child_class_next = codec_child_class_next,
};
diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h
new file mode 100644
index 0000000000..be4f5f43e0
--- /dev/null
+++ b/libavcodec/options_table.h
@@ -0,0 +1,408 @@
+/*
+ * Copyright (c) 2001 Fabrice Bellard
+ * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_OPTIONS_TABLE
+#define AVCODEC_OPTIONS_TABLE
+
+#define OFFSET(x) offsetof(AVCodecContext,x)
+#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
+//these names are too long to be readable
+#define V AV_OPT_FLAG_VIDEO_PARAM
+#define A AV_OPT_FLAG_AUDIO_PARAM
+#define S AV_OPT_FLAG_SUBTITLE_PARAM
+#define E AV_OPT_FLAG_ENCODING_PARAM
+#define D AV_OPT_FLAG_DECODING_PARAM
+
+#define AV_CODEC_DEFAULT_BITRATE 200*1000
+
+static const AVOption options[]={
+{"b", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT, {.dbl = AV_CODEC_DEFAULT_BITRATE }, INT_MIN, INT_MAX, A|V|E},
+{"ab", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT, {.dbl = 128*1000 }, INT_MIN, INT_MAX, A|E},
+{"bt", "Set video bitrate tolerance (in bits/s). In 1-pass mode, bitrate tolerance specifies how far "
+ "ratecontrol is willing to deviate from the target average bitrate value. This is not related "
+ "to min/max bitrate. Lowering tolerance too much has an adverse effect on quality.",
+ OFFSET(bit_rate_tolerance), AV_OPT_TYPE_INT, {.dbl = AV_CODEC_DEFAULT_BITRATE*20 }, 1, INT_MAX, V|E},
+{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, UINT_MAX, V|A|E|D, "flags"},
+{"mv4", "use four motion vector by macroblock (mpeg4)", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"},
+{"qpel", "use 1/4 pel motion compensation", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"},
+{"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"},
+{"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"},
+{"gmc", "use gmc", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_GMC }, INT_MIN, INT_MAX, V|E, "flags"},
+{"mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_MV0 }, INT_MIN, INT_MAX, V|E, "flags"},
+{"input_preserved", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_INPUT_PRESERVED }, INT_MIN, INT_MAX, 0, "flags"},
+{"pass1", "use internal 2pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"},
+{"pass2", "use internal 2pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"},
+{"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"},
+{"emu_edge", "don't draw edges", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_EMU_EDGE }, INT_MIN, INT_MAX, 0, "flags"},
+{"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"},
+{"truncated", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_TRUNCATED }, INT_MIN, INT_MAX, 0, "flags"},
+{"naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_NORMALIZE_AQP }, INT_MIN, INT_MAX, V|E, "flags"},
+{"ildct", "use interlaced dct", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, "flags"},
+{"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, "flags"},
+{"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, "flags"},
+{"bitexact", "use only bitexact stuff (except (i)dct)", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_BITEXACT }, INT_MIN, INT_MAX, A|V|S|D|E, "flags"},
+{"aic", "h263 advanced intra coding / mpeg4 ac prediction", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_AC_PRED }, INT_MIN, INT_MAX, V|E, "flags"},
+#if FF_API_MPV_GLOBAL_OPTS
+{"cbp", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_CBP_RD }, INT_MIN, INT_MAX, V|E, "flags"},
+{"qprd", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_QP_RD }, INT_MIN, INT_MAX, V|E, "flags"},
+#endif
+{"ilme", "interlaced motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_INTERLACED_ME }, INT_MIN, INT_MAX, V|E, "flags"},
+{"cgop", "closed gop", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG_CLOSED_GOP }, INT_MIN, INT_MAX, V|E, "flags"},
+{"fast", "allow non spec compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, "flags2"},
+#if FF_API_MPV_GLOBAL_OPTS
+{"sgop", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_STRICT_GOP }, INT_MIN, INT_MAX, V|E, "flags2"},
+#endif
+{"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"},
+{"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"},
+{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"},
+#if FF_API_SUB_ID
+{"sub_id", NULL, OFFSET(sub_id), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+#endif
+{"me_method", "set motion estimation method", OFFSET(me_method), AV_OPT_TYPE_INT, {.dbl = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method"},
+{"zero", "zero motion estimation (fastest)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_ZERO }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"full", "full motion estimation (slowest)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"epzs", "EPZS motion estimation (default)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"esa", "esa motion estimation (alias for full)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"tesa", "tesa motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_TESA }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"dia", "dia motion estimation (alias for epzs)", 0, AV_OPT_TYPE_CONST, {.dbl = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"log", "log motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_LOG }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"phods", "phods motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_PHODS }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"x1", "X1 motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_X1 }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"hex", "hex motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_HEX }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"umh", "umh motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_UMH }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"iter", "iter motion estimation", 0, AV_OPT_TYPE_CONST, {.dbl = ME_ITER }, INT_MIN, INT_MAX, V|E, "me_method" },
+{"extradata_size", NULL, OFFSET(extradata_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, INT_MIN, INT_MAX},
+{"g", "set the group of picture size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.dbl = 12 }, INT_MIN, INT_MAX, V|E},
+{"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|D|E},
+{"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|D|E},
+{"cutoff", "set cutoff bandwidth", OFFSET(cutoff), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|E},
+{"frame_size", NULL, OFFSET(frame_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|E},
+{"frame_number", NULL, OFFSET(frame_number), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"delay", NULL, OFFSET(delay), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"qcomp", "video quantizer scale compression (VBR). Constant of ratecontrol equation. "
+ "Recommended range for default rc_eq: 0.0-1.0",
+ OFFSET(qcompress), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -FLT_MAX, FLT_MAX, V|E},
+{"qblur", "video quantizer scale blur (VBR)", OFFSET(qblur), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -1, FLT_MAX, V|E},
+{"qmin", "min video quantizer scale (VBR)", OFFSET(qmin), AV_OPT_TYPE_INT, {.dbl = 2 }, -1, 69, V|E},
+{"qmax", "max video quantizer scale (VBR)", OFFSET(qmax), AV_OPT_TYPE_INT, {.dbl = 31 }, -1, 1024, V|E},
+{"qdiff", "max difference between the quantizer scale (VBR)", OFFSET(max_qdiff), AV_OPT_TYPE_INT, {.dbl = 3 }, INT_MIN, INT_MAX, V|E},
+{"bf", "use 'frames' B frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, -1, FF_MAX_B_FRAMES, V|E},
+{"b_qfactor", "qp factor between p and b frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
+{"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX, V|E},
+{"ps", "rtp payload size in bytes", OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"mv_bits", NULL, OFFSET(mv_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"header_bits", NULL, OFFSET(header_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"i_tex_bits", NULL, OFFSET(i_tex_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"p_tex_bits", NULL, OFFSET(p_tex_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"i_count", NULL, OFFSET(i_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"p_count", NULL, OFFSET(p_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"skip_count", NULL, OFFSET(skip_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"misc_bits", NULL, OFFSET(misc_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"frame_bits", NULL, OFFSET(frame_bits), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"codec_tag", NULL, OFFSET(codec_tag), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"bug", "workaround not auto detected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.dbl = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"},
+{"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"},
+{"old_msmpeg4", "some old lavc generated msmpeg4v3 files (no autodetection)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_OLD_MSMPEG4 }, INT_MIN, INT_MAX, V|D, "bug"},
+{"xvid_ilace", "Xvid interlacing bug (autodetected if fourcc==XVIX)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_XVID_ILACE }, INT_MIN, INT_MAX, V|D, "bug"},
+{"ump4", "(autodetected if fourcc==UMP4)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_UMP4 }, INT_MIN, INT_MAX, V|D, "bug"},
+{"no_padding", "padding bug (autodetected)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_NO_PADDING }, INT_MIN, INT_MAX, V|D, "bug"},
+{"amv", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_AMV }, INT_MIN, INT_MAX, V|D, "bug"},
+{"ac_vlc", "illegal vlc bug (autodetected per fourcc)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_AC_VLC }, INT_MIN, INT_MAX, V|D, "bug"},
+{"qpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_QPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"},
+{"std_qpel", "old standard qpel (autodetected per fourcc/version)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_STD_QPEL }, INT_MIN, INT_MAX, V|D, "bug"},
+{"qpel_chroma2", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_QPEL_CHROMA2 }, INT_MIN, INT_MAX, V|D, "bug"},
+{"direct_blocksize", "direct-qpel-blocksize bug (autodetected per fourcc/version)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_DIRECT_BLOCKSIZE }, INT_MIN, INT_MAX, V|D, "bug"},
+{"edge", "edge padding bug (autodetected per fourcc/version)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_EDGE }, INT_MIN, INT_MAX, V|D, "bug"},
+{"hpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_HPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"},
+{"dc_clip", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_DC_CLIP }, INT_MIN, INT_MAX, V|D, "bug"},
+{"ms", "workaround various bugs in microsofts broken decoders", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_MS }, INT_MIN, INT_MAX, V|D, "bug"},
+{"trunc", "trancated frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_BUG_TRUNCATED}, INT_MIN, INT_MAX, V|D, "bug"},
+#if FF_API_MPV_GLOBAL_OPTS
+{"lelim", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)", OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"celim", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)", OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+#endif
+{"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
+{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, V|D|E, "strict"},
+{"strict", "strictly conform to all the things in the spec no matter what consequences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, V|D|E, "strict"},
+{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
+{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
+{"experimental", "allow non standardized experimental things", 0, AV_OPT_TYPE_CONST, {.dbl = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, V|D|E, "strict"},
+{"b_qoffset", "qp offset between P and B frames", OFFSET(b_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
+{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"careful", "consider things that violate the spec and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"aggressive", "consider things that a sane encoder shouldnt do as an error", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, A|V|D, "err_detect"},
+{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"stats_out", NULL, OFFSET(stats_out), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX},
+{"stats_in", NULL, OFFSET(stats_in), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX},
+{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E},
+{"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
+{"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions "
+ "defined in the section 'Expression Evaluation', the following functions are available: "
+ "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv "
+ "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.",
+ OFFSET(rc_eq), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, V|E},
+{"maxrate", "Set max bitrate tolerance (in bits/s). Requires bufsize to be set.", OFFSET(rc_max_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
+{"minrate", "Set min bitrate tolerance (in bits/s). Most useful in setting up a CBR encode. It is of little use elsewise.",
+ OFFSET(rc_min_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
+{"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, A|V|E},
+{"rc_buf_aggressivity", "currently useless", OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, V|E},
+{"i_qfactor", "qp factor between P and I frames", OFFSET(i_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = -0.8 }, -FLT_MAX, FLT_MAX, V|E},
+{"i_qoffset", "qp offset between P and I frames", OFFSET(i_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 0.0 }, -FLT_MAX, FLT_MAX, V|E},
+{"rc_init_cplx", "initial complexity for 1-pass encoding", OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
+{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, V|E, "dct"},
+{"auto", "autoselect a good one (default)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
+{"fastint", "fast integer", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"},
+{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"},
+{"mmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"},
+{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"},
+{"faan", "floating point AAN DCT", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"},
+{"lumi_mask", "compresses bright areas stronger than medium ones", OFFSET(lumi_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
+{"tcplx_mask", "temporal complexity masking", OFFSET(temporal_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
+{"scplx_mask", "spatial complexity masking", OFFSET(spatial_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
+{"p_mask", "inter masking", OFFSET(p_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
+{"dark_mask", "compresses dark areas stronger than medium ones", OFFSET(dark_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
+{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, V|E|D, "idct"},
+{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"int", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"libmpeg2mmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_LIBMPEG2MMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"mmi", NULL, 0, AV_OPT_TYPE_CONST, { .dbl = FF_IDCT_MMI }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"sh4", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SH4 }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplearm", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplearmv5te", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplearmv6", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simpleneon", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"simplealpha", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEALPHA }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"h264", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_H264 }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"vp3", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_VP3 }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"ipp", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_IPP }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"xvidmmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_XVIDMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
+{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
+{"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.dbl = 3 }, INT_MIN, INT_MAX, V|D, "ec"},
+{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, "ec"},
+{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.dbl = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"},
+{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"pred", "prediction method", OFFSET(prediction_method), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "pred"},
+{"left", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PRED_LEFT }, INT_MIN, INT_MAX, V|E, "pred"},
+{"plane", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PRED_PLANE }, INT_MIN, INT_MAX, V|E, "pred"},
+{"median", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PRED_MEDIAN }, INT_MIN, INT_MAX, V|E, "pred"},
+{"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E},
+{"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, INT_MAX, V|A|S|E|D, "debug"},
+{"pict", "picture info", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_PICT_INFO }, INT_MIN, INT_MAX, V|D, "debug"},
+{"rc", "rate control", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_RC }, INT_MIN, INT_MAX, V|E, "debug"},
+{"bitstream", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_BITSTREAM }, INT_MIN, INT_MAX, V|D, "debug"},
+{"mb_type", "macroblock (MB) type", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"},
+{"qp", "per-block quantization parameter (QP)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_QP }, INT_MIN, INT_MAX, V|D, "debug"},
+{"mv", "motion vector", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_MV }, INT_MIN, INT_MAX, V|D, "debug"},
+{"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, "debug"},
+{"skip", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_SKIP }, INT_MIN, INT_MAX, V|D, "debug"},
+{"startcode", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_STARTCODE }, INT_MIN, INT_MAX, V|D, "debug"},
+{"pts", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_PTS }, INT_MIN, INT_MAX, V|D, "debug"},
+{"er", "error recognition", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_ER }, INT_MIN, INT_MAX, V|D, "debug"},
+{"mmco", "memory management control operations (H.264)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_MMCO }, INT_MIN, INT_MAX, V|D, "debug"},
+{"bugs", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_BUGS }, INT_MIN, INT_MAX, V|D, "debug"},
+{"vis_qp", "visualize quantization parameter (QP), lower QP are tinted greener", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_QP }, INT_MIN, INT_MAX, V|D, "debug"},
+{"vis_mb_type", "visualize block types", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"},
+{"buffers", "picture buffer allocations", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_BUFFERS }, INT_MIN, INT_MAX, V|D, "debug"},
+{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|D, "debug"},
+{"vismv", "visualize motion vectors (MVs)", OFFSET(debug_mv), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, V|D, "debug_mv"},
+{"pf", "forward predicted MVs of P-frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MV_P_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"},
+{"bf", "forward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MV_B_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"},
+{"bb", "backward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.dbl = FF_DEBUG_VIS_MV_B_BACK }, INT_MIN, INT_MAX, V|D, "debug_mv"},
+{"cmp", "full pel me compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"subcmp", "sub pel me compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"ildctcmp", "interlaced dct compare function", OFFSET(ildct_cmp), AV_OPT_TYPE_INT, {.dbl = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"dia_size", "diamond type & size for motion estimation", OFFSET(dia_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"last_pred", "amount of motion predictors from the previous frame", OFFSET(last_predictor_count), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"preme", "pre motion estimation", OFFSET(pre_me), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"sad", "sum of absolute differences, fast (default)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"sse", "sum of squared errors", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_SSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"satd", "sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_SATD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"dct", "sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_DCT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"psnr", "sum of squared quantization errors (avoid, low quality)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_PSNR }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"bit", "number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_BIT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"rd", "rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_RD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"zero", "0", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_ZERO }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"vsad", "sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"vsse", "sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_VSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"nsse", "noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_NSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+#if CONFIG_SNOW_ENCODER
+{"w53", "5/3 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_W53 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"w97", "9/7 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_W97 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+#endif
+{"dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"chroma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_CMP_CHROMA }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"subq", "sub pel motion estimation quality", OFFSET(me_subpel_quality), AV_OPT_TYPE_INT, {.dbl = 8 }, INT_MIN, INT_MAX, V|E},
+{"dtg_active_format", NULL, OFFSET(dtg_active_format), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"me_range", "limit motion vectors range (1023 for DivX player)", OFFSET(me_range), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"ibias", "intra quant bias", OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.dbl = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, V|E},
+{"pbias", "inter quant bias", OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.dbl = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, V|E},
+#if FF_API_COLOR_TABLE_ID
+{"color_table_id", NULL, OFFSET(color_table_id), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+#endif
+{"global_quality", NULL, OFFSET(global_quality), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
+{"coder", NULL, OFFSET(coder_type), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "coder"},
+{"vlc", "variable length coder / huffman coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_VLC }, INT_MIN, INT_MAX, V|E, "coder"},
+{"ac", "arithmetic coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_AC }, INT_MIN, INT_MAX, V|E, "coder"},
+{"raw", "raw (no encoding)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_RAW }, INT_MIN, INT_MAX, V|E, "coder"},
+{"rle", "run-length coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_RLE }, INT_MIN, INT_MAX, V|E, "coder"},
+{"deflate", "deflate-based coder", 0, AV_OPT_TYPE_CONST, {.dbl = FF_CODER_TYPE_DEFLATE }, INT_MIN, INT_MAX, V|E, "coder"},
+{"context", "context model", OFFSET(context_model), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"slice_flags", NULL, OFFSET(slice_flags), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"xvmc_acceleration", NULL, OFFSET(xvmc_acceleration), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E, "mbd"},
+{"simple", "use mbcmp (default)", 0, AV_OPT_TYPE_CONST, {.dbl = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"},
+{"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.dbl = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, "mbd"},
+{"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.dbl = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"},
+{"stream_codec_tag", NULL, OFFSET(stream_codec_tag), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"lmin", "min lagrange factor (VBR)", OFFSET(lmin), AV_OPT_TYPE_INT, {.dbl = 2*FF_QP2LAMBDA }, 0, INT_MAX, V|E},
+{"lmax", "max lagrange factor (VBR)", OFFSET(lmax), AV_OPT_TYPE_INT, {.dbl = 31*FF_QP2LAMBDA }, 0, INT_MAX, V|E},
+{"nr", "noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+#if FF_API_INTER_THRESHOLD
+{"inter_threshold", NULL, OFFSET(inter_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+#endif
+{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT}, 0, UINT_MAX, V|A|E|D, "flags2"},
+{"error", NULL, OFFSET(error_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+#if FF_API_MPV_GLOBAL_OPTS
+{"qns", "deprecated, use mpegvideo private options instead", OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+#endif
+{"threads", NULL, OFFSET(thread_count), AV_OPT_TYPE_INT, {.dbl = 1 }, 0, INT_MAX, V|E|D, "threads"},
+{"auto", "detect a good number of threads", 0, AV_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"},
+{"me_threshold", "motion estimaton threshold", OFFSET(me_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX, V|E},
+{"nssew", "nsse weight", OFFSET(nsse_weight), AV_OPT_TYPE_INT, {.dbl = 8 }, INT_MIN, INT_MAX, V|E},
+{"skip_top", "number of macroblock rows at the top which are skipped", OFFSET(skip_top), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|D},
+{"skip_bottom", "number of macroblock rows at the bottom which are skipped", OFFSET(skip_bottom), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|D},
+{"profile", NULL, OFFSET(profile), AV_OPT_TYPE_INT, {.dbl = FF_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "profile"},
+{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "profile"},
+{"aac_main", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_MAIN }, INT_MIN, INT_MAX, A|E, "profile"},
+{"aac_low", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_LOW }, INT_MIN, INT_MAX, A|E, "profile"},
+{"aac_ssr", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_SSR }, INT_MIN, INT_MAX, A|E, "profile"},
+{"aac_ltp", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_AAC_LTP }, INT_MIN, INT_MAX, A|E, "profile"},
+{"dts", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS }, INT_MIN, INT_MAX, A|E, "profile"},
+{"dts_es", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_ES }, INT_MIN, INT_MAX, A|E, "profile"},
+{"dts_96_24", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_96_24 }, INT_MIN, INT_MAX, A|E, "profile"},
+{"dts_hd_hra", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_HD_HRA }, INT_MIN, INT_MAX, A|E, "profile"},
+{"dts_hd_ma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_HD_MA }, INT_MIN, INT_MAX, A|E, "profile"},
+{"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.dbl = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"},
+{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"},
+{"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, V|A|D},
+{"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.dbl = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"},
+{"border_mask", "increases the quantizer for macroblocks close to borders", OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
+{"mblmin", "min macroblock lagrange factor (VBR)", OFFSET(mb_lmin), AV_OPT_TYPE_INT, {.dbl = FF_QP2LAMBDA * 2 }, 1, FF_LAMBDA_MAX, V|E},
+{"mblmax", "max macroblock lagrange factor (VBR)", OFFSET(mb_lmax), AV_OPT_TYPE_INT, {.dbl = FF_QP2LAMBDA * 31 }, 1, FF_LAMBDA_MAX, V|E},
+{"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.dbl = 256 }, INT_MIN, INT_MAX, V|E},
+{"skip_loop_filter", NULL, OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"skip_idct" , NULL, OFFSET(skip_idct) , AV_OPT_TYPE_INT, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"skip_frame" , NULL, OFFSET(skip_frame) , AV_OPT_TYPE_INT, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"none" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_NONE }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"default" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"noref" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_NONREF }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"bidir" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_BIDIR }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"nokey" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_NONKEY }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"all" , NULL, 0, AV_OPT_TYPE_CONST, {.dbl = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, "avdiscard"},
+{"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), AV_OPT_TYPE_INT, {.dbl = 1 }, 0, 4, V|E},
+{"brd_scale", "downscales frames for dynamic B-frame decision", OFFSET(brd_scale), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, 10, V|E},
+{"keyint_min", "minimum interval between IDR-frames", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.dbl = 25 }, INT_MIN, INT_MAX, V|E},
+{"refs", "reference frames to consider for motion compensation", OFFSET(refs), AV_OPT_TYPE_INT, {.dbl = 1 }, INT_MIN, INT_MAX, V|E},
+{"chromaoffset", "chroma qp offset from luma", OFFSET(chromaoffset), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
+{"trellis", "rate-distortion optimal quantization", OFFSET(trellis), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
+#if FF_API_MPV_GLOBAL_OPTS
+{"skiprd", "Deprecated, use mpegvideo private options instead", 0, AV_OPT_TYPE_CONST, {.dbl = CODEC_FLAG2_SKIP_RD }, INT_MIN, INT_MAX, V|E, "flags2"},
+#endif
+{"sc_factor", "multiplied by qscale for each frame and added to scene_change_score", OFFSET(scenechange_factor), AV_OPT_TYPE_INT, {.dbl = 6 }, 0, INT_MAX, V|E},
+{"mv0_threshold", NULL, OFFSET(mv0_threshold), AV_OPT_TYPE_INT, {.dbl = 256 }, 0, INT_MAX, V|E},
+{"b_sensitivity", "adjusts sensitivity of b_frame_strategy 1", OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.dbl = 40 }, 1, INT_MAX, V|E},
+{"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.dbl = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E},
+{"min_prediction_order", NULL, OFFSET(min_prediction_order), AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX, A|E},
+{"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX, A|E},
+{"timecode_frame_start", "GOP timecode frame start number, in non drop frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.dbl = 0 }, 0, INT64_MAX, V|E},
+#if FF_API_REQUEST_CHANNELS
+{"request_channels", "set desired number of audio channels", OFFSET(request_channels), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, A|D},
+#endif
+{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX},
+{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_INT64, {.dbl = DEFAULT }, 0, INT64_MAX, A|E|D, "channel_layout"},
+{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_INT64, {.dbl = DEFAULT }, 0, INT64_MAX, A|D, "request_channel_layout"},
+{"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 1.0/3 }, 0.0, FLT_MAX, V|E},
+{"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use), AV_OPT_TYPE_FLOAT, {.dbl = 3 }, 0.0, FLT_MAX, V|E},
+{"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.dbl = 1 }, 1, INT_MAX, A|V|E|D},
+{"color_primaries", NULL, OFFSET(color_primaries), AV_OPT_TYPE_INT, {.dbl = AVCOL_PRI_UNSPECIFIED }, 1, AVCOL_PRI_NB-1, V|E|D},
+{"color_trc", NULL, OFFSET(color_trc), AV_OPT_TYPE_INT, {.dbl = AVCOL_TRC_UNSPECIFIED }, 1, AVCOL_TRC_NB-1, V|E|D},
+{"colorspace", NULL, OFFSET(colorspace), AV_OPT_TYPE_INT, {.dbl = AVCOL_SPC_UNSPECIFIED }, 1, AVCOL_SPC_NB-1, V|E|D},
+{"color_range", NULL, OFFSET(color_range), AV_OPT_TYPE_INT, {.dbl = AVCOL_RANGE_UNSPECIFIED }, 0, AVCOL_RANGE_NB-1, V|E|D},
+{"chroma_sample_location", NULL, OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.dbl = AVCHROMA_LOC_UNSPECIFIED }, 0, AVCHROMA_LOC_NB-1, V|E|D},
+{"log_level_offset", "set the log level offset", OFFSET(log_level_offset), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX },
+{"slices", "number of slices, used in parallelized encoding", OFFSET(slices), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, V|E},
+{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.dbl = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|E|D, "thread_type"},
+{"slice", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
+{"frame", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
+{"audio_service_type", "audio service type", OFFSET(audio_service_type), AV_OPT_TYPE_INT, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, "audio_service_type"},
+{"ma", "Main Audio Service", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"ef", "Effects", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_EFFECTS }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"vi", "Visually Impaired", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"hi", "Hearing Impaired", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"di", "Dialogue", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_DIALOGUE }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"co", "Commentary", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_COMMENTARY }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"em", "Emergency", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_EMERGENCY }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"vo", "Voice Over", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_VOICE_OVER }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"ka", "Karaoke", 0, AV_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_KARAOKE }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
+{"request_sample_fmt", "sample format audio decoders should prefer", OFFSET(request_sample_fmt), AV_OPT_TYPE_INT, {.dbl = AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE, AV_SAMPLE_FMT_NB-1, A|D, "request_sample_fmt"},
+{"u8" , "8-bit unsigned integer", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_U8 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
+{"s16", "16-bit signed integer", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_S16 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
+{"s32", "32-bit signed integer", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_S32 }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
+{"flt", "32-bit float", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_FLT }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
+{"dbl", "64-bit double", 0, AV_OPT_TYPE_CONST, {.dbl = AV_SAMPLE_FMT_DBL }, INT_MIN, INT_MAX, A|D, "request_sample_fmt"},
+{NULL},
+};
+
+#undef A
+#undef V
+#undef S
+#undef E
+#undef D
+#undef DEFAULT
+#undef OFFSET
+
+#endif // AVCODEC_OPTIONS_TABLE
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 7e95560f30..e61ace6e75 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1069,8 +1069,15 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
if (fs_tmp)
avctx->frame_size = fs_tmp;
}
- if (!ret)
+ if (!ret) {
+ if (!user_packet && avpkt->data) {
+ uint8_t *new_data = av_realloc(avpkt->data, avpkt->size);
+ if (new_data)
+ avpkt->data = new_data;
+ }
+
avctx->frame_number++;
+ }
if (ret < 0 || !*got_packet_ptr)
av_free_packet(avpkt);
diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
index dab26a6a75..9b12aa8908 100644
--- a/libavcodec/vp8.c
+++ b/libavcodec/vp8.c
@@ -642,7 +642,7 @@ void decode_mb_mode(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, uint8_
if (s->segmentation.update_map) {
int bit = vp56_rac_get_prob(c, s->prob->segmentid[0]);
*segment = vp56_rac_get_prob(c, s->prob->segmentid[1+bit]) + 2*bit;
- } else
+ } else if (s->segmentation.enabled)
*segment = ref ? *ref : *segment;
s->segment = *segment;
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 6fa1216ff1..e49e475e55 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -1332,7 +1332,11 @@ int av_find_best_stream(AVFormatContext *ic,
AVCodec **decoder_ret,
int flags);
+#if FF_API_READ_PACKET
/**
+ * @deprecated use AVFMT_FLAG_NOFILLIN | AVFMT_FLAG_NOPARSE to read raw
+ * unprocessed packets
+ *
* Read a transport packet from a media file.
*
* This function is obsolete and should never be used.
@@ -1342,7 +1346,9 @@ int av_find_best_stream(AVFormatContext *ic,
* @param pkt is filled
* @return 0 if OK, AVERROR_xxx on error
*/
+attribute_deprecated
int av_read_packet(AVFormatContext *s, AVPacket *pkt);
+#endif
/**
* Return the next frame of a stream.
@@ -1539,23 +1545,15 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt);
*/
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
+#if FF_API_INTERLEAVE_PACKET
/**
- * Interleave a packet per dts in an output media file.
- *
- * Packets with pkt->destruct == av_destruct_packet will be freed inside this
- * function, so they cannot be used after it. Note that calling av_free_packet()
- * on them is still safe.
- *
- * @param s media file handle
- * @param out the interleaved packet will be output here
- * @param pkt the input packet
- * @param flush 1 if no further packets are available as input and all
- * remaining packets should be output
- * @return 1 if a packet was output, 0 if no packet could be output,
- * < 0 if an error occurred
+ * @deprecated this function was never meant to be called by the user
+ * programs.
*/
+attribute_deprecated
int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
AVPacket *pkt, int flush);
+#endif
/**
* Write the stream trailer to an output media file and free the
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index efa1bb5daf..9607828e42 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -838,7 +838,7 @@ static int read_gab2_sub(AVStream *st, AVPacket *pkt) {
ast->sub_ctx->pb = pb;
if (!avformat_open_input(&ast->sub_ctx, "", sub_demuxer, NULL)) {
- av_read_packet(ast->sub_ctx, &ast->sub_pkt);
+ ff_read_packet(ast->sub_ctx, &ast->sub_pkt);
*st->codec = *ast->sub_ctx->streams[0]->codec;
ast->sub_ctx->streams[0]->codec->extradata = NULL;
time_base = ast->sub_ctx->streams[0]->time_base;
@@ -880,7 +880,7 @@ static AVStream *get_subtitle_pkt(AVFormatContext *s, AVStream *next_st,
ast = sub_st->priv_data;
*pkt = ast->sub_pkt;
pkt->stream_index = sub_st->index;
- if (av_read_packet(ast->sub_ctx, &ast->sub_pkt) < 0)
+ if (ff_read_packet(ast->sub_ctx, &ast->sub_pkt) < 0)
ast->sub_pkt.data = NULL;
}
return sub_st;
@@ -1364,7 +1364,7 @@ static void seek_subtitle(AVStream *st, AVStream *st2, int64_t timestamp)
av_free_packet(&ast2->sub_pkt);
if (avformat_seek_file(ast2->sub_ctx, 0, INT64_MIN, ts2, ts2, 0) >= 0 ||
avformat_seek_file(ast2->sub_ctx, 0, ts2, ts2, INT64_MAX, 0) >= 0)
- av_read_packet(ast2->sub_ctx, &ast2->sub_pkt);
+ ff_read_packet(ast2->sub_ctx, &ast2->sub_pkt);
}
static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
diff --git a/libavformat/gxfenc.c b/libavformat/gxfenc.c
index ef2fcbe42f..ffffa8bafd 100644
--- a/libavformat/gxfenc.c
+++ b/libavformat/gxfenc.c
@@ -991,7 +991,7 @@ static int gxf_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *pk
if (pkt && s->streams[pkt->stream_index]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
pkt->duration = 2; // enforce 2 fields
return ff_audio_rechunk_interleave(s, out, pkt, flush,
- av_interleave_packet_per_dts, gxf_compare_field_nb);
+ ff_interleave_packet_per_dts, gxf_compare_field_nb);
}
static const AVOption options[] = {
diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c
index f14b13e92f..9ccd6e7b48 100644
--- a/libavformat/id3v2.c
+++ b/libavformat/id3v2.c
@@ -803,6 +803,7 @@ int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta **extra_meta)
st->attached_pic.size = apic->len;
st->attached_pic.destruct = av_destruct_packet;
st->attached_pic.stream_index = st->index;
+ st->attached_pic.flags |= AV_PKT_FLAG_KEY;
apic->data = NULL;
apic->len = 0;
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 8bc34bdb9a..6007ecfead 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -317,4 +317,31 @@ int ff_add_param_change(AVPacket *pkt, int32_t channels,
*/
int ff_framehash_write_header(AVFormatContext *s);
+/**
+ * Read a transport packet from a media file.
+ *
+ * @param s media file handle
+ * @param pkt is filled
+ * @return 0 if OK, AVERROR_xxx on error
+ */
+int ff_read_packet(AVFormatContext *s, AVPacket *pkt);
+
+/**
+ * Interleave a packet per dts in an output media file.
+ *
+ * Packets with pkt->destruct == av_destruct_packet will be freed inside this
+ * function, so they cannot be used after it. Note that calling av_free_packet()
+ * on them is still safe.
+ *
+ * @param s media file handle
+ * @param out the interleaved packet will be output here
+ * @param pkt the input packet
+ * @param flush 1 if no further packets are available as input and all
+ * remaining packets should be output
+ * @return 1 if a packet was output, 0 if no packet could be output,
+ * < 0 if an error occurred
+ */
+int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
+ AVPacket *pkt, int flush);
+
#endif /* AVFORMAT_INTERNAL_H */
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 7f970be35f..0b4ccbf257 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -57,6 +57,7 @@ static const AVOption options[] = {
{ "iods_audio_profile", "iods audio profile atom.", offsetof(MOVMuxContext, iods_audio_profile), AV_OPT_TYPE_INT, {.dbl = -1}, -1, 255, AV_OPT_FLAG_ENCODING_PARAM},
{ "iods_video_profile", "iods video profile atom.", offsetof(MOVMuxContext, iods_video_profile), AV_OPT_TYPE_INT, {.dbl = -1}, -1, 255, AV_OPT_FLAG_ENCODING_PARAM},
{ "frag_duration", "Maximum fragment duration", offsetof(MOVMuxContext, max_fragment_duration), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
+ { "min_frag_duration", "Minimum fragment duration", offsetof(MOVMuxContext, min_fragment_duration), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
{ "frag_size", "Maximum fragment size", offsetof(MOVMuxContext, max_fragment_size), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
{ "ism_lookahead", "Number of lookahead entries for ISM files", offsetof(MOVMuxContext, ism_lookahead), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
{ NULL },
@@ -2893,21 +2894,25 @@ static int mov_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
unsigned int samples_in_chunk = 0;
int size= pkt->size;
uint8_t *reformatted_data = NULL;
+ int64_t frag_duration = 0;
if (!s->pb->seekable && !(mov->flags & FF_MOV_FLAG_EMPTY_MOOV))
return 0; /* Can't handle that */
if (!size) return 0; /* Discard 0 sized packets */
- if ((mov->max_fragment_duration && trk->entry &&
- av_rescale_q(pkt->dts - trk->cluster[0].dts,
- s->streams[pkt->stream_index]->time_base,
- AV_TIME_BASE_Q) >= mov->max_fragment_duration) ||
+ if (trk->entry)
+ frag_duration = av_rescale_q(pkt->dts - trk->cluster[0].dts,
+ s->streams[pkt->stream_index]->time_base,
+ AV_TIME_BASE_Q);
+ if ((mov->max_fragment_duration &&
+ frag_duration >= mov->max_fragment_duration) ||
(mov->max_fragment_size && mov->mdat_size + size >= mov->max_fragment_size) ||
(mov->flags & FF_MOV_FLAG_FRAG_KEYFRAME &&
enc->codec_type == AVMEDIA_TYPE_VIDEO &&
trk->entry && pkt->flags & AV_PKT_FLAG_KEY)) {
- mov_flush_fragment(s);
+ if (frag_duration >= mov->min_fragment_duration)
+ mov_flush_fragment(s);
}
if (mov->flags & FF_MOV_FLAG_FRAGMENT) {
diff --git a/libavformat/movenc.h b/libavformat/movenc.h
index 4cf40f231d..574de824ef 100644
--- a/libavformat/movenc.h
+++ b/libavformat/movenc.h
@@ -154,6 +154,7 @@ typedef struct MOVMuxContext {
int fragments;
int max_fragment_duration;
+ int min_fragment_duration;
int max_fragment_size;
int ism_lookahead;
AVIOContext *mdat_buf;
diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
index 098e076016..0df0149911 100644
--- a/libavformat/mpegenc.c
+++ b/libavformat/mpegenc.c
@@ -318,6 +318,8 @@ static int mpeg_mux_init(AVFormatContext *ctx)
s->packet_size = ctx->packet_size;
} else
s->packet_size = 2048;
+ if (ctx->max_delay < 0) /* Not set by the caller */
+ ctx->max_delay = 0;
s->vcd_padding_bytes_written = 0;
s->vcd_padding_bitrate=0;
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index b0047a216e..c3b3d5d69f 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -491,6 +491,9 @@ static int mpegts_write_header(AVFormatContext *s)
const char *provider_name;
int *pids;
+ if (s->max_delay < 0) /* Not set by the caller */
+ s->max_delay = 0;
+
// round up to a whole number of TS packets
ts->pes_payload_size = (ts->pes_payload_size + 14 + 183) / 184 * 184 - 14;
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index b9d9f575e0..f72fd26c4c 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -28,6 +28,7 @@
#include "libavutil/dict.h"
#include "libavcodec/get_bits.h"
#include "libavcodec/bytestream.h"
+#include "libavcodec/vorbis_parser.h"
#include "avformat.h"
#include "internal.h"
#include "oggdec.h"
@@ -162,6 +163,9 @@ ff_vorbis_comment(AVFormatContext * as, AVDictionary **m, const uint8_t *buf, in
struct oggvorbis_private {
unsigned int len[3];
unsigned char *packet[3];
+ VorbisParseContext vp;
+ int64_t final_pts;
+ int final_duration;
};
@@ -251,7 +255,6 @@ vorbis_header (AVFormatContext * s, int idx)
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
st->codec->codec_id = CODEC_ID_VORBIS;
- st->need_parsing = AVSTREAM_PARSE_HEADERS;
if (srate > 0) {
st->codec->sample_rate = srate;
@@ -269,15 +272,91 @@ vorbis_header (AVFormatContext * s, int idx)
}
}
} else {
+ int ret;
st->codec->extradata_size =
fixup_vorbis_headers(s, priv, &st->codec->extradata);
+ if ((ret = avpriv_vorbis_parse_extradata(st->codec, &priv->vp))) {
+ av_freep(&st->codec->extradata);
+ st->codec->extradata_size = 0;
+ return ret;
+ }
}
return 1;
}
+static int vorbis_packet(AVFormatContext *s, int idx)
+{
+ struct ogg *ogg = s->priv_data;
+ struct ogg_stream *os = ogg->streams + idx;
+ struct oggvorbis_private *priv = os->private;
+ int duration;
+
+ /* first packet handling
+ here we parse the duration of each packet in the first page and compare
+ the total duration to the page granule to find the encoder delay and
+ set the first timestamp */
+ if (!os->lastpts) {
+ int seg;
+ uint8_t *last_pkt = os->buf + os->pstart;
+ uint8_t *next_pkt = last_pkt;
+ int first_duration = 0;
+
+ avpriv_vorbis_parse_reset(&priv->vp);
+ duration = 0;
+ for (seg = 0; seg < os->nsegs; seg++) {
+ if (os->segments[seg] < 255) {
+ int d = avpriv_vorbis_parse_frame(&priv->vp, last_pkt, 1);
+ if (d < 0) {
+ duration = os->granule;
+ break;
+ }
+ if (!duration)
+ first_duration = d;
+ duration += d;
+ last_pkt = next_pkt + os->segments[seg];
+ }
+ next_pkt += os->segments[seg];
+ }
+ os->lastpts = os->lastdts = os->granule - duration;
+ s->streams[idx]->start_time = os->lastpts + first_duration;
+ if (s->streams[idx]->duration)
+ s->streams[idx]->duration -= s->streams[idx]->start_time;
+ s->streams[idx]->cur_dts = AV_NOPTS_VALUE;
+ priv->final_pts = AV_NOPTS_VALUE;
+ avpriv_vorbis_parse_reset(&priv->vp);
+ }
+
+ /* parse packet duration */
+ if (os->psize > 0) {
+ duration = avpriv_vorbis_parse_frame(&priv->vp, os->buf + os->pstart, 1);
+ if (duration <= 0) {
+ os->pflags |= AV_PKT_FLAG_CORRUPT;
+ return 0;
+ }
+ os->pduration = duration;
+ }
+
+ /* final packet handling
+ here we save the pts of the first packet in the final page, sum up all
+ packet durations in the final page except for the last one, and compare
+ to the page granule to find the duration of the final packet */
+ if (os->flags & OGG_FLAG_EOS) {
+ if (os->lastpts != AV_NOPTS_VALUE) {
+ priv->final_pts = os->lastpts;
+ priv->final_duration = 0;
+ }
+ if (os->segp == os->nsegs)
+ os->pduration = os->granule - priv->final_pts - priv->final_duration;
+ priv->final_duration += os->pduration;
+ }
+
+ return 0;
+}
+
const struct ogg_codec ff_vorbis_codec = {
.magic = "\001vorbis",
.magicsize = 7,
- .header = vorbis_header
+ .header = vorbis_header,
+ .packet = vorbis_packet,
};
diff --git a/libavformat/options.c b/libavformat/options.c
index 490c765666..c3056376d2 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -26,6 +26,8 @@
* Options definition for AVFormatContext.
*/
+#include "options_table.h"
+
static const char* format_to_name(void* ptr)
{
AVFormatContext* fc = (AVFormatContext*) ptr;
@@ -74,54 +76,6 @@ static const AVClass *format_child_class_next(const AVClass *prev)
return NULL;
}
-#define OFFSET(x) offsetof(AVFormatContext,x)
-#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
-//these names are too long to be readable
-#define E AV_OPT_FLAG_ENCODING_PARAM
-#define D AV_OPT_FLAG_DECODING_PARAM
-
-static const AVOption options[]={
-{"probesize", "set probing size", OFFSET(probesize), AV_OPT_TYPE_INT, {.dbl = 5000000 }, 32, INT_MAX, D},
-{"packetsize", "set packet size", OFFSET(packet_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, E},
-{"fflags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, INT_MIN, INT_MAX, D|E, "fflags"},
-{"ignidx", "ignore index", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_IGNIDX }, INT_MIN, INT_MAX, D, "fflags"},
-{"genpts", "generate pts", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_GENPTS }, INT_MIN, INT_MAX, D, "fflags"},
-{"nofillin", "do not fill in missing values that can be exactly calculated", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_NOFILLIN }, INT_MIN, INT_MAX, D, "fflags"},
-{"noparse", "disable AVParsers, this needs nofillin too", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_NOPARSE }, INT_MIN, INT_MAX, D, "fflags"},
-{"igndts", "ignore dts", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_IGNDTS }, INT_MIN, INT_MAX, D, "fflags"},
-{"discardcorrupt", "discard corrupted frames", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_DISCARD_CORRUPT }, INT_MIN, INT_MAX, D, "fflags"},
-{"sortdts", "try to interleave outputted packets by dts", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"},
-{"keepside", "dont merge side data", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"},
-{"latm", "enable RTP MP4A-LATM payload", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},
-{"analyzeduration", "how many microseconds are analyzed to estimate duration", OFFSET(max_analyze_duration), AV_OPT_TYPE_INT, {.dbl = 5*AV_TIME_BASE }, 0, INT_MAX, D},
-{"cryptokey", "decryption key", OFFSET(key), AV_OPT_TYPE_BINARY, {.dbl = 0}, 0, 0, D},
-{"indexmem", "max memory used for timestamp index (per stream)", OFFSET(max_index_size), AV_OPT_TYPE_INT, {.dbl = 1<<20 }, 0, INT_MAX, D},
-{"rtbufsize", "max memory used for buffering real-time frames", OFFSET(max_picture_buffer), AV_OPT_TYPE_INT, {.dbl = 3041280 }, 0, INT_MAX, D}, /* defaults to 1s of 15fps 352x288 YUYV422 video */
-{"fdebug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, INT_MAX, E|D, "fdebug"},
-{"ts", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_FDEBUG_TS }, INT_MIN, INT_MAX, E|D, "fdebug"},
-{"max_delay", "maximum muxing or demuxing delay in microseconds", OFFSET(max_delay), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, E|D},
-{"fpsprobesize", "number of frames used to probe fps", OFFSET(fps_probe_size), AV_OPT_TYPE_INT, {.dbl = -1}, -1, INT_MAX-1, D},
-{"audio_preload", "microseconds by which audio packets should be interleaved earlier", OFFSET(audio_preload), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX-1, E},
-{"chunk_duration", "microseconds for each chunk", OFFSET(max_chunk_duration), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX-1, E},
-{"chunk_size", "size in bytes for each chunk", OFFSET(max_chunk_size), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX-1, E},
-/* this is a crutch for avconv, since it cannot deal with identically named options in different contexts.
- * to be removed when avconv is fixed */
-{"f_err_detect", "set error detection flags (deprecated; use err_detect, save via avconv)", OFFSET(error_recognition), AV_OPT_TYPE_FLAGS, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, D, "err_detect"},
-{"err_detect", "set error detection flags", OFFSET(error_recognition), AV_OPT_TYPE_FLAGS, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, D, "err_detect"},
-{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, D, "err_detect"},
-{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, D, "err_detect"},
-{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BUFFER }, INT_MIN, INT_MAX, D, "err_detect"},
-{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_EXPLODE }, INT_MIN, INT_MAX, D, "err_detect"},
-{"careful", "consider things that violate the spec and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CAREFUL }, INT_MIN, INT_MAX, D, "err_detect"},
-{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, D, "err_detect"},
-{"aggressive", "consider things that a sane encoder shouldnt do as an error", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, D, "err_detect"},
-{NULL},
-};
-
-#undef E
-#undef D
-#undef DEFAULT
-
static const AVClass av_format_context_class = {
.class_name = "AVFormatContext",
.item_name = format_to_name,
diff --git a/libavformat/options_table.h b/libavformat/options_table.h
new file mode 100644
index 0000000000..0313839046
--- /dev/null
+++ b/libavformat/options_table.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVFORMAT_OPTIONS_TABLE
+#define AVFORMAT_OPTIONS_TABLE
+
+#define OFFSET(x) offsetof(AVFormatContext,x)
+#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C
+//these names are too long to be readable
+#define E AV_OPT_FLAG_ENCODING_PARAM
+#define D AV_OPT_FLAG_DECODING_PARAM
+
+static const AVOption options[]={
+{"probesize", "set probing size", OFFSET(probesize), AV_OPT_TYPE_INT, {.dbl = 5000000 }, 32, INT_MAX, D},
+{"packetsize", "set packet size", OFFSET(packet_size), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, E},
+{"fflags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, INT_MIN, INT_MAX, D|E, "fflags"},
+{"ignidx", "ignore index", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_IGNIDX }, INT_MIN, INT_MAX, D, "fflags"},
+{"genpts", "generate pts", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_GENPTS }, INT_MIN, INT_MAX, D, "fflags"},
+{"nofillin", "do not fill in missing values that can be exactly calculated", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_NOFILLIN }, INT_MIN, INT_MAX, D, "fflags"},
+{"noparse", "disable AVParsers, this needs nofillin too", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_NOPARSE }, INT_MIN, INT_MAX, D, "fflags"},
+{"igndts", "ignore dts", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_IGNDTS }, INT_MIN, INT_MAX, D, "fflags"},
+{"discardcorrupt", "discard corrupted frames", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_DISCARD_CORRUPT }, INT_MIN, INT_MAX, D, "fflags"},
+{"sortdts", "try to interleave outputted packets by dts", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"},
+{"keepside", "dont merge side data", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"},
+{"latm", "enable RTP MP4A-LATM payload", 0, AV_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},
+{"analyzeduration", "how many microseconds are analyzed to estimate duration", OFFSET(max_analyze_duration), AV_OPT_TYPE_INT, {.dbl = 5*AV_TIME_BASE }, 0, INT_MAX, D},
+{"cryptokey", "decryption key", OFFSET(key), AV_OPT_TYPE_BINARY, {.dbl = 0}, 0, 0, D},
+{"indexmem", "max memory used for timestamp index (per stream)", OFFSET(max_index_size), AV_OPT_TYPE_INT, {.dbl = 1<<20 }, 0, INT_MAX, D},
+{"rtbufsize", "max memory used for buffering real-time frames", OFFSET(max_picture_buffer), AV_OPT_TYPE_INT, {.dbl = 3041280 }, 0, INT_MAX, D}, /* defaults to 1s of 15fps 352x288 YUYV422 video */
+{"fdebug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, INT_MAX, E|D, "fdebug"},
+{"ts", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_FDEBUG_TS }, INT_MIN, INT_MAX, E|D, "fdebug"},
+{"max_delay", "maximum muxing or demuxing delay in microseconds", OFFSET(max_delay), AV_OPT_TYPE_INT, {.dbl = -1 }, -1, INT_MAX, E|D},
+{"fpsprobesize", "number of frames used to probe fps", OFFSET(fps_probe_size), AV_OPT_TYPE_INT, {.dbl = -1}, -1, INT_MAX-1, D},
+{"audio_preload", "microseconds by which audio packets should be interleaved earlier", OFFSET(audio_preload), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX-1, E},
+{"chunk_duration", "microseconds for each chunk", OFFSET(max_chunk_duration), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX-1, E},
+{"chunk_size", "size in bytes for each chunk", OFFSET(max_chunk_size), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX-1, E},
+/* this is a crutch for avconv, since it cannot deal with identically named options in different contexts.
+ * to be removed when avconv is fixed */
+{"f_err_detect", "set error detection flags (deprecated; use err_detect, save via avconv)", OFFSET(error_recognition), AV_OPT_TYPE_FLAGS, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, D, "err_detect"},
+{"err_detect", "set error detection flags", OFFSET(error_recognition), AV_OPT_TYPE_FLAGS, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, D, "err_detect"},
+{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, D, "err_detect"},
+{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, D, "err_detect"},
+{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_BUFFER }, INT_MIN, INT_MAX, D, "err_detect"},
+{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_EXPLODE }, INT_MIN, INT_MAX, D, "err_detect"},
+{"careful", "consider things that violate the spec and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CAREFUL }, INT_MIN, INT_MAX, D, "err_detect"},
+{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, D, "err_detect"},
+{"aggressive", "consider things that a sane encoder shouldnt do as an error", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, D, "err_detect"},
+{NULL},
+};
+
+#undef E
+#undef D
+#undef DEFAULT
+#undef OFFSET
+
+#endif // AVFORMAT_OPTIONS_TABLE
diff --git a/libavformat/rtpdec_asf.c b/libavformat/rtpdec_asf.c
index e6586b036a..53c2bcef71 100644
--- a/libavformat/rtpdec_asf.c
+++ b/libavformat/rtpdec_asf.c
@@ -256,7 +256,7 @@ static int asfrtp_parse_packet(AVFormatContext *s, PayloadContext *asf,
for (;;) {
int i;
- res = av_read_packet(rt->asf_ctx, pkt);
+ res = ff_read_packet(rt->asf_ctx, pkt);
rt->asf_pb_pos = avio_tell(pb);
if (res != 0)
break;
diff --git a/libavformat/rtpenc.c b/libavformat/rtpenc.c
index 49da08b4e1..d7b6b3f124 100644
--- a/libavformat/rtpenc.c
+++ b/libavformat/rtpenc.c
@@ -126,7 +126,7 @@ static int rtp_write_header(AVFormatContext *s1)
s->max_payload_size = s1->packet_size - 12;
s->max_frames_per_packet = 0;
- if (s1->max_delay) {
+ if (s1->max_delay > 0) {
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
int frame_size = av_get_audio_frame_duration(st->codec, 0);
if (!frame_size)
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index dd3f9226db..a6cfd3af4a 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -56,6 +56,7 @@
#define MAX_TIMEOUTS READ_PACKET_TIMEOUT_S * 1000 / POLL_TIMEOUT_MS
#define SDP_MAX_SIZE 16384
#define RECVBUF_SIZE 10 * RTP_MAX_PACKET_LENGTH
+#define DEFAULT_REORDERING_DELAY 100000
#define OFFSET(x) offsetof(RTSPState, x)
#define DEC AV_OPT_FLAG_DECODING_PARAM
@@ -1421,6 +1422,9 @@ int ff_rtsp_connect(AVFormatContext *s)
if (!ff_network_init())
return AVERROR(EIO);
+ if (s->max_delay < 0) /* Not set by the caller */
+ s->max_delay = s->iformat ? DEFAULT_REORDERING_DELAY : 0;
+
rt->control_transport = RTSP_MODE_PLAIN;
if (rt->lower_transport_mask & (1 << RTSP_LOWER_TRANSPORT_HTTP)) {
rt->lower_transport_mask = 1 << RTSP_LOWER_TRANSPORT_TCP;
@@ -1861,6 +1865,9 @@ static int sdp_read_header(AVFormatContext *s)
if (!ff_network_init())
return AVERROR(EIO);
+ if (s->max_delay < 0) /* Not set by the caller */
+ s->max_delay = DEFAULT_REORDERING_DELAY;
+
/* read the whole sdp file */
/* XXX: better loading */
content = av_malloc(SDP_MAX_SIZE);
diff --git a/libavformat/utils.c b/libavformat/utils.c
index fd973a8330..2921e85c8f 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -568,10 +568,22 @@ static AVPacket *add_to_pktbuf(AVPacketList **packet_buffer, AVPacket *pkt,
return &pktl->pkt;
}
+static void queue_attached_pictures(AVFormatContext *s)
+{
+ int i;
+ for (i = 0; i < s->nb_streams; i++)
+ if (s->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC &&
+ s->streams[i]->discard < AVDISCARD_ALL) {
+ AVPacket copy = s->streams[i]->attached_pic;
+ copy.destruct = NULL;
+ add_to_pktbuf(&s->raw_packet_buffer, &copy, &s->raw_packet_buffer_end);
+ }
+}
+
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
{
AVFormatContext *s = *ps;
- int i, ret = 0;
+ int ret = 0;
AVDictionary *tmp = NULL;
ID3v2ExtraMeta *id3v2_extra_meta = NULL;
@@ -627,13 +639,7 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputForma
goto fail;
ff_id3v2_free_extra_meta(&id3v2_extra_meta);
- /* queue attached pictures */
- for (i = 0; i < s->nb_streams; i++)
- if (s->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) {
- AVPacket copy = s->streams[i]->attached_pic;
- copy.destruct = NULL;
- add_to_pktbuf(&s->raw_packet_buffer, &copy, &s->raw_packet_buffer_end);
- }
+ queue_attached_pictures(s);
if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->pb && !s->data_offset)
s->data_offset = avio_tell(s->pb);
@@ -659,7 +665,7 @@ fail:
/*******************************************************/
-int av_read_packet(AVFormatContext *s, AVPacket *pkt)
+int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
{
int ret, i;
AVStream *st;
@@ -756,6 +762,14 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
}
}
+#if FF_API_READ_PACKET
+int av_read_packet(AVFormatContext *s, AVPacket *pkt)
+{
+ return ff_read_packet(s, pkt);
+}
+#endif
+
+
/**********************************************************/
static int determinable_frame_size(AVCodecContext *avctx)
@@ -1228,7 +1242,7 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
AVPacket cur_pkt;
/* read next packet */
- ret = av_read_packet(s, &cur_pkt);
+ ret = ff_read_packet(s, &cur_pkt);
if (ret < 0) {
if (ret == AVERROR(EAGAIN))
return ret;
@@ -1255,7 +1269,7 @@ static int read_frame_internal(AVFormatContext *s, AVPacket *pkt)
cur_pkt.size);
}
if (s->debug & FF_FDEBUG_TS)
- av_log(s, AV_LOG_DEBUG, "av_read_packet stream=%d, pts=%"PRId64", dts=%"PRId64", size=%d, duration=%d, flags=%d\n",
+ av_log(s, AV_LOG_DEBUG, "ff_read_packet stream=%d, pts=%"PRId64", dts=%"PRId64", size=%d, duration=%d, flags=%d\n",
cur_pkt.stream_index,
cur_pkt.pts,
cur_pkt.dts,
@@ -1827,7 +1841,8 @@ static int seek_frame_generic(AVFormatContext *s,
return 0;
}
-int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
+static int seek_frame_internal(AVFormatContext *s, int stream_index,
+ int64_t timestamp, int flags)
{
int ret;
AVStream *st;
@@ -1872,14 +1887,29 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int f
return -1;
}
+int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
+{
+ int ret = seek_frame_internal(s, stream_index, timestamp, flags);
+
+ if (ret >= 0)
+ queue_attached_pictures(s);
+
+ return ret;
+}
+
int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
{
if(min_ts > ts || max_ts < ts)
return -1;
if (s->iformat->read_seek2) {
+ int ret;
ff_read_frame_flush(s);
- return s->iformat->read_seek2(s, stream_index, min_ts, ts, max_ts, flags);
+ ret = s->iformat->read_seek2(s, stream_index, min_ts, ts, max_ts, flags);
+
+ if (ret >= 0)
+ queue_attached_pictures(s);
+ return ret;
}
if(s->iformat->read_timestamp){
@@ -2071,7 +2101,7 @@ static void estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
break;
do {
- ret = av_read_packet(ic, pkt);
+ ret = ff_read_packet(ic, pkt);
} while(ret == AVERROR(EAGAIN));
if (ret != 0)
break;
@@ -3354,7 +3384,9 @@ static int ff_interleave_compare_dts(AVFormatContext *s, AVPacket *next, AVPacke
return comp > 0;
}
-int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush){
+int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
+ AVPacket *pkt, int flush)
+{
AVPacketList *pktl;
int stream_count=0, noninterleaved_count=0;
int64_t delta_dts_max = 0;
@@ -3413,6 +3445,14 @@ int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pk
}
}
+#if FF_API_INTERLEAVE_PACKET
+int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
+ AVPacket *pkt, int flush)
+{
+ return ff_interleave_packet_per_dts(s, out, pkt, flush);
+}
+#endif
+
/**
* Interleave an AVPacket correctly so it can be muxed.
* @param out the interleaved packet will be output here
@@ -3429,7 +3469,7 @@ static int interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *in, in
av_free_packet(in);
return ret;
} else
- return av_interleave_packet_per_dts(s, out, in, flush);
+ return ff_interleave_packet_per_dts(s, out, in, flush);
}
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){
diff --git a/libavformat/version.h b/libavformat/version.h
index 0dc68152c3..5969f92fa7 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -71,5 +71,11 @@
#ifndef FF_API_APPLEHTTP_PROTO
#define FF_API_APPLEHTTP_PROTO (LIBAVFORMAT_VERSION_MAJOR < 55)
#endif
+#ifndef FF_API_READ_PACKET
+#define FF_API_READ_PACKET (LIBAVFORMAT_VERSION_MAJOR < 55)
+#endif
+#ifndef FF_API_INTERLEAVE_PACKET
+#define FF_API_INTERLEAVE_PACKET (LIBAVFORMAT_VERSION_MAJOR < 55)
+#endif
#endif /* AVFORMAT_VERSION_H */
diff --git a/libavformat/xa.c b/libavformat/xa.c
index 1e51eec934..c54d7f8b9c 100644
--- a/libavformat/xa.c
+++ b/libavformat/xa.c
@@ -38,7 +38,6 @@
typedef struct MaxisXADemuxContext {
uint32_t out_size;
uint32_t sent_bytes;
- uint32_t audio_frame_counter;
} MaxisXADemuxContext;
static int xa_probe(AVProbeData *p)
@@ -81,12 +80,15 @@ static int xa_read_header(AVFormatContext *s)
avio_skip(pb, 2); /* Skip the tag */
st->codec->channels = avio_rl16(pb);
st->codec->sample_rate = avio_rl32(pb);
- /* Value in file is average byte rate*/
- st->codec->bit_rate = avio_rl32(pb) * 8;
- st->codec->block_align = avio_rl16(pb);
- st->codec->bits_per_coded_sample = avio_rl16(pb);
+ avio_skip(pb, 4); /* Skip average byte rate */
+ avio_skip(pb, 2); /* Skip block align */
+ avio_skip(pb, 2); /* Skip bits-per-sample */
+
+ st->codec->bit_rate = av_clip(15LL * st->codec->channels * 8 *
+ st->codec->sample_rate / 28, 0, INT_MAX);
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate);
+ st->start_time = 0;
return 0;
}
@@ -100,8 +102,8 @@ static int xa_read_packet(AVFormatContext *s,
unsigned int packet_size;
int ret;
- if(xa->sent_bytes > xa->out_size)
- return AVERROR(EIO);
+ if (xa->sent_bytes >= xa->out_size)
+ return AVERROR_EOF;
/* 1 byte header and 14 bytes worth of samples * number channels per block */
packet_size = 15*st->codec->channels;
@@ -111,9 +113,7 @@ static int xa_read_packet(AVFormatContext *s,
pkt->stream_index = st->index;
xa->sent_bytes += packet_size;
- pkt->pts = xa->audio_frame_counter;
- /* 14 bytes Samples per channel with 2 samples per byte */
- xa->audio_frame_counter += 28 * st->codec->channels;
+ pkt->duration = 28;
return ret;
}
diff --git a/tests/fate/adpcm.mak b/tests/fate/adpcm.mak
index 202f0b2be0..5e41d6e18f 100644
--- a/tests/fate/adpcm.mak
+++ b/tests/fate/adpcm.mak
@@ -19,6 +19,9 @@ fate-adpcm-creative-8-4bit: CMD = md5 -i $(SAMPLES)/creative/BBC_4BIT.VOC -f s16
FATE_ADPCM += fate-adpcm-ea-mad-ea-r1
fate-adpcm-ea-mad-ea-r1: CMD = framecrc -i $(SAMPLES)/ea-mad/NFS6LogoE.mad
+FATE_ADPCM += fate-adpcm-ea-maxis-xa
+fate-adpcm-ea-maxis-xa: CMD = framecrc -i $(SAMPLES)/maxis-xa/SC2KBUG.XA -frames:a 30
+
FATE_ADPCM += fate-adpcm-ea-tqi
fate-adpcm-ea-tqi: CMD = framecrc -i $(SAMPLES)/ea-wve/networkBackbone-partial.wve -frames:v 26
diff --git a/tests/fate/demux.mak b/tests/fate/demux.mak
index 4e8793b4d9..5e5c8e14fc 100644
--- a/tests/fate/demux.mak
+++ b/tests/fate/demux.mak
@@ -38,7 +38,7 @@ FATE_DEMUX += fate-lmlm4-demux
fate-lmlm4-demux: CMD = framecrc -i $(SAMPLES)/lmlm4/LMLM4_CIFat30fps.divx -t 3 -acodec copy -vcodec copy
FATE_DEMUX += fate-maxis-xa
-fate-maxis-xa: CMD = md5 -i $(SAMPLES)/maxis-xa/SC2KBUG.XA -f s16le
+fate-maxis-xa: CMD = framecrc -i $(SAMPLES)/maxis-xa/SC2KBUG.XA -frames:a 30 -c:a copy
FATE_DEMUX += fate-mtv
fate-mtv: CMD = framecrc -i $(SAMPLES)/mtv/comedian_auto-partial.mtv -acodec copy -pix_fmt rgb24
diff --git a/tests/fate/vpx.mak b/tests/fate/vpx.mak
index f6823651f5..1560fe9d68 100644
--- a/tests/fate/vpx.mak
+++ b/tests/fate/vpx.mak
@@ -41,6 +41,6 @@ fate-vp8-sign-bias$(1): REF = $(SRC_PATH)/tests/ref/fate/vp8-sign-bias
endef
$(eval $(call FATE_VP8_FULL))
-$(eval $(call FATE_VP8_FULL,-emu-edge,-flags emu_edge))
+$(eval $(call FATE_VP8_FULL,-emu-edge,-flags +emu_edge))
FATE_TESTS += $(FATE_VP8)
fate-vp8: $(FATE_VP8)
diff --git a/tests/ref/fate/adpcm-ea-maxis-xa b/tests/ref/fate/adpcm-ea-maxis-xa
new file mode 100644
index 0000000000..5d6b5c07dc
--- /dev/null
+++ b/tests/ref/fate/adpcm-ea-maxis-xa
@@ -0,0 +1,31 @@
+#tb 0: 1/22050
+0, 0, 0, 28, 112, 0x291d1be4
+0, 28, 28, 28, 112, 0xf08d33cc
+0, 56, 56, 28, 112, 0x5b1521de
+0, 84, 84, 28, 112, 0x57d209f6
+0, 112, 112, 28, 112, 0x00000000
+0, 140, 140, 28, 112, 0xa15e03fc
+0, 168, 168, 28, 112, 0x73a80bf4
+0, 196, 196, 28, 112, 0x916e03fc
+0, 224, 224, 28, 112, 0xd92603fc
+0, 252, 252, 28, 112, 0x097523dc
+0, 280, 280, 28, 112, 0xf7be45ba
+0, 308, 308, 28, 112, 0x0fed4db2
+0, 336, 336, 28, 112, 0x9fb41be4
+0, 364, 364, 28, 112, 0x819a0ff0
+0, 392, 392, 28, 112, 0xfe7f3fc0
+0, 420, 420, 28, 112, 0x281e1de2
+0, 448, 448, 28, 112, 0xa76605fa
+0, 476, 476, 28, 112, 0x00000000
+0, 504, 504, 28, 112, 0xb84705fa
+0, 532, 532, 28, 112, 0xdb5c0ff0
+0, 560, 560, 28, 112, 0xbc4305fa
+0, 588, 588, 28, 112, 0x7c8305fa
+0, 616, 616, 28, 112, 0x54ff21de
+0, 644, 644, 28, 112, 0xc6c535ca
+0, 672, 672, 28, 112, 0xa4123dc2
+0, 700, 700, 28, 112, 0x196523dc
+0, 728, 728, 28, 112, 0x80ef25da
+0, 756, 756, 28, 112, 0xdf742bd4
+0, 784, 784, 28, 112, 0xd78a21de
+0, 812, 812, 28, 112, 0x191f0df2
diff --git a/tests/ref/fate/amv b/tests/ref/fate/amv
index 405c4dfbdc..768ddaf330 100644
--- a/tests/ref/fate/amv
+++ b/tests/ref/fate/amv
@@ -11,312 +11,312 @@
1, 5512, 5512, 1380, 2760, 0x51f35cd4
0, 4, 4, 1, 28800, 0x735a6b15
0, 5, 5, 1, 28800, 0xf7e9dc8b
-1, 6892, 6892, 1378, 2756, 0x011c51e5
+1, 6891, 6891, 1378, 2756, 0x011c51e5
0, 6, 6, 1, 28800, 0xa108b0cf
-1, 8270, 8270, 1378, 2756, 0x8c2c198c
+1, 8269, 8269, 1378, 2756, 0x8c2c198c
0, 7, 7, 1, 28800, 0x3d11c138
-1, 9648, 9648, 1378, 2756, 0x2b4a3397
+1, 9647, 9647, 1378, 2756, 0x2b4a3397
0, 8, 8, 1, 28800, 0xed23afda
-1, 11026, 11026, 1378, 2756, 0x63794f22
+1, 11025, 11025, 1378, 2756, 0x63794f22
+1, 12403, 12403, 1378, 2756, 0xfc363898
0, 9, 9, 1, 28800, 0x713bb2dc
-1, 12404, 12404, 1378, 2756, 0xfc363898
+1, 13781, 13781, 1378, 2756, 0x0da5486e
0, 10, 10, 1, 28800, 0x551ad51e
-1, 13782, 13782, 1378, 2756, 0x0da5486e
+1, 15159, 15159, 1378, 2756, 0xbae17a5f
0, 11, 11, 1, 28800, 0x49dfcf2d
-1, 15160, 15160, 1378, 2756, 0xbae17a5f
0, 12, 12, 1, 28800, 0x6399d5b3
1, 16538, 16538, 1380, 2760, 0xba266e1b
0, 13, 13, 1, 28800, 0x520ad812
-1, 17918, 17918, 1378, 2756, 0xdfb61002
+1, 17916, 17916, 1378, 2756, 0xdfb61002
0, 14, 14, 1, 28800, 0xc46ad9da
-1, 19296, 19296, 1378, 2756, 0x15d029da
+1, 19294, 19294, 1378, 2756, 0x15d029da
0, 15, 15, 1, 28800, 0xe79edb9e
-1, 20674, 20674, 1378, 2756, 0x7bc82012
+1, 20672, 20672, 1378, 2756, 0x7bc82012
0, 16, 16, 1, 28800, 0xdb1acb30
-1, 22052, 22052, 1378, 2756, 0x002e6999
+1, 22050, 22050, 1378, 2756, 0x002e6999
+1, 23428, 23428, 1378, 2756, 0x96346ba6
0, 17, 17, 1, 28800, 0x050fb669
-1, 23430, 23430, 1378, 2756, 0x96346ba6
+1, 24806, 24806, 1378, 2756, 0x3d54543b
0, 18, 18, 1, 28800, 0x096ca687
-1, 24808, 24808, 1378, 2756, 0x3d54543b
+1, 26184, 26184, 1380, 2760, 0x601786e1
0, 19, 19, 1, 28800, 0x0054a6bd
-1, 26186, 26186, 1380, 2760, 0x601786e1
+1, 27562, 27562, 1378, 2756, 0xf22a5793
0, 20, 20, 1, 28800, 0x6d7daad2
-1, 27566, 27566, 1378, 2756, 0xf22a5793
0, 21, 21, 1, 28800, 0x9c10a9dc
-1, 28944, 28944, 1378, 2756, 0x21f54d49
+1, 28941, 28941, 1378, 2756, 0x21f54d49
0, 22, 22, 1, 28800, 0x89b1a623
-1, 30322, 30322, 1378, 2756, 0x0c6d4399
+1, 30319, 30319, 1378, 2756, 0x0c6d4399
0, 23, 23, 1, 28800, 0xa0a19c3f
-1, 31700, 31700, 1378, 2756, 0x17282f8e
+1, 31697, 31697, 1378, 2756, 0x17282f8e
0, 24, 24, 1, 28800, 0x26c898ad
-1, 33078, 33078, 1378, 2756, 0xeb698f75
+1, 33075, 33075, 1378, 2756, 0xeb698f75
+1, 34453, 34453, 1378, 2756, 0x935e1de2
0, 25, 25, 1, 28800, 0x6f639dae
-1, 34456, 34456, 1378, 2756, 0x935e1de2
+1, 35831, 35831, 1380, 2760, 0xb6fb4293
0, 26, 26, 1, 28800, 0xa173a9b5
-1, 35834, 35834, 1380, 2760, 0xb6fb4293
+1, 37209, 37209, 1378, 2756, 0x485053dc
0, 27, 27, 1, 28800, 0xa309aa08
-1, 37214, 37214, 1378, 2756, 0x485053dc
0, 28, 28, 1, 28800, 0x2059b6c4
-1, 38592, 38592, 1378, 2756, 0x24c35027
+1, 38588, 38588, 1378, 2756, 0x24c35027
0, 29, 29, 1, 28800, 0x5ae8c761
-1, 39970, 39970, 1378, 2756, 0x09f323ee
+1, 39966, 39966, 1378, 2756, 0x09f323ee
0, 30, 30, 1, 28800, 0xb780c9c5
-1, 41348, 41348, 1378, 2756, 0xbc7d58d5
+1, 41344, 41344, 1378, 2756, 0xbc7d58d5
0, 31, 31, 1, 28800, 0xf58ac8fe
-1, 42726, 42726, 1378, 2756, 0xaefd487c
+1, 42722, 42722, 1378, 2756, 0xaefd487c
0, 32, 32, 1, 28800, 0x9bb307e7
-1, 44104, 44104, 1378, 2756, 0xaca16cc0
+1, 44100, 44100, 1378, 2756, 0xaca16cc0
+1, 45478, 45478, 1380, 2760, 0x98a76091
0, 33, 33, 1, 28800, 0xd32c3e81
-1, 45482, 45482, 1380, 2760, 0x98a76091
+1, 46856, 46856, 1378, 2756, 0x5d357141
0, 34, 34, 1, 28800, 0x4edd51d2
-1, 46862, 46862, 1378, 2756, 0x5d357141
+1, 48234, 48234, 1378, 2756, 0x65ea2657
0, 35, 35, 1, 28800, 0x5a88684d
-1, 48240, 48240, 1378, 2756, 0x65ea2657
+1, 49612, 49612, 1378, 2756, 0xb5e1334a
0, 36, 36, 1, 28800, 0x5bd97f0e
-1, 49618, 49618, 1378, 2756, 0xb5e1334a
0, 37, 37, 1, 28800, 0x36d67843
-1, 50996, 50996, 1378, 2756, 0x32cd5d91
+1, 50991, 50991, 1378, 2756, 0x32cd5d91
0, 38, 38, 1, 28800, 0x0e18781d
-1, 52374, 52374, 1378, 2756, 0xdc23722b
+1, 52369, 52369, 1378, 2756, 0xdc23722b
0, 39, 39, 1, 28800, 0xa3168807
-1, 53752, 53752, 1378, 2756, 0x2ba34684
+1, 53747, 53747, 1378, 2756, 0x2ba34684
0, 40, 40, 1, 28800, 0xa7c575b8
-1, 55130, 55130, 1378, 2756, 0xf9755ba8
+1, 55125, 55125, 1378, 2756, 0xf9755ba8
+1, 56503, 56503, 1380, 2760, 0x24221ddb
0, 41, 41, 1, 28800, 0x86367c37
-1, 56508, 56508, 1380, 2760, 0x24221ddb
+1, 57881, 57881, 1378, 2756, 0xef843aa4
0, 42, 42, 1, 28800, 0xb0f79180
-1, 57888, 57888, 1378, 2756, 0xef843aa4
+1, 59259, 59259, 1378, 2756, 0x420442fe
0, 43, 43, 1, 28800, 0x61da8c0f
-1, 59266, 59266, 1378, 2756, 0x420442fe
0, 44, 44, 1, 28800, 0x9b11948a
-1, 60644, 60644, 1378, 2756, 0x5a0933cb
+1, 60638, 60638, 1378, 2756, 0x5a0933cb
0, 45, 45, 1, 28800, 0xc53d9b44
-1, 62022, 62022, 1378, 2756, 0xef5f6d61
+1, 62016, 62016, 1378, 2756, 0xef5f6d61
0, 46, 46, 1, 28800, 0xdc699185
-1, 63400, 63400, 1378, 2756, 0xe57e6dc0
+1, 63394, 63394, 1378, 2756, 0xe57e6dc0
0, 47, 47, 1, 28800, 0x7b4f92b5
-1, 64778, 64778, 1378, 2756, 0xc0f0495a
+1, 64772, 64772, 1378, 2756, 0xc0f0495a
0, 48, 48, 1, 28800, 0x40469065
-1, 66156, 66156, 1380, 2760, 0x2c3b55df
+1, 66150, 66150, 1380, 2760, 0x2c3b55df
+1, 67528, 67528, 1378, 2756, 0x39c2586c
0, 49, 49, 1, 28800, 0x737ea07e
-1, 67536, 67536, 1378, 2756, 0x39c2586c
+1, 68906, 68906, 1378, 2756, 0x7ffc46e5
0, 50, 50, 1, 28800, 0x0db49c8b
-1, 68914, 68914, 1378, 2756, 0x7ffc46e5
+1, 70284, 70284, 1378, 2756, 0xa2766664
0, 51, 51, 1, 28800, 0x39249f10
-1, 70292, 70292, 1378, 2756, 0xa2766664
+1, 71662, 71662, 1378, 2756, 0xacb50c6c
0, 52, 52, 1, 28800, 0xc182ab99
-1, 71670, 71670, 1378, 2756, 0xacb50c6c
0, 53, 53, 1, 28800, 0xd8f7a7c9
-1, 73048, 73048, 1378, 2756, 0x7f659084
+1, 73041, 73041, 1378, 2756, 0x7f659084
0, 54, 54, 1, 28800, 0x46789caa
-1, 74426, 74426, 1378, 2756, 0xc72e6a12
+1, 74419, 74419, 1378, 2756, 0xc72e6a12
0, 55, 55, 1, 28800, 0x4759a374
-1, 75804, 75804, 1380, 2760, 0xdb6944df
+1, 75797, 75797, 1380, 2760, 0xdb6944df
0, 56, 56, 1, 28800, 0xe621b16a
-1, 77184, 77184, 1378, 2756, 0x954f45c1
+1, 77175, 77175, 1378, 2756, 0x954f45c1
+1, 78553, 78553, 1378, 2756, 0xa9484240
0, 57, 57, 1, 28800, 0xcf47a999
-1, 78562, 78562, 1378, 2756, 0xa9484240
+1, 79931, 79931, 1378, 2756, 0x1d595349
0, 58, 58, 1, 28800, 0x801dacd4
-1, 79940, 79940, 1378, 2756, 0x1d595349
+1, 81309, 81309, 1378, 2756, 0xcf2a565e
0, 59, 59, 1, 28800, 0xe580af51
-1, 81318, 81318, 1378, 2756, 0xcf2a565e
0, 60, 60, 1, 28800, 0x03d7a887
-1, 82696, 82696, 1378, 2756, 0x391028d5
+1, 82688, 82688, 1378, 2756, 0x391028d5
0, 61, 61, 1, 28800, 0xa67ea51d
-1, 84074, 84074, 1378, 2756, 0x348db7ad
+1, 84066, 84066, 1378, 2756, 0x348db7ad
0, 62, 62, 1, 28800, 0x9fee0ec8
-1, 85452, 85452, 1380, 2760, 0xb69b5e3a
+1, 85444, 85444, 1380, 2760, 0xb69b5e3a
0, 63, 63, 1, 28800, 0x7f602a5e
-1, 86832, 86832, 1378, 2756, 0xe3635fbe
+1, 86822, 86822, 1378, 2756, 0xe3635fbe
0, 64, 64, 1, 28800, 0x100d432a
-1, 88210, 88210, 1378, 2756, 0xdcad3654
+1, 88200, 88200, 1378, 2756, 0xdcad3654
+1, 89578, 89578, 1378, 2756, 0x5c17abef
0, 65, 65, 1, 28800, 0x42164dfb
-1, 89588, 89588, 1378, 2756, 0x5c17abef
+1, 90956, 90956, 1378, 2756, 0xb3235184
0, 66, 66, 1, 28800, 0x86c05196
-1, 90966, 90966, 1378, 2756, 0xb3235184
+1, 92334, 92334, 1378, 2756, 0xdabb64a6
0, 67, 67, 1, 28800, 0xfc225938
-1, 92344, 92344, 1378, 2756, 0xdabb64a6
+1, 93712, 93712, 1378, 2756, 0xa95dc58d
0, 68, 68, 1, 28800, 0x81085e87
-1, 93722, 93722, 1378, 2756, 0xa95dc58d
0, 69, 69, 1, 28800, 0xaa8f5d0a
-1, 95100, 95100, 1380, 2760, 0x8e7ac9eb
+1, 95091, 95091, 1380, 2760, 0x8e7ac9eb
0, 70, 70, 1, 28800, 0x605a5f9f
-1, 96480, 96480, 1378, 2756, 0x492b658e
+1, 96469, 96469, 1378, 2756, 0x492b658e
0, 71, 71, 1, 28800, 0x68dc64b2
-1, 97858, 97858, 1378, 2756, 0x377483ab
+1, 97847, 97847, 1378, 2756, 0x377483ab
0, 72, 72, 1, 28800, 0xd08e710b
-1, 99236, 99236, 1378, 2756, 0x2c250279
+1, 99225, 99225, 1378, 2756, 0x2c250279
+1, 100603, 100603, 1378, 2756, 0x704dbdb3
0, 73, 73, 1, 28800, 0xf8567939
-1, 100614, 100614, 1378, 2756, 0x704dbdb3
+1, 101981, 101981, 1378, 2756, 0x800d7da2
0, 74, 74, 1, 28800, 0x8dad7a4f
-1, 101992, 101992, 1378, 2756, 0x800d7da2
+1, 103359, 103359, 1378, 2756, 0x872aa32e
0, 75, 75, 1, 28800, 0x1a19813c
-1, 103370, 103370, 1378, 2756, 0x872aa32e
0, 76, 76, 1, 28800, 0x8a157f0e
-1, 104748, 104748, 1378, 2756, 0x2d4837fe
+1, 104738, 104738, 1378, 2756, 0x2d4837fe
0, 77, 77, 1, 28800, 0xa4fa7b9d
-1, 106126, 106126, 1380, 2760, 0xc89ea57e
+1, 106116, 106116, 1380, 2760, 0xc89ea57e
0, 78, 78, 1, 28800, 0x093b7b36
-1, 107506, 107506, 1378, 2756, 0x6447d7ef
+1, 107494, 107494, 1378, 2756, 0x6447d7ef
0, 79, 79, 1, 28800, 0xa925755b
-1, 108884, 108884, 1378, 2756, 0x144f59cc
+1, 108872, 108872, 1378, 2756, 0x144f59cc
0, 80, 80, 1, 28800, 0xa5968138
-1, 110262, 110262, 1378, 2756, 0xc667154e
+1, 110250, 110250, 1378, 2756, 0xc667154e
+1, 111628, 111628, 1378, 2756, 0xf0de66ae
0, 81, 81, 1, 28800, 0xe00877ac
-1, 111640, 111640, 1378, 2756, 0xf0de66ae
+1, 113006, 113006, 1378, 2756, 0xeabf3c32
0, 82, 82, 1, 28800, 0xd736183e
-1, 113018, 113018, 1378, 2756, 0xeabf3c32
+1, 114384, 114384, 1378, 2756, 0xe98e81d1
0, 83, 83, 1, 28800, 0x356f2068
-1, 114396, 114396, 1378, 2756, 0xe98e81d1
+1, 115762, 115762, 1380, 2760, 0x56aa5889
0, 84, 84, 1, 28800, 0xf9a50f22
-1, 115774, 115774, 1380, 2760, 0x56aa5889
0, 85, 85, 1, 28800, 0x92df2ae8
-1, 117154, 117154, 1378, 2756, 0x4fd34c0e
+1, 117141, 117141, 1378, 2756, 0x4fd34c0e
0, 86, 86, 1, 28800, 0x67a43dc8
-1, 118532, 118532, 1378, 2756, 0x67cf6912
+1, 118519, 118519, 1378, 2756, 0x67cf6912
0, 87, 87, 1, 28800, 0xf8ce2ead
-1, 119910, 119910, 1378, 2756, 0xfa944def
+1, 119897, 119897, 1378, 2756, 0xfa944def
0, 88, 88, 1, 28800, 0xf42f37ee
-1, 121288, 121288, 1378, 2756, 0xc12f23b2
+1, 121275, 121275, 1378, 2756, 0xc12f23b2
+1, 122653, 122653, 1378, 2756, 0x5ea325a2
0, 89, 89, 1, 28800, 0x03611f37
-1, 122666, 122666, 1378, 2756, 0x5ea325a2
+1, 124031, 124031, 1378, 2756, 0x2b245824
0, 90, 90, 1, 28800, 0xddda2327
-1, 124044, 124044, 1378, 2756, 0x2b245824
+1, 125409, 125409, 1380, 2760, 0x90ac533e
0, 91, 91, 1, 28800, 0xdf073d85
-1, 125422, 125422, 1380, 2760, 0x90ac533e
0, 92, 92, 1, 28800, 0xa8331fee
-1, 126802, 126802, 1378, 2756, 0xcca34d26
+1, 126788, 126788, 1378, 2756, 0xcca34d26
0, 93, 93, 1, 28800, 0x59d3490a
-1, 128180, 128180, 1378, 2756, 0xb5f820d0
+1, 128166, 128166, 1378, 2756, 0xb5f820d0
0, 94, 94, 1, 28800, 0xa8335be6
-1, 129558, 129558, 1378, 2756, 0x27f24335
+1, 129544, 129544, 1378, 2756, 0x27f24335
0, 95, 95, 1, 28800, 0xd5483b43
-1, 130936, 130936, 1378, 2756, 0x4a9e87b7
+1, 130922, 130922, 1378, 2756, 0x4a9e87b7
0, 96, 96, 1, 28800, 0x23422dc9
-1, 132314, 132314, 1378, 2756, 0xbd076129
+1, 132300, 132300, 1378, 2756, 0xbd076129
+1, 133678, 133678, 1378, 2756, 0x2e0e3f2e
0, 97, 97, 1, 28800, 0xc04e4689
-1, 133692, 133692, 1378, 2756, 0x2e0e3f2e
+1, 135056, 135056, 1380, 2760, 0xdf534478
0, 98, 98, 1, 28800, 0xd4d96372
-1, 135070, 135070, 1380, 2760, 0xdf534478
+1, 136434, 136434, 1378, 2756, 0xca000a2e
0, 99, 99, 1, 28800, 0x9c814e96
-1, 136450, 136450, 1378, 2756, 0xca000a2e
+1, 137812, 137812, 1378, 2756, 0x87472df3
0, 100, 100, 1, 28800, 0x7c4b5d3b
-1, 137828, 137828, 1378, 2756, 0x87472df3
0, 101, 101, 1, 28800, 0x6bf66c04
-1, 139206, 139206, 1378, 2756, 0x16733810
+1, 139191, 139191, 1378, 2756, 0x16733810
0, 102, 102, 1, 28800, 0x6e8d4bb6
-1, 140584, 140584, 1378, 2756, 0xfa0734b4
+1, 140569, 140569, 1378, 2756, 0xfa0734b4
0, 103, 103, 1, 28800, 0xad964d00
-1, 141962, 141962, 1378, 2756, 0x5eff3fc4
+1, 141947, 141947, 1378, 2756, 0x5eff3fc4
0, 104, 104, 1, 28800, 0x1ff36bd1
-1, 143340, 143340, 1378, 2756, 0xf35346bd
+1, 143325, 143325, 1378, 2756, 0xf35346bd
+1, 144703, 144703, 1378, 2756, 0xac6411c5
0, 105, 105, 1, 28800, 0xa4664c76
-1, 144718, 144718, 1378, 2756, 0xac6411c5
+1, 146081, 146081, 1380, 2760, 0x478c3c56
0, 106, 106, 1, 28800, 0x50626d82
-1, 146096, 146096, 1380, 2760, 0x478c3c56
+1, 147459, 147459, 1378, 2756, 0xebd30bdd
0, 107, 107, 1, 28800, 0x81906c5c
-1, 147476, 147476, 1378, 2756, 0xebd30bdd
0, 108, 108, 1, 28800, 0x5060543f
-1, 148854, 148854, 1378, 2756, 0xaef95a31
+1, 148838, 148838, 1378, 2756, 0xaef95a31
0, 109, 109, 1, 28800, 0x231c5a86
-1, 150232, 150232, 1378, 2756, 0x8aad29d1
+1, 150216, 150216, 1378, 2756, 0x8aad29d1
0, 110, 110, 1, 28800, 0x79775d48
-1, 151610, 151610, 1378, 2756, 0x626863f0
+1, 151594, 151594, 1378, 2756, 0x626863f0
0, 111, 111, 1, 28800, 0xbb893571
-1, 152988, 152988, 1378, 2756, 0x68c05707
+1, 152972, 152972, 1378, 2756, 0x68c05707
0, 112, 112, 1, 28800, 0x794c49ed
-1, 154366, 154366, 1378, 2756, 0x437c5e8d
+1, 154350, 154350, 1378, 2756, 0x437c5e8d
+1, 155728, 155728, 1380, 2760, 0x8eca4bdb
0, 113, 113, 1, 28800, 0x70464bac
-1, 155744, 155744, 1380, 2760, 0x8eca4bdb
+1, 157106, 157106, 1378, 2756, 0x62bd4162
0, 114, 114, 1, 28800, 0xe79549ce
-1, 157124, 157124, 1378, 2756, 0x62bd4162
+1, 158484, 158484, 1378, 2756, 0x9f744aa4
0, 115, 115, 1, 28800, 0xa6565555
-1, 158502, 158502, 1378, 2756, 0x9f744aa4
+1, 159862, 159862, 1378, 2756, 0x0f3f6409
0, 116, 116, 1, 28800, 0x2ef1ad6d
-1, 159880, 159880, 1378, 2756, 0x0f3f6409
0, 117, 117, 1, 28800, 0xdd22b9aa
-1, 161258, 161258, 1378, 2756, 0x3fee827a
+1, 161241, 161241, 1378, 2756, 0x3fee827a
0, 118, 118, 1, 28800, 0x26ebaa97
-1, 162636, 162636, 1378, 2756, 0x48a0ac19
+1, 162619, 162619, 1378, 2756, 0x48a0ac19
0, 119, 119, 1, 28800, 0x32bd979e
-1, 164014, 164014, 1378, 2756, 0x8e4ce0d0
+1, 163997, 163997, 1378, 2756, 0x8e4ce0d0
0, 120, 120, 1, 28800, 0x4c167c9a
-1, 165392, 165392, 1380, 2760, 0xcda82236
+1, 165375, 165375, 1380, 2760, 0xcda82236
+1, 166753, 166753, 1378, 2756, 0x0e523255
0, 121, 121, 1, 28800, 0xfdf76051
-1, 166772, 166772, 1378, 2756, 0x0e523255
+1, 168131, 168131, 1378, 2756, 0x84103d30
0, 122, 122, 1, 28800, 0x966938a8
-1, 168150, 168150, 1378, 2756, 0x84103d30
+1, 169509, 169509, 1378, 2756, 0x13941cde
0, 123, 123, 1, 28800, 0xcea3fbde
-1, 169528, 169528, 1378, 2756, 0x13941cde
0, 124, 124, 1, 28800, 0x29a0c213
-1, 170906, 170906, 1378, 2756, 0x9fc834c5
+1, 170888, 170888, 1378, 2756, 0x9fc834c5
0, 125, 125, 1, 28800, 0x5633a1c2
-1, 172284, 172284, 1378, 2756, 0xc0217a77
+1, 172266, 172266, 1378, 2756, 0xc0217a77
0, 126, 126, 1, 28800, 0xdc0b9af8
-1, 173662, 173662, 1378, 2756, 0x3f643659
+1, 173644, 173644, 1378, 2756, 0x3f643659
0, 127, 127, 1, 28800, 0x92138848
-1, 175040, 175040, 1380, 2760, 0x9dbd6002
+1, 175022, 175022, 1380, 2760, 0x9dbd6002
0, 128, 128, 1, 28800, 0xd7308da5
-1, 176420, 176420, 1378, 2756, 0x94f046fb
+1, 176400, 176400, 1378, 2756, 0x94f046fb
+1, 177778, 177778, 1378, 2756, 0xab01fb12
0, 129, 129, 1, 28800, 0x0c8f9b3f
-1, 177798, 177798, 1378, 2756, 0xab01fb12
+1, 179156, 179156, 1378, 2756, 0x04cffe5c
0, 130, 130, 1, 28800, 0xd059b5d1
-1, 179176, 179176, 1378, 2756, 0x04cffe5c
+1, 180534, 180534, 1378, 2756, 0xef661c5e
0, 131, 131, 1, 28800, 0xba6ed9cd
-1, 180554, 180554, 1378, 2756, 0xef661c5e
+1, 181912, 181912, 1378, 2756, 0x094c5fc5
0, 132, 132, 1, 28800, 0x896c1064
-1, 181932, 181932, 1378, 2756, 0x094c5fc5
0, 133, 133, 1, 28800, 0x986e2fc9
-1, 183310, 183310, 1378, 2756, 0xe0c1486a
+1, 183291, 183291, 1378, 2756, 0xe0c1486a
0, 134, 134, 1, 28800, 0xcba94e4b
-1, 184688, 184688, 1380, 2760, 0x8c3535b7
+1, 184669, 184669, 1380, 2760, 0x8c3535b7
0, 135, 135, 1, 28800, 0xf3e778ed
-1, 186068, 186068, 1378, 2756, 0x594934aa
+1, 186047, 186047, 1378, 2756, 0x594934aa
0, 136, 136, 1, 28800, 0xc6cd7d48
-1, 187446, 187446, 1378, 2756, 0x74007238
+1, 187425, 187425, 1378, 2756, 0x74007238
+1, 188803, 188803, 1378, 2756, 0x61f1394d
0, 137, 137, 1, 28800, 0xd9bd84d8
-1, 188824, 188824, 1378, 2756, 0x61f1394d
+1, 190181, 190181, 1378, 2756, 0x72584f07
0, 138, 138, 1, 28800, 0x391197b4
-1, 190202, 190202, 1378, 2756, 0x72584f07
+1, 191559, 191559, 1378, 2756, 0xced9acf9
0, 139, 139, 1, 28800, 0xf361a1d9
-1, 191580, 191580, 1378, 2756, 0xced9acf9
0, 140, 140, 1, 28800, 0x9a1ea54e
-1, 192958, 192958, 1378, 2756, 0x7d2e3ea1
+1, 192938, 192938, 1378, 2756, 0x7d2e3ea1
0, 141, 141, 1, 28800, 0x551aab57
-1, 194336, 194336, 1378, 2756, 0x56c06897
+1, 194316, 194316, 1378, 2756, 0x56c06897
0, 142, 142, 1, 28800, 0x3af8577d
-1, 195714, 195714, 1380, 2760, 0x19983bbf
+1, 195694, 195694, 1380, 2760, 0x19983bbf
0, 143, 143, 1, 28800, 0x10f76ed0
-1, 197094, 197094, 1378, 2756, 0x4f884f27
+1, 197072, 197072, 1378, 2756, 0x4f884f27
0, 144, 144, 1, 28800, 0x026a7fde
-1, 198472, 198472, 1378, 2756, 0x81ab2f63
+1, 198450, 198450, 1378, 2756, 0x81ab2f63
+1, 199828, 199828, 1378, 2756, 0x448e681d
0, 145, 145, 1, 28800, 0x3e0e8db8
-1, 199850, 199850, 1378, 2756, 0x448e681d
+1, 201206, 201206, 1378, 2756, 0x0ba9826e
0, 146, 146, 1, 28800, 0x22998d2d
-1, 201228, 201228, 1378, 2756, 0x0ba9826e
+1, 202584, 202584, 1378, 2756, 0x049f36fa
0, 147, 147, 1, 28800, 0x05978b12
-1, 202606, 202606, 1378, 2756, 0x049f36fa
+1, 203962, 203962, 1378, 2756, 0x096a2b62
0, 148, 148, 1, 28800, 0x38b88294
-1, 203984, 203984, 1378, 2756, 0x096a2b62
0, 149, 149, 1, 28800, 0x2ef677d6
-1, 205362, 205362, 1380, 2760, 0x579e2035
+1, 205341, 205341, 1380, 2760, 0x579e2035
0, 150, 150, 1, 28800, 0x0b9a8894
-1, 206742, 206742, 1378, 2756, 0xd13e30e1
+1, 206719, 206719, 1378, 2756, 0xd13e30e1
0, 151, 151, 1, 28800, 0x2dcb6718
-1, 208120, 208120, 1378, 2756, 0x30b6412b
+1, 208097, 208097, 1378, 2756, 0x30b6412b
0, 152, 152, 1, 28800, 0xa31b6679
-1, 209498, 209498, 1378, 2756, 0xbb1c3268
+1, 209475, 209475, 1378, 2756, 0xbb1c3268
+1, 210853, 210853, 1378, 2756, 0xbc175b6a
0, 153, 153, 1, 28800, 0x262d6a50
-1, 210876, 210876, 1378, 2756, 0xbc175b6a
+1, 212231, 212231, 1378, 2756, 0xf8d160e2
0, 154, 154, 1, 28800, 0xff3d6d0d
-1, 212254, 212254, 1378, 2756, 0xf8d160e2
+1, 213609, 213609, 1378, 2756, 0xc1048154
0, 155, 155, 1, 28800, 0x159d7045
-1, 213632, 213632, 1378, 2756, 0xc1048154
0, 156, 156, 1, 28800, 0xf0df7800
-1, 215010, 215010, 1380, 2760, 0xb83548f4
+1, 214988, 214988, 1380, 2760, 0xb83548f4
0, 157, 157, 1, 28800, 0xbe825ea5
-1, 216390, 216390, 1378, 2756, 0x22647962
+1, 216366, 216366, 1378, 2756, 0x22647962
0, 158, 158, 1, 28800, 0x80e25d5a
-1, 217768, 217768, 1378, 2756, 0x14ca54d3
+1, 217744, 217744, 1378, 2756, 0x14ca54d3
0, 159, 159, 1, 28800, 0x8cbe263f
-1, 219146, 219146, 1378, 2756, 0x58754b3a
+1, 219122, 219122, 1378, 2756, 0x58754b3a
diff --git a/tests/ref/fate/maxis-xa b/tests/ref/fate/maxis-xa
index 0dd23db827..c29738c868 100644
--- a/tests/ref/fate/maxis-xa
+++ b/tests/ref/fate/maxis-xa
@@ -1 +1,31 @@
-b4cd52fc080bffefeea94ce7c116046f
+#tb 0: 1/22050
+0, 0, 0, 28, 30, 0x51750711
+0, 28, 28, 28, 30, 0x9ca20c2a
+0, 56, 56, 28, 30, 0x7551081f
+0, 84, 84, 28, 30, 0x09540063
+0, 112, 112, 28, 30, 0x02c40018
+0, 140, 140, 28, 30, 0x0f6c0117
+0, 168, 168, 28, 30, 0x2aab0315
+0, 196, 196, 28, 30, 0x0e6d0117
+0, 224, 224, 28, 30, 0x04770036
+0, 252, 252, 28, 30, 0x939c090f
+0, 280, 280, 28, 30, 0xde511116
+0, 308, 308, 28, 30, 0x2f0f13f5
+0, 336, 336, 28, 30, 0x65bb0630
+0, 364, 364, 28, 30, 0x1f7a0333
+0, 392, 392, 28, 30, 0xa3d71008
+0, 420, 420, 28, 30, 0x69120801
+0, 448, 448, 28, 30, 0x1e7b0207
+0, 476, 476, 28, 30, 0x02c40018
+0, 504, 504, 28, 30, 0x0d050126
+0, 532, 532, 28, 30, 0x41c10333
+0, 560, 560, 28, 30, 0x16a10207
+0, 588, 588, 28, 30, 0x0f210207
+0, 616, 616, 28, 30, 0x4e4b073e
+0, 644, 644, 28, 30, 0xa6f20d1a
+0, 672, 672, 28, 30, 0xe1e40ff9
+0, 700, 700, 28, 30, 0x868b090f
+0, 728, 728, 28, 30, 0x8c85091e
+0, 756, 756, 28, 30, 0x5a21094b
+0, 784, 784, 28, 30, 0x993c0900
+0, 812, 812, 28, 30, 0x5b6b04e6
diff --git a/tests/ref/fate/pcm_dvd b/tests/ref/fate/pcm_dvd
index 691e1a6119..6037451006 100644
--- a/tests/ref/fate/pcm_dvd
+++ b/tests/ref/fate/pcm_dvd
@@ -1,124 +1,124 @@
#tb 0: 1/48000
0, 0, 0, 334, 1336, 0x8e3c0abc
-0, 334, 334, 334, 1336, 0x99c41108
-0, 668, 668, 334, 1336, 0xd65be322
-0, 1002, 1002, 334, 1336, 0x15b575fb
-0, 1336, 1336, 334, 1336, 0x366f742a
-0, 1670, 1670, 334, 1336, 0xed72ad83
-0, 2004, 2004, 334, 1336, 0x73f21c93
-0, 2338, 2338, 334, 1336, 0x4be7a770
-0, 2672, 2672, 334, 1336, 0x69ecf80c
-0, 3006, 3006, 334, 1336, 0x835dc0e5
-0, 3340, 3340, 334, 1336, 0x3089458d
-0, 3674, 3674, 334, 1336, 0xc73b8cdc
-0, 4008, 4008, 334, 1336, 0xc1cdaa8f
-0, 4342, 4342, 334, 1336, 0x47a49186
-0, 4676, 4676, 334, 1336, 0x2db387e2
-0, 5010, 5010, 334, 1336, 0x90da9a97
-0, 5344, 5344, 334, 1336, 0xcd34a467
-0, 5678, 5678, 334, 1336, 0xdca8bd29
-0, 6012, 6012, 334, 1336, 0xa09f9da3
-0, 6346, 6346, 334, 1336, 0x47c8acf6
-0, 6680, 6680, 334, 1336, 0x94dfa20e
-0, 7014, 7014, 334, 1336, 0x2123a5f6
-0, 7348, 7348, 334, 1336, 0x2f1badde
-0, 7682, 7682, 334, 1336, 0x47579528
-0, 8016, 8016, 334, 1336, 0x028daa10
-0, 8350, 8350, 334, 1336, 0x5ed7adcd
-0, 8684, 8684, 334, 1336, 0xc5ee8f10
-0, 9018, 9018, 334, 1336, 0xcfacb489
-0, 9352, 9352, 334, 1336, 0x07de937b
-0, 9686, 9686, 334, 1336, 0x07bd8f8b
-0, 10020, 10020, 334, 1336, 0x4660912e
-0, 10354, 10354, 334, 1336, 0x047f97ad
-0, 10688, 10688, 334, 1336, 0xe0e8a11f
-0, 11022, 11022, 334, 1336, 0xcd9898e6
-0, 11356, 11356, 334, 1336, 0xccfda786
-0, 11690, 11690, 334, 1336, 0xab1b9e40
-0, 12024, 12024, 334, 1336, 0x2ea79ea1
-0, 12358, 12358, 334, 1336, 0xade2ad7e
-0, 12692, 12692, 334, 1336, 0xe5cf9684
-0, 13026, 13026, 334, 1336, 0xb57184cf
+0, 400, 400, 334, 1336, 0x99c41108
+0, 720, 720, 334, 1336, 0xd65be322
+0, 1040, 1040, 334, 1336, 0x15b575fb
+0, 1360, 1360, 334, 1336, 0x366f742a
+0, 1680, 1680, 334, 1336, 0xed72ad83
+0, 2000, 2000, 334, 1336, 0x73f21c93
+0, 2400, 2400, 334, 1336, 0x4be7a770
+0, 2720, 2720, 334, 1336, 0x69ecf80c
+0, 3040, 3040, 334, 1336, 0x835dc0e5
+0, 3360, 3360, 334, 1336, 0x3089458d
+0, 3680, 3680, 334, 1336, 0xc73b8cdc
+0, 4080, 4080, 334, 1336, 0xc1cdaa8f
+0, 4400, 4400, 334, 1336, 0x47a49186
+0, 4720, 4720, 334, 1336, 0x2db387e2
+0, 5040, 5040, 334, 1336, 0x90da9a97
+0, 5360, 5360, 334, 1336, 0xcd34a467
+0, 5680, 5680, 334, 1336, 0xdca8bd29
+0, 6080, 6080, 334, 1336, 0xa09f9da3
+0, 6400, 6400, 334, 1336, 0x47c8acf6
+0, 6720, 6720, 334, 1336, 0x94dfa20e
+0, 7040, 7040, 334, 1336, 0x2123a5f6
+0, 7360, 7360, 334, 1336, 0x2f1badde
+0, 7680, 7680, 334, 1336, 0x47579528
+0, 8080, 8080, 334, 1336, 0x028daa10
+0, 8400, 8400, 334, 1336, 0x5ed7adcd
+0, 8720, 8720, 334, 1336, 0xc5ee8f10
+0, 9040, 9040, 334, 1336, 0xcfacb489
+0, 9360, 9360, 334, 1336, 0x07de937b
+0, 9760, 9760, 334, 1336, 0x07bd8f8b
+0, 10080, 10080, 334, 1336, 0x4660912e
+0, 10400, 10400, 334, 1336, 0x047f97ad
+0, 10720, 10720, 334, 1336, 0xe0e8a11f
+0, 11040, 11040, 334, 1336, 0xcd9898e6
+0, 11360, 11360, 334, 1336, 0xccfda786
+0, 11760, 11760, 334, 1336, 0xab1b9e40
+0, 12080, 12080, 334, 1336, 0x2ea79ea1
+0, 12400, 12400, 334, 1336, 0xade2ad7e
+0, 12720, 12720, 334, 1336, 0xe5cf9684
+0, 13040, 13040, 334, 1336, 0xb57184cf
0, 13360, 13360, 334, 1336, 0x0668a5ce
-0, 13694, 13694, 334, 1336, 0x643a9d96
-0, 14028, 14028, 334, 1336, 0x97dc8ecc
-0, 14362, 14362, 334, 1336, 0x72c2b174
-0, 14696, 14696, 334, 1336, 0xe39d8fc3
-0, 15030, 15030, 334, 1336, 0x56fc76d2
-0, 15364, 15364, 334, 1336, 0x91a884b3
-0, 15698, 15698, 334, 1336, 0x7b039a4e
-0, 16032, 16032, 334, 1336, 0x3770a9dd
-0, 16366, 16366, 334, 1336, 0x317c9cb8
-0, 16700, 16700, 334, 1336, 0xdd97ad48
-0, 17034, 17034, 334, 1336, 0x98066c1b
-0, 17368, 17368, 334, 1336, 0xecd3a31c
-0, 17702, 17702, 334, 1336, 0x0578b329
-0, 18036, 18036, 334, 1336, 0x6942881c
-0, 18370, 18370, 334, 1336, 0x56b5af29
-0, 18704, 18704, 334, 1336, 0xf111a48a
-0, 19038, 19038, 334, 1336, 0x1f5a8d45
-0, 19372, 19372, 334, 1336, 0x39abdded
-0, 19706, 19706, 334, 1336, 0xdb997fe8
-0, 20040, 20040, 334, 1336, 0xd7f0d0b2
-0, 20374, 20374, 334, 1336, 0xf3219413
-0, 20708, 20708, 334, 1336, 0x9d80899d
-0, 21042, 21042, 334, 1336, 0x7238bd63
-0, 21376, 21376, 334, 1336, 0x7376703e
-0, 21710, 21710, 334, 1336, 0x0fd56d02
-0, 22044, 22044, 334, 1336, 0xa6c0951e
-0, 22378, 22378, 334, 1336, 0xfacb674e
-0, 22712, 22712, 334, 1336, 0x805bd289
-0, 23046, 23046, 334, 1336, 0xa2a51a12
-0, 23380, 23380, 334, 1336, 0x8a75d91b
-0, 23714, 23714, 334, 1336, 0x34b1ef80
-0, 24048, 24048, 334, 1336, 0x902921e0
-0, 24382, 24382, 334, 1336, 0xc2db7895
-0, 24716, 24716, 334, 1336, 0x7a0db9e1
-0, 25050, 25050, 334, 1336, 0x66a93277
-0, 25384, 25384, 334, 1336, 0x30830a83
-0, 25718, 25718, 334, 1336, 0x251cf132
-0, 26052, 26052, 334, 1336, 0x08dd852c
-0, 26386, 26386, 334, 1336, 0x22ea164c
+0, 13760, 13760, 334, 1336, 0x643a9d96
+0, 14080, 14080, 334, 1336, 0x97dc8ecc
+0, 14400, 14400, 334, 1336, 0x72c2b174
+0, 14720, 14720, 334, 1336, 0xe39d8fc3
+0, 15040, 15040, 334, 1336, 0x56fc76d2
+0, 15360, 15360, 334, 1336, 0x91a884b3
+0, 15760, 15760, 334, 1336, 0x7b039a4e
+0, 16080, 16080, 334, 1336, 0x3770a9dd
+0, 16400, 16400, 334, 1336, 0x317c9cb8
+0, 16720, 16720, 334, 1336, 0xdd97ad48
+0, 17040, 17040, 334, 1336, 0x98066c1b
+0, 17440, 17440, 334, 1336, 0xecd3a31c
+0, 17760, 17760, 334, 1336, 0x0578b329
+0, 18080, 18080, 334, 1336, 0x6942881c
+0, 18400, 18400, 334, 1336, 0x56b5af29
+0, 18720, 18720, 334, 1336, 0xf111a48a
+0, 19040, 19040, 334, 1336, 0x1f5a8d45
+0, 19440, 19440, 334, 1336, 0x39abdded
+0, 19760, 19760, 334, 1336, 0xdb997fe8
+0, 20080, 20080, 334, 1336, 0xd7f0d0b2
+0, 20400, 20400, 334, 1336, 0xf3219413
+0, 20720, 20720, 334, 1336, 0x9d80899d
+0, 21040, 21040, 334, 1336, 0x7238bd63
+0, 21440, 21440, 334, 1336, 0x7376703e
+0, 21760, 21760, 334, 1336, 0x0fd56d02
+0, 22080, 22080, 334, 1336, 0xa6c0951e
+0, 22400, 22400, 334, 1336, 0xfacb674e
+0, 22720, 22720, 334, 1336, 0x805bd289
+0, 23120, 23120, 334, 1336, 0xa2a51a12
+0, 23440, 23440, 334, 1336, 0x8a75d91b
+0, 23760, 23760, 334, 1336, 0x34b1ef80
+0, 24080, 24080, 334, 1336, 0x902921e0
+0, 24400, 24400, 334, 1336, 0xc2db7895
+0, 24720, 24720, 334, 1336, 0x7a0db9e1
+0, 25120, 25120, 334, 1336, 0x66a93277
+0, 25440, 25440, 334, 1336, 0x30830a83
+0, 25760, 25760, 334, 1336, 0x251cf132
+0, 26080, 26080, 334, 1336, 0x08dd852c
+0, 26400, 26400, 334, 1336, 0x22ea164c
0, 26720, 26720, 334, 1336, 0x3bdd91c4
-0, 27054, 27054, 334, 1336, 0xa4c0fbd7
-0, 27388, 27388, 334, 1336, 0x83aa81bd
-0, 27722, 27722, 334, 1336, 0x8a7b0fdb
-0, 28056, 28056, 334, 1336, 0x35c37b01
-0, 28390, 28390, 334, 1336, 0xdede811e
-0, 28724, 28724, 334, 1336, 0x7473a657
-0, 29058, 29058, 334, 1336, 0x5b917e2b
-0, 29392, 29392, 334, 1336, 0x1c5a7cfc
-0, 29726, 29726, 334, 1336, 0xeb7bab0d
-0, 30060, 30060, 334, 1336, 0x7337795c
-0, 30394, 30394, 334, 1336, 0x68da9d08
-0, 30728, 30728, 334, 1336, 0xe93b87fe
-0, 31062, 31062, 334, 1336, 0xd4639f00
-0, 31396, 31396, 334, 1336, 0x1070a91d
-0, 31730, 31730, 334, 1336, 0x50e3788f
-0, 32064, 32064, 334, 1336, 0x1dac6691
-0, 32398, 32398, 334, 1336, 0xf62c709d
-0, 32732, 32732, 334, 1336, 0x2369648d
-0, 33066, 33066, 334, 1336, 0xbfc792e6
-0, 33400, 33400, 334, 1336, 0x975eb8e3
-0, 33734, 33734, 334, 1336, 0x35c49ba6
-0, 34068, 34068, 334, 1336, 0xe6198aa9
-0, 34402, 34402, 334, 1336, 0x99f37d9d
-0, 34736, 34736, 334, 1336, 0x4815aff1
-0, 35070, 35070, 334, 1336, 0x4fd366ca
-0, 35404, 35404, 334, 1336, 0x43cf7bb4
-0, 35738, 35738, 334, 1336, 0x14a576ac
-0, 36072, 36072, 334, 1336, 0xc6986978
-0, 36406, 36406, 334, 1336, 0x10f67dc4
-0, 36740, 36740, 334, 1336, 0xcca07f7a
-0, 37074, 37074, 334, 1336, 0x6d0a5dfe
-0, 37408, 37408, 334, 1336, 0x4e0761ef
-0, 37742, 37742, 334, 1336, 0x31368e66
-0, 38076, 38076, 334, 1336, 0x14b895c1
-0, 38410, 38410, 334, 1336, 0x4bb7c111
-0, 38744, 38744, 334, 1336, 0x1676a8bb
-0, 39078, 39078, 334, 1336, 0xddaaa459
-0, 39412, 39412, 334, 1336, 0xc43eabce
-0, 39746, 39746, 334, 1336, 0x4d9f8d54
+0, 27120, 27120, 334, 1336, 0xa4c0fbd7
+0, 27440, 27440, 334, 1336, 0x83aa81bd
+0, 27760, 27760, 334, 1336, 0x8a7b0fdb
+0, 28080, 28080, 334, 1336, 0x35c37b01
+0, 28400, 28400, 334, 1336, 0xdede811e
+0, 28720, 28720, 334, 1336, 0x7473a657
+0, 29120, 29120, 334, 1336, 0x5b917e2b
+0, 29440, 29440, 334, 1336, 0x1c5a7cfc
+0, 29760, 29760, 334, 1336, 0xeb7bab0d
+0, 30080, 30080, 334, 1336, 0x7337795c
+0, 30400, 30400, 334, 1336, 0x68da9d08
+0, 30800, 30800, 334, 1336, 0xe93b87fe
+0, 31120, 31120, 334, 1336, 0xd4639f00
+0, 31440, 31440, 334, 1336, 0x1070a91d
+0, 31760, 31760, 334, 1336, 0x50e3788f
+0, 32080, 32080, 334, 1336, 0x1dac6691
+0, 32400, 32400, 334, 1336, 0xf62c709d
+0, 32800, 32800, 334, 1336, 0x2369648d
+0, 33120, 33120, 334, 1336, 0xbfc792e6
+0, 33440, 33440, 334, 1336, 0x975eb8e3
+0, 33760, 33760, 334, 1336, 0x35c49ba6
+0, 34080, 34080, 334, 1336, 0xe6198aa9
+0, 34400, 34400, 334, 1336, 0x99f37d9d
+0, 34800, 34800, 334, 1336, 0x4815aff1
+0, 35120, 35120, 334, 1336, 0x4fd366ca
+0, 35440, 35440, 334, 1336, 0x43cf7bb4
+0, 35760, 35760, 334, 1336, 0x14a576ac
+0, 36080, 36080, 334, 1336, 0xc6986978
+0, 36480, 36480, 334, 1336, 0x10f67dc4
+0, 36800, 36800, 334, 1336, 0xcca07f7a
+0, 37120, 37120, 334, 1336, 0x6d0a5dfe
+0, 37440, 37440, 334, 1336, 0x4e0761ef
+0, 37760, 37760, 334, 1336, 0x31368e66
+0, 38080, 38080, 334, 1336, 0x14b895c1
+0, 38480, 38480, 334, 1336, 0x4bb7c111
+0, 38800, 38800, 334, 1336, 0x1676a8bb
+0, 39120, 39120, 334, 1336, 0xddaaa459
+0, 39440, 39440, 334, 1336, 0xc43eabce
+0, 39760, 39760, 334, 1336, 0x4d9f8d54
0, 40080, 40080, 334, 1336, 0x0ac292cb
-0, 40414, 40414, 334, 1336, 0x2d9c74e4
-0, 40748, 40748, 334, 1336, 0xe73da38f
+0, 40480, 40480, 334, 1336, 0x2d9c74e4
+0, 40800, 40800, 334, 1336, 0xe73da38f
diff --git a/tests/ref/fate/smjpeg b/tests/ref/fate/smjpeg
index 928ded7c62..78b750a5ac 100644
--- a/tests/ref/fate/smjpeg
+++ b/tests/ref/fate/smjpeg
@@ -2,424 +2,424 @@
#tb 1: 1/22050
0, 0, 0, 0, 734, 0x5a042c2c
1, 0, 0, 512, 1024, 0x00000000
-1, 512, 512, 512, 1024, 0x00000000
-1, 1024, 1024, 512, 1024, 0xd89a448e
-1, 1536, 1536, 512, 1024, 0x695b369c
-1, 2048, 2048, 512, 1024, 0xc8ba5707
+1, 507, 507, 512, 1024, 0x00000000
+1, 1014, 1014, 512, 1024, 0xd89a448e
+1, 1521, 1521, 512, 1024, 0x695b369c
+1, 2029, 2029, 512, 1024, 0xc8ba5707
0, 111, 111, 0, 763, 0xb5893f2f
-1, 2560, 2560, 512, 1024, 0xdf241fc6
-1, 3072, 3072, 512, 1024, 0x61cf4166
-1, 3584, 3584, 512, 1024, 0x97cbc386
-1, 4096, 4096, 512, 1024, 0x44899d04
-1, 4608, 4608, 512, 1024, 0xa7cbaa62
+1, 2558, 2558, 512, 1024, 0xdf241fc6
+1, 3065, 3065, 512, 1024, 0x61cf4166
+1, 3572, 3572, 512, 1024, 0x97cbc386
+1, 4079, 4079, 512, 1024, 0x44899d04
+1, 4586, 4586, 512, 1024, 0xa7cbaa62
0, 222, 222, 0, 3023, 0x0f3907d3
-1, 5120, 5120, 512, 1024, 0xa7aea60c
-1, 5632, 5632, 512, 1024, 0xd7b18a89
-1, 6144, 6144, 512, 1024, 0x268e81f6
-1, 6656, 6656, 512, 1024, 0x9cf83a2f
-1, 7168, 7168, 512, 1024, 0x5559b508
+1, 5116, 5116, 512, 1024, 0xa7aea60c
+1, 5623, 5623, 512, 1024, 0xd7b18a89
+1, 6130, 6130, 512, 1024, 0x268e81f6
+1, 6637, 6637, 512, 1024, 0x9cf83a2f
+1, 7166, 7166, 512, 1024, 0x5559b508
0, 333, 333, 0, 4800, 0x22e6e18a
-1, 7680, 7680, 512, 1024, 0xe1b9e71c
-1, 8192, 8192, 512, 1024, 0xdcee733e
-1, 8704, 8704, 512, 1024, 0xe5918f60
-1, 9216, 9216, 512, 1024, 0x29dbd209
-1, 9728, 9728, 512, 1024, 0x9bcbcf16
+1, 7673, 7673, 512, 1024, 0xe1b9e71c
+1, 8181, 8181, 512, 1024, 0xdcee733e
+1, 8688, 8688, 512, 1024, 0xe5918f60
+1, 9195, 9195, 512, 1024, 0x29dbd209
+1, 9724, 9724, 512, 1024, 0x9bcbcf16
0, 444, 444, 0, 6417, 0x427adde5
-1, 10240, 10240, 512, 1024, 0x86f5f458
-1, 10752, 10752, 512, 1024, 0xabcbda86
-1, 11264, 11264, 512, 1024, 0xc51f77b9
-1, 11776, 11776, 512, 1024, 0xf6b3a504
+1, 10231, 10231, 512, 1024, 0x86f5f458
+1, 10738, 10738, 512, 1024, 0xabcbda86
+1, 11246, 11246, 512, 1024, 0xc51f77b9
+1, 11775, 11775, 512, 1024, 0xf6b3a504
0, 555, 555, 0, 6776, 0x7a74c6ad
-1, 12288, 12288, 512, 1024, 0x1af3e40e
-1, 12800, 12800, 512, 1024, 0x3866b03b
-1, 13312, 13312, 512, 1024, 0xbc005403
-1, 13824, 13824, 512, 1024, 0xe9dfcc51
-1, 14336, 14336, 512, 1024, 0x83c837cb
+1, 12282, 12282, 512, 1024, 0x1af3e40e
+1, 12789, 12789, 512, 1024, 0x3866b03b
+1, 13296, 13296, 512, 1024, 0xbc005403
+1, 13803, 13803, 512, 1024, 0xe9dfcc51
+1, 14332, 14332, 512, 1024, 0x83c837cb
0, 666, 666, 0, 6808, 0x1f6eb7c3
-1, 14848, 14848, 512, 1024, 0xfa649580
-1, 15360, 15360, 512, 1024, 0x519452ea
-1, 15872, 15872, 512, 1024, 0xd4978774
-1, 16384, 16384, 512, 1024, 0xe2a3b1cd
-1, 16896, 16896, 512, 1024, 0x9a9472ad
+1, 14840, 14840, 512, 1024, 0xfa649580
+1, 15347, 15347, 512, 1024, 0x519452ea
+1, 15854, 15854, 512, 1024, 0xd4978774
+1, 16383, 16383, 512, 1024, 0xe2a3b1cd
+1, 16890, 16890, 512, 1024, 0x9a9472ad
0, 777, 777, 0, 6726, 0x452087e6
-1, 17408, 17408, 512, 1024, 0xa12d4060
-1, 17920, 17920, 512, 1024, 0x31fb0646
-1, 18432, 18432, 512, 1024, 0xfc44343f
-1, 18944, 18944, 512, 1024, 0x0847751a
-1, 19456, 19456, 512, 1024, 0x227968a2
+1, 17397, 17397, 512, 1024, 0xa12d4060
+1, 17905, 17905, 512, 1024, 0x31fb0646
+1, 18412, 18412, 512, 1024, 0xfc44343f
+1, 18941, 18941, 512, 1024, 0x0847751a
+1, 19448, 19448, 512, 1024, 0x227968a2
0, 888, 888, 0, 6829, 0xee82b109
-1, 19968, 19968, 512, 1024, 0x7cce9f1c
-1, 20480, 20480, 512, 1024, 0xb8356713
+1, 19955, 19955, 512, 1024, 0x7cce9f1c
+1, 20462, 20462, 512, 1024, 0xb8356713
1, 20992, 20992, 512, 1024, 0xb29f6e6f
-1, 21504, 21504, 512, 1024, 0x9e1430ab
-1, 22016, 22016, 512, 1024, 0x26d85423
+1, 21499, 21499, 512, 1024, 0x9e1430ab
+1, 22006, 22006, 512, 1024, 0x26d85423
0, 999, 999, 0, 7055, 0xf41f1108
-1, 22528, 22528, 512, 1024, 0x6496547d
-1, 23040, 23040, 512, 1024, 0x316b1a86
-1, 23552, 23552, 512, 1024, 0x3cd83afc
-1, 24064, 24064, 512, 1024, 0x993ff633
+1, 22513, 22513, 512, 1024, 0x6496547d
+1, 23020, 23020, 512, 1024, 0x316b1a86
+1, 23549, 23549, 512, 1024, 0x3cd83afc
+1, 24057, 24057, 512, 1024, 0x993ff633
0, 1111, 1111, 0, 6977, 0xf8fe1ede
-1, 24576, 24576, 512, 1024, 0x0708d1a2
-1, 25088, 25088, 512, 1024, 0xd7230db9
-1, 25600, 25600, 512, 1024, 0xbb0779ca
-1, 26112, 26112, 512, 1024, 0xc6094e1b
-1, 26624, 26624, 512, 1024, 0x15a8b039
+1, 24564, 24564, 512, 1024, 0x0708d1a2
+1, 25071, 25071, 512, 1024, 0xd7230db9
+1, 25578, 25578, 512, 1024, 0xbb0779ca
+1, 26107, 26107, 512, 1024, 0xc6094e1b
+1, 26614, 26614, 512, 1024, 0x15a8b039
0, 1222, 1222, 0, 6942, 0x9ad105c6
-1, 27136, 27136, 512, 1024, 0xd6dbe88c
-1, 27648, 27648, 512, 1024, 0x7e8d1140
-1, 28160, 28160, 512, 1024, 0xef88e525
-1, 28672, 28672, 512, 1024, 0x44e21149
-1, 29184, 29184, 512, 1024, 0x65b0f5f4
+1, 27122, 27122, 512, 1024, 0xd6dbe88c
+1, 27629, 27629, 512, 1024, 0x7e8d1140
+1, 28158, 28158, 512, 1024, 0xef88e525
+1, 28665, 28665, 512, 1024, 0x44e21149
+1, 29172, 29172, 512, 1024, 0x65b0f5f4
0, 1333, 1333, 0, 6926, 0xe239dad6
-1, 29696, 29696, 512, 1024, 0xb955f687
-1, 30208, 30208, 512, 1024, 0xc85fba9c
-1, 30720, 30720, 512, 1024, 0xf59655ad
-1, 31232, 31232, 512, 1024, 0x6de80bf1
-1, 31744, 31744, 512, 1024, 0x2dcf6e41
+1, 29679, 29679, 512, 1024, 0xb955f687
+1, 30186, 30186, 512, 1024, 0xc85fba9c
+1, 30716, 30716, 512, 1024, 0xf59655ad
+1, 31223, 31223, 512, 1024, 0x6de80bf1
+1, 31730, 31730, 512, 1024, 0x2dcf6e41
0, 1444, 1444, 0, 6966, 0x81dcfab1
-1, 32256, 32256, 512, 1024, 0xd0ddcf8a
-1, 32768, 32768, 512, 1024, 0x00135c2d
-1, 33280, 33280, 512, 1024, 0x697f8efd
-1, 33792, 33792, 512, 1024, 0x7a9bada5
+1, 32237, 32237, 512, 1024, 0xd0ddcf8a
+1, 32766, 32766, 512, 1024, 0x00135c2d
+1, 33273, 33273, 512, 1024, 0x697f8efd
+1, 33781, 33781, 512, 1024, 0x7a9bada5
0, 1555, 1555, 0, 6896, 0x31e6cc02
-1, 34304, 34304, 512, 1024, 0x0d22783c
-1, 34816, 34816, 512, 1024, 0x7726d07d
-1, 35328, 35328, 512, 1024, 0xa2f14f67
-1, 35840, 35840, 512, 1024, 0x7f51060d
-1, 36352, 36352, 512, 1024, 0xc4ec6aea
+1, 34288, 34288, 512, 1024, 0x0d22783c
+1, 34795, 34795, 512, 1024, 0x7726d07d
+1, 35324, 35324, 512, 1024, 0xa2f14f67
+1, 35831, 35831, 512, 1024, 0x7f51060d
+1, 36338, 36338, 512, 1024, 0xc4ec6aea
0, 1666, 1666, 0, 6889, 0x1cc1006e
-1, 36864, 36864, 512, 1024, 0x9bb37ca4
-1, 37376, 37376, 512, 1024, 0x9b085577
-1, 37888, 37888, 512, 1024, 0x8812f8af
-1, 38400, 38400, 512, 1024, 0x788f5221
-1, 38912, 38912, 512, 1024, 0x3a2ce642
+1, 36846, 36846, 512, 1024, 0x9bb37ca4
+1, 37375, 37375, 512, 1024, 0x9b085577
+1, 37882, 37882, 512, 1024, 0x8812f8af
+1, 38389, 38389, 512, 1024, 0x788f5221
+1, 38896, 38896, 512, 1024, 0x3a2ce642
0, 1777, 1777, 0, 6933, 0xc303f87f
-1, 39424, 39424, 512, 1024, 0x72415692
-1, 39936, 39936, 512, 1024, 0xe3dcc105
-1, 40448, 40448, 512, 1024, 0xb26c0599
-1, 40960, 40960, 512, 1024, 0x5c9e55eb
-1, 41472, 41472, 512, 1024, 0x8fe88707
+1, 39403, 39403, 512, 1024, 0x72415692
+1, 39933, 39933, 512, 1024, 0xe3dcc105
+1, 40440, 40440, 512, 1024, 0xb26c0599
+1, 40947, 40947, 512, 1024, 0x5c9e55eb
+1, 41454, 41454, 512, 1024, 0x8fe88707
0, 1888, 1888, 0, 7034, 0xb4970a20
-1, 41984, 41984, 512, 1024, 0xc5d7beb6
-1, 42496, 42496, 512, 1024, 0xe1d3a3b4
-1, 43008, 43008, 512, 1024, 0x012da0c6
-1, 43520, 43520, 512, 1024, 0x8d010922
-1, 44032, 44032, 512, 1024, 0x3366eb0d
+1, 41983, 41983, 512, 1024, 0xc5d7beb6
+1, 42490, 42490, 512, 1024, 0xe1d3a3b4
+1, 42998, 42998, 512, 1024, 0x012da0c6
+1, 43505, 43505, 512, 1024, 0x8d010922
+1, 44012, 44012, 512, 1024, 0x3366eb0d
0, 1999, 1999, 0, 6961, 0xf064095d
-1, 44544, 44544, 512, 1024, 0xc9381a27
-1, 45056, 45056, 512, 1024, 0x0774f685
-1, 45568, 45568, 512, 1024, 0xc5cae0a5
-1, 46080, 46080, 512, 1024, 0xa6f4737c
+1, 44541, 44541, 512, 1024, 0xc9381a27
+1, 45048, 45048, 512, 1024, 0x0774f685
+1, 45555, 45555, 512, 1024, 0xc5cae0a5
+1, 46062, 46062, 512, 1024, 0xa6f4737c
0, 2111, 2111, 0, 7089, 0x5ba350f9
1, 46592, 46592, 512, 1024, 0x8fb6d0d1
-1, 47104, 47104, 512, 1024, 0x05f579c2
-1, 47616, 47616, 512, 1024, 0x56905d99
-1, 48128, 48128, 512, 1024, 0x002ee18d
-1, 48640, 48640, 512, 1024, 0xeb37ef51
+1, 47099, 47099, 512, 1024, 0x05f579c2
+1, 47606, 47606, 512, 1024, 0x56905d99
+1, 48113, 48113, 512, 1024, 0x002ee18d
+1, 48620, 48620, 512, 1024, 0xeb37ef51
0, 2222, 2222, 0, 7078, 0xa83f3e88
-1, 49152, 49152, 512, 1024, 0x38025635
-1, 49664, 49664, 512, 1024, 0x4fe643c8
-1, 50176, 50176, 512, 1024, 0x11d66ab1
-1, 50688, 50688, 512, 1024, 0xcc3051e9
-1, 51200, 51200, 512, 1024, 0xcd93e854
+1, 49149, 49149, 512, 1024, 0x38025635
+1, 49657, 49657, 512, 1024, 0x4fe643c8
+1, 50164, 50164, 512, 1024, 0x11d66ab1
+1, 50671, 50671, 512, 1024, 0xcc3051e9
+1, 51178, 51178, 512, 1024, 0xcd93e854
0, 2333, 2333, 0, 7147, 0xcda66cfc
-1, 51712, 51712, 512, 1024, 0x38f1196d
-1, 52224, 52224, 512, 1024, 0x657a15fc
-1, 52736, 52736, 512, 1024, 0x669ce2a9
-1, 53248, 53248, 512, 1024, 0x95862dda
-1, 53760, 53760, 512, 1024, 0x1726a7b2
+1, 51707, 51707, 512, 1024, 0x38f1196d
+1, 52214, 52214, 512, 1024, 0x657a15fc
+1, 52722, 52722, 512, 1024, 0x669ce2a9
+1, 53229, 53229, 512, 1024, 0x95862dda
+1, 53758, 53758, 512, 1024, 0x1726a7b2
0, 2444, 2444, 0, 7173, 0xb7455859
-1, 54272, 54272, 512, 1024, 0xd6ece2a1
-1, 54784, 54784, 512, 1024, 0x33ab9553
-1, 55296, 55296, 512, 1024, 0xd50c73a6
-1, 55808, 55808, 512, 1024, 0xfe25b63a
-1, 56320, 56320, 512, 1024, 0x7e2959e3
+1, 54265, 54265, 512, 1024, 0xd6ece2a1
+1, 54772, 54772, 512, 1024, 0x33ab9553
+1, 55279, 55279, 512, 1024, 0xd50c73a6
+1, 55786, 55786, 512, 1024, 0xfe25b63a
+1, 56316, 56316, 512, 1024, 0x7e2959e3
0, 2555, 2555, 0, 7213, 0x97b89994
-1, 56832, 56832, 512, 1024, 0xa4c07b34
-1, 57344, 57344, 512, 1024, 0xd6d8f15c
-1, 57856, 57856, 512, 1024, 0x1eccddd7
-1, 58368, 58368, 512, 1024, 0x2b69f9cb
+1, 56823, 56823, 512, 1024, 0xa4c07b34
+1, 57330, 57330, 512, 1024, 0xd6d8f15c
+1, 57837, 57837, 512, 1024, 0x1eccddd7
+1, 58366, 58366, 512, 1024, 0x2b69f9cb
0, 2666, 2666, 0, 7170, 0xca8b2948
-1, 58880, 58880, 512, 1024, 0x667b775f
-1, 59392, 59392, 512, 1024, 0xad3b84e9
-1, 59904, 59904, 512, 1024, 0x4f29fc67
-1, 60416, 60416, 512, 1024, 0x8d611ab7
-1, 60928, 60928, 512, 1024, 0x278966ea
+1, 58874, 58874, 512, 1024, 0x667b775f
+1, 59381, 59381, 512, 1024, 0xad3b84e9
+1, 59888, 59888, 512, 1024, 0x4f29fc67
+1, 60395, 60395, 512, 1024, 0x8d611ab7
+1, 60924, 60924, 512, 1024, 0x278966ea
0, 2777, 2777, 0, 7174, 0xc7cc6bbb
-1, 61440, 61440, 512, 1024, 0xaf33812b
-1, 61952, 61952, 512, 1024, 0xa55f4265
-1, 62464, 62464, 512, 1024, 0x023cb51c
-1, 62976, 62976, 512, 1024, 0x1d1f1005
-1, 63488, 63488, 512, 1024, 0x874cccf7
+1, 61431, 61431, 512, 1024, 0xaf33812b
+1, 61938, 61938, 512, 1024, 0xa55f4265
+1, 62446, 62446, 512, 1024, 0x023cb51c
+1, 62975, 62975, 512, 1024, 0x1d1f1005
+1, 63482, 63482, 512, 1024, 0x874cccf7
0, 2888, 2888, 0, 7235, 0xc2e68d2b
-1, 64000, 64000, 512, 1024, 0xda705428
-1, 64512, 64512, 512, 1024, 0x48d9b440
-1, 65024, 65024, 512, 1024, 0xa14e0712
-1, 65536, 65536, 512, 1024, 0x7efbad1f
-1, 66048, 66048, 512, 1024, 0xdb82c17f
+1, 63989, 63989, 512, 1024, 0xda705428
+1, 64496, 64496, 512, 1024, 0x48d9b440
+1, 65003, 65003, 512, 1024, 0xa14e0712
+1, 65533, 65533, 512, 1024, 0x7efbad1f
+1, 66040, 66040, 512, 1024, 0xdb82c17f
0, 3000, 3000, 0, 7261, 0x8204a423
-1, 66560, 66560, 512, 1024, 0xcbe87613
-1, 67072, 67072, 512, 1024, 0x3a63df1d
-1, 67584, 67584, 512, 1024, 0xd5636bba
-1, 68096, 68096, 512, 1024, 0x9397af23
+1, 66547, 66547, 512, 1024, 0xcbe87613
+1, 67054, 67054, 512, 1024, 0x3a63df1d
+1, 67583, 67583, 512, 1024, 0xd5636bba
+1, 68090, 68090, 512, 1024, 0x9397af23
0, 3111, 3111, 0, 7353, 0xacc7e7c0
-1, 68608, 68608, 512, 1024, 0x32a07c98
-1, 69120, 69120, 512, 1024, 0x202ca667
-1, 69632, 69632, 512, 1024, 0xdf969011
-1, 70144, 70144, 512, 1024, 0xc434d238
-1, 70656, 70656, 512, 1024, 0xe9ad7562
+1, 68598, 68598, 512, 1024, 0x32a07c98
+1, 69105, 69105, 512, 1024, 0x202ca667
+1, 69612, 69612, 512, 1024, 0xdf969011
+1, 70141, 70141, 512, 1024, 0xc434d238
+1, 70648, 70648, 512, 1024, 0xe9ad7562
0, 3222, 3222, 0, 7065, 0x45035c5c
-1, 71168, 71168, 512, 1024, 0xb51b6b50
-1, 71680, 71680, 512, 1024, 0xe70aecd3
+1, 71155, 71155, 512, 1024, 0xb51b6b50
+1, 71662, 71662, 512, 1024, 0xe70aecd3
1, 72192, 72192, 512, 1024, 0x03c816b2
-1, 72704, 72704, 512, 1024, 0x869fdf25
-1, 73216, 73216, 512, 1024, 0xd40a0a62
+1, 72699, 72699, 512, 1024, 0x869fdf25
+1, 73206, 73206, 512, 1024, 0xd40a0a62
0, 3333, 3333, 0, 7269, 0x72edbb76
-1, 73728, 73728, 512, 1024, 0x5af7dd35
-1, 74240, 74240, 512, 1024, 0x891ffc72
-1, 74752, 74752, 512, 1024, 0x1ff68a08
-1, 75264, 75264, 512, 1024, 0x5a7517a9
-1, 75776, 75776, 512, 1024, 0x0f959f74
+1, 73713, 73713, 512, 1024, 0x5af7dd35
+1, 74220, 74220, 512, 1024, 0x891ffc72
+1, 74750, 74750, 512, 1024, 0x1ff68a08
+1, 75257, 75257, 512, 1024, 0x5a7517a9
+1, 75764, 75764, 512, 1024, 0x0f959f74
0, 3444, 3444, 0, 7220, 0xb926772f
-1, 76288, 76288, 512, 1024, 0xe92a12a2
-1, 76800, 76800, 512, 1024, 0x38000e55
-1, 77312, 77312, 512, 1024, 0x39fbdd70
-1, 77824, 77824, 512, 1024, 0xca3d9184
-1, 78336, 78336, 512, 1024, 0x66c8995b
+1, 76271, 76271, 512, 1024, 0xe92a12a2
+1, 76778, 76778, 512, 1024, 0x38000e55
+1, 77307, 77307, 512, 1024, 0x39fbdd70
+1, 77814, 77814, 512, 1024, 0xca3d9184
+1, 78322, 78322, 512, 1024, 0x66c8995b
0, 3555, 3555, 0, 7326, 0x0a66c632
-1, 78848, 78848, 512, 1024, 0xac25acea
-1, 79360, 79360, 512, 1024, 0x3cd1046c
-1, 79872, 79872, 512, 1024, 0x6a1df31c
-1, 80384, 80384, 512, 1024, 0x21ca10a1
+1, 78829, 78829, 512, 1024, 0xac25acea
+1, 79358, 79358, 512, 1024, 0x3cd1046c
+1, 79865, 79865, 512, 1024, 0x6a1df31c
+1, 80372, 80372, 512, 1024, 0x21ca10a1
0, 3666, 3666, 0, 7225, 0xe39076ab
-1, 80896, 80896, 512, 1024, 0x1aeccedc
-1, 81408, 81408, 512, 1024, 0xddea1335
-1, 81920, 81920, 512, 1024, 0x19f5ca9f
-1, 82432, 82432, 512, 1024, 0x88e95e43
-1, 82944, 82944, 512, 1024, 0x726284fe
+1, 80879, 80879, 512, 1024, 0x1aeccedc
+1, 81387, 81387, 512, 1024, 0xddea1335
+1, 81916, 81916, 512, 1024, 0x19f5ca9f
+1, 82423, 82423, 512, 1024, 0x88e95e43
+1, 82930, 82930, 512, 1024, 0x726284fe
0, 3777, 3777, 0, 7265, 0xe0209036
-1, 83456, 83456, 512, 1024, 0x6b85b40e
-1, 83968, 83968, 512, 1024, 0x111fee2a
-1, 84480, 84480, 512, 1024, 0x3656b588
-1, 84992, 84992, 512, 1024, 0xa5a2b552
-1, 85504, 85504, 512, 1024, 0x38fb2467
+1, 83437, 83437, 512, 1024, 0x6b85b40e
+1, 83966, 83966, 512, 1024, 0x111fee2a
+1, 84474, 84474, 512, 1024, 0x3656b588
+1, 84981, 84981, 512, 1024, 0xa5a2b552
+1, 85488, 85488, 512, 1024, 0x38fb2467
0, 3888, 3888, 0, 7337, 0x7a5dc093
-1, 86016, 86016, 512, 1024, 0xaa919ccc
-1, 86528, 86528, 512, 1024, 0x15993dbc
-1, 87040, 87040, 512, 1024, 0xbe01a7b9
-1, 87552, 87552, 512, 1024, 0xefe93c09
-1, 88064, 88064, 512, 1024, 0x1bb566e5
+1, 85995, 85995, 512, 1024, 0xaa919ccc
+1, 86524, 86524, 512, 1024, 0x15993dbc
+1, 87031, 87031, 512, 1024, 0xbe01a7b9
+1, 87538, 87538, 512, 1024, 0xefe93c09
+1, 88046, 88046, 512, 1024, 0x1bb566e5
0, 4000, 4000, 0, 7246, 0x519a7a3c
-1, 88576, 88576, 512, 1024, 0x15ce6237
-1, 89088, 89088, 512, 1024, 0xa8552e66
-1, 89600, 89600, 512, 1024, 0x9d80187e
-1, 90112, 90112, 512, 1024, 0x5df3fc30
-1, 90624, 90624, 512, 1024, 0x1a312aa5
+1, 88575, 88575, 512, 1024, 0x15ce6237
+1, 89082, 89082, 512, 1024, 0xa8552e66
+1, 89589, 89589, 512, 1024, 0x9d80187e
+1, 90096, 90096, 512, 1024, 0x5df3fc30
+1, 90603, 90603, 512, 1024, 0x1a312aa5
0, 4111, 4111, 0, 7266, 0x352c8078
-1, 91136, 91136, 512, 1024, 0x6bb8e302
-1, 91648, 91648, 512, 1024, 0xbd9684bb
-1, 92160, 92160, 512, 1024, 0x78b0b166
-1, 92672, 92672, 512, 1024, 0xd9af5eae
+1, 91133, 91133, 512, 1024, 0x6bb8e302
+1, 91640, 91640, 512, 1024, 0xbd9684bb
+1, 92147, 92147, 512, 1024, 0x78b0b166
+1, 92654, 92654, 512, 1024, 0xd9af5eae
0, 4222, 4222, 0, 7323, 0xcaf69d7c
-1, 93184, 93184, 512, 1024, 0xdb90fe82
-1, 93696, 93696, 512, 1024, 0x327614e9
-1, 94208, 94208, 512, 1024, 0x1f19b7fe
-1, 94720, 94720, 512, 1024, 0x46c53f96
-1, 95232, 95232, 512, 1024, 0x921b2189
+1, 93183, 93183, 512, 1024, 0xdb90fe82
+1, 93690, 93690, 512, 1024, 0x327614e9
+1, 94198, 94198, 512, 1024, 0x1f19b7fe
+1, 94705, 94705, 512, 1024, 0x46c53f96
+1, 95212, 95212, 512, 1024, 0x921b2189
0, 4333, 4333, 0, 7309, 0x98c1e6f7
-1, 95744, 95744, 512, 1024, 0xa8fbc85a
-1, 96256, 96256, 512, 1024, 0xabfdaaae
-1, 96768, 96768, 512, 1024, 0x6acc7387
-1, 97280, 97280, 512, 1024, 0x0d9c27b5
+1, 95741, 95741, 512, 1024, 0xa8fbc85a
+1, 96248, 96248, 512, 1024, 0xabfdaaae
+1, 96755, 96755, 512, 1024, 0x6acc7387
+1, 97263, 97263, 512, 1024, 0x0d9c27b5
1, 97792, 97792, 512, 1024, 0xba4dd809
0, 4444, 4444, 0, 7121, 0x913d5bd6
-1, 98304, 98304, 512, 1024, 0x2a2ad521
-1, 98816, 98816, 512, 1024, 0x892de38a
-1, 99328, 99328, 512, 1024, 0xdc97a2eb
-1, 99840, 99840, 512, 1024, 0x4f614ca4
-1, 100352, 100352, 512, 1024, 0x9c8a77ea
+1, 98299, 98299, 512, 1024, 0x2a2ad521
+1, 98806, 98806, 512, 1024, 0x892de38a
+1, 99313, 99313, 512, 1024, 0xdc97a2eb
+1, 99820, 99820, 512, 1024, 0x4f614ca4
+1, 100350, 100350, 512, 1024, 0x9c8a77ea
0, 4555, 4555, 111, 7088, 0x56302362
-1, 100864, 100864, 512, 1024, 0x2d30e646
-1, 101376, 101376, 512, 1024, 0x74e800a7
-1, 101888, 101888, 512, 1024, 0x1e01fb02
-1, 102400, 102400, 512, 1024, 0x4ed2c1d8
+1, 100857, 100857, 512, 1024, 0x2d30e646
+1, 101364, 101364, 512, 1024, 0x74e800a7
+1, 101871, 101871, 512, 1024, 0x1e01fb02
+1, 102378, 102378, 512, 1024, 0x4ed2c1d8
0, 4666, 4666, 111, 7104, 0xc0d14f78
-1, 102912, 102912, 512, 1024, 0xf2fdbe63
-1, 103424, 103424, 512, 1024, 0x8d6f63a1
-1, 103936, 103936, 512, 1024, 0xded468d9
-1, 104448, 104448, 512, 1024, 0xccad839e
-1, 104960, 104960, 512, 1024, 0xdde7c082
+1, 102907, 102907, 512, 1024, 0xf2fdbe63
+1, 103414, 103414, 512, 1024, 0x8d6f63a1
+1, 103922, 103922, 512, 1024, 0xded468d9
+1, 104429, 104429, 512, 1024, 0xccad839e
+1, 104958, 104958, 512, 1024, 0xdde7c082
0, 4777, 4777, 111, 7169, 0xd03c825b
-1, 105472, 105472, 512, 1024, 0x548613c5
-1, 105984, 105984, 512, 1024, 0x383909bd
-1, 106496, 106496, 512, 1024, 0xfd37627b
-1, 107008, 107008, 512, 1024, 0x6d95a481
-1, 107520, 107520, 512, 1024, 0x56aa87fa
+1, 105465, 105465, 512, 1024, 0x548613c5
+1, 105972, 105972, 512, 1024, 0x383909bd
+1, 106479, 106479, 512, 1024, 0xfd37627b
+1, 106987, 106987, 512, 1024, 0x6d95a481
+1, 107516, 107516, 512, 1024, 0x56aa87fa
0, 4888, 4888, 111, 7038, 0x1ecc201d
-1, 108032, 108032, 512, 1024, 0x7b67258c
-1, 108544, 108544, 512, 1024, 0x7dd99a92
-1, 109056, 109056, 512, 1024, 0x4a66d102
-1, 109568, 109568, 512, 1024, 0x7b3fce51
-1, 110080, 110080, 512, 1024, 0xbbd968aa
+1, 108023, 108023, 512, 1024, 0x7b67258c
+1, 108530, 108530, 512, 1024, 0x7dd99a92
+1, 109037, 109037, 512, 1024, 0x4a66d102
+1, 109566, 109566, 512, 1024, 0x7b3fce51
+1, 110074, 110074, 512, 1024, 0xbbd968aa
0, 5000, 5000, 111, 7015, 0x83c94454
-1, 110592, 110592, 512, 1024, 0x8283ec36
-1, 111104, 111104, 512, 1024, 0x3c96493d
-1, 111616, 111616, 512, 1024, 0xfa4f8cf8
-1, 112128, 112128, 512, 1024, 0xe2cf872d
-1, 112640, 112640, 512, 1024, 0x0a9e7aa6
+1, 110581, 110581, 512, 1024, 0x8283ec36
+1, 111088, 111088, 512, 1024, 0x3c96493d
+1, 111595, 111595, 512, 1024, 0xfa4f8cf8
+1, 112124, 112124, 512, 1024, 0xe2cf872d
+1, 112631, 112631, 512, 1024, 0x0a9e7aa6
0, 5111, 5111, 111, 6983, 0x9e51f54d
-1, 113152, 113152, 512, 1024, 0x6e7a0550
-1, 113664, 113664, 512, 1024, 0x3acfea2f
-1, 114176, 114176, 512, 1024, 0x7111d0fa
-1, 114688, 114688, 512, 1024, 0xe9a1eca9
+1, 113139, 113139, 512, 1024, 0x6e7a0550
+1, 113646, 113646, 512, 1024, 0x3acfea2f
+1, 114175, 114175, 512, 1024, 0x7111d0fa
+1, 114682, 114682, 512, 1024, 0xe9a1eca9
0, 5222, 5222, 111, 7088, 0x70d33de1
-1, 115200, 115200, 512, 1024, 0x24da6c46
-1, 115712, 115712, 512, 1024, 0x117cff37
-1, 116224, 116224, 512, 1024, 0x0f27cab6
-1, 116736, 116736, 512, 1024, 0x69b6b4e6
-1, 117248, 117248, 512, 1024, 0x1e6cc841
+1, 115189, 115189, 512, 1024, 0x24da6c46
+1, 115696, 115696, 512, 1024, 0x117cff37
+1, 116204, 116204, 512, 1024, 0x0f27cab6
+1, 116733, 116733, 512, 1024, 0x69b6b4e6
+1, 117240, 117240, 512, 1024, 0x1e6cc841
0, 5333, 5333, 111, 7096, 0x4d0f81b5
-1, 117760, 117760, 512, 1024, 0xb01e2365
-1, 118272, 118272, 512, 1024, 0x14e200d3
-1, 118784, 118784, 512, 1024, 0xd1184c98
-1, 119296, 119296, 512, 1024, 0xef9140e9
-1, 119808, 119808, 512, 1024, 0x4cbb645e
+1, 117747, 117747, 512, 1024, 0xb01e2365
+1, 118254, 118254, 512, 1024, 0x14e200d3
+1, 118783, 118783, 512, 1024, 0xd1184c98
+1, 119290, 119290, 512, 1024, 0xef9140e9
+1, 119798, 119798, 512, 1024, 0x4cbb645e
0, 5444, 5444, 111, 7106, 0xd1a83ddc
-1, 120320, 120320, 512, 1024, 0xe7fe2f06
-1, 120832, 120832, 512, 1024, 0xf8c45028
-1, 121344, 121344, 512, 1024, 0x561358f4
-1, 121856, 121856, 512, 1024, 0xd0129b77
-1, 122368, 122368, 512, 1024, 0xcc636e88
+1, 120305, 120305, 512, 1024, 0xe7fe2f06
+1, 120812, 120812, 512, 1024, 0xf8c45028
+1, 121341, 121341, 512, 1024, 0x561358f4
+1, 121848, 121848, 512, 1024, 0xd0129b77
+1, 122355, 122355, 512, 1024, 0xcc636e88
0, 5555, 5555, 111, 7219, 0x20f47fe4
-1, 122880, 122880, 512, 1024, 0xe9406321
+1, 122863, 122863, 512, 1024, 0xe9406321
1, 123392, 123392, 512, 1024, 0x9f16a041
-1, 123904, 123904, 512, 1024, 0x468bf409
-1, 124416, 124416, 512, 1024, 0x3df70f7b
-1, 124928, 124928, 512, 1024, 0xa880b11b
+1, 123899, 123899, 512, 1024, 0x468bf409
+1, 124406, 124406, 512, 1024, 0x3df70f7b
+1, 124913, 124913, 512, 1024, 0xa880b11b
0, 5666, 5666, 111, 7184, 0x45dc6a0e
-1, 125440, 125440, 512, 1024, 0x3286c489
-1, 125952, 125952, 512, 1024, 0x39fe9ebc
-1, 126464, 126464, 512, 1024, 0xc533d83b
-1, 126976, 126976, 512, 1024, 0x153b195d
+1, 125420, 125420, 512, 1024, 0x3286c489
+1, 125950, 125950, 512, 1024, 0x39fe9ebc
+1, 126457, 126457, 512, 1024, 0xc533d83b
+1, 126964, 126964, 512, 1024, 0x153b195d
0, 5777, 5777, 111, 7222, 0x488c6499
-1, 127488, 127488, 512, 1024, 0xd84786a1
-1, 128000, 128000, 512, 1024, 0xdc295aaa
-1, 128512, 128512, 512, 1024, 0xfb764d8c
-1, 129024, 129024, 512, 1024, 0xeebc9db9
-1, 129536, 129536, 512, 1024, 0x7ba9403e
+1, 127471, 127471, 512, 1024, 0xd84786a1
+1, 127978, 127978, 512, 1024, 0xdc295aaa
+1, 128507, 128507, 512, 1024, 0xfb764d8c
+1, 129015, 129015, 512, 1024, 0xeebc9db9
+1, 129522, 129522, 512, 1024, 0x7ba9403e
0, 5888, 5888, 111, 7254, 0xbd097ba7
-1, 130048, 130048, 512, 1024, 0x4e5571ec
-1, 130560, 130560, 512, 1024, 0xd965fad4
-1, 131072, 131072, 512, 1024, 0x87e259f2
-1, 131584, 131584, 512, 1024, 0xae7e533b
-1, 132096, 132096, 512, 1024, 0x313cf4d6
+1, 130029, 130029, 512, 1024, 0x4e5571ec
+1, 130558, 130558, 512, 1024, 0xd965fad4
+1, 131065, 131065, 512, 1024, 0x87e259f2
+1, 131572, 131572, 512, 1024, 0xae7e533b
+1, 132080, 132080, 512, 1024, 0x313cf4d6
0, 6000, 6000, 111, 7189, 0x46e06d43
-1, 132608, 132608, 512, 1024, 0xe1844c90
-1, 133120, 133120, 512, 1024, 0xbb057b44
-1, 133632, 133632, 512, 1024, 0xa5099687
-1, 134144, 134144, 512, 1024, 0xbff10707
-1, 134656, 134656, 512, 1024, 0x37c4ffc0
+1, 132587, 132587, 512, 1024, 0xe1844c90
+1, 133116, 133116, 512, 1024, 0xbb057b44
+1, 133623, 133623, 512, 1024, 0xa5099687
+1, 134130, 134130, 512, 1024, 0xbff10707
+1, 134637, 134637, 512, 1024, 0x37c4ffc0
0, 6111, 6111, 111, 7283, 0x19dd7319
-1, 135168, 135168, 512, 1024, 0xf9fb6caa
-1, 135680, 135680, 512, 1024, 0x3b6a3a1f
-1, 136192, 136192, 512, 1024, 0x83431edb
-1, 136704, 136704, 512, 1024, 0x1eb713cf
+1, 135166, 135166, 512, 1024, 0xf9fb6caa
+1, 135674, 135674, 512, 1024, 0x3b6a3a1f
+1, 136181, 136181, 512, 1024, 0x83431edb
+1, 136688, 136688, 512, 1024, 0x1eb713cf
+1, 137195, 137195, 512, 1024, 0xd7b07a6d
0, 6222, 6222, 111, 7161, 0x23171d02
-1, 137216, 137216, 512, 1024, 0xd7b07a6d
-1, 137728, 137728, 512, 1024, 0x81ae3391
-1, 138240, 138240, 512, 1024, 0xf150130a
-1, 138752, 138752, 512, 1024, 0x09678eaa
-1, 139264, 139264, 512, 1024, 0xb94e06f1
+1, 137724, 137724, 512, 1024, 0x81ae3391
+1, 138231, 138231, 512, 1024, 0xf150130a
+1, 138739, 138739, 512, 1024, 0x09678eaa
+1, 139246, 139246, 512, 1024, 0xb94e06f1
0, 6333, 6333, 111, 6976, 0xcc610c26
-1, 139776, 139776, 512, 1024, 0x67b1dbc9
-1, 140288, 140288, 512, 1024, 0xd6edc235
-1, 140800, 140800, 512, 1024, 0x34e4c499
-1, 141312, 141312, 512, 1024, 0xeefd89c0
-1, 141824, 141824, 512, 1024, 0x38afdaf1
+1, 139775, 139775, 512, 1024, 0x67b1dbc9
+1, 140282, 140282, 512, 1024, 0xd6edc235
+1, 140789, 140789, 512, 1024, 0x34e4c499
+1, 141296, 141296, 512, 1024, 0xeefd89c0
+1, 141804, 141804, 512, 1024, 0x38afdaf1
0, 6444, 6444, 111, 7056, 0x6cd917b0
-1, 142336, 142336, 512, 1024, 0x29a60d76
-1, 142848, 142848, 512, 1024, 0xe28a4372
-1, 143360, 143360, 512, 1024, 0x7089454d
-1, 143872, 143872, 512, 1024, 0x0c01bb7b
-1, 144384, 144384, 512, 1024, 0xbd776a72
+1, 142333, 142333, 512, 1024, 0x29a60d76
+1, 142840, 142840, 512, 1024, 0xe28a4372
+1, 143347, 143347, 512, 1024, 0x7089454d
+1, 143854, 143854, 512, 1024, 0x0c01bb7b
+1, 144383, 144383, 512, 1024, 0xbd776a72
0, 6555, 6555, 111, 6736, 0x02b78951
-1, 144896, 144896, 512, 1024, 0x86776fd0
-1, 145408, 145408, 512, 1024, 0xb37c88f7
-1, 145920, 145920, 512, 1024, 0x5f90aaf8
-1, 146432, 146432, 512, 1024, 0x203d4222
-1, 146944, 146944, 512, 1024, 0x382692a6
+1, 144891, 144891, 512, 1024, 0x86776fd0
+1, 145398, 145398, 512, 1024, 0xb37c88f7
+1, 145905, 145905, 512, 1024, 0x5f90aaf8
+1, 146412, 146412, 512, 1024, 0x203d4222
+1, 146941, 146941, 512, 1024, 0x382692a6
0, 6666, 6666, 111, 6540, 0x767e0854
-1, 147456, 147456, 512, 1024, 0xf37c95fd
-1, 147968, 147968, 512, 1024, 0x6c0b8877
-1, 148480, 148480, 512, 1024, 0x2e54a8b6
+1, 147448, 147448, 512, 1024, 0xf37c95fd
+1, 147956, 147956, 512, 1024, 0x6c0b8877
+1, 148463, 148463, 512, 1024, 0x2e54a8b6
1, 148992, 148992, 512, 1024, 0x7f266488
0, 6777, 6777, 111, 6170, 0xc84962fb
-1, 149504, 149504, 512, 1024, 0xfbf20f9a
-1, 150016, 150016, 512, 1024, 0xf2985cc0
-1, 150528, 150528, 512, 1024, 0xc7075340
-1, 151040, 151040, 512, 1024, 0xe4585695
-1, 151552, 151552, 512, 1024, 0xbdffa380
+1, 149499, 149499, 512, 1024, 0xfbf20f9a
+1, 150006, 150006, 512, 1024, 0xf2985cc0
+1, 150513, 150513, 512, 1024, 0xc7075340
+1, 151020, 151020, 512, 1024, 0xe4585695
+1, 151550, 151550, 512, 1024, 0xbdffa380
0, 6888, 6888, 111, 6169, 0x27e06c03
-1, 152064, 152064, 512, 1024, 0x2422a8a9
-1, 152576, 152576, 512, 1024, 0x59cbd75f
-1, 153088, 153088, 512, 1024, 0x04ad1a8c
-1, 153600, 153600, 512, 1024, 0x33c09191
-1, 154112, 154112, 512, 1024, 0x55efa6fd
+1, 152057, 152057, 512, 1024, 0x2422a8a9
+1, 152564, 152564, 512, 1024, 0x59cbd75f
+1, 153071, 153071, 512, 1024, 0x04ad1a8c
+1, 153578, 153578, 512, 1024, 0x33c09191
+1, 154107, 154107, 512, 1024, 0x55efa6fd
0, 7000, 7000, 111, 5864, 0xd14db83f
-1, 154624, 154624, 512, 1024, 0xf73d0e5d
-1, 155136, 155136, 512, 1024, 0x6141ebae
-1, 155648, 155648, 512, 1024, 0x7db17a68
-1, 156160, 156160, 512, 1024, 0xa6c690b6
-1, 156672, 156672, 512, 1024, 0xa6fd6725
+1, 154615, 154615, 512, 1024, 0xf73d0e5d
+1, 155122, 155122, 512, 1024, 0x6141ebae
+1, 155629, 155629, 512, 1024, 0x7db17a68
+1, 156158, 156158, 512, 1024, 0xa6c690b6
+1, 156665, 156665, 512, 1024, 0xa6fd6725
0, 7111, 7111, 111, 5375, 0x4a21055d
-1, 157184, 157184, 512, 1024, 0x50a90b9b
-1, 157696, 157696, 512, 1024, 0xef990dc8
-1, 158208, 158208, 512, 1024, 0x75adf6b5
-1, 158720, 158720, 512, 1024, 0x61eac43e
-1, 159232, 159232, 512, 1024, 0x67797a19
+1, 157172, 157172, 512, 1024, 0x50a90b9b
+1, 157680, 157680, 512, 1024, 0xef990dc8
+1, 158187, 158187, 512, 1024, 0x75adf6b5
+1, 158716, 158716, 512, 1024, 0x61eac43e
+1, 159223, 159223, 512, 1024, 0x67797a19
0, 7222, 7222, 111, 5206, 0x95ead3cb
-1, 159744, 159744, 512, 1024, 0xf325277a
-1, 160256, 160256, 512, 1024, 0x18bf254a
-1, 160768, 160768, 512, 1024, 0x2ce6bee3
-1, 161280, 161280, 512, 1024, 0x8d320860
+1, 159730, 159730, 512, 1024, 0xf325277a
+1, 160237, 160237, 512, 1024, 0x18bf254a
+1, 160767, 160767, 512, 1024, 0x2ce6bee3
+1, 161274, 161274, 512, 1024, 0x8d320860
0, 7333, 7333, 111, 5220, 0xcfdcc37e
-1, 161792, 161792, 512, 1024, 0xc979b6e8
-1, 162304, 162304, 512, 1024, 0xdb644b41
-1, 162816, 162816, 512, 1024, 0xe1b368ba
-1, 163328, 163328, 512, 1024, 0xacc53d15
-1, 163840, 163840, 512, 1024, 0x42ea8c18
+1, 161781, 161781, 512, 1024, 0xc979b6e8
+1, 162288, 162288, 512, 1024, 0xdb644b41
+1, 162795, 162795, 512, 1024, 0xe1b368ba
+1, 163324, 163324, 512, 1024, 0xacc53d15
+1, 163832, 163832, 512, 1024, 0x42ea8c18
0, 7444, 7444, 111, 4946, 0x2d864a77
-1, 164352, 164352, 512, 1024, 0xe52c99a4
-1, 164864, 164864, 512, 1024, 0xd7db54a6
-1, 165376, 165376, 512, 1024, 0x7f27a7e3
-1, 165888, 165888, 512, 1024, 0xf7ffeaa9
-1, 166400, 166400, 512, 1024, 0x792b6088
+1, 164339, 164339, 512, 1024, 0xe52c99a4
+1, 164846, 164846, 512, 1024, 0xd7db54a6
+1, 165375, 165375, 512, 1024, 0x7f27a7e3
+1, 165882, 165882, 512, 1024, 0xf7ffeaa9
+1, 166389, 166389, 512, 1024, 0x792b6088
0, 7555, 7555, 111, 4390, 0x2ab9f462
-1, 166912, 166912, 512, 1024, 0x61d99724
-1, 167424, 167424, 512, 1024, 0x5213720e
-1, 167936, 167936, 512, 1024, 0xac09dd30
-1, 168448, 168448, 512, 1024, 0x960bf6bb
-1, 168960, 168960, 512, 1024, 0xc90168e1
+1, 166896, 166896, 512, 1024, 0x61d99724
+1, 167404, 167404, 512, 1024, 0x5213720e
+1, 167933, 167933, 512, 1024, 0xac09dd30
+1, 168440, 168440, 512, 1024, 0x960bf6bb
+1, 168947, 168947, 512, 1024, 0xc90168e1
0, 7666, 7666, 111, 4051, 0x1d09592e
-1, 169472, 169472, 512, 1024, 0x43b45768
-1, 169984, 169984, 512, 1024, 0x935d60a1
-1, 170496, 170496, 512, 1024, 0x9a342ef2
-1, 171008, 171008, 512, 1024, 0xc894709f
+1, 169454, 169454, 512, 1024, 0x43b45768
+1, 169983, 169983, 512, 1024, 0x935d60a1
+1, 170491, 170491, 512, 1024, 0x9a342ef2
+1, 170998, 170998, 512, 1024, 0xc894709f
0, 7777, 7777, 111, 3680, 0x39bd6a12
-1, 171520, 171520, 512, 1024, 0x59b43b07
-1, 172032, 172032, 512, 1024, 0x36a1a98d
-1, 172544, 172544, 512, 1024, 0x9e1a121c
-1, 173056, 173056, 512, 1024, 0x02208b78
-1, 173568, 173568, 512, 1024, 0xd1d7b274
+1, 171505, 171505, 512, 1024, 0x59b43b07
+1, 172012, 172012, 512, 1024, 0x36a1a98d
+1, 172541, 172541, 512, 1024, 0x9e1a121c
+1, 173048, 173048, 512, 1024, 0x02208b78
+1, 173556, 173556, 512, 1024, 0xd1d7b274
0, 7888, 7888, 111, 2910, 0x6337ece9
-1, 174080, 174080, 512, 1024, 0xdacd5096
+1, 174063, 174063, 512, 1024, 0xdacd5096
1, 174592, 174592, 512, 1024, 0x51b71ead
-1, 175104, 175104, 512, 1024, 0xd009a7ca
-1, 175616, 175616, 512, 1024, 0xb6d5a938
-1, 176128, 176128, 512, 1024, 0xf3d45e47
+1, 175099, 175099, 512, 1024, 0xd009a7ca
+1, 175606, 175606, 512, 1024, 0xb6d5a938
+1, 176113, 176113, 512, 1024, 0xf3d45e47
0, 8000, 8000, 111, 2153, 0xf4e3bc17
-1, 176640, 176640, 512, 1024, 0xea8e04fc
-1, 177152, 177152, 512, 1024, 0x0b928bd8
-1, 177664, 177664, 512, 1024, 0x0f02caec
-1, 178176, 178176, 512, 1024, 0xe2b137a8
-1, 178688, 178688, 512, 1024, 0xd5f94892
+1, 176620, 176620, 512, 1024, 0xea8e04fc
+1, 177150, 177150, 512, 1024, 0x0b928bd8
+1, 177657, 177657, 512, 1024, 0x0f02caec
+1, 178164, 178164, 512, 1024, 0xe2b137a8
+1, 178671, 178671, 512, 1024, 0xd5f94892
diff --git a/tests/ref/fate/truemotion1-15 b/tests/ref/fate/truemotion1-15
index 3f1a6de562..9e7f9c8d8c 100644
--- a/tests/ref/fate/truemotion1-15
+++ b/tests/ref/fate/truemotion1-15
@@ -16,205 +16,205 @@
0, 6, 6, 1, 161280, 0x79d717ae
1, 18956, 18956, 2708, 10832, 0x401ed099
0, 7, 7, 1, 161280, 0x1a87e2cb
-1, 21664, 21664, 2708, 10832, 0x432a53bd
+1, 21665, 21665, 2708, 10832, 0x432a53bd
0, 8, 8, 1, 161280, 0xe5c000ac
-1, 24372, 24372, 2708, 10832, 0xc4276bfd
+1, 24373, 24373, 2708, 10832, 0xc4276bfd
0, 9, 9, 1, 161280, 0xa5827077
-1, 27080, 27080, 2708, 10832, 0x51f0fa8c
+1, 27081, 27081, 2708, 10832, 0x51f0fa8c
0, 10, 10, 1, 161280, 0xfd0615ee
-1, 29788, 29788, 2708, 10832, 0xcebae622
+1, 29789, 29789, 2708, 10832, 0xcebae622
0, 11, 11, 1, 161280, 0xc6fdc861
-1, 32496, 32496, 2708, 10832, 0xe9f6dc1f
-1, 35204, 35204, 2708, 10832, 0xda087fee
+1, 32497, 32497, 2708, 10832, 0xe9f6dc1f
+1, 35205, 35205, 2708, 10832, 0xda087fee
0, 12, 12, 1, 161280, 0xaa007c7e
-1, 37912, 37912, 2708, 10832, 0x67a621bb
+1, 37913, 37913, 2708, 10832, 0x67a621bb
0, 13, 13, 1, 161280, 0xf15e3a96
-1, 40620, 40620, 2708, 10832, 0xd7be207f
+1, 40621, 40621, 2708, 10832, 0xd7be207f
0, 14, 14, 1, 161280, 0xce827ae1
-1, 43328, 43328, 2708, 10832, 0x19d32507
+1, 43329, 43329, 2708, 10832, 0x19d32507
0, 15, 15, 1, 161280, 0xf379fc13
-1, 46036, 46036, 2708, 10832, 0xe1a3fbfa
+1, 46037, 46037, 2708, 10832, 0xe1a3fbfa
0, 16, 16, 1, 161280, 0x89686a0c
-1, 48744, 48744, 2708, 10832, 0xd10df779
+1, 48745, 48745, 2708, 10832, 0xd10df779
0, 17, 17, 1, 161280, 0x7e8342bd
-1, 51452, 51452, 2708, 10832, 0x4428e1a7
+1, 51453, 51453, 2708, 10832, 0x4428e1a7
0, 18, 18, 1, 161280, 0x640dab86
-1, 54160, 54160, 2708, 10832, 0x7ea9b33d
+1, 54161, 54161, 2708, 10832, 0x7ea9b33d
0, 19, 19, 1, 161280, 0xc6a86456
-1, 56868, 56868, 2708, 10832, 0x6852a5a5
+1, 56869, 56869, 2708, 10832, 0x6852a5a5
0, 20, 20, 1, 161280, 0xe360b538
-1, 59576, 59576, 2708, 10832, 0xfeb78863
+1, 59578, 59578, 2708, 10832, 0xfeb78863
0, 21, 21, 1, 161280, 0xbcc21064
-1, 62284, 62284, 2708, 10832, 0xf157f928
+1, 62286, 62286, 2708, 10832, 0xf157f928
0, 22, 22, 1, 161280, 0x95bc4e63
-1, 64992, 64992, 2708, 10832, 0x86414b3e
+1, 64994, 64994, 2708, 10832, 0x86414b3e
0, 23, 23, 1, 161280, 0x390fa1bd
-1, 67700, 67700, 2708, 10832, 0x2e28cdf6
-1, 70408, 70408, 2708, 10832, 0x00212e44
+1, 67702, 67702, 2708, 10832, 0x2e28cdf6
+1, 70410, 70410, 2708, 10832, 0x00212e44
0, 24, 24, 1, 161280, 0xa35b3bb9
-1, 73116, 73116, 2708, 10832, 0x2d7f9378
+1, 73118, 73118, 2708, 10832, 0x2d7f9378
0, 25, 25, 1, 161280, 0x730b0779
-1, 75824, 75824, 2708, 10832, 0x84cb25d7
+1, 75826, 75826, 2708, 10832, 0x84cb25d7
0, 26, 26, 1, 161280, 0xf3c3a3eb
-1, 78532, 78532, 2708, 10832, 0x3aca41fa
+1, 78534, 78534, 2708, 10832, 0x3aca41fa
0, 27, 27, 1, 161280, 0x676ecbaa
-1, 81240, 81240, 2708, 10832, 0x27ad34b9
+1, 81242, 81242, 2708, 10832, 0x27ad34b9
0, 28, 28, 1, 161280, 0x06c4a4e5
-1, 83948, 83948, 2708, 10832, 0xe665144a
+1, 83950, 83950, 2708, 10832, 0xe665144a
0, 29, 29, 1, 161280, 0x177d26d9
-1, 86656, 86656, 2708, 10832, 0xf9546626
+1, 86658, 86658, 2708, 10832, 0xf9546626
0, 30, 30, 1, 161280, 0xdaf69ebe
-1, 89364, 89364, 2708, 10832, 0xe71c4f22
+1, 89366, 89366, 2708, 10832, 0xe71c4f22
0, 31, 31, 1, 161280, 0xabadc296
-1, 92072, 92072, 2708, 10832, 0x5e61869c
+1, 92074, 92074, 2708, 10832, 0x5e61869c
0, 32, 32, 1, 161280, 0xec144665
-1, 94780, 94780, 2708, 10832, 0x571d2c10
+1, 94782, 94782, 2708, 10832, 0x571d2c10
0, 33, 33, 1, 161280, 0x6785aa48
-1, 97488, 97488, 2708, 10832, 0xf0e08cd5
+1, 97490, 97490, 2708, 10832, 0xf0e08cd5
0, 34, 34, 1, 161280, 0x2a0cfcaf
-1, 100196, 100196, 2708, 10832, 0x66650e49
+1, 100199, 100199, 2708, 10832, 0x66650e49
0, 35, 35, 1, 161280, 0x9288d513
-1, 102904, 102904, 2708, 10832, 0x4024deaf
-1, 105612, 105612, 2708, 10832, 0xda7bdb14
+1, 102907, 102907, 2708, 10832, 0x4024deaf
+1, 105615, 105615, 2708, 10832, 0xda7bdb14
0, 36, 36, 1, 161280, 0x1d295ad0
-1, 108320, 108320, 2708, 10832, 0xc27a342f
+1, 108323, 108323, 2708, 10832, 0xc27a342f
0, 37, 37, 1, 161280, 0xb9fd8406
-1, 111028, 111028, 2708, 10832, 0x574fe679
+1, 111031, 111031, 2708, 10832, 0x574fe679
0, 38, 38, 1, 161280, 0x98bced49
-1, 113736, 113736, 2708, 10832, 0x37db464e
+1, 113739, 113739, 2708, 10832, 0x37db464e
0, 39, 39, 1, 161280, 0x42e6fbae
-1, 116444, 116444, 2708, 10832, 0xb1fa2a83
+1, 116447, 116447, 2708, 10832, 0xb1fa2a83
0, 40, 40, 1, 161280, 0xfd218209
-1, 119152, 119152, 2708, 10832, 0x3d98d9b7
+1, 119155, 119155, 2708, 10832, 0x3d98d9b7
0, 41, 41, 1, 161280, 0x21c2ef31
-1, 121860, 121860, 2708, 10832, 0xb7c908e2
+1, 121863, 121863, 2708, 10832, 0xb7c908e2
0, 42, 42, 1, 161280, 0xce4be932
-1, 124568, 124568, 2708, 10832, 0x9f7e44d8
+1, 124571, 124571, 2708, 10832, 0x9f7e44d8
0, 43, 43, 1, 161280, 0xd5c0d5fc
-1, 127276, 127276, 2708, 10832, 0xae9b8774
+1, 127279, 127279, 2708, 10832, 0xae9b8774
0, 44, 44, 1, 161280, 0xf8d13076
-1, 129984, 129984, 2708, 10832, 0x36916e3f
+1, 129987, 129987, 2708, 10832, 0x36916e3f
0, 45, 45, 1, 161280, 0xdbf86007
-1, 132692, 132692, 2708, 10832, 0xd785f5ef
+1, 132695, 132695, 2708, 10832, 0xd785f5ef
0, 46, 46, 1, 161280, 0x9475a651
-1, 135400, 135400, 2708, 10832, 0x2a3a5673
-1, 138108, 138108, 2708, 10832, 0x7320e379
+1, 135403, 135403, 2708, 10832, 0x2a3a5673
+1, 138112, 138112, 2708, 10832, 0x7320e379
0, 47, 47, 1, 161280, 0x41bf1542
-1, 140816, 140816, 2708, 10832, 0xec787be5
+1, 140820, 140820, 2708, 10832, 0xec787be5
0, 48, 48, 1, 161280, 0x6945297f
-1, 143524, 143524, 2708, 10832, 0xd0d13aa0
+1, 143528, 143528, 2708, 10832, 0xd0d13aa0
0, 49, 49, 1, 161280, 0x2282025e
-1, 146232, 146232, 2708, 10832, 0x34dfcb17
+1, 146236, 146236, 2708, 10832, 0x34dfcb17
0, 50, 50, 1, 161280, 0x55aace0c
-1, 148940, 148940, 2708, 10832, 0x1a9c29f1
+1, 148944, 148944, 2708, 10832, 0x1a9c29f1
0, 51, 51, 1, 161280, 0xc78aa51c
-1, 151648, 151648, 2708, 10832, 0x3e73dcc1
+1, 151652, 151652, 2708, 10832, 0x3e73dcc1
0, 52, 52, 1, 161280, 0xb4b84e6c
-1, 154356, 154356, 2708, 10832, 0x7855b053
+1, 154360, 154360, 2708, 10832, 0x7855b053
0, 53, 53, 1, 161280, 0x3bbb3e44
-1, 157064, 157064, 2708, 10832, 0x5588df8f
+1, 157068, 157068, 2708, 10832, 0x5588df8f
0, 54, 54, 1, 161280, 0x4dd89d80
-1, 159772, 159772, 2708, 10832, 0x6f621299
+1, 159776, 159776, 2708, 10832, 0x6f621299
0, 55, 55, 1, 161280, 0xa446a5c5
-1, 162480, 162480, 2708, 10832, 0xce7f39c2
+1, 162484, 162484, 2708, 10832, 0xce7f39c2
0, 56, 56, 1, 161280, 0x8f56b1d6
-1, 165188, 165188, 2708, 10832, 0xd88e6552
+1, 165192, 165192, 2708, 10832, 0xd88e6552
0, 57, 57, 1, 161280, 0xa170df87
-1, 167896, 167896, 2708, 10832, 0xddc63597
+1, 167900, 167900, 2708, 10832, 0xddc63597
0, 58, 58, 1, 161280, 0x4740a4df
-1, 170604, 170604, 2708, 10832, 0xe3071865
-1, 173312, 173312, 2708, 10832, 0x2a44a123
+1, 170608, 170608, 2708, 10832, 0xe3071865
+1, 173316, 173316, 2708, 10832, 0x2a44a123
0, 59, 59, 1, 161280, 0x86608ee7
-1, 176020, 176020, 2708, 10832, 0x08d85d45
+1, 176024, 176024, 2708, 10832, 0x08d85d45
0, 60, 60, 1, 161280, 0x629b4543
-1, 178728, 178728, 2708, 10832, 0x4dc5f83a
+1, 178733, 178733, 2708, 10832, 0x4dc5f83a
0, 61, 61, 1, 161280, 0x697fb952
-1, 181436, 181436, 2708, 10832, 0x89497812
+1, 181441, 181441, 2708, 10832, 0x89497812
0, 62, 62, 1, 161280, 0x98e84a51
-1, 184144, 184144, 2708, 10832, 0x9ee1db54
+1, 184149, 184149, 2708, 10832, 0x9ee1db54
0, 63, 63, 1, 161280, 0x97949a90
-1, 186852, 186852, 2708, 10832, 0x5277d611
+1, 186857, 186857, 2708, 10832, 0x5277d611
0, 64, 64, 1, 161280, 0x6a8c9b96
-1, 189560, 189560, 2708, 10832, 0x570a619c
+1, 189565, 189565, 2708, 10832, 0x570a619c
0, 65, 65, 1, 161280, 0xafa714ab
-1, 192268, 192268, 2708, 10832, 0xa217d70f
+1, 192273, 192273, 2708, 10832, 0xa217d70f
0, 66, 66, 1, 161280, 0x0cf39314
-1, 194976, 194976, 2708, 10832, 0x6f0ecbf4
+1, 194981, 194981, 2708, 10832, 0x6f0ecbf4
0, 67, 67, 1, 161280, 0x9ccc8171
-1, 197684, 197684, 2708, 10832, 0x2704b114
+1, 197689, 197689, 2708, 10832, 0x2704b114
0, 68, 68, 1, 161280, 0x8232d5a8
-1, 200392, 200392, 2708, 10832, 0xf24e679f
+1, 200397, 200397, 2708, 10832, 0xf24e679f
0, 69, 69, 1, 161280, 0x250dd5cb
-1, 203100, 203100, 2708, 10832, 0x05572099
+1, 203105, 203105, 2708, 10832, 0x05572099
0, 70, 70, 1, 161280, 0xf764e43a
-1, 205808, 205808, 2708, 10832, 0x33942d0c
-1, 208516, 208516, 2708, 10832, 0xa77ea674
+1, 205813, 205813, 2708, 10832, 0x33942d0c
+1, 208521, 208521, 2708, 10832, 0xa77ea674
0, 71, 71, 1, 161280, 0x2f4bec00
-1, 211224, 211224, 2708, 10832, 0xeba663bc
+1, 211229, 211229, 2708, 10832, 0xeba663bc
0, 72, 72, 1, 161280, 0x76f1598b
-1, 213932, 213932, 2708, 10832, 0x1338524a
+1, 213937, 213937, 2708, 10832, 0x1338524a
0, 73, 73, 1, 161280, 0xa91b84da
-1, 216640, 216640, 2708, 10832, 0x6182b0b3
+1, 216645, 216645, 2708, 10832, 0x6182b0b3
0, 74, 74, 1, 161280, 0x011a77fb
-1, 219348, 219348, 2708, 10832, 0xa410a364
+1, 219354, 219354, 2708, 10832, 0xa410a364
0, 75, 75, 1, 161280, 0xdbf5341c
-1, 222056, 222056, 2708, 10832, 0x2f4374b0
+1, 222062, 222062, 2708, 10832, 0x2f4374b0
0, 76, 76, 1, 161280, 0x40d5abfa
-1, 224764, 224764, 2708, 10832, 0xf41f3a07
+1, 224770, 224770, 2708, 10832, 0xf41f3a07
0, 77, 77, 1, 161280, 0x9fb8360c
-1, 227472, 227472, 2708, 10832, 0x2b1c50c6
+1, 227478, 227478, 2708, 10832, 0x2b1c50c6
0, 78, 78, 1, 161280, 0xabc5fba8
-1, 230180, 230180, 2708, 10832, 0x3692ac89
+1, 230186, 230186, 2708, 10832, 0x3692ac89
0, 79, 79, 1, 161280, 0x98090909
-1, 232888, 232888, 2708, 10832, 0x5d6bc87e
+1, 232894, 232894, 2708, 10832, 0x5d6bc87e
0, 80, 80, 1, 161280, 0x9a3613bd
-1, 235596, 235596, 2708, 10832, 0x1b1cda0c
+1, 235602, 235602, 2708, 10832, 0x1b1cda0c
0, 81, 81, 1, 161280, 0x9071024f
-1, 238304, 238304, 2708, 10832, 0x11eaa15f
-1, 241012, 241012, 2708, 10832, 0x73c7d7ef
+1, 238310, 238310, 2708, 10832, 0x11eaa15f
+1, 241018, 241018, 2708, 10832, 0x73c7d7ef
0, 82, 82, 1, 161280, 0x4df39487
-1, 243720, 243720, 2708, 10832, 0x65d7e3be
+1, 243726, 243726, 2708, 10832, 0x65d7e3be
0, 83, 83, 1, 161280, 0x17658524
-1, 246428, 246428, 2708, 10832, 0xb9c00688
+1, 246434, 246434, 2708, 10832, 0xb9c00688
0, 84, 84, 1, 161280, 0xbcd794df
-1, 249136, 249136, 2708, 10832, 0x0b98c125
+1, 249142, 249142, 2708, 10832, 0x0b98c125
0, 85, 85, 1, 161280, 0x2a14ae05
-1, 251844, 251844, 2708, 10832, 0x331ed413
+1, 251850, 251850, 2708, 10832, 0x331ed413
0, 86, 86, 1, 161280, 0x664feab2
-1, 254552, 254552, 2708, 10832, 0x9b68f485
+1, 254558, 254558, 2708, 10832, 0x9b68f485
0, 87, 87, 1, 161280, 0xf6b721f4
-1, 257260, 257260, 2708, 10832, 0x1b865c55
+1, 257267, 257267, 2708, 10832, 0x1b865c55
0, 88, 88, 1, 161280, 0xfec565f3
-1, 259968, 259968, 2708, 10832, 0x68cef565
+1, 259975, 259975, 2708, 10832, 0x68cef565
0, 89, 89, 1, 161280, 0xd39aabee
-1, 262676, 262676, 2708, 10832, 0x3a605f15
+1, 262683, 262683, 2708, 10832, 0x3a605f15
0, 90, 90, 1, 161280, 0x1f3d5de7
-1, 265384, 265384, 2708, 10832, 0xd72ff22e
+1, 265391, 265391, 2708, 10832, 0xd72ff22e
0, 91, 91, 1, 161280, 0xaf97f50c
-1, 268092, 268092, 2708, 10832, 0x1c672b67
+1, 268099, 268099, 2708, 10832, 0x1c672b67
0, 92, 92, 1, 161280, 0xe34b6b6a
-1, 270800, 270800, 2708, 10832, 0xfd1a7e7e
+1, 270807, 270807, 2708, 10832, 0xfd1a7e7e
0, 93, 93, 1, 161280, 0x4117371e
-1, 273508, 273508, 2708, 10832, 0x9bf20ead
-1, 276216, 276216, 2708, 10832, 0x00000000
+1, 273515, 273515, 2708, 10832, 0x9bf20ead
+1, 276223, 276223, 2708, 10832, 0x00000000
0, 94, 94, 1, 161280, 0x4117371e
-1, 278924, 278924, 2708, 10832, 0x00000000
+1, 278931, 278931, 2708, 10832, 0x00000000
0, 95, 95, 1, 161280, 0xe555b55e
-1, 281632, 281632, 2708, 10832, 0x00000000
+1, 281639, 281639, 2708, 10832, 0x00000000
0, 96, 96, 1, 161280, 0xe555b55e
-1, 284340, 284340, 2708, 10832, 0x00000000
+1, 284347, 284347, 2708, 10832, 0x00000000
0, 97, 97, 1, 161280, 0xe555b55e
-1, 287048, 287048, 2708, 10832, 0x00000000
+1, 287055, 287055, 2708, 10832, 0x00000000
0, 98, 98, 1, 161280, 0xe555b55e
-1, 289756, 289756, 2708, 10832, 0x00000000
+1, 289763, 289763, 2708, 10832, 0x00000000
0, 99, 99, 1, 161280, 0xe555b55e
-1, 292464, 292464, 2708, 10832, 0x00000000
+1, 292471, 292471, 2708, 10832, 0x00000000
0, 100, 100, 1, 161280, 0xe555b55e
-1, 295172, 295172, 2708, 10832, 0x00000000
+1, 295179, 295179, 2708, 10832, 0x00000000
0, 101, 101, 1, 161280, 0xe555b55e
-1, 297880, 297880, 2708, 10832, 0x00000000
+1, 297888, 297888, 2708, 10832, 0x00000000
0, 102, 102, 1, 161280, 0xe555b55e
-1, 300588, 300588, 2708, 10832, 0x00000000
+1, 300596, 300596, 2708, 10832, 0x00000000
0, 103, 103, 1, 161280, 0xe555b55e
-1, 303296, 303296, 2708, 10832, 0x00000000
+1, 303304, 303304, 2708, 10832, 0x00000000
0, 104, 104, 1, 161280, 0xe555b55e
diff --git a/tests/ref/fate/truemotion1-24 b/tests/ref/fate/truemotion1-24
index 6b92cacdfb..b41293b542 100644
--- a/tests/ref/fate/truemotion1-24
+++ b/tests/ref/fate/truemotion1-24
@@ -16,31 +16,31 @@
0, 6, 6, 1, 69120, 0x433bb6f6
1, 18956, 18956, 2708, 10832, 0x88f5271a
0, 7, 7, 1, 69120, 0xdbac8bee
-1, 21664, 21664, 2708, 10832, 0x55c6bbe5
+1, 21665, 21665, 2708, 10832, 0x55c6bbe5
0, 8, 8, 1, 69120, 0x88e2a799
-1, 24372, 24372, 2708, 10832, 0x9b51ae82
+1, 24373, 24373, 2708, 10832, 0x9b51ae82
0, 9, 9, 1, 69120, 0x49617b26
-1, 27080, 27080, 2708, 10832, 0xcdf2409b
+1, 27081, 27081, 2708, 10832, 0xcdf2409b
0, 10, 10, 1, 69120, 0xeb44ca01
-1, 29788, 29788, 2708, 10832, 0x0933b1a4
+1, 29789, 29789, 2708, 10832, 0x0933b1a4
0, 11, 11, 1, 69120, 0x6fea37e8
-1, 32496, 32496, 2708, 10832, 0x24b77006
-1, 35204, 35204, 2708, 10832, 0xf612fa8a
+1, 32497, 32497, 2708, 10832, 0x24b77006
+1, 35205, 35205, 2708, 10832, 0xf612fa8a
0, 12, 12, 1, 69120, 0xf55d74c7
-1, 37912, 37912, 2708, 10832, 0x99884b06
+1, 37913, 37913, 2708, 10832, 0x99884b06
0, 13, 13, 1, 69120, 0xb5082ca7
-1, 40620, 40620, 2708, 10832, 0x3c746fbe
+1, 40621, 40621, 2708, 10832, 0x3c746fbe
0, 14, 14, 1, 69120, 0x5876d758
-1, 43328, 43328, 2708, 10832, 0x05f3b08a
+1, 43329, 43329, 2708, 10832, 0x05f3b08a
0, 15, 15, 1, 69120, 0x45e7dd5c
-1, 46036, 46036, 2708, 10832, 0xa6560483
-1, 48744, 48744, 2708, 10832, 0xd98a8e19
-1, 51452, 51452, 2708, 10832, 0xf98a0b2e
-1, 54160, 54160, 2708, 10832, 0xb1039582
-1, 56868, 56868, 2708, 10832, 0x85dd5c3f
-1, 59576, 59576, 2708, 10832, 0x19fc801a
-1, 62284, 62284, 2708, 10832, 0x95805089
-1, 64992, 64992, 2708, 10832, 0x576fdec3
-1, 67700, 67700, 2708, 10832, 0x704a0905
-1, 70408, 70408, 2708, 10832, 0xf87ce1fa
-1, 73116, 73116, 2708, 10832, 0xfc0076b9
+1, 46037, 46037, 2708, 10832, 0xa6560483
+1, 48745, 48745, 2708, 10832, 0xd98a8e19
+1, 51453, 51453, 2708, 10832, 0xf98a0b2e
+1, 54161, 54161, 2708, 10832, 0xb1039582
+1, 56869, 56869, 2708, 10832, 0x85dd5c3f
+1, 59578, 59578, 2708, 10832, 0x19fc801a
+1, 62286, 62286, 2708, 10832, 0x95805089
+1, 64994, 64994, 2708, 10832, 0x576fdec3
+1, 67702, 67702, 2708, 10832, 0x704a0905
+1, 70410, 70410, 2708, 10832, 0xf87ce1fa
+1, 73118, 73118, 2708, 10832, 0xfc0076b9