summaryrefslogtreecommitdiff
path: root/vp9/vp9_cx_iface.c
AgeCommit message (Collapse)Author
2017-06-20VP9 level targeting: properly handle max_gf_intervalhui su
Don't overide max_gf_interval if it's not specified. It will be assigned with a default value in vp9_rc_set_gf_interval_range(). BUG=b/62803416 Change-Id: Ide46ce00279ed076865fc54ce98c55a994f0c798
2017-06-07vp9 level targeting: more strict constraint on min_gf_intervalhui su
min_gf_interval should be no less than min_altref_distance + 1, as the encoder may produce bitstream with alt-ref distance being min_gf_interval - 1. BUG=b/38450599 Change-Id: Ifb733daa643ebc668d1b23e1ce92db94b66dabe8
2017-04-24Make the row based multi-threaded encoder deterministicYunqing Wang
This patch followed allow_exhaustive_searches feature modification and continued to modify the encoder to achieve the determinism in the row based multi-threaded encoding. While row-mt = 1 and using multiple threads, the adaptive feature in encoder was disabled, which gave BDRate gain(at speed 1, -0.6% ~ -0.7%; at speed 2, -0.46% ~ -0.59%), but some encoder speed losses(7% ~ 10% at speed 1 and 3% ~ 6% at speed 2). These speed losses were acceptable considering the speed gains obtained from row-mt. Change-Id: I60d87a25346ebc487a864b57d559f560b7e398bb
2017-04-06VP9 motion vector unit testYunqing Wang
To prevent the motion vector out of range bug, added a motion vector unit test in VP9. In the 4k video encoding, always forced to use extreme motion vectors and also encouraged to use INTER modes. In the decoding, checked if the motion vector was valid, and also checked the encoder/decoder mismatch. The tests showed that this unit test could reveal the issue we saw before. Change-Id: I0a880bd847dad8a13f7fd2012faf6868b02fa3b4
2017-02-28Set row_mt to 0 by defaultYunqing Wang
Set row_mt to 0 for now. Change-Id: I922536a6d71a765e435daeaf4d932ef14363d19a
2017-02-27vp9: Rename new_mt to row_mtVignesh Venkatasubramanian
new_mt is a very generic name that will get obsolete soon enough. Since this is exposed as a codec control, renaming it to row_mt to signify row level paralellism. Also renaming the ETHREAD_BIT_MATCH codec control to ROW_MT_BIT_EXACT. Change-Id: Ic7872d78bb3b12fb4cf92ba028ec8e08eb3a9558
2017-02-15Row based multi-threading of encoding stageRanjit Kumar Tulabandu
(Yunqing Wang) This patch implements the row-based multi-threading within tiles in the encoding pass, and substantially speeds up the multi-threaded encoder in VP9. Speed tests at speed 1 on STDHD(using 4 tiles) set show that the average speedups of the encoding pass(second pass in the 2-pass encoding) is 7% while using 2 threads, 16% while using 4 threads, 85% while using 8 threads, and 116% while using 16 threads. Change-Id: I12e41dbc171951958af9e6d098efd6e2c82827de
2017-02-13The bitstream bit match test in multi-threaded encoderYunqing Wang
While the new-mt mode is enabled(namely, allowing to use row-based multi-threading in encoder), several speed features that adaptively adjust encoding parameters during encoding would cause mismatch between single-thread encoded bitstream and multi-thread encoded bitstream. This patch provides a set_control API to disable these features, so that the bit match bitstream is obtained in the unit test. Change-Id: Ie9868bafdfe196296d1dd29e0dca517f6a9a4d60
2017-01-24Multi-threading of first pass stats collectionRanjit Kumar Tulabandu
(yunqingwang) 1. Rebased the patch. Incorporated recent first pass changes. 2. Turned on the first pass unit test. Change-Id: Ia2f7ba8152d0b6dd6bf8efb9dfaf505ba7d8edee
2017-01-13vp9_cx_iface,encoder_encode: check validate_img returnJames Zern
before calling vp9_apply_encoding_flags() which may crash if the resolution was invalid. this is the same change as: c0523090b vp8e_encode: check validate_config return BUG=https://bugzilla.mozilla.org/show_bug.cgi?id=1315288 Change-Id: Icd2aab322422e83d3a778fca6d7789e5000239d7
2017-01-06Add support for VP9 level targetinghui su
Constraints on encoder config: -target_bandwidth is no larger than 80% of level bitrate limit -target_bandwidth * (1 + max_over_shoot_pct) is no larger than 88% of level bitrate limit -min_gf_interval is no smaller than level limit -tile_columns is no larger than level limit Constraints on rate control: -current frame size plus previous three frames' size is no larger than the CPB level limit -current frame size is no larger than 50%/40%/20% of the CPB level limit if it's a key/alt-ref/other frame. Change-Id: I84d1a2d6d6e3c82bfd533b3309ce999cfaba2c8b
2016-11-21Add validation of frame_parallel_decoding_modeYaowu Xu
This is a boolean value that is written into bitstream, any value other than 0 or 1 could have led to unexpected behavior. This commit fix the issue by adding validation of the value to make sure it is boolean. BUG=webm:1339 Change-Id: I2d3e69e8dbefcab9a0db9cb39a91a40ce531c5a1
2016-09-15apply clang-formatclang-format
Change-Id: I501597b7c1e0f0c7ae2aea3ee8073f0a641b3487
2016-08-24Add --alt-ref-aq=<int> optionYury Gitman
In the future this option will activate adaptive quantization special for altref frames. Encoder will create the adaptive quantization map on the basis of lookahead buffers similarity which is the estimate of the future motion compensation performance. Change-Id: Ia0088b3babb0f9a4899c79d8d819947ba5a03df2
2016-08-03vp9/decoder,vp9/*.[hc]: apply clang-formatclang-format
Change-Id: Ic38ea06c7b2fb3e8e94a4c0910e82672a1acaea7
2016-07-25vp9 svc: Enable different speed setting for each spatial layer.jackychen
This change only affects 1 pass cbr svc mode. Change-Id: If0da87bb200f7e7762755340c40c8157cc7a16ca
2016-07-12Fix encoder crashes for odd size inputYaowu Xu
Change-Id: Id5c30c419282369cc8c3280d9a70b34a859a71d8
2016-07-01Make set_reference control API work in VP9Yunqing Wang
Moved the API patch from NextGenv2. An example was included. To try it, for example, run the following command: $ examples/vpx_cx_set_ref vp9 352 288 in.yuv out.ivf 4 30 Change-Id: I4cf8f23b86d7ebd85ffd2630dcfbd799c0b88101
2016-06-17Output frames in first pass for VPX_DL_REALTIME.Tom Finegan
Since combining VPX_DL_REALTIME with VPX_RC_FIRST_PASS is basically nonsense, ignore the user's pass setting when this happens and behave as if the requested encode is a single pass encode. BUG=webm:1233 Change-Id: I5ee4c4e5838c4ca6d24988890aae490b10826db2
2016-06-16Fix ubsan warning: vp9_cx_iface.cYaowu Xu
BUG=https://bugs.chromium.org/p/webm/issues/detail?id=1219 Change-Id: I77584af8b9e25db484d9ced6013da3163a9592c0
2016-06-15Add vp9 encoder API VP9E_GET_LEVEL to provide bitstream levelhui su
Change-Id: I1ef3df0192491035728fe9d5eb25cc66dc2965de
2016-05-11Fix typos in control function for VP9E_SET_TARGET_LEVELhui su
Change-Id: Ic797c6be579c3434681a5e9dbb3900ae49c43958
2016-05-10Add VP9 encoder API for level specification.hui su
Add control API VP9E_SET_TARGET_LEVEL that allows the encoder to control the output bitstream level and/or keep level related statistics. Usage: 255 do not care about level (default) 0 keep level related stats only 10 target for level 1 11 target for level 1.1 . . . 62 target for level 6.2 Usage for vpxenc: --target-level=0/255/10/11... Change-Id: I31d1aeca19358b893e7577b4e63748c8e614034a
2016-03-24Merge "Add a TODO for using tile rows while encoding with multiple threads"James Zern
2016-03-23Merge "Allows sub-second frame rates in vp9"Johann Koenig
2016-03-23Add a TODO for using tile rows while encoding with multiple threadsYunqing Wang
Added a TODO in vp9_cx_iface.c. Change-Id: Ib987f20cab8417340a23ae676616de1df48e8a12
2016-03-22Prevent encoder crash caused by row tile dependenciesYunqing Wang
In multi-thread case, the encoder may crash if using encoder option tile-rows > 0. To prevent that, force tile-rows=0 in this situation. This is a workaround for WebM issue 1095: https://bugs.chromium.org/p/webm/issues/detail?id=1095 The further fix can be done by adding synchronizations after a tile row is encoded. But this will hurt multi-threaded encoder performance. So, it is recommended to use tile-rows=0 while encoding with threads > 1. Change-Id: I656cbcc200f8d0410d09530e7981ad8f32fe7bc9
2016-03-12Allows sub-second frame rates in vp9Johnny Klonaris
This is the identical change submitted for vp8 here: https://chromium-review.googlesource.com/#/c/274107/ Tested this change on Mac OSX (10.10) and Linux (Linux Mint 17 / Ubuntu 14.04) and in both cases: - downloaded and compiled latest source for libvpx and ffmpeg - confirmed ffmpeg would build sub-second frame rate webm files via the previous patch - confirmed ffmpeg would *not* build fps < 1 for vp9 - made this change, recompiled libvpn and ffmpeg - confirmed ffmpeg would now create the same webm with fps < 1 - confirmed the resulting file would play and was vp9 (e.g. would not play in Firefox (Linux version complained it was VP9 but mostly could play it) or older vlc, etc., but does play just fine in Google Chrome and a newer version of vlc. Sorry I didn't catch this last time - but this seems a solid change and it's handy to be able to create frame rates less than one second. -jk Change-Id: I38fa32148de8c4c359f228cf08b9a4b83b5a52fb
2016-02-25vp9: set kf_max_dist to a reasonable default (128)James Zern
the same as vp8, with the same reasoning from: 2a0d7b1 Reduce the default kf_max_dist to 128. see also: https://trac.ffmpeg.org/ticket/4904 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815673 + restore vpxenc behavior of taking the library default rather than forcing 5s This change also exposes an issue with one-pass svc in cbr mode, keep the old default in datarate_test.cc for now. Change-Id: Id6d1244f42490b06fefc1a7b4e12a423a1f83e88
2016-02-16vp9,encoder: relocate setjmpJames Zern
move to encoder_encode() as vp9_get_compressed_data() allocates data and would require some modification to make its error return meaningful. Change-Id: I8ddc390a1441afd0ff937842fa4ad1053c956133
2016-02-16vp9_cx_iface,encode: remove redundant cpi checkJames Zern
this is allocated in init(), a NULL pointer on encode() should be treated as a failure. Change-Id: I3f55ea4a98be616bb5ab74d95ce4a3d6262e734a
2015-11-23vp9-svc: Fix to allow setting qp-max/min per spatial and temporal layer.Marco
Change-Id: Ic0ec32c1d7f7c08c9f956592dccbfd9060b1f624
2015-10-20Merge "vp8cx: remove deprecated reference/entropy controls"James Zern
2015-10-16vp8cx: remove deprecated reference/entropy controlsJames Zern
VP8E_UPD_ENTROPY, VP8E_UPD_REFERENCE and VP8E_USE_REFERENCE have been deprecated since the initial public release Change-Id: Ied16b441eec13434d85f1ab115d49ccaf5f2f7b0
2015-10-16Add a new enum type vpx_color_range_tYaowu Xu
to make meaning of color_range obvious. Change-Id: I303582e448b82b3203b497e27b22601cc718dfff
2015-10-12VP9-SVC: Bugfix to allow skipping lower layer(s) encoding.Marco
The setting of svc->spatial_layer_to_encode was missing in VP9E_SET_SVC_LAYER_ID. Change-Id: I015b1a64adb9ef2644d6477a02d9d9364c8462b9
2015-10-06Add first_spatial_layer_to_encode to SVC.Marco
Use the existing VP9_SET_SVC control to set the first spatial layer to encode. Since we loop over all spatial layers inside the encoder, the setting of spatial_layer_id via VP9_SET_SVC has no relevance. Use it instead to set the first_spatial_layer_to_encode, which allows an application to skip encoding lower layer(s). Change only affects the 1 pass CBR SVC. Change-Id: I5d63ab713c3e250fdf42c637f38d5ec8f60cd1fb
2015-09-25vp9/10: improve support for render_width/height.Ronald S. Bultje
In the decoder, map this to the output variable vpx_image_t.r_w/h. This is intended as an improved version of VP9D_GET_DISPLAY_SIZE, which doesn't work with parallel frame decoding. In the encoder, map this to a codec control func (VP9E_SET_RENDER_SIZE) that takes a w/h pair argument in a int[2] (identical to VP9D_GET_DISPLAY_SIZE). Also add render_size to the encoder_param_get_to_decoder unit test. See issue 1030. Change-Id: I12124c13602d832bf4c44090db08c1009c94c7e8
2015-09-17Add SVC codec control to set frame flags and buffer indices.Marco
Add SVC codec control to set the frame flags and buffer indices for each spatial layer of the current (super)frame to be encoded. This allows the application to set (and change on the fly) the reference frame configuration for spatial layers. Added an example layer pattern (spatial and temporal layers) in vp9_spatial_svc_encoder for the bypass_mode using new control. Change-Id: I05f941897cae13fb9275b939d11f93941cb73bee
2015-09-16Add support for color-range.Ronald S. Bultje
In decoder, export (eventually) into vpx_image_t.range field. In encoder, use oxcf->color_range to set it (same way as for color_space). See issue 1059. Change-Id: Ieabbb2a785fa58cc4044bd54eee66f328f3906ce
2015-07-14Fixes part of merge regression from adding arf parameters.Debargha Mukherjee
From Change Ibf0c30b72074b3f71918ab278ccccc02a95a70a0 There is still an issue relating to one animated test clip with repeat patterns where this change effectively increase the default maximum arf interval by +1. This can be examined seperately. Change-Id: Idd01d5480fc45202d8a059a0c3afc0997cc5bdd1
2015-07-06Expose params min-gf-interval/max-gf-intervalDebargha Mukherjee
Adds two new vp9 parameters --min-gf-interval and --max-gf-interval to enable testing based on frequency of alt-ref frames. Also adds a unit-test to test enforcement of min-gf-interval. For both these parameters the default value is 0, which indicates they are picked by the encoder, based on resolution and framerate considerations. If they are greater than zero, the specified parameter is honored. (Additional note by paulwilkins) Note that there is a slight oddity in that key frames are also GFs and considered part of GF only group. However they are treated as not being part of an arf group because for arf groups the previous GF is assumed to be the terminal or overlay frame for the previous group. (end note) Change-Id: Ibf0c30b72074b3f71918ab278ccccc02a95a70a0
2015-06-03Remove ABI check for 1 pass CBR SVC.Marco
Remove the ABI check for the controls needed for SVC 1 pass CBR mode. Bump up the ABI version. Change-Id: I35b79ee010e14af83c6d1e801d574deaaa2fc7eb
2015-06-02Vidyo patch: Rate control for SVC, 1 pass CBR mode.Marco
-Make Rate control work for SVC 1 pass CBR mode. -Added temporal layering mode. -Fixed bug in non-rd variance partition. -Modified/updated the sample encoders (vp9_spatial_svc_encoder, vpx_temporal_svc_encoder). -Added datarate unittest(s) for 1 pass CBR SVC. Change-Id: Ie94b1b68a56ea1267b5087c625e5df04def2ee48
2015-03-24VP9E_GET_ACTIVE_MAP API function.Alex Converse
This is useful when aq mode 3 (cyclic refresh) reactivates segments for refresh. Change-Id: I3ad1d9410b899ede393d82bb8db14e2da4d84eca
2015-03-20vp[89]_cx_iface.c: remove obsolete ABI checksJames Zern
Change-Id: I49a7017e8adc18ff03d748cb328814a8a3e1bcf6
2015-03-19put spatial svc behind an ABI checkJames Zern
this removes the CONFIG_* checks from public headers, but means '--enable-experimental --enable-spatial-svc' builds will fail without a local change to the ABI in vpx_encoder.h. this should be all right for testing this experiment. Change-Id: Ief55e7b9d1e8332cfce990275e04c29b30af0c4a
2015-03-16Fix external resize memory issues.Alex Converse
These were uncovered by the chromoting perftest. Change-Id: Ia5a90fd1718ff757c1484decf3861295260e6722
2015-03-13Provide information on codec controlsYaowu Xu
The commit updates the comments in vp8cx.h to make it clear which codec support each of codec control functions. Change-Id: Ibf876e289d4325bbb61ce19311da60d384624c2f
2015-03-12Rename a vp9 only control with vp9e prefixYaowu Xu
Also updated comments and doc to make it clear that the control is supported in VP9 only. Change-Id: I6f120b65135fc1185695e9e3dc29fbe0d430824b