Commit graph

41488 commits

Author SHA1 Message Date
Michael Niedermayer
3308e3da04 avcodec/agm: Check frame dimensions
Fixes: out of array access
Fixes: 14110/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_AGM_fuzzer-5649184864075776

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-04-11 19:25:42 +02:00
Paul B Mahol
d0f24df648 avcodec: add ADPCM AGM decoder 2019-04-11 11:58:34 +02:00
Paul B Mahol
7be8f7ac81 avcodec/agm: add support for non-dct coding 2019-04-11 11:49:43 +02:00
Paul B Mahol
0f28355974 avcodec/agm: add support for higher compression 2019-04-11 11:49:43 +02:00
Michael Niedermayer
3fe37033b9 avcodec/pnm_parser: Factor out next/index compensation
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-04-10 22:37:32 +02:00
Michael Niedermayer
1d43d72b18 avcodec/pnm_parser: Factor next initialization out
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-04-10 22:33:38 +02:00
Michael Niedermayer
7f3d39b21f avcodec/pnm_parser: Support concatenated ASCII images
Fixes: Timeout (8sec -> 0.1sec)
Fixes: 13864/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_PAM_fuzzer-5737860621139968

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-04-10 22:26:30 +02:00
Lynne
4d2f62150d aarch64/opusdsp: implement NEON accelerated postfilter and deemphasis
153372 UNITS in postfilter_c,   65536 runs,      0 skips
73164 UNITS in postfilter_neon,   65536 runs,      0 skips -> 2.1x speedup

80591 UNITS in deemphasis_c,  131072 runs,      0 skips
43969 UNITS in deemphasis_neon,  131072 runs,      0 skips -> 1.83x speedup

Total decoder speedup: ~15% on a Raspberry Pi 3 (from 28.1x to 33.5x realtime)

Deemphasis SIMD based on the following unrolling:
const float c1 = CELT_EMPH_COEFF, c2 = c1*c1, c3 = c2*c1, c4 = c3*c1;
float state = coeff;

for (int i = 0; i < len; i += 4) {
    y[0] = x[0] + c1*state;
    y[1] = x[1] + c2*state + c1*x[0];
    y[2] = x[2] + c3*state + c1*x[1] + c2*x[0];
    y[3] = x[3] + c4*state + c1*x[2] + c2*x[1] + c3*x[0];

    state = y[3];
    y += 4;
    x += 4;
}

Unlike the x86 version, duplication is used instead of pslldq so
the structure and tables are different.
2019-04-10 01:08:54 +02:00
Michael Niedermayer
2169a3f262 avcodec/agm: Fix integer overflow with w/h
Fixes: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
Fixes: 13999/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_AGM_fuzzer-5644405991538688

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-04-05 12:05:47 +02:00
Michael Niedermayer
8e3b01e20e avcodec/agm: More completely check size before using it
Fixes: out of array access
Fixes: 13997/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_AGM_fuzzer-5701427252428800

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-04-04 11:31:17 +02:00
James Almer
ee16d14b0a avcodec/av1_metadata: add an option to remove Padding OBUs
Reviewed-by: Mark Thompson <sw@jkqxz.net>
Signed-off-by: James Almer <jamrial@gmail.com>
2019-04-03 18:12:37 -03:00
Zhong Li
1125277bc6 lavc/qsvenc: enable hevc gpb option
GPB is the default type, just contains forward references but the
slice_type is B slice with higher encoding efficiency than regular P
slice, but lower performance.

Add an option to allow user to set regular P slice.

Fix ticket#6870

Test data on Intel Kabylake (i7-7567U CPU @ 3.50GHz):
1. ffmpeg -hwaccel qsv -c:v h264_qsv -i bbb_sunflower_1080p_30fps_normal.mp4 -vsync passthrough
-vframes 1000  -c:v hevc_qsv -gpb 0 -bf 0 -q 25 test_gpb_off_bf0_kbl.mp4

transcoding fps: 85
encoded file size of test_gpb_off_bf0_kbl.mp4: 21960100 (bytes)

2. ffmpeg -hwaccel qsv -c:v h264_qsv -i bbb_sunflower_1080p_30fps_normal.mp4 -vsync passthrough
-vframes 1000  -c:v hevc_qsv -gpb 1 -bf 0 -q 25 test_gpb_on_bf0_kbl.mp4

transcoding fps: 79
encoded file size oftest_gpb_on_bf0_kbl.mp4:  21211449 (bytes)

