* qatar/master: Remove some unused scripts from tools/. Add x86 assembly for some 10-bit H.264 intra predict functions. v4l2: do not force NTSC as standard Skip tableprint.h during 'make checkheaders'. Remove unnecessary LIBAVFORMAT_BUILD #ifdef. Drop explicit filenames from @file Doxygen tags. Skip generated table headers during 'make checkheaders'. lavf,lavc: free avoptions in a generic way. AVOptions: add av_opt_free convenience function. tableprint: Restore mistakenly deleted common.h #include for FF_ARRAY_ELEMS. tiff: print log in case of unknown / unsupported tag. tiff: fix linesize for mono-white/black formats. Fix build of eval-test program configure: Document --enable-vaapi ac3enc: extract all exponents for the frame at once Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n0.8
| @@ -106,7 +106,7 @@ Configuration options: | |||||
| --disable-lpc disable LPC code | --disable-lpc disable LPC code | ||||
| --disable-mdct disable MDCT code | --disable-mdct disable MDCT code | ||||
| --disable-rdft disable RDFT code | --disable-rdft disable RDFT code | ||||
| --disable-vaapi disable VAAPI code | |||||
| --enable-vaapi enable VAAPI code | |||||
| --disable-vdpau disable VDPAU code | --disable-vdpau disable VDPAU code | ||||
| --disable-dxva2 disable DXVA2 code | --disable-dxva2 disable DXVA2 code | ||||
| --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) | --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary) | ||||
| @@ -37,6 +37,9 @@ API changes, most recent first: | |||||
| 2011-05-XX - XXXXXX - lavfi 2.6.0 - avcodec.h | 2011-05-XX - XXXXXX - lavfi 2.6.0 - avcodec.h | ||||
| Add avfilter_get_video_buffer_ref_from_frame() to libavfilter/avcodec.h. | Add avfilter_get_video_buffer_ref_from_frame() to libavfilter/avcodec.h. | ||||
| 2011-06-xx - xxxxxxx - lavu 51.3.0 - opt.h | |||||
| Add av_opt_free convenience function. | |||||
| 2011-05-28 - 0420bd7 - lavu 51.2.0 - pixdesc.h | 2011-05-28 - 0420bd7 - lavu 51.2.0 - pixdesc.h | ||||
| Add av_get_pix_fmt_name() in libavutil/pixdesc.h, and deprecate | Add av_get_pix_fmt_name() in libavutil/pixdesc.h, and deprecate | ||||
| avcodec_get_pix_fmt_name() in libavcodec/avcodec.h in its favor. | avcodec_get_pix_fmt_name() in libavcodec/avcodec.h in its favor. | ||||
| @@ -666,8 +666,12 @@ OBJS-$(!CONFIG_SMALL) += inverse.o | |||||
| -include $(SUBDIR)$(ARCH)/Makefile | -include $(SUBDIR)$(ARCH)/Makefile | ||||
| SKIPHEADERS += %_tablegen.h aac_tablegen_decl.h \ | |||||
| fft-internal.h $(ARCH)/vp56_arith.h | |||||
| SKIPHEADERS += %_tablegen.h \ | |||||
| %_tables.h \ | |||||
| aac_tablegen_decl.h \ | |||||
| fft-internal.h \ | |||||
| tableprint.h \ | |||||
| $(ARCH)/vp56_arith.h | |||||
| SKIPHEADERS-$(CONFIG_DXVA2) += dxva2.h dxva2_internal.h | SKIPHEADERS-$(CONFIG_DXVA2) += dxva2.h dxva2_internal.h | ||||
| SKIPHEADERS-$(CONFIG_LIBDIRAC) += libdirac.h | SKIPHEADERS-$(CONFIG_LIBDIRAC) += libdirac.h | ||||
| SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER) += libschroedinger.h | SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER) += libschroedinger.h | ||||
| @@ -675,7 +679,7 @@ SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_internal.h | |||||
| SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h | SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h | ||||
| SKIPHEADERS-$(CONFIG_XVMC) += xvmc.h | SKIPHEADERS-$(CONFIG_XVMC) += xvmc.h | ||||
| TESTPROGS = cabac dct eval fft fft-fixed h264 iirfilter rangecoder snow | |||||
| TESTPROGS = cabac dct fft fft-fixed h264 iirfilter rangecoder snow | |||||
| TESTPROGS-$(HAVE_MMX) += motion | TESTPROGS-$(HAVE_MMX) += motion | ||||
| TESTOBJS = dctref.o | TESTOBJS = dctref.o | ||||
| @@ -870,15 +870,11 @@ static av_cold void exponent_init(AC3EncodeContext *s) | |||||
| */ | */ | ||||
| static void extract_exponents(AC3EncodeContext *s) | static void extract_exponents(AC3EncodeContext *s) | ||||
| { | { | ||||
| int blk, ch; | |||||
| int ch = !s->cpl_on; | |||||
| int chan_size = AC3_MAX_COEFS * AC3_MAX_BLOCKS * (s->channels - ch + 1); | |||||
| AC3Block *block = &s->blocks[0]; | |||||
| for (ch = !s->cpl_on; ch <= s->channels; ch++) { | |||||
| for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) { | |||||
| AC3Block *block = &s->blocks[blk]; | |||||
| s->ac3dsp.extract_exponents(block->exp[ch], block->fixed_coef[ch], | |||||
| AC3_MAX_COEFS); | |||||
| } | |||||
| } | |||||
| s->ac3dsp.extract_exponents(block->exp[ch], block->fixed_coef[ch], chan_size); | |||||
| } | } | ||||
| @@ -20,7 +20,7 @@ | |||||
| */ | */ | ||||
| /** | /** | ||||
| * @file libavcodec/lagarith.c | |||||
| * @file | |||||
| * Lagarith lossless decoder | * Lagarith lossless decoder | ||||
| * @author Nathan Caldwell | * @author Nathan Caldwell | ||||
| */ | */ | ||||
| @@ -21,7 +21,7 @@ | |||||
| */ | */ | ||||
| /** | /** | ||||
| * @file libavcodec/lagarithrac.c | |||||
| * @file | |||||
| * Lagarith range decoder | * Lagarith range decoder | ||||
| * @author Nathan Caldwell | * @author Nathan Caldwell | ||||
| * @author David Conrad | * @author David Conrad | ||||
| @@ -21,7 +21,7 @@ | |||||
| */ | */ | ||||
| /** | /** | ||||
| * @file libavcodec/lagarithrac.h | |||||
| * @file | |||||
| * Lagarith range decoder | * Lagarith range decoder | ||||
| * @author Nathan Caldwell | * @author Nathan Caldwell | ||||
| * @author David Conrad | * @author David Conrad | ||||
| @@ -26,6 +26,8 @@ | |||||
| #include <inttypes.h> | #include <inttypes.h> | ||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include "libavutil/common.h" | |||||
| #define WRITE_1D_FUNC_ARGV(type, linebrk, fmtstr, ...)\ | #define WRITE_1D_FUNC_ARGV(type, linebrk, fmtstr, ...)\ | ||||
| void write_##type##_array(const type *data, int len)\ | void write_##type##_array(const type *data, int len)\ | ||||
| {\ | {\ | ||||
| @@ -477,7 +477,6 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t * | |||||
| if(s->compr == TIFF_G4) | if(s->compr == TIFF_G4) | ||||
| s->fax_opts = value; | s->fax_opts = value; | ||||
| break; | break; | ||||
| default: | default: | ||||
| av_log(s->avctx, AV_LOG_DEBUG, "Unknown or unsupported tag %d/0X%0X\n", tag, tag); | av_log(s->avctx, AV_LOG_DEBUG, "Unknown or unsupported tag %d/0X%0X\n", tag, tag); | ||||
| } | } | ||||
| @@ -858,6 +858,9 @@ av_cold int avcodec_close(AVCodecContext *avctx) | |||||
| avctx->codec->close(avctx); | avctx->codec->close(avctx); | ||||
| avcodec_default_free_buffers(avctx); | avcodec_default_free_buffers(avctx); | ||||
| avctx->coded_frame = NULL; | avctx->coded_frame = NULL; | ||||
| if (avctx->codec && avctx->codec->priv_class) | |||||
| av_opt_free(avctx->priv_data); | |||||
| av_opt_free(avctx); | |||||
| av_freep(&avctx->priv_data); | av_freep(&avctx->priv_data); | ||||
| if(avctx->codec && avctx->codec->encode) | if(avctx->codec && avctx->codec->encode) | ||||
| av_freep(&avctx->extradata); | av_freep(&avctx->extradata); | ||||
| @@ -16,7 +16,8 @@ YASM-OBJS-$(CONFIG_H264DSP) += x86/h264_deblock.o \ | |||||
| x86/h264_idct_10bit.o \ | x86/h264_idct_10bit.o \ | ||||
| x86/h264_weight.o \ | x86/h264_weight.o \ | ||||
| YASM-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred.o | |||||
| YASM-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred.o \ | |||||
| x86/h264_intrapred_10bit.o | |||||
| MMX-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred_init.o | MMX-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred_init.o | ||||
| YASM-OBJS-$(CONFIG_VC1_DECODER) += x86/vc1dsp_yasm.o | YASM-OBJS-$(CONFIG_VC1_DECODER) += x86/vc1dsp_yasm.o | ||||
| @@ -0,0 +1,337 @@ | |||||
| ;***************************************************************************** | |||||
| ;* MMX/SSE2/AVX-optimized 10-bit H.264 intra prediction code | |||||
| ;***************************************************************************** | |||||
| ;* Copyright (C) 2005-2011 x264 project | |||||
| ;* | |||||
| ;* Authors: Daniel Kang <daniel.d.kang@gmail.com> | |||||
| ;* | |||||
| ;* 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 "x86inc.asm" | |||||
| %include "x86util.asm" | |||||
| SECTION_RODATA | |||||
| SECTION .text | |||||
| cextern pw_4 | |||||
| cextern pw_1 | |||||
| %macro PRED4x4_LOWPASS 4 | |||||
| paddw %2, %3 | |||||
| psrlw %2, 1 | |||||
| pavgw %1, %4, %2 | |||||
| %endmacro | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred4x4_down_right(pixel *src, const pixel *topright, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| %macro PRED4x4_DR 1 | |||||
| cglobal pred4x4_down_right_10_%1, 3,3 | |||||
| sub r0, r2 | |||||
| lea r1, [r0+r2*2] | |||||
| movhps m1, [r1-8] | |||||
| movhps m2, [r0+r2*1-8] | |||||
| movhps m4, [r0-8] | |||||
| punpckhwd m2, m4 | |||||
| movq m3, [r0] | |||||
| punpckhdq m1, m2 | |||||
| PALIGNR m3, m1, 10, m1 | |||||
| mova m1, m3 | |||||
| movhps m4, [r1+r2*1-8] | |||||
| PALIGNR m3, m4, 14, m4 | |||||
| mova m2, m3 | |||||
| movhps m4, [r1+r2*2-8] | |||||
| PALIGNR m3, m4, 14, m4 | |||||
| PRED4x4_LOWPASS m0, m3, m1, m2 | |||||
| movq [r1+r2*2], m0 | |||||
| psrldq m0, 2 | |||||
| movq [r1+r2*1], m0 | |||||
| psrldq m0, 2 | |||||
| movq [r0+r2*2], m0 | |||||
| psrldq m0, 2 | |||||
| movq [r0+r2*1], m0 | |||||
| RET | |||||
| %endmacro | |||||
| INIT_XMM | |||||
| %define PALIGNR PALIGNR_MMX | |||||
| PRED4x4_DR sse2 | |||||
| %define PALIGNR PALIGNR_SSSE3 | |||||
| PRED4x4_DR ssse3 | |||||
| %ifdef HAVE_AVX | |||||
| INIT_AVX | |||||
| PRED4x4_DR avx | |||||
| %endif | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred4x4_vertical_right(pixel *src, const pixel *topright, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| %macro PRED4x4_VR 1 | |||||
| cglobal pred4x4_vertical_right_10_%1, 3,3,6 | |||||
| sub r0, r2 | |||||
| lea r1, [r0+r2*2] | |||||
| movq m5, [r0] ; ........t3t2t1t0 | |||||
| movhps m1, [r0-8] | |||||
| PALIGNR m0, m5, m1, 14, m1 ; ......t3t2t1t0lt | |||||
| pavgw m5, m0 | |||||
| movhps m1, [r0+r2*1-8] | |||||
| PALIGNR m0, m1, 14, m1 ; ....t3t2t1t0ltl0 | |||||
| mova m1, m0 | |||||
| movhps m2, [r0+r2*2-8] | |||||
| PALIGNR m0, m2, 14, m2 ; ..t3t2t1t0ltl0l1 | |||||
| mova m2, m0 | |||||
| movhps m3, [r1+r2*1-8] | |||||
| PALIGNR m0, m3, 14, m3 ; t3t2t1t0ltl0l1l2 | |||||
| PRED4x4_LOWPASS m3, m1, m0, m2 | |||||
| pslldq m1, m3, 12 | |||||
| psrldq m3, 4 | |||||
| movq [r0+r2*1], m5 | |||||
| movq [r0+r2*2], m3 | |||||
| PALIGNR m5, m1, 14, m2 | |||||
| pslldq m1, 2 | |||||
| movq [r1+r2*1], m5 | |||||
| PALIGNR m3, m1, 14, m1 | |||||
| movq [r1+r2*2], m3 | |||||
| RET | |||||
| %endmacro | |||||
| INIT_XMM | |||||
| %define PALIGNR PALIGNR_MMX | |||||
| PRED4x4_VR sse2 | |||||
| %define PALIGNR PALIGNR_SSSE3 | |||||
| PRED4x4_VR ssse3 | |||||
| %ifdef HAVE_AVX | |||||
| INIT_AVX | |||||
| PRED4x4_VR avx | |||||
| %endif | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred4x4_horizontal_down(pixel *src, const pixel *topright, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| %macro PRED4x4_HD 1 | |||||
| cglobal pred4x4_horizontal_down_10_%1, 3,3 | |||||
| sub r0, r2 | |||||
| lea r1, [r0+r2*2] | |||||
| movq m0, [r0-8] ; lt .. | |||||
| movhps m0, [r0] | |||||
| pslldq m0, 2 ; t2 t1 t0 lt .. .. .. .. | |||||
| movq m1, [r1+r2*2-8] ; l3 | |||||
| movq m3, [r1+r2*1-8] | |||||
| punpcklwd m1, m3 ; l2 l3 | |||||
| movq m2, [r0+r2*2-8] ; l1 | |||||
| movq m3, [r0+r2*1-8] | |||||
| punpcklwd m2, m3 ; l0 l1 | |||||
| punpckhdq m1, m2 ; l0 l1 l2 l3 | |||||
| punpckhqdq m1, m0 ; t2 t1 t0 lt l0 l1 l2 l3 | |||||
| psrldq m0, m1, 4 ; .. .. t2 t1 t0 lt l0 l1 | |||||
| psrldq m2, m1, 2 ; .. t2 t1 t0 lt l0 l1 l2 | |||||
| pavgw m5, m1, m2 | |||||
| PRED4x4_LOWPASS m3, m1, m0, m2 | |||||
| punpcklwd m5, m3 | |||||
| psrldq m3, 8 | |||||
| PALIGNR m3, m5, 12, m4 | |||||
| movq [r1+r2*2], m5 | |||||
| movhps [r0+r2*2], m5 | |||||
| psrldq m5, 4 | |||||
| movq [r1+r2*1], m5 | |||||
| movq [r0+r2*1], m3 | |||||
| RET | |||||
| %endmacro | |||||
| INIT_XMM | |||||
| %define PALIGNR PALIGNR_MMX | |||||
| PRED4x4_HD sse2 | |||||
| %define PALIGNR PALIGNR_SSSE3 | |||||
| PRED4x4_HD ssse3 | |||||
| %ifdef HAVE_AVX | |||||
| INIT_AVX | |||||
| PRED4x4_HD avx | |||||
| %endif | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred4x4_dc(pixel *src, const pixel *topright, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| %macro HADDD 2 ; sum junk | |||||
| %if mmsize == 16 | |||||
| movhlps %2, %1 | |||||
| paddd %1, %2 | |||||
| pshuflw %2, %1, 0xE | |||||
| paddd %1, %2 | |||||
| %else | |||||
| pshufw %2, %1, 0xE | |||||
| paddd %1, %2 | |||||
| %endif | |||||
| %endmacro | |||||
| %macro HADDW 2 | |||||
| pmaddwd %1, [pw_1] | |||||
| HADDD %1, %2 | |||||
| %endmacro | |||||
| INIT_MMX | |||||
| cglobal pred4x4_dc_10_mmxext, 3,3 | |||||
| sub r0, r2 | |||||
| lea r1, [r0+r2*2] | |||||
| movq m2, [r0+r2*1-8] | |||||
| paddw m2, [r0+r2*2-8] | |||||
| paddw m2, [r1+r2*1-8] | |||||
| paddw m2, [r1+r2*2-8] | |||||
| psrlq m2, 48 | |||||
| movq m0, [r0] | |||||
| HADDW m0, m1 | |||||
| paddw m0, [pw_4] | |||||
| paddw m0, m2 | |||||
| psrlw m0, 3 | |||||
| SPLATW m0, m0, 0 | |||||
| movq [r0+r2*1], m0 | |||||
| movq [r0+r2*2], m0 | |||||
| movq [r1+r2*1], m0 | |||||
| movq [r1+r2*2], m0 | |||||
| RET | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred4x4_down_left(pixel *src, const pixel *topright, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| ;TODO: more AVX here | |||||
| %macro PRED4x4_DL 1 | |||||
| cglobal pred4x4_down_left_10_%1, 3,3 | |||||
| sub r0, r2 | |||||
| movq m1, [r0] | |||||
| movhps m1, [r1] | |||||
| pslldq m5, m1, 2 | |||||
| pxor m2, m5, m1 | |||||
| psrldq m2, 2 | |||||
| pxor m3, m1, m2 | |||||
| PRED4x4_LOWPASS m0, m5, m3, m1 | |||||
| lea r1, [r0+r2*2] | |||||
| movhps [r1+r2*2], m0 | |||||
| psrldq m0, 2 | |||||
| movq [r0+r2*1], m0 | |||||
| psrldq m0, 2 | |||||
| movq [r0+r2*2], m0 | |||||
| psrldq m0, 2 | |||||
| movq [r1+r2*1], m0 | |||||
| RET | |||||
| %endmacro | |||||
| INIT_XMM | |||||
| PRED4x4_DL sse2 | |||||
| %ifdef HAVE_AVX | |||||
| INIT_AVX | |||||
| PRED4x4_DL avx | |||||
| %endif | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred4x4_vertical_left(pixel *src, const pixel *topright, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| %macro PRED4x4_VL 1 | |||||
| cglobal pred4x4_vertical_left_10_%1, 3,3 | |||||
| sub r0, r2 | |||||
| movu m1, [r0] | |||||
| movhps m1, [r1] | |||||
| psrldq m3, m1, 2 | |||||
| psrldq m2, m1, 4 | |||||
| pavgw m4, m3, m1 | |||||
| PRED4x4_LOWPASS m0, m1, m2, m3 | |||||
| lea r1, [r0+r2*2] | |||||
| movq [r0+r2*1], m4 | |||||
| movq [r0+r2*2], m0 | |||||
| psrldq m4, 2 | |||||
| psrldq m0, 2 | |||||
| movq [r1+r2*1], m4 | |||||
| movq [r1+r2*2], m0 | |||||
| RET | |||||
| %endmacro | |||||
| INIT_XMM | |||||
| PRED4x4_VL sse2 | |||||
| %ifdef HAVE_AVX | |||||
| INIT_AVX | |||||
| PRED4x4_VL avx | |||||
| %endif | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred4x4_horizontal_up(pixel *src, const pixel *topright, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| INIT_MMX | |||||
| cglobal pred4x4_horizontal_up_10_mmxext, 3,3 | |||||
| sub r0, r2 | |||||
| lea r1, [r0+r2*2] | |||||
| movq m0, [r0+r2*1-8] | |||||
| punpckhwd m0, [r0+r2*2-8] | |||||
| movq m1, [r1+r2*1-8] | |||||
| punpckhwd m1, [r1+r2*2-8] | |||||
| punpckhdq m0, m1 | |||||
| pshufw m1, m1, 0xFF | |||||
| movq [r1+r2*2], m1 | |||||
| movd [r1+r2*1+4], m1 | |||||
| pshufw m2, m0, 11111001b | |||||
| movq m1, m2 | |||||
| pavgw m2, m0 | |||||
| pshufw m5, m0, 11111110b | |||||
| PRED4x4_LOWPASS m3, m0, m5, m1 | |||||
| movq m6, m2 | |||||
| punpcklwd m6, m3 | |||||
| movq [r0+r2*1], m6 | |||||
| psrlq m2, 16 | |||||
| psrlq m3, 16 | |||||
| punpcklwd m2, m3 | |||||
| movq [r0+r2*2], m2 | |||||
| psrlq m2, 32 | |||||
| movd [r1+r2*1], m2 | |||||
| RET | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred8x8_vertical(pixel *src, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| INIT_XMM | |||||
| cglobal pred8x8_vertical_10_sse2, 2,2 | |||||
| sub r0, r1 | |||||
| mova m0, [r0] | |||||
| %rep 3 | |||||
| mova [r0+r1*1], m0 | |||||
| mova [r0+r1*2], m0 | |||||
| lea r0, [r0+r1*2] | |||||
| %endrep | |||||
| mova [r0+r1*1], m0 | |||||
| mova [r0+r1*2], m0 | |||||
| RET | |||||
| ;----------------------------------------------------------------------------- | |||||
| ; void pred8x8_horizontal(pixel *src, int stride) | |||||
| ;----------------------------------------------------------------------------- | |||||
| INIT_XMM | |||||
| cglobal pred8x8_horizontal_10_sse2, 2,3 | |||||
| mov r2, 4 | |||||
| .loop: | |||||
| movq m0, [r0+r1*0-8] | |||||
| movq m1, [r0+r1*1-8] | |||||
| pshuflw m0, m0, 0xff | |||||
| pshuflw m1, m1, 0xff | |||||
| punpcklqdq m0, m0 | |||||
| punpcklqdq m1, m1 | |||||
| mova [r0+r1*0], m0 | |||||
| mova [r0+r1*1], m1 | |||||
| lea r0, [r0+r1*2] | |||||
| dec r2 | |||||
| jg .loop | |||||
| REP_RET | |||||
| @@ -21,6 +21,31 @@ | |||||
| #include "libavutil/cpu.h" | #include "libavutil/cpu.h" | ||||
| #include "libavcodec/h264pred.h" | #include "libavcodec/h264pred.h" | ||||
| #define PRED4x4(TYPE, DEPTH, OPT) \ | |||||
| void ff_pred4x4_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, const uint8_t *topright, int stride); | |||||
| PRED4x4(dc, 10, mmxext) | |||||
| PRED4x4(down_left, 10, sse2) | |||||
| PRED4x4(down_left, 10, avx) | |||||
| PRED4x4(down_right, 10, sse2) | |||||
| PRED4x4(down_right, 10, ssse3) | |||||
| PRED4x4(down_right, 10, avx) | |||||
| PRED4x4(vertical_left, 10, sse2) | |||||
| PRED4x4(vertical_left, 10, avx) | |||||
| PRED4x4(vertical_right, 10, sse2) | |||||
| PRED4x4(vertical_right, 10, ssse3) | |||||
| PRED4x4(vertical_right, 10, avx) | |||||
| PRED4x4(horizontal_up, 10, mmxext) | |||||
| PRED4x4(horizontal_down, 10, sse2) | |||||
| PRED4x4(horizontal_down, 10, ssse3) | |||||
| PRED4x4(horizontal_down, 10, avx) | |||||
| #define PRED8x8(TYPE, DEPTH, OPT) \ | |||||
| void ff_pred8x8_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, int stride); | |||||
| PRED8x8(vertical, 10, sse2) | |||||
| PRED8x8(horizontal, 10, sse2) | |||||
| void ff_pred16x16_vertical_mmx (uint8_t *src, int stride); | void ff_pred16x16_vertical_mmx (uint8_t *src, int stride); | ||||
| void ff_pred16x16_vertical_sse (uint8_t *src, int stride); | void ff_pred16x16_vertical_sse (uint8_t *src, int stride); | ||||
| void ff_pred16x16_horizontal_mmx (uint8_t *src, int stride); | void ff_pred16x16_horizontal_mmx (uint8_t *src, int stride); | ||||
| @@ -98,11 +123,8 @@ void ff_pred4x4_vertical_vp8_mmxext(uint8_t *src, const uint8_t *topright, int s | |||||
| void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, const int bit_depth) | void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, const int bit_depth) | ||||
| { | { | ||||
| int mm_flags = av_get_cpu_flags(); | int mm_flags = av_get_cpu_flags(); | ||||
| const int high_depth = bit_depth > 8; | |||||
| if (high_depth) | |||||
| return; | |||||
| if (bit_depth == 8) { | |||||
| #if HAVE_YASM | #if HAVE_YASM | ||||
| if (mm_flags & AV_CPU_FLAG_MMX) { | if (mm_flags & AV_CPU_FLAG_MMX) { | ||||
| h->pred16x16[VERT_PRED8x8] = ff_pred16x16_vertical_mmx; | h->pred16x16[VERT_PRED8x8] = ff_pred16x16_vertical_mmx; | ||||
| @@ -226,4 +248,35 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, const int bit_depth | |||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| } else if (bit_depth == 10) { | |||||
| #if HAVE_YASM | |||||
| if (mm_flags & AV_CPU_FLAG_MMX2) { | |||||
| h->pred4x4[DC_PRED ] = ff_pred4x4_dc_10_mmxext; | |||||
| h->pred4x4[HOR_UP_PRED ] = ff_pred4x4_horizontal_up_10_mmxext; | |||||
| } | |||||
| if (mm_flags & AV_CPU_FLAG_SSE2) { | |||||
| h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_sse2; | |||||
| h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_sse2; | |||||
| h->pred4x4[VERT_LEFT_PRED ] = ff_pred4x4_vertical_left_10_sse2; | |||||
| h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_sse2; | |||||
| h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_sse2; | |||||
| h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vertical_10_sse2; | |||||
| h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_10_sse2; | |||||
| } | |||||
| if (mm_flags & AV_CPU_FLAG_SSSE3) { | |||||
| h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_ssse3; | |||||
| h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_ssse3; | |||||
| h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_ssse3; | |||||
| } | |||||
| #if HAVE_AVX | |||||
| if (mm_flags&AV_CPU_FLAG_AVX) { | |||||
| h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_avx; | |||||
| h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_avx; | |||||
| h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_avx; | |||||
| h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_avx; | |||||
| } | |||||
| #endif /* HAVE_AVX */ | |||||
| #endif /* HAVE_YASM */ | |||||
| } | |||||
| } | } | ||||
| @@ -320,8 +320,6 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| last_frame_time = 0; | last_frame_time = 0; | ||||
| out: | out: | ||||
| av_freep(&s->video_size); | |||||
| av_freep(&s->framerate); | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -103,7 +103,6 @@ av_cold static int fbdev_read_header(AVFormatContext *avctx, | |||||
| int ret, flags = O_RDONLY; | int ret, flags = O_RDONLY; | ||||
| ret = av_parse_video_rate(&fbdev->fps, fbdev->framerate); | ret = av_parse_video_rate(&fbdev->fps, fbdev->framerate); | ||||
| av_freep(&fbdev->framerate); | |||||
| if (ret < 0) { | if (ret < 0) { | ||||
| av_log(avctx, AV_LOG_ERROR, "Couldn't parse framerate.\n"); | av_log(avctx, AV_LOG_ERROR, "Couldn't parse framerate.\n"); | ||||
| return ret; | return ret; | ||||
| @@ -316,8 +316,6 @@ out_camera: | |||||
| dc1394_video_set_transmission(dc1394->camera, DC1394_OFF); | dc1394_video_set_transmission(dc1394->camera, DC1394_OFF); | ||||
| dc1394_camera_free (dc1394->camera); | dc1394_camera_free (dc1394->camera); | ||||
| out: | out: | ||||
| av_freep(&dc1394->video_size); | |||||
| av_freep(&dc1394->pixel_format); | |||||
| dc1394_free(dc1394->d); | dc1394_free(dc1394->d); | ||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -663,10 +663,6 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8; | st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8; | ||||
| out: | out: | ||||
| av_freep(&s->video_size); | |||||
| av_freep(&s->pixel_format); | |||||
| av_freep(&s->standard); | |||||
| av_freep(&s->framerate); | |||||
| return res; | return res; | ||||
| } | } | ||||
| @@ -714,7 +710,7 @@ static int v4l2_read_close(AVFormatContext *s1) | |||||
| #define DEC AV_OPT_FLAG_DECODING_PARAM | #define DEC AV_OPT_FLAG_DECODING_PARAM | ||||
| static const AVOption options[] = { | static const AVOption options[] = { | ||||
| { "standard", "", OFFSET(standard), FF_OPT_TYPE_STRING, {.str = NULL }, 0, 0, AV_OPT_FLAG_DECODING_PARAM }, | |||||
| { "standard", "", OFFSET(standard), FF_OPT_TYPE_STRING, {.str = "NTSC" }, 0, 0, AV_OPT_FLAG_DECODING_PARAM }, | |||||
| { "channel", "", OFFSET(channel), FF_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, | { "channel", "", OFFSET(channel), FF_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM }, | ||||
| { "video_size", "A string describing frame size, such as 640x480 or hd720.", OFFSET(video_size), FF_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, | { "video_size", "A string describing frame size, such as 640x480 or hd720.", OFFSET(video_size), FF_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, | ||||
| { "pixel_format", "", OFFSET(pixel_format), FF_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, | { "pixel_format", "", OFFSET(pixel_format), FF_OPT_TYPE_STRING, {.str = NULL}, 0, 0, DEC }, | ||||
| @@ -232,9 +232,6 @@ static int vfw_read_close(AVFormatContext *s) | |||||
| pktl = next; | pktl = next; | ||||
| } | } | ||||
| av_freep(&ctx->video_size); | |||||
| av_freep(&ctx->framerate); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -259,8 +259,6 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) | |||||
| st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(x11grab->time_base) * 8; | st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(x11grab->time_base) * 8; | ||||
| out: | out: | ||||
| av_freep(&x11grab->video_size); | |||||
| av_freep(&x11grab->framerate); | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -102,9 +102,6 @@ int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| st->codec->height = height; | st->codec->height = height; | ||||
| st->codec->pix_fmt = pix_fmt; | st->codec->pix_fmt = pix_fmt; | ||||
| fail: | fail: | ||||
| av_freep(&s1->video_size); | |||||
| av_freep(&s1->pixel_format); | |||||
| av_freep(&s1->framerate); | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| default: | default: | ||||
| @@ -183,7 +180,6 @@ int ff_raw_video_read_header(AVFormatContext *s, | |||||
| av_set_pts_info(st, 64, 1, 1200000); | av_set_pts_info(st, 64, 1, 1200000); | ||||
| fail: | fail: | ||||
| av_freep(&s1->framerate); | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -121,7 +121,6 @@ static int read_header(AVFormatContext *avctx, | |||||
| } | } | ||||
| fail: | fail: | ||||
| av_freep(&s->video_size); | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -2592,6 +2592,10 @@ void avformat_free_context(AVFormatContext *s) | |||||
| int i; | int i; | ||||
| AVStream *st; | AVStream *st; | ||||
| av_opt_free(s); | |||||
| if (s->iformat && s->iformat->priv_class) | |||||
| av_opt_free(s->priv_data); | |||||
| for(i=0;i<s->nb_streams;i++) { | for(i=0;i<s->nb_streams;i++) { | ||||
| /* free all data in a stream component */ | /* free all data in a stream component */ | ||||
| st = s->streams[i]; | st = s->streams[i]; | ||||
| @@ -2621,7 +2625,6 @@ void avformat_free_context(AVFormatContext *s) | |||||
| } | } | ||||
| av_freep(&s->chapters); | av_freep(&s->chapters); | ||||
| av_metadata_free(&s->metadata); | av_metadata_free(&s->metadata); | ||||
| av_freep(&s->key); | |||||
| av_freep(&s->streams); | av_freep(&s->streams); | ||||
| av_free(s); | av_free(s); | ||||
| } | } | ||||
| @@ -3201,6 +3204,8 @@ fail: | |||||
| av_freep(&s->streams[i]->priv_data); | av_freep(&s->streams[i]->priv_data); | ||||
| av_freep(&s->streams[i]->index_entries); | av_freep(&s->streams[i]->index_entries); | ||||
| } | } | ||||
| if (s->iformat && s->iformat->priv_class) | |||||
| av_opt_free(s->priv_data); | |||||
| av_freep(&s->priv_data); | av_freep(&s->priv_data); | ||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -75,7 +75,7 @@ OBJS-$(ARCH_ARM) += arm/cpu.o | |||||
| OBJS-$(ARCH_PPC) += ppc/cpu.o | OBJS-$(ARCH_PPC) += ppc/cpu.o | ||||
| OBJS-$(ARCH_X86) += x86/cpu.o | OBJS-$(ARCH_X86) += x86/cpu.o | ||||
| TESTPROGS = adler32 aes base64 cpu crc des lls md5 pca sha tree | |||||
| TESTPROGS = adler32 aes base64 cpu crc des eval lls md5 pca sha tree | |||||
| TESTPROGS-$(HAVE_LZO1X_999_COMPRESS) += lzo | TESTPROGS-$(HAVE_LZO1X_999_COMPRESS) += lzo | ||||
| DIRS = arm bfin sh4 x86 | DIRS = arm bfin sh4 x86 | ||||
| @@ -142,7 +142,6 @@ | |||||
| #define strncpy strncpy_is_forbidden_due_to_security_issues_use_av_strlcpy | #define strncpy strncpy_is_forbidden_due_to_security_issues_use_av_strlcpy | ||||
| #undef exit | #undef exit | ||||
| #define exit exit_is_forbidden | #define exit exit_is_forbidden | ||||
| #ifndef LIBAVFORMAT_BUILD | |||||
| #undef printf | #undef printf | ||||
| #define printf please_use_av_log_instead_of_printf | #define printf please_use_av_log_instead_of_printf | ||||
| #undef fprintf | #undef fprintf | ||||
| @@ -151,7 +150,6 @@ | |||||
| #define puts please_use_av_log_instead_of_puts | #define puts please_use_av_log_instead_of_puts | ||||
| #undef perror | #undef perror | ||||
| #define perror please_use_av_log_instead_of_perror | #define perror please_use_av_log_instead_of_perror | ||||
| #endif | |||||
| #define FF_ALLOC_OR_GOTO(ctx, p, size, label)\ | #define FF_ALLOC_OR_GOTO(ctx, p, size, label)\ | ||||
| {\ | {\ | ||||
| @@ -520,6 +520,14 @@ int av_set_options_string(void *ctx, const char *opts, | |||||
| return count; | return count; | ||||
| } | } | ||||
| void av_opt_free(void *obj) | |||||
| { | |||||
| const AVOption *o = NULL; | |||||
| while ((o = av_next_option(obj, o))) | |||||
| if (o->type == FF_OPT_TYPE_STRING || o->type == FF_OPT_TYPE_BINARY) | |||||
| av_freep((uint8_t *)obj + o->offset); | |||||
| } | |||||
| #ifdef TEST | #ifdef TEST | ||||
| #undef printf | #undef printf | ||||
| @@ -176,4 +176,9 @@ void av_opt_set_defaults2(void *s, int mask, int flags); | |||||
| int av_set_options_string(void *ctx, const char *opts, | int av_set_options_string(void *ctx, const char *opts, | ||||
| const char *key_val_sep, const char *pairs_sep); | const char *key_val_sep, const char *pairs_sep); | ||||
| /** | |||||
| * Free all string and binary options in obj. | |||||
| */ | |||||
| void av_opt_free(void *obj); | |||||
| #endif /* AVUTIL_OPT_H */ | #endif /* AVUTIL_OPT_H */ | ||||
| @@ -1,9 +0,0 @@ | |||||
| #!/bin/sh | |||||
| sed 's/unsigned//g' |\ | |||||
| sed 's/enum//g' |\ | |||||
| egrep '^ *(int|float|double|AVRational|char *\*) *[a-zA-Z_0-9]* *;' |\ | |||||
| sed 's/^ *\([^ ]*\)[ *]*\([^;]*\);.*$/{"\2", NULL, OFFSET(\2), FF_OPT_TYPE_\U\1, DEFAULT, \1_MIN, \1_MAX},/' |\ | |||||
| sed 's/AVRATIONAL_M/INT_M/g'|\ | |||||
| sed 's/TYPE_AVRATIONAL/TYPE_RATIONAL/g'|\ | |||||
| sed 's/FLOAT_M/FLT_M/g'|\ | |||||
| sed 's/FF_OPT_TYPE_CHAR/FF_OPT_TYPE_STRING/g' | |||||
| @@ -1,21 +0,0 @@ | |||||
| #!/bin/sh | |||||
| #GPL | |||||
| #TODO | |||||
| #add pixelformat/sampleformat into the path of the codecs | |||||
| FFP=../ffprobe | |||||
| TMP=$(mktemp) || exit 1 | |||||
| TARGET=$1 | |||||
| shift | |||||
| for v do | |||||
| BASE=$(basename $v) | |||||
| echo $v | egrep -i '(public|private)' >/dev/null && echo Warning $v may be private | |||||
| $FFP $v 2> $TMP | |||||
| FORM=$((grep 'Input #0, ' -m1 $TMP || echo 'Input #0, unknown') | sed 's/Input #0, \([a-zA-Z0-9_]*\).*/\1/' ) | |||||
| mkdir -p $TARGET/container/$FORM | |||||
| ln -s $v $TARGET/container/$FORM/$BASE | |||||
| eval $(grep 'Stream #0\.[^:]*: [a-zA-Z0-9][^:]*: [a-zA-Z0-9]' $TMP | sed 's#[^:]*: \([a-zA-Z0-9]*\)[^:]*: \([a-zA-Z0-9]*\).*#mkdir -p '$TARGET'/\1/\2 ; ln -s '$v' '$TARGET'/\1/\2/'$BASE' ; #') | |||||
| done | |||||
| rm $TMP | |||||