From 0d9bd2d5842a3eb5b327293509af06a05a0795ad Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Mon, 12 Sep 2011 13:56:06 +0200 Subject: [PATCH 01/23] configure: do not manually enable protocols Protocols are handled just like all other components groups such as muxers and are automatically enabled. --- configure | 1 - 1 file changed, 1 deletion(-) diff --git a/configure b/configure index 567fa9d1f4..e60b30bf6b 100755 --- a/configure +++ b/configure @@ -1675,7 +1675,6 @@ enable avserver enable network enable optimizations enable postproc -enable protocols enable static enable swscale enable swscale_alpha From 144904e901d557a8af1d73bd217ec15bc4bedb85 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Tue, 13 Dec 2011 15:55:11 +0100 Subject: [PATCH 02/23] build: rename subdir.mak ---> library.mak --- Makefile | 2 +- subdir.mak => library.mak | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename subdir.mak => library.mak (100%) diff --git a/Makefile b/Makefile index 3809ece352..19b8df42d3 100644 --- a/Makefile +++ b/Makefile @@ -113,7 +113,7 @@ define DOSUBDIR $(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V)))) SUBDIR := $(1)/ include $(SRC_PATH)/$(1)/Makefile -include $(SRC_PATH)/subdir.mak +include $(SRC_PATH)/library.mak endef $(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D)))) diff --git a/subdir.mak b/library.mak similarity index 100% rename from subdir.mak rename to library.mak From 86ae5124539c4077bca0b2c7686f87da39acb6b5 Mon Sep 17 00:00:00 2001 From: Derek Buitenhuis Date: Mon, 12 Dec 2011 13:01:12 -0500 Subject: [PATCH 03/23] doc: make developer.texi point to correct fate doc Signed-off-by: Derek Buitenhuis Signed-off-by: Diego Biurrun --- doc/developer.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/developer.texi b/doc/developer.texi index e484520413..046743fd62 100644 --- a/doc/developer.texi +++ b/doc/developer.texi @@ -514,6 +514,6 @@ Improvements to codec or demuxer might change the FATE results. Make sure to commit the update reference with the change and to explain in the comment why the expected result changed. -Please refer to @file{doc/fate.txt}. +Please refer to @url{fate.html}. @bye From 80f6c0bb95bb90f599b0c76c0fbac5454eff3b2f Mon Sep 17 00:00:00 2001 From: Derek Buitenhuis Date: Tue, 13 Dec 2011 14:33:48 -0500 Subject: [PATCH 04/23] v410 encoder and decoder v410 is a packed 10-bit 4:4:4 YCbCr format used in QuickTime. Signed-off-by: Derek Buitenhuis Signed-off-by: Diego Biurrun --- Changelog | 1 + doc/general.texi | 3 +- libavcodec/Makefile | 2 + libavcodec/allcodecs.c | 1 + libavcodec/avcodec.h | 1 + libavcodec/v410dec.c | 113 +++++++++++++++++++++++++++++++++++++++++ libavcodec/v410enc.c | 99 ++++++++++++++++++++++++++++++++++++ libavcodec/version.h | 2 +- libavformat/isom.c | 1 + libavformat/riff.c | 1 + 10 files changed, 222 insertions(+), 2 deletions(-) create mode 100644 libavcodec/v410dec.c create mode 100644 libavcodec/v410enc.c diff --git a/Changelog b/Changelog index 0d72c53ebd..b99935b0a3 100644 --- a/Changelog +++ b/Changelog @@ -107,6 +107,7 @@ easier to use. The changes are: - PCM format support in OMA demuxer - CLJR encoder - Dxtory capture format decoder +- v410 QuickTime uncompressed 4:4:4 10-bit encoder and decoder version 0.7: diff --git a/doc/general.texi b/doc/general.texi index bbeea641d2..88c044df2e 100644 --- a/doc/general.texi +++ b/doc/general.texi @@ -578,7 +578,8 @@ following image formats are supported: @item Tiertex Limited SEQ video @tab @tab X @tab Codec used in DOS CD-ROM FlashBack game. @item Ut Video @tab @tab X -@item V210 Quicktime Uncompressed 4:2:2 10-bit @tab X @tab X +@item v210 QuickTime uncompressed 4:2:2 10-bit @tab X @tab X +@item v410 QuickTime uncompressed 4:4:4 10-bit @tab X @tab X @item VBLE Lossless Codec @tab @tab X @item VMware Screen Codec / VMware Video @tab @tab X @tab Codec used in videos captured by VMware. diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 07a3048535..be9cd3610c 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -384,6 +384,8 @@ OBJS-$(CONFIG_ULTI_DECODER) += ulti.o OBJS-$(CONFIG_UTVIDEO_DECODER) += utvideo.o OBJS-$(CONFIG_V210_DECODER) += v210dec.o OBJS-$(CONFIG_V210_ENCODER) += v210enc.o +OBJS-$(CONFIG_V410_DECODER) += v410dec.o +OBJS-$(CONFIG_V410_ENCODER) += v410enc.o OBJS-$(CONFIG_V210X_DECODER) += v210x.o OBJS-$(CONFIG_VB_DECODER) += vb.o OBJS-$(CONFIG_VBLE_DECODER) += vble.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 208af1f059..8a09b90f47 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -204,6 +204,7 @@ void avcodec_register_all(void) REGISTER_DECODER (UTVIDEO, utvideo); REGISTER_ENCDEC (V210, v210); REGISTER_DECODER (V210X, v210x); + REGISTER_ENCDEC (V410, v410); REGISTER_DECODER (VB, vb); REGISTER_DECODER (VBLE, vble); REGISTER_DECODER (VC1, vc1); diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index fe65a6e299..1715bbb32b 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -253,6 +253,7 @@ enum CodecID { CODEC_ID_BMV_VIDEO, CODEC_ID_VBLE, CODEC_ID_DXTORY, + CODEC_ID_V410, /* various PCM "codecs" */ CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs diff --git a/libavcodec/v410dec.c b/libavcodec/v410dec.c new file mode 100644 index 0000000000..5df95f8beb --- /dev/null +++ b/libavcodec/v410dec.c @@ -0,0 +1,113 @@ +/* + * v410 decoder + * + * Copyright (c) 2011 Derek Buitenhuis + * + * 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 + */ + +#include "avcodec.h" +#include "get_bits.h" + +static av_cold int v410_decode_init(AVCodecContext *avctx) +{ + avctx->pix_fmt = PIX_FMT_YUV444P10; + avctx->bits_per_raw_sample = 10; + + if (avctx->width & 1) { + av_log(avctx, AV_LOG_ERROR, "v410 requires even width.\n"); + return AVERROR_INVALIDDATA; + } + + avctx->coded_frame = avcodec_alloc_frame(); + + if (!avctx->coded_frame) { + av_log(avctx, AV_LOG_ERROR, "Could not allocate frame.\n"); + return AVERROR(ENOMEM); + } + + return 0; +} + +static int v410_decode_frame(AVCodecContext *avctx, void *data, + int *data_size, AVPacket *avpkt) +{ + AVFrame *pic = avctx->coded_frame; + uint8_t *src = avpkt->data; + uint16_t *y, *u, *v; + uint32_t val; + int i, j; + + if (pic->data[0]) + avctx->release_buffer(avctx, pic); + + pic->reference = 0; + + if (avctx->get_buffer(avctx, pic) < 0) { + av_log(avctx, AV_LOG_ERROR, "Could not allocate buffer.\n"); + return AVERROR(ENOMEM); + } + + pic->key_frame = 1; + pic->pict_type = FF_I_TYPE; + + y = (uint16_t *)pic->data[0]; + u = (uint16_t *)pic->data[1]; + v = (uint16_t *)pic->data[2]; + + for (i = 0; i < avctx->height; i++) { + for (j = 0; j < avctx->width; j++) { + val = AV_RL32(src); + + u[j] = (val >> 2) & 0x3FF; + y[j] = (val >> 12) & 0x3FF; + v[j] = (val >> 22); + + src += 4; + } + + y += pic->linesize[0] >> 1; + u += pic->linesize[1] >> 1; + v += pic->linesize[2] >> 1; + } + + *data_size = sizeof(AVFrame); + *(AVFrame *)data = *pic; + + return avpkt->size; +} + +static av_cold int v410_decode_close(AVCodecContext *avctx) +{ + if (avctx->coded_frame->data[0]) + avctx->release_buffer(avctx, avctx->coded_frame); + + av_freep(&avctx->coded_frame); + + return 0; +} + +AVCodec ff_v410_decoder = { + .name = "v410", + .type = AVMEDIA_TYPE_VIDEO, + .id = CODEC_ID_V410, + .init = v410_decode_init, + .decode = v410_decode_frame, + .close = v410_decode_close, + .capabilities = CODEC_CAP_DR1, + .long_name = NULL_IF_CONFIG_SMALL("Uncompressed 4:4:4 10-bit"), +}; diff --git a/libavcodec/v410enc.c b/libavcodec/v410enc.c new file mode 100644 index 0000000000..1e600c35b6 --- /dev/null +++ b/libavcodec/v410enc.c @@ -0,0 +1,99 @@ +/* + * v410 encoder + * + * Copyright (c) 2011 Derek Buitenhuis + * + * 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 + */ + +#include "avcodec.h" +#include "put_bits.h" + +static av_cold int v410_encode_init(AVCodecContext *avctx) +{ + if (avctx->width & 1) { + av_log(avctx, AV_LOG_ERROR, "v410 requires even width.\n"); + return AVERROR_INVALIDDATA; + } + + avctx->coded_frame = avcodec_alloc_frame(); + + if (!avctx->coded_frame) { + av_log(avctx, AV_LOG_ERROR, "Could not allocate frame.\n"); + return AVERROR(ENOMEM); + } + + return 0; +} + +static int v410_encode_frame(AVCodecContext *avctx, uint8_t *buf, + int buf_size, void *data) +{ + AVFrame *pic = data; + uint8_t *dst = buf; + uint16_t *y, *u, *v; + uint32_t val; + int i, j; + int output_size = 0; + + if (buf_size < avctx->width * avctx->height * 3) { + av_log(avctx, AV_LOG_ERROR, "Out buffer is too small.\n"); + return AVERROR(ENOMEM); + } + + avctx->coded_frame->reference = 0; + avctx->coded_frame->key_frame = 1; + avctx->coded_frame->pict_type = FF_I_TYPE; + + y = (uint16_t *)pic->data[0]; + u = (uint16_t *)pic->data[1]; + v = (uint16_t *)pic->data[2]; + + for (i = 0; i < avctx->height; i++) { + for (j = 0; j < avctx->width; j++) { + val = u[j] << 2; + val |= y[j] << 12; + val |= v[j] << 22; + AV_WL32(dst, val); + dst += 4; + output_size += 4; + } + y += pic->linesize[0] >> 1; + u += pic->linesize[1] >> 1; + v += pic->linesize[2] >> 1; + } + + return output_size; +} + +static av_cold int v410_encode_close(AVCodecContext *avctx) +{ + av_freep(&avctx->coded_frame); + + return 0; +} + +AVCodec ff_v410_encoder = { + .name = "v410", + .type = AVMEDIA_TYPE_VIDEO, + .id = CODEC_ID_V410, + .init = v410_encode_init, + .encode = v410_encode_frame, + .close = v410_encode_close, + .pix_fmts = (const enum PixelFormat[]){ PIX_FMT_YUV444P10, PIX_FMT_NONE }, + .long_name = NULL_IF_CONFIG_SMALL("Uncompressed 4:4:4 10-bit"), +}; diff --git a/libavcodec/version.h b/libavcodec/version.h index a41234fd90..d15fb48825 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -21,7 +21,7 @@ #define AVCODEC_VERSION_H #define LIBAVCODEC_VERSION_MAJOR 53 -#define LIBAVCODEC_VERSION_MINOR 27 +#define LIBAVCODEC_VERSION_MINOR 28 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/libavformat/isom.c b/libavformat/isom.c index 6eb1827d8d..eab304c006 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -90,6 +90,7 @@ const AVCodecTag codec_movvideo_tags[] = { { CODEC_ID_R10K, MKTAG('R', '1', '0', 'g') }, /* UNCOMPRESSED 10BIT RGB */ { CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, /* UNCOMPRESSED 10BIT RGB */ { CODEC_ID_V210, MKTAG('v', '2', '1', '0') }, /* UNCOMPRESSED 10BIT 4:2:2 */ + { CODEC_ID_V410, MKTAG('v', '4', '1', '0') }, /* UNCOMPRESSED 10BIT 4:4:4 */ { CODEC_ID_MJPEG, MKTAG('j', 'p', 'e', 'g') }, /* PhotoJPEG */ { CODEC_ID_MJPEG, MKTAG('m', 'j', 'p', 'a') }, /* Motion-JPEG (format A) */ diff --git a/libavformat/riff.c b/libavformat/riff.c index db3f9584ed..1d226abb40 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -196,6 +196,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { { CODEC_ID_R10K, MKTAG('R', '1', '0', 'k') }, { CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, { CODEC_ID_V210, MKTAG('v', '2', '1', '0') }, + { CODEC_ID_V410, MKTAG('v', '4', '1', '0') }, { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '1') }, { CODEC_ID_INDEO3, MKTAG('I', 'V', '3', '2') }, { CODEC_ID_INDEO4, MKTAG('I', 'V', '4', '1') }, From 88b97357531bca25c22c351d5cac36e168b70803 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Tue, 13 Dec 2011 22:54:52 +0100 Subject: [PATCH 05/23] build: conditionally compile x86 H.264 chroma optimizations --- configure | 13 +++++++------ libavcodec/x86/Makefile | 5 +++-- libavcodec/x86/dsputil_mmx.c | 22 +++++++++++++--------- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/configure b/configure index e60b30bf6b..c19f2f3993 100755 --- a/configure +++ b/configure @@ -929,6 +929,7 @@ CONFIG_LIST=" golomb gpl gray + h264chroma h264dsp h264pred hardcoded_tables @@ -1292,7 +1293,7 @@ h263_encoder_select="aandct" h263_vaapi_hwaccel_select="vaapi h263_decoder" h263i_decoder_select="h263_decoder" h263p_encoder_select="h263_encoder" -h264_decoder_select="golomb h264dsp h264pred" +h264_decoder_select="golomb h264chroma h264dsp h264pred" h264_dxva2_hwaccel_deps="dxva2api_h" h264_dxva2_hwaccel_select="dxva2 h264_decoder" h264_vaapi_hwaccel_select="vaapi h264_decoder" @@ -1345,14 +1346,14 @@ rv10_decoder_select="h263_decoder" rv10_encoder_select="h263_encoder" rv20_decoder_select="h263_decoder" rv20_encoder_select="h263_encoder" -rv30_decoder_select="golomb h264pred" -rv40_decoder_select="golomb h264pred" +rv30_decoder_select="golomb h264chroma h264pred" +rv40_decoder_select="golomb h264chroma h264pred" shorten_decoder_select="golomb" sipr_decoder_select="lsp" snow_decoder_select="dwt" snow_encoder_select="aandct dwt" svq1_encoder_select="aandct" -svq3_decoder_select="golomb h264dsp h264pred" +svq3_decoder_select="golomb h264chroma h264dsp h264pred" svq3_decoder_suggest="zlib" theora_decoder_select="vp3_decoder" tiff_decoder_suggest="zlib" @@ -1360,7 +1361,7 @@ tiff_encoder_suggest="zlib" truehd_decoder_select="mlp_decoder" tscc_decoder_select="zlib" twinvq_decoder_select="mdct lsp sinewin" -vc1_decoder_select="h263_decoder" +vc1_decoder_select="h263_decoder h264chroma" vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex" vc1_dxva2_hwaccel_select="dxva2 vc1_decoder" vc1_vaapi_hwaccel_select="vaapi vc1_decoder" @@ -1397,7 +1398,7 @@ vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads" vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" # parsers -h264_parser_select="golomb h264dsp h264pred" +h264_parser_select="golomb h264chroma h264dsp h264pred" # external libraries libdirac_decoder_deps="libdirac !libschroedinger" diff --git a/libavcodec/x86/Makefile b/libavcodec/x86/Makefile index ab13109d72..6759a228c4 100644 --- a/libavcodec/x86/Makefile +++ b/libavcodec/x86/Makefile @@ -9,6 +9,9 @@ YASM-OBJS-FFT-$(HAVE_SSE) += x86/fft_sse.o YASM-OBJS-$(CONFIG_FFT) += x86/fft_mmx.o \ $(YASM-OBJS-FFT-yes) +YASM-OBJS-$(CONFIG_H264CHROMA) += x86/h264_chromamc.o \ + x86/h264_chromamc_10bit.o + MMX-OBJS-$(CONFIG_H264DSP) += x86/h264dsp_mmx.o YASM-OBJS-$(CONFIG_H264DSP) += x86/h264_deblock.o \ x86/h264_deblock_10bit.o \ @@ -48,8 +51,6 @@ MMX-OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp-init.o MMX-OBJS-$(HAVE_YASM) += x86/dsputil_yasm.o \ x86/deinterlace.o \ x86/fmtconvert.o \ - x86/h264_chromamc.o \ - x86/h264_chromamc_10bit.o \ x86/h264_qpel_10bit.o \ $(YASM-OBJS-yes) diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index 104bd7595f..e34b95b0da 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -2563,7 +2563,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) } #if HAVE_YASM - if (!high_bit_depth) { + if (!high_bit_depth && CONFIG_H264CHROMA) { c->put_h264_chroma_pixels_tab[0]= ff_put_h264_chroma_mc8_mmx_rnd; c->put_h264_chroma_pixels_tab[1]= ff_put_h264_chroma_mc4_mmx; } @@ -2667,13 +2667,13 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmx2, ); #if HAVE_YASM - if (!high_bit_depth) { + if (!high_bit_depth && CONFIG_H264CHROMA) { 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; c->avg_h264_chroma_pixels_tab[2]= ff_avg_h264_chroma_mc2_mmx2; c->put_h264_chroma_pixels_tab[2]= ff_put_h264_chroma_mc2_mmx2; } - if (bit_depth == 10) { + if (bit_depth == 10 && CONFIG_H264CHROMA) { c->put_h264_chroma_pixels_tab[2]= ff_put_h264_chroma_mc2_10_mmxext; c->avg_h264_chroma_pixels_tab[2]= ff_avg_h264_chroma_mc2_10_mmxext; c->put_h264_chroma_pixels_tab[1]= ff_put_h264_chroma_mc4_10_mmxext; @@ -2744,7 +2744,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, 3dnow, ); #if HAVE_YASM - if (!high_bit_depth) { + if (!high_bit_depth && CONFIG_H264CHROMA) { c->avg_h264_chroma_pixels_tab[0]= ff_avg_h264_chroma_mc8_3dnow_rnd; c->avg_h264_chroma_pixels_tab[1]= ff_avg_h264_chroma_mc4_3dnow; } @@ -2797,8 +2797,10 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) H264_QPEL_FUNCS_10(2, 0, sse2_cache64) H264_QPEL_FUNCS_10(3, 0, sse2_cache64) - c->put_h264_chroma_pixels_tab[0]= ff_put_h264_chroma_mc8_10_sse2; - c->avg_h264_chroma_pixels_tab[0]= ff_avg_h264_chroma_mc8_10_sse2; + if (CONFIG_H264CHROMA) { + c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_10_sse2; + c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_10_sse2; + } } #endif } @@ -2827,7 +2829,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) #endif c->add_png_paeth_prediction= add_png_paeth_prediction_ssse3; #if HAVE_YASM - if (!high_bit_depth) { + if (!high_bit_depth && CONFIG_H264CHROMA) { c->put_h264_chroma_pixels_tab[0]= ff_put_h264_chroma_mc8_ssse3_rnd; c->avg_h264_chroma_pixels_tab[0]= ff_avg_h264_chroma_mc8_ssse3_rnd; c->put_h264_chroma_pixels_tab[1]= ff_put_h264_chroma_mc4_ssse3; @@ -2928,8 +2930,10 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) H264_QPEL_FUNCS_10(2, 0, sse2) H264_QPEL_FUNCS_10(3, 0, sse2) - c->put_h264_chroma_pixels_tab[0]= ff_put_h264_chroma_mc8_10_avx; - c->avg_h264_chroma_pixels_tab[0]= ff_avg_h264_chroma_mc8_10_avx; + if (CONFIG_H264CHROMA) { + c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_10_avx; + c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_10_avx; + } } c->butterflies_float_interleave = ff_butterflies_float_interleave_avx; } From 52de07e1f177fa45f34f3de88f4455d552c59677 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 03:15:37 +0100 Subject: [PATCH 06/23] swscale: Mark yuv2planeX_8_mmx as MMX2; it contains MMX2 instructions. --- libswscale/x86/scale.asm | 2 +- libswscale/x86/swscale_mmx.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libswscale/x86/scale.asm b/libswscale/x86/scale.asm index 3bdf71b542..1f5e1dbf4c 100644 --- a/libswscale/x86/scale.asm +++ b/libswscale/x86/scale.asm @@ -649,7 +649,7 @@ cglobal yuv2planeX_%2_%1, %4, 7, %3 %define PALIGNR PALIGNR_MMX %ifdef ARCH_X86_32 INIT_MMX -yuv2planeX_fn mmx, 8, 0, 7 +yuv2planeX_fn mmx2, 8, 0, 7 yuv2planeX_fn mmx2, 9, 0, 5 yuv2planeX_fn mmx2, 10, 0, 5 %endif diff --git a/libswscale/x86/swscale_mmx.c b/libswscale/x86/swscale_mmx.c index 15511c6b13..56a1dd2f37 100644 --- a/libswscale/x86/swscale_mmx.c +++ b/libswscale/x86/swscale_mmx.c @@ -221,7 +221,7 @@ extern void ff_yuv2planeX_ ## size ## _ ## opt(const int16_t *filter, int filter VSCALEX_FUNC(10, opt2) #if ARCH_X86_32 -VSCALEX_FUNCS(mmx, mmx2); +VSCALEX_FUNCS(mmx2, mmx2); #endif VSCALEX_FUNCS(sse2, sse2); VSCALEX_FUNCS(sse4, sse4); @@ -295,9 +295,11 @@ switch(c->dstBpc){ \ if (cpu_flags & AV_CPU_FLAG_MMX) { ASSIGN_MMX_SCALE_FUNC(c->hyScale, c->hLumFilterSize, mmx, mmx); ASSIGN_MMX_SCALE_FUNC(c->hcScale, c->hChrFilterSize, mmx, mmx); - ASSIGN_VSCALEX_FUNC(c->yuv2planeX, mmx, mmx2, cpu_flags & AV_CPU_FLAG_MMX2,); ASSIGN_VSCALE_FUNC(c->yuv2plane1, mmx, mmx2, cpu_flags & AV_CPU_FLAG_MMX2); } + if (cpu_flags & AV_CPU_FLAG_MMX2) { + ASSIGN_VSCALEX_FUNC(c->yuv2planeX, mmx2, mmx2, cpu_flags & AV_CPU_FLAG_MMX2,); + } #endif #define ASSIGN_SSE_SCALE_FUNC(hscalefn, filtersize, opt1, opt2) \ switch (filtersize) { \ From 3c62a7148653123f60a7a32023bb36774a23e7d2 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 03:15:38 +0100 Subject: [PATCH 07/23] swscale_mmx: drop no longer required parameters from VSCALEX macros --- libswscale/x86/swscale_mmx.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/libswscale/x86/swscale_mmx.c b/libswscale/x86/swscale_mmx.c index 56a1dd2f37..4305cef41d 100644 --- a/libswscale/x86/swscale_mmx.c +++ b/libswscale/x86/swscale_mmx.c @@ -215,18 +215,18 @@ SCALE_FUNCS_SSE(sse4); extern void ff_yuv2planeX_ ## size ## _ ## opt(const int16_t *filter, int filterSize, \ const int16_t **src, uint8_t *dest, int dstW, \ const uint8_t *dither, int offset) -#define VSCALEX_FUNCS(opt1, opt2) \ - VSCALEX_FUNC(8, opt1); \ - VSCALEX_FUNC(9, opt2); \ - VSCALEX_FUNC(10, opt2) +#define VSCALEX_FUNCS(opt) \ + VSCALEX_FUNC(8, opt); \ + VSCALEX_FUNC(9, opt); \ + VSCALEX_FUNC(10, opt) #if ARCH_X86_32 -VSCALEX_FUNCS(mmx2, mmx2); +VSCALEX_FUNCS(mmx2); #endif -VSCALEX_FUNCS(sse2, sse2); -VSCALEX_FUNCS(sse4, sse4); +VSCALEX_FUNCS(sse2); +VSCALEX_FUNCS(sse4); VSCALEX_FUNC(16, sse4); -VSCALEX_FUNCS(avx, avx); +VSCALEX_FUNCS(avx); #define VSCALE_FUNC(size, opt) \ extern void ff_yuv2plane1_ ## size ## _ ## opt(const int16_t *src, uint8_t *dst, int dstW, \ @@ -277,12 +277,12 @@ void ff_sws_init_swScale_mmx(SwsContext *c) case 8: ASSIGN_SCALE_FUNC2(hscalefn, 8, opt1, opt2); break; \ default: ASSIGN_SCALE_FUNC2(hscalefn, X, opt1, opt2); break; \ } -#define ASSIGN_VSCALEX_FUNC(vscalefn, opt1, opt2, opt2chk, do_16_case) \ +#define ASSIGN_VSCALEX_FUNC(vscalefn, opt, do_16_case) \ switch(c->dstBpc){ \ - case 16: do_16_case; break; \ - case 10: if (!isBE(c->dstFormat) && opt2chk) vscalefn = ff_yuv2planeX_10_ ## opt2; break; \ - case 9: if (!isBE(c->dstFormat) && opt2chk) vscalefn = ff_yuv2planeX_9_ ## opt2; break; \ - default: vscalefn = ff_yuv2planeX_8_ ## opt1; break; \ + case 16: do_16_case; break; \ + case 10: if (!isBE(c->dstFormat)) vscalefn = ff_yuv2planeX_10_ ## opt; break; \ + case 9: if (!isBE(c->dstFormat)) vscalefn = ff_yuv2planeX_9_ ## opt; break; \ + default: vscalefn = ff_yuv2planeX_8_ ## opt; break; \ } #define ASSIGN_VSCALE_FUNC(vscalefn, opt1, opt2, opt2chk) \ switch(c->dstBpc){ \ @@ -298,7 +298,7 @@ switch(c->dstBpc){ \ ASSIGN_VSCALE_FUNC(c->yuv2plane1, mmx, mmx2, cpu_flags & AV_CPU_FLAG_MMX2); } if (cpu_flags & AV_CPU_FLAG_MMX2) { - ASSIGN_VSCALEX_FUNC(c->yuv2planeX, mmx2, mmx2, cpu_flags & AV_CPU_FLAG_MMX2,); + ASSIGN_VSCALEX_FUNC(c->yuv2planeX, mmx2,); } #endif #define ASSIGN_SSE_SCALE_FUNC(hscalefn, filtersize, opt1, opt2) \ @@ -312,7 +312,7 @@ switch(c->dstBpc){ \ if (cpu_flags & AV_CPU_FLAG_SSE2) { ASSIGN_SSE_SCALE_FUNC(c->hyScale, c->hLumFilterSize, sse2, sse2); ASSIGN_SSE_SCALE_FUNC(c->hcScale, c->hChrFilterSize, sse2, sse2); - ASSIGN_VSCALEX_FUNC(c->yuv2planeX, sse2, sse2, 1,); + ASSIGN_VSCALEX_FUNC(c->yuv2planeX, sse2,); ASSIGN_VSCALE_FUNC(c->yuv2plane1, sse2, sse2, 1); } if (cpu_flags & AV_CPU_FLAG_SSSE3) { @@ -323,14 +323,14 @@ switch(c->dstBpc){ \ /* Xto15 don't need special sse4 functions */ ASSIGN_SSE_SCALE_FUNC(c->hyScale, c->hLumFilterSize, sse4, ssse3); ASSIGN_SSE_SCALE_FUNC(c->hcScale, c->hChrFilterSize, sse4, ssse3); - ASSIGN_VSCALEX_FUNC(c->yuv2planeX, sse4, sse4, 1, + ASSIGN_VSCALEX_FUNC(c->yuv2planeX, sse4, if (!isBE(c->dstFormat)) c->yuv2planeX = ff_yuv2planeX_16_sse4); if (c->dstBpc == 16 && !isBE(c->dstFormat)) c->yuv2plane1 = ff_yuv2plane1_16_sse4; } if (cpu_flags & AV_CPU_FLAG_AVX) { - ASSIGN_VSCALEX_FUNC(c->yuv2planeX, avx, avx, 1,); + ASSIGN_VSCALEX_FUNC(c->yuv2planeX, avx,); ASSIGN_VSCALE_FUNC(c->yuv2plane1, avx, avx, 1); } #endif From 3e0b1c9a816185b755f79b195d58f9a057bac0b2 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Mon, 12 Sep 2011 17:40:29 +0200 Subject: [PATCH 08/23] configure: cosmetics: sort some lists where appropriate --- configure | 78 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/configure b/configure index c19f2f3993..a73924a8f1 100755 --- a/configure +++ b/configure @@ -1060,8 +1060,8 @@ HAVE_LIST=" dev_bktr_ioctl_bt848_h dev_bktr_ioctl_meteor_h dev_ic_bt8xx_h - dev_video_meteor_ioctl_meteor_h dev_video_bktr_ioctl_bt848_h + dev_video_meteor_ioctl_meteor_h dlfcn_h dlopen dos_paths @@ -1080,7 +1080,6 @@ HAVE_LIST=" GetProcessTimes getrusage gnu_as - struct_rusage_ru_maxrss ibm_asm inet_aton inline_asm @@ -1106,28 +1105,29 @@ HAVE_LIST=" memalign mkstemp mmap + poll_h posix_memalign round roundf sdl sdl_video_size setmode + setrlimit sndio_h socklen_t soundcard_h - poll_h - setrlimit strerror_r strptime strtok_r struct_addrinfo struct_ipv6_mreq + struct_rusage_ru_maxrss struct_sockaddr_in6 struct_sockaddr_sa_len struct_sockaddr_storage symver - symver_gnu_asm symver_asm_label + symver_gnu_asm sys_mman_h sys_resource_h sys_select_h @@ -1242,8 +1242,8 @@ fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64" fast_clz_if_any="alpha armv5te avr32 mips ppc x86" fast_unaligned_if_any="armv6 ppc x86" -need_memalign="altivec neon sse" inline_asm_deps="!tms470" +need_memalign="altivec neon sse" symver_if_any="symver_asm_label symver_gnu_asm" @@ -1307,28 +1307,28 @@ loco_decoder_select="golomb" mjpeg_encoder_select="aandct" mlp_decoder_select="mlp_parser" mp1_decoder_select="mpegaudiodsp" -mp2_decoder_select="mpegaudiodsp" -mp3adu_decoder_select="mpegaudiodsp" -mp3_decoder_select="mpegaudiodsp" -mp3on4_decoder_select="mpegaudiodsp" mp1float_decoder_select="mpegaudiodsp" +mp2_decoder_select="mpegaudiodsp" mp2float_decoder_select="mpegaudiodsp" +mp3_decoder_select="mpegaudiodsp" +mp3adu_decoder_select="mpegaudiodsp" mp3adufloat_decoder_select="mpegaudiodsp" mp3float_decoder_select="mpegaudiodsp" +mp3on4_decoder_select="mpegaudiodsp" mp3on4float_decoder_select="mpegaudiodsp" -mpeg1video_encoder_select="aandct" -mpeg2video_encoder_select="aandct" -mpeg4_decoder_select="h263_decoder mpeg4video_parser" -mpeg4_encoder_select="h263_encoder" mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" +mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h" +mpeg_xvmc_decoder_select="mpegvideo_decoder" mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" +mpeg1video_encoder_select="aandct" mpeg2_dxva2_hwaccel_deps="dxva2api_h" mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" +mpeg2video_encoder_select="aandct" +mpeg4_decoder_select="h263_decoder mpeg4video_parser" +mpeg4_encoder_select="h263_encoder" mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" -mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h" -mpeg_xvmc_decoder_select="mpegvideo_decoder" msmpeg4v1_decoder_select="h263_decoder" msmpeg4v1_encoder_select="h263_encoder" msmpeg4v2_decoder_select="h263_decoder" @@ -1514,8 +1514,6 @@ avformat_deps="avcodec" postproc_deps="gpl" # programs -ffmpeg_deps="avcodec avformat swscale" -ffmpeg_select="buffer_filter" avconv_deps="avcodec avformat swscale" avconv_select="buffer_filter" avplay_deps="avcodec avformat swscale sdl" @@ -1523,6 +1521,8 @@ avplay_select="rdft" avprobe_deps="avcodec avformat" avserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer" avserver_extralibs='$ldl' +ffmpeg_deps="avcodec avformat swscale" +ffmpeg_select="buffer_filter" doc_deps="texi2html" @@ -1545,7 +1545,6 @@ mxf_d10_test_deps="avfilter" seek_lavf_mxf_d10_test_deps="mxf_d10_test" test_deps _encoder _decoder \ - adpcm_g726=g726 \ adpcm_ima_qt \ adpcm_ima_wav \ adpcm_ms \ @@ -1561,6 +1560,7 @@ test_deps _encoder _decoder \ flac \ flashsv \ flv \ + adpcm_g726=g726 \ gif \ h261 \ h263="h263 h263p" \ @@ -1646,9 +1646,9 @@ objformat="elf" pkg_config_default=pkg-config ranlib="ranlib" yasmexe="yasm" -nogas=":" nm_opts='-g' +nogas=":" # machine arch_default=$(uname -m) @@ -1664,20 +1664,22 @@ enable avdevice enable avfilter enable avformat enable avutil -enable asm -enable debug -enable doc -enable fastdiv -enable ffmpeg +enable postproc +enable swscale + enable avconv enable avplay enable avprobe enable avserver +enable ffmpeg + +enable asm +enable debug +enable doc +enable fastdiv enable network enable optimizations -enable postproc enable static -enable swscale enable swscale_alpha # build settings @@ -1897,14 +1899,14 @@ tmpfile(){ trap 'rm -f -- $TMPFILES' EXIT -tmpfile TMPC .c -tmpfile TMPE $EXESUF -tmpfile TMPH .h -tmpfile TMPO .o -tmpfile TMPS .S -tmpfile TMPV .ver -tmpfile TMPSH .sh tmpfile TMPASM .asm +tmpfile TMPC .c +tmpfile TMPE $EXESUF +tmpfile TMPH .h +tmpfile TMPO .o +tmpfile TMPS .S +tmpfile TMPSH .sh +tmpfile TMPV .ver unset -f mktemp @@ -1923,9 +1925,9 @@ EOF die "Sanity test failed." fi +filter_asflags=echo filter_cflags=echo filter_cppflags=echo -filter_asflags=echo if $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then cc_type=llvm_gcc @@ -3336,13 +3338,13 @@ get_version(){ eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak } -get_version LIBSWSCALE libswscale/swscale.h -get_version LIBPOSTPROC libpostproc/postprocess.h get_version LIBAVCODEC libavcodec/version.h get_version LIBAVDEVICE libavdevice/avdevice.h +get_version LIBAVFILTER libavfilter/avfilter.h get_version LIBAVFORMAT libavformat/version.h get_version LIBAVUTIL libavutil/avutil.h -get_version LIBAVFILTER libavfilter/avfilter.h +get_version LIBPOSTPROC libpostproc/postprocess.h +get_version LIBSWSCALE libswscale/swscale.h cat > $TMPH < Date: Thu, 8 Dec 2011 02:50:25 +0000 Subject: [PATCH 09/23] rv40: rearrange loop filter functions This splits the loop filter functions into smaller, more SIMD-friendly functions. Signed-off-by: Mans Rullgard --- libavcodec/rv34dsp.h | 21 ++- libavcodec/rv40.c | 69 +++++++--- libavcodec/rv40dsp.c | 306 +++++++++++++++++++++++++------------------ 3 files changed, 245 insertions(+), 151 deletions(-) diff --git a/libavcodec/rv34dsp.h b/libavcodec/rv34dsp.h index cf6e14d305..01352ea793 100644 --- a/libavcodec/rv34dsp.h +++ b/libavcodec/rv34dsp.h @@ -36,10 +36,18 @@ typedef void (*rv40_weight_func)(uint8_t *dst/*align width (8 or 16)*/, typedef void (*rv34_inv_transform_func)(DCTELEM *block); -typedef void (*rv40_loop_filter_func)(uint8_t *src, int stride, int dmode, - int lim_q1, int lim_p1, int alpha, - int beta, int beta2, int chroma, - int edge); +typedef void (*rv40_weak_loop_filter_func)(uint8_t *src, int stride, + int filter_p1, int filter_q1, + int alpha, int beta, + int lims, int lim_q1, int lim_p1); + +typedef void (*rv40_strong_loop_filter_func)(uint8_t *src, int stride, + int alpha, int lims, + int dmode, int chroma); + +typedef int (*rv40_loop_filter_strength_func)(uint8_t *src, int stride, + int beta, int beta2, int edge, + int *p1, int *q1); typedef struct RV34DSPContext { qpel_mc_func put_pixels_tab[4][16]; @@ -49,8 +57,9 @@ typedef struct RV34DSPContext { rv40_weight_func rv40_weight_pixels_tab[2]; rv34_inv_transform_func rv34_inv_transform_tab[2]; void (*rv34_dequant4x4)(DCTELEM *block, int Qdc, int Q); - rv40_loop_filter_func rv40_h_loop_filter; - rv40_loop_filter_func rv40_v_loop_filter; + rv40_weak_loop_filter_func rv40_weak_loop_filter[2]; + rv40_strong_loop_filter_func rv40_strong_loop_filter[2]; + rv40_loop_filter_strength_func rv40_loop_filter_strength[2]; } RV34DSPContext; void ff_rv30dsp_init(RV34DSPContext *c, DSPContext* dsp); diff --git a/libavcodec/rv40.c b/libavcodec/rv40.c index 3216e838ef..bde63e19a5 100644 --- a/libavcodec/rv40.c +++ b/libavcodec/rv40.c @@ -294,6 +294,34 @@ enum RV40BlockPos{ static const int neighbour_offs_x[4] = { 0, 0, -1, 0 }; static const int neighbour_offs_y[4] = { 0, -1, 0, 1 }; +static void rv40_adaptive_loop_filter(RV34DSPContext *rdsp, + uint8_t *src, int stride, int dmode, + int lim_q1, int lim_p1, + int alpha, int beta, int beta2, + int chroma, int edge, int dir) +{ + int filter_p1, filter_q1; + int strong; + int lims; + + strong = rdsp->rv40_loop_filter_strength[dir](src, stride, beta, beta2, + edge, &filter_p1, &filter_q1); + + lims = filter_p1 + filter_q1 + ((lim_q1 + lim_p1) >> 1) + 1; + + if (strong) { + rdsp->rv40_strong_loop_filter[dir](src, stride, alpha, + lims, dmode, chroma); + } else if (filter_p1 & filter_q1) { + rdsp->rv40_weak_loop_filter[dir](src, stride, 1, 1, alpha, beta, + lims, lim_q1, lim_p1); + } else if (filter_p1 | filter_q1) { + rdsp->rv40_weak_loop_filter[dir](src, stride, filter_p1, filter_q1, + alpha, beta, lims >> 1, lim_q1 >> 1, + lim_p1 >> 1); + } +} + /** * RV40 loop filtering function */ @@ -430,10 +458,11 @@ static void rv40_loop_filter(RV34DecContext *r, int row) // if bottom block is coded then we can filter its top edge // (or bottom edge of this block, which is the same) if(y_h_deblock & (MASK_BOTTOM << ij)){ - r->rdsp.rv40_h_loop_filter(Y+4*s->linesize, s->linesize, dither, - y_to_deblock & (MASK_BOTTOM << ij) ? clip[POS_CUR] : 0, - clip_cur, - alpha, beta, betaY, 0, 0); + rv40_adaptive_loop_filter(&r->rdsp, Y+4*s->linesize, + s->linesize, dither, + y_to_deblock & (MASK_BOTTOM << ij) ? clip[POS_CUR] : 0, + clip_cur, alpha, beta, betaY, + 0, 0, 0); } // filter left block edge in ordinary mode (with low filtering strength) if(y_v_deblock & (MASK_CUR << ij) && (i || !(mb_strong[POS_CUR] || mb_strong[POS_LEFT]))){ @@ -441,25 +470,25 @@ static void rv40_loop_filter(RV34DecContext *r, int row) clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0; else clip_left = y_to_deblock & (MASK_CUR << (ij-1)) ? clip[POS_CUR] : 0; - r->rdsp.rv40_v_loop_filter(Y, s->linesize, dither, - clip_cur, - clip_left, - alpha, beta, betaY, 0, 0); + rv40_adaptive_loop_filter(&r->rdsp, Y, s->linesize, dither, + clip_cur, + clip_left, + alpha, beta, betaY, 0, 0, 1); } // filter top edge of the current macroblock when filtering strength is high if(!j && y_h_deblock & (MASK_CUR << i) && (mb_strong[POS_CUR] || mb_strong[POS_TOP])){ - r->rdsp.rv40_h_loop_filter(Y, s->linesize, dither, + rv40_adaptive_loop_filter(&r->rdsp, Y, s->linesize, dither, clip_cur, mvmasks[POS_TOP] & (MASK_TOP << i) ? clip[POS_TOP] : 0, - alpha, beta, betaY, 0, 1); + alpha, beta, betaY, 0, 1, 0); } // filter left block edge in edge mode (with high filtering strength) if(y_v_deblock & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] || mb_strong[POS_LEFT])){ clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0; - r->rdsp.rv40_v_loop_filter(Y, s->linesize, dither, + rv40_adaptive_loop_filter(&r->rdsp, Y, s->linesize, dither, clip_cur, clip_left, - alpha, beta, betaY, 0, 1); + alpha, beta, betaY, 0, 1, 1); } } } @@ -471,34 +500,34 @@ static void rv40_loop_filter(RV34DecContext *r, int row) int clip_cur = c_to_deblock[k] & (MASK_CUR << ij) ? clip[POS_CUR] : 0; if(c_h_deblock[k] & (MASK_CUR << (ij+2))){ int clip_bot = c_to_deblock[k] & (MASK_CUR << (ij+2)) ? clip[POS_CUR] : 0; - r->rdsp.rv40_h_loop_filter(C+4*s->uvlinesize, s->uvlinesize, i*8, + rv40_adaptive_loop_filter(&r->rdsp, C+4*s->uvlinesize, s->uvlinesize, i*8, clip_bot, clip_cur, - alpha, beta, betaC, 1, 0); + alpha, beta, betaC, 1, 0, 0); } if((c_v_deblock[k] & (MASK_CUR << ij)) && (i || !(mb_strong[POS_CUR] || mb_strong[POS_LEFT]))){ if(!i) clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0; else clip_left = c_to_deblock[k] & (MASK_CUR << (ij-1)) ? clip[POS_CUR] : 0; - r->rdsp.rv40_v_loop_filter(C, s->uvlinesize, j*8, + rv40_adaptive_loop_filter(&r->rdsp, C, s->uvlinesize, j*8, clip_cur, clip_left, - alpha, beta, betaC, 1, 0); + alpha, beta, betaC, 1, 0, 1); } if(!j && c_h_deblock[k] & (MASK_CUR << ij) && (mb_strong[POS_CUR] || mb_strong[POS_TOP])){ int clip_top = uvcbp[POS_TOP][k] & (MASK_CUR << (ij+2)) ? clip[POS_TOP] : 0; - r->rdsp.rv40_h_loop_filter(C, s->uvlinesize, i*8, + rv40_adaptive_loop_filter(&r->rdsp, C, s->uvlinesize, i*8, clip_cur, clip_top, - alpha, beta, betaC, 1, 1); + alpha, beta, betaC, 1, 1, 0); } if(c_v_deblock[k] & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] || mb_strong[POS_LEFT])){ clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0; - r->rdsp.rv40_v_loop_filter(C, s->uvlinesize, j*8, + rv40_adaptive_loop_filter(&r->rdsp, C, s->uvlinesize, j*8, clip_cur, clip_left, - alpha, beta, betaC, 1, 1); + alpha, beta, betaC, 1, 1, 1); } } } diff --git a/libavcodec/rv40dsp.c b/libavcodec/rv40dsp.c index 06bdf18c42..909ccd1732 100644 --- a/libavcodec/rv40dsp.c +++ b/libavcodec/rv40dsp.c @@ -314,142 +314,194 @@ static const uint8_t rv40_dither_r[16] = { /** * weaker deblocking very similar to the one described in 4.4.2 of JVT-A003r1 */ -static inline void rv40_weak_loop_filter(uint8_t *src, const int step, - const int filter_p1, const int filter_q1, - const int alpha, const int beta, - const int lim_p0q0, - const int lim_q1, const int lim_p1, - const int diff_p1p0, const int diff_q1q0, - const int diff_p1p2, const int diff_q1q2) +static av_always_inline void rv40_weak_loop_filter(uint8_t *src, + const int step, + const int stride, + const int filter_p1, + const int filter_q1, + const int alpha, + const int beta, + const int lim_p0q0, + const int lim_q1, + const int lim_p1) { uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; - int t, u, diff; + int i, t, u, diff; - t = src[0*step] - src[-1*step]; - if(!t) - return; - u = (alpha * FFABS(t)) >> 7; - if(u > 3 - (filter_p1 && filter_q1)) - return; + for (i = 0; i < 4; i++, src += stride) { + int diff_p1p0 = src[-2*step] - src[-1*step]; + int diff_q1q0 = src[ 1*step] - src[ 0*step]; + int diff_p1p2 = src[-2*step] - src[-3*step]; + int diff_q1q2 = src[ 1*step] - src[ 2*step]; - t <<= 2; - if(filter_p1 && filter_q1) - t += src[-2*step] - src[1*step]; - diff = CLIP_SYMM((t + 4) >> 3, lim_p0q0); - src[-1*step] = cm[src[-1*step] + diff]; - src[ 0*step] = cm[src[ 0*step] - diff]; - if(FFABS(diff_p1p2) <= beta && filter_p1){ - t = (diff_p1p0 + diff_p1p2 - diff) >> 1; - src[-2*step] = cm[src[-2*step] - CLIP_SYMM(t, lim_p1)]; - } - if(FFABS(diff_q1q2) <= beta && filter_q1){ - t = (diff_q1q0 + diff_q1q2 + diff) >> 1; - src[ 1*step] = cm[src[ 1*step] - CLIP_SYMM(t, lim_q1)]; - } -} + t = src[0*step] - src[-1*step]; + if (!t) + continue; -static av_always_inline void rv40_adaptive_loop_filter(uint8_t *src, const int step, - const int stride, const int dmode, - const int lim_q1, const int lim_p1, - const int alpha, - const int beta, const int beta2, - const int chroma, const int edge) -{ - int diff_p1p0[4], diff_q1q0[4], diff_p1p2[4], diff_q1q2[4]; - int sum_p1p0 = 0, sum_q1q0 = 0, sum_p1p2 = 0, sum_q1q2 = 0; - uint8_t *ptr; - int flag_strong0 = 1, flag_strong1 = 1; - int filter_p1, filter_q1; - int i; - int lims; + u = (alpha * FFABS(t)) >> 7; + if (u > 3 - (filter_p1 && filter_q1)) + continue; - for(i = 0, ptr = src; i < 4; i++, ptr += stride){ - diff_p1p0[i] = ptr[-2*step] - ptr[-1*step]; - diff_q1q0[i] = ptr[ 1*step] - ptr[ 0*step]; - sum_p1p0 += diff_p1p0[i]; - sum_q1q0 += diff_q1q0[i]; - } - filter_p1 = FFABS(sum_p1p0) < (beta<<2); - filter_q1 = FFABS(sum_q1q0) < (beta<<2); - if(!filter_p1 && !filter_q1) - return; + t <<= 2; + if (filter_p1 && filter_q1) + t += src[-2*step] - src[1*step]; - for(i = 0, ptr = src; i < 4; i++, ptr += stride){ - diff_p1p2[i] = ptr[-2*step] - ptr[-3*step]; - diff_q1q2[i] = ptr[ 1*step] - ptr[ 2*step]; - sum_p1p2 += diff_p1p2[i]; - sum_q1q2 += diff_q1q2[i]; - } + diff = CLIP_SYMM((t + 4) >> 3, lim_p0q0); + src[-1*step] = cm[src[-1*step] + diff]; + src[ 0*step] = cm[src[ 0*step] - diff]; - if(edge){ - flag_strong0 = filter_p1 && (FFABS(sum_p1p2) < beta2); - flag_strong1 = filter_q1 && (FFABS(sum_q1q2) < beta2); - }else{ - flag_strong0 = flag_strong1 = 0; - } - - lims = filter_p1 + filter_q1 + ((lim_q1 + lim_p1) >> 1) + 1; - if(flag_strong0 && flag_strong1){ /* strong filtering */ - for(i = 0; i < 4; i++, src += stride){ - int sflag, p0, q0, p1, q1; - int t = src[0*step] - src[-1*step]; - - if(!t) continue; - sflag = (alpha * FFABS(t)) >> 7; - if(sflag > 1) continue; - - p0 = (25*src[-3*step] + 26*src[-2*step] - + 26*src[-1*step] - + 26*src[ 0*step] + 25*src[ 1*step] + rv40_dither_l[dmode + i]) >> 7; - q0 = (25*src[-2*step] + 26*src[-1*step] - + 26*src[ 0*step] - + 26*src[ 1*step] + 25*src[ 2*step] + rv40_dither_r[dmode + i]) >> 7; - if(sflag){ - p0 = av_clip(p0, src[-1*step] - lims, src[-1*step] + lims); - q0 = av_clip(q0, src[ 0*step] - lims, src[ 0*step] + lims); - } - p1 = (25*src[-4*step] + 26*src[-3*step] - + 26*src[-2*step] - + 26*p0 + 25*src[ 0*step] + rv40_dither_l[dmode + i]) >> 7; - q1 = (25*src[-1*step] + 26*q0 - + 26*src[ 1*step] - + 26*src[ 2*step] + 25*src[ 3*step] + rv40_dither_r[dmode + i]) >> 7; - if(sflag){ - p1 = av_clip(p1, src[-2*step] - lims, src[-2*step] + lims); - q1 = av_clip(q1, src[ 1*step] - lims, src[ 1*step] + lims); - } - src[-2*step] = p1; - src[-1*step] = p0; - src[ 0*step] = q0; - src[ 1*step] = q1; - if(!chroma){ - src[-3*step] = (25*src[-1*step] + 26*src[-2*step] + 51*src[-3*step] + 26*src[-4*step] + 64) >> 7; - src[ 2*step] = (25*src[ 0*step] + 26*src[ 1*step] + 51*src[ 2*step] + 26*src[ 3*step] + 64) >> 7; - } + if (filter_p1 && FFABS(diff_p1p2) <= beta) { + t = (diff_p1p0 + diff_p1p2 - diff) >> 1; + src[-2*step] = cm[src[-2*step] - CLIP_SYMM(t, lim_p1)]; + } + + if (filter_q1 && FFABS(diff_q1q2) <= beta) { + t = (diff_q1q0 + diff_q1q2 + diff) >> 1; + src[ 1*step] = cm[src[ 1*step] - CLIP_SYMM(t, lim_q1)]; } - }else if(filter_p1 && filter_q1){ - for(i = 0; i < 4; i++, src += stride) - rv40_weak_loop_filter(src, step, 1, 1, alpha, beta, lims, lim_q1, lim_p1, - diff_p1p0[i], diff_q1q0[i], diff_p1p2[i], diff_q1q2[i]); - }else{ - for(i = 0; i < 4; i++, src += stride) - rv40_weak_loop_filter(src, step, filter_p1, filter_q1, - alpha, beta, lims>>1, lim_q1>>1, lim_p1>>1, - diff_p1p0[i], diff_q1q0[i], diff_p1p2[i], diff_q1q2[i]); } } -static void rv40_v_loop_filter(uint8_t *src, int stride, int dmode, - int lim_q1, int lim_p1, - int alpha, int beta, int beta2, int chroma, int edge){ - rv40_adaptive_loop_filter(src, 1, stride, dmode, lim_q1, lim_p1, - alpha, beta, beta2, chroma, edge); +static void rv40_h_weak_loop_filter(uint8_t *src, const int stride, + const int filter_p1, const int filter_q1, + const int alpha, const int beta, + const int lim_p0q0, const int lim_q1, + const int lim_p1) +{ + rv40_weak_loop_filter(src, stride, 1, filter_p1, filter_q1, + alpha, beta, lim_p0q0, lim_q1, lim_p1); } -static void rv40_h_loop_filter(uint8_t *src, int stride, int dmode, - int lim_q1, int lim_p1, - int alpha, int beta, int beta2, int chroma, int edge){ - rv40_adaptive_loop_filter(src, stride, 1, dmode, lim_q1, lim_p1, - alpha, beta, beta2, chroma, edge); + +static void rv40_v_weak_loop_filter(uint8_t *src, const int stride, + const int filter_p1, const int filter_q1, + const int alpha, const int beta, + const int lim_p0q0, const int lim_q1, + const int lim_p1) +{ + rv40_weak_loop_filter(src, 1, stride, filter_p1, filter_q1, + alpha, beta, lim_p0q0, lim_q1, lim_p1); +} + +static av_always_inline void rv40_strong_loop_filter(uint8_t *src, + const int step, + const int stride, + const int alpha, + const int lims, + const int dmode, + const int chroma) +{ + int i; + + for(i = 0; i < 4; i++, src += stride){ + int sflag, p0, q0, p1, q1; + int t = src[0*step] - src[-1*step]; + + if (!t) + continue; + + sflag = (alpha * FFABS(t)) >> 7; + if (sflag > 1) + continue; + + p0 = (25*src[-3*step] + 26*src[-2*step] + 26*src[-1*step] + + 26*src[ 0*step] + 25*src[ 1*step] + + rv40_dither_l[dmode + i]) >> 7; + + q0 = (25*src[-2*step] + 26*src[-1*step] + 26*src[ 0*step] + + 26*src[ 1*step] + 25*src[ 2*step] + + rv40_dither_r[dmode + i]) >> 7; + + if (sflag) { + p0 = av_clip(p0, src[-1*step] - lims, src[-1*step] + lims); + q0 = av_clip(q0, src[ 0*step] - lims, src[ 0*step] + lims); + } + + p1 = (25*src[-4*step] + 26*src[-3*step] + 26*src[-2*step] + 26*p0 + + 25*src[ 0*step] + rv40_dither_l[dmode + i]) >> 7; + q1 = (25*src[-1*step] + 26*q0 + 26*src[ 1*step] + 26*src[ 2*step] + + 25*src[ 3*step] + rv40_dither_r[dmode + i]) >> 7; + + if (sflag) { + p1 = av_clip(p1, src[-2*step] - lims, src[-2*step] + lims); + q1 = av_clip(q1, src[ 1*step] - lims, src[ 1*step] + lims); + } + + src[-2*step] = p1; + src[-1*step] = p0; + src[ 0*step] = q0; + src[ 1*step] = q1; + + if(!chroma){ + src[-3*step] = (25*src[-1*step] + 26*src[-2*step] + + 51*src[-3*step] + 26*src[-4*step] + 64) >> 7; + src[ 2*step] = (25*src[ 0*step] + 26*src[ 1*step] + + 51*src[ 2*step] + 26*src[ 3*step] + 64) >> 7; + } + } +} + +static void rv40_h_strong_loop_filter(uint8_t *src, const int stride, + const int alpha, const int lims, + const int dmode, const int chroma) +{ + rv40_strong_loop_filter(src, stride, 1, alpha, lims, dmode, chroma); +} + +static void rv40_v_strong_loop_filter(uint8_t *src, const int stride, + const int alpha, const int lims, + const int dmode, const int chroma) +{ + rv40_strong_loop_filter(src, 1, stride, alpha, lims, dmode, chroma); +} + +static av_always_inline int rv40_loop_filter_strength(uint8_t *src, + int step, int stride, + int beta, int beta2, + int edge, + int *p1, int *q1) +{ + int sum_p1p0 = 0, sum_q1q0 = 0, sum_p1p2 = 0, sum_q1q2 = 0; + int strong0 = 0, strong1 = 0; + uint8_t *ptr; + int i; + + for (i = 0, ptr = src; i < 4; i++, ptr += stride) { + sum_p1p0 += ptr[-2*step] - ptr[-1*step]; + sum_q1q0 += ptr[ 1*step] - ptr[ 0*step]; + } + + *p1 = FFABS(sum_p1p0) < (beta << 2); + *q1 = FFABS(sum_q1q0) < (beta << 2); + + if(!*p1 && !*q1) + return 0; + + if (!edge) + return 0; + + for (i = 0, ptr = src; i < 4; i++, ptr += stride) { + sum_p1p2 += ptr[-2*step] - ptr[-3*step]; + sum_q1q2 += ptr[ 1*step] - ptr[ 2*step]; + } + + strong0 = *p1 && (FFABS(sum_p1p2) < beta2); + strong1 = *q1 && (FFABS(sum_q1q2) < beta2); + + return strong0 && strong1; +} + +static int rv40_h_loop_filter_strength(uint8_t *src, int stride, + int beta, int beta2, int edge, + int *p1, int *q1) +{ + return rv40_loop_filter_strength(src, stride, 1, beta, beta2, edge, p1, q1); +} + +static int rv40_v_loop_filter_strength(uint8_t *src, int stride, + int beta, int beta2, int edge, + int *p1, int *q1) +{ + return rv40_loop_filter_strength(src, 1, stride, beta, beta2, edge, p1, q1); } av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) { @@ -529,8 +581,12 @@ av_cold void ff_rv40dsp_init(RV34DSPContext *c, DSPContext* dsp) { c->rv40_weight_pixels_tab[0] = rv40_weight_func_16; c->rv40_weight_pixels_tab[1] = rv40_weight_func_8; - c->rv40_h_loop_filter = rv40_h_loop_filter; - c->rv40_v_loop_filter = rv40_v_loop_filter; + c->rv40_weak_loop_filter[0] = rv40_h_weak_loop_filter; + c->rv40_weak_loop_filter[1] = rv40_v_weak_loop_filter; + c->rv40_strong_loop_filter[0] = rv40_h_strong_loop_filter; + c->rv40_strong_loop_filter[1] = rv40_v_strong_loop_filter; + c->rv40_loop_filter_strength[0] = rv40_h_loop_filter_strength; + c->rv40_loop_filter_strength[1] = rv40_v_loop_filter_strength; if (HAVE_MMX) ff_rv40dsp_init_x86(c, dsp); From 71ce76027d9df47f4ac80c2c114b47d51243ed8e Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Thu, 8 Dec 2011 04:26:12 +0000 Subject: [PATCH 10/23] rv40: NEON optimised loop filter strength selection Signed-off-by: Mans Rullgard --- libavcodec/arm/asm.S | 6 +++ libavcodec/arm/rv40dsp_init_neon.c | 10 ++++ libavcodec/arm/rv40dsp_neon.S | 86 ++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) diff --git a/libavcodec/arm/asm.S b/libavcodec/arm/asm.S index a124918c1c..aaf497e8c2 100644 --- a/libavcodec/arm/asm.S +++ b/libavcodec/arm/asm.S @@ -113,6 +113,12 @@ T add \rn, \rn, \rm T ldr \rt, [\rn] .endm +.macro ldr_dpre rt, rn, rm:vararg +A ldr \rt, [\rn, -\rm]! +T sub \rn, \rn, \rm +T ldr \rt, [\rn] +.endm + .macro ldr_post rt, rn, rm:vararg A ldr \rt, [\rn], \rm T ldr \rt, [\rn] diff --git a/libavcodec/arm/rv40dsp_init_neon.c b/libavcodec/arm/rv40dsp_init_neon.c index 36d75e6fd8..59dddb6605 100644 --- a/libavcodec/arm/rv40dsp_init_neon.c +++ b/libavcodec/arm/rv40dsp_init_neon.c @@ -54,6 +54,13 @@ void ff_avg_rv40_chroma_mc4_neon(uint8_t *, uint8_t *, int, int, int, int); void ff_rv40_weight_func_16_neon(uint8_t *, uint8_t *, uint8_t *, int, int, int); void ff_rv40_weight_func_8_neon(uint8_t *, uint8_t *, uint8_t *, int, int, int); +int ff_rv40_h_loop_filter_strength_neon(uint8_t *src, int stride, + int beta, int beta2, int edge, + int *p1, int *q1); +int ff_rv40_v_loop_filter_strength_neon(uint8_t *src, int stride, + int beta, int beta2, int edge, + int *p1, int *q1); + void ff_rv40dsp_init_neon(RV34DSPContext *c, DSPContext* dsp) { c->put_pixels_tab[0][ 1] = ff_put_rv40_qpel16_mc10_neon; @@ -116,4 +123,7 @@ void ff_rv40dsp_init_neon(RV34DSPContext *c, DSPContext* dsp) c->rv40_weight_pixels_tab[0] = ff_rv40_weight_func_16_neon; c->rv40_weight_pixels_tab[1] = ff_rv40_weight_func_8_neon; + + c->rv40_loop_filter_strength[0] = ff_rv40_h_loop_filter_strength_neon; + c->rv40_loop_filter_strength[1] = ff_rv40_v_loop_filter_strength_neon; } diff --git a/libavcodec/arm/rv40dsp_neon.S b/libavcodec/arm/rv40dsp_neon.S index 07ba8428c1..a4313d89f9 100644 --- a/libavcodec/arm/rv40dsp_neon.S +++ b/libavcodec/arm/rv40dsp_neon.S @@ -722,3 +722,89 @@ function ff_rv40_weight_func_8_neon, export=1 bne 1b bx lr endfunc + +function ff_rv40_h_loop_filter_strength_neon, export=1 + pkhbt r2, r3, r2, lsl #18 + + ldr r3, [r0] + ldr_dpre r12, r0, r1 + teq r3, r12 + beq 1f + + sub r0, r0, r1, lsl #1 + + vld1.32 {d4[]}, [r0,:32], r1 @ -3 + vld1.32 {d0[]}, [r0,:32], r1 @ -2 + vld1.32 {d4[1]}, [r0,:32], r1 @ -1 + vld1.32 {d5[]}, [r0,:32], r1 @ 0 + vld1.32 {d1[]}, [r0,:32], r1 @ 1 + vld1.32 {d5[0]}, [r0,:32], r1 @ 2 + + vpaddl.u8 q8, q0 @ -2, -2, -2, -2, 1, 1, 1, 1 + vpaddl.u8 q9, q2 @ -3, -3, -1, -1, 2, 2, 0, 0 + vdup.32 d30, r2 @ beta2, beta << 2 + vpadd.u16 d16, d16, d17 @ -2, -2, 1, 1 + vpadd.u16 d18, d18, d19 @ -3, -1, 2, 0 + vabd.u16 d16, d18, d16 + vclt.u16 d16, d16, d30 + + ldrd r2, r3, [sp, #4] + vmovl.u16 q12, d16 + vtrn.16 d16, d17 + vshr.u32 q12, q12, #15 + ldr r0, [sp] + vst1.32 {d24[1]}, [r2,:32] + vst1.32 {d25[1]}, [r3,:32] + + cmp r0, #0 + it eq + bxeq lr + + vand d18, d16, d17 + vtrn.32 d18, d19 + vand d18, d18, d19 + vmov.u16 r0, d18[0] + bx lr +1: + ldrd r2, r3, [sp, #4] + mov r0, #0 + str r0, [r2] + str r0, [r3] + bx lr +endfunc + +function ff_rv40_v_loop_filter_strength_neon, export=1 + sub r0, r0, #3 + pkhbt r2, r3, r2, lsl #18 + + vld1.8 {d0}, [r0], r1 + vld1.8 {d1}, [r0], r1 + vld1.8 {d2}, [r0], r1 + vld1.8 {d3}, [r0], r1 + + vaddl.u8 q0, d0, d1 + vaddl.u8 q1, d2, d3 + vdup.32 q15, r2 + vadd.u16 q0, q0, q1 @ -3, -2, -1, 0, 1, 2 + vext.16 q1, q0, q0, #1 @ -2, -1, 0, 1, 2 + vabd.u16 q0, q1, q0 + vclt.u16 q0, q0, q15 + + ldrd r2, r3, [sp, #4] + vmovl.u16 q1, d0 + vext.16 d1, d0, d1, #3 + vshr.u32 q1, q1, #15 + ldr r0, [sp] + vst1.32 {d2[1]}, [r2,:32] + vst1.32 {d3[1]}, [r3,:32] + + cmp r0, #0 + it eq + bxeq lr + + vand d0, d0, d1 + vtrn.16 d0, d1 + vand d0, d0, d1 + vmov.u16 r0, d0[0] + bx lr +endfunc From 4f820131fa9fbb0a64d7cc469fa471905fc91944 Mon Sep 17 00:00:00 2001 From: Andrey Utkin Date: Thu, 8 Dec 2011 13:56:29 +0200 Subject: [PATCH 11/23] mpegvideo: remove abort() in ff_find_unused_picture() Signed-off-by: Luca Barbato --- libavcodec/h261dec.c | 2 ++ libavcodec/h263dec.c | 2 ++ libavcodec/mpegvideo.c | 22 +++++++--------------- libavcodec/mpegvideo_enc.c | 6 ++++++ libavcodec/vc1dec.c | 2 ++ 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index cd4d764272..66ea4be2a1 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -572,6 +572,8 @@ retry: //we need to set current_picture_ptr before reading the header, otherwise we cannot store anyting im there if (s->current_picture_ptr == NULL || s->current_picture_ptr->f.data[0]) { int i= ff_find_unused_picture(s, 0); + if (i < 0) + return i; s->current_picture_ptr= &s->picture[i]; } diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 84a2fda79c..f056d1fbe2 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -398,6 +398,8 @@ retry: * otherwise we cannot store anyting in there */ if (s->current_picture_ptr == NULL || s->current_picture_ptr->f.data[0]) { int i= ff_find_unused_picture(s, 0); + if (i < 0) + return i; s->current_picture_ptr= &s->picture[i]; } diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index a874548680..ab57b51e87 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1144,21 +1144,7 @@ int ff_find_unused_picture(MpegEncContext *s, int shared) } } - av_log(s->avctx, AV_LOG_FATAL, - "Internal error, picture buffer overflow\n"); - /* We could return -1, but the codec would crash trying to draw into a - * non-existing frame anyway. This is safer than waiting for a random crash. - * Also the return of this is never useful, an encoder must only allocate - * as much as allowed in the specification. This has no relationship to how - * much libavcodec could allocate (and MAX_PICTURE_COUNT is always large - * enough for such valid streams). - * Plus, a decoder has to check stream validity and remove frames if too - * many reference frames are around. Waiting for "OOM" is not correct at - * all. Similarly, missing reference frames have to be replaced by - * interpolated/MC frames, anything else is a bug in the codec ... - */ - abort(); - return -1; + return AVERROR_INVALIDDATA; } static void update_noise_reduction(MpegEncContext *s){ @@ -1216,6 +1202,8 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) pic= s->current_picture_ptr; //we already have a unused image (maybe it was set before reading the header) else{ i= ff_find_unused_picture(s, 0); + if (i < 0) + return i; pic= &s->picture[i]; } @@ -1271,6 +1259,8 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) /* Allocate a dummy frame */ i= ff_find_unused_picture(s, 0); + if (i < 0) + return i; s->last_picture_ptr= &s->picture[i]; if(ff_alloc_picture(s, s->last_picture_ptr, 0) < 0) return -1; @@ -1280,6 +1270,8 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) if ((s->next_picture_ptr == NULL || s->next_picture_ptr->f.data[0] == NULL) && s->pict_type == AV_PICTURE_TYPE_B) { /* Allocate a dummy frame */ i= ff_find_unused_picture(s, 0); + if (i < 0) + return i; s->next_picture_ptr= &s->picture[i]; if(ff_alloc_picture(s, s->next_picture_ptr, 0) < 0) return -1; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index ce428661ee..14f5447d07 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -858,6 +858,8 @@ static int load_input_picture(MpegEncContext *s, AVFrame *pic_arg){ if(direct){ i= ff_find_unused_picture(s, 1); + if (i < 0) + return i; pic= (AVFrame*)&s->picture[i]; pic->reference= 3; @@ -871,6 +873,8 @@ static int load_input_picture(MpegEncContext *s, AVFrame *pic_arg){ } }else{ i= ff_find_unused_picture(s, 0); + if (i < 0) + return i; pic= (AVFrame*)&s->picture[i]; pic->reference= 3; @@ -1200,6 +1204,8 @@ no_output_pic: // input is a shared pix, so we can't modifiy it -> alloc a new one & ensure that the shared one is reuseable int i= ff_find_unused_picture(s, 0); + if (i < 0) + return i; Picture *pic= &s->picture[i]; pic->f.reference = s->reordered_input_picture[0]->f.reference; diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index 3f84df2d6c..1151318a47 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -5579,6 +5579,8 @@ static int vc1_decode_frame(AVCodecContext *avctx, void *data, * otherwise we cannot store anything in there. */ if (s->current_picture_ptr == NULL || s->current_picture_ptr->f.data[0]) { int i = ff_find_unused_picture(s, 0); + if (i < 0) + goto err; s->current_picture_ptr = &s->picture[i]; } From bf6923577e5d6382a04959cd17c6dd64f220100d Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 14:39:13 +0100 Subject: [PATCH 12/23] fate: split off AC-3 codec FATE tests into their own file --- tests/Makefile | 1 + tests/fate/ac3.mak | 29 +++++++++++++++++++++++++++++ tests/fate2.mak | 30 ------------------------------ 3 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 tests/fate/ac3.mak diff --git a/tests/Makefile b/tests/Makefile index bf0ead7dfc..798d483696 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -27,6 +27,7 @@ include $(SRC_PATH)/tests/fate.mak include $(SRC_PATH)/tests/fate2.mak include $(SRC_PATH)/tests/fate/aac.mak +include $(SRC_PATH)/tests/fate/ac3.mak include $(SRC_PATH)/tests/fate/als.mak include $(SRC_PATH)/tests/fate/amrnb.mak include $(SRC_PATH)/tests/fate/amrwb.mak diff --git a/tests/fate/ac3.mak b/tests/fate/ac3.mak new file mode 100644 index 0000000000..255479ad43 --- /dev/null +++ b/tests/fate/ac3.mak @@ -0,0 +1,29 @@ +FATE_TESTS += fate-ac3-2.0 +fate-ac3-2.0: CMD = pcm -i $(SAMPLES)/ac3/monsters_inc_2.0_192_small.ac3 +fate-ac3-2.0: CMP = oneoff +fate-ac3-2.0: REF = $(SAMPLES)/ac3/monsters_inc_2.0_192_small.pcm + +FATE_TESTS += fate-ac3-5.1 +fate-ac3-5.1: CMD = pcm -i $(SAMPLES)/ac3/monsters_inc_5.1_448_small.ac3 +fate-ac3-5.1: CMP = oneoff +fate-ac3-5.1: REF = $(SAMPLES)/ac3/monsters_inc_5.1_448_small.pcm + +FATE_TESTS += fate-eac3-1 +fate-eac3-1: CMD = pcm -i $(SAMPLES)/eac3/csi_miami_5.1_256_spx_small.eac3 +fate-eac3-1: CMP = oneoff +fate-eac3-1: REF = $(SAMPLES)/eac3/csi_miami_5.1_256_spx_small.pcm + +FATE_TESTS += fate-eac3-2 +fate-eac3-2: CMD = pcm -i $(SAMPLES)/eac3/csi_miami_stereo_128_spx_small.eac3 +fate-eac3-2: CMP = oneoff +fate-eac3-2: REF = $(SAMPLES)/eac3/csi_miami_stereo_128_spx_small.pcm + +FATE_TESTS += fate-eac3-3 +fate-eac3-3: CMD = pcm -i $(SAMPLES)/eac3/matrix2_commentary1_stereo_192_small.eac3 +fate-eac3-3: CMP = oneoff +fate-eac3-3: REF = $(SAMPLES)/eac3/matrix2_commentary1_stereo_192_small.pcm + +FATE_TESTS += fate-eac3-4 +fate-eac3-4: CMD = pcm -i $(SAMPLES)/eac3/serenity_english_5.1_1536_small.eac3 +fate-eac3-4: CMP = oneoff +fate-eac3-4: REF = $(SAMPLES)/eac3/serenity_english_5.1_1536_small.pcm diff --git a/tests/fate2.mak b/tests/fate2.mak index 66c219ccc5..d7cc2a5b09 100644 --- a/tests/fate2.mak +++ b/tests/fate2.mak @@ -74,36 +74,6 @@ fate-truespeech: CMD = pcm -i $(SAMPLES)/truespeech/a6.wav fate-truespeech: CMP = oneoff fate-truespeech: REF = $(SAMPLES)/truespeech/a6.pcm -FATE_TESTS += fate-ac3-2.0 -fate-ac3-2.0: CMD = pcm -i $(SAMPLES)/ac3/monsters_inc_2.0_192_small.ac3 -fate-ac3-2.0: CMP = oneoff -fate-ac3-2.0: REF = $(SAMPLES)/ac3/monsters_inc_2.0_192_small.pcm - -FATE_TESTS += fate-ac3-5.1 -fate-ac3-5.1: CMD = pcm -i $(SAMPLES)/ac3/monsters_inc_5.1_448_small.ac3 -fate-ac3-5.1: CMP = oneoff -fate-ac3-5.1: REF = $(SAMPLES)/ac3/monsters_inc_5.1_448_small.pcm - -FATE_TESTS += fate-eac3-1 -fate-eac3-1: CMD = pcm -i $(SAMPLES)/eac3/csi_miami_5.1_256_spx_small.eac3 -fate-eac3-1: CMP = oneoff -fate-eac3-1: REF = $(SAMPLES)/eac3/csi_miami_5.1_256_spx_small.pcm - -FATE_TESTS += fate-eac3-2 -fate-eac3-2: CMD = pcm -i $(SAMPLES)/eac3/csi_miami_stereo_128_spx_small.eac3 -fate-eac3-2: CMP = oneoff -fate-eac3-2: REF = $(SAMPLES)/eac3/csi_miami_stereo_128_spx_small.pcm - -FATE_TESTS += fate-eac3-3 -fate-eac3-3: CMD = pcm -i $(SAMPLES)/eac3/matrix2_commentary1_stereo_192_small.eac3 -fate-eac3-3: CMP = oneoff -fate-eac3-3: REF = $(SAMPLES)/eac3/matrix2_commentary1_stereo_192_small.pcm - -FATE_TESTS += fate-eac3-4 -fate-eac3-4: CMD = pcm -i $(SAMPLES)/eac3/serenity_english_5.1_1536_small.eac3 -fate-eac3-4: CMP = oneoff -fate-eac3-4: REF = $(SAMPLES)/eac3/serenity_english_5.1_1536_small.pcm - FATE_TESTS += fate-atrac1 fate-atrac1: CMD = pcm -i $(SAMPLES)/atrac1/test_tones_small.aea fate-atrac1: CMP = oneoff From bad3817919771f70bd5b7fd9fee1e3c2866b1caf Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 14:47:37 +0100 Subject: [PATCH 13/23] fate: split off Real Inc. codec FATE tests into their own file --- tests/Makefile | 1 + tests/fate.mak | 4 ---- tests/fate/real.mak | 39 +++++++++++++++++++++++++++++++++++++++ tests/fate2.mak | 34 ---------------------------------- 4 files changed, 40 insertions(+), 38 deletions(-) create mode 100644 tests/fate/real.mak diff --git a/tests/Makefile b/tests/Makefile index 798d483696..7c74934c48 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -37,6 +37,7 @@ include $(SRC_PATH)/tests/fate/h264.mak include $(SRC_PATH)/tests/fate/libavutil.mak include $(SRC_PATH)/tests/fate/mp3.mak include $(SRC_PATH)/tests/fate/prores.mak +include $(SRC_PATH)/tests/fate/real.mak include $(SRC_PATH)/tests/fate/vorbis.mak include $(SRC_PATH)/tests/fate/vp8.mak diff --git a/tests/fate.mak b/tests/fate.mak index 753dc5558f..63f28c9c7d 100644 --- a/tests/fate.mak +++ b/tests/fate.mak @@ -264,10 +264,6 @@ FATE_TESTS += fate-qtrle-8bit fate-qtrle-8bit: CMD = framecrc -i $(SAMPLES)/qtrle/criticalpath-credits.mov -vsync 0 -pix_fmt rgb24 -an FATE_TESTS += fate-quickdraw fate-quickdraw: CMD = framecrc -i $(SAMPLES)/quickdraw/Airplane.mov -pix_fmt rgb24 -FATE_TESTS += fate-real-14_4 -fate-real-14_4: CMD = md5 -i $(SAMPLES)/real/ra3_in_rm_file.rm -f s16le -FATE_TESTS += fate-real-rv40 -fate-real-rv40: CMD = framecrc -i $(SAMPLES)/real/spygames-2MB.rmvb -t 10 -an -vsync 0 FATE_TESTS += fate-redcode-demux fate-redcode-demux: CMD = framecrc -i $(SAMPLES)/r3d/4MB-sample.r3d -vcodec copy -acodec copy FATE_TESTS += fate-rl2 diff --git a/tests/fate/real.mak b/tests/fate/real.mak new file mode 100644 index 0000000000..b1ff50713b --- /dev/null +++ b/tests/fate/real.mak @@ -0,0 +1,39 @@ +FATE_TESTS += fate-real-14_4 +fate-real-14_4: CMD = md5 -i $(SAMPLES)/real/ra3_in_rm_file.rm -f s16le + +FATE_TESTS += fate-ra-288 +fate-ra-288: CMD = pcm -i $(SAMPLES)/real/ra_288.rm +fate-ra-288: CMP = oneoff +fate-ra-288: REF = $(SAMPLES)/real/ra_288.pcm +fate-ra-288: FUZZ = 2 + +FATE_TESTS += fate-ra-cook +fate-ra-cook: CMD = pcm -i $(SAMPLES)/real/ra_cook.rm +fate-ra-cook: CMP = oneoff +fate-ra-cook: REF = $(SAMPLES)/real/ra_cook.pcm + +FATE_TESTS += fate-rv30 +fate-rv30: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/real/rv30.rm -an + +FATE_TESTS += fate-real-rv40 +fate-real-rv40: CMD = framecrc -i $(SAMPLES)/real/spygames-2MB.rmvb -t 10 -an -vsync 0 + +FATE_TESTS += fate-sipr-5k0 +fate-sipr-5k0: CMD = pcm -i $(SAMPLES)/sipr/sipr_5k0.rm +fate-sipr-5k0: CMP = oneoff +fate-sipr-5k0: REF = $(SAMPLES)/sipr/sipr_5k0.pcm + +FATE_TESTS += fate-sipr-6k5 +fate-sipr-6k5: CMD = pcm -i $(SAMPLES)/sipr/sipr_6k5.rm +fate-sipr-6k5: CMP = oneoff +fate-sipr-6k5: REF = $(SAMPLES)/sipr/sipr_6k5.pcm + +FATE_TESTS += fate-sipr-8k5 +fate-sipr-8k5: CMD = pcm -i $(SAMPLES)/sipr/sipr_8k5.rm +fate-sipr-8k5: CMP = oneoff +fate-sipr-8k5: REF = $(SAMPLES)/sipr/sipr_8k5.pcm + +FATE_TESTS += fate-sipr-16k +fate-sipr-16k: CMD = pcm -i $(SAMPLES)/sipr/sipr_16k.rm +fate-sipr-16k: CMP = oneoff +fate-sipr-16k: REF = $(SAMPLES)/sipr/sipr_16k.pcm diff --git a/tests/fate2.mak b/tests/fate2.mak index d7cc2a5b09..c1a8f3cccf 100644 --- a/tests/fate2.mak +++ b/tests/fate2.mak @@ -3,37 +3,6 @@ fate-twinvq: CMD = pcm -i $(SAMPLES)/vqf/achterba.vqf fate-twinvq: CMP = oneoff fate-twinvq: REF = $(SAMPLES)/vqf/achterba.pcm -FATE_TESTS += fate-sipr-16k -fate-sipr-16k: CMD = pcm -i $(SAMPLES)/sipr/sipr_16k.rm -fate-sipr-16k: CMP = oneoff -fate-sipr-16k: REF = $(SAMPLES)/sipr/sipr_16k.pcm - -FATE_TESTS += fate-sipr-8k5 -fate-sipr-8k5: CMD = pcm -i $(SAMPLES)/sipr/sipr_8k5.rm -fate-sipr-8k5: CMP = oneoff -fate-sipr-8k5: REF = $(SAMPLES)/sipr/sipr_8k5.pcm - -FATE_TESTS += fate-sipr-6k5 -fate-sipr-6k5: CMD = pcm -i $(SAMPLES)/sipr/sipr_6k5.rm -fate-sipr-6k5: CMP = oneoff -fate-sipr-6k5: REF = $(SAMPLES)/sipr/sipr_6k5.pcm - -FATE_TESTS += fate-sipr-5k0 -fate-sipr-5k0: CMD = pcm -i $(SAMPLES)/sipr/sipr_5k0.rm -fate-sipr-5k0: CMP = oneoff -fate-sipr-5k0: REF = $(SAMPLES)/sipr/sipr_5k0.pcm - -FATE_TESTS += fate-ra-288 -fate-ra-288: CMD = pcm -i $(SAMPLES)/real/ra_288.rm -fate-ra-288: CMP = oneoff -fate-ra-288: REF = $(SAMPLES)/real/ra_288.pcm -fate-ra-288: FUZZ = 2 - -FATE_TESTS += fate-ra-cook -fate-ra-cook: CMD = pcm -i $(SAMPLES)/real/ra_cook.rm -fate-ra-cook: CMP = oneoff -fate-ra-cook: REF = $(SAMPLES)/real/ra_cook.pcm - FATE_TESTS += fate-mpeg2-field-enc fate-mpeg2-field-enc: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/mpeg2/mpeg2_field_encoding.ts -an @@ -184,9 +153,6 @@ fate-dxa-scummvm: CMD = framecrc -i $(SAMPLES)/dxa/scummvm.dxa -pix_fmt rgb24 FATE_TESTS += fate-mjpegb fate-mjpegb: CMD = framecrc -idct simple -flags +bitexact -i $(SAMPLES)/mjpegb/mjpegb_part.mov -an -FATE_TESTS += fate-rv30 -fate-rv30: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/real/rv30.rm -an - FATE_TESTS += fate-musepack7 fate-musepack7: CMD = pcm -i $(SAMPLES)/musepack/inside-mp7.mpc fate-musepack7: CMP = oneoff From 753a5063bd5834d2a3eb50729cbdc8d99724f221 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 14:59:47 +0100 Subject: [PATCH 14/23] fate: split off screen codec FATE tests into their own file --- tests/Makefile | 1 + tests/fate.mak | 30 ----------------------------- tests/fate/screen.mak | 44 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 tests/fate/screen.mak diff --git a/tests/Makefile b/tests/Makefile index 7c74934c48..e3c4d9932b 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -38,6 +38,7 @@ include $(SRC_PATH)/tests/fate/libavutil.mak include $(SRC_PATH)/tests/fate/mp3.mak include $(SRC_PATH)/tests/fate/prores.mak include $(SRC_PATH)/tests/fate/real.mak +include $(SRC_PATH)/tests/fate/screen.mak include $(SRC_PATH)/tests/fate/vorbis.mak include $(SRC_PATH)/tests/fate/vp8.mak diff --git a/tests/fate.mak b/tests/fate.mak index 63f28c9c7d..9be08a1f7b 100644 --- a/tests/fate.mak +++ b/tests/fate.mak @@ -52,8 +52,6 @@ FATE_TESTS += fate-creatureshock-avs fate-creatureshock-avs: CMD = framecrc -i $(SAMPLES)/creatureshock-avs/OUTATIME.AVS -pix_fmt rgb24 FATE_TESTS += fate-cryo-apc fate-cryo-apc: CMD = md5 -i $(SAMPLES)/cryo-apc/cine007.APC -f s16le -FATE_TESTS += fate-cscd -fate-cscd: CMD = framecrc -i $(SAMPLES)/CSCD/sample_video.avi -an -vsync 0 -pix_fmt rgb24 FATE_TESTS += fate-cvid fate-cvid: CMD = framecrc -i $(SAMPLES)/cvid/laracroft-cinepak-partial.avi -an FATE_TESTS += fate-cvid-palette @@ -108,18 +106,6 @@ FATE_TESTS += fate-flic-af12 fate-flic-af12: CMD = framecrc -i $(SAMPLES)/fli/jj00c2.fli -pix_fmt rgb24 FATE_TESTS += fate-flic-magiccarpet fate-flic-magiccarpet: CMD = framecrc -i $(SAMPLES)/fli/intel.dat -pix_fmt rgb24 -FATE_TESTS += fate-fraps-v0 -fate-fraps-v0: CMD = framecrc -i $(SAMPLES)/fraps/Griffin_Ragdoll01-partial.avi -FATE_TESTS += fate-fraps-v1 -fate-fraps-v1: CMD = framecrc -i $(SAMPLES)/fraps/sample-v1.avi -an -FATE_TESTS += fate-fraps-v2 -fate-fraps-v2: CMD = framecrc -i $(SAMPLES)/fraps/test3-nosound-partial.avi -FATE_TESTS += fate-fraps-v3 -fate-fraps-v3: CMD = framecrc -i $(SAMPLES)/fraps/psclient-partial.avi -pix_fmt rgb24 -FATE_TESTS += fate-fraps-v4 -fate-fraps-v4: CMD = framecrc -i $(SAMPLES)/fraps/WoW_2006-11-03_14-58-17-19-nosound-partial.avi -FATE_TESTS += fate-fraps-v5 -fate-fraps-v5: CMD = framecrc -i $(SAMPLES)/fraps/fraps-v5-bouncing-balls-partial.avi FATE_TESTS += fate-frwu fate-frwu: CMD = framecrc -i $(SAMPLES)/frwu/frwu.avi FATE_TESTS += fate-funcom-iss @@ -310,10 +296,6 @@ FATE_TESTS += fate-truemotion1-15 fate-truemotion1-15: CMD = framecrc -i $(SAMPLES)/duck/phant2-940.duk -pix_fmt rgb24 FATE_TESTS += fate-truemotion1-24 fate-truemotion1-24: CMD = framecrc -i $(SAMPLES)/duck/sonic3dblast_intro-partial.avi -pix_fmt rgb24 -FATE_TESTS += fate-tscc-15bit -fate-tscc-15bit: CMD = framecrc -i $(SAMPLES)/tscc/oneminute.avi -t 15 -pix_fmt rgb24 -FATE_TESTS += fate-tscc-32bit -fate-tscc-32bit: CMD = framecrc -i $(SAMPLES)/tscc/2004-12-17-uebung9-partial.avi -pix_fmt rgb24 -an FATE_TESTS += fate-ulti fate-ulti: CMD = framecrc -i $(SAMPLES)/ulti/hit12w.avi -an FATE_TESTS += fate-v210 @@ -324,10 +306,6 @@ FATE_TESTS += fate-vcr1 fate-vcr1: CMD = framecrc -i $(SAMPLES)/vcr1/VCR1test.avi -an FATE_TESTS += fate-video-xl fate-video-xl: CMD = framecrc -i $(SAMPLES)/vixl/pig-vixl.avi -FATE_TESTS += fate-vmnc-16bit -fate-vmnc-16bit: CMD = framecrc -i $(SAMPLES)/VMnc/test.avi -pix_fmt rgb24 -FATE_TESTS += fate-vmnc-32bit -fate-vmnc-32bit: CMD = framecrc -i $(SAMPLES)/VMnc/VS2k5DebugDemo-01-partial.avi -pix_fmt rgb24 FATE_TESTS += fate-vp5 fate-vp5: CMD = framecrc -i $(SAMPLES)/vp5/potter512-400-partial.avi -an FATE_TESTS += fate-vp6a @@ -350,11 +328,3 @@ FATE_TESTS += fate-xan-dpcm fate-xan-dpcm: CMD = md5 -i $(SAMPLES)/wc4-xan/wc4_2.avi -vn -f s16le FATE_TESTS += fate-zlib fate-zlib: CMD = framecrc -i $(SAMPLES)/lcl/zlib-1frame.avi -FATE_TESTS += fate-zmbv-15bit -fate-zmbv-15bit: CMD = framecrc -i $(SAMPLES)/zmbv/zmbv_15bit.avi -pix_fmt rgb24 -t 25 -FATE_TESTS += fate-zmbv-16bit -fate-zmbv-16bit: CMD = framecrc -i $(SAMPLES)/zmbv/zmbv_16bit.avi -pix_fmt rgb24 -t 25 -FATE_TESTS += fate-zmbv-32bit -fate-zmbv-32bit: CMD = framecrc -i $(SAMPLES)/zmbv/zmbv_32bit.avi -pix_fmt rgb24 -t 25 -FATE_TESTS += fate-zmbv-8bit -fate-zmbv-8bit: CMD = framecrc -i $(SAMPLES)/zmbv/wc2_001-partial.avi -an -pix_fmt rgb24 diff --git a/tests/fate/screen.mak b/tests/fate/screen.mak new file mode 100644 index 0000000000..a296b00eb0 --- /dev/null +++ b/tests/fate/screen.mak @@ -0,0 +1,44 @@ +FATE_TESTS += fate-cscd +fate-cscd: CMD = framecrc -i $(SAMPLES)/CSCD/sample_video.avi -an -vsync 0 -pix_fmt rgb24 + +FATE_TESTS += fate-fraps-v0 +fate-fraps-v0: CMD = framecrc -i $(SAMPLES)/fraps/Griffin_Ragdoll01-partial.avi + +FATE_TESTS += fate-fraps-v1 +fate-fraps-v1: CMD = framecrc -i $(SAMPLES)/fraps/sample-v1.avi -an + +FATE_TESTS += fate-fraps-v2 +fate-fraps-v2: CMD = framecrc -i $(SAMPLES)/fraps/test3-nosound-partial.avi + +FATE_TESTS += fate-fraps-v3 +fate-fraps-v3: CMD = framecrc -i $(SAMPLES)/fraps/psclient-partial.avi -pix_fmt rgb24 + +FATE_TESTS += fate-fraps-v4 +fate-fraps-v4: CMD = framecrc -i $(SAMPLES)/fraps/WoW_2006-11-03_14-58-17-19-nosound-partial.avi + +FATE_TESTS += fate-fraps-v5 +fate-fraps-v5: CMD = framecrc -i $(SAMPLES)/fraps/fraps-v5-bouncing-balls-partial.avi + +FATE_TESTS += fate-tscc-15bit +fate-tscc-15bit: CMD = framecrc -i $(SAMPLES)/tscc/oneminute.avi -t 15 -pix_fmt rgb24 + +FATE_TESTS += fate-tscc-32bit +fate-tscc-32bit: CMD = framecrc -i $(SAMPLES)/tscc/2004-12-17-uebung9-partial.avi -pix_fmt rgb24 -an + +FATE_TESTS += fate-vmnc-16bit +fate-vmnc-16bit: CMD = framecrc -i $(SAMPLES)/VMnc/test.avi -pix_fmt rgb24 + +FATE_TESTS += fate-vmnc-32bit +fate-vmnc-32bit: CMD = framecrc -i $(SAMPLES)/VMnc/VS2k5DebugDemo-01-partial.avi -pix_fmt rgb24 + +FATE_TESTS += fate-zmbv-8bit +fate-zmbv-8bit: CMD = framecrc -i $(SAMPLES)/zmbv/wc2_001-partial.avi -an -pix_fmt rgb24 + +FATE_TESTS += fate-zmbv-15bit +fate-zmbv-15bit: CMD = framecrc -i $(SAMPLES)/zmbv/zmbv_15bit.avi -pix_fmt rgb24 -t 25 + +FATE_TESTS += fate-zmbv-16bit +fate-zmbv-16bit: CMD = framecrc -i $(SAMPLES)/zmbv/zmbv_16bit.avi -pix_fmt rgb24 -t 25 + +FATE_TESTS += fate-zmbv-32bit +fate-zmbv-32bit: CMD = framecrc -i $(SAMPLES)/zmbv/zmbv_32bit.avi -pix_fmt rgb24 -t 25 From 42de665db90f0f08e6f1215cd47cf27fd23e8e03 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 19:22:03 +0100 Subject: [PATCH 15/23] fate: split off Ut Video codec FATE tests into their own file --- tests/Makefile | 1 + tests/fate/utvideo.mak | 23 +++++++++++++++++++++++ tests/fate2.mak | 24 ------------------------ 3 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 tests/fate/utvideo.mak diff --git a/tests/Makefile b/tests/Makefile index e3c4d9932b..62a0d11e6b 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -39,6 +39,7 @@ include $(SRC_PATH)/tests/fate/mp3.mak include $(SRC_PATH)/tests/fate/prores.mak include $(SRC_PATH)/tests/fate/real.mak include $(SRC_PATH)/tests/fate/screen.mak +include $(SRC_PATH)/tests/fate/utvideo.mak include $(SRC_PATH)/tests/fate/vorbis.mak include $(SRC_PATH)/tests/fate/vp8.mak diff --git a/tests/fate/utvideo.mak b/tests/fate/utvideo.mak new file mode 100644 index 0000000000..6ff0025686 --- /dev/null +++ b/tests/fate/utvideo.mak @@ -0,0 +1,23 @@ +FATE_TESTS += fate-utvideo_rgba_left +fate-utvideo_rgba_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgba_left.avi + +FATE_TESTS += fate-utvideo_rgba_median +fate-utvideo_rgba_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgba_median.avi + +FATE_TESTS += fate-utvideo_rgb_left +fate-utvideo_rgb_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgb_left.avi + +FATE_TESTS += fate-utvideo_rgb_median +fate-utvideo_rgb_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgb_median.avi + +FATE_TESTS += fate-utvideo_yuv420_left +fate-utvideo_yuv420_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv420_left.avi + +FATE_TESTS += fate-utvideo_yuv420_median +fate-utvideo_yuv420_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv420_median.avi + +FATE_TESTS += fate-utvideo_yuv422_left +fate-utvideo_yuv422_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_left.avi + +FATE_TESTS += fate-utvideo_yuv422_median +fate-utvideo_yuv422_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_median.avi diff --git a/tests/fate2.mak b/tests/fate2.mak index c1a8f3cccf..f5bdcf3493 100644 --- a/tests/fate2.mak +++ b/tests/fate2.mak @@ -165,27 +165,3 @@ fate-iirfilter: CMD = run libavcodec/iirfilter-test FATE_TESTS += fate-vble fate-vble: CMD = framecrc -i $(SAMPLES)/vble/flowers-partial-2MB.avi - -FATE_TESTS += fate-utvideo_rgba_left -fate-utvideo_rgba_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgba_left.avi - -FATE_TESTS += fate-utvideo_rgba_median -fate-utvideo_rgba_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgba_median.avi - -FATE_TESTS += fate-utvideo_rgb_left -fate-utvideo_rgb_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgb_left.avi - -FATE_TESTS += fate-utvideo_rgb_median -fate-utvideo_rgb_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgb_median.avi - -FATE_TESTS += fate-utvideo_yuv420_left -fate-utvideo_yuv420_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv420_left.avi - -FATE_TESTS += fate-utvideo_yuv420_median -fate-utvideo_yuv420_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv420_median.avi - -FATE_TESTS += fate-utvideo_yuv422_left -fate-utvideo_yuv422_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_left.avi - -FATE_TESTS += fate-utvideo_yuv422_median -fate-utvideo_yuv422_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_median.avi From f8c47cb863d76739c8d86bbcf68d96c11884c207 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 19:24:42 +0100 Subject: [PATCH 16/23] fate: split off qtrle codec FATE tests into their own file --- tests/Makefile | 1 + tests/fate.mak | 14 -------------- tests/fate/qtrle.mak | 20 ++++++++++++++++++++ 3 files changed, 21 insertions(+), 14 deletions(-) create mode 100644 tests/fate/qtrle.mak diff --git a/tests/Makefile b/tests/Makefile index 62a0d11e6b..f2fbc6051d 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -37,6 +37,7 @@ include $(SRC_PATH)/tests/fate/h264.mak include $(SRC_PATH)/tests/fate/libavutil.mak include $(SRC_PATH)/tests/fate/mp3.mak include $(SRC_PATH)/tests/fate/prores.mak +include $(SRC_PATH)/tests/fate/qtrle.mak include $(SRC_PATH)/tests/fate/real.mak include $(SRC_PATH)/tests/fate/screen.mak include $(SRC_PATH)/tests/fate/utvideo.mak diff --git a/tests/fate.mak b/tests/fate.mak index 9be08a1f7b..224f4851e3 100644 --- a/tests/fate.mak +++ b/tests/fate.mak @@ -234,20 +234,6 @@ FATE_TESTS += fate-qt-ulaw-mono fate-qt-ulaw-mono: CMD = md5 -i $(SAMPLES)/qt-surge-suite/surge-1-16-B-ulaw.mov -f s16le FATE_TESTS += fate-qt-ulaw-stereo fate-qt-ulaw-stereo: CMD = md5 -i $(SAMPLES)/qt-surge-suite/surge-2-16-B-ulaw.mov -f s16le -FATE_TESTS += fate-qtrle-16bit -fate-qtrle-16bit: CMD = framecrc -i $(SAMPLES)/qtrle/mr-cork-rle.mov -pix_fmt rgb24 -FATE_TESTS += fate-qtrle-1bit -fate-qtrle-1bit: CMD = framecrc -i $(SAMPLES)/qtrle/Animation-Monochrome.mov -FATE_TESTS += fate-qtrle-24bit -fate-qtrle-24bit: CMD = framecrc -i $(SAMPLES)/qtrle/aletrek-rle.mov -vsync 0 -FATE_TESTS += fate-qtrle-2bit -fate-qtrle-2bit: CMD = framecrc -i $(SAMPLES)/qtrle/Animation-4Greys.mov -pix_fmt rgb24 -FATE_TESTS += fate-qtrle-32bit -fate-qtrle-32bit: CMD = framecrc -i $(SAMPLES)/qtrle/ultra_demo_720_480_32bpp_rle.mov -pix_fmt rgb24 -FATE_TESTS += fate-qtrle-4bit -fate-qtrle-4bit: CMD = framecrc -i $(SAMPLES)/qtrle/Animation-16Greys.mov -pix_fmt rgb24 -an -FATE_TESTS += fate-qtrle-8bit -fate-qtrle-8bit: CMD = framecrc -i $(SAMPLES)/qtrle/criticalpath-credits.mov -vsync 0 -pix_fmt rgb24 -an FATE_TESTS += fate-quickdraw fate-quickdraw: CMD = framecrc -i $(SAMPLES)/quickdraw/Airplane.mov -pix_fmt rgb24 FATE_TESTS += fate-redcode-demux diff --git a/tests/fate/qtrle.mak b/tests/fate/qtrle.mak new file mode 100644 index 0000000000..4856fe7b96 --- /dev/null +++ b/tests/fate/qtrle.mak @@ -0,0 +1,20 @@ +FATE_TESTS += fate-qtrle-1bit +fate-qtrle-1bit: CMD = framecrc -i $(SAMPLES)/qtrle/Animation-Monochrome.mov + +FATE_TESTS += fate-qtrle-2bit +fate-qtrle-2bit: CMD = framecrc -i $(SAMPLES)/qtrle/Animation-4Greys.mov -pix_fmt rgb24 + +FATE_TESTS += fate-qtrle-4bit +fate-qtrle-4bit: CMD = framecrc -i $(SAMPLES)/qtrle/Animation-16Greys.mov -pix_fmt rgb24 -an + +FATE_TESTS += fate-qtrle-8bit +fate-qtrle-8bit: CMD = framecrc -i $(SAMPLES)/qtrle/criticalpath-credits.mov -vsync 0 -pix_fmt rgb24 -an + +FATE_TESTS += fate-qtrle-16bit +fate-qtrle-16bit: CMD = framecrc -i $(SAMPLES)/qtrle/mr-cork-rle.mov -pix_fmt rgb24 + +FATE_TESTS += fate-qtrle-24bit +fate-qtrle-24bit: CMD = framecrc -i $(SAMPLES)/qtrle/aletrek-rle.mov -vsync 0 + +FATE_TESTS += fate-qtrle-32bit +fate-qtrle-32bit: CMD = framecrc -i $(SAMPLES)/qtrle/ultra_demo_720_480_32bpp_rle.mov -pix_fmt rgb24 From 8602767492102247ab63a1b039dcd7ebb03fcb58 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 19:26:00 +0100 Subject: [PATCH 17/23] fate: split off lossless video and audio FATE tests into their own files --- tests/Makefile | 2 ++ tests/fate.mak | 22 ---------------------- tests/fate/lossless-audio.mak | 17 +++++++++++++++++ tests/fate/lossless-video.mak | 17 +++++++++++++++++ tests/fate2.mak | 3 --- 5 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 tests/fate/lossless-audio.mak create mode 100644 tests/fate/lossless-video.mak diff --git a/tests/Makefile b/tests/Makefile index f2fbc6051d..bfb94a1cce 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -35,6 +35,8 @@ include $(SRC_PATH)/tests/fate/dct.mak include $(SRC_PATH)/tests/fate/fft.mak include $(SRC_PATH)/tests/fate/h264.mak include $(SRC_PATH)/tests/fate/libavutil.mak +include $(SRC_PATH)/tests/fate/lossless-audio.mak +include $(SRC_PATH)/tests/fate/lossless-video.mak include $(SRC_PATH)/tests/fate/mp3.mak include $(SRC_PATH)/tests/fate/prores.mak include $(SRC_PATH)/tests/fate/qtrle.mak diff --git a/tests/fate.mak b/tests/fate.mak index 224f4851e3..6621bb485e 100644 --- a/tests/fate.mak +++ b/tests/fate.mak @@ -140,22 +140,6 @@ FATE_TESTS += fate-kmvc fate-kmvc: CMD = framecrc -i $(SAMPLES)/KMVC/LOGO1.AVI -an -t 3 -pix_fmt rgb24 FATE_TESTS += fate-lmlm4-demux fate-lmlm4-demux: CMD = framecrc -i $(SAMPLES)/lmlm4/LMLM4_CIFat30fps.divx -t 3 -acodec copy -vcodec copy -FATE_TESTS += fate-loco-rgb -fate-loco-rgb: CMD = framecrc -i $(SAMPLES)/loco/pig-loco-rgb.avi -FATE_TESTS += fate-loco-yuy2 -fate-loco-yuy2: CMD = framecrc -i $(SAMPLES)/loco/pig-loco-0.avi -FATE_TESTS += fate-lossless-appleaudio -fate-lossless-appleaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/inside.m4a -f s16le -FATE_TESTS += fate-lossless-meridianaudio -fate-lossless-meridianaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.mlp -f s16le -FATE_TESTS += fate-lossless-monkeysaudio -fate-lossless-monkeysaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.ape -f s16le -FATE_TESTS += fate-lossless-shortenaudio -fate-lossless-shortenaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.shn -f s16le -FATE_TESTS += fate-lossless-tta -fate-lossless-tta: CMD = crc -i $(SAMPLES)/lossless-audio/inside.tta -FATE_TESTS += fate-lossless-wavpackaudio -fate-lossless-wavpackaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.wv -f s16le FATE_TESTS += fate-maxis-xa fate-maxis-xa: CMD = md5 -i $(SAMPLES)/maxis-xa/SC2KBUG.XA -f s16le FATE_TESTS += fate-mimic @@ -166,14 +150,10 @@ FATE_TESTS += fate-mpc7-demux fate-mpc7-demux: CMD = crc -i $(SAMPLES)/musepack/inside-mp7.mpc -acodec copy FATE_TESTS += fate-mpc8-demux fate-mpc8-demux: CMD = crc -i $(SAMPLES)/musepack/inside-mp8.mpc -acodec copy -FATE_TESTS += fate-msrle-8bit -fate-msrle-8bit: CMD = framecrc -i $(SAMPLES)/msrle/Search-RLE.avi -pix_fmt rgb24 FATE_TESTS += fate-msvideo1-16bit fate-msvideo1-16bit: CMD = framecrc -i $(SAMPLES)/cram/clock-cram16.avi -pix_fmt rgb24 FATE_TESTS += fate-msvideo1-8bit fate-msvideo1-8bit: CMD = framecrc -i $(SAMPLES)/cram/skating.avi -t 1 -pix_fmt rgb24 -FATE_TESTS += fate-mszh -fate-mszh: CMD = framecrc -i $(SAMPLES)/lcl/mszh-1frame.avi FATE_TESTS += fate-mtv fate-mtv: CMD = framecrc -i $(SAMPLES)/mtv/comedian_auto-partial.mtv -acodec copy -pix_fmt rgb24 FATE_TESTS += fate-mxf-demux @@ -312,5 +292,3 @@ FATE_TESTS += fate-wnv1 fate-wnv1: CMD = framecrc -i $(SAMPLES)/wnv1/wnv1-codec.avi -an FATE_TESTS += fate-xan-dpcm fate-xan-dpcm: CMD = md5 -i $(SAMPLES)/wc4-xan/wc4_2.avi -vn -f s16le -FATE_TESTS += fate-zlib -fate-zlib: CMD = framecrc -i $(SAMPLES)/lcl/zlib-1frame.avi diff --git a/tests/fate/lossless-audio.mak b/tests/fate/lossless-audio.mak new file mode 100644 index 0000000000..e73559743e --- /dev/null +++ b/tests/fate/lossless-audio.mak @@ -0,0 +1,17 @@ +FATE_TESTS += fate-lossless-appleaudio +fate-lossless-appleaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/inside.m4a -f s16le + +FATE_TESTS += fate-lossless-meridianaudio +fate-lossless-meridianaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.mlp -f s16le + +FATE_TESTS += fate-lossless-monkeysaudio +fate-lossless-monkeysaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.ape -f s16le + +FATE_TESTS += fate-lossless-shortenaudio +fate-lossless-shortenaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.shn -f s16le + +FATE_TESTS += fate-lossless-tta +fate-lossless-tta: CMD = crc -i $(SAMPLES)/lossless-audio/inside.tta + +FATE_TESTS += fate-lossless-wavpackaudio +fate-lossless-wavpackaudio: CMD = md5 -i $(SAMPLES)/lossless-audio/luckynight-partial.wv -f s16le diff --git a/tests/fate/lossless-video.mak b/tests/fate/lossless-video.mak new file mode 100644 index 0000000000..0d1e2b88e1 --- /dev/null +++ b/tests/fate/lossless-video.mak @@ -0,0 +1,17 @@ +FATE_TESTS += fate-loco-rgb +fate-loco-rgb: CMD = framecrc -i $(SAMPLES)/loco/pig-loco-rgb.avi + +FATE_TESTS += fate-loco-yuy2 +fate-loco-yuy2: CMD = framecrc -i $(SAMPLES)/loco/pig-loco-0.avi + +FATE_TESTS += fate-msrle-8bit +fate-msrle-8bit: CMD = framecrc -i $(SAMPLES)/msrle/Search-RLE.avi -pix_fmt rgb24 + +FATE_TESTS += fate-mszh +fate-mszh: CMD = framecrc -i $(SAMPLES)/lcl/mszh-1frame.avi + +FATE_TESTS += fate-vble +fate-vble: CMD = framecrc -i $(SAMPLES)/vble/flowers-partial-2MB.avi + +FATE_TESTS += fate-zlib +fate-zlib: CMD = framecrc -i $(SAMPLES)/lcl/zlib-1frame.avi diff --git a/tests/fate2.mak b/tests/fate2.mak index f5bdcf3493..dd123c9a70 100644 --- a/tests/fate2.mak +++ b/tests/fate2.mak @@ -162,6 +162,3 @@ fate-musepack7: FUZZ = 1 FATE_TESTS += fate-iirfilter fate-iirfilter: libavcodec/iirfilter-test$(EXESUF) fate-iirfilter: CMD = run libavcodec/iirfilter-test - -FATE_TESTS += fate-vble -fate-vble: CMD = framecrc -i $(SAMPLES)/vble/flowers-partial-2MB.avi From b998aec461deb49a11299686962429afd657c10b Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 19:47:46 +0100 Subject: [PATCH 18/23] fate: split off WMA codec FATE tests into their own file --- tests/Makefile | 1 + tests/fate/wma.mak | 27 +++++++++++++++++++++++++++ tests/fate2.mak | 28 ---------------------------- 3 files changed, 28 insertions(+), 28 deletions(-) create mode 100644 tests/fate/wma.mak diff --git a/tests/Makefile b/tests/Makefile index bfb94a1cce..724a7ad4a4 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -45,6 +45,7 @@ include $(SRC_PATH)/tests/fate/screen.mak include $(SRC_PATH)/tests/fate/utvideo.mak include $(SRC_PATH)/tests/fate/vorbis.mak include $(SRC_PATH)/tests/fate/vp8.mak +include $(SRC_PATH)/tests/fate/wma.mak FATE_ACODEC = $(ACODEC_TESTS:%=fate-acodec-%) FATE_VSYNTH1 = $(VCODEC_TESTS:%=fate-vsynth1-%) diff --git a/tests/fate/wma.mak b/tests/fate/wma.mak new file mode 100644 index 0000000000..25626f3db6 --- /dev/null +++ b/tests/fate/wma.mak @@ -0,0 +1,27 @@ +FATE_TESTS += fate-wmapro-2ch +fate-wmapro-2ch: CMD = pcm -i $(SAMPLES)/wmapro/Beethovens_9th-1_small.wma +fate-wmapro-2ch: CMP = oneoff +fate-wmapro-2ch: REF = $(SAMPLES)/wmapro/Beethovens_9th-1_small.pcm + +FATE_TESTS += fate-wmapro-5.1 +fate-wmapro-5.1: CMD = pcm -i $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.wma +fate-wmapro-5.1: CMP = oneoff +fate-wmapro-5.1: REF = $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.pcm + +FATE_TESTS += fate-wmavoice-7k +fate-wmavoice-7k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-7K.wma +fate-wmavoice-7k: CMP = stddev +fate-wmavoice-7k: REF = $(SAMPLES)/wmavoice/streaming_CBR-7K.pcm +fate-wmavoice-7k: FUZZ = 3 + +FATE_TESTS += fate-wmavoice-11k +fate-wmavoice-11k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-11K.wma +fate-wmavoice-11k: CMP = stddev +fate-wmavoice-11k: REF = $(SAMPLES)/wmavoice/streaming_CBR-11K.pcm +fate-wmavoice-11k: FUZZ = 3 + +FATE_TESTS += fate-wmavoice-19k +fate-wmavoice-19k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-19K.wma +fate-wmavoice-19k: CMP = stddev +fate-wmavoice-19k: REF = $(SAMPLES)/wmavoice/streaming_CBR-19K.pcm +fate-wmavoice-19k: FUZZ = 3 diff --git a/tests/fate2.mak b/tests/fate2.mak index dd123c9a70..2d90aadc9d 100644 --- a/tests/fate2.mak +++ b/tests/fate2.mak @@ -79,34 +79,6 @@ fate-g722enc: CMD = md5 -ar 16000 -ac 1 -f s16le -i $(TARGET_PATH)/tests/data/as FATE_TESTS += fate-msmpeg4v1 fate-msmpeg4v1: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/msmpeg4v1/mpg4.avi -an -FATE_TESTS += fate-wmavoice-7k -fate-wmavoice-7k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-7K.wma -fate-wmavoice-7k: CMP = stddev -fate-wmavoice-7k: REF = $(SAMPLES)/wmavoice/streaming_CBR-7K.pcm -fate-wmavoice-7k: FUZZ = 3 - -FATE_TESTS += fate-wmavoice-11k -fate-wmavoice-11k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-11K.wma -fate-wmavoice-11k: CMP = stddev -fate-wmavoice-11k: REF = $(SAMPLES)/wmavoice/streaming_CBR-11K.pcm -fate-wmavoice-11k: FUZZ = 3 - -FATE_TESTS += fate-wmavoice-19k -fate-wmavoice-19k: CMD = pcm -i $(SAMPLES)/wmavoice/streaming_CBR-19K.wma -fate-wmavoice-19k: CMP = stddev -fate-wmavoice-19k: REF = $(SAMPLES)/wmavoice/streaming_CBR-19K.pcm -fate-wmavoice-19k: FUZZ = 3 - -FATE_TESTS += fate-wmapro-5.1 -fate-wmapro-5.1: CMD = pcm -i $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.wma -fate-wmapro-5.1: CMP = oneoff -fate-wmapro-5.1: REF = $(SAMPLES)/wmapro/latin_192_mulitchannel_cut.pcm - -FATE_TESTS += fate-wmapro-2ch -fate-wmapro-2ch: CMD = pcm -i $(SAMPLES)/wmapro/Beethovens_9th-1_small.wma -fate-wmapro-2ch: CMP = oneoff -fate-wmapro-2ch: REF = $(SAMPLES)/wmapro/Beethovens_9th-1_small.pcm - FATE_TESTS += fate-ansi fate-ansi: CMD = framecrc -chars_per_frame 44100 -i $(SAMPLES)/ansi/TRE-IOM5.ANS -pix_fmt rgb24 From d69a03ef4166a69408365a8e2fc334492721d64f Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 16:25:00 +0100 Subject: [PATCH 19/23] fate: split off image codec FATE tests into their own file --- tests/Makefile | 1 + tests/fate.mak | 16 ---------------- tests/fate/image.mak | 32 ++++++++++++++++++++++++++++++++ tests/fate2.mak | 9 --------- 4 files changed, 33 insertions(+), 25 deletions(-) create mode 100644 tests/fate/image.mak diff --git a/tests/Makefile b/tests/Makefile index 724a7ad4a4..3d3812f344 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -34,6 +34,7 @@ include $(SRC_PATH)/tests/fate/amrwb.mak include $(SRC_PATH)/tests/fate/dct.mak include $(SRC_PATH)/tests/fate/fft.mak include $(SRC_PATH)/tests/fate/h264.mak +include $(SRC_PATH)/tests/fate/image.mak include $(SRC_PATH)/tests/fate/libavutil.mak include $(SRC_PATH)/tests/fate/lossless-audio.mak include $(SRC_PATH)/tests/fate/lossless-video.mak diff --git a/tests/fate.mak b/tests/fate.mak index 6621bb485e..d85b8c3c2e 100644 --- a/tests/fate.mak +++ b/tests/fate.mak @@ -66,8 +66,6 @@ FATE_TESTS += fate-delphine-cin fate-delphine-cin: CMD = framecrc -i $(SAMPLES)/delphine-cin/LOGO-partial.CIN -pix_fmt rgb24 -vsync 0 FATE_TESTS += fate-deluxepaint-anm fate-deluxepaint-anm: CMD = framecrc -i $(SAMPLES)/deluxepaint-anm/INTRO1.ANM -pix_fmt rgb24 -FATE_TESTS += fate-dpx -fate-dpx: CMD = framecrc -i $(SAMPLES)/dpx/lighthouse_rgb48.dpx FATE_TESTS += fate-duck-dk3 fate-duck-dk3: CMD = md5 -i $(SAMPLES)/duck/sop-audio-only.avi -f s16le FATE_TESTS += fate-duck-dk4 @@ -174,8 +172,6 @@ FATE_TESTS += fate-psx-str-v3-mdec fate-psx-str-v3-mdec: CMD = framecrc -i $(SAMPLES)/psx-str/abc000_cut.str -an FATE_TESTS += fate-psx-str-v3-adpcm_xa fate-psx-str-v3-adpcm_xa: CMD = framecrc -i $(SAMPLES)/psx-str/abc000_cut.str -vn -FATE_TESTS += fate-ptx -fate-ptx: CMD = framecrc -i $(SAMPLES)/ptx/_113kw_pic.ptx -pix_fmt rgb24 FATE_TESTS += fate-pva-demux fate-pva-demux: CMD = framecrc -idct simple -i $(SAMPLES)/pva/PVA_test-partial.pva -t 0.6 -acodec copy FATE_TESTS += fate-qcp-demux @@ -236,18 +232,6 @@ FATE_TESTS += fate-sp5x fate-sp5x: CMD = framecrc -idct simple -i $(SAMPLES)/sp5x/sp5x_problem.avi FATE_TESTS += fate-sub-srt fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass -FATE_TESTS += fate-sunraster-1bit-raw -fate-sunraster-1bit-raw: CMD = framecrc -i $(SAMPLES)/sunraster/lena-1bit-raw.sun -FATE_TESTS += fate-sunraster-1bit-rle -fate-sunraster-1bit-rle: CMD = framecrc -i $(SAMPLES)/sunraster/lena-1bit-rle.sun -FATE_TESTS += fate-sunraster-24bit-raw -fate-sunraster-24bit-raw: CMD = framecrc -i $(SAMPLES)/sunraster/lena-24bit-raw.sun -FATE_TESTS += fate-sunraster-24bit-rle -fate-sunraster-24bit-rle: CMD = framecrc -i $(SAMPLES)/sunraster/lena-24bit-rle.sun -FATE_TESTS += fate-sunraster-8bit-raw -fate-sunraster-8bit-raw: CMD = framecrc -i $(SAMPLES)/sunraster/lena-8bit-raw.sun -pix_fmt rgb24 -FATE_TESTS += fate-sunraster-8bit-rle -fate-sunraster-8bit-rle: CMD = framecrc -i $(SAMPLES)/sunraster/lena-8bit-rle.sun -pix_fmt rgb24 FATE_TESTS += fate-svq1 fate-svq1: CMD = framecrc -i $(SAMPLES)/svq1/marymary-shackles.mov -an -t 10 FATE_TESTS += fate-svq3 diff --git a/tests/fate/image.mak b/tests/fate/image.mak new file mode 100644 index 0000000000..ed7afa26d6 --- /dev/null +++ b/tests/fate/image.mak @@ -0,0 +1,32 @@ +FATE_TESTS += fate-dpx +fate-dpx: CMD = framecrc -i $(SAMPLES)/dpx/lighthouse_rgb48.dpx + +FATE_TESTS += fate-fax-g3 +fate-fax-g3: CMD = framecrc -i $(SAMPLES)/CCITT_fax/G31D.TIF + +FATE_TESTS += fate-fax-g3s +fate-fax-g3s: CMD = framecrc -i $(SAMPLES)/CCITT_fax/G31DS.TIF + +FATE_TESTS += fate-pictor +fate-pictor: CMD = framecrc -i $(SAMPLES)/pictor/MFISH.PIC -pix_fmt rgb24 -an + +FATE_TESTS += fate-ptx +fate-ptx: CMD = framecrc -i $(SAMPLES)/ptx/_113kw_pic.ptx -pix_fmt rgb24 + +FATE_TESTS += fate-sunraster-1bit-raw +fate-sunraster-1bit-raw: CMD = framecrc -i $(SAMPLES)/sunraster/lena-1bit-raw.sun + +FATE_TESTS += fate-sunraster-1bit-rle +fate-sunraster-1bit-rle: CMD = framecrc -i $(SAMPLES)/sunraster/lena-1bit-rle.sun + +FATE_TESTS += fate-sunraster-8bit-raw +fate-sunraster-8bit-raw: CMD = framecrc -i $(SAMPLES)/sunraster/lena-8bit-raw.sun -pix_fmt rgb24 + +FATE_TESTS += fate-sunraster-8bit-rle +fate-sunraster-8bit-rle: CMD = framecrc -i $(SAMPLES)/sunraster/lena-8bit-rle.sun -pix_fmt rgb24 + +FATE_TESTS += fate-sunraster-24bit-raw +fate-sunraster-24bit-raw: CMD = framecrc -i $(SAMPLES)/sunraster/lena-24bit-raw.sun + +FATE_TESTS += fate-sunraster-24bit-rle +fate-sunraster-24bit-rle: CMD = framecrc -i $(SAMPLES)/sunraster/lena-24bit-rle.sun diff --git a/tests/fate2.mak b/tests/fate2.mak index 2d90aadc9d..521357c3cd 100644 --- a/tests/fate2.mak +++ b/tests/fate2.mak @@ -25,9 +25,6 @@ fate-imc: REF = $(SAMPLES)/imc/imc.pcm FATE_TESTS += fate-yop fate-yop: CMD = framecrc -i $(SAMPLES)/yop/test1.yop -pix_fmt rgb24 -an -FATE_TESTS += fate-pictor -fate-pictor: CMD = framecrc -i $(SAMPLES)/pictor/MFISH.PIC -pix_fmt rgb24 -an - FATE_TESTS += fate-dts fate-dts: CMD = pcm -i $(SAMPLES)/dts/dts.ts fate-dts: CMP = oneoff @@ -110,12 +107,6 @@ fate-txd-16bpp: CMD = framecrc -i $(SAMPLES)/txd/misc.txd -pix_fmt bgra -an FATE_TESTS += fate-vp3 fate-vp3: CMD = framecrc -i $(SAMPLES)/vp3/vp31.avi -FATE_TESTS += fate-fax-g3 -fate-fax-g3: CMD = framecrc -i $(SAMPLES)/CCITT_fax/G31D.TIF - -FATE_TESTS += fate-fax-g3s -fate-fax-g3s: CMD = framecrc -i $(SAMPLES)/CCITT_fax/G31DS.TIF - FATE_TESTS += fate-ws_snd fate-ws_snd: CMD = md5 -i $(SAMPLES)/vqa/ws_snd.vqa -f s16le From 80726be4914f52b6f8bc09a9176104506ebeb760 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 20:00:33 +0100 Subject: [PATCH 20/23] fate: Drop pointless "-an" from pictor test command. --- tests/fate/image.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fate/image.mak b/tests/fate/image.mak index ed7afa26d6..db52bd29dc 100644 --- a/tests/fate/image.mak +++ b/tests/fate/image.mak @@ -8,7 +8,7 @@ FATE_TESTS += fate-fax-g3s fate-fax-g3s: CMD = framecrc -i $(SAMPLES)/CCITT_fax/G31DS.TIF FATE_TESTS += fate-pictor -fate-pictor: CMD = framecrc -i $(SAMPLES)/pictor/MFISH.PIC -pix_fmt rgb24 -an +fate-pictor: CMD = framecrc -i $(SAMPLES)/pictor/MFISH.PIC -pix_fmt rgb24 FATE_TESTS += fate-ptx fate-ptx: CMD = framecrc -i $(SAMPLES)/ptx/_113kw_pic.ptx -pix_fmt rgb24 From 61ad9a4bb36960999a42a501dd7ad7dffb8b34d9 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 14 Dec 2011 19:31:22 +0100 Subject: [PATCH 21/23] fate: Replace misleading "aac" in the name of an ADTS test with "adts". --- tests/fate.mak | 4 ++-- tests/ref/fate/{aac-demux => adts-demux} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename tests/ref/fate/{aac-demux => adts-demux} (100%) diff --git a/tests/fate.mak b/tests/fate.mak index d85b8c3c2e..22787d57ca 100644 --- a/tests/fate.mak +++ b/tests/fate.mak @@ -4,14 +4,14 @@ FATE_TESTS += fate-4xm-2 fate-4xm-2: CMD = framecrc -i $(SAMPLES)/4xm/version2.4xm -pix_fmt rgb24 -an FATE_TESTS += fate-8bps fate-8bps: CMD = framecrc -i $(SAMPLES)/8bps/full9iron-partial.mov -pix_fmt rgb24 -FATE_TESTS += fate-aac-demux -fate-aac-demux: CMD = crc -i $(SAMPLES)/aac/ct_faac-adts.aac -acodec copy FATE_TESTS += fate-aasc fate-aasc: CMD = framecrc -i $(SAMPLES)/aasc/AASC-1.5MB.AVI -pix_fmt rgb24 FATE_TESTS += fate-adpcm-ea-r2 fate-adpcm-ea-r2: CMD = crc -i $(SAMPLES)/ea-mpc/THX_logo.mpc -vn FATE_TESTS += fate-adpcm-ea-r3 fate-adpcm-ea-r3: CMD = crc -i $(SAMPLES)/ea-vp6/THX_logo.vp6 -vn +FATE_TESTS += fate-adts-demux +fate-adts-demux: CMD = crc -i $(SAMPLES)/aac/ct_faac-adts.aac -acodec copy FATE_TESTS += fate-aea-demux fate-aea-demux: CMD = crc -i $(SAMPLES)/aea/chirp.aea -acodec copy FATE_TESTS += fate-alg-mm diff --git a/tests/ref/fate/aac-demux b/tests/ref/fate/adts-demux similarity index 100% rename from tests/ref/fate/aac-demux rename to tests/ref/fate/adts-demux From c41b9842ceac42bedfd74a7ba2d02add82f818a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Wed, 14 Dec 2011 20:33:39 +0200 Subject: [PATCH 22/23] applehttp: Avoid reading uninitialized memory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/applehttp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/applehttp.c b/libavformat/applehttp.c index 7cc04999d1..19f2b203ef 100644 --- a/libavformat/applehttp.c +++ b/libavformat/applehttp.c @@ -204,7 +204,7 @@ static int parse_playlist(AppleHTTPContext *c, const char *url, enum KeyType key_type = KEY_NONE; uint8_t iv[16] = ""; int has_iv = 0; - char key[MAX_URL_SIZE]; + char key[MAX_URL_SIZE] = ""; char line[1024]; const char *ptr; int close_in = 0; From 115a57302a7d6661426304bec3a5bc72d0edf4b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Wed, 14 Dec 2011 20:34:58 +0200 Subject: [PATCH 23/23] applehttp: Properly clean up if unable to probe a segment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This avoids a segfault if the probe function wasn't able to determine the format. The bug was found by Panagiotis H.M. Issaris. Signed-off-by: Martin Storsjö --- libavformat/applehttp.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libavformat/applehttp.c b/libavformat/applehttp.c index 19f2b203ef..6c4d56d305 100644 --- a/libavformat/applehttp.c +++ b/libavformat/applehttp.c @@ -503,8 +503,15 @@ static int applehttp_read_header(AVFormatContext *s, AVFormatParameters *ap) v->pb.seekable = 0; ret = av_probe_input_buffer(&v->pb, &in_fmt, v->segments[0]->url, NULL, 0, 0); - if (ret < 0) + if (ret < 0) { + /* Free the ctx - it isn't initialized properly at this point, + * so avformat_close_input shouldn't be called. If + * avformat_open_input fails below, it frees and zeros the + * context, so it doesn't need any special treatment like this. */ + avformat_free_context(v->ctx); + v->ctx = NULL; goto fail; + } v->ctx->pb = &v->pb; ret = avformat_open_input(&v->ctx, v->segments[0]->url, in_fmt, NULL); if (ret < 0)