Commit Graph

419 Commits

Author SHA1 Message Date
Yaowu Xu
a8fbab8697 enabled 8x8 intra prediction modes on inter frames
This commit enabled the usage of 8x8 intra prediction modes on inter
frames. There are a few TODO items related to this: 1)baseline entropy
need be calibrated; 2)cost of UV need to be done more properly rather
than using decision only relying on Y; 3)Threshold for allowing picking
8x8 intra prediction should be lowered to lower than the B_PRED.

Even with all the TODOs, tests showed consistent gain on derf set ~0.1%
(PSNR:0.08% and SSIM:0.14%). It is assumed that 8x8 intra prediction
will help more on large resolution clips, especially with above TODOs
addressed.

Change-Id: I398ada49dfc32575cfab962a569c2885111ae3ba
2011-12-02 13:44:47 -08:00
Paul Wilkins
8487a68baf Further work on extended Q range.
Fixed some further QIndex related issues and replaced some tables
(eg zbin and rounding)

Also Added function (currently disabled by default) to populate the
main AC and DC quantizer tables. Using the original AC range the
resulting computed DC values give behavior broadly comparable
on the DERF set. That is not to say that the equations will hold good
over a more extended range. The purpose of this code is to make it
easier to experiment with further alterations to the Q range and distribution
of Q values plus the relative weights given to AC and DC.

The function find_fp_qindex() ensures that changes to the Q tables
are reflected in the value passed in to the first pass code.

Slight experimental adjustment to static segment Q offset.

Change-Id: I36186267d55dfc2a3d565d0cff7218ef300d1cd5
2011-12-02 15:30:01 +00:00
Paul Wilkins
2b307b38e3 CR/LF issue.
Change-Id: I95fab6f51967008acf1bc9e98fdb7bb56974807f
2011-12-02 15:06:15 +00:00
Yaowu Xu
bba710fcbd added transform type to MB_MODE_INFO
this commit is to add an variable in the macroblock level mode
info structure to track the transform size used in each MB, so
the information can be used later in the loop filter to change
how loop filter works on MBs with different transform sizes.

Change-Id: Id0eeaba6cc854c6d1be00ed8d237b3d9e250e447
2011-12-01 07:34:27 -08:00
Paul Wilkins
a917afabbb MinQ equations.
Slight tweaks to the new minq equations to bring results more into line with
original lookup tables.

Change-Id: I969fc87d95912df549b6775e83ee2345e84d4da0
2011-11-29 18:03:57 +00:00
Paul Wilkins
b9ce9bcbc5 Extended Q Range:
Addressed a couple of other QIndex dependencies.

Change-Id: I15b224bffd0210d3c7065cb6905156f2ca8e9ea9
2011-11-29 18:02:56 +00:00
Paul Wilkins
99df6bb629 Further work on extended Q range.
Fixed bug in firspass.c call to vp8_initialize_rd_consts()

This was passing in vp8_dc_quant(cm->base_qindex, cm->y1dc_delta_q)
 instead of (cm->base_qindex + cm->y1dc_delta_q).

It just so happens that for the value 26 used for cm->base_qindex in the
unextended Q case,  the two give similar results. However, when using
the extended Q range the two are very different.

Also added more stats output and partly disabled another broken feature.

Change-Id: Iddf6cf5ea8467c44b7c133f38e629f6ba6f2581e
2011-11-29 17:59:23 +00:00
Yaowu Xu
643238a3e0 changed find_near_mvs search to include a mb from last frame
This is an experiment to include a mv contribution from last frame to
nearest and near mv definition. Initial test showed some small though
consistent gain.

latest patch slightly better result ~.13%-~.18%.

TODO: the entropy used to encode the mode choice, i.e. the mv counts
based conditional distribution of modes should be re-collected to
reflect this change, it is expected that there is some further gain
from that.

Change-Id: Ief1e284a36d8aa56b49ae5b360c91419ec494fa4
2011-11-28 08:52:08 -08:00
Paul Wilkins
ee2051f650 Two pass rate control code changes.
This comitt brings accross changes from the public branch
commit number Icf74d13af77437c08602571dc7a97e747cce5066.

The main puurpose of this comit relates to CQ mode but it
also includes some refactoring of the two pass code which
I hope will make tuning the experimental branch for the new
quantizer range a little less painfull.

Change-Id: I278e989436a928fc1fe7761068960048f9d7a376
2011-11-23 17:18:31 +00:00
Paul Wilkins
a0b7db22e6 Further resolution of QIndex LUTS;
This commit resolves further QIndex look up tables to facilitate
experimentation with the quantizer range.

In some cases  rather than remove the look up tables completely
I have created functions that are called once  to populate them
using a formulaic approach base on the actual quantizer.

The use of these functions based on best fit of data from the original
tables does affect the results on some clips but across the derf test
set the effect was broadly neutral.

