summaryrefslogtreecommitdiff
path: root/vp9/vp9_cx_iface.c
AgeCommit message (Collapse)Author
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
2015-03-09Merge "Reduce default overshoot/undershoot params to 25"Deb Mukherjee
2015-03-05Reduce default overshoot/undershoot params to 25Deb Mukherjee
Reducing these values from 100 makes rate control tighter by default. Change-Id: I979409c93e6f19e128898f08ad581bf67eb0f824
2015-03-03Use 8 threads by default for VP9 encodesFrank Galligan
BUG=https://code.google.com/p/webm/issues/detail?id=964 Change-Id: I70679d0f139b8e0962f7e19eb56b34060953e9b0
2015-03-03VP9: turn on tile-columns and frame-parallel-mode by defaultFrank Galligan
Most of the current decoders use tile-based multithreading. Also most of the current decoders need frame_parallel_decoding_mode turned on to enable multithreaded decoding. tile-columns is limited by resolution, so setting to max (6) is fine. BUG=https://code.google.com/p/webm/issues/detail?id=963 Change-Id: I6e7ac3485d96bf0c69e06706cbb326dd38be0020
2015-02-26Fix the encoder to support profile changeYaowu Xu
Change-Id: Iefb928ad1174e274409facfb44f80265ff0f7683
2015-02-23Account for rate error in GF group Q calculation.paulwilkins
When GF group adaptive maxQ is enabled this patch accounts somewhat for accumulated error in the rate control. This improves accuracy quite a bit on many clips especially when there is overshoot. Examples when the overshoot and undershoot command line parameters are set to 100: Hall @ 1200 overshoot is reduced from 67-24%. Akiyo @ 400 undershoot is reduced from 28%-15%. Setting a lower value for undershoot or overshoot still reduces the error further. Impact on metrics is mixed with some gains in average psnr but generally a little lower (e.g. 0.5%) on overall and ssim. The GF group adaptation is still off by default in this patch. Compared to with the head, enabling this mode now gives big average psnr gains on the YT sets (e.g. YT_HD >11.2%), a drop in overall PSNR (YT-HD 3.9%) and a smaller drop or neutral for SSIM. Change-Id: If4b32cd0740d3fb941317b374f9c2951954eee90
2015-02-03Add mutex initialization in encoderYaowu Xu
This resolves the encoder crashes on windows. Change-Id: I159d79014cf9279751e403936ce1f84482ae82da
2015-02-02Merge "Allow larger encoder configurations."Alex Converse
2015-01-30Try again to merge branch 'frame-parallel' into master branch.hkuang
In frame parallel decode, libvpx decoder decodes several frames on all cpus in parallel fashion. If not being flushed, it will only return frame when all the cpus are busy. If getting flushed, it will return all the frames in the decoder. Compare with current serial decode mode in which libvpx decoder is idle between decode calls, libvpx decoder is busy between decode calls. Current frame parallel decode will only speed up the decoding for frame parallel encoded videos. For non frame parallel encoded videos, frame parallel decode is slower than serial decode due to lack of loopfilter worker thread. There are still some known issues that need to be addressed. For example: decode frame parallel videos with segmentation enabled is not right sometimes. * frame-parallel: Add error handling for frame parallel decode and unit test for that. Fix a bug in frame parallel decode and add a unit test for that. Add two test vectors to test frame parallel decode. Add key frame seeking to webmdec and webm_video_source. Implement frame parallel decode for VP9. Increase the thread test range to cover 5, 6, 7, 8 threads. Fix a bug in adding frame parallel unit test. Add VP9 frame-parallel unit test. Manually pick "Make the api behavior conform to api spec." from master branch. Move vp9_dec_build_inter_predictors_* to decoder folder. Add segmentation map array for current and last frame segmentation. Include the right header for VP9 worker thread. Move vp9_thread.* to common. ctrl_get_reference does not need user_priv. Seperate the frame buffers from VP9 encoder/decoder structure. Revert "Revert "Revert "Revert 3 patches from Hangyu to get Chrome to build:""" Conflicts: test/codec_factory.h test/decode_test_driver.cc test/decode_test_driver.h test/invalid_file_test.cc test/test-data.sha1 test/test.mk test/test_vectors.cc vp8/vp8_dx_iface.c vp9/common/vp9_alloccommon.c vp9/common/vp9_entropymode.c vp9/common/vp9_loopfilter_thread.c vp9/common/vp9_loopfilter_thread.h vp9/common/vp9_mvref_common.c vp9/common/vp9_onyxc_int.h vp9/common/vp9_reconinter.c vp9/decoder/vp9_decodeframe.c vp9/decoder/vp9_decodeframe.h vp9/decoder/vp9_decodemv.c vp9/decoder/vp9_decoder.c vp9/decoder/vp9_decoder.h vp9/encoder/vp9_encoder.c vp9/encoder/vp9_pickmode.c vp9/encoder/vp9_rdopt.c vp9/vp9_cx_iface.c vp9/vp9_dx_iface.c This reverts commit a18da9760a74d9ce6fb9f875706dc639c95402f5. Change-Id: I361442ffec1586d036ea2e0ee97ce4f077585f02
2015-01-29Allow larger encoder configurations.Alex Converse
Allow changing colorspace in the encoder and increasing frame size. Change-Id: I8e7c3b891af29ce420a15beb4f6f9c250245b2bb
2015-01-23Revert "Merge branch 'frame-parallel' to enable frame parallel decode in ↵Johann
master branch." This reverts commit bde04ce5039cbcf86c8b34bdb4127e18d7e1d0c7 Change-Id: I053dae04c761b04a36dc239558503905a14d2470
2015-01-22Merge branch 'frame-parallel' to enable frame parallel decode in master branch.hkuang
In frame parallel decode, libvpx decoder decodes several frames on all cpus in parallel fashion. If not being flushed, it will only return frame when all the cpus are busy. If getting flushed, it will return all the frames in the decoder. Compare with current serial decode mode in which libvpx decoder is idle between decode calls, libvpx decoder is busy between decode calls. VP9 frame parallel decode is >30% faster than serial decode with tile parallel threading which will makes devices play 1080P VP9 videos more easily. * frame-parallel: Add error handling for frame parallel decode and unit test for that. Fix a bug in frame parallel decode and add a unit test for that. Add two test vectors to test frame parallel decode. Add key frame seeking to webmdec and webm_video_source. Implement frame parallel decode for VP9. Increase the thread test range to cover 5, 6, 7, 8 threads. Fix a bug in adding frame parallel unit test. Add VP9 frame-parallel unit test. Manually pick "Make the api behavior conform to api spec." from master branch. Move vp9_dec_build_inter_predictors_* to decoder folder. Add segmentation map array for current and last frame segmentation. Include the right header for VP9 worker thread. Move vp9_thread.* to common. ctrl_get_reference does not need user_priv. Seperate the frame buffers from VP9 encoder/decoder structure. Revert "Revert "Revert "Revert 3 patches from Hangyu to get Chrome to build:""" Conflicts: test/codec_factory.h test/decode_test_driver.cc test/decode_test_driver.h test/invalid_file_test.cc test/test-data.sha1 test/test.mk test/test_vectors.cc vp8/vp8_dx_iface.c vp9/common/vp9_alloccommon.c vp9/common/vp9_entropymode.c vp9/common/vp9_loopfilter_thread.c vp9/common/vp9_loopfilter_thread.h vp9/common/vp9_mvref_common.c vp9/common/vp9_onyxc_int.h vp9/common/vp9_reconinter.c vp9/decoder/vp9_decodeframe.c vp9/decoder/vp9_decodeframe.h vp9/decoder/vp9_decodemv.c vp9/decoder/vp9_decoder.c vp9/decoder/vp9_decoder.h vp9/encoder/vp9_encoder.c vp9/encoder/vp9_pickmode.c vp9/encoder/vp9_rdopt.c vp9/vp9_cx_iface.c vp9/vp9_dx_iface.c Change-Id: Ib92eb35851c172d0624970e312ed515054e5ca64