John Koleszar [Thu, 12 Jul 2012 16:22:01 +0000 (09:22 -0700)]
Merge snapshot 1 development history
Merge in the git history leading up to the first experimental
snapshot.
Change-Id: Ifbdbd5bdb585864b3f996c562ef38b6306731251
Yaowu Xu [Tue, 13 Mar 2012 17:26:53 +0000 (10:26 -0700)]
added clamp for 2nd motion vector
The commit added a clamp to the 2nd motion vector used in compound
prediction to insure mv within UMV borders. The clamp is similar to
that of the first motion vector except that No SPLITMV is ever used
for the 2nd motion vector.
Change-Id: I26dd63c304bd66b2e03a083749cc98c641667116
Yaowu Xu [Wed, 7 Mar 2012 20:25:50 +0000 (12:25 -0800)]
Added encode/decode recon buffer match test to vpxenc
The commit added a new command line option --test-decode to vpxenc.
The option enables encoder to decode compressed frames and test recon
buffers from the decode against those from encode for mismatch.
There are a few limitations on this option currently, one of them
being the match test is not done on a number of lagged frames at
the end of an encoding.
Change-Id: I80c29b46dcdcea9f48107a506b235743068862fe
Yaowu Xu [Thu, 15 Mar 2012 00:29:39 +0000 (17:29 -0700)]
fixed a bug of context overwritten by key frame recoding
The recoding loop save and restore frame coding context for recodes.
However in recoding of key frames, some of the coding context saved
was stale from last encoded inter frame. The save/restore sometimes
overwrites the re-inintialized coding context with saved context
from last frame, resulting in encoder/decoder mismatch
Change-Id: I354ae2f71074d142602d51d06544c05a2462caaf
Yaowu Xu [Wed, 14 Mar 2012 14:37:10 +0000 (07:37 -0700)]
Added option to skip first n frame to vpxenc
this commit added a command line option to skip first n frames from
input file to facilitate debugging and testing.
Change-Id: I4ffc5f85fa7e193ea4bdee08cb236717de8beef1
Yaowu Xu [Sat, 10 Mar 2012 01:32:50 +0000 (17:32 -0800)]
WebM Experimental Codec Branch Snapshot
This is a code snapshot of experimental work currently ongoing for a
next-generation codec.
The codebase has been cut down considerably from the libvpx baseline.
For example, we are currently only supporting VBR 2-pass rate control
and have removed most of the code relating to coding speed, threading,
error resilience, partitions and various other features. This is in
part to make the codebase easier to work on and experiment with, but
also because we want to have an open discussion about how the bitstream
will be structured and partitioned and not have that conversation
constrained by past work.
Our basic working pattern has been to initially encapsulate experiments
using configure options linked to #IF CONFIG_XXX statements in the
code. Once experiments have matured and we are reasonably happy that
they give benefit and can be merged without breaking other experiments,
we remove the conditional compile statements and merge them in.
Current changes include:
* Temporal coding experiment for segments (though still only 4 max, it
will likely be increased).
* Segment feature experiment - to allow various bits of information to
be coded at the segment level. Features tested so far include mode
and reference frame information, limiting end of block offset and
transform size, alongside Q and loop filter parameters, but this set
is very fluid.
* Support for 8x8 transform - 8x8 dct with 2nd order 2x2 haar is used
in MBs using 16x16 prediction modes within inter frames.
* Compound prediction (combination of signals from existing predictors
to create a new predictor).
* 8 tap interpolation filters and 1/8th pel motion vectors.
* Loop filter modifications.
* Various entropy modifications and changes to how entropy contexts and
updates are handled.
* Extended quantizer range matched to transform precision improvements.
There are also ongoing further experiments that we hope to merge in the
near future: For example, coding of motion and other aspects of the
prediction signal to better support larger image formats, use of larger
block sizes (e.g. 32x32 and up) and lossless non-transform based coding
options (especially for key frames). It is our hope that we will be
able to make regular updates and we will warmly welcome community
contributions.
Please be warned that, at this stage, the codebase is currently slower
than VP8 stable branch as most new code has not been optimized, and
even the 'C' has been deliberately written to be simple and obvious,
not fast.
The following graphs have the initial test results, numbers in the
tables measure the compression improvement in terms of percentage. The
build has the following optional experiments configured:
--enable-experimental --enable-enhanced_interp --enable-uvintra
--enable-high_precision_mv --enable-sixteenth_subpel_uv
CIF Size clips:
http://getwebm.org/tmp/cif/
HD size clips:
http://getwebm.org/tmp/hd/
(stable_20120309 represents encoding results of WebM master branch
build as of commit#7a15907)
They were encoded using the following encode parameters:
--good --cpu-used=0 -t 0 --lag-in-frames=25 --min-q=0 --max-q=63
--end-usage=0 --auto-alt-ref=1 -p 2 --pass=2 --kf-max-dist=9999
--kf-min-dist=0 --drop-frame=0 --static-thresh=0 --bias-pct=50
--minsection-pct=0 --maxsection-pct=800 --sharpness=0
--arnr-maxframes=7 --arnr-strength=3(for HD,6 for CIF)
--arnr-type=3
Change-Id: I5c62ed09cfff5815a2bb34e7820d6a810c23183c
Yaowu Xu [Tue, 13 Mar 2012 17:26:53 +0000 (10:26 -0700)]
added clamp for 2nd motion vector
The commit added a clamp to the 2nd motion vector used in compound
prediction to insure mv within UMV borders. The clamp is similar to
that of the first motion vector except that No SPLITMV is ever used
for the 2nd motion vector.
Change-Id: I26dd63c304bd66b2e03a083749cc98c641667116
Yaowu Xu [Wed, 7 Mar 2012 20:25:50 +0000 (12:25 -0800)]
Added encode/decode recon buffer match test to vpxenc
The commit added a new command line option --test-decode to vpxenc.
The option enables encoder to decode compressed frames and test recon
buffers from the decode against those from encode for mismatch.
There are a few limitations on this option currently, one of them
being the match test is not done on a number of lagged frames at
the end of an encoding.
Change-Id: I80c29b46dcdcea9f48107a506b235743068862fe
Yaowu Xu [Thu, 15 Mar 2012 00:29:39 +0000 (17:29 -0700)]
fixed a bug of context overwritten by key frame recoding
The recoding loop save and restore frame coding context for recodes.
However in recoding of key frames, some of the coding context saved
was stale from last encoded inter frame. The save/restore sometimes
overwrites the re-inintialized coding context with saved context
from last frame, resulting in encoder/decoder mismatch
Change-Id: I354ae2f71074d142602d51d06544c05a2462caaf
Yaowu Xu [Wed, 14 Mar 2012 14:37:10 +0000 (07:37 -0700)]
Added option to skip first n frame to vpxenc
this commit added a command line option to skip first n frames from
input file to facilitate debugging and testing.
Change-Id: I4ffc5f85fa7e193ea4bdee08cb236717de8beef1
Yaowu Xu [Mon, 12 Mar 2012 21:51:54 +0000 (14:51 -0700)]
fixed .mk files to reflect add/remove of a header file
In a previous commit, the duplicate of headerfile defaultcoefcounts.h
was identified. This commit updates the .mk file to ensure configure
and make works properly for all platforms.
Change-Id: I31a39c809a734ba438ee53db700f252e9a03eddd
Yaowu Xu [Wed, 7 Mar 2012 17:05:26 +0000 (09:05 -0800)]
Changed MAX_PSNR to be consistent with internal stats
The maximum psnr has a marginal impact on the overall output in high
quality encodings, the change will make sure the psnr output to be
consistent with encoder internal stats.
Change-Id: I35cf2f85008ec127a7d91c9eb69fa7811798ae32
Yaowu Xu [Wed, 7 Mar 2012 15:16:12 +0000 (07:16 -0800)]
removed duplicate a head file
Removed the copy in encoder and changed to use the one in common
Change-Id: Ief0985a50ffd6053a269638fd4816b055ca273ec
Paul Wilkins [Tue, 6 Mar 2012 11:23:50 +0000 (11:23 +0000)]
Snapshot candidate
Pulled out super block code for the snapshot as this
is not quite ready and will need an extensive re-merge.
Change-Id: I436369b511257447a7b0ea064016cb63f5011849
Jim Bankoski [Tue, 6 Mar 2012 17:31:51 +0000 (09:31 -0800)]
Imported a change from stable branch
https://gerrit.chromium.org/gerrit/#change,17319 fixes cost estimating
to take skip_eob into account. No quality difference seen on derf set
tests, but about .4% gain on STD_HD set.
Change-Id: Ic5fe6d35ee021e664a6fcd28037b8432a0e470ca
Yaowu Xu [Tue, 6 Mar 2012 17:52:15 +0000 (09:52 -0800)]
fix a compiling error when CONFIG_COMP_INTRA_PRED not defined
Change-Id: I4159ff365953598d9c9bc3ecacfb5c5f4a315b45
Ronald S. Bultje [Fri, 2 Mar 2012 19:18:24 +0000 (11:18 -0800)]
Use per-MB compound intra prediction.
This gives a modest gain on derf overall, although at low bitrates the
cost is still too high, so this can be improved further.
Patch 2. Re-base and fix 80 column issues
Change-Id: Ida2f9fa3fe75370669f6a27b37108dc602231c63
Yaowu Xu [Wed, 22 Feb 2012 02:10:18 +0000 (18:10 -0800)]
Changed how UV r/d estimates are done for Intra Modes
The commit changed to compute UV intra RD estimates for 4x4 and 8x8
separately to be used in mode decision for MB modes associated with
the appropriate transform size respectively. Now finally after many
other changes related 8x8 quantizer zbin boost and zbin_mode_boost,
this change overall helps the HD(with 8x8) by around ~.13%.
(avg .13% glb .13% ssim .17%)
The commit also has a few changes for eliminating compiler warnings.
Change-Id: Ibab35dad44820c87e6b44799c66f8d519cc37344
Yaowu Xu [Fri, 2 Mar 2012 04:16:49 +0000 (20:16 -0800)]
Fixed zbin_mode_boost initialization
The commit added the correct Zbin_mode_boost initialization based on
Intra Mode before using rate distortion to pick UV intra mode.
Change-Id: I8e57878ff356a06672f6fa2431be860bf9b9a5c7
Yaowu Xu [Wed, 22 Feb 2012 02:10:18 +0000 (18:10 -0800)]
refactored code that checks if a macroblock is skippable
Change-Id: I4ea6d819bbbde312792c4f813ab63ea50cf0cd1d
Paul Wilkins [Fri, 2 Mar 2012 01:24:30 +0000 (01:24 +0000)]
Allow for frame overheads in min frame bandwidth.
Change-Id: I6ade229ff400fe492709010ac5bada37f8afa73e
Yaowu Xu [Wed, 29 Feb 2012 01:11:12 +0000 (17:11 -0800)]
Merge t8x8 experiments
Change-Id: I8e9b6b154e1a0d0cb42d596366380d69c00ac15f
Yaowu Xu [Thu, 1 Mar 2012 19:30:49 +0000 (11:30 -0800)]
disable usage of 8x8 for resolution below 360p
need further investigation on some odd behavior on one youtube clip
Change-Id: Iec477986a86b54ef26df2ef69d2f9484e2d1a043
Deb Mukherjee [Thu, 1 Mar 2012 11:10:21 +0000 (03:10 -0800)]
Various bug fixes related to high precision mv
Change-Id: Ie5a7c87d71bd4a541463b68704620d89cec142cf
Paul Wilkins [Thu, 1 Mar 2012 01:41:19 +0000 (01:41 +0000)]
Bug fix in vp8_estimate_entropy_savings()
Incorrect scaling of savings for t8x8.
Change-Id: If01e08f8c73faa73afc3c70e501e6acc54d7e26f
Yaowu Xu [Wed, 29 Feb 2012 01:44:19 +0000 (17:44 -0800)]
Fix compiling issue when CONFIG_HIGH_PRECISION_MV is defined
Change-Id: I3b8a230d5b119910e6a6767331a4d97768089355
Ronald S. Bultje [Wed, 29 Feb 2012 01:25:45 +0000 (17:25 -0800)]
Rename "dual" prediction to "compound" prediction.
Change-Id: Ibcd2b9b247ff9f83331dac47f91ec285e8955ff1
Ronald S. Bultje [Wed, 29 Feb 2012 01:12:08 +0000 (17:12 -0800)]
Compound intra prediction (b_pred/4x4 only, for now),
Also remove duplicate build_intra_predictors_mby/uv().
Change-Id: I78607e7304952a9b962a5b25af9bb9c48692187b
Yaowu Xu [Tue, 28 Feb 2012 22:19:38 +0000 (14:19 -0800)]
Correct zbinboost lookup for 8x8 quantizer
The commit fixed a problem where 8x8 regular quantizer was using the
4x4 zbinboost lookup table that only has 16 entries at each Q. The
commit assigned a uniform zbin boost value for all cases that there
are more than 16 consective zeros. The change only affects MBs using
8x8 transform. The fix has a slightly positive impact on quality.
Test results:
http://www.corp.google.com/~yaowu/no_crawl/hd_fixzbinb.html
(avg psnr: .26% glb psnr: .21% ssim: .28%)
Results on cif size clip are also positive even though gain is smaller
http://www.corp.google.com/~yaowu/no_crawl/derf_fixzbinb.html
Change-Id: Ibe8f6da181d1fb377fbd0d3b5feb15be0cfa2017
Paul Wilkins [Tue, 28 Feb 2012 23:28:04 +0000 (23:28 +0000)]
Merge "Merge new loop filter." into experimental
Deb Mukherjee [Mon, 27 Feb 2012 18:22:38 +0000 (10:22 -0800)]
Initial refactoring of high_precision mv code.
This is the first patch for refactoring of the code related to
high-precision mv, so that 1/4 and 1/8 pel motion vectors can
co-exist in the same bit-stream by use of a frame level flag.
The current patch works fine for only use of 1/4th and
only use of 1/8th pel mv, but there are some issues with the
mode switching in between. Subsequent patches on this change Id
will fix the remaining issues.
Patch 2: Adds fixes to make sure that multiple mv precisions can
co-exist in the bit-stream. Frame level switching has been tested
to work correctly.
Patch 3: Fixes lines exceeding 80 char
Patch 4:
http://www.corp.google.com/~debargha/vp8_results/enhinterp.html
Results on derf after ssse3 bugfix, compared to everything
enabled but the 8-tap, 1/8-subpel and 1/16-subpel uv. Overall the
gains are about 3% now. Hopefully there are no more bugs lingering.
Apparently the sse3 bug affected the quartel subpel results more than
the eighth pel ones (which is understandabale because one bad predictor
due to the bug, matters less if there are a lot more subpel options
available as in the 1/8 subpel case).
The results in the 4th column correspond to the current settings.
The first two columns correspond to two settings of adaptive switching
of the 1/4 or 1/8 subpel mode based on initial Q estimate. These
do not work as good as just using 1/8 all the time yet.
Change-Id: I3ef392ad338329f4d68a85257a49f2b14f3af472
Yaowu Xu [Tue, 28 Feb 2012 22:31:03 +0000 (22:31 +0000)]
Merge "Try to enable 8x8 tranform for smaller resolution" into experimental
Paul Wilkins [Tue, 28 Feb 2012 20:58:52 +0000 (20:58 +0000)]
Merge new loop filter.
Merge of the NEWLPF configuration experiment so it is always on.
Change-Id: I7054772b6eab28bad1ff807bfa54d98f83de9308
Yaowu Xu [Tue, 28 Feb 2012 19:49:12 +0000 (11:49 -0800)]
Try to enable 8x8 tranform for smaller resolution
The commit overall on derf test is break even to very slightly positive
comparing to all 4x4 transform.
Change-Id: I2a7c19599aa54c2d3a5b35db0dc891ba8a6a2b26
Paul Wilkins [Tue, 28 Feb 2012 17:15:31 +0000 (17:15 +0000)]
Experimental branch code clean up.
Removal of some further code relating to partitions
and error resilience.
Spelling correction.
Change-Id: I36067aae67a4a23bec359541dda3400b0bbf26d0
Paul Wilkins [Mon, 27 Feb 2012 22:23:38 +0000 (22:23 +0000)]
Code Simplification
Removal of code relating to token partitioning
Change-Id: Iaf3c88d6758639a55bd92c3be5c51e6bed407a3c
Yaowu Xu [Tue, 28 Feb 2012 02:23:15 +0000 (18:23 -0800)]
fixed a wrong intialization value
The "update" variable was used as a flag in coef_prob update dry run
that tests if a frame should encodes update at all. The wrong init
value forced the update happening always. fixing this has a minor
improvement in low bit rate situation when 8x8 transform is allowed.
Change-Id: Icb498e8d6a62fd074dcbc2065b797cba9237cb51
Paul Wilkins [Tue, 28 Feb 2012 02:07:49 +0000 (02:07 +0000)]
Merge "Corrected spelling" into experimental
Paul Wilkins [Mon, 27 Feb 2012 21:42:36 +0000 (21:42 +0000)]
Corrected spelling
Apparently the correct spelling of segement is segment !
Change-Id: I88593ee0523f251b3a96794c6166ef8c7898a029
Paul Wilkins [Mon, 27 Feb 2012 20:50:21 +0000 (20:50 +0000)]
Merge "Code Cleanup." into experimental
Paul Wilkins [Mon, 27 Feb 2012 20:50:01 +0000 (20:50 +0000)]
Merge "Removal of temporal re sampling code." into experimental
Paul Wilkins [Mon, 27 Feb 2012 17:58:57 +0000 (17:58 +0000)]
Merge "Code Simplification." into experimental
Paul Wilkins [Mon, 27 Feb 2012 17:58:12 +0000 (17:58 +0000)]
Merge "Further code simplification and clean up." into experimental
Deb Mukherjee [Sun, 26 Feb 2012 06:06:07 +0000 (06:06 +0000)]
Merge "Changing default 8-tap filter to Langrangian interpolator." into experimental
Paul Wilkins [Sun, 26 Feb 2012 01:15:47 +0000 (01:15 +0000)]
Code Cleanup.
Removal of error_resilient_mode features.
The interface has been left in place but does nothing.
Change-Id: I2407863bd0d3c98407354507423ca48d29f63b17
Paul Wilkins [Sat, 25 Feb 2012 18:13:57 +0000 (18:13 +0000)]
Removal of temporal re sampling code.
For now the interface elements have been left in place
to make sure existing parameter files work but parameters
relating to drop frame wont do anything.
Change-Id: I579ee614726387381c546845dac4bc03c74c6a07
Deb Mukherjee [Sat, 25 Feb 2012 04:24:54 +0000 (20:24 -0800)]
Bug fix in ssse3 variance computation.
Fixes a bug that was introduced in the high precision mv patch.
Change-Id: Ieadb433ebe4c3ef3e0e63944dab11528bf8bd73a
Paul Wilkins [Fri, 24 Feb 2012 23:58:24 +0000 (23:58 +0000)]
Code Simplification.
Removal of code relating to spatial re sampling
Change-Id: Iff1bc651c62cd528f960c4b27f9673b172e68835
Paul Wilkins [Fri, 24 Feb 2012 23:27:59 +0000 (23:27 +0000)]
Further code simplification and clean up.
Change-Id: Ifdb17b56090a317b2aa82cf125d57934902c5298
Deb Mukherjee [Fri, 24 Feb 2012 17:08:00 +0000 (09:08 -0800)]
Changing default 8-tap filter to Langrangian interpolator.
The Lagrangian interpolation filter is maximally flat in the
passband. There is non-trivial improvement with the hd set, while
for derf the results are virtually unchanged.
See:
http://www.corp.google.com/~debargha/vp8_results/enhinterpn.html (derf)
http://www.corp.google.com/~debargha/vp8_results/enhinterpn_hd.html (HD)
Patch 2: Updated the results for derf in the html above to use the
new baseline. There is still about 4% improvement. Will update the
hd baseline later (since it takes 9 hours to run on my machine)
Patch 3: By mistake the default filter was left at 60 - should be 0
to use the new interpolation filter.
Change-Id: If5f64444976562415d68a2aeabb94fdfa0d47890
Paul Wilkins [Thu, 23 Feb 2012 19:22:29 +0000 (19:22 +0000)]
Deleted code.
Removed redundant code for ref frame cost.
Deb Mukherjee [Thu, 23 Feb 2012 19:47:18 +0000 (11:47 -0800)]
Clean ups and minor changes in high precision mv with 8-tap interpolation
* Removes EDGE_PIXEL_FILTER for external sanpshot
* changes the default 8-tap filter based on high precision results
in http://www.corp.google.com/~debargha/vp8_results/enhinterpn.html
* changes the default prob tables for high-precision mv encoding to
favor zeros in the last bit (i.e. quarter pel). This is only important
for short clips.
Change-Id: I02bb0de8679d9eec06cdbcc8160dbf073cd847a4
Deb Mukherjee [Thu, 16 Feb 2012 17:29:54 +0000 (09:29 -0800)]
Supporting high precision 1/8-pel motion vectors
This is the initial patch for supporting 1/8th pel
motion. Currently if we configure with enable-high-precision-mv,
all motion vectors would default to 1/8 pel. Encode and
decode syncs fine with the current code. In the next phase
the code will be refactored so that we can choose the 1/8
pel mode adaptively at a frame/segment/mb level.
Derf results:
http://www.corp.google.com/~debargha/vp8_results/enhinterp_hpmv.html
(about 0.83% better than 8-tap interpoaltion)
Patch 3: Rebased. Also adding 1/16th pel interpolation for U and V
Patch 4: HD results.
http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd_hpmv.html
Seems impressive (unless I am doing something wrong).
Patch 5: Added mmx/sse for bilateral filtering, as well as enforced
use of c-versions of subpel filters with 8-taps and 1/16th pel;
Also redesigned the 8-tap filters to reduce the cut-off in order to
introduce a denoising effect. There is a new configure option
sixteenth-subpel-uv which will use 1/16 th pel interpolation for
uv, if the motion vectors have 1/8 pel accuracy.
With the fixes the results are promising on the derf set. The enhanced
interpolation option with 8-taps alone gives 3% improvement over thei
derf set:
http://www.corp.google.com/~debargha/vp8_results/enhinterpn.html
Results on high precision mv and on the hd set are to follow.
Patch 6: Adding a missing condition for CONFIG_SIXTEENTH_SUBPEL_UV in
vp8/common/x86/x86_systemdependent.c
Patch 7: Cleaning up various debug messages.
Patch 8: Merge conflict
Change-Id: I5b1d844457aefd7414a9e4e0e06c6ed38fd8cc04
Yaowu Xu [Wed, 22 Feb 2012 17:13:04 +0000 (17:13 +0000)]
Merge "Fixed skippable evaluation in mode decision" into experimental
Yaowu Xu [Wed, 22 Feb 2012 17:12:52 +0000 (17:12 +0000)]
Merge "Reduced bias in picking loop filter level" into experimental
Yaowu Xu [Wed, 22 Feb 2012 15:55:53 +0000 (15:55 +0000)]
Merge "a bit code clean-up" into experimental
Yaowu Xu [Wed, 22 Feb 2012 15:55:37 +0000 (15:55 +0000)]
Merge "Reworked context conversion between 8x8 and 4x4" into experimental
Yaowu Xu [Fri, 17 Feb 2012 23:52:30 +0000 (15:52 -0800)]
Fixed skippable evaluation in mode decision
Yunqing fixed an oddity in UVIntra skippable evaluation for stable
branch, which brought up the fact that the evaluation is broken.
The issue was that for MBs with 2nd order block, the eob for 1st
order blocks is set at 1. The previous evaluation did not take that
into account. This commit intend to fix the problem. The commit also
absorbed Yunqing's fix for UVIntra skippable evalution.
Test on hd showed some good gains in combination with LPF bias fix:
http://www.corp.google.com/~yaowu/no_crawl/LPFBias_FixSkip.html
(avg psnr: .34%, glb psnr: .32%, ssim: .22%)
Change-Id: I36af11c8ef7f643e8ff46da7bf3a167b437039d4
Yaowu Xu [Fri, 17 Feb 2012 20:03:34 +0000 (12:03 -0800)]
Reduced bias in picking loop filter level
The bias in picklpf intended to bias toward less greedy in getting
best frame level psnr while maximize overall quality for a clip.
This commit reduced the bias for frames using 8x8 transform to
achieve better compression overall.
The change improve compression by ~.15% consistently on most of the
HD clips tested.
http://www.corp.google.com/~yaowu/no_crawl/LPFBias_FixSkip.html
Change-Id: Ic30932d2b8eaebd52339b0195f569edc48eed7bc
Paul Wilkins [Fri, 17 Feb 2012 16:29:03 +0000 (16:29 +0000)]
Code base simplification.
Removal of most code to do with 1 pass.
Removal of cyclic refresh code.
Change-Id: I74971082bc19dd76e795d4d2e781a0424cec5c8c
Paul Wilkins [Fri, 17 Feb 2012 11:04:32 +0000 (11:04 +0000)]
Merge "Code simplification" into experimental
Yaowu Xu [Thu, 16 Feb 2012 21:41:17 +0000 (13:41 -0800)]
a bit code clean-up
Removed some transform code that is not in use.
Change-Id: I9489af7e23d9d7fe052feb6c8bbafa62ebbda39c
Yaowu Xu [Fri, 20 Jan 2012 23:30:31 +0000 (15:30 -0800)]
Reworked context conversion between 8x8 and 4x4
The commit rationized and simplified the entropy context conversion
betwen MB using 8x8 transform and MB using 4x4 transform. The old version
had a number of weirdness in how 4x4 transform MB's context is used for
8x8 blocks other than the first 8x8 within a MB.
Test showed the change has a gain ~.1% for avg psnr, glb psnr and ssim on
the limited HD set.
Change-Id: I774536c416baa6845aa741f956d8a69fa40e5d47
Deb Mukherjee [Thu, 16 Feb 2012 18:40:39 +0000 (10:40 -0800)]
Removing a stray CONFIG_DUALPRED, and a INTERP_EXTEND fix.
Change-Id: I7549e424ca6846b07a796f2b9cd4e9d4e550ca9b
Paul Wilkins [Thu, 16 Feb 2012 17:02:17 +0000 (17:02 +0000)]
Code simplification
Removal of the pickinter.c and .h files and calls to this
code.
Removal of some code relating to real time and one pass
settings though there is more to be done in this regard.
However, vp8_set_speed_features() now
only supports modes 0 and 1 and speeds up to 3
so rd should always be set.
Change-Id: I62c0c1b6154ab499785baef310536080e87bc4d8
Deb Mukherjee [Thu, 16 Feb 2012 16:32:38 +0000 (16:32 +0000)]
Merge "Adjusting 8-tap filter + prelim edge pixel filter code." into experimental
Yaowu Xu [Fri, 20 Jan 2012 23:30:31 +0000 (15:30 -0800)]
revised the rate distortion computation for UV
this commit changed the UV r/d calculation in the mode decision process to
properly account for the rate of 8x8 transform coefficients.
Change-Id: I485f8f35f2b61db0b6539beb32e83481b1cf083b
Yaowu Xu [Thu, 16 Feb 2012 15:34:38 +0000 (15:34 +0000)]
Merge "revised the rate distortion computation for UV" into experimental
Yaowu Xu [Thu, 16 Feb 2012 15:33:01 +0000 (15:33 +0000)]
Merge "optmized rounding for transforms" into experimental
Yaowu Xu [Thu, 16 Feb 2012 15:32:33 +0000 (15:32 +0000)]
Merge "re-scaled 2nd order haar transform" into experimental
Yaowu Xu [Thu, 16 Feb 2012 15:32:17 +0000 (15:32 +0000)]
Merge "moved scaling from dequantization to inverse transform for T8x8" into experimental
Yaowu Xu [Thu, 16 Feb 2012 01:35:48 +0000 (17:35 -0800)]
optmized rounding for transforms
the changes are still temporary, the final transforms, especially
inverse ones should take in account both accuracy, complexity, and
sign-bias, which should be decided at a later time.
Change-Id: I116b0c70b25f5ee324ae5713d4564f5d0aa27151
Yaowu Xu [Wed, 15 Feb 2012 23:01:35 +0000 (15:01 -0800)]
re-scaled 2nd order haar transform
During the work of extend_qrange, we have rolled a factor of 2 from
quantization/dequatnization into 2nd order walsh-hadamard transform.
This commit does the same for the 2nd order haar transform. so they
can share the same quantizaiton process as the 2nd order WHT.
Change-Id: I734af4a20ea8149a01b5b1971a065092977dfe33
Yaowu Xu [Tue, 14 Feb 2012 15:40:26 +0000 (07:40 -0800)]
moved scaling from dequantization to inverse transform for T8x8
Previously, the scaling related to extended quantize range happens in
dequantization stage, which implies the coefficients form forward
transform are in different scale(4x) from dequantization coefficients
This worked fine when there was not distortion computation done based
on 8x8 transform, but it completely wracked the distortion estimation
based on transform coefficients and dequantized transform coefficients
introduced in commit
f64725a00 for macroblocks using 8x8 transform.
This commit fixed the issue by moving the scaling into the stage of
inverse 8x8 transform.
TODO: Test&Verify the transform/quantization pipeline accuracy.
Change-Id: Iff77b36a965c2a6b247e59b9c59df93eba5d60e2
Deb Mukherjee [Mon, 13 Feb 2012 22:38:58 +0000 (14:38 -0800)]
Adjusting 8-tap filter + prelim edge pixel filter code.
Results with the new filter coefficients compared with the previous
versions are here:
http://www.corp.google.com/~debargha/vp8_results/enhinterp.html (derf)
http://www.corp.google.com/~debargha/vp8_results/enhinterp_hd.html (HD)
Overall, the derf set improves by 0.94% with 8-tap filters while
the HD set improves by 0.58%.
Patch 1: resolving merge conflict
Change-Id: I09db0abdab7b08bb19f86d911de23d2123309748
Ronald S. Bultje [Thu, 16 Feb 2012 00:38:04 +0000 (16:38 -0800)]
Remove dual prediction frame re-encoding loop.
I'm basically not convinced that the concept works at all, let alone
that this is the right place to do it. I think if we want something
like this at all, I should integrate it with the main encoding loop
and re-encode checks in onyx_if.c, and show that it has a significant
benefit (which right now, it doesn't; removing this re-encode check
actually increases all metrics by ~0.15%).
Change-Id: I1b597385dc17f468384a994484fb24813389411f
Ronald S. Bultje [Wed, 15 Feb 2012 16:30:36 +0000 (08:30 -0800)]
Fix overflows in dual prediction mode selection.
Change-Id: I265ad46e01a307bca21e6223725e4055f5e08648
Paul Wilkins [Tue, 14 Feb 2012 13:17:14 +0000 (13:17 +0000)]
Experimental code base simplification.
Remove error concealment code.
Change-Id: I882705174fbfea212e96f7f684e47a671dbe5c67
Yaowu Xu [Wed, 15 Feb 2012 01:52:18 +0000 (17:52 -0800)]
moved segment based LPF level selection under CONFIG_FEATUREUPDATES
This commit moved segment based loop filter level selection into
the experiment of CONFIG_FEATUREUPDATES. As previous commit noted,
the segment based loop filter selection helps the compression by
~0.1% on cif set, the ongoing experiment CONFIG_FEATUREUPDATES
made encoding updates of the segment based LPF level more efficient,
hence, another .04% gain on cif set. The commit also fixed an issue
previously where encoder/decoder may use different loop filter level
for one of the segments.
Change-Id: Ia978b14aae95bb107d561ba53a7a2bb6ff01faf3
Yaowu Xu [Mon, 13 Feb 2012 22:34:19 +0000 (14:34 -0800)]
added 8x8 based Rate estimation for dualpred case
This commmit added logic for MB using dual-pred to compute rate
estimation based on correct transform size. The section of code
was previously located under #if CONFIG_DUALPRED, that was made
to be working with T8x8 experiment at the same time.
Change-Id: Iebc2518c03f11378b9c2e72905520f088b54d5c0
Paul Wilkins [Mon, 13 Feb 2012 17:05:26 +0000 (17:05 +0000)]
Simplification of experimental code base.
Removed ~CONFIG_REALTIME_ONLY code.
Change-Id: I5fafff29a08acd8928699f9ddce8744787024d8c
Jim Bankoski [Mon, 13 Feb 2012 16:21:24 +0000 (08:21 -0800)]
vp8 - config_featureupdates
Added a bit to signify that the feature changed since
the last time we sent it, or not so that we don't need
to send all the databits for every feature change.
added config
Change-Id: I8d3064ce90d4500bf0d5c6b87c664e46138dfcac
Yaowu Xu [Mon, 6 Feb 2012 23:10:13 +0000 (15:10 -0800)]
Changed how coefficient probability table is updated
Added a frame level flag to indicate if coef probabilities are updated
at all for the frame.
During the experimental work with 8x8 transform, it is discovered that
even in the case of no probability is ever update, cost of transmitting
"no update" for each of probabilities can run up to become a significant
overhead cost. A single bit to indicate no-update for all coef probs
is therefore helpful, which is also demonstrated by the test results:
1. On Cif set:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_updprob.html
(avg psnr: .14%, glb psnr: .14% SSIM: .13%)
2. On HD set:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_updprob.html
(avg psnr: .02% glb psnr: .01% SSIM: .02%)
It should be noted that the gain on HD is smaller because the average bit
rate is much higher in contrast to the overhead bit cost.
Change-Id: I46db270e693ee8799fef34a14d8260868ce4cd16
Paul Wilkins [Mon, 13 Feb 2012 12:06:18 +0000 (12:06 +0000)]
Fixed typo on #define name
SE_LVL_EOB => SEG_LVL_EOB
Change-Id: I6d10169878a709bc9b82f03e5d5903c629fa7679
Yaowu Xu [Fri, 10 Feb 2012 19:49:22 +0000 (11:49 -0800)]
fixed an issue related to 2nd order size due to merge artifacts.
For 8x8 transformed macroblock, the 2nd order transform is a 2x2 haar
transform, here there is only 4 coefficients total. A previous merge
changed these to 64, causing crashes when encoding with 8x8 transform
enabled. (i.e. when input video image size > 640x360 ) This commit
reverts them back to 4 and fixes the crashes.
Change-Id: I3290b81f8c0d32c7efec03093a61ea57736c0550
Paul Wilkins [Fri, 10 Feb 2012 16:02:10 +0000 (16:02 +0000)]
Removal of threading code.
For the experimental branch we are trying to slim the codebase
down removing features such as threading for now which complicate
the process of development and testing.
Change-Id: I657c0246aef4d1fa8c8ffc6a1adfeee45bce8e24
Ronald S. Bultje [Fri, 10 Feb 2012 00:12:23 +0000 (16:12 -0800)]
Improved coding using 8x8 transform
In summary, this commit encompasses a series of changes in attempt to
improve the 8x8 transform based coding to help overall compression
quality, please refer to the detailed commit history below for what
are the rationale underly the series of changes:
a. A frame level flag to indicate if 8x8 transform is used at all.
b. 8x8 transform is not used for key frames and small image size.
c. On inter coded frame, macroblocks using modes B_PRED, SPLIT_MV
and I8X8_PRED are forced to using 4x4 transform based coding, the
rest uses 8x8 transform based coding.
d. Encoder and decoder has the same assumption on the relationship
between prediction modes and transform size, therefore no signaling
is encoded in bitstream.
e. Mode decision process now calculate the rate and distortion scores
using their respective transforms.
Overall test results:
1. HD set
http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120206.html
(avg psnr: 3.09% glb psnr: 3.22%, ssim: 3.90%)
2. Cif set:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120206.html
(avg psnr: -0.03%, glb psnr: -0.02%, ssim: -0.04%)
It should be noted here, as 8x8 transform coding itself is disabled
for cif size clips, the 0.03% loss is purely from the 1 bit/frame
flag overhead on if 8x8 transform is used or not for the frame.
---patch history for future reference---
Patch 1:
this commit tries to select transform size based on macroblock
prediction mode. If the size of a prediction mode is 16x16, then
the macroblock is forced to use 8x8 transform. If the prediction
mode is B_PRED, SPLITMV or I8X8_PRED, then the macroblock is forced
to use 4x4 transform. Tests on the following HD clips showed mixed
results: (all hd clips only used first 100 frames in the test)
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8.html
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_log.html
while the results are mixed and overall negative, it is interesting to
see 8x8 helped a few of the clips.
Patch 2:
this patch tries to hard-wire selection of transform size based on
prediction modes without using segmentation to signal the transform size.
encoder and decoder both takes the same assumption that all macroblocks
use 8x8 transform except when prediciton mode is B_PRED, I8X8_PRED or
SPLITMV. Test results are as follows:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cifmodebase8x8_0125.html
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdmodebased8x8_0125log.html
Interestingly, by removing the overhead or coding the segmentation, the
results on this limited HD set have turn positive on average.
Patch 3:
this patch disabled the usage of 8x8 transform on key frames, and kept the
logic from patch 2 for inter frames only. test results on HD set turned
decidedly positive with 8x8 transform enabled on inter frame with 16x16
prediction modes: (avg psnr: .81% glb psnr: .82 ssim: .55%)
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hdintermode8x8_0125.html
results on cif set still negative overall
Patch 4:
continued from last patch, but now in mode decision process, the rate and
distortion estimates are computed based on 8x8 transform results for MBs
with modes associated with 8x8 transform. This patch also fixed a problem
related to segment based eob coding when 8x8 transform is used. The patch
significantly improved the results on HD clips:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/hd8x8RDintermode.html
(avg psnr: 2.70% glb psnr: 2.76% ssim: 3.34%)
results on cif also improved, though they are still negative compared to
baseline that uses 4x4 transform only:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif8x8RDintermode.html
(avg psnr: -.78% glb psnr: -.86% ssim: -.19%)
Patch 5:
This patch does 3 things:
a. a bunch of decoder bug fixes, encodings and decodings were verified
to have matched recon buffer on a number of encodes on cif size mobile and
hd version of _pedestrian.
b. the patch further improved the rate distortion calculation of MBS that
use 8x8 transform. This provided some further gain on compression.
c. the patch also got the experimental work SEG_LVL_EOB to work with 8x8
transformed macroblock, test results indicates it improves the cif set
but hurt the HD set slightly.
Tests results on HD clips:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/HD_t8x8_20120201.html
(avg psnr: 3.19% glb psnr: 3.30% ssim: 3.93%)
Test results on cif clips:
http://www.corp.google.com/~yaowu/no_crawl/t8x8/cif_t8x8_20120201.html
(avg psnr: -.47% glb psnr: -.51% ssim: +.28%)
Patch 6:
Added a frame level flag to indicate if 8x8 transform is allowed at all.
temporarily the decision is based on frame size, can be optimized later
one. This get the cif results to basically unchanged, with one bit per
frame overhead on both cif and hd clips.
Patch 8:
Rebase and Merge to head by PGW.
Fixed some suspect 4s that look like hey should be 64s in regard
to segmented EOB. Perhaps #defines would be bette.
Bulit and tested without T8x8 enabled and produces unchanged
output.
Patch 9:
Corrected misalligned code/decode of "txfm_mode" bit.
Limited testing for correct encode and decode with
T8x8 configured on derf clips.
Change-Id: I156e1405d25f81579d579dff8ab9af53944ec49c
Ronald S. Bultje [Fri, 10 Feb 2012 00:12:23 +0000 (16:12 -0800)]
Reindent some code after merging the dualpred experiment.
Change-Id: Idb328dd29ebcd360e39886abe48694f90f2e1140
Ronald S. Bultje [Fri, 10 Feb 2012 00:11:00 +0000 (16:11 -0800)]
Merge dualpred (compound prediction) experiment.
Change-Id: Ieaaa07c50eae41118596197f6a4d848135946e41
Paul Wilkins [Thu, 9 Feb 2012 17:06:52 +0000 (17:06 +0000)]
Removal of SEGFEATURES placeholder comments
This commit only involves the removal of placeholder comments
//#if CONFIG_SEGFEATURES.
Change-Id: I94b350daaf998ee0cfdde5aa25b1d3b0522ab816
Paul Wilkins [Thu, 9 Feb 2012 16:44:46 +0000 (16:44 +0000)]
Merge Extended Q experiment.
Merge the extended Q experiment as indicated by the
Change-Id: I02d9e654fff9998cc7e9e2f1f5cd838dad8fb431
Paul Wilkins [Thu, 9 Feb 2012 16:10:46 +0000 (16:10 +0000)]
Merge COMPRED
Merged in most of the current common prediction changes
that were under the #if CONFIG_COMPRED option.
Change-Id: If4e6f61dbe7b86dd449f6effbe93b5eb7e893885
Paul Wilkins [Thu, 9 Feb 2012 15:44:18 +0000 (15:44 +0000)]
Dual pred flag
Further changes to make experiments with the context
used for coding the dual pred flag easier.
Current best performing method tested on derf is a two
element context based on reference frame. I also tried
various combinations of mode and reference frame as
shown in commented out case using up to 6 contexts.
Derf +0.26 overall psnr +0.15% ssim vs original method.
Change-Id: I64c21ddec0abbb27feaaeaa1da2e9f164ebaca03
Paul Wilkins [Wed, 8 Feb 2012 15:52:07 +0000 (15:52 +0000)]
Changes to coding of dual_pred flag.
Further use of common prediction functions and experiments
with alternate contexts based on mode and reference frame.
For the Derf set using reference frame as basis of context
gives +0.18% Overall Psnr and +0.08 SSIM
Change-Id: Ie7eb76f329f74c9c698614f01ece31de0b6bfc9e
Ronald S. Bultje [Wed, 8 Feb 2012 22:55:46 +0000 (14:55 -0800)]
Fix dual prediction recode loop.
We should only change the dual prediction mode if we actually entered
the recode branch. Else, it may potentially undo beneficial changes
to the dual prediction mode in the first encode iteration.
Change-Id: I79fc53e5fd0bb551092ed422c797619f1566f002
Ronald S. Bultje [Wed, 8 Feb 2012 22:18:02 +0000 (14:18 -0800)]
Remove write-only variable "mbs_dual_count".
Change-Id: Icf7a6749ca2f8ad6a032f86c34540d1c5880cf68
Ronald S. Bultje [Wed, 8 Feb 2012 01:48:47 +0000 (17:48 -0800)]
Fix dual prediction recode loop.
Some conditions were conditional under a threshold, whereas they should
always execute. Also, some conditions were testing an array instead of
the values within it.
Change-Id: Ia6892945cfbbe07322e6af6be42cd864bf9479c1
Paul Wilkins [Fri, 3 Feb 2012 17:08:37 +0000 (17:08 +0000)]
Move update of ref frame probabilities in encode loop.
The existing code updated the reference frame probabilities before
the test to evaluate the impact of using updated probabilities
in vp8_estimate_entropy_savings().
The estimate of cost and savings is still basic and does not reflect
the new prediction code but this would require per MB costings
and the benefit is probably marginal, as this is really just used for
rate estimation in the loop.
Change-Id: Id6ba88ae6e11c273b3159deff70980363ccd8ea1
Paul Wilkins [Fri, 3 Feb 2012 15:10:44 +0000 (15:10 +0000)]
Merged NEWNEAR experiment
This commit merges the NEWNEAR experiment such that it
is effectively always on.
The fact that there were changes in the threading code again
highlights the need to strip out such features during the
bitstream development phase as trying to maintain this code
(especially as it is not being tested) slows the development cycle.
Change-Id: I8b34950a1333231ced9928aa11cd6d6459984b65
Paul Wilkins [Thu, 2 Feb 2012 17:30:27 +0000 (17:30 +0000)]
Coding the hybrid dual prediction signal.
Initial modifications to make limited use of common prediction
functions.
The only functional change thus far is that updates to the probabilities are
no longer "damped". This was a testing convenience but in fact seems to
help by a little over 0.1% over the derf set.
Change-Id: I8b82907d9d6b6a4a075728b60b31ce93392a5f2e