paulwilkins [Thu, 14 May 2015 16:16:36 +0000 (17:16 +0100)]
Fix issues with mixed ARF and GF groups.
This patch addresses two issues that can occur when the
encoder chooses to use a mixture of ARF and GF groups.
The first issue relates to a failure to reset the "ARF active" flag
correctly when transitioning from coding ARF groups to coding
GF groups. This caused some golden frames to be encoded
with an incorrect bit rate target as if they were ARF overlay frames.
The second issue relates to the encoding of a single short GF group
just before a key frame. Where the last group before a key frame
is an ARF group we expect the final frame before the key frame to
be an low data rate overlay frame. However, when the last group
is a GF group, the final frame before the key frame should be a normal
frame with a normal bit allocation. This issue had the potential to cause
a single poorly coded frame just before a key frame. If that key frame
were a forced key frame rather than a real scene cut, this might cause
pulsing.
James Zern [Fri, 15 May 2015 23:08:14 +0000 (23:08 +0000)]
Merge changes from topic 'missing-proto'
* changes:
vp9_subexp.h: add a missing prototype
vp9: add some missing includes
vp9 intrinsics: add vp9_rtcd include
vp9: correct some function signatures
vp9_variance_sse2: sync function signatures
vp9/encoder: make some functions static
vp9_dct_sse2: make some functions static
vp9_decodeframe.c: make a function static
Marco [Fri, 15 May 2015 18:08:24 +0000 (11:08 -0700)]
Change tx_size_search_method setting for non-rd speed 5.
Use the same settting as in speed >=6.
This will use same logic for tx_size selecton as in speed >=6,
which limits the transform size and reduces ringing artifact.
Also metrics go up on average with this change: ~2% for PSNR, ~10% for SSIM.
James Zern [Fri, 15 May 2015 17:19:49 +0000 (17:19 +0000)]
Merge changes from topic 'missing-proto'
* changes:
vp8/rdopt.h+onyx_int.h: add some missing prototypes
vp8: add some missing includes
vp8: make some functions static
vp8/common/variance*: add vp8_rtcd include
vp8_copy32xn: sync function signature
paulwilkins [Thu, 14 May 2015 16:16:36 +0000 (17:16 +0100)]
Revert "Skip the last frame update for some frame repeats."
Testing on another rate control patch reveals that in some
situations, where the encoder is flipping in and out of arf
mode, we get an encoder decoder mismatch.
Whilst it is still not clear why, skipping the last buffer
update seems to trigger the problem. Until I can establish
why, or if there is another underlying cause, I am reverting
this change.
Johann [Tue, 12 May 2015 02:09:22 +0000 (19:09 -0700)]
Relocate memory operations for common code
With the sad functions, and hopefully the variance functions soon,
moving to the vpx_dsp location, place the defines used in the
reference C code in a common location.
Tom Finegan [Wed, 13 May 2015 18:16:09 +0000 (11:16 -0700)]
Avoid failed include when Makefile is processed with no target.
Basically just a warning, but disconcerting nonetheless. Removes this
output from the build:
Makefile:59: -x86_64-darwin13-gcc.mk: No such file or directory
Yaowu Xu [Tue, 12 May 2015 22:02:43 +0000 (15:02 -0700)]
Protect new metric computation with use_highbitdepth flag
The computation of new metrics is not supported yet in highbitdepth
mode. This commit adds protection to make sure the computation is
done only when highbitdepth is not on. This protection shall be
revised when support of highbitdpeth computation is added.
This resolves the encoder crash when configured with both
--enable-internal-stats
--enable-vp9-highbitdepth
Yunqing Wang [Tue, 12 May 2015 21:36:46 +0000 (14:36 -0700)]
Remove unneeded variable declaration
This patch fixed the following warning:
src\third_party\libvpx\source\libvpx\vp9\encoder\vp9_pickmode.c(1607) :
warning C6246: Local declaration of 'this_mode' hides declaration of the
same name in outer scope.
James Zern [Tue, 12 May 2015 19:02:05 +0000 (19:02 +0000)]
Merge changes from topic 'missing-proto'
* changes:
vpxenc: make some functions static
vpxdec: make some functions static
tools_common.h: fix get_vpx_decoder_count() proto
tools_common.h: fix get_vpx_encoder_count() proto
tools_common.h: fix usage_exit() prototype
James Zern [Tue, 12 May 2015 02:04:48 +0000 (19:04 -0700)]
libs.mk: simplify test_libvpx target
rename LIBVPX_TEST_BINS to LIBVPX_TEST_BIN and remove foreach usage.
this was a leftover from having multiple targets with their own (single)
object list; the use of LIBVPX_TEST_OBJS so widely makes extending these
loops difficult.
James Zern [Sat, 9 May 2015 03:17:20 +0000 (20:17 -0700)]
build_intra_predictors*: reduce above_data size
currently this needs to be 2x (NEED_ABOVERIGHT) the size of the largest
block (32) + 1 (for above_left). reduce the buffer size from 128 + 16
(alignment) to 64 + 16.
hkuang [Fri, 8 May 2015 22:42:50 +0000 (15:42 -0700)]
Fix clang ioc warning due to NULL mi pointer.
The warning only happens in VP9 encoder's first pass due to src_mi
is not set up yet. But it will not fail the encoder as left_mi and
above_mi are not used in the first_pass and they will be set up again
in the second pass.
paulwilkins [Fri, 1 May 2015 15:04:52 +0000 (16:04 +0100)]
Skip the last frame update for some frame repeats.
Where a frame appears to be a repeat of an earlier
frame or frame buffer, but the first pass code
does not anticipate this (usually because it is matching
the GF or ARF buffer not the last frame buffer), do not
update the last frame buffer.
This helps ensure that the content of the last frame buffer
is kept "different" where possible, and not updated to
match the GF or ARF. This is particularly helpful in some
animated sequences where there are groups of repeating
frames. Here it has quite a big impact. However, in most
of our standard test clips it has little or no impact.
James Zern [Sat, 2 May 2015 20:24:16 +0000 (13:24 -0700)]
replace DECLARE_ALIGNED_ARRAY w/DECLARE_ALIGNED
this macro was used inconsistently and only differs in behavior from
DECLARE_ALIGNED when an alignment attribute is unavailable. this macro
is used with calls to assembly, while generic c-code doesn't rely on it,
so in a c-only build without an alignment attribute the code will
function as expected.