Commit graph

41341 commits

Author SHA1 Message Date
wm4
47687a2f8a avcodec: add metadata to identify wrappers and hardware decoders
Explicitly identify decoder/encoder wrappers with a common name. This
saves API users from guessing by the name suffix. For example, they
don't have to guess that "h264_qsv" is the h264 QSV implementation, and
instead they can just check the AVCodec .codec and .wrapper_name fields.

Explicitly mark AVCodec entries that are hardware decoders or most
likely hardware decoders with new AV_CODEC_CAPs. The purpose is allowing
API users listing hardware decoders in a more generic way. The proposed
AVCodecHWConfig does not provide this information fully, because it's
concerned with decoder configuration, not information about the fact
whether the hardware is used or not.

AV_CODEC_CAP_HYBRID exists specifically for QSV, which can have software
implementations in case the hardware is not capable.

Based on a patch by Philip Langdale <philipl@overt.org>.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2017-12-14 16:58:45 +01:00
Michael Niedermayer
f7617d4b83 libavcodec/decode: remove duplicate includes
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-13 21:54:53 +01:00
Aman Gupta
88e2dc7d04 libavcodec/mpegvideo_parser: improve detection of progressive mpeg2
Previously many progressive mpeg2video samples were detected as interlaced
by ffmpeg/ffprobe. For example, https://tmm1.s3.amazonaws.com/720p.ts

Before:

    Input #0, mpegts, from 'https://tmm1.s3.amazonaws.com/720p.ts':
      Duration: 00:00:08.62, start: 18974.073233, bitrate: 9734 kb/s
      Program 2
    	Stream #0:0[0x12eb]: Video: mpeg2video (Main), yuv420p(tv, bottom first), 1280x720 ...

After:

    Input #0, mpegts, from 'https://tmm1.s3.amazonaws.com/720p.ts':
      Duration: 00:00:08.62, start: 18974.073233, bitrate: 9734 kb/s
      Program 2
    	Stream #0:0[0x12eb]: Video: mpeg2video (Main), yuv420p(tv, progressive), 1280x720 ...

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-12 16:37:58 -08:00
Luca Barbato
5083785566 qsv: Support explicit lookahead downscaling 2017-12-12 15:43:02 +00:00
Li, Zhong
f2e9a0ecbe qsv/vp8dec: fixes memory leak issue
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2017-12-12 13:59:13 +01:00
Li, Zhong
7c65a76b16 lavc/qsvenc: add error messeage if ICQ unsupported.
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2017-12-12 13:58:18 +01:00
Li, Zhong
bddb2ce179 lavc/qsvenc: ICQ/VCM/QVBR are not avilable on Linux
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2017-12-12 13:58:18 +01:00
Li, Zhong
6ff29343b0 lavc/qsvenc: set HRD buffer size
Hypothetical Reference Decoding (HRD) model assumes that data flows
into a buffer of the fixed size BufferSizeInKB with a constant bitrate.
Smaller BufferSizeInKB means smaller frame size variations,
but more difficult to maintain HRD.

Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Maxym Dmytrychenko <maxim.d33@gmail.com>
2017-12-12 13:58:18 +01:00
Hendrik Leppkes
fd542b6f20 Revert "libavcodec/utils.c: simplify avcodec locking with atomics"
This reverts commit 590136e78d.

Atomics are not required for this variable, because it is protected
through the lock manager, and the use of atomics here is not compatible
with the c11 emulation wrappersi.