Change-Id: I8baa61c97ce87dc09a6340d56fdeb681b9345793
2011-11-23 11:32:20 +00:00
Paul Wilkins
d39b5d0546 Removal of Qindex LUTS.
One of the problems arising when tweaking or adjusting the quantizer
tables is that there are a lot of look up tables that depend on the QINDEX.
Any adjustment to the link between QINDEX and real quantizer therefore tends
to break aspects of for example the rate control.

In this check in I have replaced several of the look up tables with functions that
approximate the same results as the old Q luts but use a formulaic approach
based on real Q values rather than QIndex. This should hopefully make it easier
to experiment with changes to the Q tables without always having to go through
and hand optimize a set of look up tables. Once things stabilize we may choose
to re-instate luts for the sake of performance.

Patch 2:
    Addressed Ronald's comments.
    vp8_init_me_luts() Added so luts only initialized once.

Change-Id: Ic80db2212d2fd01e08e8cb5c7dca1fda1102be57
2011-11-22 08:42:33 +00:00
Paul Wilkins
9bac509ac5 Extended Q range Experiment.
Corrected dc lookup table to maintain ac/dc balance
close to what it was previously.

Firstpass not being passed the adjusted Q index for
the extended range.

Change-Id: Ic0200dabda445fea03bf81067999cb2670e99b77
2011-11-21 15:53:40 +00:00
Adrian Grange
eb15fe85e0 Clip buffer level to the maximum buffer size in CBR
The buffer level was able to increase indefinitely rather than
being clipped to the maximum buffer size specified by the user.

This change checks the buffrer level and prevents it from
going beyond the upper limit of the buffer.

Change-Id: Ifff55f79d3c018e4d3d77e554b11ada543cc1654
2011-11-17 15:57:37 -08:00
Paul Wilkins
3cdfdb55e4 Merge CONFIGURE_SEGMENTATION experiment.
Removal of CONFIGURE_SEGMENTATION ifdefs.

Removal of legacy support code fo the old coding mechanism.

Use local reference "xd" for MACROBLOCKD structure in
encode_frame_to_data_rate()

Moved call to choose_segmap_coding_method() out of encode
loop as the cost of segmentation is not properly accounted
in the loop anyway. If this is desirable in the future it
can be moved back. The use of this function to do all the
analysis and set the probabilities also removes the need
to track segment useage in threading code.

Change-Id: I85bc8fd63440e7176c73d26cb742698f9b70cade
2011-11-15 16:15:23 +00:00
Paul Wilkins
661b2c2dcf Further work on Segmentation Experiment:
This check in includes quite a lot of clean up and refactoring.

Most of the analysis and set up for the different coding options for the
segment map (currently simple distribution based coding or temporaly
predicted coding), has been moved to one location (the function
choose_segmap_coding_method() in segmenation.c). This code was previously
scattered around in various locations making integration with other
experiments and modification / debug more difficult.

Currently the functionality is as it was with the exception that the
prediction probabilities are now only transmitted when the temporal
prediction mode is selected.

There is still quite a bit more clean up work that will be possible
when the #ifdef is removed. Also at that time I may rename and alter
the sense of macroblock based variable "segment_flag" which indicates
(1 that the segmnet id is not predicted vs 0 that it is predicted).

I also intend to experiment with a spatial prediction mode that can be
used when coding a key frame segment map or in cases where temporal
prediction does not work well but there is spatial correlation.

In a later check in when the ifdefs have gone I may also move the call
to choose_segmap_coding_method() to just before where the bitsream is
packed (currently it is in vp8_encode_frame()) to further reduce the
possibility of clashes with other experiments and prevent it being called
on each itteration of the recode loop.

Change-Id: I3d4aba2a2826ec21f367678d5b07c1d1c36db168
2011-11-15 11:13:33 +00:00
Paul Wilkins
c9130bdbbc Segmentation experiment:
Added last_segmentation_map[] structure
to keep track of what we had before when
doing temporal prediction. With this change
the existing code does once again appear to
be giving a decodable bitstream for both
temporal and standard prediction modes.
However, it is still somewhat messy and
confused and there is no option to take
advantage of spatial prediction so it could
do with further work.

Some housekeeping / clean out.

Change-Id: I368258243f82127b81d8dffa7ada615208513b47
2011-11-11 18:33:25 +00:00
Paul Wilkins
0789253125 T8x8 experiment merge.
For ease of testing and merging experiments I have
removed in line code in encode_frame() that assigns
MBs to be t8x8 or t4x4 coded segments and have
moved the decision point and segment setup to
the init_seg_features0 test function.

Keeping everything in one place helps make sure
for now that experiments using segmentation are
not fighting each other.

Also made sure mode selection code can't choose 4x4
modes if t8x8 is selected.

Patch2: In init_seg_features() add checks
for SEG_LVL_TRANSFORM active.

Change-Id: Ia1767edd99b78510011d4251539f9bc325842e3a
2011-11-09 15:46:05 +00:00
Paul Wilkins
b0f9f15dbd Merging and testing of SEGMENTATION experiment.
Removed code in #if CONFIG_SEGMENTATION that
enables segmentation and creates a test segmentation
map, to avoid conflicts with the other segmentation test
code,

