Commit Graph

169 Commits

Author SHA1 Message Date
Alexander Voronov
902529c595 Reinitialize dequantizer when switching from 10/12 bit to 8 bit.
Change-Id: Id294cf8d314a3f8aaf4ca2a6b3da052cc898a78c
2014-09-11 21:00:51 +04:00
Peter de Rivaz
b94a475d7b In profile3 we need 2 bytes to show a previous frame
Change-Id: I208632dd94dfc45ab78312e26fee569270ce0ba8
2014-09-01 16:09:07 +01:00
Deb Mukherjee
059a721d92 Change vpx bit depth enum type to be more natural
Also moves bit_depth_to_bps function to the vpx level.

Change-Id: I7c24f80b2b5bd2fcc6552b61aacee4c7954cc54b
2014-08-28 23:57:57 -07:00
James Hutchinson
3489c19d2b Merge branch 'master' into highbitdepth
Conflicts:
	configure
	test/convolve_test.cc
	test/dct16x16_test.cc
	test/dct32x32_test.cc
	test/fdct4x4_test.cc
	test/fdct8x8_test.cc
	test/partial_idct_test.cc
	third_party/libyuv/README.libvpx
	vp9/common/vp9_enums.h
	vp9/common/vp9_idct.h
	vp9/common/vp9_rtcd_defs.pl
	vp9/decoder/vp9_decodeframe.c
	vp9/encoder/vp9_bitstream.c
	vp9/encoder/vp9_encodeframe.c
	vp9/encoder/vp9_encoder.c
	vp9/encoder/vp9_encoder.h
	vp9/encoder/vp9_extend.c
	vp9/encoder/vp9_quantize.c
	vp9/encoder/vp9_rd.c
	vp9/encoder/vp9_rdopt.c
	vp9/vp9_cx_iface.c
	vp9/vp9_dx_iface.c
	vp9/vp9_iface_common.h
	vpx/vp8cx.h
	vpx_scale/generic/yv12config.c
	vpxdec.c
	vpxenc.c

Change-Id: If4104c5a7cd0a29dd0bed7c3804837ba40ba7e0c
2014-08-19 10:58:02 -07:00
Adrian Grange
4e30565a9f Fix bug 837: realloc mode info buffers on resize
The test to determine if the mode info buffers need
to be resized when the frame size changes was
incorrect, as per bug 837.

By storing the size of the allocated data structure,
a simple test determines whether to allocate more
memory when the frame size changes.

Change-Id: I1544698f2882cf958fc672485614f2f46e9719bd
2014-08-14 08:59:15 -07:00
Adrian Grange
75b42a4977 Remove coding_use_prev_mi member from VP9_COMMON
This was shadowing the use of error_resilient_mode, but with
the opposite sense.

Change-Id: Ie4d30263a304fe4b3e94f0c7741db6888cc6afd8
2014-08-08 09:40:38 -07:00
Deb Mukherjee
cea11ebb1e Hdr change for profiles > 1 for intra-only frames
Adds bitdepth, color sampling ind color space information to header
for intra only frames in profile > 0.
Also enforces profile 1 and 3 exclusive usage for non 420 color
sampling.

Change-Id: I92b0630d5193fdbc6e71fa909d684521c12b5d99
2014-08-07 09:55:19 -07:00
Deb Mukherjee
09bf1d61ca Changes hdr for profiles > 1 for intraonly frames
Specifies the bit-depth, color sampling and colorspace
for intra only frames for profiles > 0

Also adds checks to ensure that profile 1 and 3 are
exclusively used for non 420 streams.

Change-Id: Icfb15fa1acccbce8f757c78fa8a2f60591360745
2014-08-07 09:47:14 -07:00
Jim Bankoski
899585ebe9 Fix reference frame size restrictions.
The issue was introduced by commit g9f37d14 with adding explicit
restrictions on reference-frame scale factors. The restriction
is checked against aligned-by-8 frame dimensions, not against
original ones. So, for example, frame of 35×35 actually can refer
to frame of 70×70, but the new check won't allow this. It will
compare 35 vs 72 (not 70), so 2x downscale limit will be exceeded.

