Commit Graph

5222 Commits

Author SHA1 Message Date
Yaowu Xu
d928b34efe Allow full RD TX size search for GF/ALT at speed 2
For speed 3 and above, such search is only allowed at speed 3.
The change helped cif and stdhd set by 1.2% and .7% in compression,
but increased the encoding time by around 5%.

Change-Id: Ifa4832327f1c1bef3decb032ceb769cbf50e059f
2014-04-21 12:31:46 -07:00
Yaowu Xu
a7ecad59b6 Merge "Merge two new VBR adjustment schemes." 2014-04-21 09:11:24 -07:00
Yaowu Xu
3a5b7dd087 Merge "Add experimental VBR adaptation method." 2014-04-21 09:11:19 -07:00
Dmitry Kovalev
6962ea665d Merge "Moving set_rd_speed_thresholds{,_sub8x8} to vp9_rdopt.{h, c}." 2014-04-18 18:18:08 -07:00
Adrian Grange
2b22185c14 Merge "Remove ALT_REF_MC_ENABLED and tidy-up ARNR code." 2014-04-18 16:34:57 -07:00
Dmitry Kovalev
76d58ba414 Moving set_rd_speed_thresholds{,_sub8x8} to vp9_rdopt.{h, c}.
Change-Id: I983364b33e8f103b43a0448821e890989176f1cc
2014-04-18 16:34:01 -07:00
Dmitry Kovalev
07f86d0944 Renaming VP9_CONFIG to VP9EncoderConfig.
Change-Id: Id48edd12c6f649c82113128491ef6ea7410e93b2
2014-04-18 11:01:36 -07:00
Dmitry Kovalev
400973c361 Merge "Adding get_pass() function." 2014-04-18 10:38:20 -07:00
Adrian Grange
a6266e0399 Remove ALT_REF_MC_ENABLED and tidy-up ARNR code.
Change-Id: I922d988486b47f413d11a8eeb38532a484d15c80
2014-04-18 08:57:34 -07:00
Jingning Han
741c6bb619 Merge "Fix broken encoding process at sub8x8 block size" 2014-04-18 08:46:54 -07:00
Dmitry Kovalev
e62875b5a6 Merge "Removing cq_target_quality from VP9_COMP." 2014-04-17 18:27:19 -07:00
Dmitry Kovalev
69b88df206 Merge "Adding is_best_mode() function." 2014-04-17 18:26:54 -07:00
Jim Bankoski
1355af5c42 Merge "rename labels2mode because it was a terrible name." 2014-04-17 15:42:41 -07:00
Jim Bankoski
209d348c92 Merge "renamed pick_best_mbsegmentation and remove rd_check_segment_txsize" 2014-04-17 15:42:36 -07:00
Jim Bankoski
d9db2aa12a Merge "rename mode_index to ref index in vp9_rd_pick_inter_mode_sub_8x8" 2014-04-17 15:42:27 -07:00
Jingning Han
a7c69a71d9 Fix broken encoding process at sub8x8 block size
Use the correct buffer to update the coding mode decision for
sub8x8 blocks.

Change-Id: I091ef27d2047eeb8b73ceb7c2c7c45b38ba8c6d5
2014-04-17 15:33:46 -07:00
Dmitry Kovalev
219a006b9c Adding get_pass() function.
Change-Id: I43de248615b79828d5164b670e7358b8a520d075
2014-04-17 15:25:20 -07:00
Jingning Han
0bba4042c2 Merge "Skip fetching original frame pointers for UV in background check" 2014-04-17 15:22:41 -07:00
Dmitry Kovalev
52549b4e78 Adding is_best_mode() function.
Change-Id: Idca7c1cd8a12df465c58b6ba064a99404b3b4bce
2014-04-17 15:09:55 -07:00
Dmitry Kovalev
53dbc7f92c Removing cq_target_quality from VP9_COMP.
Use cq_level (which is identical) from VP9_CONFIG instead.

Change-Id: I1aaf2fcef3d2dbd4577f613d27693ff8a68989fd
2014-04-17 14:57:43 -07:00
Dmitry Kovalev
69009e738e Merge "Replacing cpu_used with speed in VP9_CONFIG." 2014-04-17 14:34:26 -07:00
Jim Bankoski
d3ccf55674 rename labels2mode because it was a terrible name.
Change-Id: I2d577d11966fcc5ffaaf0896bf51d18078ad1e9c
2014-04-17 13:48:54 -07:00
Paul Wilkins
02e5bde3f8 Merge two new VBR adjustment schemes.
To make direct side by side testing this patch combines two
VBR corrections schemes to allow more direct side by side testing.
(The other patch was by Debargha chg id I0cd1f7...)

