Commit Graph

48 Commits

Author SHA1 Message Date
Ronald S. Bultje 21a0451167 vp9: split decode_coeff_b loop inside txsz branch.
The advantage of this is that the is32x32 division branch in
decode_coeffs_b is removed from the inner loop to outside the block
coef decoding loop in decode_coeffs. Also, it allows us to merge the
txsz branches from the block coef decoding loop, the context merge
and the context split.
2014-02-17 13:39:00 +01:00
Clément Bœsch c333987876 vp9: fix compilation with !HAVE_FAST_64BIT.
Spotted-by: Carl Eugen Hoyos <cehoyos@ag.or.at>
2014-02-09 18:44:20 +01:00
Ronald S. Bultje 0d4d223353 vp9: invert order in l[] intra prediction array.
The directional intra predictors either don't care about order (dc, h,
dc_left, tm), or they prefer inverted order (vr, dr, hd). This allows
more efficient SIMD implementations.
2014-02-09 18:07:15 +01:00
Ronald S. Bultje 37c6eac296 vp9: remove memset in loopfilter level setting loop.
Use same function for segmentation map writing also.
2014-02-09 18:07:14 +01:00
Ronald S. Bultje 45245e202e vp9: coef decoding context-splat speedup. 2014-02-09 18:07:14 +01:00
Ronald S. Bultje fccd7d81b6 vp9: decode_mode context optimizations. 2014-02-09 18:07:14 +01:00
Ronald S. Bultje 1dc8559e25 vp9: more aligned zeroes. 2014-02-09 18:07:14 +01:00
Ronald S. Bultje 0c30c8ddc1 vp9: faster skip-block coefficient blanking. 2014-02-09 18:07:14 +01:00
Ronald S. Bultje cdfcd06126 vp9: coef context reading optimization. 2014-02-09 18:07:14 +01:00
Ronald S. Bultje 9aeca1c572 vp9: just disallow temporal or no-update segmentation on size-change.
The spec doesn't describe how it should be decoded so this is probably
the safest thing to do. Fixes valgrind errors on fuzzed11.ivf and fixes
valgrind errors on fuzzed10.ivf differently.
2014-02-09 18:07:14 +01:00
Ronald S. Bultje 0c67864a37 vp9: don't allow retaining old segmentation maps after a size change.
Fixes valgrind warnings on fuzzed10.ivf.
2014-02-08 22:08:20 +01:00
Ronald S. Bultje 7f0f47b3df vp9: some variable re-arrangements for alignment. 2014-02-08 18:30:17 +01:00
Ronald S. Bultje af63ea7078 vp9: re-allocate block buffers on uses_2pass change w/o size change.
Fixes valgrind errors and crashes in fuzzed9.ivf.
2014-02-08 18:30:17 +01:00
Ronald S. Bultje bbc3425fa2 vp9: fix mix-up of last-frame/cur-frame in frame size checks.
Fixes invalid reads in fuzzed7.ivf.
2014-02-08 11:18:37 +01:00
Ronald S. Bultje c2871568cf vp9: fix invalid ref frame w/h on size change.
Fixes invalid reads and crashes in vp90-2-05-resize.webm and fuzzed6.ivf.
The output is still not identical to what libvpx does (because we don't
actually scale in MC).

Reviewed-by: ubitux
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-01-26 20:16:01 +01:00
Ronald S. Bultje d9343c3484 vp9: disable use_last_frame_mvs on resolution change (scalable).
Prevents some invalid memory accesses after resolution change in
vp90-2-05-resize.webm, and libvpx does this too.

Reviewed-by: ubitux
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-01-26 20:15:45 +01:00
Ronald S. Bultje 4147b337c1 vp9: fix memory corruption if header decoding fails after size change. 2014-01-24 19:25:26 -05:00
Ronald S. Bultje 0065d2d520 vp9: fix mt-related hang a parser infinite loop.
Fixes trac ticket 3274.

Looked-at-by: ubitux
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-01-11 22:35:14 +01:00
Michael Niedermayer 3773738e26 Merge commit 'ca96e337169093979d7c763064ad9dae12b3108c'
* commit 'ca96e337169093979d7c763064ad9dae12b3108c':
  vp9: drop support for real (non-emulated) edges

Conflicts:
	libavcodec/vp9block.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-01-09 14:41:23 +01:00
