summaryrefslogtreecommitdiff
path: root/vp9/decoder
AgeCommit message (Collapse)Author
2012-11-24Merge "removed the idct rtcd idct calls" into experimentalJim Bankoski
2012-11-24Move switch(tx_size) around txsize to detokenize.c.Ronald S. Bultje
Add a new function vp9_decode_mb_tokens() that handles the switch between different per-tx-size detokenize functions. Make actual implementations (vp9_decode_mb_tokens_NxN()) static. Change-Id: I9e0c4ef410bfa90128a02b472c079a955776816d
2012-11-24removed the idct rtcd idct callsJim Bankoski
More cleanup to do after this, but this is a good chunk of removing rtcd. Change-Id: I551db75e341a0a85c3ad650df1e9a60dc305681a
2012-11-23Restructure vp9_decode_mb_tokens_8x8() a bit.Ronald S. Bultje
Don't declare variables if they only ever have a single value and are used only as argument to another function call; instead, just hardcode the value in the function call directly. Split out UV and Y coefficient loops for clarity. Use xd->block[].qcoeff instead of xd->qcoeff + magic to remove use of magic offset variables. Change-Id: I5b17eda1bb666c69c2b7ea957d5525cd78192e33
2012-11-23Restructure vp9_decode_mb_tokens_16x16() a bit.Ronald S. Bultje
Don't declare variables if they only ever have a single value and are used only as argument to another function call; instead, just hardcode the value in the function call directly. Also remove unneeded brackets around a code block, and remove the magic offsets 64 and 256 for chroma values in the coefficient memory block. Change-Id: I14fc14120a81ea1d6fb862674e8bf8cf6ba3d114
2012-11-23Make get_eob() function static.Ronald S. Bultje
Change-Id: Idde3ab97960eda7022367c1f91a873a479bc9d7b
2012-11-23Rename "block_type" function argument to "txfm_size".Ronald S. Bultje
Also fix the type (TX_SIZE instead of int). Change-Id: Ib9b3f33835e58a6e758ed5f37bb64543e62b6a86
2012-11-21Fix enc/dec mismatch with b_context_pred experiment enabled.Ronald S. Bultje
Change-Id: I1272ae3f0fdfb7ed8eb364ef0c6dd1818d3179d7
2012-11-20Merge "Pack invisible frames without lengths" into experimentalJohn Koleszar
2012-11-17Assign above/left context in decode_coefs() instead of in caller.Ronald S. Bultje
this prevents duplicating the same line of code in each caller of decode_coefs(). Change-Id: Id7996ad394828bf77ef3d5e03002f577c9f79609
2012-11-17Remove unused argument from decode_coefs() function prototype.Ronald S. Bultje
Change-Id: I8d2539ba1046012c948520ac23a1f1978be921c5
2012-11-17Remove coef_bands_x[] array and related machinery in decode_coefs().Ronald S. Bultje
Change-Id: I0a36d1efb3bb81a54005b10316550ec67100559e
2012-11-17Inline count_tokens() in decode_coefs().Ronald S. Bultje
This prevents the relatively expensive token-from-coefficient lookup function get_token(), plus a duplicate loop.. Change-Id: Ibecd407b2a91d3593d439ec4646e43fa26d2ff91
2012-11-17Merge various count_token() functions into a single one.Ronald S. Bultje
Change-Id: I1970f43e2cb5f7d9744c7249099eed226f16f162
2012-11-17Remove unused function count_tokens() in detokenize.c.Ronald S. Bultje
Change-Id: I178f250b1a4d41d5a9c1619091f5ae51cebffb10
2012-11-16Remove special-case inline detokenization in b_pred reconstruction.Ronald S. Bultje
Just like for all other block modes, b_pred tokens can be read together before starting macroblock reconstruction. This removes special cases for b_pred in decode_macroblock() and allows to make decode_coefs_4x4() static in detokenize.c. While at it, remove the redundant handling and checking of plane_type and block_index (i) in decode_coefs_4x4(). Since the function is static, and is called only from decode_mb_tokens_4x4(), we don't need to worry that the arguments ever go out of sync. Change-Id: I2d415da0b51b89d0490a6b9e24cc86363c2090f7
2012-11-16Merge "Add const before the dequant(dq)" into experimentalYunqing Wang
2012-11-16Merge "Optimize 8x8 dequant and idct" into experimentalYunqing Wang
2012-11-16Add const before the dequant(dq)Yunqing Wang
Modified code to use const before dq. Change-Id: I6fa59c2ed9743ded33ad08df70e15c2fe1ae7b99
2012-11-16Support 32x32 intra modes in non-keyframe superblocks.Ronald S. Bultje
Change-Id: Icf8ad313c543462e523bff89690e5daa8d49bcc0
2012-11-16Further experimentation with the mode contextPaul Wilkins
Experiments with a larger set of contexts and some clean up to replace magic numbers regarding the number of contexts. The starting values and rate of backwards adaption are still suspect and based on a small set of tests. Added forwards adjustment of probabilities. The net result of adding the new context and forward update is small compared to the old context from the legacy find_near function. (down a little on derf but up by a similar amount for HD) HOWEVER.... with the new context and forward update the impact of disabling the reverse update (which may be necessary in some use cases to facilitate parallel decoding) is hugely reduced. For the old context without forward update, the impact of turning off reverse update (Experiment was with SB off) was Derf - 0.9, Yt -1.89, ythd -2.75 and sthd -8.35. The impact was mainly at low data rates. With the new context and forward update enabled the impact for all the test sets was no more than 0.5-1% (again most at the low end). Change-Id: Ic751b414c8ce7f7f3ebc6f19a741d774d2b4b556
2012-11-16Merge "Don't write recon.yuv by default" into experimentalJohn Koleszar
2012-11-16Merge "Compound inter-intra experiment" into experimentalDeb Mukherjee
2012-11-16Compound inter-intra experimentDeb Mukherjee
A patch on compound inter-intra prediction. In compound inter-intra prediction, a new predictor for 16x16 inter coded MBs are obtained by combining a single inter predictor with a 16x16 intra predictor, in a manner that the weight varies with distance from the top/left boundary. The current search strategy is to combine the best inter mode with the best intra mode obtained independently. Results so far: derf +0.31% yt +0.32% std-hd +0.35% hd +0.42% It is conceivable that the results would improve somewhat with a more thorough search strategy where all intra modes are searched given the best mv, or even a joint search for the best mv and the best intra mode. Change-Id: I7951f1ed0d6eb31ca32ac24d120f1585bcd8d79b
2012-11-15Pack invisible frames without lengthsJohn Koleszar
Modify the decoder to return the ending position of the bool decoder and use that as the starting position for the next frame. The constant-space algorithm for parsing the appended frame lengths is O(n^2), which is a potential DoS concern if n is unbounded. Revisit the appended lengths for use as partition lengths when multipartition support is added. In addition, this allows decoding of raw streams outside of a container without additional framing information, though it's insufficient to be able to remux said stream into a container. Change-Id: I71e801a9c3e37abe559a56a597635b0cbae1934b
2012-11-15support building vp8 and vp9 into a single libJohn Koleszar
Change-Id: Ib8f8a66c9fd31e508cdc9caa662192f38433aa3d
2012-11-15detokenize: use SEG_LVL_EOB feature consistentlyJohn Koleszar
Update decode_coefs() to break when c >= eob, since it's possible that c starts the loop from 1 and eob is 0. The loop won't terminate in that case. Add new get_eob() function to consistently clamp the eob based on the segment level EOB and the block size. It's possible to code a segment level EOB that's greater than the block size, and that leads to an out of bounds access. Change-Id: I859563b30414615cf1b30dcc2aef8a1de358c42d
2012-11-15Merge changes I63348ae3,I658ea409 into experimentalpascal massimino
* changes: Segment mode coding bug. Silenced a few warnings.
2012-11-14Silenced a few warnings.Paul Wilkins
Silenced a few VS compiler warnings. Change-Id: I658ea409c36c05cd11042675e2e42ccde0ef2420
2012-11-13Don't write recon.yuv by defaultJohn Koleszar
CONFIG_DEBUG was turning on some code to dump the reconstructed frame to a buffer from within the decoder. Move this code to a more specific debugging define. Change-Id: I3ca9ea634bdbd186f2470bd644d3695ee0ab3037
2012-11-13SEG_LVL_MODE: don't code ref_frame if it's implicitJohn Koleszar
If the SEG_LVL_MODE is an intra mode, then the reference frame must be INTRA_FRAME. Change-Id: I2cdeeac3780c077c74b39ce89a528bc280674231
2012-11-12Optimize 8x8 dequant and idctYunqing Wang
Similar to 16x16 dequant and idct, based on the value of eobs, the 8x8 dequant and idct calculation was simplified to improve decorder performance. Combined vp9_dequant_idct_add_8x8 and vp9_dequant_dc_idct_add_8x8 to eliminate duplicate code. Change-Id: Ia58e50ab27f7012b7379c495837c9c0b5ba9cf7f
2012-11-12Fix edge MV handling in SBs.Ronald S. Bultje
Change-Id: Ia1eddb108ec463835e9de8769572d698e21bca49
2012-11-12Merge "New inter mode context" into experimentalPaul Wilkins
2012-11-12New inter mode contextPaul Wilkins
This change is a fix / extension of the newbestrefmv experiment. As such it is presented without IFDEF. The change creates a new context for coding inter modes in vp9_find_mv_refs(). This replaces the context that was previously calculated in vp9_find_near_mvs(). The new context is unoptimized and not necessarily any better at this stage (results pending), but eliminates the need for a legacy call to vp9_find_near_mvs(). Based on numbers from Scott, this could help decode speed by several %. In a later patch I will add support for forward update of context (assuming this helps) and refine the context as necessary. Change-Id: I1cd991b82c8df86cc02237a34185e6d67510698a
2012-11-10Fix data type for eobs[] array in SB 4x4 IDCT code.Ronald S. Bultje
This fixes encoder/decoder mismatches with the superblock experiment turned on whenever a superblock is encoded using the 4x4 transform. Change-Id: Iefec7055e8d25f8efdbba66c4261bbd322d335a3
2012-11-10New b-intra mode where direction is contextualDeb Mukherjee
Preliminary patch on a new 4x4 intra mode B_CONTEXT_PRED where the dominant direction from the context is used to encode. Various decoder changes are needed to support decoding of B_CONTEXT_PRED in conjunction with hybrid transforms since the scan order and tokenization depends on the actual direction of prediction obtained from the context. Currently the traditional directional modes are used in conjunction with the B_CONTEXT_PRED, which also seems to provide the best results. The gains are small - in the 0.1% range. Change-Id: I5a7ea80b5218f42a9c0dfb42d3f79a68c7f0cdc2
2012-11-09Build fix in decoder/decodframe.cDeb Mukherjee
Missing eobs agrument in vp9_dequant_idct_add_16x16_c Change-Id: I826b1afa0a4ee6398f7373325aa0c75e6a866937
2012-11-09Merge "Optimize 16x16 dequant and idct" into experimentalYunqing Wang
2012-11-08Implement tx_select for superblock encoding.Ronald S. Bultje
Also split superblock handling code out of decode_macroblock() into a new function decode_superblock(), for easier readability. Derf +0.05%, HD +0.2%, STDHD +0.1%. We can likely get further gains by allowing to select mb_skip_coeff for a subset of the complete SB or something along those lines, because although this change allows coding smaller transforms for bigger predictors, it increases the overhead of coding EOBs to skip the parts where the residual is near-zero, and thus the overall gain is not as high as we'd expect. Change-Id: I552ce1286487267f504e3090b683e15515791efa
2012-11-07Optimize 16x16 dequant and idctYunqing Wang
As suggested by Yaowu, simplified 16x16 dequant and idct. In decoder, after detoken step, we know the number of non-zero dct coefficients (eobs) in a macroblock. Idct calculation can be skipped or simplified based on eobs, which improves the decoder performance. Change-Id: I9ffa1cb134bcb5a7d64fcf90c81871a96d1b4018
2012-11-07merge full pixel refmv experimentYaowu Xu
Change-Id: Ib39ad47a7d188f3b45416937b7eeb28c3e79b74c
2012-11-06silent a lot of MSVC compiler warningsYaowu Xu
there are still a couple type of warning left, which are related to double constants assigned to float type. As those would be addressed by the conversion of transforms into integer version. This commit has left those un-dealt with. Change-Id: I48fd9b489c0c27ad6b543f4177423419f929f2bb
2012-11-02Merge "Fix eobs data type" into experimentalYunqing Wang
2012-11-02Fix eobs data typeYunqing Wang
The block sizes for decoding tokens are up to 16x16, which means eobs is within [0, 256]. Using (signed) char is not enough. Changed eobs data type to unsigned short to fix the problem. Change-Id: I88a7d3098e1f1604c336d6adb88ffec971fb03a6
2012-11-02Place non-static function prototypes in a header file.Ronald S. Bultje
Change-Id: I7cd21b9f1e69f4e0b3338bfe27b3c67e4b47de58
2012-11-02vpx_scale: sync from masterJohn Koleszar
Update vpx_scale from current code in master, run style transform, fix lint warnings. Change-Id: I47eadeb5b6881d448ea3728537f9b8a5b5aac78e
2012-11-01Rename vp8/ codec directory to vp9/.Ronald S. Bultje
Change-Id: Ic084c475844b24092a433ab88138cf58af3abbe4