Change-Id: I7a21a44ed188b814cd80b30dd628c62474eba730
2011-11-09 11:59:20 +00:00
Paul Wilkins
a9df4183a6 Segment signaling of TX size
Initial attempt at using new segment feature signaling
to indicate 4x4 or 8x8 transform.

needs --enable-experimental --enable-t8x8

Note this is work in progress.

Change-Id: Ib160d46a5d810307bfcbc79853ce1a65b5b870b7
2011-11-08 12:21:08 +00:00
Paul Wilkins
fe38082f44 Segment Features with 8x8DCT.
Temporary check in to turn off other segment features
tests when #if CONFIG_T8X8 is set as the assignment of
MBs to differnt segments in each case  will conflict.

The 8x8 code will be modified to use the new segment
feature method properly in a later check in.

Increase bits allowed for EOB end stop marker to 6 ready
for 8x8.

Change-Id: I4835bc8d3bf98e1775c3d247d778639c90b01f7f
2011-11-04 11:06:24 +00:00
Paul Wilkins
a258bba1fb Segment Feature Data Access
No change to functionality or output.

Updates to the segment feature data structure now all done
through functions such as set_segdata() and get_segdata()
in seg_common.c.

The reason for this is to make changing the structures (if needed)
and debug easier.

In addition it provides a single location for subsequent addition
of range and validity checks. For  example valid combination of
mode and reference frame.

Change-Id: I2e866505562db4e4cb6f17a472b25b4465f01add
2011-11-04 10:42:12 +00:00
Yaowu Xu
2bbde25003 make uv intra mode coding adaptive to Y mode
This commit tries to do UV intra mode coding adaptive to Y intra mode.
Entropy context is defined as conditional PDF of uv intra mode given
the Y mode. All constants are normalized with 256 to be fit in 8 bits.

This provides further coding efficiency beyond the quantizer adaptive
y intra mode coding. Consistent gains were observed on all clips and
all bit rates for HD all key encoding tests.

To test, configure with
--enable-experimental --enable-uvintra

Change-Id: I2d78d73f143127f063e19bd0bac3b68c418d756a
2011-11-03 21:48:08 -07:00
Paul Wilkins
a10a268e58 Segment Features. Removal of #ifdefs
Removal of configure #ifdefs so that segment features
always available. Removal of code supporting old
segment feature method.

Still a good deal of tidying up to do.

Change-Id: I397855f086f8c09ab1fae0a5f65d9e06d2e3e39f
2011-11-03 17:14:26 +00:00
Paul Wilkins
87ff8620b2 Segmentation: Reference frames
Modify reference frame segmentation so that ONE or MORE
reference frames may be marked as a available for a given
segment.

Fixed bugs relating to segment coding of INTRA and some
INTER modes at the segment level.

Modified Q boost for static areas based on ambient average Q.

Strong results now on clips with significant static areas.
(some data points in derf set as high as 9% and some static &
slide show type content in YT set > 20%)

Change-Id: Ia79f912efa84b977f35a23683ae3643251e24f0c
2011-11-02 13:31:54 +00:00
Paul Wilkins
795c6dd2c9 Segmentation Entropy and tweaks.
Some correction for entropy impact of segment signaled (EOB and ref frame)

Other slight tweaks.

Derf VBR average gain now over 1% (best over 7%)
One YT test clip has gains of circa 30% (VBR)

There is still an issue with noisy clips where making the background static
and coded with 0,0 can have a negative effect, especially at low Q.
This is probably because of the loss of smoothing by fractional pixel filters.

Change-Id: I7a225613c98067b96f8fc7a7e36f95d465b2b834
2011-10-31 10:59:25 +00:00
Paul Wilkins
23701f4f87 Segmentation Features;
Only encode sign bit for feature data that can have a sign.

Tweaks to the test segmentation rules so that it now actually gives
a net benefit on the derf set of about 0.4% though much higher
on some clips at the low end.

Change-Id: I8e61f1aebf41c9037db7e67e2f8975aa18a0c986
2011-10-24 17:06:29 +01:00
Paul Wilkins
01ce04bc06 Further segment feature extensions.
This quite large check in includes the following:

Merge in some code from Ronald (mbgraph.c) that scans a Gf/arf group.
This is used as a basis for a simple segmentation for the normal frames
in a gf/arf group. This code also uses satd functions from Yaowu.

Adds functionality for coding the latest possible position of an EOB for
blocks in the segment. (Currently 0-15 only, hence just for 4x4 dct).
Where the EOB position is 0 this acts like "skip" and the normal coding
of skip at the per mb level is disabled.

Added functions (seg_common.c) for setting and reading segment feature
elements. These may want to be optimized away at some point but while the
mecahnism is in a state of flux they provide a single location for making
changes and keep things a bit cleaner.

This is still proof of concept code. Currently the tested feature set:-

Quantizer,
Loop Filter level,
Reference frame,
Prediction Mode,
EOB end stop.