Ronald S. Bultje 024fac5cd4 vp9: make mv bounds 32bit.
Fixes an assert in file from trac ticket 3188.
2014-01-07 20:43:35 -05:00
Ronald S. Bultje 5b0fc07819 vp9: reset contextual caches on frame size change with mt enabled.
Fixes crash/valgrind errors in trac ticket 3188 and hang in 3274.
2014-01-07 20:43:35 -05:00
Ronald S. Bultje acafbb4dd2 vp9: fix crash if segmentation=1, keyframe/intraonly=1 and updatemap=0.
The reference map is never used in such cases, but we accidently copied
it anyway. This could cause crashes if this map has not yet been
allocated. Fixes trac ticket 3188.

Reviewed-by: Clément Bœsch <u@pkh.me>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-12-24 11:43:53 +01:00
Ronald S. Bultje 4a55bffad3 vp9: fix bug in updating of coef probabilities with parallelmode=1.
Fixes trac ticket 3228.

Reviewed-by: Clément Bœsch <u@pkh.me>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-12-24 11:43:08 +01:00
Ronald S. Bultje f068aed7b8 vp9: make decode_coeffs() return value void.
It was previously int and would return error if decode_coeffs_b()
returns an error; however, that can never happen, so refactor all
that code to make all dependent functions return void also (all the
way up to decode_coeffs_sb()).
2013-11-30 16:26:14 -05:00
Ronald S. Bultje 47c6d9403d vp9: cosmetics. 2013-11-30 16:26:14 -05:00
Ronald S. Bultje 76bd878d95 vp9: add a 2-pass decoding mode, and add frame-mt support.
For a random 1080p sample, decoding time went from 9.7sec (1 threads)
to 6.0sec (2 threads) and 5.2sec (4 threads) in 2-pass decoding mode.
I don't have any samples that use the parallelmode feature, but the
gains should be higher.
2013-11-30 16:26:13 -05:00
Ronald S. Bultje 46955ae430 vp9: allocate 'b', 'block/uvblock' and 'eob/uveob' dynamically. 2013-11-30 16:26:13 -05:00
Ronald S. Bultje fc7d910b2e vp9: split last/cur_frame from the reference buffers.
We need more information from last/cur_frame than from reference
buffers, so we can use a simplified structure for reference buffers,
and then store mvs and segmentation map information in last/cur.
2013-11-30 16:26:13 -05:00
Ronald S. Bultje 39b244002a vp9: move some entries out of VP9Block into VP9Context.
They aren't really block-related variables in the sense that they are
not block-coded, rather they are state trackers.
2013-11-30 16:26:12 -05:00
Ronald S. Bultje 84d362f020 vp9: split packet parsing into an AVParser. 2013-11-30 16:26:12 -05:00
Ronald S. Bultje 816737ea5d vp9: use proper refcounting.
Based on something similar in libav. Author is likely Anton Khirnov
<anton@khirnov.net> but I'm not sure.
2013-11-30 16:26:12 -05:00
Clément Bœsch 484f8d77c6 avcodec/vp9: assert on sane size in update_size().
w and h are both read as uint16 + 1 so this can not happen. A similar
change was introduced in 97962b2 / 72ca830, with the
av_log()+AVERROR_INVALIDDATA form, suggesting it could be triggerable
somehow.

Change suggested by Ronald S. Bultje.
2013-11-16 22:47:54 +01:00
Clément Bœsch c20a7ce62d avcodec/vp9: remove some reset-to-zero from vp9_decode_free().
Those should not be necessary.

Original change by one of these developers:
    Anton Khirnov <anton@khirnov.net>
    Diego Biurrun <diego@biurrun.de>
    Luca Barbato <lu_zero@gentoo.org>
    Martin Storsjö <martin@martin.st>

See 97962b2 / 72ca830
2013-11-16 22:34:23 +01:00
Clément Bœsch 7e704b1e10 avcodec/vp9: add a never triggerable assert.
vp8_rac_get_tree() is called with a tree of size 3, so the returned
value can not be outside [0;3]. All of the [0;3] cases are handled in
the switch, so the assert should not be triggerable by any means. A
similar change was introduced in 97962b2 / 72ca830, with the
av_log()+AVERROR_INVALIDDATA form, suggesting it could be triggerable
somehow. This assert might help static analyzer, or simply the reader.
2013-11-16 22:34:23 +01:00
Martin Storsjö ab80d7e8c5 vp9: Ensure that the arithmetic coder values are read in the right order
The operands of an addition can be evaluated in any order, since
the addition isn't a sequence point. The only operators that
have a defined evaluation order are &&, ||, ?: and the sequence
operator ','.

