Age | Commit message (Collapse) | Author |
|
Add MACRO VP9_DIST_SCALE_LOG2 represents distortion's log scale
Change-Id: Ic496a31e6d3f04626510f8c4661af464a002e361
|
|
The mv_cost contains mv_mode cost and mv_diff cost.
The mv_mode cost is inferred from default_inter_mode_probs.
The mv_diff cost is estimated used the log2 function.
Change-Id: I62702bdb5c3fec018e3302765f5dd749fceebc12
|
|
Print error message and assert when ref_frame_idx is invalid
Change-Id: Ice6d06c53ddae0a77d578671b896c4e4d04d5366
|
|
Use kMvPreCheckLines in the for loops.
Change-Id: I60204c6294560d47421a8621d907dfa95c9dde18
|
|
Change-Id: Ib9fdf65e263dbaace8d4c86766eba2c6f35f652b
|
|
The function predicts the mv_mode for each prediction block in
diagonal order.
Change-Id: I7dcfcdb317ffa334cb40bb435baa71b5db62252b
|
|
This function evaluate the impact of setting NEW_MV_MODE on a
block and its neighbor blocks.
Change-Id: Ie0b2c67bdc5cd14e0efd8ebc5dc3f3f873bcf3fe
|
|
This function compute the rd cost for each mv_mode and return the
one with minimum rd cost.
eval_mv_mode()
Evaluate the rd cost for a given mv_mode.
Change-Id: Ia1b3ec7e1dd538e443e1bc79f2cab352408cd0a0
|
|
Given an mv_mode, get_mv_dist() obtains the mv and uses it
to compute distortion.
Change-Id: I58b8c7137b99c2736d651e678f0cd013dbd94877
|
|
Given an mv_mode, this function will return the corresponding mv.
find_ref_mv()
A helper function finds the nearest and near mvs from the neighbor
blocks.
select_mv_arr[]
An array used for storing selected motion vectors.
Change-Id: Ibeb434007f65b2c6e461360f208d99455e76bcbf
|
|
This function sets src and pre buffer of MACROBLOCK
and MACROBLOCKD.
Will add static decorator once this function is called.
Change-Id: I0fb46784dd97839e4d87c9e027fe8c59683e70d8
|
|
Add static decorator to it as well.
Change-Id: I6c89fae456561b6975ab49af139a45a7483507c6
|
|
This commit introduces a new speed feature that determines the
SEARCH_METHOD used by temporal filter when doing 16x16 block on
full_pixel_motion_search. On speed 0, the most exhaustive method MESH is
used. On speed 1 and above, a faster method NSTEP is used.
Performance:
| AVG_PSNR | AVG_SPDUP | AVG_SPDUP:AVG_PSNR
MISRES | 0.007% | 2.818% | 402:1
HDRES | 0.004% | 4.897% | 1224:1
In the case of midres, there is a small quality gain of -0.021% on
OVR_PSNR.
Performance measurement is done on speed 1 with auto_alt_ref=1.
Quality is measured on full midres set over 60 frames. Speed is measured
on 5 midres clips over 4 bitrates over 30 frames.
STATS_CHANGED
Change-Id: Ic1879d2237f8734529e194767a6cf5e43e20b47b
|
|
* changes:
Correct pyramid_mv_arr's memory size
Adjust lambda with bsize in build_motion_field()
Free pyramid_mv_arr properly
|
|
|
|
The current unit tests for temporal filtering only tests single
channel version of temporal filter. Since VP9 currently uses both luma
and chroma channel information for temporal filtering on low bitdepth,
there is no unit case in this scenario.
This commit adds some basic unit tests to facilitate further development
on temporal filtering.
BUG=webm:1591
Change-Id: Id38ceba5305865d7148e9b2bc636acddae54d6c2
|
|
|
|
|
|
|
|
BUG=webm:1584
Change-Id: Ifdebf33356abcc6869f695d129165ba17e042dcd
|
|
BUG=webm:1584
Change-Id: I4cbfafe8ea72b3d4523aabcaed4848fa29bb19fe
|
|
For svc with frame dropping in full_superframe_drop or
constrained dropped mode: the buffer level for a given layer
may be capped from increasing too much. This is because that layer
may be dropped even though its buffer is stable (the dropped is forced
due to underflow in other layers in full/constrained svc-drop mode).
This capping is needed to prevent decrease in qp over consecutive
frame drops.
The capping already exists and has been used, but this change
introduce an error that prevented its usage:
https://chromium-review.googlesource.com/c/webm/libvpx/+/1330875
The fix here is to also cap the bits_off_target as well, since after
the change mentioned above, its the bits_off_target that is used to
update buffer on next frame (which in turn affects qp for next frame/layer).
Change-Id: Ifdab5d478e91cce20ecec51faa574eed375ee36b
|
|
|
|
|
|
After encoding key frame on base spatial layer,
if the overshoot is significant, reset the
avg_frame_qindex[INTER] on base spatial layer for
all temporal layers.
This forces the active_worst_quality to increase
on subsequent frames/layers and reduces frame dropping.
Change-Id: I53a3cd14131d69120e59a649b7ed1bfde3e940ee
|
|
|
|
printf -> assert(0 & ...)
Change-Id: I7bd6c0127ad816e8a5b555e86d54961b33da2bc4
|
|
Change-Id: Ia00570a00b871eb1f929bd7e0af221d2c0b5ed21
|
|
|
|
Blocking libvpx update into google3.
Change-Id: I18c29f0a68568e65ae5e0c7fcdb5097b08b586a6
|
|
When CONFIG_VP9_HIGHBITDEPTH is enabled,
lowbd modules were called in the hbd path.
This patch fixes the issue.
Change-Id: I59820180fbed120697b6ef1fc1a02be0d35ac1d5
|
|
Change-Id: Id99ca6fc846ebe11a9f5363da4e6449e976303a1
|
|
Change-Id: I34cdbc6e8625c0de8595860af02ca277c3448a19
|
|
Change-Id: Iac7fee461759599a7e167f8e6716ae3c6414a7d1
|
|
Only used in a local array. Similar to lowbd iadst16 naming.
BUG=webm:1584
Change-Id: Ie07c2fb9599fb54fab221e5c0ccec0e95d69b893
|
|
* changes:
Add full_pixel_exhaustive_new
Add sse cost in vp9_full_pixel_diamond_new
Use motion field for mv inconsistency in mv search
|
|
Add rtcd headers and make local functions static.
BUG=webm:1584
Change-Id: Ic19aec1dc90703b0b89d1092baee487d0fd0cb4e
|
|
BUG=webm:1584
Change-Id: I719c64734f4eae07def2d700006834a2420891a7
|
|
Values in [q]coeff1 were not correctly stored. This caused a segfault
in the sse2 libvpx__nightly_optimization jobs.
Broken in:
commit 85032bac388917916f7a149173db8b34e93e8f6e
Author: Johann <johannkoenig@google.com>
Date: Fri Dec 21 00:27:00 2018 +0000
fdct_quant: resolve missing declarations
BUG=webm:1584
Change-Id: I5f5fad34ec5e32023f5b40ff3691125754c11ced
|
|
|
|
Before this patch, if mi_col_end was odd, then the for loop for 'mb_col'
was looping once LESS than it should have been.
For example, if mi_col_end = 47, then the loop was terminating when
mb_col == 23. However, the correct behavior would be to terminate when
mb_col == 24.
The issue was introduced in:
https://chromium-review.googlesource.com/c/webm/libvpx/+/423279
This can lead to many of the stats being inaccurate, for such videos
(with mi_col_start/end having an odd value).
As an example:
Even for very static content, fp_acc_data->intercount can never reach the
same value as num_mbs. And in turn, pcnt_inter can never reach the value 1
(that is, 100%). This would lead to very static videos NOT being marked
static, and encoded like regular videos.
Note: this is just one possible effect based on observation. Other
issues are also possible based on other stats.
Improvement on some test clips:
-------------------------------
- One test clip saw a gain of -2.580% in VBR mode (and -3.153% in Q
mode). The reason for improvement: a wrongly detected scene cut was
avoided due to corrected value in 'this_frame->pcnt_inter'.
- Some very static clips correctly marked as having 100% zero motion.
This avoided addition of unncecessary alt-refs, thereby reducing the
bitrate.
BDRate (PSNR) on regular sets (VBR mode):
-----------------------------------------
lowres: 0.0
midres: -0.027 (some clips were better/worse, but I double checked that
changes were as expected, given correction in stats calculation).
hdres: 0.0
STATS_CHANGED for the types of videos described above.
Change-Id: Ifbc2c0c0815d23ec4015475680bdf8886f158dcc
|
|
Add full_pixel_exhaustive_new() and exhuastive_mesh_search_new().
The two functions are variants from full_pixel_exhaustive() and
exhuastive_mesh_search().
In the new versions, we use mv inconsistency in place of
mv entropy cost.
Change-Id: Icec98e6fae24f2771806a3e78276734624ec0303
|
|
Change-Id: I63614e652686557652985bde882889eea9ecbcad
|
|
Change-Id: I25ea05f4bfe3c6f420e967c33763909c979a0d1b
|
|
The smallest block size of motion field is 4x4, but the mi_unit
size is 8x8, therefore the number of units of motion field is
"mi_rows * mi_cols * 4".
Change-Id: I95292904d757705d39b78af5d0cf2d25f376c642
|
|
Change-Id: I43fd61f7946a8a96d444dab5e94a9b01483ffab7
|
|
Use variable block sizes in temporal filtering. Based on prediction
errors of 32x32 or 16x16 blocks, choose the block size adaptively.
This improves the coding performance, especially for HD resolutions.
Speed 1 borg test result:
avg_psnr: ovr_psnr: ssim:
lowres: -0.090 -0.075 -0.112
midres: -0.120 -0.107 -0.168
hdres: -0.506 -0.512 -0.547
Change-Id: I8f774e29ecb2e0dd372b32b60c32d8fa30c013a8
|
|
This reverts commit 02b3ef7faee5be5ee519856fbb3523d3ab49f6e7.
Reason for revert: fails to build under visual studio
Original change's description:
> Add Tile-SB-Row based Multi-threading in Decoder
>
> Add the multi-thread function that decodes a video row by row instead
> of a tile at a time. Create a job queue for queueing all parse and recon jobs.
> Each SB row of a tile is a job.
>
> Performance Improvement:
>
> Platform Resolution 3 Threads 4 Threads
> ARM 720p 36.81% 18.37%
> 1080p 32.27% 14.76%
>
> ARM Improvement measured on Nexus 6 Snapdragon 805 Quad-core @ 2.65 GHz
>
> Change-Id: I3d4dd7a932fc2904c90d9546b2de99c809afd29e
BUG=webm:1587
Change-Id: Ia4c8f5128922a205cd9fd83aaef8a2e73764d4a7
|
|
|
|
BUG=webm:1584
Change-Id: I43d051c538bf4a6f6210eefa398dc0901ab8d157
|