Commit Graph

391 Commits

Author SHA1 Message Date
Johann
c5b127afea Rename vp9_idct_x86.c
Remove similarly named header file. It is obsolete.

Move file to match naming style.

Adjust make file to include the file correctly and remove extra
unnecessary #if guard.

Change-Id: Ifba07ba9938a5df08a9f4eda54a3ac4d6983f7bf
2013-04-25 11:13:02 -07:00
Johann
7af58d4338 Resolve declaration and implementation.
Clean Windows build warnings:
warning C4028: formal parameter <N> different from declaration

This was fixed independently in master and experimental but the fixes
were in opposite directions. One added const to the declaration and the
other removed it from the implementation.

Also update the variable names. This doesn't modify the data so call it
ref, matching the functions in the vicinity, rather than dst.

Change-Id: I2ffc6b4a874cb98c26487b909d20a5e099b5582c
2013-04-23 12:42:31 -07:00
Christian Duvivier
5b6d33f9af Faster vp9_short_fdct4x4 and vp9_short_fdct8x4.
Scalar path is about 1.3x faster (2.1% overall encoder speedup).
SSE2 path is about 5.0x faster (8.4% overall encoder speedup).

Change-Id: I360d167b5ad6f387bba00406129323e2fe6e7dda
2013-04-16 16:38:30 -07:00
John Koleszar
7f7d1357a2 Merge branch 'experimental' into master
VP9 preview bitstream 2, commit '868ecb55a1528ca3f19286e7d1551572bf89b642'

Conflicts:
	vp9/vp9_common.mk

Change-Id: I3f0f6e692c987ff24f98ceafbb86cb9cf64ad8d3
2013-04-16 06:49:46 -07:00
Johann
3db60c8c6c Demux vp9_loopfilter_x86.c
Allow more careful targeting of compiler flags.

Change-Id: I963ab4a6479dedb165419310dfca52a58a9877b8
2013-04-02 12:49:04 -07:00
Johann
6c147b9d93 vp9_sadmxn_x86 only contains SSE2 functions
Rename the file and clean up includes. In the future we would like to
pattern match the files which need additional compiler flags.

Change-Id: I2c76256467f392a78dd4ccc71e6e0a580e158e56
2013-04-02 11:20:55 -07:00
John Koleszar
edb1222acb Merge "Extracting common motion vector prediction code." into experimental 2013-03-29 10:43:38 -07:00
John Koleszar
2e181c2d0b Merge "General code cleanup." into experimental 2013-03-29 10:40:34 -07:00
Yaowu Xu
4b3e59ef0e Merge "define a specific neighborhood for SB64 mv search" into experimental 2013-03-29 09:26:14 -07:00
Yaowu Xu
cbc7ec55a5 Merge "remove code not in use" into experimental 2013-03-29 08:40:29 -07:00
Deb Mukherjee
c5840a8d8e Merge "Reoptimizing the interpolation filters" into experimental 2013-03-29 07:15:05 -07:00
Ronald S. Bultje
6cb2fcf601 Merge "Fix mix-up in pt token indexing." into experimental 2013-03-28 12:53:00 -07:00
Ronald S. Bultje
9eea9fa206 Fix mix-up in pt token indexing.
This fixes uninitialized reads in the trellis, and probably makes the
trellis do something again.

Change-Id: Ifac8dae9aa77574bde0954a71d4571c5c556df3c
2013-03-28 09:24:29 -07:00
Yaowu Xu
48104f0dfa define a specific neighborhood for SB64 mv search
Change-Id: Ifda91d697c5970c65ce3ec1feac5562124f91782
2013-03-27 16:34:45 -07:00
Dmitry Kovalev
52ccff4719 Extracting common motion vector prediction code.
Adding b_mv_pred_row and b_mv_pred_col functions, updating
mi_mv_pred_row and mi_mv_pred_row functions.

Change-Id: I9af068442d4474478375943cc6fce1605d6fc0a5
2013-03-27 14:35:36 -07:00
Dmitry Kovalev
180cd5faa5 General code cleanup.
Removing redundant code, lower case variable names, better indentation,
better parameter names, adding const to readonly parameters.

