1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Merge commit 'b2c087871dafc7d030b2d48457ddff597dfd4925'

* commit 'b2c087871dafc7d030b2d48457ddff597dfd4925':
  Move x86util.asm from libavcodec/ to libavutil/.
  Move x86inc.asm to libavutil/.
  APIchanges: note error_recognition in lavf
  lavf: add support for error_recognition, use it in avidec, and bump minor API version
  avconv: change semantics of -map
  avconv: get rid of new* options.
  cmdutils: allow precisely specifying a stream for AVOptions.
  configure: add missing CFLAGS to fix building on the HURD
  libx264: Include hint for possible values for configuring libx264
  cmdutils: allow ':'-separated modifiers in option names.
  avconv: make -map_metadata work consistently with the other options
  avconv: remove deprecated options.
  avconv: make -map_chapters accept only the input file index.
  Make a copy of ffmpeg under a new name -- avconv.
  ffmpeg: add a warning stating that the program is deprecated.
  Add weighted motion compensation for RV40 B-frames
  RV3/4: calculate B-frame motion weights once per frame
  Move RV3/4-specific DSP functions into their own context
  mjpeg: propagate decode errors from ff_mjpeg_decode_sos and ff_mjpeg_decode_dqt
  h264: notice memory allocation failure

Conflicts:
	.gitignore
	Makefile
	cmdutils.c
	configure
	doc/ffplay.texi
	doc/ffprobe.texi
	doc/ffserver.texi
	libavcodec/libx264.c
	libavformat/avformat.h
	libavformat/avidec.c
	libavformat/version.h
	tests/lavf-regression.sh
	tests/lavfi-regression.sh

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2011-08-13 02:16:44 +02:00
commit 0cb233cf46
61 changed files with 6209 additions and 411 deletions

1
.gitignore vendored
View File

@ -16,6 +16,7 @@ ffmpeg
ffplay
ffprobe
ffserver
avconv
libavcodec/*_tablegen
libavcodec/*_tables.c
libavcodec/*_tables.h

View File

@ -10,6 +10,7 @@ vpath %.texi $(SRC_PATH)
PROGS-$(CONFIG_FFMPEG) += ffmpeg
PROGS-$(CONFIG_AVCONV) += avconv
PROGS-$(CONFIG_FFPLAY) += ffplay
PROGS-$(CONFIG_FFPROBE) += ffprobe
PROGS-$(CONFIG_FFSERVER) += ffserver
@ -22,7 +23,7 @@ HOSTPROGS := $(TESTTOOLS:%=tests/%)
TOOLS = qt-faststart trasher
TOOLS-$(CONFIG_ZLIB) += cws2fws
BASENAMES = ffmpeg ffplay ffprobe ffserver
BASENAMES = ffmpeg avconv ffplay ffprobe ffserver
ALLPROGS = $(BASENAMES:%=%$(EXESUF))
ALLPROGS_G = $(BASENAMES:%=%_g$(EXESUF))
ALLMANPAGES = $(BASENAMES:%=%.1)

4447
avconv.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -141,8 +141,11 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, int
}
static const OptionDef* find_option(const OptionDef *po, const char *name){
const char *p = strchr(name, ':');
int len = p ? p - name : strlen(name);
while (po->name != NULL) {
if (!strcmp(name, po->name))
if (!strncmp(name, po->name, len) && strlen(po->name) == len)
break;
po++;
}
@ -288,7 +291,14 @@ unknown_opt:
int opt_default(const char *opt, const char *arg)
{
const AVOption *oc, *of, *os;
if ((oc = av_opt_find(avcodec_opts[0], opt, NULL, 0, AV_OPT_SEARCH_CHILDREN)) ||
char opt_stripped[128];
const char *p;
if (!(p = strchr(opt, ':')))
p = opt + strlen(opt);
av_strlcpy(opt_stripped, opt, FFMIN(sizeof(opt_stripped), p - opt + 1));
if ((oc = av_opt_find(avcodec_opts[0], opt_stripped, NULL, 0, AV_OPT_SEARCH_CHILDREN)) ||
((opt[0] == 'v' || opt[0] == 'a' || opt[0] == 's') &&
(oc = av_opt_find(avcodec_opts[0], opt+1, NULL, 0, 0))))
av_dict_set(&codec_opts, opt, arg, FLAGS(oc));
@ -741,9 +751,9 @@ FILE *get_preset_file(char *filename, size_t filename_size,
{
FILE *f = NULL;
int i;
const char *base[3]= { getenv("FFMPEG_DATADIR"),
const char *base[3]= { getenv("AVCONV_DATADIR"),
getenv("HOME"),
FFMPEG_DATADIR,
AVCONV_DATADIR,
};
if (is_path) {
@ -770,11 +780,11 @@ FILE *get_preset_file(char *filename, size_t filename_size,
for (i = 0; i < 3 && !f; i++) {
if (!base[i])
continue;
snprintf(filename, filename_size, "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", preset_name);
snprintf(filename, filename_size, "%s%s/%s.ffpreset", base[i], i != 1 ? "" : "/.avconv", preset_name);
f = fopen(filename, "r");
if (!f && codec_name) {
snprintf(filename, filename_size,
"%s%s/%s-%s.ffpreset", base[i], i != 1 ? "" : "/.ffmpeg", codec_name, preset_name);
"%s%s/%s-%s.ffpreset", base[i], i != 1 ? "" : "/.avconv", codec_name, preset_name);
f = fopen(filename, "r");
}
}
@ -783,12 +793,42 @@ FILE *get_preset_file(char *filename, size_t filename_size,
return f;
}
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, int encoder)
int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
{
if (*spec <= '9' && *spec >= '0') /* opt:index */
return strtol(spec, NULL, 0) == st->index;
else if (*spec == 'v' || *spec == 'a' || *spec == 's' || *spec == 'd') { /* opt:[vasd] */
enum AVMediaType type;
switch (*spec++) {
case 'v': type = AVMEDIA_TYPE_VIDEO; break;
case 'a': type = AVMEDIA_TYPE_AUDIO; break;
case 's': type = AVMEDIA_TYPE_SUBTITLE; break;
case 'd': type = AVMEDIA_TYPE_DATA; break;
}
if (type != st->codec->codec_type)
return 0;
if (*spec++ == ':') { /* possibly followed by :index */
int i, index = strtol(spec, NULL, 0);
for (i = 0; i < s->nb_streams; i++)
if (s->streams[i]->codec->codec_type == type && index-- == 0)
return i == st->index;
return 0;
}
return 1;
} else if (!*spec) /* empty specifier, matches everything */
return 1;
av_log(s, AV_LOG_ERROR, "Invalid stream specifier: %s.\n", spec);
return AVERROR(EINVAL);
}
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, AVFormatContext *s, AVStream *st)
{
AVDictionary *ret = NULL;
AVDictionaryEntry *t = NULL;
AVCodec *codec = encoder ? avcodec_find_encoder(codec_id) : avcodec_find_decoder(codec_id);
int flags = encoder ? AV_OPT_FLAG_ENCODING_PARAM : AV_OPT_FLAG_DECODING_PARAM;
AVCodec *codec = s->oformat ? avcodec_find_encoder(codec_id) : avcodec_find_decoder(codec_id);
int flags = s->oformat ? AV_OPT_FLAG_ENCODING_PARAM : AV_OPT_FLAG_DECODING_PARAM;
char prefix = 0;
if (!codec)
@ -801,11 +841,24 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, int e
}
while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) {
char *p = strchr(t->key, ':');
/* check stream specification in opt name */
if (p)
switch (check_stream_specifier(s, st, p + 1)) {
case 1: *p = 0; break;
case 0: continue;
default: return NULL;
}
if (av_opt_find(avcodec_opts[0], t->key, NULL, flags, 0) ||
(codec && codec->priv_class && av_opt_find(&codec->priv_class, t->key, NULL, flags, 0)))
av_dict_set(&ret, t->key, t->value, 0);
else if (t->key[0] == prefix && av_opt_find(avcodec_opts[0], t->key+1, NULL, flags, 0))
av_dict_set(&ret, t->key+1, t->value, 0);
if (p)
*p = ':';
}
return ret;
}
@ -823,7 +876,7 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *cod
return NULL;
}
for (i = 0; i < s->nb_streams; i++)
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codec->codec_id, 0);
opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codec->codec_id, s, s->streams[i]);
return opts;
}

View File