TBD:-

Add functions for setting and reading the feature data with range
and validity checking.

Handling of signed and unsigned feature data. At the moment all is assumed
to be signed and a sign bit is coded but many cannot be negative.

Correct handling of EOB feature with intra coded blocks.

Testing/trapping of legal/illegal ref frame and mode combinations.

Transform size switch plus merge and test with 8c8 DCT work

Merge and test with Sumans Segmenation coding optimizations

Change-Id: Iee12e83661c7abbd1e0ce6810915eb4ec35e2d8e
2011-10-24 15:52:18 +01:00
Paul Wilkins
156b221a7f Segment coding of mode and reference frame.
Proof of concept test code that encodes mode and reference
frame data at the segment level.

Decode-able bit stream but some issues not yet resolved.
As it this helps a little on a couple of clips but hurts on most as
the basis for segmentation is unsound.

To build and test, configure with
--enable-experimental --enable-segfeatures

Change-Id: I22a60774f69273523fb152db8c31f4b10b07c7f4
2011-09-30 16:45:16 +01:00
Yaowu Xu
ca6b85aa4e add 8x8 intra prediction modes
Patch 1 to Patch 3 is an initial implementation of 8x8 intra prediction
modes, here are with the following assumptions:
a. 8x8 has 4 prediction modes DC, H, V and TM
b. UV 4x4 block use the same mode as corresponding 8x8 area
c. i8x8 modes are enabled for key frame only for now
Patch 4:
d. removed debug code from previous patches
Patch 5:
e. added stats code to collect entropy stats and further cleaned up
Patch 6:
f. changed mode stats code to collect finer stats of modes
Patch 7:
g. normalized i8x8 modes distribution to total at 256 (8bits).
Patch 8:
h. fixed a bug in decoder and removed debug printf output.
Patch 9:
i. more cleanups to address paul's comment
Patch 10:
j. messy rebase/merges to bring the commit up to date.

Tests on HD clips encoded with all key frame showing consistent gain
on all clips and all metrics:~0.5%(psnr) and 0.6%(ssim):
http://www.corp.google.com/~yaowu/no_crawl/i8x8hd_allkey_fixedq.html

To build and test, configure with:
--enable-experimental --enable-i8x8

Change-Id: I9813fe07ae48cab5fdb5d904bca022514ad01e7f
2011-09-16 15:55:19 -07:00
Paul Wilkins
ceb5174205 Segment Feature Signaling
Plumbing for tuning new segment features on and off.

Change-Id: If86cd6f103296b73030e8af7cf85c5b9bbffdbaf
2011-09-15 10:19:09 +01:00
Paul Wilkins
dfbc61f3ab Segment Features:
Some basic plumbing added for a range of segment level features.
MB_LVL_* changed to SEG_LVL_* to better reflect meaning.

Change-Id: Iac96da36990aa0e40afc0d86e990df337fd0c50b
2011-09-13 11:26:39 +01:00
John Koleszar
ce59a150a6 Merge remote branch 'internal/upstream' into HEAD 2011-08-27 00:05:05 -04:00
Yunqing Wang
1f20202e2c Minor modification on key frame decision
This change makes sure that no key frame recoding in real-time mode
even if CONFIG_REALTIME_ONLY is not configured.

Change-Id: Ifc34141f3217a6bb63cc087d78b111fadb35eec2
2011-08-25 16:54:45 -04:00
John Koleszar
efe35fa63f Merge remote branch 'internal/upstream' into HEAD 2011-08-20 00:05:04 -04:00
John Koleszar
edec5eb5e7 Merge "Copy less when active map is in use" 2011-08-19 07:31:00 -07:00
Alpha Lam
4e8d35a461 Copy less when active map is in use
When active map is specified and the current frame is not a key frame,
golden frame nor a altref frame then copy only those active regions.

This significantly reduces encoding time by as much as 19% on the test
system where realtime encoding is used. This is particularly useful
when the frame size is large (e.g. 2560x1600) and there's only a few
action macroblocks.

Change-Id: If394a813ec2df5a0201745d1348dbde4278f7ad4
2011-08-19 10:29:41 -04:00
John Koleszar
f54d561fa8 Merge remote branch 'internal/upstream' into HEAD 2011-08-16 00:05:05 -04:00
John Koleszar
e96131705a Revert "Improved 1-pass CBR rate control"
This reverts commit b5ea2fbc2c. Further
testing showed noticable keyframe popping in some cases, reverting this
for now to give time for a proper fix.

Conflicts:

	vp8/encoder/onyx_if.c
	vp8/encoder/ratectrl.c

Change-Id: I159f53d1bf0e24c035754ab3ded8ccfd58fd04af
2011-08-12 14:51:36 -04:00
John Koleszar
a16cd74ba1 Merge remote branch 'internal/upstream-experimental' into HEAD
Conflicts:
	vp8/decoder/detokenize.c
	vp8/decoder/onyxd_if.c
	vp8/vp8_common.mk