Fixes FATE on MSVC, among other setups which use the compat wrappers.
2017-12-11 21:16:06 +01:00
James Almer
c7a5e80f56 avcodec/libvpx: remove disabled code
Signed-off-by: James Almer <jamrial@gmail.com>
2017-12-11 00:42:26 -03:00
Kieran Kunhya
918de766f5 h264dec: Remove mpeg4video.h header dependency 2017-12-11 00:09:25 +00:00
Kieran Kunhya
a83a03af9a libavcodec: Move ff_print_debug_info2 to mpegutils.c 2017-12-11 00:09:25 +00:00
Carl Eugen Hoyos
514cf22a0d lavc/huffyuvenc: Move a variable declaration up.
Fixes a warning with gcc-6.3:
libavcodec/huffyuvenc.c:93:5: warning: ISO C90 forbids mixed declarations and code
2017-12-10 20:46:55 +01:00
Michael Niedermayer
eaff5fcb7c avcodec/vp9_superframe_split_bsf: Fix integer overflow in frame_size/total_size checks
Fixes: signed integer overflow: -1698586465 + -551542752 cannot be represented in type 'int'
Fixes: 4490/clusterfuzz-testcase-minimized-5210014592532480

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-10 20:11:46 +01:00
Michael Niedermayer
1d0817d56b avcodec/amrwbdec: Fix division by 0 in voice_factor()
The added value matches "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Extended Adaptive Multi-Rate - Wideband (AMR-WB+) codec; Floating-point ANSI-C code (3GPP TS 26.304 version 14.0.0 Release 14)
Extended Adaptive Multi-Rate - Wideband (AMR-WB+) codec; Floating-point ANSI-C code"

Fixes: runtime error: division by zero
Fixes: 4415/clusterfuzz-testcase-minimized-4677752314658816

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-10 20:11:46 +01:00
Thomas Guillem
84936f68ed lavc: Make hardware config method support more explicit for hwaccels
This fixes the use of old ad-hoc methods which are still supported by some
hwaccels which also support newer methods (DXVA2, VAAPI, VDPAU,
videotoolbox) - without the method being visible here, ff_get_format()
would refuse to use it.

Signed-off-by: Mark Thompson <sw@jkqxz.net>
2017-12-10 16:31:15 +00:00
Mateusz
149268b47c fix MSVC compilation errors
After commit 3701d49 'error_resilience: remove avpriv_atomic usage'
we have included windows.h in much more files and we should
avoid conflicts with defines/function declarations.

Signed-off-by: Mateusz Brzostek <mateuszb@poczta.onet.pl>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-10 14:43:01 +01:00
James Almer
438f884fc4 x86/lossless_videodsp: rename ff_add_left_pred_int16_sse4 to ff_add_left_pred_int16_unaligned_ssse3
SSSE3_FAST is the proper check for it.

Signed-off-by: James Almer <jamrial@gmail.com>
2017-12-10 00:51:01 -03:00
James Almer
a4fc63c0f9 x86/lossless_videodsp: don't overread the dst buffer in ff_add_left_pred_unaligned_avx2
Fixes valgrind

Signed-off-by: James Almer <jamrial@gmail.com>
2017-12-10 00:38:05 -03:00
Mironov, Mikhail
f20c8f6ec9 amf: fix wrong profile level after auto-correction in H264 and HEVC
Moved bitrate parameters set before Init() call because bitrate is used in
profile level correction code inside Init().

Signed-off-by: Mikhail Mironov <mikhail.mironov@amd.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-09 23:12:30 +01:00
Jacob Trimble
b38f222165 avcodec/Makefile: Fix opus parser dependency.
The opus.c file uses ff_celt_freq_range and ff_celt_freq_bands which are
defined in opustab.c.  The opus parser needs to include that file to
avoid linker errors when not including the opus encoder/decoder.

Signed-off-by: Jacob Trimble <modmaker@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-09 23:12:30 +01:00
James Cowgill
02ba4b91b5 avcodec/decode: reset codec on receiving packet after EOF in compat_decode
In commit 061a0c14bb ("decode: restructure the core decoding code"), the
deprecated avcodec_decode_* APIs were reworked so that they called into the
new avcodec_send_packet / avcodec_receive_frame API. This had the side effect
of prohibiting sending new packets containing data after a drain
packet, but in previous versions of FFmpeg this "worked" and some
applications relied on it.

To restore some compatibility, reset the codec if we receive a new non-drain
packet using the old API after draining has completed. While this does
not give the same behaviour as the old API did, in the majority of cases
it works and it does not require changes to any other part of the decoding
code.