@ -152,16 +152,28 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, int
void parse_options(int argc, char **argv, const OptionDef *options,
int (* parse_arg_function)(const char *opt, const char *arg));
/**
* Check if the given stream matches a stream specifier.
*
* @param s Corresponding format context.
* @param st Stream from s to be checked.
* @param spec A stream specifier of the [v|a|s|d]:[<stream index>] form.
*
* @return 1 if the stream matches, 0 if it doesn't, <0 on error
*/
int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec);
/**
* Filter out options for given codec.
*
* Create a new options dictionary containing only the options from
* opts which apply to the codec with ID codec_id.
*
* @param encoder if non-zero the codec is an encoder, otherwise is a decoder
* @param s Corresponding format context.
* @param st A stream from s for which the options should be filtered.
* @return a pointer to the created dictionary
*/
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, int encoder);
AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, AVFormatContext *s, AVStream *st);
/**
* Setup AVCodecContext options for avformat_find_stream_info().

11
configure vendored
View File

@ -65,7 +65,7 @@ Standard options:
--disable-logging do not log configure debug information
--prefix=PREFIX install in PREFIX [$prefix]
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
--datadir=DIR install data files in DIR [PREFIX/share/avconv]
--libdir=DIR install libs in DIR [PREFIX/lib]
--shlibdir=DIR install shared libs in DIR [PREFIX/lib]
--incdir=DIR install includes in DIR [PREFIX/include]
@ -81,6 +81,7 @@ Configuration options:
and binaries will be unredistributable [no]
--disable-doc do not build documentation
--disable-ffmpeg disable ffmpeg build
--disable-avconv disable avconv build
--disable-ffplay disable ffplay build
--disable-ffprobe disable ffprobe build
--disable-ffserver disable ffserver build
@ -917,6 +918,7 @@ CONFIG_LIST="
dxva2
fastdiv
ffmpeg
avconv
ffplay
ffprobe
ffserver
@ -1522,6 +1524,8 @@ postproc_deps="gpl"
# programs
ffmpeg_deps="avcodec avformat swscale"
ffmpeg_select="buffer_filter buffersink_filter"
av_deps="avcodec avformat swscale"
av_select="buffer_filter"
ffplay_deps="avcodec avformat swscale sdl"
ffplay_select="buffersink_filter rdft"
ffprobe_deps="avcodec avformat"
@ -1628,7 +1632,7 @@ logfile="config.log"
# installation paths
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
datadir_default='${prefix}/share/ffmpeg'
datadir_default='${prefix}/share/avconv'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
@ -1670,6 +1674,7 @@ enable debug
enable doc
enable fastdiv
enable ffmpeg
enable avconv
enable ffplay
enable ffprobe
enable ffserver
@ -2532,6 +2537,7 @@ case $target_os in
add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
;;
gnu)
add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
;;
qnx)
add_cppflags -D_QNX_SOURCE
@ -3370,6 +3376,7 @@ cat > $TMPH <<EOF
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
#define FFMPEG_LICENSE "$(c_escape $license)"
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
#define CC_TYPE "$cc_type"
#define CC_VERSION $cc_version
#define restrict $_restrict

View File

@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first:
2011-08-06 - 2f63440 - lavf 53.4.0
Add error_recognition to AVFormatContext.
2011-08-02 - 9d39cbf - lavc 53.7.1
Add AV_PKT_FLAG_CORRUPT AVPacket flag.

1061
doc/avconv.texi Normal file

File diff suppressed because it is too large Load Diff

View File

@ -114,5 +114,22 @@ muxer:
ffmpeg -i input.flac -id3v2_version 3 out.mp3
@end example
You can precisely specify which stream(s) should the codec AVOption apply to by
appending a stream specifier of the form
@option{[:@var{stream_type}][:@var{stream_index}]} to the option name.
@var{stream_type} is 'v' for video, 'a' for audio and 's' for subtitle streams.
@var{stream_index} is a global stream index when @var{stream_type} isn't
given, otherwise it counts streams of the given type only. As always, the index
is zero-based. For example
@example
-foo -- applies to all applicable streams
-foo:v -- applies to all video streams
-foo:a:2 -- applies to the third audio stream
-foo:0 -- applies to the first stream
@end example
Note -nooption syntax cannot be used for boolean AVOptions, use -option
0/-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.

View File

@ -723,7 +723,7 @@ static OutputStream *new_output_stream(AVFormatContext *oc, int file_idx, AVCode
ost->st = st;
ost->enc = codec;
if (codec)
ost->opts = filter_codec_opts(codec_opts, codec->id, 1);
ost->opts = filter_codec_opts(codec_opts, codec->id, oc, st);
avcodec_get_context_defaults3(st->codec, codec);
@ -3427,7 +3427,7 @@ static int opt_input_file(const char *opt, const char *filename)
ist->st = st;
ist->file_index = nb_input_files;
ist->discard = 1;
ist->opts = filter_codec_opts(codec_opts, ist->st->codec->codec_id, 0);
ist->opts = filter_codec_opts(codec_opts, ist->st->codec->codec_id, ic, st);
if (i < nb_ts_scale)
ist->ts_scale = ts_scale[i];

View File

@ -2119,7 +2119,7 @@ static int stream_component_open(VideoState *is, int stream_index)
return -1;
avctx = ic->streams[stream_index]->codec;
opts = filter_codec_opts(codec_opts, avctx->codec_id, 0);
opts = filter_codec_opts(codec_opts, avctx->codec_id, ic, ic->streams[stream_index]);
/* prepare audio output */
if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {

View File

@ -1279,16 +1279,16 @@ static void wmv2_mspel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int
}
#if CONFIG_RV40_DECODER
static void put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
void ff_put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
put_pixels16_xy2_8_c(dst, src, stride, 16);
}
static void avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
void ff_avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
avg_pixels16_xy2_8_c(dst, src, stride, 16);
}
static void put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
void ff_put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
put_pixels8_xy2_8_c(dst, src, stride, 8);
}
static void avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
void ff_avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
avg_pixels8_xy2_8_c(dst, src, stride, 8);
}
#endif /* CONFIG_RV40_DECODER */
@ -2891,16 +2891,6 @@ av_cold void dsputil_init(DSPContext* c, AVCodecContext *avctx)
#if CONFIG_WMV2_DECODER || CONFIG_VC1_DECODER
ff_intrax8dsp_init(c,avctx);
#endif
#if CONFIG_RV30_DECODER
ff_rv30dsp_init(c,avctx);
#endif
#if CONFIG_RV40_DECODER
ff_rv40dsp_init(c,avctx);
c->put_rv40_qpel_pixels_tab[0][15] = put_rv40_qpel16_mc33_c;
c->avg_rv40_qpel_pixels_tab[0][15] = avg_rv40_qpel16_mc33_c;
c->put_rv40_qpel_pixels_tab[1][15] = put_rv40_qpel8_mc33_c;
c->avg_rv40_qpel_pixels_tab[1][15] = avg_rv40_qpel8_mc33_c;
#endif
c->put_mspel_pixels_tab[0]= ff_put_pixels8x8_c;
c->put_mspel_pixels_tab[1]= put_mspel8_mc10_c;
@ -3108,16 +3098,6 @@ av_cold void dsputil_init(DSPContext* c, AVCodecContext *avctx)
c->avg_2tap_qpel_pixels_tab[0][i]= c->avg_h264_qpel_pixels_tab[0][i];
}
c->put_rv30_tpel_pixels_tab[0][0] = c->put_h264_qpel_pixels_tab[0][0];
c->put_rv30_tpel_pixels_tab[1][0] = c->put_h264_qpel_pixels_tab[1][0];
c->avg_rv30_tpel_pixels_tab[0][0] = c->avg_h264_qpel_pixels_tab[0][0];
c->avg_rv30_tpel_pixels_tab[1][0] = c->avg_h264_qpel_pixels_tab[1][0];
c->put_rv40_qpel_pixels_tab[0][0] = c->put_h264_qpel_pixels_tab[0][0];
c->put_rv40_qpel_pixels_tab[1][0] = c->put_h264_qpel_pixels_tab[1][0];
c->avg_rv40_qpel_pixels_tab[0][0] = c->avg_h264_qpel_pixels_tab[0][0];
c->avg_rv40_qpel_pixels_tab[1][0] = c->avg_h264_qpel_pixels_tab[1][0];
switch(c->idct_permutation_type){
case FF_NO_IDCT_PERM:
for(i=0; i<64; i++)

View File

@ -114,6 +114,12 @@ void ff_vp3_h_loop_filter_c(uint8_t *src, int stride, int *bounding_values);
/* EA functions */
void ff_ea_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
/* RV40 functions */
void ff_put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride);
void ff_avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride);
void ff_put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride);
void ff_avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride);
/* 1/2^n downscaling functions from imgconvert.c */
void ff_shrink22(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
void ff_shrink44(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
@ -540,16 +546,6 @@ typedef struct DSPContext {
void (*vector_clip_int32)(int32_t *dst, const int32_t *src, int32_t min,
int32_t max, unsigned int len);
/* rv30 functions */
qpel_mc_func put_rv30_tpel_pixels_tab[4][16];
qpel_mc_func avg_rv30_tpel_pixels_tab[4][16];
/* rv40 functions */
qpel_mc_func put_rv40_qpel_pixels_tab[4][16];
qpel_mc_func avg_rv40_qpel_pixels_tab[4][16];
h264_chroma_mc_func put_rv40_chroma_pixels_tab[3];
h264_chroma_mc_func avg_rv40_chroma_pixels_tab[3];
op_fill_func fill_block_tab[2];
} DSPContext;
@ -624,8 +620,6 @@ void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx);
void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx);
void ff_dsputil_init_dwt(DSPContext *c);
void ff_rv30dsp_init(DSPContext* c, AVCodecContext *avctx);
void ff_rv40dsp_init(DSPContext* c, AVCodecContext *avctx);
void ff_intrax8dsp_init(DSPContext* c, AVCodecContext *avctx);
void ff_mlp_init(DSPContext* c, AVCodecContext *avctx);
void ff_mlp_init_x86(DSPContext* c, AVCodecContext *avctx);

View File