Change-Id: Ifca1108186a8bc715da86a44021ee2fa5550b5b8
2011-08-11 13:01:45 -04:00
John Koleszar
712762b508 Merge remote branch 'origin/master' into experimental
Change-Id: Ic698ea5f5b31a5faf467eb0da4b762f9586df938
2011-08-05 00:05:05 -04:00
John Koleszar
238dae8604 Fix source buffer selection
This patch fixes a bug in the interaction between the recode loop and
spatial resampling. If the codec was in a spatial resampling state,
and a subsequent iteration of the recode loop disables resampling,
then the source buffer must be reset to the unscaled source.

Change-Id: I4e4cd47b943f6cd26a47449dc7f4255b38e27c77
2011-08-03 16:13:15 -04:00
John Koleszar
06c3d5bb9a Fix building with --disable-postproc
Change-Id: I7e6bc28e7974a376da747300744e0dd5dc1d21e9
2011-08-01 17:50:23 -04:00
John Koleszar
9fbb1d4350 Merge remote branch 'origin/master' into experimental
Change-Id: I1ae82458536ba2f0969e1bea78f41cd16fe96b79
2011-07-27 00:05:06 -04:00
James Zern
b45065d38b cosmetics: consistently use [u]int64_t
Removes mixed usage of (unsigned) long long and INT64.
Fixes Issue #208.

Change-Id: I220d3ed5ce4bb1280cd38bb3715f208ce23cf83a
2011-07-26 11:34:36 -07:00
John Koleszar
664cd5ac91 Merge remote branch 'internal/upstream' into HEAD 2011-07-23 00:05:14 -04:00
John Koleszar
e14ad46efa Merge remote branch 'origin/master' into experimental
Change-Id: I0a24d6762598e5fee30f264de1dcd10331c01eac
2011-07-23 00:05:13 -04:00
Johann
773bcc300d Merge "fix sharpness bug and clean up" 2011-07-22 09:34:55 -07:00
Johann
a04ed0e8f3 fix sharpness bug and clean up
sharpness was not recalculated in vp8cx_pick_filter_level_fast

remove last_filter_type. all values are calculated, don't need to update
the lfi data when it changes.

always use cm->sharpness_level. the extra indirection was annoying.

don't track last frame_type or sharpness_level manually. frame type
only matters for motion search and sharpness_level is taken care of in
frame_init

move function declarations to their proper header

Change-Id: I7ef037bd4bf8cf5e37d2d36bd03b5e22a2ad91db
2011-07-22 12:33:57 -04:00
Yunqing Wang
829179e888 Merge "Preload reference area to an intermediate buffer in sub-pixel motion search" 2011-07-22 06:56:15 -07:00
Yunqing Wang
20bd1446c0 Preload reference area to an intermediate buffer in sub-pixel motion search
In sub-pixel motion search, the search range is small(+/- 3 pixels).
Preload whole search area from reference buffer into a 32-byte
aligned buffer. Then in search, load reference data from this buffer
instead. This keeps data in cache, and reduces the crossing cache-
line penalty. For tulip clip, tests on Intel Core2 Quad machine(linux)
showed encoder speed improvement:
  3.4%   at --rt --cpu-used =-4
  2.8%   at --rt --cpu-used =-3
  2.3%   at --rt --cpu-used =-2
  2.2%   at --rt --cpu-used =-1

Test on Atom notebook showed only 1.1% speed improvement(speed=-4).
Test on Xeon machine also showed less improvement, since unaligned
data access latency is greatly reduced in newer cores.

Next, I will apply similar idea to other 2 sub-pixel search functions
for encoding speed > 4.

Make this change exclusively for x86 platforms.

Change-Id: Ia7bb9f56169eac0f01009fe2b2f2ab5b61d2eb2f
2011-07-22 09:28:06 -04:00
John Koleszar
dc9e1b7683 Merge remote branch 'origin/master' into experimental
Change-Id: I8b0a76b3232c8cff15c0ca5289e18af6889e5095
2011-07-22 00:05:11 -04:00
John Koleszar
7d44c805cf Merge remote branch 'internal/upstream' into HEAD 2011-07-22 00:05:06 -04:00
Yaowu Xu
8c31484ea1 fix more merge issues
With this fix, the experimental branch now builds and encodes correctly
with the following two configure options respectively:
--enable-experimental --enable-t8x8
--enable-experimental

Change-Id: I3147c33c503fe713a85fd371e4f1a974805778bf
2011-07-21 09:01:53 -07:00
John Koleszar
2bdda84e37 Merge "Increase chrow row alignment to 16 bytes." 2011-07-21 07:32:39 -07:00
Yunqing Wang
c5fe641179 Merge "Add improvements made in good-quality mode to real-time mode" 2011-07-21 07:27:09 -07:00
Timothy B. Terriberry
7d1b37cdac Increase chrow row alignment to 16 bytes.
This is done by expanding luma row to 32-byte alignment, since
 there is currently a bunch of code that assumes that
 uv_stride == y_stride/2 (see, for example, vp8/common/postproc.c,
 common/reconinter.c, common/arm/neon/recon16x16mb_neon.asm,
 encoder/temporal_filter.c, and possibly others; I haven't done a
 full audit).