Change-Id: Ibfdee00f60316fdc5b3f024028c7aaa76a627483
2013-03-27 14:22:30 -07:00
John Koleszar
9ba8aed179 Merge "Extract setup_frame_size and update_frame_context functions." into experimental 2013-03-27 14:21:57 -07:00
Dmitry Kovalev
8c69c193b5 Extract setup_frame_size and update_frame_context functions.
Extracting setup_frame_size and update_frame_context functions. Introducing
vp9_read_prob function as shortcut for (vp9_prob)vp9_read_literal(r, 8).

Change-Id: Ia5c68fd725b2d1b9c5eb20f69cacb62361b5a3dd
2013-03-27 14:04:35 -07:00
Yunqing Wang
c6c0657c60 Modify idct code to use macro
Small modification of idct code.

Change-Id: I5c4e3223944c68e4ccf762f6cf07c990250e4290
2013-03-27 12:36:08 -07:00
Yunqing Wang
0e91bec4b5 Merge "Optimize 32x32 idct function" into experimental 2013-03-27 11:30:48 -07:00
Yunqing Wang
21a718d9a7 Optimize 32x32 idct function
Wrote sse2 version of vp9_short_idct_32x32 function. Compared
to c version, the sse2 version is 5X faster.

Change-Id: I071ab7378358346ab4d9c6e2980f713c3c209864
2013-03-27 11:05:42 -07:00
Ronald S. Bultje
513157e093 Scatter-based scantables.
This gains about 0.2% on derf, 0.1% on hd and 0.4% on stdhd. I can put
this under an experimental flag if wanted, just trying to get my patch
queue in shape.

Change-Id: Ibe1a30fe0e0b07bec4802e0f3ff0ba22e505f576
2013-03-27 09:44:45 -07:00
Ronald S. Bultje
7c70145914 Merge "Add col/row-based coefficient scanning patterns for 1D 8x8/16x16 ADSTs." into experimental 2013-03-26 19:17:08 -07:00
Ronald S. Bultje
3c77ab4c0f Merge "Redo banding for all transforms." into experimental 2013-03-26 19:16:44 -07:00
Ronald S. Bultje
c6efbbcfe4 Merge "Use above/left (instead of previous in scan-order) as token context." into experimental 2013-03-26 19:16:24 -07:00
Deb Mukherjee
23144d2345 Implicit weighted prediction experiment
Adds an experiment to use a weighted prediction of two INTER
predictors, where the weight is one of (1/4, 3/4), (3/8, 5/8),
(1/2, 1/2), (5/8, 3/8) or (3/4, 1/4), and is chosen implicitly
based on consistency of the predictors to the already
reconstructed pixels to the top and left of the current macroblock
or superblock.

Currently the weighting is not applied to SPLITMV modes, which
default to the usual (1/2, 1/2) weighting. However the code is in
place controlled by a macro. The same weighting is used for Y and
UV components, where the weight is derived from analyzing the Y
component only.

Results (over compound inter-intra experiment)
derf: +0.18%
yt: +0.34%
hd: +0.49%
stdhd: +0.23%

The experiment suggests bigger benefit for explicitly signaled weights.

Change-Id: I5438539ff4485c5752874cd1eb078ff14bf5235a
2013-03-26 16:58:56 -07:00
Ronald S. Bultje
d9094d8fd3 Add col/row-based coefficient scanning patterns for 1D 8x8/16x16 ADSTs.
These are mostly just for experimental purposes. I saw small gains (in
the 0.1% range) when playing with this on derf.

Change-Id: Ib21eed477bbb46bddcd73b21c5c708a5b46abedc
2013-03-26 16:46:13 -07:00
Ronald S. Bultje
3120dbddb1 Redo banding for all transforms.
Now that the first AC coefficient in both directions use the same DC
as their context, there no longer is a purpose in letting both have
their own band. Merging these two bands allows us to split bands for
some of the very high-frequency AC bands.