Change-Id: Ic663693034440f64ac8312cbff9e1e773a921060
2014-07-28 08:37:25 -07:00
Yaowu Xu
b43b4fe3a2 Merge "Fix allocation of context buffers on frame resize" 2014-07-25 08:49:39 -07:00
Yaowu Xu
9261e1aa6e Changed validation of reference frame size
A previous change, https://gerrit.chromium.org/gerrit/#/c/70632,
introduced a size validation for reference frames to insuare the
input stream is a valid VP9 stream. However, the logic requiring
all reference frames have valid size turned out to be too strict.

In this commit, we modify the validation to require one of the
reference frame has valid dimension. In addition, the decoder
reports error whenever it detects the use of reference frame
with invalid scalig ratio.

Change-Id: If8efc312244087556cfe00f1fcbdff811268ebad
2014-07-24 14:58:01 -07:00
Adrian Grange
423e8a9727 Fix allocation of context buffers on frame resize
The patch:
https://gerrit.chromium.org/gerrit/#/c/70814/
changed the test that determined whether the context
frame buffers needed to be reallocated or not.

The code checked for a change in total frame area
to signal the need to reallocate context buffers.
However, the above_context buffer needs to be
resized i:xf only the width of the frame has increased.

Change-Id: Ib89d75651af252908144cf662578d84f16cf30e6
2014-07-24 14:07:45 -07:00
Alex Converse
5926e7c0e8 Remove unfinished VP9 alpha channel.
Change-Id: Ic5d3a3a0dac10b49495771886a31e793bb78b5ca
2014-07-21 15:55:50 -07:00
Yunqing Wang
765485cab2 Add -DNDEBUG when config option debug is disabled
For gcc, when libvpx config option debug is disabled, added the
flag -DNDEBUG to disable the assertions in libvpx for some speedup.

Change-Id: Ifcb7b9e8ef5cbe5d07a24407b53b9a2923f596ee
2014-07-21 09:20:03 -07:00
Adrian Grange
18a7f69dae Re-introduce frame size check inadvertantly deleted
This patch adds back in code that checks that the frame
size lies within defined bounds was inadvertantly removed
by a previous patch:
https://gerrit.chromium.org/gerrit/#/c/70814/

Change-Id: If526570ba559260c4b7e98098bc75f7700ae7f97
2014-07-18 15:44:10 -07:00
James Hutchinson
41c8641b6b Merge branch 'master' into highbitdepth
Conflicts:
    configure
    test/convolve_test.cc
    test/dct16x16_test.cc
    test/dct32x32_test.cc
    test/fdct4x4_test.cc
    test/fdct8x8_test.cc
    vp9/common/vp9_alloccommon.c
    vp9/common/vp9_entropy.c
    vp9/common/vp9_enums.h
    vp9/common/vp9_quant_common.c
    vp9/common/vp9_quant_common.h
    vp9/common/vp9_rtcd_defs.pl
    vp9/common/vp9_scale.c
    vp9/decoder/vp9_decodeframe.c
    vp9/decoder/vp9_decodeframe.h
    vp9/decoder/vp9_detokenize.c
    vp9/encoder/vp9_aq_complexity.c
    vp9/encoder/vp9_bitstream.c
    vp9/encoder/vp9_encodeframe.c
    vp9/encoder/vp9_encodemb.c
    vp9/encoder/vp9_encoder.c
    vp9/encoder/vp9_firstpass.c
    vp9/encoder/vp9_mcomp.c
    vp9/encoder/vp9_pickmode.c
    vp9/encoder/vp9_quantize.c
    vp9/encoder/vp9_ratectrl.c
    vp9/encoder/vp9_rd.c
    vp9/encoder/vp9_rdopt.c
    vp9/encoder/vp9_temporal_filter.c
    vp9/encoder/vp9_tokenize.c
    vp9/vp9_cx_iface.c
    vp9/vp9_dx_iface.c
    vpx/vpx_codec.h
    vpx/vpx_image.h
    vpx_scale/generic/yv12config.c
    vpxdec.c
    vpxenc.c
    vpxenc.h
    y4menc.c
    y4minput.c

Change-Id: I53b19ea1d9818a4440481920065d70164348d02e
2014-07-18 14:58:26 -07:00
Deb Mukherjee
727f384085 Merge "Separates profile 2 into 2 profiles 2 and 3" 2014-07-18 03:23:51 -07:00
Deb Mukherjee
c447a50aea Separates profile 2 into 2 profiles 2 and 3
Separates HBD profile int two profiles (2 and 3) consistent with the
highbitdepth branch. This patch is ported from the original highbitdepth
branch patch: https://gerrit.chromium.org/gerrit/#/c/70460/

