summaryrefslogtreecommitdiff
path: root/vp9/vp9_cx_iface.c
AgeCommit message (Collapse)Author
2014-01-22Tidy up comments & remove commented out code.Adrian Grange
Change-Id: I46dd5ce06f36362c6274511cd1531d93926aa9bc
2014-01-09Merge "Renaming 'Sharpness' to 'sharpness'."Dmitry Kovalev
2014-01-08Renaming 'Mode' to 'mode'.Dmitry Kovalev
Change-Id: I6cdd670d66288dbd66228f38bba6b30502d25362
2014-01-08Renaming 'Sharpness' to 'sharpness'.Dmitry Kovalev
Change-Id: I54513dc3b3321e0c0bb6b15ea5c34085ed80b4a4
2013-12-27Removing vpx_codec_vp9x_cx and internal experimental flag.Dmitry Kovalev
vpx_codec_vp9x_cx is not used internally. Experimental flag from vp9_extracfg is also not really used. YUV 4:4:4 just works after these changes (you have to specify --profile=1 for the encoder). Change-Id: Ib1c8461d0d19d159827e005efe868f891eea0140
2013-12-18Updates for 1-pass CBR rate control.Marco Paniconi
Adjustments based on buffer level, frame dropper. Change-Id: Iaa85b570493526a60c4b9fb7ded4c0226b1b3a33
2013-12-12vp9 asserts: fix compile warningJames Zern
string literal to int within an assert Change-Id: I0c889256b67a078e6e2a79577f0b7ae084243258
2013-12-11Changes interfaces to vp9_get_compressed_data fnDeb Mukherjee
Silences some lint warnings in previous patches Change-Id: I04bf47ebe7e63a95fd322719a3154e589c115d78
2013-12-04Disable --tune=ssim for vp9Yaowu Xu
The feature is not yet supported. Change-Id: If46382302d2077b20670391b4a03017045a104f5
2013-11-15vpxenc: add --aq-mode flag to control adaptive quantizationGuillaume Martres
Change-Id: I57e1ad4bed3487df12893ced77c49093f8755706
2013-11-06Merge "Move SVC per-frame loop from sample app into libvpx proper"Ivan Maltz
2013-11-06Move SVC per-frame loop from sample app into libvpx properIvan Maltz
SVC multiple layer per frame encoding is invoked with vpx_svc_init and vpx_svc_encode. These interfaces are designed to be invoked from ffmpeg. Additional improvements: - make dummy frame handling a bit more explicit - fixed bug with single layer encodes - track individual frame sizes and psnrs instead of averages - parameterized quantizer, 16th scalefactors, more logging, - enabled single layer encodes to generate baseline - include new mode for 3 layer I frame with 5 total layers Change-Id: I46cfa600d102e208c6af8acd6132e0cc25cda8d4
2013-10-29Fixing clang warning.Dmitry Kovalev
Warning was: "implicit conversion from enumeration type 'VPX_SCALING_MODE' (aka 'enum vpx_scaling_mode_1d') to different enumeration type 'VPX_SCALING'". Change-Id: I45689e439a8775bc1e7534d0ea1ff7c729f2c7f5
2013-10-24Disable two libvpx APIs for VP9Yaowu Xu
set_active_map() set_roi_map() The APIs need be implemented and tested later, to insure consistency with VP9 codec internals Change-Id: I198124ee318f0883b58d1d36cea3c7ccd742a57e
2013-10-22Revert "Merge "SVC improvements""James Zern
This reverts commit a82001b1cfd688601bbda9b08b3d20e9b46b14d4, reversing changes made to f6d870f7ae6f968bdbc342af80c8f71fa98f2ac2. This commit breaks windows builds and needs some work to fix those and some additional comments. Change-Id: Ic0b0228e36704b127e5e399ce59db26182cfffe7
2013-10-21SVC improvementsIvan Maltz
These changes were originally made in the Stratacaster team-review repository commit e114bffcd82ad74c3696ec58e13c0ac895d6c82d Author: Charles 'Buck' Krasic <ckrasic@google.com> Date: Mon Oct 14 16:52:13 2013 -0700 Make dummy frame handling a bit more explicit, fixing bug with single layer encodes. Squashed commit of the following: commit 1ebbfd976c0fadb02bf1ea562a2d0e3f0206daad Merge: ac468dd 54e88b7 Author: Ivan Maltz <ivanmaltz@google.com> Date: Fri Oct 11 17:29:58 2013 -0700 Move SVC code from vp9_spatial_scalable_encoder to libvpx module accessible from ffmpeg commit 54e88b78b160becc9569fc3c6cb6b0a8c95dc357 Author: Ivan Maltz <ivanmaltz@google.com> Date: Tue Oct 8 09:08:40 2013 -0700 common svc encoding code for sample app and ffmpeg added svc_encodeframe.c, svc_context.h, svc_test.cc vp9_spatial_scalable_encoder uses vpx_svc_encode commit 5616ec8e2e3d3e8d277333d8a9242f6c70151162 Merge: 4528014 e29137d Author: Ivan Maltz <ivanmaltz@google.com> Date: Tue Oct 8 08:47:58 2013 -0700 Merge branch 'master' into stratacaster commit 45280148450b1f3d61e390df8aadedf85cd5bce1 Merge: bb2b675 1ab60f7 Author: Sujeevan Rajayogam <sujee@google.com> Date: Fri Oct 4 10:22:31 2013 -0700 Merge branch 'master' into stratacaster commit bb2b675e595dc9bfc8551e963edf56800c3aea61 Author: Sujeevan Rajayogam <sujee@google.com> Date: Wed Oct 2 12:37:26 2013 -0700 Track individual frame sizes and psnrs instead of averages. commit c6d303b714795c81e7ceb4173967115c9f8ff5b7 Merge: fa87df9 3583087 Author: Sujeevan Rajayogam <sujee@google.com> Date: Fri Sep 27 10:05:35 2013 -0700 Merge branch 'master' into stratacaster commit fa87df94fba923d9f7aeb8ae20c6e15f777e00b5 Merge: bf22d71 3c465af Author: Sujeevan Rajayogam <sujee@google.com> Date: Thu Sep 26 16:10:31 2013 -0700 Merge branch 'master' into stratacaster commit bf22d7144895a82e0c348ac177c8a261b9e2b88e Author: Sujeevan Rajayogam <sujee@google.com> Date: Thu Sep 26 11:10:34 2013 -0700 Parameterized quantizer, 16th scalefactors, more logging, enabled single layer encodes to generate baseline. commit ceffd7e6025b765f9886b5ea0f324248aa37e327 Author: Sujeevan Rajayogam <sujee@google.com> Date: Thu Sep 19 10:04:49 2013 -0700 - Include new mode for 3 layer I frame with 5 total layers. - Refactor svc api. Change-Id: Ie4d775e21e006fa597d884c59488dc999478e9b5
2013-10-16Initial 1-pass.Marco Paniconi
Change-Id: I58c5436f5c95f6012fb2891cd2a02f76e4870b6a
2013-10-10Fix typo in comment messageJingning Han
Change-Id: Ifef756a3a91423bb9f5411f06fa092027be21ecf
2013-10-04cpplint issues resolved vp9/vp9_cx_iface.cJim Bankoski
Change-Id: I4f66d6f1aebe7d47ad01cda9b03c600725240680
2013-09-26Fixing warning generated by gcc.Dmitry Kovalev
vp9/vp9_cx_iface.c:92: warning: type qualifiers ignored on function return type Change-Id: I6f130e280e2db261506a4af8ce11fc788ad13198
2013-09-22Improves constant qual, constrained qual turned onDeb Mukherjee
Adds modeled functions to decide the qp for altref frames in constant q mode similar to other functions in use in bitrate mode. Also turns on the constrained quality mode (end-usage=2) option which was turned off before. Basic testing shows the mode works in principle, to cap bitrate to the target-bitrate specified, while allowing lower bitrate depending on the cq-level specified. The mode will need to be improved over time. Results for constant quality vs bitrate control mode: derfraw300/fullderfraw: +3.0% at constant quality over bitrate control. fullstdhdraw: +4.341% stdhdraw250: +5.361% Change-Id: If5027c9ec66c8e88d33e47062c6cb84a07b1cda9
2013-09-19fix integer overflow errorsYaowu Xu
Change-Id: I76f440a917832c02d7a727697b225bac66b99f56
2013-09-17Silence a bunch of MSVC warningsYaowu Xu
Change-Id: I16633269582a640809dca27572bbe99efa6369fc
2013-09-12clang warnings : ref frame enum mismatchJim Bankoski
Convert from refframe_type_t to VP9_REFFRAME Change-Id: Iff4043c3fdb3e1c9c2b412bdffd5da8ed913ec13
2013-09-09Merge "API extensions and sample app for spacial scalable encoder"Ivan Maltz
2013-09-09API extensions and sample app for spacial scalable encoderIvan Maltz
Sample app: vp9_spatial_scalable_encoder vpx_codec_control extensions: VP9E_SET_SVC VP9E_SET_WIDTH, VP9E_SET_HEIGHT, VP9E_SET_LAYER VP9E_SET_MIN_Q, VP9E_SET_MAX_Q expanded buffer size for vp9_convolve modified setting of initial width in vp9_onyx_if.c so that layer size can be set prior to initial encode Default number of layers set to 3 (VPX_SS_DEFAULT_LAYERS) Number of layers set explicitly in vpx_codec_enc_cfg.ss_number_layers Change-Id: I2c7a6fe6d665113671337032f7ad032430ac4197
2013-09-06Support a constant quality mode in VP9Deb Mukherjee
Adds a new end-usage option for constant quality encoding in vpx. This first version implemented for VP9, encodes all regular inter frames using the quality specified in the --cq-level= option, while encoding all key frames and golden/altref frames at a quality better than that. The current performance on derfraw300 is +0.910% up from bitrate control, but achieved without multiple recode loops per frame. The decision for qp for each altref/golden/key frame will be improved in subsequent patches based on better use of stats from the first pass. Further, the qp for regular inter frames may also be varied around the provided cq-level. Change-Id: I6c4a2a68563679d60e0616ebcb11698578615fb3
2013-09-04make vp9 postproc a config optionJim Bankoski
Vp9 postproc is disabled for now as its not been shown to help and may be merged with vp8. Change-Id: I25620d6cd34c6e10331b18c7b5ef7482e39c6057
2013-08-21Make "good" quality 2-pass vpxenc encoding defaultDeb Mukherjee
Currently, the best quality mode in VP9 is not very well developed, and unnecessarily makes the encode too slow. Hence the command line default is changed to "good" quality. Also, the number of passes default is changed to 2 passes as well, since 1-pass encoding is not very efficient in VP9. Besides, a number of VP9 defaults are set to the currently recommended settings. With these changes, vpxenc run with --codec=vp9 --kf-max-dist=9999 --cpu-used=0 should work about the same as our borg results. Note when the --cpu-used=0 option is dropped there will be a slight difference in the output, because of a difference in the cpu-used value for the first pass. Specifically, the default when unspecified is to use cpu_used=1 for the first pass and cpu_used=0 for the second pass. But when specified, both passes will use the cpu-used value specified. Note that this also changes the default for VP8 as being "good" but other options stay unchanged. Change-Id: Ib23c1a05ae2f36ee076c0e34403efbda518c5066
2013-07-16use consistent framerate namingJames Zern
s/frame_rate/framerate/g Change-Id: I6fc3e088e419c5f46e3a9390dd8a2cad2677a2fc
2013-07-03Bug fix: set frame_parallel_decoding_modeScott LaVarnway
This patch allows the frame_parallel_decoding_mode flag to be set instead of returning a codec error. Change-Id: I4a1631c625723ac8873290d0fd0211074a87d112
2013-05-22Using vp9 function prefix instead of vp8 inside vp9_cx_iface.c.Dmitry Kovalev
Change-Id: Ia74e7cf626db46ab47a74fe003602a55b949244c
2013-05-15Adding alpha plane to YV12_BUFFER_CONFIG structure.Dmitry Kovalev
Change-Id: I8b2687138df636b2b78c8cc5156e3882b0009de0
2013-05-09Subsampling aware allocs and bitstreamJohn Koleszar
Make framebuffer allocations according to the chroma subsamping factors in use. A bit is placed in the raw part of the frame header for each of the two subsampling factors. This will be moved in a future commit to make them part of the TBD feature set bits, probably only set on keyframes, etc. Change-Id: I59ed38d3a3c0d4af3c7c277617de28d04a001853
2013-04-15Initial addition of multiple ARF framesAdrian Grange
This is work-in-progress, it implements multiple ARF encoding behind an experimental flag. It adds the ability to insert multiple ARF frames into a single ARF group. This patch implements the reordering of the coded frames, and implements a fixed-length coding pattern. It applies a fixed quantizer strategy based on where the frame is in the coding sequence. Further work to modify the rate control strategy is ongoing and will be submitted via a set of future patches. In this first step, each ARF group is recursively bisected and an ARF frame added at that position in the sequence. The recursion continues until ARF frames are within MIN_GF_INTERVAL frames. The code sits behind the "multiple-arf" experimental flag ("CONFIG_MULTIPLE_ARF"). The experimental flag "oneshotq" ("CONFIG_ONESHOTQ") also needs to be enabled for this patch to work correctly. Change-Id: Ie473b05ebb43ac473c0cfb659b2b8042823085e2
2013-03-27Convert g_frame_parallel_decoding to control interfaceJohn Koleszar
Restore ABI compatibility with the master branch. Change-Id: Ic57e7e1de09ab33bd37990e52a63ba7c8f1432a4
2013-03-20Code cleanup: lower case variable names.Dmitry Kovalev
Renaming Width to width, Height to height and Version to version in several structs and function signatures. Change-Id: I084c3f7e747cb2ce3345aff27a3dff9b13a87543
2013-03-13Fix pulsing issue with scalingJohn Koleszar
Updates the YV12_BUFFER_CONFIG structure to be crop-aware. The exiting width/height parameters are left unchanged, storing the width and height algined to a 16 byte boundary. The cropped dimensions are added as new fields. This fixes a nasty visual pulse when switching between scaled and unscaled frame dimensions due to a mismatch between the scaling ratio and the 16-byte aligned sizes. Change-Id: Id4a3f6aea6b9b9ae38bdfa1b87b7eb2cfcdd57b6
2013-03-13Add VP9_GET_REFERENCE controlJohn Koleszar
This is like VP8_COPY_REFERENCE, but returns a pointer to the reference frame rather than a copy of it. This is useful when the application doesn't know what the size of the reference is, as is the case when scaling is in effect. Change-Id: I63667109f65510364d0e397ebe56217140772085
2013-03-12fix superframe index with lagged encodingJohn Koleszar
If a superframe (ARF) is generated while flushing the lagged frames at the end of the clip, the buffer pointer wasn't being properly updated to account for the size of the index, causing the next frame to overwrite the index on the previous frame. Change-Id: Ib158cc8e4183d663bdfb9ba002dd4c98916abdc9
2013-03-05Add 'superframe' indexJohn Koleszar
A 'superframe' is a group of frames that share the same PTS, but have a defined decoding order. This commit adds the ability to append an index to such a group of frames, allowing for random access to the constituent frames. This could be useful for frame-level parallelism or partial decoding in a multilayer scenario. Decoding the stream serially without such an index should work as a fallback, and VP9/TestSuperframeIndexIsOptional verifies that. Change-Id: Idff83b7560e1a7077d8fb067bfbc45b567e78b1c
2013-03-04Support 16K sequence codingJingning Han
Fixed a couple of variable/function definitions, as well as header handling to support 16K sequence coding at high bit-rates. The width and height are each specified by two bytes in the header. Use an extra byte to explicitly indicate the scaling factors in both directions, each ranging from 0 to 15. Tested coding up to 16400x16400 dimension. Change-Id: Ibc2225c6036620270f2c0cf5172d1760aaec10ec
2013-02-20Merge lossless experimentYaowu Xu
Change-Id: I7b7b8d4fda3a23699e0c920d727f8c15d37d43aa
2013-02-13Add support for tile rows.Ronald S. Bultje
These allow sending partial bitstream packets over the network before encoding a complete frame is completed, thus lowering end-to-end latency. The tile-rows are not independent. Change-Id: I99986595cbcbff9153e2a14f49b4aa7dee4768e2
2013-02-12Add tile column size limits (256 pixels min, 4096 pixels max).Ronald S. Bultje
This is after discussion with the hardware team. Update the unit test to take these sizes into account. Split out some duplicate code into a separate file so it can be shared. Change-Id: I8311d11b0191d8bb37e8eb4ac962beb217e1bff5
2013-02-08Merge changes Icd1a2a5a,I204d17a1,I3ed92117 into experimentalJohn Koleszar
* changes: Initial support for resolution changes on P-frames Avoid allocating memory when resizing frames Adds a test for the VP8E_SET_SCALEMODE control
2013-02-08Initial support for resolution changes on P-framesJohn Koleszar
Allows inter-frames to change resolution. Currently these are almost equivalent to keyframes, as only intra prediction modes are allowed, but without the other context resets that occur on keyframes. Change-Id: Icd1a2a5af0d9462cc792588427b0a1f5b12e40d3
2013-02-05[WIP] Add column-based tiling.Ronald S. Bultje
This patch adds column-based tiling. The idea is to make each tile independently decodable (after reading the common frame header) and also independendly encodable (minus within-frame cost adjustments in the RD loop) to speed-up hardware & software en/decoders if they used multi-threading. Column-based tiling has the added advantage (over other tiling methods) that it minimizes realtime use-case latency, since all threads can start encoding data as soon as the first SB-row worth of data is available to the encoder. There is some test code that does random tile ordering in the decoder, to confirm that each tile is indeed independently decodable from other tiles in the same frame. At tile edges, all contexts assume default values (i.e. 0, 0 motion vector, no coefficients, DC intra4x4 mode), and motion vector search and ordering do not cross tiles in the same frame. t log Tile independence is not maintained between frames ATM, i.e. tile 0 of frame 1 is free to use motion vectors that point into any tile of frame 0. We support 1 (i.e. no tiling), 2 or 4 column-tiles. The loopfilter crosses tile boundaries. I discussed this briefly with Aki and he says that's OK. An in-loop loopfilter would need to do some sync between tile threads, but that shouldn't be a big issue. Resuls: with tiling disabled, we go up slightly because of improved edge use in the intra4x4 prediction. With 2 tiles, we lose about ~1% on derf, ~0.35% on HD and ~0.55% on STD/HD. With 4 tiles, we lose another ~1.5% on derf ~0.77% on HD and ~0.85% on STD/HD. Most of this loss is concentrated in the low-bitrate end of clips, and most of it is because of the loss of edges at tile boundaries and the resulting loss of intra predictors. TODO: - more tiles (perhaps allow row-based tiling also, and max. 8 tiles)? - maybe optionally (for EC purposes), motion vectors themselves should not cross tile edges, or we should emulate such borders as if they were off-frame, to limit error propagation to within one tile only. This doesn't have to be the default behaviour but could be an optional bitstream flag. Change-Id: I5951c3a0742a767b20bc9fb5af685d9892c2c96f
2013-01-25Adding a frame parallel decoding modeDeb Mukherjee
Adds a flag to disable features that would inhibit frame parallel decoding. This includes backward adaptation and MV sorting based on search in ref frame buffer. Also includes some minor clean-ups. Change-Id: I434846717a47b7bcb244b37ea670c5cdf776f14d
2013-01-23Adds an error-resilient mode with testDeb Mukherjee
Adds an error-resilient mode where frames can be continued to be decoded even when there are errors (due to network losses) on a prior frame. Specifically, backward updates are turned off and probabilities of various symbols are reset to defaults at the beginning of each frame. Further, the last frame's mvs are not used for the mv reference list, and the sorting of the initial list based on search on previous frames is turned off as well. Also adds a test where an arbitrary set of frames are skipped from decoding to simulate errors. The test verifies (1) that if the error frames are droppable - i.e. frame buffer updates have been turned off - there are no mismatch errors for the remaining frames after the error frames; and (2) if the error-frames are non droppable, there are not only no decoding errors but the mismatch PSNR between the decoder's version of the post-error frames and the encoder's version is at least 20 dB. Change-Id: Ie6e2bcd436b1e8643270356d3a930e8989ff52a5