Fixes ticket #6775
Signed-off-by: James Cowgill <jcowgill@debian.org>
Signed-off-by: Marton Balint <cus@passwd.hu>
2017-12-09 21:28:24 +01:00
James Almer
36de24d5b7 arm/hevc_idct: fix compilation on Android
Compilation error "out of range" fixed for armeabi-v7a. Compilation failed
trying to build libvlc.aar for ARM7 android on ubuntu 16.04 host. Error
messages is "Offset out of range". The reason of the error is assembler LDR
directives in function "ff_hevc_transform_luma_4x4_neon_8" need local storage
in range <1k, but no such storage provided.

Based on a patch by Ihor Bobalo <bob@eleks.com>

Suggested-by: wbs
Signed-off-by: James Almer <jamrial@gmail.com>
2017-12-09 21:46:34 +02:00
Martin Vignali
630967ef63 avcodec/utvideodec : add SIMD (SSSE3 and AVX2) for gradient_pred 2017-12-09 15:19:03 +01:00
Martin Vignali
4353c35067 avcodec/x86/lossless_videodsp : add avx2 version for add_left_pred 2017-12-09 15:16:03 +01:00
Martin Vignali
cfbcea1cca avcodec/x86/lossless_videodsp.asm : make macro for add_left_pred_unaligned in order to add avx2 version 2017-12-09 15:15:59 +01:00
Martin Vignali
dc9a187c3d avcodec/huffyuvenc : sub_left_prediction_bgr32, call dsp after 32 first byte of the line in order to try to call the align version (diff bytes have avx2 version) 2017-12-09 15:12:59 +01:00
Martin Vignali
001173b8ff avcodec/huffyuvenc : remove code duplication in sub_left_prediction
start of the line (before dsp call), can be merge with width < 32 part
2017-12-09 15:12:54 +01:00
Martin Vignali
57877f2b44 avcodec/huffyuvenc : increase scalar loop count
in order to try to call dsp in aligned mode
(diff_int16 have AVX2 now)
2017-12-09 15:12:49 +01:00
Martin Vignali
9e1c9633cc avcodec/utvideodec : use dsp add_median_pred for second line
process start of the line in scalar, before call dsp
(dsp need align 16)
2017-12-09 15:11:12 +01:00
Alexandra Hájková
7993ec19af hevc: Add hevc_get_pixel_4/8/12/16/24/32/48/64
Checkasm timings:
block size bitdepth  C       NEON
4           8 bit:    146.7   48.7
           10 bit:    146.7   52.7
8           8 bit:    430.3   84.4
           10 bit:    430.4  119.5
12          8 bit:    812.8  141.0
           10 bit:    812.8  195.0
16          8 bit:   1499.1  268.0
           10 bit:   1498.9  368.4
24          8 bit:   4394.2  574.8
           10 bit:   3696.3  804.8
32          8 bit:   5108.6  568.9
           10 bit:   4249.6  918.8
48          8 bit:  16819.6 2304.9
           10 bit:  13882.0 3178.5
64          8 bit:  13490.8 1799.5
           10 bit:  11018.5 2519.4

Signed-off-by: Martin Storsjö <martin@martin.st>
2017-12-08 23:41:01 +02:00
sfan5
a428f2fcd9 libavcodec/hevc_filter: move AVDISCARD_NONREF switch-case into function
In preparation for implementation of skip_frame.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-08 20:02:16 +01:00
Jacob Trimble
2fdc9f7c49 avcodec/nvdec: Fix capability check with old drivers.
Copied the check from cuviddec.c (*_cuvid decoders) to allow the
capability check to be optional for older drivers.

Signed-off-by: Jacob Trimble <modmaker@google.com>
Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
2017-12-08 17:56:38 +01:00
Rostislav Pehlivanov
4678339e74 opus: fix hybrid folding indexing during band quantization
Resulted in valgrind errors due to uninitialized memory.
Also updates fate and makes it use the tron sample result.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-12-08 04:42:24 +00:00
John Stebbins
79a744768a lavc/libx265: mark disposable frames
Used by movenc to fill sdtp box

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-07 22:51:18 +01:00
Mark Thompson
3ff8fbbf5a vaapi_h265: Add named options for setting profile and level
Also fixes the default, which previously contained a nonsense value.
2017-12-06 22:33:53 +00:00
Mark Thompson
6679654efe vaapi_h264: Add named options for setting profile and level 2017-12-06 22:33:52 +00:00
Gyan Doshi
dc7d5f9f19 avcodec/libx265 - Add named option to set profile
Adds call to x265_param_apply_profile after x265_param_parse.
Added as private option since HEVC profiles other than
Main, Main 10 and MSP in AVCodecContext are consolidated in a single
constant.

