diff --git a/media/ffvpx/README_MCP b/media/ffvpx/README_MCP index 4555e08da..5ed4d8d94 100644 --- a/media/ffvpx/README_MCP +++ b/media/ffvpx/README_MCP @@ -7,10 +7,6 @@ Currently, we only use the vp8 and vp9 portion of the library, and only on x86 based platforms. If this changes, configuration files will most likely need to be updated. -AVX2 must be disabled on Linux 32 bits due to the use of yasm 1.1 on the build bots. -Once yasm is upgraded to 1.2 or later, AVX2 code could be re-enabled. -Add --disable-avx2 to configure on those platforms. - configuration files were generated as follow using the configure script: ./configure --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm @@ -18,13 +14,12 @@ config*: replace: /HAVE_(MALLOC_H|ARC4RANDOM|LOCALTIME_R|MEMALIGN|POSIX_MEMALIGN)/d config_darwin32.h: -add to configure command: --disable-asm --disable-yasm --cc='clang -m32' +add to configure command: --disable-asm --disable-x86asm --cc='clang -m32' config_unix32.h: add to configure command: --disable-asm --disable-x86asm --cc='clang -m32' replace: s/HAVE_SYSCTL 1/HAVE_SYSCTL 0/ and s/HAVE_MEMALIGN 1/HAVE_MEMALIGN 0/ and s/HAVE_POSIX_MEMALIGN 1/HAVE_POSIX_MEMALIGN 0/ - config_unix32.h/config_unix64.h/config_unix64.asm: replace: s/HAVE_SYSCTL 1/HAVE_SYSCTL 0 diff --git a/media/ffvpx/libavcodec/aacpsdsp_template.c b/media/ffvpx/libavcodec/aacpsdsp_template.c index 65867649c..5f4be017d 100644 --- a/media/ffvpx/libavcodec/aacpsdsp_template.c +++ b/media/ffvpx/libavcodec/aacpsdsp_template.c @@ -150,10 +150,10 @@ static void ps_stereo_interpolate_c(INTFLOAT (*l)[2], INTFLOAT (*r)[2], INTFLOAT h1 = h[0][1]; INTFLOAT h2 = h[0][2]; INTFLOAT h3 = h[0][3]; - INTFLOAT hs0 = h_step[0][0]; - INTFLOAT hs1 = h_step[0][1]; - INTFLOAT hs2 = h_step[0][2]; - INTFLOAT hs3 = h_step[0][3]; + UINTFLOAT hs0 = h_step[0][0]; + UINTFLOAT hs1 = h_step[0][1]; + UINTFLOAT hs2 = h_step[0][2]; + UINTFLOAT hs3 = h_step[0][3]; int n; for (n = 0; n < len; n++) { diff --git a/media/ffvpx/libavcodec/h264_cavlc.c b/media/ffvpx/libavcodec/h264_cavlc.c index 5e6a20304..d82144e3c 100644 --- a/media/ffvpx/libavcodec/h264_cavlc.c +++ b/media/ffvpx/libavcodec/h264_cavlc.c @@ -714,8 +714,14 @@ int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl) cbp = 0; /* avoid warning. FIXME: find a solution without slowing down the code */ if (sl->slice_type_nos != AV_PICTURE_TYPE_I) { - if (sl->mb_skip_run == -1) - sl->mb_skip_run = get_ue_golomb_long(&sl->gb); + if (sl->mb_skip_run == -1) { + unsigned mb_skip_run = get_ue_golomb_long(&sl->gb); + if (mb_skip_run > h->mb_num) { + av_log(h->avctx, AV_LOG_ERROR, "mb_skip_run %d is invalid\n", mb_skip_run); + return AVERROR_INVALIDDATA; + } + sl->mb_skip_run = mb_skip_run; + } if (sl->mb_skip_run--) { if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) { diff --git a/media/ffvpx/libavcodec/h264_refs.c b/media/ffvpx/libavcodec/h264_refs.c index af7082959..2cdb67f97 100644 --- a/media/ffvpx/libavcodec/h264_refs.c +++ b/media/ffvpx/libavcodec/h264_refs.c @@ -806,6 +806,7 @@ int ff_h264_execute_ref_pic_marking(H264Context *h) } } + // Detect unmarked random access points if ( err >= 0 && h->long_ref_count==0 && ( h->short_ref_count<=2 diff --git a/media/ffvpx/libavcodec/mpegaudio_parser.c b/media/ffvpx/libavcodec/mpegaudio_parser.c index 8c3982579..a072851ec 100644 --- a/media/ffvpx/libavcodec/mpegaudio_parser.c +++ b/media/ffvpx/libavcodec/mpegaudio_parser.c @@ -98,6 +98,8 @@ static int mpegaudio_parse(AVCodecParserContext *s1, } else if (codec_id == AV_CODEC_ID_MP3ADU) { avpriv_report_missing_feature(avctx, "MP3ADU full parser"); + *poutbuf = NULL; + *poutbuf_size = 0; return 0; /* parsers must not return error codes */ } diff --git a/media/ffvpx/libavcodec/unary.h b/media/ffvpx/libavcodec/unary.h index 908dc9350..d57f9f70c 100644 --- a/media/ffvpx/libavcodec/unary.h +++ b/media/ffvpx/libavcodec/unary.h @@ -28,7 +28,20 @@ * @param gb GetBitContext * @param[in] stop The bitstop value (unary code of 1's or 0's) * @param[in] len Maximum length - * @return Unary length/index + * @return unary 0 based code index. This is also the length in bits of the + * code excluding the stop bit. + * (in case len=1) + * 1 0 + * 0 1 + * (in case len=2) + * 1 0 + * 01 1 + * 00 2 + * (in case len=3) + * 1 0 + * 01 1 + * 001 2 + * 000 3 */ static inline int get_unary(GetBitContext *gb, int stop, int len) { diff --git a/media/ffvpx/libavutil/common.h b/media/ffvpx/libavutil/common.h index 8142b31fd..58ead8051 100644 --- a/media/ffvpx/libavutil/common.h +++ b/media/ffvpx/libavutil/common.h @@ -158,7 +158,7 @@ static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, in */ static av_always_inline av_const uint8_t av_clip_uint8_c(int a) { - if (a&(~0xFF)) return (-a)>>31; + if (a&(~0xFF)) return (~a)>>31; else return a; } @@ -180,7 +180,7 @@ static av_always_inline av_const int8_t av_clip_int8_c(int a) */ static av_always_inline av_const uint16_t av_clip_uint16_c(int a) { - if (a&(~0xFFFF)) return (-a)>>31; + if (a&(~0xFFFF)) return (~a)>>31; else return a; } @@ -228,7 +228,7 @@ static av_always_inline av_const int av_clip_intp2_c(int a, int p) */ static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) { - if (a & ~((1<> 31 & ((1<> 31 & ((1<>16) + out.v[j] + a.v[i]*b.v[j-i]; + carry= (carry>>16) + out.v[j] + a.v[i]*(unsigned)b.v[j-i]; out.v[j]= carry; } } diff --git a/media/ffvpx/libavutil/pixfmt.h b/media/ffvpx/libavutil/pixfmt.h index 24889c8e5..8a26fa874 100644 --- a/media/ffvpx/libavutil/pixfmt.h +++ b/media/ffvpx/libavutil/pixfmt.h @@ -42,6 +42,10 @@ * This is stored as BGRA on little-endian CPU architectures and ARGB on * big-endian CPUs. * + * @note + * If the resolution is not a multiple of the chroma subsampling factor + * then the chroma plane resolution must be rounded up. + * * @par * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized * image data is stored in AVFrame.data[0]. The palette is transported in