In this case, enable gpb can bring about 7% performance drop but 3.4% encoding efficiency improvment.

Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-04-03 23:00:15 +08:00
Zhong Li
c745bedd18 lavc/qsvenc: enable hevc coding options configuration
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-04-03 22:57:55 +08:00
Zhong Li
6f9d7c556d lavc/qsvenc: no need to include h264.h for jpeg encoder
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-04-03 22:57:55 +08:00
James Almer
0e1ea034d8 avcodec/libaomenc: fix range of values for enable-intrabc option
Signed-off-by: James Almer <jamrial@gmail.com>
2019-04-02 19:54:34 -03:00
James Almer
461303f94a avcodec/cbs_av1: fix parsing spatial_id
Reviewed-by: Mark Thompson <sw@jkqxz.net>
Signed-off-by: James Almer <jamrial@gmail.com>
2019-04-02 16:33:48 -03:00
Matthew Fearnley
b97a7dd031 libavcodec/zmbvenc: add support for 24-bit encoding, using pix_fmt BGR24.
Support is #ifdef'd out at this stage, using ZMBV_ENABLE_24BPP (like in
the zmbv.c decoder)
2019-04-02 17:14:42 +02:00
Matthew Fearnley
1046e88088 libavcodec/zmbv: change 24-bit decoder channel order, from RGB24 to BGR24
This brings the channel order in line with that used in 32-bit mode (BGR0).