Change-Id: I271c45e5c4ccf8de8305589000218b80d9dc3a25
2014-04-17 12:05:31 -07:00
Jingning Han
42c1f6dbf4 Skip fetching original frame pointers for UV in background check
The background detection only tracks luma component. This commits
removes the frame buffer pointer retrieval for chroma components.

Change-Id: I098bd2950f5e5829ed5dc2b48568167248da7fad
2014-04-17 11:07:32 -07:00
Jingning Han
96a381c255 Merge "Remove redundant buffer initialization and mode_info assignments" 2014-04-17 09:36:30 -07:00
Jim Bankoski
fba9b09f7e renamed pick_best_mbsegmentation and remove rd_check_segment_txsize
Change-Id: Ia7d33bc3eb595965bccf4b2231df1e3b2a0243c6
2014-04-17 09:11:23 -07:00
Jim Bankoski
5c28d1a1f0 rename mode_index to ref index in vp9_rd_pick_inter_mode_sub_8x8
Change-Id: I00bceb9de2009963c91e5102564c05c31ac1ad78
2014-04-17 08:40:47 -07:00
Jim Bankoski
e890c2579b add a context tree structure to encoder
This patch sets up a quad_tree structure (pc_tree) for holding all of
pick_mode_context data we use at any square block size during encoding
or picking modes.  That includes contexts for 2 horizontal and 2 vertical
splits, one none, and pointers to 4 sub pc_tree nodes corresponding
to split.  It also includes a pointer to the current chosen partitioning.

This replaces code that held an index for every level in the pick
modes array including:  sb_index, mb_index,
b_index, ab_index.

These were used as stateful indexes that pointed to the current pick mode
contexts you had at each level stored in the following arrays

array ab4x4_context[][][],
sb8x4_context[][][], sb4x8_context[][][], sb8x8_context[][][],
sb8x16_context[][][], sb16x8_context[][][], mb_context[][], sb32x16[][],
sb16x32[],  sb32_context[], sb32x64_context[], sb64x32_context[],
sb64_context

and the partitioning that had been stored in the following:
b_partitioning, mb_partitioning, sb_partitioning, and sb64_partitioning.

Prior to this patch before doing an encode you had to set the appropriate
index for your block size ( switch statement),  update it ( up to 3
lookups for the index array value) and then make your call into a recursive
function at which point you'd have to call get_context which then
had to do a switch statement based on the blocksize,  and then up to 3
lookups based upon the block size to find the context to use.

With the new code the context for the block size is passed around directly
avoiding the extraneous switch statements and multi dimensional array
look ups that were listed above.   At any level in the search all of the
contexts are local to the pc_tree you are working on (in?).

In addition in most places code that used to call sub functions and
then check if the block size was 4x4 and index was > 0 and return
now don't preferring instead to call the right none function on the inside.



Change-Id: I06e39318269d9af2ce37961b3f95e181b57f5ed9
2014-04-17 07:30:55 -07:00
Dmitry Kovalev
68dcddee7f Merge "Cleaning up vp9_init_second_pass()." 2014-04-16 19:27:49 -07:00
Dmitry Kovalev
2c8c1f5370 Replacing cpu_used with speed in VP9_CONFIG.
Change-Id: I86b85b5c11388e84a48f8936330c0d920df5d1f0
2014-04-16 18:31:42 -07:00
Jingning Han
b6ec6930e5 Remove redundant buffer initialization and mode_info assignments
There is no need to initialize source/dst frame buffers at frame
level. These will be done at block coding stage. This commit hence
removes the redundant operations.

Change-Id: I11d9f2556058c6205c8e58ed53e31f78622c41b7
2014-04-16 17:00:27 -07:00
Jingning Han
ef2f6dae6f Merge "Enable more precise background detection for partition decision" 2014-04-16 17:00:13 -07:00
Paul Wilkins
085f76e535 Add experimental VBR adaptation method.
Add code to monitor over and under spend and
apply limited correction to the data rate of subsequent
frames. To prevent the problem of starvation or overspend
on individual frames (especially near the end of a clip) the
maximum adjustment on a single frame is limited to a %
of its un-modified allocation.