This fixes fate-vp9 on ARM RVCT.
2013-11-16 20:25:25 +01:00
Clément Bœsch 7cd555dfa5 avcodec/vp9: make last_invisible local.
Original change by one of these developers:
    Anton Khirnov <anton@khirnov.net>
    Diego Biurrun <diego@biurrun.de>
    Luca Barbato <lu_zero@gentoo.org>
    Martin Storsjö <martin@martin.st>

See 97962b2 / 72ca830
2013-11-16 17:13:33 +01:00
Clément Bœsch 150c5543ff avcodec/vp9: fix "initialize" typo.
Originally spotted and fixed by one of these developers:
    Anton Khirnov <anton@khirnov.net>
    Diego Biurrun <diego@biurrun.de>
    Luca Barbato <lu_zero@gentoo.org>
    Martin Storsjö <martin@martin.st>

See 97962b2 / 72ca830
2013-11-15 23:28:48 +01:00
Michael Niedermayer 91e00c4a78 Merge commit '458446acfa1441d283dacf9e6e545beb083b8bb0'
* commit '458446acfa1441d283dacf9e6e545beb083b8bb0':
  lavc: Edge emulation with dst/src linesize

Conflicts:
	libavcodec/cavs.c
	libavcodec/h264.c
	libavcodec/hevc.c
	libavcodec/mpegvideo_enc.c
	libavcodec/mpegvideo_motion.c
	libavcodec/rv34.c
	libavcodec/svq3.c
	libavcodec/vc1dec.c
	libavcodec/videodsp.h
	libavcodec/videodsp_template.c
	libavcodec/vp3.c
	libavcodec/vp8.c
	libavcodec/wmv2.c
	libavcodec/x86/videodsp.asm
	libavcodec/x86/videodsp_init.c

Changes to the asm are not merged, they are left for volunteers or
in their absence for later.
The changes this merge introduces are reordering of the function
arguments

See: face578d56
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2013-11-15 15:07:10 +01:00
Ronald S. Bultje 72ca830f51 lavc: VP9 decoder
Originally written by Ronald S. Bultje <rsbultje@gmail.com> and
Clément Bœsch <u@pkh.me>

Further contributions by:
Anton Khirnov <anton@khirnov.net>
Diego Biurrun <diego@biurrun.de>
Luca Barbato <lu_zero@gentoo.org>
Martin Storsjö <martin@martin.st>

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2013-11-15 10:16:28 +01:00
Paul B Mahol e1c7892013 avcodec/vp9: use av_freep() for above_partition_ctx
Fixes use after free if memory allocation fails.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
2013-11-12 23:41:58 +00:00
Ronald S. Bultje dd3d0f46bd vp9: fix mvref finding to adhere to bug in libvpx.
Fixes a particular youtube video that I unfortunately can't share.
2013-11-09 21:31:06 +01:00
Ronald S. Bultje 6cf0c4107f Put vp9_scans and vp9_scans_nb in ro_data.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-11-04 02:32:18 +01:00
Ronald S. Bultje efc5a54cab vp9: skip itxfm_add if the whole block has no coefficients.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-10-27 15:02:48 +01:00
Hendrik Leppkes c2f3715cb3 vp9: always consume the full input packet
Reviewed-by: "Ronald S. Bultje" <rsbultje@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-10-22 18:52:40 +02:00
Michael Niedermayer f198efb179 avcodec/vp9: Add asserts to help source code analyzers
See CID1108596 and CID1108595
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-10-20 14:46:23 +02:00
Ronald S. Bultje 734ccf3785 avcodec/vp9: fix band_counts array size / padding
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2013-10-16 17:17:47 +02:00
Clément Bœsch b46f19100b cosmetics: group remaining .name and .long_name.
See b2bed9325.
2013-10-04 13:33:20 +00:00
Ronald S. Bultje 848826f527 Native VP9 decoder.
Authors: Ronald S. Bultje <rsbultje gmail com>,
         Clement Boesch <u pkh me>
2013-10-02 21:03:11 -04:00