Two of the invalid file tests needed to be updated.

Change-Id: I6a4acd2f7a60b1fb4cbcc8e0dad4eab4248431e3
2014-07-17 20:51:59 -07:00
Adrian Grange
f68aaa38d6 Modified frame buffer handling
This patch is the first step toward simplifying the
frame buffer handling.

The final goal is to have a common frame buffer handling
framework for both encoder and decoder that incorporates
the existing ability to use externally allocated memory.

Change-Id: I2c378a4f54a39908915f46c4260e17a080db7ff1
2014-07-17 11:06:35 -07:00
Jim Bankoski
943e43273b allow config options to limit max size of decode
This is a practical concern to allow us to fail in a decoder instance
if the size of a file is bigger than we can reasonably handle.

Change-Id: I0446b5502b1f8a48408107648ff2a8d187dca393
2014-07-17 07:07:48 -07:00
hkuang
c147cf3d3b Add unit test to test tile decoding error handling.
Also fix bugs related with corrupted frame handling.
Return VPX_CODEC_CORRUPT_FRAME when getting corrupted
block.

Change-Id: I7207ccc7c68c4df2b40b561315d16e49ccf7ff41
2014-07-11 13:50:05 -07:00
hkuang
b84ee5a3d0 Merge "Move vp9_thread.* to common." 2014-07-09 10:16:13 -07:00
Adrian Grange
7c43fb67ae Fix decoder handling of intra-only frames
This patch fixes bug 633:
https://code.google.com/p/webm/issues/detail?id=633

The first decoded frame does not have to be a keyframe,
it could be an inter-frame that is coded intra-only.

This patch fixes the handling of intra-only frames.

A test vector has also been added that encodes 3
intra-only frames at the start of the clip. The
test vector was generated using the code in the
following patch:
https://gerrit.chromium.org/gerrit/#/c/70680/

Change-Id: Ib40b1dbf91aae2bc047e23c626eaef09d1860147
2014-07-08 16:24:03 -07:00
hkuang
337e8015c9 Move vp9_thread.* to common.
Prepare for frame parallel decoding, the reference count buffers
need to be protected by mutex. Move vp9_thread.* to common
folder so that those buffers could use cross-platform mutex
from vp9_thread.*.

Change-Id: I541277cf15eefed6641555944f67f4a0bcdc8154
2014-07-07 14:52:19 -07:00
Peter de Rivaz
91c222491e Alternate high bitdepth quantizer changes
In this proposal, the qindex range is kept at 0 to 255
but the values are remapped to cover an extended range of
quantizer values.

This simplifies the code and bitstream compared to the 8-bit version.

Change-Id: I0dda61388cef41e21a0d5c34d817c862de637580
2014-07-03 13:53:02 +01:00
James Zern
8aafd34050 Merge changes I875ac5a7,I2b13369d,I9ceb47a9
* changes:
  update vp9_thread.[hc]
  vp9_thread_test: remove unnecessary c_str()'s
  vp9_thread_test: factorize decode loop
2014-07-01 20:46:53 -07:00
Jim Bankoski
abf0df08f1 validate uv block size when reading partition
Change-Id: I74fc5f1a7bab3128cdd49441b83ec3a25aee65ca
2014-07-01 10:26:26 -07:00
James Zern
e656f44c24 update vp9_thread.[hc]
pull the latest from WebP, which adds a worker interface abstraction
allowing an application to override init/reset/sync/launch/execute/end

this has the side effect of removing a harmless, but annoying, TSan
warning.

Original source:
 http://git.chromium.org/webm/libwebp.git
  100644 blob 08ad4e1fecba302bf1247645e84a7d2779956bc3 src/utils/thread.c
  100644 blob 7bd451b124ae3b81596abfbcc823e3cb129d3a38 src/utils/thread.h

Local modifications:
 - s/WebP/VP9/g
 - camelcase functions -> lower with _'s
 - associate '*' with the variable, not the type