Reviewed-by: Hendrik Leppkes <h.leppkes@gmail.com>
Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Reviewed-by: Lou Logan <lou@lrcd.com>
2017-12-06 12:57:35 -09:00
Michael Niedermayer
610dd74502 avcodec/diracdsp: Fix integer overflow in PUT_SIGNED_RECT_CLAMPED()
Fixes: runtime error: signed integer overflow: 2147483646 + 2048 cannot be represented in type 'int'
Fixes: 4479/clusterfuzz-testcase-minimized-6529894147162112

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-06 22:09:25 +01:00
Michael Niedermayer
5e9a13a5a3 avcodec/dirac_dwt: Fix integer overflows in COMPOSE_DAUB97*
Fixes: 4478/clusterfuzz-testcase-minimized-4752113767809024
Fixes: runtime error: signed integer overflow: -2147483626 + -319489 cannot be represented in type 'int'

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-06 22:09:25 +01:00
Nikolas Bowe
5a412a5c3c avcodec/extract_extradata_bsf: Fix leak discovered via fuzzing
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-06 18:27:09 +01:00
Mark Thompson
71421f382f vaapi_h265: Add named options for setting profile and level
Also fixes the default, which previously contained a nonsense value.
2017-12-04 23:25:37 +00:00
Mark Thompson
c490fc9536 vaapi_h264: Add named options for setting profile and level 2017-12-04 23:25:32 +00:00
Mark Thompson
9f7cc87baf rkmpp: Add hardware config information
This is not strictly required here because the rkmpp decoder does not
call ff_get_format(), but it may be helpful metadata for users.
2017-12-04 23:21:35 +00:00
sfan5
942eafcf08 libavcodec/hevc_filter: support for all skip_loop_filter levels.
Continues where commit 52c75d486e left off.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-12-04 19:05:36 +01:00
Rostislav Pehlivanov
7b46add725 opus_pvq: do not compile encoding/decoding code if the encoder/decoder is disabled
This should save quite a bit of space if either has been disabled for size reasons.
Could just check if the encoding flag is set during runtime on every single location,
however the overhead of branch misses would somewhat decrease performance.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-12-04 10:51:19 +00:00
Rostislav Pehlivanov
ce87e630fa opus_celt: deduplicate band quantization/dequantization function
No point in having the same code twice to do exactly the same thing.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-12-04 10:51:19 +00:00
Rostislav Pehlivanov
1b8649c2ce opus: add an option to toggle intensity stereo phase inversion
Due to a somewhat high volume of complains, phase inversion has
been made optional with RFC8251. This allows for better bass
frequency response when partially downmixing to play on systems
with an LFE speaker.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-12-04 07:28:45 +00:00
Andrew D'Addesio
fe05f93013 opus: Add Special Hybrid Folding (per RFC8251)
This decoder-side change, introduced in RFC 8251 (section 9), slightly
improves the decoded quality of 16kbps speech in Hybrid Mode.

Differences can be seen/heard in testvector05.bit, testvector06.bit,
and testvector12.bit in the RFC 6716/8251 testvectors found here:
https://people.xiph.org/~greg/opus_testvectors/

Signed-off-by: Andrew D'Addesio <modchipv12@gmail.com>
2017-12-04 07:28:45 +00:00
Andrew D'Addesio
de052ea454 opus_celt: Fix arithmetic overflow (per RFC8251)
As per Sec.8 of RFC8251:
    Cap on Band Energy
    NaN due to large log-energy value. Affects celt_denormalize().

Signed-off-by: Andrew D'Addesio <modchipv12@gmail.com>
2017-12-04 07:28:45 +00:00