summaryrefslogtreecommitdiff
path: root/vp9/encoder/vp9_segmentation.c
AgeCommit message (Collapse)Author
2013-05-07Merge SB8X8 into the codebaseJingning Han
Pull sb8x8 out of experimental list. verified via borg run tests. Fixed unit test failures. Change-Id: I12a4bbd17395930580c048ab68becad1ffe46e76
2013-05-02vp9/count_segs: fix out of bounds readJames Zern
don't access mi until mi_{row,col} validation has been done Change-Id: Ie1be052612cfccb2730dff9281c222bca28bf2c6
2013-05-02Merge "Using treed_read/treed_write functions for segment ids." into ↵Dmitry Kovalev
experimental
2013-04-30Merge "Cleaning up encoder segmentation code." into experimentalDmitry Kovalev
2013-04-30sb8x8 integration in rd loop.Ronald S. Bultje
Work-in-progress, not yet ready for review. TODO items: - bitstream writing (encoder) and reading (decoder) - decoder reconstruction Change-Id: I5afb7284e7e0480847b47cd0097cb469433c9081
2013-04-30Using treed_read/treed_write functions for segment ids.Dmitry Kovalev
Changing the order of probabilities inside mb_segment_tree_probs in order to use treed_read/treed_write function instead of custom code. Change-Id: I843487d5057913b9358db73da270893eefecc6c8
2013-04-29Cleaning up encoder segmentation code.Dmitry Kovalev
Moving code from vp9_pack_bitstream to new function encode_segmentation. Change-Id: I1f1e59a1f038618ad95162b7db4b6f8164850ea8
2013-04-29Use recursive function in choosing segmentation map coding method.Ronald S. Bultje
This is shorter than fully writing out all cases (55 vs. 84 LOC), and is easier to extend. Change-Id: Ibad1bf6463198cad9188c5507181d4b03d393e6d
2013-04-26Grow MODE_INFO array to use an 8x8 basis.Ronald S. Bultje
Change-Id: I087e08e7909a406b71715b8525c104208daa6889
2013-04-25Merge "Move sbsegment out of experimental list" into experimentalJingning Han
2013-04-24Merge two similar functions into oneYaowu Xu
Function set_mb_row() and set_mb_col() do similar work and are always called together, this commit merged them into a single function for clarity and easy maintainence. This was a TODO item. Change-Id: I956bd9ed6afb8b2b0469b20fd8bc893b26f8a0f3
2013-04-24Move sbsegment out of experimental listJingning Han
Move rectangular superblock coding out of experimental list. Change-Id: I96c37547d122330d666a67b4bf577ae54547857f
2013-04-24Extension of segmentation to 8 segments.Paul Wilkins
Also some further simplification following removal of top node code. There is an issue in regards to the shared file vp8cx.h in regard to the roi_map as this interface assumes that there are only 4 segments. I have left the value here as 4 for now meaning that the roi_map interface is broken for VP9. Note that this change would have been easier if I hadn't had to search for hard wire instances of the number 4 and <= 3. Change-Id: Ia8b6deea4be4dbd20deb1656e689dd43a5f190e8
2013-04-24Simplify Segment CodingPaul Wilkins
Remove top node optimization. The improvement this gives is not sufficient to justify the extra complexity. Change-Id: I2bb4a12a50ffd52cacfa4a3e8acbb2e522066905
2013-04-20Merge "Removing get_segment_id function and using existing ↵Dmitry Kovalev
vp9_get_pred_mb_segid." into experimental
2013-04-19Removing get_segment_id function and using existing vp9_get_pred_mb_segid.Dmitry Kovalev
Change-Id: Iff35d4b2f8f65511f80c594958c01fb4673fa033
2013-04-19Clean out some legacy code.Paul Wilkins
Removed some unused legacy code relating to GF activity. Change-Id: I0b0fe90a1a5208aaa81d7393ba6cf75ab412dbda
2013-04-17Fairly basic integration of rectangular blocks in encoding RD loop.Ronald S. Bultje
Adds RD integration for 32x16, 16x32, 64x32 and 32x64 rectangular blocks. Derf almost +0.6%, HD a little over +1.0%, STDHD +1.3%. Change-Id: Id651fdb6a655fdbb5c47009757e63317acfb88a5
2013-03-07Coding con-zero count rather than EOB for coeffsDeb Mukherjee
This patch revamps the entropy coding of coefficients to code first a non-zero count per coded block and correspondingly remove the EOB token from the token set. STATUS: Main encode/decode code achieving encode/decode sync - done. Forward and backward probability updates to the nzcs - done. Rd costing updates for nzcs - done. Note: The dynamic progrmaming apporach used in trellis quantization is not exactly compatible with nzcs. A suboptimal approach has been used instead where branch costs are updated to account for changes in the nzcs. TODO: Training the default probs/counts for nzcs Change-Id: I951bc1e22f47885077a7453a09b0493daa77883d
2013-02-21Code cleanup.Dmitry Kovalev
Removing redundant 'extern' keyword from function declarations and making function arguments lower case. Change-Id: Idae9a2183b067f2b6c85ad84738d275e8bbff9d9
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-06Reindent segmentation code.Ronald S. Bultje
Indentation was off by 2 spaces for this particular block. Change-Id: I1e587b7ad3eff77ade5521252d20c7bb2daa0f6d
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-30don't code the branch for the predicted seg_id if that flag is false.Ronald S. Bultje
Change-Id: Icb6e21dc0c2d9918faa33c8bf70943660df7ad88
2013-01-16Start to anonymize reference framesJohn Koleszar
Remove lst_fb_idx, gld_fb_idx, alt_fb_idx, refresh_last_frame, refresh_golden_frame, refresh_alt_ref_frame from common. Gold/Alt are encode side conventions. From the decoder's perspective, we want to be dealing with numbered references. Updates to active_ref 2 signal mode context switches, vestigial from refresh_alt_ref_frame. This needs some clean up to make sense with increased numbers of reference frames, as well as reimplementing the swapping of alt/golden which was previously done using the buffer-to-buffer copy mechanism removed in an earlier commit. Change-Id: I7334445158b7666f9295d2a2dd22aa03f4485f58
2013-01-09Merge superblocks64 experiment.Ronald S. Bultje
Change-Id: If6c88752dffdb566f8d4322f135145270716fb8e
2013-01-08Merge superblocks (32x32) experiment.Ronald S. Bultje
Change-Id: I0df99742029834a85c4933652b0587cf5b6b2587
2013-01-0564x64 blocksize support.Ronald S. Bultje
3.2% gains on std/hd, 1.0% gains on hd. Change-Id: I481d5df23d8a4fc650a5bcba956554490b2bd200
2012-12-12Consistently use get_prob(), clip_prob() and newly added clip_pixel().Ronald S. Bultje
Add a function clip_pixel() to clip a pixel value to the [0,255] range of allowed values, and use this where-ever appropriate (e.g. prediction, reconstruction). Likewise, consistently use the recently added function clip_prob(), which calculates a binary probability in the [1,255] range. If possible, try to use get_prob() or its sister get_binary_prob() to calculate binary probabilities, for consistency. Since in some places, this means that binary probability calculations are changed (we use {255,256}*count0/(total) in a range of places, and all of these are now changed to use 256*count0+(total>>1)/total), this changes the encoding result, so this patch warrants some extensive testing. Change-Id: Ibeeff8d886496839b8e0c0ace9ccc552351f7628
2012-11-29Additional warning message cleanup.Jim Bankoski
Change-Id: I429a97ac57db3de0bf67ce3f3fe0c6b409f77a9e
2012-11-28fixed includes to be fully specifiedJim Bankoski
Change-Id: Ia1cce221f8511561b9cbd8edb7726fbc286ff243
2012-11-27Add vp9_ prefix to all vp9 filesJohn Koleszar
Support for gyp which doesn't support multiple objects in the same static library having the same basename. Change-Id: Ib947eefbaf68f8b177a796d23f875ccdfa6bc9dc