Change-Id: I875ac5a74ed873cbcb19a3a100b5e0ca6fcd9aed
2014-07-01 00:39:10 -07:00
Jim Bankoski
7a8829f61a initialize bit buffer structure to avoid warning error
Change-Id: I38bb2801ad3f059d5e2eb6513eec92397c67abcd
2014-06-30 08:05:15 -07:00
Jim Bankoski
9f37d149c1 Better validation of invalid files
This patch checks that a decoder never tries to reference frame that's
outside the range of 2x to 1/16th the size of this frame.  Any attempt
to do so causes a failure.

Change-Id: I5c98fa7bb95ac4f29146f29dd92b62fe96164e4c
2014-06-27 10:03:15 -07:00
James Zern
b2b07755e0 vp9: check tile column count
the max is 6. there are assumptions throughout the decode regarding
this; fixes a crash with a fuzzed bitstream

$ zzuf -s 5861 -r 0.01:0.05 -b 6- \
  < vp90-2-00-quantizer-00.webm.ivf \
  | dd of=invalid-vp90-2-00-quantizer-00.webm.ivf.s5861_r01-05_b6-.ivf \
    bs=1 count=81883

Change-Id: I6af41bb34252e88bc156a4c27c80d505d45f5642
2014-06-24 19:26:11 -07:00
James Hutchinson
939f871ccc Merge branch 'master' into highbitdepth
Conflicts:
	configure
	test/dct16x16_test.cc
	test/dct32x32_test.cc
	test/fdct4x4_test.cc
	test/fdct8x8_test.cc
	test/partial_idct_test.cc
	vp9/common/vp9_blockd.h
	vp9/common/vp9_idct.h
	vp9/common/vp9_rtcd_defs.pl
	vp9/decoder/vp9_decodeframe.c
	vp9/encoder/vp9_aq_complexity.c
	vp9/encoder/vp9_block.h
	vp9/encoder/vp9_dct.c
	vp9/encoder/vp9_encodeframe.c
	vp9/encoder/vp9_encodemb.c
	vp9/encoder/vp9_encoder.c
	vp9/encoder/vp9_firstpass.c
	vp9/encoder/vp9_pickmode.c
	vp9/encoder/vp9_quantize.c
	vp9/encoder/vp9_quantize.h
	vp9/encoder/vp9_ratectrl.c
	vp9/vp9_cx_iface.c

Change-Id: I402e1e91c6207c41a5bc1508ccfceec62196772b
2014-06-24 09:58:17 -07:00
Jim Bankoski
88ba08818e Fix bug in error handling that causes segfault
See: https://code.google.com/p/chromium/issues/detail?id=362697

The code properly catches an invalid stream but seg faults instead of
returning an error due to a buffer not having been initialized. This
code fixes that.

Change-Id: I695595e742cb08807e1dfb2f00bc097b3eae3a9b
2014-06-20 14:44:50 -07:00
Peter de Rivaz
8ca39ede47 Extended quantizer range for high bitdepth
These changes allow 10 and 12 bit depth streams
to encode at higher quality by using a finer
quantizer.  Category 6 tokens now transmit 18
extra bits instead of 14 in order to be able to
encode the greater range of output coefficients.

The extended quantizer range is only used when
configured with the following options:
--enable-vp9-high
--enable-high-transforms
--enable-high-quant

Change-Id: I58d2981676d67b65cc022e98cf443603d38ba6ff
2014-06-18 13:36:36 +01:00
Deb Mukherjee
093a32ffd7 Reworks high-bit-depth profiles
Splits profile 2 into Profile 2 and 3, where profile 2
ony supports 420 sampling, while profile 3 adds 422/444 and
alpha. Keeps room for further expansion.

Also makes some minor changes in the decoder parameters,
replacing --convert-to-8bit with output-bit-depth.

Change-Id: I713525880512de6c36698d212795db1543c1d0dd
2014-06-10 17:30:45 -07:00
Peter de Rivaz
666fd1300c Added high precision transforms
The high precision are only used if
configured with --enable-high-transforms

It gives greater precision in the transform.
This gives PSNR improvements when encoding
true 10 and 12 bit streams.

At the moment, the quantizer used is shifted
up by 2/4 for 10/12 bits so that the quantized
coefficients fit in the current token range.

