summaryrefslogtreecommitdiff
path: root/libavcodec/vc1_block.c
Commit message (Collapse)AuthorAgeFilesLines
* avcodec/vc1_block: Check the return code from vc1_decode_p_block()Michael Niedermayer2019-08-311-10/+27
| | | | | | | | | Fixes: left shift of negative value -1 Fixes: 16424/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_WMV3_fuzzer-5656579055026176 Fixes: 16358/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_VC1IMAGE_fuzzer-5714436358144000 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1_block: Check for double escapesMichael Niedermayer2019-08-311-1/+1
| | | | | | | | Fixes: out of array read Fixes: 16331/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_WMV3IMAGE_fuzzer-5672735195267072 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1_block: Fix invalid shifts in vc1_decode_i_blocks()Michael Niedermayer2019-08-111-2/+2
| | | | | | | | | Fixes: left shift of negative value -9 Fixes: 15299/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_MSS2_fuzzer-5660922678345728 Fixes: 15557/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_VC1IMAGE_fuzzer-5673351911047168 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1_block: fix invalid shift in vc1_decode_p_mb()Michael Niedermayer2019-08-111-1/+1
| | | | | | | | Fixes: left shift of negative value -5 Fixes: 15294/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_VC1_fuzzer-5733921754447872 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1_block: Check get_vlc2() return before useMichael Niedermayer2019-08-051-0/+2
| | | | | | | | Fixes: index -1 out of bounds for type 'const uint8_t [185][2]' Fixes: 15720/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_MSS2_fuzzer-5666071933091840 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1_block: Fix integer overflow in ff_vc1_pred_dc()Michael Niedermayer2019-07-311-3/+3
| | | | | | | | Fixes: signed integer overflow: 32796 * 65536 cannot be represented in type 'int' Fixes: 15430/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_VC1IMAGE_fuzzer-5735424087031808 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1_block: Check for vlc error in vc1_decode_ac_coeff()Michael Niedermayer2019-07-081-8/+26
| | | | | | | | Fixes: index -1 out of bounds for type 'const uint8_t [185][2]' Fixes: 15250/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_WMV3IMAGE_fuzzer-5648992869810176 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1_block: Fix mqaunt check for negative valuesMichael Niedermayer2018-06-301-1/+1
| | | | | | | | | | | Fixes: out of array access Fixes: ffmpeg_bof_4.avi Fixes: ffmpeg_bof_5.avi Fixes: ffmpeg_bof_6.avi Found-by: Thuan Pham, Marcel Böhme, Andrew Santosa and Alexandru Razvan Caciulescu with AFLSmart Reviewed-by: Jerome Borsboom <jerome.borsboom@carpalis.nl> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1: change the internal ordering of blocks within a macroblockJerome Borsboom2018-06-291-32/+33
| | | | | | | | | | The overlap filter needs to cover a full macroblock vertical edge when the FIELDTX value for two neighbouring macroblocks is not equal. By changing the internal ordering of the blocks from row major to column major, we do not need to reinterlace a FIELDTX coded macroblock before running the overlap filter. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: fix condition guarding overlap filter on I pictureJerome Borsboom2018-06-291-1/+1
| | | | | | | The overlap filter needs to run when PQUANT is 9 or higher, irrespective of CONDOVER. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: rewrite vc1_decode_i_blocks to align with VC-1 specJerome Borsboom2018-06-181-49/+30
| | | | | | | Change vc1_decode_i_blocks to use vc1_put_blocks_clamped and ff_vc1_i_loop_filter. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: add Simple and Main profile to vc1_put_signed_blocks_clampedJerome Borsboom2018-06-181-19/+39
| | | | | | | | Simple and Main Profile also need unsigned put_pixels_clamped. Add an argument to choose between signed and unsigned put_pixels and change function name to vc1_put_blocks_clamped. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* Revert "avcodec/vc1: add Simple and Main profile to ↵Carl Eugen Hoyos2018-06-181-67/+66
| | | | | | | | | vc1_put_signed_blocks_clamped" This reverts commit 2065317db6dc3a219f8ed2de427fe7e19e02eb68. I committed a wrong version of this patch. Also reverts the follow-up commits 77a3dfb3 and 8331e591.
* avcodec/vc1: rewrite vc1_decode_i_blocks to align with VC-1 specJerome Borsboom2018-06-161-49/+30
| | | | | | | Change vc1_decode_i_blocks to use vc1_put_blocks_clamped and ff_vc1_i_loop_filter. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: add Simple and Main profile to vc1_put_signed_blocks_clampedJerome Borsboom2018-06-161-17/+37
| | | | | | | | Simple and Main profile also need unsigned put_pixels_clamped. Add an argument to choose between signed and unsigned put_pixels and change function name to vc1_put_blocks_clamped. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: store zero MVs for all blocks in a MBJerome Borsboom2018-05-281-2/+4
| | | | | | | | Direct prediction for interlace frame B pictures references the mv in the second block in an MB in the backward reference frame for the twomv case. When the backward reference frame is an I frame, this value may be unset. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: fix mquant calculation for interlace field picturesJerome Borsboom2018-05-281-1/+2
| | | | | | | | | For interlace field pictures s->mb_height indicates the height of the full picture in MBs, i.e. the two fields combined. A single field is half this size. When calculating mquant for interlace field pictures, the bottom edge is the last MB row of the field. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: DIRECTBIT is only present in inter MBsJerome Borsboom2018-05-201-35/+36
| | | | | | | | | DIRECTBIT was decoded before the intra/inter MB branching when decoding interlace frame B pictures. Resulting in mistakenly also decoding it for intra MBs where this syntax element is not present. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1: fix mquant calculationJerome Borsboom2018-04-291-2/+3
| | | | | | | | | | | | In vc1_decode_i_blocks_adv mquant needs to be reset to its default value for each macroblock, instead of once at the beginning of the slice. DQPROFILE specifies which macroblocks can have an alternative quantizer step size. When DQPROFILE specifies edges, the selection is applicable to the edges of the picture. Slice edges are not selected by DQPROFILE. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/vc1: more corrections for AC inverse quantization scalingJerome Borsboom2018-04-251-61/+68
| | | | | | | | | | | HALFQP should only be added to the inverse quantizer when the block is coded with PQUANT. When PQUANT is equal to ALTPQUANT, the original test for the addition of HALFQP fails. A negative value for mquant indicates that the value was derived from VOPDQUANT. Fixes #4372 Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: correct AC inverse quantization scalingJerome Borsboom2018-04-251-1/+1
| | | | | | | HALFQP should only be added to the inverse quantizer when the block is coded with PQUANT. See 8.1.3.8 in VC-1 spec. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: add overlap smooting and loop filter for frame/field-interlaceJerome Borsboom2018-04-251-71/+40
| | | | | | | | Add previously omitted overlap smooting and loop filtering for frame/field-interlace pictures. For progressive pictures switch to the re-implemented versions of overlap smooting and loop filtering. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: re-implement vc1_put_signed_blocks_clampedJerome Borsboom2018-04-251-58/+58
| | | | | | | | The existing implementation only used vc1_put_signed_blocks_clamped for I and BI frames. This rewritten version is also applicable to P frame both progressive and frame/field-interlace. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: store additional bitstream elements during MB decodingJerome Borsboom2018-04-251-15/+43
| | | | | | | The new loop filter needs additional MB properties to make its filtering decisions. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1: change to using v->block instead of s->block for P framesJerome Borsboom2018-04-251-24/+31
| | | | | | | | | The new overlap smooting filter smoothes image pixels stored in v->block. Switch to v->block instead of s->block for storing decoded image pixels for P frames. Additionally, we must take incrementing *_blk_idx out of the vc1_put_signed_blocks_clamped function. Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
* avcodec/vc1_block: simplify ac_val computationMichael Niedermayer2018-04-241-3/+3
| | | | | | | | also fixes: runtime error: index 1456 out of bounds for type 'int16_t [16]' Found-by: durandal_1707 Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* Merge commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb'Clément Bœsch2016-06-211-4/+4
|\ | | | | | | | | | | | | * commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb': cosmetics: Fix spelling mistakes Merged-by: Clément Bœsch <u@pkh.me>
| * cosmetics: Fix spelling mistakesVittorio Giovara2016-05-041-7/+7
| | | | | | | | Signed-off-by: Diego Biurrun <diego@biurrun.de>
* | Merge commit 'c2084ffcbfc11d1b6ed3a4a0df9cafd56fbb896f'Derek Buitenhuis2016-05-071-1/+1
|\ \ | |/ | | | | | | | | | | * commit 'c2084ffcbfc11d1b6ed3a4a0df9cafd56fbb896f': intrax8: Use the generic horizband function Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * intrax8: Use the generic horizband functionVittorio Giovara2016-03-291-1/+1
| | | | | | | | | | This is assuming that intrax8 has no support for interlacing Carry over lowdelay value in ff_intrax8_decode_picture.
* | Merge commit 'b1268e0f032a3af3912fe3fb8d3855e12d7ea83b'Derek Buitenhuis2016-05-071-1/+2
|\ \ | |/ | | | | | | | | | | * commit 'b1268e0f032a3af3912fe3fb8d3855e12d7ea83b': intrax8: Pass macroblock coordinates to ff_intrax8_decode_picture Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * intrax8: Pass macroblock coordinates to ff_intrax8_decode_pictureVittorio Giovara2016-03-291-1/+2
| | | | | | | | | | These values need to be updated with the last macroblock position, so keep them as pointers.
* | Merge commit '8072345e9f86d88fbc4a15c17cb03f1e4701c9a5'Derek Buitenhuis2016-04-241-1/+1
|\ \ | |/ | | | | | | | | | | * commit '8072345e9f86d88fbc4a15c17cb03f1e4701c9a5': intrax8: Keep a reference to the GetBitContext reader Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * intrax8: Keep a reference to the GetBitContext readerVittorio Giovara2016-03-251-1/+1
| | | | | | | | Helps in decoupling this code from mpegvideo.
* | Merge commit 'eaeba6f241e0de0e797be10f8fda967ef8489e64'Derek Buitenhuis2016-04-241-2/+3
|\ \ | |/ | | | | | | | | | | * commit 'eaeba6f241e0de0e797be10f8fda967ef8489e64': intrax8: Pass the output frame to the decoding function Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * intrax8: Pass the output frame to the decoding functionVittorio Giovara2016-03-251-2/+3
| | | | | | | | Helps in decoupling this code from mpegvideo.
* | Merge commit '577393321c389ad2973bec6168a8045c94a9e099'Derek Buitenhuis2016-04-241-1/+2
|\ \ | |/ | | | | | | | | | | * commit '577393321c389ad2973bec6168a8045c94a9e099': intrax8: Carry over the loopfilter value in ff_intrax8_decode_picture Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * intrax8: Carry over the loopfilter value in ff_intrax8_decode_pictureVittorio Giovara2016-03-251-1/+2
| | | | | | | | Helps in decoupling this code from mpegvideo.
* | Merge commit '0c6a70873fc6e43194b471d112c30823b6c8d0b4'Derek Buitenhuis2016-04-171-0/+4
|\ \ | |/ | | | | | | | | | | * commit '0c6a70873fc6e43194b471d112c30823b6c8d0b4': intrax8: Move error resilience out of intrax8 Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
| * intrax8: Move error resilience out of intrax8Vittorio Giovara2016-03-221-0/+4
| | | | | | | | | | | | | | | | The intrax8 decoding process does not imply any kind of error resilience, and the only call present is more related to how mpegvideo works rather than anything else. Therefore have the parent decoders carry out er when actually needed.
* | Merge commit '1542ec96389f32e5081c6c607e4b6f5e257ccdf2'Hendrik Leppkes2015-08-101-2/+2
|\ \ | |/ | | | | | | | | | | | | | | | | * commit '1542ec96389f32e5081c6c607e4b6f5e257ccdf2': cosmetics: Drop spurious spaces from if clauses Conflicts: libavcodec/vc1_block.c Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
| * cosmetics: Drop spurious spaces from if clausesPaolo Bizzarri2015-08-081-4/+4
| | | | | | | | Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
* | Merge commit '7c6eb0a1b7bf1aac7f033a7ec6d8cacc3b5c2615'Michael Niedermayer2015-07-271-20/+20
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '7c6eb0a1b7bf1aac7f033a7ec6d8cacc3b5c2615': lavc: AV-prefix all codec flags Conflicts: doc/examples/muxing.c ffmpeg.c ffmpeg_opt.c ffplay.c libavcodec/aacdec.c libavcodec/aacenc.c libavcodec/ac3dec.c libavcodec/ac3enc_float.c libavcodec/atrac1.c libavcodec/atrac3.c libavcodec/atrac3plusdec.c libavcodec/dcadec.c libavcodec/ffv1enc.c libavcodec/h264.c libavcodec/h264_loopfilter.c libavcodec/h264_mb.c libavcodec/imc.c libavcodec/libmp3lame.c libavcodec/libtheoraenc.c libavcodec/libtwolame.c libavcodec/libvpxenc.c libavcodec/libxavs.c libavcodec/libxvid.c libavcodec/mpeg12dec.c libavcodec/mpeg12enc.c libavcodec/mpegaudiodec_template.c libavcodec/mpegvideo.c libavcodec/mpegvideo_enc.c libavcodec/mpegvideo_motion.c libavcodec/nellymoserdec.c libavcodec/nellymoserenc.c libavcodec/nvenc.c libavcodec/on2avc.c libavcodec/options_table.h libavcodec/opus_celt.c libavcodec/pngenc.c libavcodec/ra288.c libavcodec/ratecontrol.c libavcodec/twinvq.c libavcodec/vc1_block.c libavcodec/vc1_loopfilter.c libavcodec/vc1_mc.c libavcodec/vc1dec.c libavcodec/vorbisdec.c libavcodec/vp3.c libavcodec/wma.c libavcodec/wmaprodec.c libavcodec/x86/hpeldsp_init.c libavcodec/x86/me_cmp_init.c Merged-by: Michael Niedermayer <michael@niedermayer.cc>
| * lavc: AV-prefix all codec flagsVittorio Giovara2015-07-271-18/+18
| | | | | | | | | | | | Convert doxygen to multiline and express bitfields more simply. Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
* | Merge commit '848e86f74d3e6e87fa592ee8ba8c184cc5fd9a42'Michael Niedermayer2015-05-221-20/+21
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * commit '848e86f74d3e6e87fa592ee8ba8c184cc5fd9a42': mpegvideo: Drop flags and flags2 Conflicts: libavcodec/mpeg12dec.c libavcodec/mpeg12enc.c libavcodec/mpegvideo.c libavcodec/mpegvideo_enc.c libavcodec/mpegvideo_motion.c libavcodec/ratecontrol.c libavcodec/vc1_block.c libavcodec/vc1_loopfilter.c libavcodec/vc1_mc.c libavcodec/vc1dec.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
| * mpegvideo: Drop flags and flags2Vittorio Giovara2015-05-221-18/+19
| | | | | | | | They are just duplicates of AVCodecContext members so use those instead.
* | lavc/vc1: Never decode vc1 as gray if gray decoding was not enabled.Carl Eugen Hoyos2015-05-171-18/+18
| |
* | avcodec/vc1: Skip chroma operations if CODEC_FLAG_GRAY is setMichael Niedermayer2015-05-081-0/+4
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avcodec/vc1_block: Optimize vc1_decode_i_block_adv()zhaoxiu.zeng2015-02-281-71/+53
| | | | | | | | | | | | | | | | | | 9127 -> 8936 decicycles (fate-suite/vc1/SA10143.vc1) 13855 -> 10976 decicycles (fate-suite/vc1/SA20021.vc1) tests done by the author over this function but with the whole patchset applied not just this commit Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* | avcodec/vc1_block: Optimize vc1_decode_i_block()zhaoxiu.zeng2015-02-281-57/+38
| | | | | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at>