It also uses replaces the hardcoded border of 16 in a number of
 encoder buffers with VP8BORDERINPIXELS (currently 32), as the
 chroma rows start at an offset of border/2.
Together, these two changes have the nice advantage that simply
 dumping the frame memory as a contiguous blob produces a valid,
 if padded, image.

Change-Id: Iaf5ea722ae5c82d5daa50f6e2dade9de753f1003
2011-07-20 10:20:31 -07:00
Deb Mukherjee
08f6471890 Add 8x8 transform to experimental branch
Please refer to previous commit messages for detailed info:
https://on2-git.corp.google.com/g/#change,5940
https://on2-git.corp.google.com/g/#change,6045

Change-Id: I8b16992f2f69c5a808ad40a3e32ef589cce7c59d
2011-07-20 09:49:22 -07:00
John Koleszar
2614b77fcb Merge remote branch 'origin/master' into experimental
Change-Id: Ida9204624fe3fb99fed1b149d1f88159480fdd83
2011-07-19 00:05:11 -04:00
John Koleszar
b3b34b0bc7 Merge remote branch 'internal/upstream' into HEAD 2011-07-19 00:05:05 -04:00
John Koleszar
b5ea2fbc2c Improved 1-pass CBR rate control
This patch attempts to improve the handling of CBR streams with
respect to the short term buffering requirements. The "buffer level"
is changed to be an average over the rc buffer, rather than a long
running average. Overshoot is also tracked over the same interval
and the golden frame targets suppressed accordingly to correct for
overly aggressive boosting.

Testing shows that this is fairly consistently positive in one
metric or another -- some clips that show significant decreases
in quality have better buffering characteristics, others show
improvenents in both.

Change-Id: I924c89aa9bdb210271f2e03311e63de3f1f8f920
2011-07-18 11:48:05 -04:00
John Koleszar
f1fcd74e3e Merge remote branch 'origin/master' into experimental
Change-Id: Icbeb14d64ed3d9337606b591dde4e0669540a10d
2011-07-15 00:05:06 -04:00
John Koleszar
087b338d9e Merge remote branch 'internal/upstream' into HEAD 2011-07-15 00:05:04 -04:00
John Koleszar
04dce631a2 Remove unused speed features
min_fs_radius, max_fs_radius, full_freq were set but never read.

Change-Id: I82657f4e7f2ba2acc3cbc3faa5ec0de5b9c6ec74
2011-07-14 14:20:25 -04:00
John Koleszar
86edcb0cc7 Merge remote branch 'origin/master' into experimental
Change-Id: I3f64e220b78738e5261a9fda3c270d51613f4faa
2011-07-14 00:05:12 -04:00
John Koleszar
6901105e99 Merge remote branch 'internal/upstream' into HEAD 2011-07-14 00:05:04 -04:00
Yunqing Wang
0e9a6ed72a Add improvements made in good-quality mode to real-time mode
Several improvements we made in good-quality mode can be added
into real-time mode to speed up encoding in speed 1, 2, and 3
with small quality loss. Tests using tulip clip showed:

--rt --cpu-used=-1
(before change)
PSNR: 38.028
time: 1m33.195s
(after change)
PSNR: 38.014
time: 1m20.851s

--rt --cpu-used=-2
(before change)
PSNR: 37.773
time: 0m57.650s
(after change)
PSNR: 37.759
time: 0m54.594s

--rt --cpu-used=-3
(before change)
PSNR: 37.392
time: 0m42.865s
(after change)
PSNR: 37.375
time: 0m41.949s

Change-Id: I76ab2a38d72bc5efc91f6fe20d332c472f6510c9
2011-07-13 14:51:02 -04:00
John Koleszar
ef7f489dc3 Merge remote branch 'internal/upstream-experimental' into HEAD 2011-07-08 08:57:03 -04:00
Attila Nagy
622958449b New loop filter interface
Separate simple filter with reduced no. of parameters.
MB filter level picking based on precalculated table. Level table updated for
each frame. Inside and edge limits precalculated and updated just when
sharpness changes. HEV threshhold is constant.
ARM targets use scalars and others vectors.

Change works only with --target=generic-gnu
All other targets have to be updated!

Change-Id: I6b73aca6b525075b20129a371699b2561bd4d51c
2011-07-08 09:31:41 +03:00
John Koleszar
2c3c54f747 Merge remote branch 'origin/master' into experimental
Change-Id: I9cead934ebea85d81aceaaec4674efc74367f984
2011-07-08 00:05:05 -04:00
John Koleszar
973a9c075d Merge "Set VPX_FRAME_IS_DROPPABLE" 2011-07-07 08:11:05 -07:00
John Koleszar
37de0b8bdf Set VPX_FRAME_IS_DROPPABLE
Allow the encoder to inform the application that the encoded frame will not
be used as a reference.