Change-Id: Ia9c19a417cf030b8a7a889fcb3f5788bfca8215f
2014-06-05 01:09:32 -07:00
Deb Mukherjee
51790ab228 Some code cleanups
Removes duplicate enums and other cosmetic changes.

Change-Id: Ic8b47534ac3b2b554a79ff1437fbe5f0503a5732
2014-06-03 16:20:23 -07:00
Dmitry Kovalev
f5628853d7 Fixing failed ARM build.
Change-Id: I3f74418f07c2dfdd7725a5b4a8ef5c5f4aca6289
2014-06-02 11:14:12 -07:00
Dmitry Kovalev
e14f900ae3 Merge "Moving itxm_add pointer from MACROBLOCKD to MACROBLOCK." 2014-05-29 11:16:39 -07:00
Peter de Rivaz
cab30216a5 Merge branch 'master' into highbitdepth
Merges from master (May 26) to highbitdepth.

Change-Id: I553888a7b169b48e7bea07325d1127627a8f944e
2014-05-27 09:53:35 -07:00
Peter de Rivaz
efd115c415 Merge commit '9e7b09bc' into highbitdepth
Change-Id: I0376c867e7abfa7713ac6e7a4e604c8384fff58b
2014-05-23 14:06:31 -07:00
Dmitry Kovalev
e7135a9344 Removing decoded_key_frame flag.
Change-Id: I79576920efb7f3f6f197d386727409759d8bda8d
2014-05-21 15:51:40 -07:00
Dmitry Kovalev
35a83677a5 Moving itxm_add pointer from MACROBLOCKD to MACROBLOCK.
The final goal is eventually to get rid of both itxm_add and fwd_txm4x4.
This patch does it in the decoder.

Change-Id: Ibb3db57efbcbb1ac387c6742538a9fcf2c6f24a5
2014-05-21 11:09:44 -07:00
hkuang
b9e1e994e1 Fix the memory alignment issue due to patch:
https://gerrit.chromium.org/gerrit/#/c/70162/

Change-Id: I797be6a4b21460de6d791125fc20d2be3a35364f
2014-05-21 10:08:06 -07:00
hkuang
20c1edf612 Refactor decode_tiles and loopfilter code.
The current decode_tiles decodes the frame one tile by one tile
and then loopfilter the whole frame or use another worker thread to
do loopfiltering.

|------|------|------|------|
|Tile1-|Tile2-|Tile3-|Tile4-|
|------|------|------|------|

For example, if a tile video has one row and four cols, decode_tiles
will decode the Tile1, then Tile2, then Tile3, then Tile4.
And during decode each tile, decode_tile will decode row by row in
each tile.

For frame parallel decoding, decode_tiles will decode video in row order
across the tiles. So the order will be:
"Decode 1st row of Tile1" -> "Decode 1st row of Tile2"
-> "Decode 1st row of Tile3" -> "Decode 1st row of Tile4"
-> "Decode 2nd row of Tile1" -> "Decode 2nd row of Tile2"
-> "Decode 2nd row of Tile3" -> "Decode 2nd row of Tile4"-> "loopfilter 1st row"

Change-Id: I2211f9adc6d142fbf411d491031203cb8a6dbf6b
2014-05-20 14:47:45 -07:00
Dmitry Kovalev
79ba41903f Removing MACROBLOCKD dependency from loop filter.
Change-Id: I9ef40f3d95ab8f94f69e92ea25678a40956bc1ce
2014-05-16 09:48:26 -07:00
Yaowu Xu
04c40d3d93 cleanup -wextra warnings:
vp9_decoder.c
  vp9_dthread.c

Change-Id: Iaafe941545db98e9e3559096a955894646084ac2
2014-05-15 15:59:25 -07:00
hkuang
1fe6496b17 Merge "Refactor calling loopfilter code." 2014-05-15 10:51:10 -07:00
hkuang
bf8c58be5a Refactor calling loopfilter code.
This change is mainly for a follow CL that will refactor the
decode_tiles.

Change-Id: I52de6f8dbada75a64d9a94ebb5975136ed0960b4
2014-05-15 10:21:18 -07:00
Yaowu Xu
ed09580777 vp9_decodeframe.c: cleanup -wextra warnings
Change-Id: I0315cea6a5e58182bc2556e9825ec2ef0b1480c3
2014-05-14 09:46:11 -07:00