In addition, I'm redoing the banding for the 1D-ADST col/row scans. I
don't think the old banding made any sense at all (it merged the last
coefficient of the first row/col in the same band as the first two of
the second row/col), which was clearly an oversight from the band being
applied in scan-order (rather than in their actual position). Now,
coefficients at the same position will be in the same band, regardless
what scan order is used. I think this makes most sense for the purpose
of banding, which is basically "predict energy for this coefficient
depending on the energy of context coefficients" (i.e. pt).

After full re-training, together with previous patch, derf gains about
1.2-1.3%, and hd/stdhd gain about 0.9-1.0%.

Change-Id: I7a0cc12ba724e88b278034113cb4adaaebf87e0c
2013-03-26 16:46:13 -07:00
Ronald S. Bultje
790fb13215 Use above/left (instead of previous in scan-order) as token context.
Pearson correlation for above or left is significantly higher than for
previous-in-scan-order (absolute values depend on position in scan, but
in general, we gain about 0.1-0.2 by using either above or left; using
both basically just makes this even better). For eob branch skipping,
we continue to use the previous token in scan order.

This helps about 0.9% on derf after re-training on a limited data set.
Full re-training and results on larger-resolution clips are pending.

Note that this commit breaks trellis, so we can probably get further
gains out of it by fixing trellis at some later point.

Change-Id: Iead68e296fc3a105cca746b5e3da9555d6010cfe
2013-03-26 16:46:09 -07:00
Deb Mukherjee
57c97e2a5b Reoptimizing the interpolation filters
Reoptimizes the 8-tap smooth filter.

Results:
derf: +0.101%
yt: +0.157%
hd: +0.791%
stdhd: +0.264%

The next step will be to reoptimize the other two filters.

Change-Id: I3d256a510ad9c7c30c33fae4a70fb43dfc708ed0
2013-03-26 16:34:35 -07:00
Yaowu Xu
43df87e841 remove code not in use
Change-Id: I4fa46f10e82aca36c563f7ea829e5a3177a0c740
2013-03-26 15:27:35 -07:00
Dmitry Kovalev
d7209b3a0a Cleaning up loopfilter code.
Lower case variable names, removing redundant variables, declaration and
initialization on the same line.

Change-Id: Ie0c6c95b14103990eb6a9d7784f8259c662e1251
2013-03-26 11:09:58 -07:00
John Koleszar
8e1c368486 Merge "Add an in-loop deringing experiment" into experimental 2013-03-26 08:36:55 -07:00
John Koleszar
7d9a7fb297 Merge "Code cleanup." into experimental 2013-03-26 08:34:06 -07:00
John Koleszar
f0923f3b01 Merge "Code cleanup." into experimental 2013-03-26 08:30:46 -07:00
John Koleszar
441e2eab1b Add an in-loop deringing experiment
Adds a per-frame, strength adjustable, in loop deringing filter. Uses
the existing vp9_post_proc_down_and_across 5 tap thresholded blur
code, with a brute force search for the threshold.

Results almost strictly positive on the YT HD set, either having no
effect or helping PSNR in the range of 1-3% (overall average 0.8%).
Results more mixed for the CIF set, (-0.5 min, 1.4 max, 0.1 avg).
This has an almost strictly negative impact to SSIM, so examining a
different filter or a more balanced search heuristic is in order.

Other test set results pending.

Change-Id: I5ca6ee8fe292dfa3f2eab7f65332423fa1710b58
2013-03-26 08:23:24 -07:00
Deb Mukherjee
49dcc71493 Merge "Modeling default coef probs with distribution" into experimental 2013-03-26 07:13:13 -07:00
Deb Mukherjee
fd18d5dffe Modeling default coef probs with distribution
Replaces the default tables for single coefficient magnitudes with
those obtained from an appropriate distribution. The EOB node
is left unchanged. The model is represeted as a 256-size codebook
where the index corresponds to the probability of the Zero or the
One node. Two variations are implemented corresponding to whether
the Zero node or the One-node is used as the peg. The main advantage
is that the default prob tables will become considerably smaller and
manageable. Besides there is substantially less risk of over-fitting
for a training set.