@ -1138,7 +1138,10 @@ static int decode_update_thread_context(AVCodecContext *dst, const AVCodecContex
memcpy(&h->s + 1, &h1->s + 1, sizeof(H264Context) - sizeof(MpegEncContext)); //copy all fields after MpegEnc
memset(h->sps_buffers, 0, sizeof(h->sps_buffers));
memset(h->pps_buffers, 0, sizeof(h->pps_buffers));
ff_h264_alloc_tables(h);
if (ff_h264_alloc_tables(h) < 0) {
av_log(dst, AV_LOG_ERROR, "Could not allocate memory for h264\n");
return AVERROR(ENOMEM);
}
context_init(h);
for(i=0; i<2; i++){
@ -2619,7 +2622,10 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
h->prev_interlaced_frame = 1;
init_scan_tables(h);
ff_h264_alloc_tables(h);
if (ff_h264_alloc_tables(h) < 0) {
av_log(h->s.avctx, AV_LOG_ERROR, "Could not allocate memory for h264\n");
return AVERROR(ENOMEM);
}
if (!HAVE_THREADS || !(s->avctx->active_thread_type&FF_THREAD_SLICE)) {
if (context_init(h) < 0) {

View File

@ -428,10 +428,10 @@ static av_cold int X264_init(AVCodecContext *avctx)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = {
{"preset", "Set the encoding preset", OFFSET(preset), FF_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
{"tune", "Tune the encoding params", OFFSET(tune), FF_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
{"fastfirstpass", "Use fast settings when encoding first pass", OFFSET(fastfirstpass), FF_OPT_TYPE_INT, {.dbl=1}, 0, 1, VE},
{"profile", "Set profile restrictions", OFFSET(profile), FF_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
{ "preset", "Set the encoding preset (cf. x264 --fullhelp)", OFFSET(preset), FF_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
{ "tune", "Tune the encoding params (cf. x264 --fullhelp)", OFFSET(tune), FF_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
{ "profile", "Set profile restrictions (cf. x264 --fullhelp) ", OFFSET(profile), FF_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
{ "fastfirstpass", "Use fast settings when encoding first pass", OFFSET(fastfirstpass), FF_OPT_TYPE_INT, { 1 }, 0, 1, VE},
{"level", "Specify level (as defined by Annex A)", OFFSET(level), FF_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
{"passlogfile", "Filename for 2 pass stats", OFFSET(stats), FF_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
{"wpredp", "Weighted prediction for P-frames", OFFSET(weightp), FF_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},

View File

@ -81,7 +81,9 @@ read_header:
{
init_get_bits(&s->gb, buf_ptr+dqt_offs, (buf_end - (buf_ptr+dqt_offs))*8);
s->start_code = DQT;
ff_mjpeg_decode_dqt(s);
if (ff_mjpeg_decode_dqt(s) < 0 &&
avctx->error_recognition >= FF_ER_EXPLODE)
return AVERROR_INVALIDDATA;
}
dht_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "dht is %d and size is %d\n");
@ -113,7 +115,9 @@ read_header:
init_get_bits(&s->gb, buf_ptr+sos_offs, field_size*8);
s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16));
s->start_code = SOS;
ff_mjpeg_decode_sos(s, NULL, NULL);
if (ff_mjpeg_decode_sos(s, NULL, NULL) < 0 &&
avctx->error_recognition >= FF_ER_EXPLODE)
return AVERROR_INVALIDDATA;
}
if (s->interlaced) {

View File

@ -1507,7 +1507,9 @@ eoi_parser:
av_log(avctx, AV_LOG_WARNING, "Can not process SOS before SOF, skipping\n");
break;
}
ff_mjpeg_decode_sos(s, NULL, NULL);
if (ff_mjpeg_decode_sos(s, NULL, NULL) < 0 &&
avctx->error_recognition >= FF_ER_EXPLODE)
return AVERROR_INVALIDDATA;
/* buggy avid puts EOI every 10-20th frame */
/* if restart period is over process EOI */
if ((s->buggy_avid && !s->interlaced) || s->restart_interval)

View File

@ -276,9 +276,13 @@ static int mxpeg_decode_frame(AVCodecContext *avctx,
return AVERROR(ENOMEM);
}
ff_mjpeg_decode_sos(jpg, s->mxm_bitmask, reference_ptr);
ret = ff_mjpeg_decode_sos(jpg, s->mxm_bitmask, reference_ptr);
if (ret < 0 && avctx->error_recognition >= FF_ER_EXPLODE)
return ret;
} else {
ff_mjpeg_decode_sos(jpg, NULL, NULL);
ret = ff_mjpeg_decode_sos(jpg, NULL, NULL);
if (ret < 0 && avctx->error_recognition >= FF_ER_EXPLODE)
return ret;
}
break;

View File

@ -26,6 +26,7 @@
#include "avcodec.h"
#include "dsputil.h"
#include "rv34dsp.h"
#define RV30_LOWPASS(OPNAME, OP) \
static av_unused void OPNAME ## rv30_tpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
@ -251,41 +252,46 @@ RV30_MC(put_, 16)
RV30_MC(avg_, 8)
RV30_MC(avg_, 16)
av_cold void ff_rv30dsp_init(DSPContext* c, AVCodecContext *avctx) {
c->put_rv30_tpel_pixels_tab[0][ 0] = c->put_h264_qpel_pixels_tab[0][0];
c->put_rv30_tpel_pixels_tab[0][ 1] = put_rv30_tpel16_mc10_c;
c->put_rv30_tpel_pixels_tab[0][ 2] = put_rv30_tpel16_mc20_c;
c->put_rv30_tpel_pixels_tab[0][ 4] = put_rv30_tpel16_mc01_c;
c->put_rv30_tpel_pixels_tab[0][ 5] = put_rv30_tpel16_mc11_c;
c->put_rv30_tpel_pixels_tab[0][ 6] = put_rv30_tpel16_mc21_c;
c->put_rv30_tpel_pixels_tab[0][ 8] = put_rv30_tpel16_mc02_c;
c->put_rv30_tpel_pixels_tab[0][ 9] = put_rv30_tpel16_mc12_c;
c->put_rv30_tpel_pixels_tab[0][10] = put_rv30_tpel16_mc22_c;
c->avg_rv30_tpel_pixels_tab[0][ 0] = c->avg_h264_qpel_pixels_tab[0][0];
c->avg_rv30_tpel_pixels_tab[0][ 1] = avg_rv30_tpel16_mc10_c;
c->avg_rv30_tpel_pixels_tab[0][ 2] = avg_rv30_tpel16_mc20_c;
c->avg_rv30_tpel_pixels_tab[0][ 4] = avg_rv30_tpel16_mc01_c;
c->avg_rv30_tpel_pixels_tab[0][ 5] = avg_rv30_tpel16_mc11_c;
c->avg_rv30_tpel_pixels_tab[0][ 6] = avg_rv30_tpel16_mc21_c;
c->avg_rv30_tpel_pixels_tab[0][ 8] = avg_rv30_tpel16_mc02_c;
c->avg_rv30_tpel_pixels_tab[0][ 9] = avg_rv30_tpel16_mc12_c;
c->avg_rv30_tpel_pixels_tab[0][10] = avg_rv30_tpel16_mc22_c;
c->put_rv30_tpel_pixels_tab[1][ 0] = c->put_h264_qpel_pixels_tab[1][0];
c->put_rv30_tpel_pixels_tab[1][ 1] = put_rv30_tpel8_mc10_c;
c->put_rv30_tpel_pixels_tab[1][ 2] = put_rv30_tpel8_mc20_c;
c->put_rv30_tpel_pixels_tab[1][ 4] = put_rv30_tpel8_mc01_c;
c->put_rv30_tpel_pixels_tab[1][ 5] = put_rv30_tpel8_mc11_c;
c->put_rv30_tpel_pixels_tab[1][ 6] = put_rv30_tpel8_mc21_c;
c->put_rv30_tpel_pixels_tab[1][ 8] = put_rv30_tpel8_mc02_c;
c->put_rv30_tpel_pixels_tab[1][ 9] = put_rv30_tpel8_mc12_c;
c->put_rv30_tpel_pixels_tab[1][10] = put_rv30_tpel8_mc22_c;
c->avg_rv30_tpel_pixels_tab[1][ 0] = c->avg_h264_qpel_pixels_tab[1][0];
c->avg_rv30_tpel_pixels_tab[1][ 1] = avg_rv30_tpel8_mc10_c;
c->avg_rv30_tpel_pixels_tab[1][ 2] = avg_rv30_tpel8_mc20_c;
c->avg_rv30_tpel_pixels_tab[1][ 4] = avg_rv30_tpel8_mc01_c;
c->avg_rv30_tpel_pixels_tab[1][ 5] = avg_rv30_tpel8_mc11_c;
c->avg_rv30_tpel_pixels_tab[1][ 6] = avg_rv30_tpel8_mc21_c;
c->avg_rv30_tpel_pixels_tab[1][ 8] = avg_rv30_tpel8_mc02_c;
c->avg_rv30_tpel_pixels_tab[1][ 9] = avg_rv30_tpel8_mc12_c;
c->avg_rv30_tpel_pixels_tab[1][10] = avg_rv30_tpel8_mc22_c;
av_cold void ff_rv30dsp_init(RV34DSPContext *c, DSPContext* dsp) {
c->put_pixels_tab[0][ 0] = dsp->put_h264_qpel_pixels_tab[0][0];
c->put_pixels_tab[0][ 1] = put_rv30_tpel16_mc10_c;
c->put_pixels_tab[0][ 2] = put_rv30_tpel16_mc20_c;
c->put_pixels_tab[0][ 4] = put_rv30_tpel16_mc01_c;
c->put_pixels_tab[0][ 5] = put_rv30_tpel16_mc11_c;
c->put_pixels_tab[0][ 6] = put_rv30_tpel16_mc21_c;
c->put_pixels_tab[0][ 8] = put_rv30_tpel16_mc02_c;
c->put_pixels_tab[0][ 9] = put_rv30_tpel16_mc12_c;
c->put_pixels_tab[0][10] = put_rv30_tpel16_mc22_c;
c->avg_pixels_tab[0][ 0] = dsp->avg_h264_qpel_pixels_tab[0][0];
c->avg_pixels_tab[0][ 1] = avg_rv30_tpel16_mc10_c;
c->avg_pixels_tab[0][ 2] = avg_rv30_tpel16_mc20_c;
c->avg_pixels_tab[0][ 4] = avg_rv30_tpel16_mc01_c;
c->avg_pixels_tab[0][ 5] = avg_rv30_tpel16_mc11_c;
c->avg_pixels_tab[0][ 6] = avg_rv30_tpel16_mc21_c;
c->avg_pixels_tab[0][ 8] = avg_rv30_tpel16_mc02_c;
c->avg_pixels_tab[0][ 9] = avg_rv30_tpel16_mc12_c;
c->avg_pixels_tab[0][10] = avg_rv30_tpel16_mc22_c;
c->put_pixels_tab[1][ 0] = dsp->put_h264_qpel_pixels_tab[1][0];
c->put_pixels_tab[1][ 1] = put_rv30_tpel8_mc10_c;
c->put_pixels_tab[1][ 2] = put_rv30_tpel8_mc20_c;
c->put_pixels_tab[1][ 4] = put_rv30_tpel8_mc01_c;
c->put_pixels_tab[1][ 5] = put_rv30_tpel8_mc11_c;
c->put_pixels_tab[1][ 6] = put_rv30_tpel8_mc21_c;
c->put_pixels_tab[1][ 8] = put_rv30_tpel8_mc02_c;
c->put_pixels_tab[1][ 9] = put_rv30_tpel8_mc12_c;
c->put_pixels_tab[1][10] = put_rv30_tpel8_mc22_c;
c->avg_pixels_tab[1][ 0] = dsp->avg_h264_qpel_pixels_tab[1][0];
c->avg_pixels_tab[1][ 1] = avg_rv30_tpel8_mc10_c;
c->avg_pixels_tab[1][ 2] = avg_rv30_tpel8_mc20_c;
c->avg_pixels_tab[1][ 4] = avg_rv30_tpel8_mc01_c;
c->avg_pixels_tab[1][ 5] = avg_rv30_tpel8_mc11_c;
c->avg_pixels_tab[1][ 6] = avg_rv30_tpel8_mc21_c;
c->avg_pixels_tab[1][ 8] = avg_rv30_tpel8_mc02_c;
c->avg_pixels_tab[1][ 9] = avg_rv30_tpel8_mc12_c;
c->avg_pixels_tab[1][10] = avg_rv30_tpel8_mc22_c;
c->put_chroma_pixels_tab[0] = dsp->put_h264_chroma_pixels_tab[0];
c->put_chroma_pixels_tab[1] = dsp->put_h264_chroma_pixels_tab[1];
c->avg_chroma_pixels_tab[0] = dsp->avg_h264_chroma_pixels_tab[0];
c->avg_chroma_pixels_tab[1] = dsp->avg_h264_chroma_pixels_tab[1];
}

View File

@ -568,12 +568,8 @@ static void rv34_pred_mv(RV34DecContext *r, int block_type, int subblock_no, int
*/
static int calc_add_mv(RV34DecContext *r, int dir, int val)
{
int refdist = GET_PTS_DIFF(r->next_pts, r->last_pts);
int dist = dir ? -GET_PTS_DIFF(r->next_pts, r->cur_pts) : GET_PTS_DIFF(r->cur_pts, r->last_pts);
int mul;
int mul = dir ? -r->weight2 : r->weight1;
if(!refdist) return 0;
mul = (dist << 14) / refdist;
return (val * mul + 0x2000) >> 14;
}
@ -721,7 +717,7 @@ static const int chroma_coeffs[3] = { 0, 3, 5 };
static inline void rv34_mc(RV34DecContext *r, const int block_type,
const int xoff, const int yoff, int mv_off,
const int width, const int height, int dir,
const int thirdpel,
const int thirdpel, int weighted,
qpel_mc_func (*qpel_mc)[16],
h264_chroma_mc_func (*chroma_mc))
{
@ -785,9 +781,15 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type,
srcU = uvbuf;
srcV = uvbuf + 16;
}
Y = s->dest[0] + xoff + yoff *s->linesize;
U = s->dest[1] + (xoff>>1) + (yoff>>1)*s->uvlinesize;
V = s->dest[2] + (xoff>>1) + (yoff>>1)*s->uvlinesize;
if(!weighted){
Y = s->dest[0] + xoff + yoff *s->linesize;
U = s->dest[1] + (xoff>>1) + (yoff>>1)*s->uvlinesize;
V = s->dest[2] + (xoff>>1) + (yoff>>1)*s->uvlinesize;
}else{
Y = r->tmp_b_block_y [dir] + xoff + yoff *s->linesize;
U = r->tmp_b_block_uv[dir*2] + (xoff>>1) + (yoff>>1)*s->uvlinesize;
V = r->tmp_b_block_uv[dir*2+1] + (xoff>>1) + (yoff>>1)*s->uvlinesize;
}
if(block_type == RV34_MB_P_16x8){
qpel_mc[1][dxy](Y, srcY, s->linesize);
@ -808,43 +810,70 @@ static void rv34_mc_1mv(RV34DecContext *r, const int block_type,
const int xoff, const int yoff, int mv_off,
const int width, const int height, int dir)
{
rv34_mc(r, block_type, xoff, yoff, mv_off, width, height, dir, r->rv30,
r->rv30 ? r->s.dsp.put_rv30_tpel_pixels_tab
: r->s.dsp.put_rv40_qpel_pixels_tab,
r->rv30 ? r->s.dsp.put_h264_chroma_pixels_tab
: r->s.dsp.put_rv40_chroma_pixels_tab);
rv34_mc(r, block_type, xoff, yoff, mv_off, width, height, dir, r->rv30, 0,
r->rdsp.put_pixels_tab,
r->rdsp.put_chroma_pixels_tab);
}
static void rv4_weight(RV34DecContext *r)
{
r->rdsp.rv40_weight_pixels_tab[0](r->s.dest[0],
r->tmp_b_block_y[0],
r->tmp_b_block_y[1],
r->weight1,
r->weight2,
r->s.linesize);
r->rdsp.rv40_weight_pixels_tab[1](r->s.dest[1],
r->tmp_b_block_uv[0],
r->tmp_b_block_uv[2],
r->weight1,
r->weight2,
r->s.uvlinesize);
r->rdsp.rv40_weight_pixels_tab[1](r->s.dest[2],
r->tmp_b_block_uv[1],
r->tmp_b_block_uv[3],
r->weight1,
r->weight2,
r->s.uvlinesize);
}
static void rv34_mc_2mv(RV34DecContext *r, const int block_type)
{
rv34_mc(r, block_type, 0, 0, 0, 2, 2, 0, r->rv30,
r->rv30 ? r->s.dsp.put_rv30_tpel_pixels_tab
: r->s.dsp.put_rv40_qpel_pixels_tab,
r->rv30 ? r->s.dsp.put_h264_chroma_pixels_tab
: r->s.dsp.put_rv40_chroma_pixels_tab);
rv34_mc(r, block_type, 0, 0, 0, 2, 2, 1, r->rv30,
r->rv30 ? r->s.dsp.avg_rv30_tpel_pixels_tab
: r->s.dsp.avg_rv40_qpel_pixels_tab,
r->rv30 ? r->s.dsp.avg_h264_chroma_pixels_tab
: r->s.dsp.avg_rv40_chroma_pixels_tab);
int weighted = !r->rv30 && block_type != RV34_MB_B_BIDIR && r->weight1 != 8192;
rv34_mc(r, block_type, 0, 0, 0, 2, 2, 0, r->rv30, weighted,
r->rdsp.put_pixels_tab,
r->rdsp.put_chroma_pixels_tab);
if(!weighted){
rv34_mc(r, block_type, 0, 0, 0, 2, 2, 1, r->rv30, 0,
r->rdsp.avg_pixels_tab,
r->rdsp.avg_chroma_pixels_tab);
}else{
rv34_mc(r, block_type, 0, 0, 0, 2, 2, 1, r->rv30, 1,
r->rdsp.put_pixels_tab,
r->rdsp.put_chroma_pixels_tab);
rv4_weight(r);
}
}
static void rv34_mc_2mv_skip(RV34DecContext *r)
{
int i, j;
int weighted = !r->rv30 && r->weight1 != 8192;
for(j = 0; j < 2; j++)
for(i = 0; i < 2; i++){
rv34_mc(r, RV34_MB_P_8x8, i*8, j*8, i+j*r->s.b8_stride, 1, 1, 0, r->rv30,
r->rv30 ? r->s.dsp.put_rv30_tpel_pixels_tab
: r->s.dsp.put_rv40_qpel_pixels_tab,
r->rv30 ? r->s.dsp.put_h264_chroma_pixels_tab
: r->s.dsp.put_rv40_chroma_pixels_tab);
weighted,
r->rdsp.put_pixels_tab,
r->rdsp.put_chroma_pixels_tab);
rv34_mc(r, RV34_MB_P_8x8, i*8, j*8, i+j*r->s.b8_stride, 1, 1, 1, r->rv30,
r->rv30 ? r->s.dsp.avg_rv30_tpel_pixels_tab
: r->s.dsp.avg_rv40_qpel_pixels_tab,
r->rv30 ? r->s.dsp.avg_h264_chroma_pixels_tab
: r->s.dsp.avg_rv40_chroma_pixels_tab);
weighted,
weighted ? r->rdsp.put_pixels_tab : r->rdsp.avg_pixels_tab,
weighted ? r->rdsp.put_chroma_pixels_tab : r->rdsp.avg_chroma_pixels_tab);
}
if(weighted)
rv4_weight(r);
}
/** number of motion vectors in each macroblock type */
@ -1279,10 +1308,31 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
if(MPV_frame_start(s, s->avctx) < 0)
return -1;
ff_er_frame_start(s);
if (!r->tmp_b_block_base || s->width != r->si.width || s->height != r->si.height) {
int i;
r->tmp_b_block_base = av_realloc(r->tmp_b_block_base, s->linesize * 48);
for (i = 0; i < 2; i++)
r->tmp_b_block_y[i] = r->tmp_b_block_base + i * 16 * s->linesize;
for (i = 0; i < 4; i++)
r->tmp_b_block_uv[i] = r->tmp_b_block_base + 32 * s->linesize
+ (i >> 1) * 8 * s->uvlinesize + (i & 1) * 16;
}
r->cur_pts = r->si.pts;
if(s->pict_type != AV_PICTURE_TYPE_B){
r->last_pts = r->next_pts;
r->next_pts = r->cur_pts;
}else{
int refdist = GET_PTS_DIFF(r->next_pts, r->last_pts);
int dist0 = GET_PTS_DIFF(r->cur_pts, r->last_pts);
int dist1 = GET_PTS_DIFF(r->next_pts, r->cur_pts);
if(!refdist){
r->weight1 = r->weight2 = 8192;
}else{
r->weight1 = (dist0 << 14) / refdist;
r->weight2 = (dist1 << 14) / refdist;
}
}
s->mb_x = s->mb_y = 0;
}
@ -1363,6 +1413,15 @@ av_cold int ff_rv34_decode_init(AVCodecContext *avctx)
ff_h264_pred_init(&r->h, CODEC_ID_RV40, 8);
#if CONFIG_RV30_DECODER
if (avctx->codec_id == CODEC_ID_RV30)
ff_rv30dsp_init(&r->rdsp, &r->s.dsp);
#endif
#if CONFIG_RV40_DECODER
if (avctx->codec_id == CODEC_ID_RV40)
ff_rv40dsp_init(&r->rdsp, &r->s.dsp);
#endif
r->intra_types_stride = 4*s->mb_stride + 4;
r->intra_types_hist = av_malloc(r->intra_types_stride * 4 * 2 * sizeof(*r->intra_types_hist));
r->intra_types = r->intra_types_hist + r->intra_types_stride * 4;
@ -1494,6 +1553,7 @@ av_cold int ff_rv34_decode_end(AVCodecContext *avctx)
av_freep(&r->intra_types_hist);
r->intra_types = NULL;
av_freep(&r->tmp_b_block_base);
av_freep(&r->mb_type);
av_freep(&r->cbp_luma);
av_freep(&r->cbp_chroma);

View File

@ -32,6 +32,7 @@
#include "mpegvideo.h"
#include "h264pred.h"
#include "rv34dsp.h"
#define MB_TYPE_SEPARATE_DC 0x01000000
#define IS_SEPARATE_DC(a) ((a) & MB_TYPE_SEPARATE_DC)
@ -83,6 +84,7 @@ typedef struct SliceInfo{
/** decoder context */
typedef struct RV34DecContext{
MpegEncContext s;
RV34DSPContext rdsp;
int8_t *intra_types_hist;///< old block types, used for prediction
int8_t *intra_types; ///< block types
int intra_types_stride;///< block types array stride
@ -105,6 +107,7 @@ typedef struct RV34DecContext{
int rpr; ///< one field size in RV30 slice header
int cur_pts, last_pts, next_pts;
int weight1, weight2; ///< B frame distance fractions (0.14) used in motion compensation
uint16_t *cbp_luma; ///< CBP values for luma subblocks
uint8_t *cbp_chroma; ///< CBP values for chroma subblocks
@ -113,6 +116,11 @@ typedef struct RV34DecContext{
/** 8x8 block available flags (for MV prediction) */
DECLARE_ALIGNED(8, uint32_t, avail_cache)[3*4];
/** temporary blocks for RV4 weighted MC */
uint8_t *tmp_b_block_y[2];
uint8_t *tmp_b_block_uv[4];
uint8_t *tmp_b_block_base;
int (*parse_slice_header)(struct RV34DecContext *r, GetBitContext *gb, SliceInfo *si);
int (*decode_mb_info)(struct RV34DecContext *r);
int (*decode_intra_types)(struct RV34DecContext *r, GetBitContext *gb, int8_t *dst);

50
libavcodec/rv34dsp.h Normal file
View File

@ -0,0 +1,50 @@
/*
* RV30/40 decoder motion compensation functions
* Copyright (c) 2008 Konstantin Shishkov
*
* 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
*/
/**
* @file
* RV30/40 decoder motion compensation functions
*/
#ifndef AVCODEC_RV34DSP_H
#define AVCODEC_RV34DSP_H
#include "dsputil.h"
typedef void (*rv40_weight_func)(uint8_t *dst/*align width (8 or 16)*/,
uint8_t *src1/*align width (8 or 16)*/,
uint8_t *src2/*align width (8 or 16)*/,
int w1, int w2, int stride);
typedef struct RV34DSPContext {
qpel_mc_func put_pixels_tab[4][16];
qpel_mc_func avg_pixels_tab[4][16];
h264_chroma_mc_func put_chroma_pixels_tab[3];
h264_chroma_mc_func avg_chroma_pixels_tab[3];
rv40_weight_func rv40_weight_pixels_tab[2];
} RV34DSPContext;
void ff_rv30dsp_init(RV34DSPContext *c, DSPContext* dsp);
void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp);
void ff_rv40dsp_init_x86(RV34DSPContext *c, DSPContext *dsp);
#endif /* AVCODEC_RV34DSP_H */

View File

@ -26,6 +26,7 @@
#include "avcodec.h"
#include "dsputil.h"
#include "rv34dsp.h"
#define RV40_LOWPASS(OPNAME, OP) \
static av_unused void OPNAME ## rv40_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\
@ -284,70 +285,97 @@ static void OPNAME ## rv40_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*a
RV40_CHROMA_MC(put_, op_put)
RV40_CHROMA_MC(avg_, op_avg)
void ff_rv40dsp_init(DSPContext* c, AVCodecContext *avctx) {
c->put_rv40_qpel_pixels_tab[0][ 0] = c->put_h264_qpel_pixels_tab[0][0];
c->put_rv40_qpel_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c;
c->put_rv40_qpel_pixels_tab[0][ 2] = put_rv40_qpel16_mc20_c;
c->put_rv40_qpel_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c;
c->put_rv40_qpel_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c;
c->put_rv40_qpel_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c;
c->put_rv40_qpel_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c;
c->put_rv40_qpel_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c;
c->put_rv40_qpel_pixels_tab[0][ 8] = put_rv40_qpel16_mc02_c;
c->put_rv40_qpel_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c;
c->put_rv40_qpel_pixels_tab[0][10] = put_rv40_qpel16_mc22_c;
c->put_rv40_qpel_pixels_tab[0][11] = put_rv40_qpel16_mc32_c;
c->put_rv40_qpel_pixels_tab[0][12] = put_rv40_qpel16_mc03_c;
c->put_rv40_qpel_pixels_tab[0][13] = put_rv40_qpel16_mc13_c;
c->put_rv40_qpel_pixels_tab[0][14] = put_rv40_qpel16_mc23_c;
c->avg_rv40_qpel_pixels_tab[0][ 0] = c->avg_h264_qpel_pixels_tab[0][0];
c->avg_rv40_qpel_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c;
c->avg_rv40_qpel_pixels_tab[0][ 2] = avg_rv40_qpel16_mc20_c;
c->avg_rv40_qpel_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c;
c->avg_rv40_qpel_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c;
c->avg_rv40_qpel_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c;
c->avg_rv40_qpel_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c;
c->avg_rv40_qpel_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c;
c->avg_rv40_qpel_pixels_tab[0][ 8] = avg_rv40_qpel16_mc02_c;
c->avg_rv40_qpel_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c;
c->avg_rv40_qpel_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c;
c->avg_rv40_qpel_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c;
c->avg_rv40_qpel_pixels_tab[0][12] = avg_rv40_qpel16_mc03_c;
c->avg_rv40_qpel_pixels_tab[0][13] = avg_rv40_qpel16_mc13_c;
c->avg_rv40_qpel_pixels_tab[0][14] = avg_rv40_qpel16_mc23_c;
c->put_rv40_qpel_pixels_tab[1][ 0] = c->put_h264_qpel_pixels_tab[1][0];
c->put_rv40_qpel_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c;
c->put_rv40_qpel_pixels_tab[1][ 2] = put_rv40_qpel8_mc20_c;
c->put_rv40_qpel_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c;
c->put_rv40_qpel_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c;
c->put_rv40_qpel_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c;
c->put_rv40_qpel_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c;
c->put_rv40_qpel_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c;
c->put_rv40_qpel_pixels_tab[1][ 8] = put_rv40_qpel8_mc02_c;
c->put_rv40_qpel_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c;
c->put_rv40_qpel_pixels_tab[1][10] = put_rv40_qpel8_mc22_c;
c->put_rv40_qpel_pixels_tab[1][11] = put_rv40_qpel8_mc32_c;
c->put_rv40_qpel_pixels_tab[1][12] = put_rv40_qpel8_mc03_c;
c->put_rv40_qpel_pixels_tab[1][13] = put_rv40_qpel8_mc13_c;
c->put_rv40_qpel_pixels_tab[1][14] = put_rv40_qpel8_mc23_c;
c->avg_rv40_qpel_pixels_tab[1][ 0] = c->avg_h264_qpel_pixels_tab[1][0];
c->avg_rv40_qpel_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c;
c->avg_rv40_qpel_pixels_tab[1][ 2] = avg_rv40_qpel8_mc20_c;
c->avg_rv40_qpel_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c;
c->avg_rv40_qpel_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c;
c->avg_rv40_qpel_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c;
c->avg_rv40_qpel_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c;
c->avg_rv40_qpel_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c;
c->avg_rv40_qpel_pixels_tab[1][ 8] = avg_rv40_qpel8_mc02_c;
c->avg_rv40_qpel_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c;
c->avg_rv40_qpel_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c;
c->avg_rv40_qpel_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c;
c->avg_rv40_qpel_pixels_tab[1][12] = avg_rv40_qpel8_mc03_c;
c->avg_rv40_qpel_pixels_tab[1][13] = avg_rv40_qpel8_mc13_c;
c->avg_rv40_qpel_pixels_tab[1][14] = avg_rv40_qpel8_mc23_c;
c->put_rv40_chroma_pixels_tab[0] = put_rv40_chroma_mc8_c;
c->put_rv40_chroma_pixels_tab[1] = put_rv40_chroma_mc4_c;
c->avg_rv40_chroma_pixels_tab[0] = avg_rv40_chroma_mc8_c;
c->avg_rv40_chroma_pixels_tab[1] = avg_rv40_chroma_mc4_c;
#define RV40_WEIGHT_FUNC(size) \
static void rv40_weight_func_ ## size (uint8_t *dst, uint8_t *src1, uint8_t *src2, int w1, int w2, int stride)\
{\
int i, j;\
\
for (j = 0; j < size; j++) {\
for (i = 0; i < size; i++)\
dst[i] = (((w2 * src1[i]) >> 9) + ((w1 * src2[i]) >> 9) + 0x10) >> 5;\
src1 += stride;\
src2 += stride;\
dst += stride;\
}\
}
RV40_WEIGHT_FUNC(16)
RV40_WEIGHT_FUNC(8)
av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) {
c->put_pixels_tab[0][ 0] = dsp->put_h264_qpel_pixels_tab[0][0];
c->put_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c;
c->put_pixels_tab[0][ 2] = put_rv40_qpel16_mc20_c;
c->put_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c;
c->put_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c;
c->put_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c;
c->put_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c;
c->put_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c;
c->put_pixels_tab[0][ 8] = put_rv40_qpel16_mc02_c;
c->put_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c;
c->put_pixels_tab[0][10] = put_rv40_qpel16_mc22_c;
c->put_pixels_tab[0][11] = put_rv40_qpel16_mc32_c;
c->put_pixels_tab[0][12] = put_rv40_qpel16_mc03_c;
c->put_pixels_tab[0][13] = put_rv40_qpel16_mc13_c;
c->put_pixels_tab[0][14] = put_rv40_qpel16_mc23_c;
c->put_pixels_tab[0][15] = ff_put_rv40_qpel16_mc33_c;
c->avg_pixels_tab[0][ 0] = dsp->avg_h264_qpel_pixels_tab[0][0];
c->avg_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c;
c->avg_pixels_tab[0][ 2] = avg_rv40_qpel16_mc20_c;
c->avg_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c;
c->avg_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c;
c->avg_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c;
c->avg_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c;
c->avg_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c;
c->avg_pixels_tab[0][ 8] = avg_rv40_qpel16_mc02_c;
c->avg_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c;
c->avg_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c;
c->avg_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c;
c->avg_pixels_tab[0][12] = avg_rv40_qpel16_mc03_c;
c->avg_pixels_tab[0][13] = avg_rv40_qpel16_mc13_c;
c->avg_pixels_tab[0][14] = avg_rv40_qpel16_mc23_c;
c->avg_pixels_tab[0][15] = ff_avg_rv40_qpel16_mc33_c;
c->put_pixels_tab[1][ 0] = dsp->put_h264_qpel_pixels_tab[1][0];
c->put_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c;
c->put_pixels_tab[1][ 2] = put_rv40_qpel8_mc20_c;
c->put_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c;
c->put_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c;
c->put_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c;
c->put_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c;
c->put_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c;
c->put_pixels_tab[1][ 8] = put_rv40_qpel8_mc02_c;
c->put_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c;
c->put_pixels_tab[1][10] = put_rv40_qpel8_mc22_c;
c->put_pixels_tab[1][11] = put_rv40_qpel8_mc32_c;
c->put_pixels_tab[1][12] = put_rv40_qpel8_mc03_c;
c->put_pixels_tab[1][13] = put_rv40_qpel8_mc13_c;
c->put_pixels_tab[1][14] = put_rv40_qpel8_mc23_c;
c->put_pixels_tab[1][15] = ff_put_rv40_qpel8_mc33_c;
c->avg_pixels_tab[1][ 0] = dsp->avg_h264_qpel_pixels_tab[1][0];
c->avg_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c;
c->avg_pixels_tab[1][ 2] = avg_rv40_qpel8_mc20_c;
c->avg_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c;
c->avg_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c;
c->avg_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c;
c->avg_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c;
c->avg_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c;
c->avg_pixels_tab[1][ 8] = avg_rv40_qpel8_mc02_c;
c->avg_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c;
c->avg_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c;
c->avg_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c;
c->avg_pixels_tab[1][12] = avg_rv40_qpel8_mc03_c;
c->avg_pixels_tab[1][13] = avg_rv40_qpel8_mc13_c;
c->avg_pixels_tab[1][14] = avg_rv40_qpel8_mc23_c;
c->avg_pixels_tab[1][15] = ff_avg_rv40_qpel8_mc33_c;
c->put_chroma_pixels_tab[0] = put_rv40_chroma_mc8_c;
c->put_chroma_pixels_tab[1] = put_rv40_chroma_mc4_c;
c->avg_chroma_pixels_tab[0] = avg_rv40_chroma_mc8_c;
c->avg_chroma_pixels_tab[1] = avg_rv40_chroma_mc4_c;
c->rv40_weight_pixels_tab[0] = rv40_weight_func_16;
c->rv40_weight_pixels_tab[1] = rv40_weight_func_8;
if (HAVE_MMX)
ff_rv40dsp_init_x86(c, dsp);
}

View File

@ -21,6 +21,8 @@ YASM-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred.o \
x86/h264_intrapred_10bit.o
MMX-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred_init.o
MMX-OBJS-$(CONFIG_RV40_DECODER) += x86/rv40dsp.o \
YASM-OBJS-$(CONFIG_VC1_DECODER) += x86/vc1dsp_yasm.o
MMX-OBJS-$(CONFIG_AC3DSP) += x86/ac3dsp_mmx.o

View File

@ -19,8 +19,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -19,8 +19,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA 32

View File

@ -20,8 +20,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -1799,29 +1799,17 @@ PREFETCH(prefetch_3dnow, prefetch)
void ff_put_h264_chroma_mc8_mmx_rnd (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_put_rv40_chroma_mc8_mmx (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_h264_chroma_mc8_mmx2_rnd (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc8_mmx2 (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_h264_chroma_mc8_3dnow_rnd (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc8_3dnow (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_put_h264_chroma_mc4_mmx (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_put_rv40_chroma_mc4_mmx (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_h264_chroma_mc4_mmx2 (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc4_mmx2 (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_h264_chroma_mc4_3dnow (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc4_3dnow (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_put_h264_chroma_mc2_mmx2 (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
@ -2476,9 +2464,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
c->put_h264_chroma_pixels_tab[1]= ff_put_h264_chroma_mc4_mmx;
}
c->put_rv40_chroma_pixels_tab[0]= ff_put_rv40_chroma_mc8_mmx;
c->put_rv40_chroma_pixels_tab[1]= ff_put_rv40_chroma_mc4_mmx;
c->vector_clip_int32 = ff_vector_clip_int32_mmx;
#endif
@ -2578,9 +2563,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmx2, );
#if HAVE_YASM
c->avg_rv40_chroma_pixels_tab[0]= ff_avg_rv40_chroma_mc8_mmx2;
c->avg_rv40_chroma_pixels_tab[1]= ff_avg_rv40_chroma_mc4_mmx2;
if (!high_bit_depth) {
c->avg_h264_chroma_pixels_tab[0]= ff_avg_h264_chroma_mc8_mmx2_rnd;
c->avg_h264_chroma_pixels_tab[1]= ff_avg_h264_chroma_mc4_mmx2;
@ -2662,8 +2644,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
c->avg_h264_chroma_pixels_tab[1]= ff_avg_h264_chroma_mc4_3dnow;
}
c->avg_rv40_chroma_pixels_tab[0]= ff_avg_rv40_chroma_mc8_3dnow;
c->avg_rv40_chroma_pixels_tab[1]= ff_avg_rv40_chroma_mc4_3dnow;
#endif
}

View File

@ -19,7 +19,7 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "libavutil/x86/x86inc.asm"
SECTION_RODATA
pb_f: times 16 db 15

View File

@ -21,8 +21,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;*****************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION .text

View File

@ -28,7 +28,7 @@
; in blocks as conventient to the vector size.
; i.e. {4x real, 4x imaginary, 4x real, ...} (or 2x respectively)
%include "x86inc.asm"
%include "libavutil/x86/x86inc.asm"
%ifdef ARCH_X86_64
%define pointer resq

View File

@ -19,8 +19,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_TEXT

View File

@ -20,8 +20,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -22,8 +22,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -24,8 +24,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION .text

View File

@ -24,8 +24,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -26,8 +26,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;*****************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -22,8 +22,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -22,8 +22,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -22,8 +22,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -22,8 +22,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA 32

View File

@ -21,7 +21,7 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "libavutil/x86/x86inc.asm"
SECTION .text

View File

@ -22,8 +22,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA 32

60
libavcodec/x86/rv40dsp.c Normal file
View File

@ -0,0 +1,60 @@
/*
* RV40 decoder motion compensation functions x86-optimised
* Copyright (c) 2008 Konstantin Shishkov
*
* 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
*/
/**
* @file
* RV40 decoder motion compensation functions x86-optimised
*/
#include "libavcodec/rv34dsp.h"
void ff_put_rv40_chroma_mc8_mmx (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc8_mmx2 (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc8_3dnow(uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_put_rv40_chroma_mc4_mmx (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc4_mmx2 (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_avg_rv40_chroma_mc4_3dnow(uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y);
void ff_rv40dsp_init_x86(RV34DSPContext *c, DSPContext *dsp)
{
av_unused int mm_flags = av_get_cpu_flags();
#if HAVE_YASM
if (mm_flags & AV_CPU_FLAG_MMX) {
c->put_chroma_pixels_tab[0] = ff_put_rv40_chroma_mc8_mmx;
c->put_chroma_pixels_tab[1] = ff_put_rv40_chroma_mc4_mmx;
}
if (mm_flags & AV_CPU_FLAG_MMX2) {
c->avg_chroma_pixels_tab[0] = ff_avg_rv40_chroma_mc8_mmx2;
c->avg_chroma_pixels_tab[1] = ff_avg_rv40_chroma_mc4_mmx2;
} else if (mm_flags & AV_CPU_FLAG_3DNOW) {
c->avg_chroma_pixels_tab[0] = ff_avg_rv40_chroma_mc8_3dnow;
c->avg_chroma_pixels_tab[1] = ff_avg_rv40_chroma_mc4_3dnow;
}
#endif
}

View File

@ -19,8 +19,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
cextern pw_4
cextern pw_5

View File

@ -19,8 +19,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
; MMX-optimized functions cribbed from the original VP3 source code.

View File

@ -20,8 +20,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
cextern pw_64

View File

@ -20,8 +20,8 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
%include "x86inc.asm"
%include "x86util.asm"
%include "libavutil/x86/x86inc.asm"
%include "libavutil/x86/x86util.asm"
SECTION_RODATA

View File

@ -883,6 +883,14 @@ typedef struct AVFormatContext {
*/
int fps_probe_size;
/**
* Error recognition; higher values will detect more errors but may
* misdetect some more or less valid parts as errors.
* - encoding: unused
* - decoding: Set by user.
*/
int error_recognition;
/**
* Transport stream id.
* This will be moved into demuxer private options. Thus no API/ABI compatibility

View File

@ -690,9 +690,9 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
break;
case MKTAG('i', 'n', 'd', 'x'):
i= avio_tell(pb);
if(pb->seekable && !(s->flags & AVFMT_FLAG_IGNIDX) && avi->use_odml){
read_braindead_odml_indx(s, 0);
}
if(pb->seekable && !(s->flags & AVFMT_FLAG_IGNIDX) && avi->use_odml &&
read_braindead_odml_indx(s, 0) < 0 && s->error_recognition >= FF_ER_EXPLODE){
goto fail; }
avio_seek(pb, i+size, SEEK_SET);
break;
case MKTAG('v', 'p', 'r', 'p'):
@ -729,6 +729,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
if(size > 1000000){
av_log(s, AV_LOG_ERROR, "Something went wrong during header parsing, "
"I will ignore it and try to continue anyway.\n");
if (s->error_recognition >= FF_ER_EXPLODE) goto fail;
avi->movi_list = avio_tell(pb) - 4;
avi->movi_end = avio_size(pb);
goto end_of_header;

View File

@ -90,6 +90,9 @@ static const AVOption options[]={
{"fdebug", "print specific debug info", OFFSET(debug), FF_OPT_TYPE_FLAGS, {.dbl = DEFAULT }, 0, INT_MAX, E|D, "fdebug"},
{"ts", NULL, 0, FF_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), FF_OPT_TYPE_INT, {.dbl = DEFAULT }, 0, INT_MAX, E|D},
{"fer", "set error detection aggressivity", OFFSET(error_recognition), FF_OPT_TYPE_INT, {.dbl = FF_ER_CAREFUL }, INT_MIN, INT_MAX, D, "fer"},
{"careful", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_ER_CAREFUL }, INT_MIN, INT_MAX, D, "fer"},
{"explode", "abort decoding on error recognition", 0, FF_OPT_TYPE_CONST, {.dbl = FF_ER_EXPLODE }, INT_MIN, INT_MAX, D, "fer"},
{"fpsprobesize", "number of frames used to probe fps", OFFSET(fps_probe_size), FF_OPT_TYPE_INT, {.dbl = -1}, -1, INT_MAX-1, D},
{NULL},
};

View File

@ -24,7 +24,7 @@
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 53
#define LIBAVFORMAT_VERSION_MINOR 6
#define LIBAVFORMAT_VERSION_MINOR 7
#define LIBAVFORMAT_VERSION_MICRO 0
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \

View File

@ -4,8 +4,8 @@ AREF = fate-acodec-aref
VREF = fate-vsynth1-vref fate-vsynth2-vref
REFS = $(AREF) $(VREF)
$(VREF): ffmpeg$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm
$(AREF): ffmpeg$(EXESUF) tests/data/asynth1.sw
$(VREF): avconv$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm
$(AREF): avconv$(EXESUF) tests/data/asynth1.sw
ffservertest: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw
@echo
@ -93,7 +93,7 @@ FATE_UTILS = base64 tiny_psnr
fate: $(FATE)
$(FATE): ffmpeg$(EXESUF) $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
$(FATE): avconv$(EXESUF) $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
@echo "TEST $(@:fate-%=%)"
$(Q)$(SRC_PATH)/tests/fate-run.sh $@ "$(SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' '$(THREAD_TYPE)'

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# automatic regression test for ffmpeg
# automatic regression test for avconv
#
#
#set -x
@ -13,10 +13,10 @@ eval do_$test=y
# generate reference for quality check
if [ -n "$do_vref" ]; then
do_ffmpeg $raw_ref -f image2 -vcodec pgmyuv -i $raw_src -an -f rawvideo
do_avconv $raw_ref -f image2 -vcodec pgmyuv -i $raw_src -an -f rawvideo
fi
if [ -n "$do_aref" ]; then
do_ffmpeg $pcm_ref -ab 128k -ac 2 -ar 44100 -f s16le -i $pcm_src -f wav
do_avconv $pcm_ref -ab 128k -ac 2 -ar 44100 -f s16le -i $pcm_src -f wav
fi
if [ -n "$do_mpeg" ] ; then
@ -58,7 +58,7 @@ do_video_decoding
# mpeg2 encoding interlaced
file=${outfile}mpeg2reuse.mpg
do_ffmpeg $file $DEC_OPTS -me_threshold 256 -i ${target_path}/${outfile}mpeg2thread.mpg $ENC_OPTS -sameq -me_threshold 256 -mb_threshold 1024 -vcodec mpeg2video -f mpeg1video -bf 2 -flags +ildct+ilme -threads 4
do_avconv $file $DEC_OPTS -me_threshold 256 -i ${target_path}/${outfile}mpeg2thread.mpg $ENC_OPTS -sameq -me_threshold 256 -mb_threshold 1024 -vcodec mpeg2video -f mpeg1video -bf 2 -flags +ildct+ilme -threads 4
do_video_decoding
fi
@ -335,12 +335,12 @@ fi
if [ -n "$do_wmav1" ] ; then
do_audio_encoding wmav1.asf "-acodec wmav1"
do_ffmpeg_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav
do_avconv_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav
$tiny_psnr $pcm_dst $pcm_ref 2 8192
fi
if [ -n "$do_wmav2" ] ; then
do_audio_encoding wmav2.asf "-acodec wmav2"
do_ffmpeg_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav
do_avconv_nomd5 $pcm_dst $DEC_OPTS -i $target_path/$file -f wav
$tiny_psnr $pcm_dst $pcm_ref 2 8192
fi

View File

@ -49,28 +49,28 @@ run(){
$target_exec $target_path/"$@"
}
ffmpeg(){
run ffmpeg -v 0 -threads $threads -thread_type $thread_type "$@"
avconv(){
run avconv -v 0 -threads $threads -thread_type $thread_type "$@"
}
framecrc(){
ffmpeg "$@" -f framecrc -
avconv "$@" -f framecrc -
}
framemd5(){
ffmpeg "$@" -f framemd5 -
avconv "$@" -f framemd5 -
}
crc(){
ffmpeg "$@" -f crc -
avconv "$@" -f crc -
}
md5(){
ffmpeg "$@" md5:
avconv "$@" md5:
}
pcm(){
ffmpeg "$@" -vn -f s16le -
avconv "$@" -vn -f s16le -
}
regtest(){

View File

@ -14,15 +14,15 @@ eval do_$test=y
do_lavf()
{
file=${outfile}lavf.$1
do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 $2
do_ffmpeg_crc $file $DEC_OPTS -i $target_path/$file $3
do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -ab 64k -t 1 -qscale 10 $2
do_avconv_crc $file $DEC_OPTS -i $target_path/$file $3
}
do_streamed_images()
{
file=${outfile}${1}pipe.$1
do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src -f image2pipe $ENC_OPTS -t 1 -qscale 10
do_ffmpeg_crc $file $DEC_OPTS -f image2pipe -i $target_path/$file
do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src -f image2pipe $ENC_OPTS -t 1 -qscale 10
do_avconv_crc $file $DEC_OPTS -f image2pipe -i $target_path/$file
}
do_image_formats()
@ -30,17 +30,17 @@ do_image_formats()
outfile="$datadir/images/$1/"
mkdir -p "$outfile"
file=${outfile}%02d.$1
run_ffmpeg $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $2 $ENC_OPTS $3 -t 0.5 -y -qscale 10 $target_path/$file
run_avconv $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $2 $ENC_OPTS $3 -t 0.5 -y -qscale 10 $target_path/$file
do_md5sum ${outfile}02.$1
do_ffmpeg_crc $file $DEC_OPTS $3 -i $target_path/$file
do_avconv_crc $file $DEC_OPTS $3 -i $target_path/$file
wc -c ${outfile}02.$1
}
do_audio_only()
{
file=${outfile}lavf.$1
do_ffmpeg $file $DEC_OPTS $2 -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 $3
do_ffmpeg_crc $file $DEC_OPTS $4 -i $target_path/$file
do_avconv $file $DEC_OPTS $2 -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 $3
do_avconv_crc $file $DEC_OPTS $4 -i $target_path/$file
}
if [ -n "$do_avi" ] ; then
@ -53,9 +53,9 @@ fi
if [ -n "$do_rm" ] ; then
file=${outfile}lavf.rm
do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 -acodec ac3_fixed
do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $DEC_OPTS -ar 44100 -f s16le -i $pcm_src $ENC_OPTS -t 1 -qscale 10 -acodec ac3_fixed -ab 64k
# broken
#do_ffmpeg_crc $file -i $target_path/$file
#do_avconv_crc $file -i $target_path/$file
fi
if [ -n "$do_mpg" ] ; then
@ -110,8 +110,8 @@ fi
# streamed images
# mjpeg
#file=${outfile}lavf.mjpeg
#do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src
#do_ffmpeg_crc $file -i $target_path/$file
#do_avconv $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src
#do_avconv_crc $file -i $target_path/$file
if [ -n "$do_pbmpipe" ] ; then
do_streamed_images pbm
@ -127,14 +127,14 @@ fi
if [ -n "$do_gif" ] ; then
file=${outfile}lavf.gif
do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10 -pix_fmt rgb24
do_ffmpeg_crc $file $DEC_OPTS -i $target_path/$file -pix_fmt rgb24
do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10 -pix_fmt rgb24
do_avconv_crc $file $DEC_OPTS -i $target_path/$file -pix_fmt rgb24
fi
if [ -n "$do_yuv4mpeg" ] ; then
file=${outfile}lavf.y4m
do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10
#do_ffmpeg_crc $file -i $target_path/$file
do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS -t 1 -qscale 10
#do_avconv_crc $file -i $target_path/$file
fi
# image formats
@ -227,9 +227,9 @@ conversions="yuv420p yuv422p yuv444p yuyv422 yuv410p yuv411p yuvj420p \
monob yuv440p yuvj440p"
for pix_fmt in $conversions ; do
file=${outfile}${pix_fmt}.yuv
run_ffmpeg $DEC_OPTS -r 1 -t 1 -f image2 -vcodec pgmyuv -i $raw_src \
run_avconv $DEC_OPTS -r 1 -t 1 -f image2 -vcodec pgmyuv -i $raw_src \
$ENC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt $target_path/$raw_dst
do_ffmpeg $file $DEC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt -i $target_path/$raw_dst \
do_avconv $file $DEC_OPTS -f rawvideo -s 352x288 -pix_fmt $pix_fmt -i $target_path/$raw_dst \
$ENC_OPTS -f rawvideo -s 352x288 -pix_fmt yuv444p
done
fi

View File

@ -16,7 +16,7 @@ do_video_filter() {
filters=$2
shift 2
printf '%-20s' $label
run_ffmpeg $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src \
run_avconv $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src \
$ENC_OPTS -vf "$filters" -vcodec rawvideo $* -f nut md5:
}
@ -49,7 +49,7 @@ do_lavfi_pixfmts(){
out_fmts=${outfile}${1}_out_fmts
# exclude pixel formats which are not supported as input
$ffmpeg -pix_fmts list 2>/dev/null | sed -ne '9,$p' | grep '^\..\.' | cut -d' ' -f2 | sort >$exclude_fmts
$avconv -pix_fmts list 2>/dev/null | sed -ne '9,$p' | grep '^\..\.' | cut -d' ' -f2 | sort >$exclude_fmts
$showfiltfmts scale | awk -F '[ \r]' '/^OUTPUT/{ fmt=substr($3, 5); print fmt }' | sort | comm -23 - $exclude_fmts >$out_fmts
pix_fmts=$($showfiltfmts $filter $filter_args | awk -F '[ \r]' '/^INPUT/{ fmt=substr($3, 5); print fmt }' | sort | comm -12 - $out_fmts)
@ -70,7 +70,7 @@ do_lavfi_pixfmts "scale" "200:100"
do_lavfi_pixfmts "vflip" ""
if [ -n "$do_pixdesc" ]; then
pix_fmts="$($ffmpeg -pix_fmts list 2>/dev/null | sed -ne '9,$p' | grep '^IO' | cut -d' ' -f2 | sort)"
pix_fmts="$($avconv -pix_fmts list 2>/dev/null | sed -ne '9,$p' | grep '^IO' | cut -d' ' -f2 | sort)"
for pix_fmt in $pix_fmts; do
do_video_filter $pix_fmt "slicify=random,format=$pix_fmt,pixdesctest" -pix_fmt $pix_fmt
done

View File

@ -16,106 +16,106 @@
0, 112500, 276480, 0x5f7a0d4f
0, 120000, 276480, 0x5f7a0d4f
0, 127500, 276480, 0x5f7a0d4f
0, 135000, 276480, 0x2d722f8a
0, 142500, 276480, 0xebbb3c8f
0, 150000, 276480, 0x8574c868
0, 135000, 276480, 0x75641594
0, 142500, 276480, 0x32ee3526
0, 150000, 276480, 0x5ce39368
0, 157500, 276480, 0x4ec1e418
0, 165000, 276480, 0x95f22651
0, 172500, 276480, 0x071d897e
0, 180000, 276480, 0x9f7623f9
0, 187500, 276480, 0x86d4dedf
0, 195000, 276480, 0xc0a0be22
0, 202500, 276480, 0xc5902aec
0, 210000, 276480, 0xe000f066
0, 217500, 276480, 0x0b2a48d5
0, 225000, 276480, 0xa1565256
0, 232500, 276480, 0x8de3ceb3
0, 240000, 276480, 0x654b564a
0, 165000, 276480, 0x85cbc3b5
0, 172500, 276480, 0x377c7b46
0, 180000, 276480, 0x756a4a2e
0, 187500, 276480, 0xcb379547
0, 195000, 276480, 0x99c085be
0, 202500, 276480, 0xe479ffed
0, 210000, 276480, 0x1e4fae19
0, 217500, 276480, 0x776412ef
0, 225000, 276480, 0x58ce0f38
0, 232500, 276480, 0x5ab69b27
0, 240000, 276480, 0xc3db9706
0, 247500, 276480, 0xc9c57884
0, 255000, 276480, 0x89cdcdd4
0, 262500, 276480, 0x3594fe61
0, 270000, 276480, 0x9d082a81
0, 277500, 276480, 0x4e6cd0c3
0, 285000, 276480, 0xc129765f
0, 292500, 276480, 0x92a04c99
0, 300000, 276480, 0x5ca62953
0, 307500, 276480, 0xb7e478aa
0, 315000, 276480, 0x932735d5
0, 322500, 276480, 0xaaa2d7aa
0, 330000, 276480, 0xd1329996
0, 255000, 276480, 0x000b5269
0, 262500, 276480, 0x27ff7a5d
0, 270000, 276480, 0x70647530
0, 277500, 276480, 0x97612c4b
0, 285000, 276480, 0xdf4e04d7
0, 292500, 276480, 0xbd98f57c
0, 300000, 276480, 0x5163b29b
0, 307500, 276480, 0x99170e64
0, 315000, 276480, 0x8a4e991f
0, 322500, 276480, 0x6a45425f
0, 330000, 276480, 0x7bf6b1ef
0, 337500, 276480, 0x6de1e34b
0, 345000, 276480, 0x8c963c9b
0, 352500, 276480, 0xce6eff29
0, 360000, 276480, 0x25412f7e
0, 367500, 276480, 0x11a5ad85
0, 375000, 276480, 0x26ea3248
0, 382500, 276480, 0x86c35fa4
0, 390000, 276480, 0xa98a2d38
0, 397500, 276480, 0xed827333
0, 405000, 276480, 0x5d44a824
0, 412500, 276480, 0x46d54d04
0, 420000, 276480, 0x413fd26a
0, 345000, 276480, 0xdcaaa99a
0, 352500, 276480, 0xd1e98808
0, 360000, 276480, 0x6e2d524e
0, 367500, 276480, 0x22c50a3d
0, 375000, 276480, 0x62b76407
0, 382500, 276480, 0x51e9b3eb
0, 390000, 276480, 0x441f7afd
0, 397500, 276480, 0xfb01efc6
0, 405000, 276480, 0x294bb441
0, 412500, 276480, 0xe04ac45e
0, 420000, 276480, 0x58f275ea
0, 427500, 276480, 0xf0b3b71b
0, 435000, 276480, 0x459bc06d
0, 442500, 276480, 0x4199cd45
0, 450000, 276480, 0xa8d35683
0, 457500, 276480, 0x9a3e7de0
0, 465000, 276480, 0x5a30f666
0, 472500, 276480, 0x40152668
0, 480000, 276480, 0x90c4d22c
0, 487500, 276480, 0x5cbaacc9
0, 495000, 276480, 0x72b658f1
0, 502500, 276480, 0x0ba3dcc9
0, 510000, 276480, 0x259ed5c1
0, 435000, 276480, 0x674e34e4
0, 442500, 276480, 0x41dda2d9
0, 450000, 276480, 0xf46ba7fb
0, 457500, 276480, 0x28b54815
0, 465000, 276480, 0xaf2b5d89
0, 472500, 276480, 0x8facba58
0, 480000, 276480, 0x28a63236
0, 487500, 276480, 0x1ad43fd7
0, 495000, 276480, 0x71507bd2
0, 502500, 276480, 0x35626022
0, 510000, 276480, 0x7c1139b3
0, 517500, 276480, 0x7fd73a99
0, 525000, 276480, 0x488980c5
0, 532500, 276480, 0x1d4c96a5
0, 540000, 276480, 0x41ced7f2
0, 547500, 276480, 0xd62d1837
0, 555000, 276480, 0xf5fd9d20
0, 562500, 276480, 0x2af91fda
0, 570000, 276480, 0x38ce229d
0, 577500, 276480, 0xf3a712c0
0, 585000, 276480, 0x57b111d2
0, 592500, 276480, 0x8556b792
0, 600000, 276480, 0xb32d0896
0, 525000, 276480, 0xb52e1aa2
0, 532500, 276480, 0xd6f82cae
0, 540000, 276480, 0xf88f75d4
0, 547500, 276480, 0x04a8e3ee
0, 555000, 276480, 0xa29f5b01
0, 562500, 276480, 0x754ceaf5
0, 570000, 276480, 0x5a38b4af
0, 577500, 276480, 0xfcebc261
0, 585000, 276480, 0x3d3ca985
0, 592500, 276480, 0x94a03c75
0, 600000, 276480, 0x2f98911c
0, 607500, 276480, 0x923b9937
0, 615000, 276480, 0x0da1e7e3
0, 622500, 276480, 0x7f172382
0, 630000, 276480, 0x93622b88
0, 637500, 276480, 0x2599d540
0, 645000, 276480, 0xed20c105
0, 652500, 276480, 0x62ce256e
0, 660000, 276480, 0x286a04bb
0, 667500, 276480, 0x423f7e7c
0, 675000, 276480, 0x21fc252a
0, 682500, 276480, 0xf8a8e8ee
0, 690000, 276480, 0x770d4a8d
0, 615000, 276480, 0xefab7ffd
0, 622500, 276480, 0x6b9fbc80
0, 630000, 276480, 0xe4bdbd1e
0, 637500, 276480, 0x225a56c0
0, 645000, 276480, 0xf58b1b7c
0, 652500, 276480, 0xbaffcdcc
0, 660000, 276480, 0xeb6eb88f
0, 667500, 276480, 0xdb753d35
0, 675000, 276480, 0xea80a82e
0, 682500, 276480, 0x2aae902a
0, 690000, 276480, 0x9b9ee961
0, 697500, 276480, 0xaa12b6fd
0, 705000, 276480, 0xdc7221a8
0, 712500, 276480, 0x487eeb30
0, 720000, 276480, 0x1e74f2db
0, 727500, 276480, 0x40ae2bc3
0, 735000, 276480, 0x9ca9b930
0, 742500, 276480, 0x9fb19b0f
0, 750000, 276480, 0x7bdf836c
0, 757500, 276480, 0x1e607ba7
0, 765000, 276480, 0xbd96578b
0, 772500, 276480, 0x2124bf07
0, 780000, 276480, 0x4895e27a
0, 705000, 276480, 0x50c31e73
0, 712500, 276480, 0xdd9fb89f
0, 720000, 276480, 0xaf82399a
0, 727500, 276480, 0x7ce5f23c
0, 735000, 276480, 0x5aaa7519
0, 742500, 276480, 0xe45a5599
0, 750000, 276480, 0x704411fb
0, 757500, 276480, 0x9d7430a1
0, 765000, 276480, 0x2c230702
0, 772500, 276480, 0x4a4f76cd
0, 780000, 276480, 0x27f54854
0, 787500, 276480, 0x694d76e3
0, 795000, 276480, 0xe70df513
0, 802500, 276480, 0xcacafe6b
0, 810000, 276480, 0x64087748
0, 817500, 276480, 0x571fda23
0, 825000, 276480, 0x8c86cbe9
0, 832500, 276480, 0xc8ea4671
0, 840000, 276480, 0xbfb74300
0, 847500, 276480, 0xbe1e3770
0, 855000, 276480, 0x757a0232
0, 862500, 276480, 0xa5f50c84
0, 870000, 276480, 0x6d95f808
0, 795000, 276480, 0x525463e2
0, 802500, 276480, 0x819898f9
0, 810000, 276480, 0xeeed00fc
0, 817500, 276480, 0xb6f99ee3
0, 825000, 276480, 0xefc83107
0, 832500, 276480, 0xbb22e024
0, 840000, 276480, 0x300f922a
0, 847500, 276480, 0x826fc3bd
0, 855000, 276480, 0x679a53f8
0, 862500, 276480, 0x976c9e93
0, 870000, 276480, 0xb194656e
0, 877500, 276480, 0xf002c5ca
0, 885000, 276480, 0x1a2abb26
0, 892500, 276480, 0x6cf69bf2
0, 885000, 276480, 0xb243dda5
0, 892500, 276480, 0x1700efbb
0, 900000, 276480, 0x8f316c66

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# common regression functions for ffmpeg
# common regression functions for avconv
#
#
@ -18,7 +18,7 @@ this="$test.$test_ref"
outfile="$datadir/$test_ref/"
# various files
ffmpeg="$target_exec ${target_path}/ffmpeg"
avconv="$target_exec ${target_path}/avconv"
tiny_psnr="tests/tiny_psnr"
raw_src="${target_path}/$raw_src_dir/%02d.pgm"
raw_dst="$datadir/$this.out.yuv"
@ -43,23 +43,23 @@ echov(){
. $(dirname $0)/md5.sh
FFMPEG_OPTS="-v 0 -y"
AVCONV_OPTS="-v 0 -y"
COMMON_OPTS="-flags +bitexact -idct simple -sws_flags +accurate_rnd+bitexact"
DEC_OPTS="$COMMON_OPTS -threads $threads"
ENC_OPTS="$COMMON_OPTS -threads 1 -dct fastint"
run_ffmpeg()
run_avconv()
{
$echov $ffmpeg $FFMPEG_OPTS $*
$ffmpeg $FFMPEG_OPTS $*
$echov $avconv $AVCONV_OPTS $*
$avconv $AVCONV_OPTS $*
}
do_ffmpeg()
do_avconv()
{
f="$1"
shift
set -- $* ${target_path}/$f
run_ffmpeg $*
run_avconv $*
do_md5sum $f
if [ $f = $raw_dst ] ; then
$tiny_psnr $f $raw_ref
@ -70,12 +70,12 @@ do_ffmpeg()
fi
}
do_ffmpeg_nomd5()
do_avconv_nomd5()
{
f="$1"
shift
set -- $* ${target_path}/$f
run_ffmpeg $*
run_avconv $*
if [ $f = $raw_dst ] ; then
$tiny_psnr $f $raw_ref
elif [ $f = $pcm_dst ] ; then
@ -85,32 +85,32 @@ do_ffmpeg_nomd5()
fi
}
do_ffmpeg_crc()
do_avconv_crc()
{
f="$1"
shift
run_ffmpeg $* -f crc "$target_crcfile"
run_avconv $* -f crc "$target_crcfile"
echo "$f $(cat $crcfile)"
}
do_video_decoding()
{
do_ffmpeg $raw_dst $DEC_OPTS $1 -i $target_path/$file -f rawvideo $ENC_OPTS -vsync 0 $2
do_avconv $raw_dst $DEC_OPTS $1 -i $target_path/$file -f rawvideo $ENC_OPTS -vsync 0 $2
}
do_video_encoding()
{
file=${outfile}$1
do_ffmpeg $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS $2
do_avconv $file $DEC_OPTS -f image2 -vcodec pgmyuv -i $raw_src $ENC_OPTS $2
}
do_audio_encoding()
{
file=${outfile}$1
do_ffmpeg $file $DEC_OPTS -ac 2 -ar 44100 -f s16le -i $pcm_src -ab 128k $ENC_OPTS $2
do_avconv $file $DEC_OPTS -ac 2 -ar 44100 -f s16le -i $pcm_src -ab 128k $ENC_OPTS $2
}
do_audio_decoding()
{
do_ffmpeg $pcm_dst $DEC_OPTS -i $target_path/$file -sample_fmt s16 -f wav
do_avconv $pcm_dst $DEC_OPTS -i $target_path/$file -sample_fmt s16 -f wav
}