Change-Id: I90e41962325ef73d44da03327deb340d6f7f4860
2011-07-07 10:38:45 -04:00
John Koleszar
9dfd006017 Merge remote branch 'internal/upstream-experimental' into HEAD
Conflicts:
	vp8/encoder/bitstream.c

Change-Id: I44c00f98dcb99eb728ce4f5256aefb135a711a74
2011-06-30 08:46:49 -04:00
John Koleszar
6251e9e5ce Merge remote branch 'origin/master' into experimental
Change-Id: I35c9ca116aecd0d03e762942d9cf1289edb4f23d
2011-06-30 00:05:10 -04:00
Paul Wilkins
11694aab66 Change to arf boost calculation.
In this commit I have added an experimental function
that tests prediction quality either side of a central position
to calculate a suggested boost number for an ARF frame.

The function is passed an offset from the current position and
a number of frames to search forwards and backwards.
It returns a forward, backward and compound boost number.

The new code can be deactivated using #define NEW_BOOST 0

In its current default state the code searches forwards and backwards
from the proposed  position of the next alt ref.

The the old code used a boost number calculated by scanning forward
from the previous GF up to the proposed alt ref frame position.

I have also added some code to try and prevent placement of a gf/arf
where there is a brief flash.

Change-Id: I98af789a5181148659f10dd5dd2ff2d4250cd51c
2011-06-29 18:01:25 +01:00
John Koleszar
fe5765a5f3 Merge remote branch 'origin/master' into experimental
Change-Id: I68e604e4a731f6703fdec7eff2c2c9b9e36879ea
2011-06-29 00:05:10 -04:00
Stefan Holmer
4cb0ebe5b2 Adding support for independent partitions
Adding support in the encoder for generating
independent residual partitions by forcing
equal probabilities over the prev coef entropy
contexts.

Change-Id: I402f5c353255f3ca20eae2620af739f6a498cd21
2011-06-28 11:10:17 -04:00
John Koleszar
1ec4e27095 Merge remote branch 'origin/master' into experimental
Change-Id: I689f4624a53184a72258df575305eb1aa97e61ca
2011-06-27 09:39:56 -04:00
John Koleszar
7467f6d04a Merge remote branch 'internal/upstream' into HEAD 2011-06-23 11:55:51 -04:00
John Koleszar
db67dcba6a Revert "Reduce overshoot in 1 pass rate control"
This reverts commit 212f618373.

Further testing shows that the overshoot accumulation/damping is too
aggressive on some clips. Allowing the accumulated overshoot to
decay and limiting to damping to golden frames shows some promise.
But some clips show significant overshoot in the buffer window, so
I think this still needs work.

Change-Id: Ic02a9ca34f55229f9cc04786f4fab54cdc1a3ef5
2011-06-23 11:52:12 -04:00
John Koleszar
deb2e9cf62 Merge remote branch 'internal/upstream' into HEAD
Conflicts:
	vp8/encoder/encodeframe.c
	vp8/encoder/rdopt.c

Change-Id: I183fd3ce9e94617ec888c9f891055b9f1f8ca6c5
2011-06-17 15:36:43 -04:00
Johann
e18d7bc230 Merge remote branch 'origin/master' into experimental
Conflicts:
	vp8/encoder/encodeframe.c
	vp8/encoder/rdopt.c

Change-Id: I8bab720889ac652361abdedfe2cc91a89742cb30
2011-06-17 14:56:27 -04:00
John Koleszar
5c166470a5 Merge "Reduce overshoot in 1 pass rate control" 2011-06-07 12:30:37 -07:00
John Koleszar
6c8205d37e Merge remote branch 'origin/master' into experimental
Change-Id: I67cc3b490266f958a1b3a935ec08ee19d7b4f6a0
2011-06-07 00:05:07 -04:00
John Koleszar
d13cfba344 Merge remote branch 'internal/upstream' into HEAD 2011-06-07 00:05:04 -04:00
Johann
04edde2b11 Merge "neon fast quantize block pair" 2011-06-06 13:42:58 -07:00
John Koleszar
212f618373 Reduce overshoot in 1 pass rate control
This patch attempts to reduce the peak bitrate hit by the encoder
when using small buffer windows.

Tested on the CIF set over 200-500kbps using these settings:

  --buf-sz=500 --buf-initial-sz=250 --buf-optimal-sz=250 \
  --undershoot-pct=100

Two pass encodes were tested at best quality. One pass encodes were
tested only at realtime speed 4:

  --rt --cpu-used=-4

The peak datarate (over the specified 500ms window) was measured
for each encode, and averaged together to get metric for
"average peak," computed as SUM(peak)/SUM(target). This patch
reduces the average peak datarate as follows:

  One pass:
    baseline:   1.29715
    this patch: 1.23664

  Two pass:
    baseline:   1.32702
    this patch: 1.37824