Various distributions are tried and the one that gives the best
results is the family of Generalized Gaussian distributions with
shape parameter 0.75. The results are within about 0.2% of fully
trained tables for the Zero peg variant, and within 0.1% of the
One peg variant.

The forward updates are optionally (controlled by a macro)
model-based, i.e. restricted to only convey probabilities from the
codebook. Backward updates can also be optionally (controlled by
another macro) model-based, but is turned off by default. Currently
model-based forward updates work about the same as unconstrained
updates, but there is a drop in performance with backward-updates
being model based.

The model based approach also allows the probabilities for the key
frames to be adjusted from the defaults based on the base_qindex of
the frame. Currently the adjustment function is a placeholder that
adjusts the prob of EOB and Zero node from the nominal one at higher
quality (lower qindex) or lower quality (higher qindex) ends of the
range. The rest of the probabilities are then derived based on the
model from the adjusted prob of zero.

Change-Id: Iae050f3cbcc6d8b3f204e8dc395ae47b3b2192c9
2013-03-25 23:43:38 -07:00
Dmitry Kovalev
3644a5b632 Code cleanup.
Fixing function arguments alignment, reusing MIN/MAX and clamp functions.

Change-Id: I87dd5a40ffb65b521b8abbf0fccf2f50552c5309
2013-03-25 15:16:14 -07:00
Dmitry Kovalev
7cc14e598e Code cleanup.
Lower case variable names, code simplification by using already defined
clamp and read_le16 functions.

Change-Id: I8fd544365bd8d1daed86d7b2ae0843e4ef80df08
2013-03-25 14:24:26 -07:00
Yunqing Wang
f68350ca98 Merge "Optimize 16x16 idct10 function" into experimental 2013-03-22 11:17:32 -07:00
Paul Wilkins
52abaeca85 Merge "Remove TX size segment feature" into experimental 2013-03-22 10:39:22 -07:00
Yunqing Wang
869d6c0534 Optimize 16x16 idct10 function
Wrote sse2 version of vp9_short_idct10_16x16 function. Compared
to c version, the sse2 version is 2.3X faster.

Change-Id: I314c4f09369648721798321eeed6f58e38857f26
2013-03-21 16:36:01 -07:00
Yunqing Wang
8a3233b54d Merge "Optimize 16x16 idct function" into experimental 2013-03-21 11:54:20 -07:00
Yunqing Wang
ec3100661c Optimize 16x16 idct function
Wrote sse2 version of vp9_short_idct16x16 function. Compared to c
version, the sse2 version is over 2.5X faster.

Change-Id: I38536e2b846427a2cc5c5423aaf305fd0e605d61
2013-03-21 11:44:05 -07:00
Dmitry Kovalev
56f3a2c663 Code cleanup: lower case variable names.
Renaming Width to width, Height to height and Version to version in
several structs and function signatures.

Change-Id: I084c3f7e747cb2ce3345aff27a3dff9b13a87543
2013-03-20 16:41:30 -07:00
Paul Wilkins
1c75e77b6d Remove TX size segment feature
Change-Id: I0d226e4cb240caced37230f46905bf69b46e0cce
2013-03-19 17:31:08 +00:00
Yunqing Wang
6344c84c82 Optimize 8x8 idct function
Wrote sse2 functions of vp9_short_idct8x8 and vp9_short_idct10_8x8.
Compared to c version, the sse2 version is 2X faster. The decoder
test didn't show noticeable gain since 8x8 idct doesn't take much
of decoding time (less than 1% in my test).

Change-Id: I56313e18cd481700b3b52c4eda5ca204ca6365f3
2013-03-18 15:34:14 -07:00
John Koleszar
8a3f55f2d4 Replace scaling byte with explicit display size
If the intended display size is different than the size the frame is
coded at, then send that size explicitly in the bitstream. Adds a new
bit to the frame header to indicate whether the extra size fields
are present.

Change-Id: I525c66f22d207efaf1e5f903c6a2a91b80245854
2013-03-18 12:02:20 -07:00
John Koleszar
c5b317057b Merge "Fix pulsing issue with scaling" into experimental 2013-03-18 11:57:36 -07:00