24-bit decoding is disabled by default (#ifdef ZMBV_ENABLE_24BPP), and no
prior encoders or sample videos are known to exist for this bit depth, so
I consider this change in implementation is unlikely to affect anyone.

The decision has been made in agreement with the DOSBox Development Team
(dosbox.crew@gmail.com), specifically with harekiet, who wrote the original
codec.
2019-04-02 17:14:30 +02:00
Matthew Fearnley
5dcc63c1d2 libavcodec/zmbv: use PTRDIFF_SPECIFIER for src - c->decomp_buf.
Other bit depths saw this change in ced0d6c14d, but this instance was
presumably missed because of the #ifdef block.
2019-04-02 17:14:15 +02:00
James Almer
b74e13711f avcodec/opus: make redundancy_buf 32 byte aligned
Fixes ff_opus_deemphasis_fma3 segmentation fault crashes on x86_32.

Signed-off-by: James Almer <jamrial@gmail.com>
2019-04-02 11:36:56 -03:00
Lynne
b43b8d337d x86/opusdsp: fix WIN64 return value
Signed-off-by: James Almer <jamrial@gmail.com>
2019-04-01 11:06:34 -03:00
Zhong Li
d071a1117d lavc/qsvenc: get vps extradata from MSDK
Signed-off-by: Zhong Li <zhong.li@intel.com>
Reviewed-by: Mark Thompson <sw@jkqxz.net>
2019-04-01 19:21:48 +08:00
Linjie Fu
a8355eed36 lavc/qsvenc: expose low_power as a common option for QSV encoder
Always exposes low_power option for all qsv encoder, and reports a warning
if VDENC is not supported in current version of MSDK.

Signed-off-by: Linjie Fu <linjie.fu@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-04-01 19:21:42 +08:00
Michael Niedermayer
3a0ec1511e avcodec/rscc: Check that the to be uncompressed input is large enough
Fixes: Out of array access
Fixes: 13984/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_RSCC_fuzzer-5734128093233152

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-04-01 10:30:06 +02:00
Lynne
605e330310 x86/opusdsp: implement FMA3 accelerated postfilter and deemphasis
58893 decicycles in deemphasis_c,  130548 runs,    524 skips
9475 decicycles in deemphasis_fma3,  130686 runs,    386 skips -> 6.21x speedup

24866 decicycles in postfilter_c,   65386 runs,    150 skips
5268 decicycles in postfilter_fma3,   65505 runs,     31 skips -> 4.72x speedup

Total decoder speedup: ~14%

Deemphasis SIMD based on the following unrolling:
const float c1 = CELT_EMPH_COEFF, c2 = c1*c1, c3 = c2*c1, c4 = c3*c1;
float state = coeff;

for (int i = 0; i < len; i += 4) {
    y[0] = x[0] + c1*state;
    y[1] = x[1] + c2*state + c1*x[0];
    y[2] = x[2] + c3*state + c1*x[1] + c2*x[0];
    y[3] = x[3] + c4*state + c1*x[2] + c2*x[1] + c3*x[0];

    state = y[3];
    y += 4;
    x += 4;
}
2019-04-01 00:22:00 +02:00
Lynne
0cea3ca894 opusdsp: create and move deemphasis and postfiltering from opus_celt 2019-04-01 00:19:14 +02:00
Lynne
5468c1d075 celt_pvq_init: only build when CONFIG_OPUS_ENCODER is enabled
The entire function was defined away before.
2019-03-31 23:36:43 +02:00
Lynne
4a2c651620 x86/opus_dsp: rename to celt_pvq
Its only used in the encoder and in CELT's PVQ.
2019-03-31 23:35:00 +02:00
Michael Niedermayer
4eec008259 avcodec/ivi: Reduce dereferencing structs in inner loop of ivi_process_empty_tile()
This speeds the code up by about 15%
Testcase: 13779/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_INDEO4_fuzzer-5699589711069184

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-03-31 23:23:52 +02:00
Michael Niedermayer
4bf9561d63 avcodec/ivi: Mark band parameter as const
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-03-31 23:23:52 +02:00
Michael Niedermayer
111e9b0929 avcodec/ivi: fix indention for previous commit 2019-03-31 23:23:52 +02:00
Michael Niedermayer
c163e62db5 avcodec/ivi: Factor ref_mb check out
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-03-31 23:23:52 +02:00
Michael Niedermayer
468ae6a734 avcodec/proresdec2: decode picture header before frame allocation
Fixes: Timeout (21sec -> 0.3sec)
Fixes: 13716/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_PRORES_fuzzer-5755593333145600

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-03-31 23:23:52 +02:00
Nick Renieris
93748a2efa avcodec/tiff: Multi-page support
Option "-page N" (page index N starts from 1) can now be used to specify which TIFF page/subfile to decode.

Signed-off-by: Nick Renieris <velocityra@gmail.com>
2019-03-31 18:39:58 +02:00
Paul B Mahol
4e8cbbf70e avcodec: add Amuse Graphics decoder
This work is sponsored by VideoLAN.
2019-03-31 10:48:43 +02:00
Philip Langdale
5d90d1e36e avcodec/cuviddec: Remove unnecessary stream synchronisation
We're also doing a sync here after copying the frame to be passed
on down the pipleine. And it is also unnecessary.

I was able to demonstrate a 33% speedup removing the sync from
an example transcode pipeline.
2019-03-30 10:51:07 -07:00
James Almer
0856c5da07 avcodec/libaomenc: fix default value for row-mt option
Signed-off-by: James Almer <jamrial@gmail.com>
2019-03-29 14:55:00 -03:00
Sam John via ffmpeg-devel
995889abbf avcodec/libaomenc: Added more commandline options
The following are the newly added options:
arnr_max_frames, arnr_strength, aq_mode, denoise_noise_level, denoise_block_size,
rc_undershoot_pct, rc_overshoot_pct, minsection_pct, maxsection_pct, frame_parallel,
enable_cdef, enable_global_motion, and intrabc.

Also added macros for compiling for aom 1.0.0 and fixed the default values.

Signed-off-by: James Almer <jamrial@gmail.com>
2019-03-29 14:53:55 -03:00
Zhong Li
9dece050ef lavc/qsvenc: fix hevc vps extradata issues
cbs trace qsv vps header failed due to some reasons:
1. vps_temporal_id_nesting_flag is not set but spec required it must to
   be 1 when vps_max_sub_layers_minus1 is equal to 0.
2. vps_num_hrd_parameters is not set and written.
3. other issues in ff_hevc_encode_nal_vps() (fixed in pervious commit_id: 520226b683).

Reproduce: ffmpeg -hwaccel qsv -v verbose -c:v h264_qsv -i bbb_sunflower_1080p_30fps_normal.mp4 -vframes 1
-c:v hevc_qsv  -bsf:v trace_headers -f null -

Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-03-29 10:10:10 +08:00
Zhong Li
520226b683 lavc/hevc_ps_enc: fix vps nal issues
1. write vps_num_hrd_parameters element
2. flush left bits

Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-03-29 09:51:09 +08:00
Michael Niedermayer
4daec0c677 avcodec/dxv: Check remaining space in CHECKPOINT()
Fixes: Timeout (77sec -> 1sec)
Fixes: 13407/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_DXV_fuzzer-5093143018471424

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-03-28 21:32:31 +01:00
Zhong Li
391f884675 lavc/qsvenc_h264: remove the privite option trellis
There are many problems of current qsv trellis option:
1. Duplicated with AVCodecContext definition
2. MFX_TRELLIS_XXX is introduced by MSDK API 1.17
   Currently Without MSDK API checking thus may cause compilation issue.
3. user is inclined to enable trellis when set "-trellis 1", but
   actually it is to disable since MFX_TRELLIS_OFF is equal to 1.
4. It is too complex for user to enable trellis for every frame(I/P/B).

Just simply remove the private option, and switch to the AVCodecContext
definition. Compatibility should not a big problem (except can't exact map)
since the option name is same as AVCodecContext.

Signed-off-by: Zhong Li <zhong.li@intel.com>
Reviewed-by: Carl Eugen Hoyos <ceffmpeg@gmail.com>
Reviewed-by: Moritz Barsnick <barsnick@gmx.net>
2019-03-28 21:52:51 +08:00
Zhong Li
b9a066ae23 lavc/qsvenc: use the common option "trellis" of AVCodecContext
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-03-28 21:50:01 +08:00
Zhong Li
4131b0619c qsv: fix the dangerous macro definitions
Signed-off-by: Zhong Li <zhong.li@intel.com>
Reviewed-by: Carl Eugen Hoyos <ceffmpeg@gmail.com>
2019-03-28 21:49:04 +08:00
Zhong Li
b47446cc39 lavc/qsvenc: make the queried libmfx version easily reused
Signed-off-by: Zhong Li <zhong.li@intel.com>
2019-03-28 21:48:09 +08:00
Carl Eugen Hoyos
f8fa8bbf22 lavc/vaapi_h264: Do not set FMO fields.
The fields are deprecated in current vaapi,
setting them to 0 in old versions is fine
as FMO is not implemented.

Fixes the following warnings:
libavcodec/vaapi_h264.c:259:10: warning: 'num_slice_groups_minus1' is deprecated [-Wdeprecated-declarations]
        .num_slice_groups_minus1                    = pps->slice_group_count - 1,
         ^
libavcodec/vaapi_h264.c:260:10: warning: 'slice_group_map_type' is deprecated [-Wdeprecated-declarations]
        .slice_group_map_type                       = pps->mb_slice_group_map_type,
         ^
libavcodec/vaapi_h264.c:261:10: warning: 'slice_group_change_rate_minus1' is deprecated [-Wdeprecated-declarations]
        .slice_group_change_rate_minus1             = 0, /* FMO is not implemented */
         ^

Reviewed-by: Mark Thompson
2019-03-28 00:51:14 +01:00
Carl Eugen Hoyos
9fa757ad7c lavc/vaapi_hevc: Do not initialize fields twice.
Fixes the following compilation warnings:
libavcodec/vaapi_hevc.c:155:21: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]
        .pic_fields.bits = {
                   ~^~~~
libavcodec/vaapi_hevc.c:125:57: note: previous initialization is here
        .pic_fields.value                             = 0,
                                                        ^
libavcodec/vaapi_hevc.c:175:31: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]
        .slice_parsing_fields.bits = {
                             ~^~~~
libavcodec/vaapi_hevc.c:126:57: note: previous initialization is here
        .slice_parsing_fields.value                   = 0,

Reviewed-by: Mark Thompson
2019-03-28 00:33:07 +01:00
Michael Niedermayer
54655623a8 avcodec/hevcdec: Avoid only partly skiping duplicate first slices
Fixes: NULL pointer dereference and out of array access
Fixes: 13871/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_HEVC_fuzzer-5746167087890432
Fixes: 13845/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_HEVC_fuzzer-5650370728034304

This also fixes the return code for explode mode

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: James Almer <jamrial@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2019-03-27 08:42:10 +01:00
Decai Lin
ec1e4a8baf lavc/h264_levels: add MaxMBPS checking and update fate test.
1. add MaxMBPS checking for level idc setting to align with AVC spec
   AnnexA table A-1/A-6 level limits.
2. update h264 level fate test.

Signed-off-by: Decai Lin <decai.lin@intel.com>
Signed-off-by: Mark Thompson <sw@jkqxz.net>
2019-03-27 00:13:27 +00:00
Carl Eugen Hoyos
1e34014010 lavc/bmp: Avoid a heap buffer overwrite for 1bpp input.
Found by Mingi Cho, Seoyoung Kim, and Taekyoung Kwon
of the Information Security Lab, Yonsei University.
2019-03-26 21:07:51 +01:00