This change had a positive effect on our quality metrics as well:

  One pass CBR:
                    Min  / Mean / Max (pct)
    Average PSNR    -0.42 / 2.86 / 27.32
    Overall PSNR    -0.90 / 2.00 / 17.27
    SSIM            -0.05 / 3.95 / 37.46

  Two pass CBR:
                    Min  / Mean / Max (pct)
    Average PSNR    -4.47 / 4.35 / 35.99
    Overall PSNR    -3.40 / 4.18 / 36.46
    SSIM            -4.56 / 6.98 / 53.67

  One pass VBR:
                    Min  / Mean / Max (pct)
    Average PSNR    -5.21 /  0.01 / 3.30
    Overall PSNR    -8.10 / -0.38 / 1.21
    SSIM            -7.38 / -0.11 / 3.17
    (note: most values here were close to the mean, there were a few
     outliers on files that were very sensitive to golden frame size)

  Two pass VBR:
                    Min  / Mean / Max (pct)
    Average PSNR    0.00 / 0.00 / 0.00
    Overall PSNR    0.00 / 0.00 / 0.00
    SSIM            0.00 / 0.00 / 0.00

Neither one pass or two pass CBR mode adheres particularly strictly
to the short term buffer constraints, and two pass is less
consistent, even in the baseline commit. This should be addressed
in a later commit. This likely will hurt the quality numbers, as it
will have to reduce the burstiness of golden frames.

Aside: My work on this commit makes it clear that we need to make
rate control modes "pluggable", where you can easily write a new
one or work on one in isolation.

Change-Id: I1ea9a48f2beedd59891f1288aabf7064956b4716
2011-06-03 16:38:11 -04:00
John Koleszar
32817d6fbe Merge remote branch 'origin/master' into experimental
Change-Id: I993dbef81ca3d1638e16c4134aa8dc177e57875c
2011-06-02 00:05:13 -04:00
John Koleszar
319404f4f1 Merge remote branch 'internal/upstream' into HEAD 2011-06-02 00:05:07 -04:00
John Koleszar
5610970fe9 Merge "Fix code under #if CONFIG_INTERNAL_STATS." 2011-06-01 11:14:17 -07:00
Ronald S. Bultje
34ba18760f Fix code under #if CONFIG_INTERNAL_STATS.
Change-Id: Iccbd78d91c3071b16fb3b2911523a22092652ecd
2011-06-01 11:10:13 -07:00
Tero Rintaluoma
61f0c090df neon fast quantize block pair
vp8_fast_quantize_b_pair_neon function added to quantize
two adjacent blocks at the same time to improve performance.
 - Additional 3-6% speedup compared to neon optimized fast
   quantizer (Tanya VGA@30fps, 1Mbps stream, cpu-used=-5..-16)

Change-Id: I3fcbf141e5d05e9118c38ca37310458afbabaa4e
2011-06-01 10:48:05 +03:00
John Koleszar
2289ba4b9c Merge remote branch 'origin/master' into experimental
Change-Id: I1e7ce466bc01e380eb392b964ba677f0bb8cd13b
2011-06-01 00:05:13 -04:00
John Koleszar
f07dec70cd Merge remote branch 'internal/upstream' into HEAD 2011-06-01 00:05:11 -04:00
John Koleszar
0a72f568ec Initialize first_time_stamp_ever
Misplaced #endif caused first_time_stamp_ever to only be initialized if
CONFIG_INTERNAL_STATS was set.

Change-Id: I2296a4ab00f7dfb767583edcc5d59b94f48c0621
2011-05-31 12:37:45 -04:00
John Koleszar
d63ce5db34 Merge remote branch 'origin/master' into experimental
Change-Id: Ie2a4927754a9c220b30a84fc7e1372e565fe9eec
2011-05-28 00:05:12 -04:00
John Koleszar
4070c93bfa Merge remote branch 'internal/upstream' into HEAD 2011-05-28 00:05:09 -04:00
John Koleszar
4a4ade6dc8 Merge "bug fix check frame buffer index before copy" 2011-05-27 12:35:06 -07:00
James Berry
8795b52512 bug fix check frame buffer index before copy
in onyx_if.c update_reference_frames() make
sure that frame buffer indexes are not equal
before preforming a buffer copy.  If two frames
share the same buffer the flags will already be
set correctly.

Change-Id: Ida9b5516d08e3435c90f131d2dc19d842cfb536e
2011-05-27 14:59:29 -04:00
Yunqing Wang
4d052bdd91 Use hex search for realtime mode speed>4
Test showed using hex search in realtime mode largely speed up
encoding process, and still achieves similar quality like the
diamond search we have. Therefore, removed the diamond search
option.

Change-Id: I975767d0ec0539f9f6ed7fdfc09506e39761b66c
2011-05-27 14:05:02 -04:00
John Koleszar
2fa7fe66c4 Merge remote branch 'origin/master' into experimental
Change-Id: I6d6692418eecf54e23e00a08394b0b37d6e7682b
2011-05-27 00:05:12 -04:00