Change-Id: I6e1ca035ab8afb0c98eac4392115d0752d9cbd7f
2014-04-16 15:56:51 -07:00
Dmitry Kovalev
961594c9c5 Cleaning up vp9_init_second_pass().
Change-Id: Ibf360fe0728e07de448e77e3841c49eb25d3ba2d
2014-04-16 15:17:53 -07:00
Paul Wilkins
fdc198c9de Merge "Remove old activity masking code." 2014-04-16 14:24:25 -07:00
Dmitry Kovalev
8325464afa Merge "Renaming VP9D_CONFIG to VP9DecoderConfig." 2014-04-16 14:21:32 -07:00
Dmitry Kovalev
833ad89f72 Merge "Adding sad function generation macros." 2014-04-16 14:07:46 -07:00
Jingning Han
e88a280573 Enable more precise background detection for partition decision
This commit compares the current original frame to the previous
original frame at 64x64 block level and decides if the entire
block belongs to background area. If it is in the background area,
skip non-RD partition search and copy the partition types of the
collocated block in the previous frame.

For vidyo1 in the rtc set, this makes the speed -5 coding speed
about 8% faster. The overall compression performance is down by
1.37% for rtc set.

Change-Id: Iccf920562fcc88f21d377fb6a44c547c8689b7ea
2014-04-16 14:00:52 -07:00
Yaowu Xu
4ec5569f50 Merge "Add consts in set_fixed_partitioning()" 2014-04-16 12:55:48 -07:00
Yaowu Xu
b12014b860 Merge "Refactor common code into a function" 2014-04-16 12:29:12 -07:00
Paul Wilkins
e434d08fd9 Remove old activity masking code.
Delete code relating to the old VP8_TUNE_SSIM flag
as this code does not currently work and is largely made
redundant in VP9 by the various AQ modes.

Change-Id: I71f28e1f680573d296422254489000678552b17b
2014-04-16 12:22:41 -07:00
Paul Wilkins
18072d29f9 Merge "Fix rate control bug." 2014-04-16 12:07:42 -07:00
Alex Converse
0d8e4f91a2 Unfork rd_thresh sub8x8.
Remove duplicate rd_thresh code introduced when vp9_rd_pick_inter_mode_sub8x8()
was forked from vp9_rd_pick_inter_mode_sb().

Change-Id: I3c9b7143d182e1f28b29c16518eaca81dc2ecfed
2014-04-16 10:23:37 -07:00
Paul Wilkins
658daf36fa Fix rate control bug.
Fix rate control bug whereby the rate factor heuristics
were being updated on arf overlays causing a rate surge
for a few frames followed by a corrective drop.

This fix eliminates many of the overshoot problems that
we were seeing on hard clips (even without applying
stricter vbr rate control) and also helps quality on
almost all clips with some hard clips improving by >5%.

Overall quality results measured at speed 2.
Derf  +1.78% opsnr , +2.44% SSIM
Stdhd +2.41% opsnr, +2.85% SSIM

Change-Id: I2369df6295c2705963fa6307877f6acb304bcc39
2014-04-16 10:13:06 -07:00
Dmitry Kovalev
92ebef119a Merge "Renaming av_per_frame_bandwidth to avg_frame_bandwidth." 2014-04-15 23:00:16 -07:00
Dmitry Kovalev
617a367c54 Merge "Consistent mode names." 2014-04-15 22:59:37 -07:00
Dmitry Kovalev
4e9529cb24 Renaming av_per_frame_bandwidth to avg_frame_bandwidth.
Just to be consistent with min_frame_bandwidth & max_frame_bandwidth names.

Change-Id: I36702c708cba9ad1a5c36393f37758a2edeadb90
2014-04-15 18:36:01 -07:00
Dmitry Kovalev
003376fc8b Merge "Adding scale_if_required() function." 2014-04-15 17:55:13 -07:00
Dmitry Kovalev
7a85ba8ac3 Adding sad function generation macros.
Change-Id: If6f013835b69ae61b0a0c6006fe0955303f579a5
2014-04-15 17:46:45 -07:00
Dmitry Kovalev
cb9550eea0 Merge "Adding get_search_range() function." 2014-04-15 16:39:27 -07:00