summaryrefslogtreecommitdiff
path: root/vp9/decoder
AgeCommit message (Collapse)Author
2020-01-07Avoid reloads in vp9_read_mode_info.Clement Courbet
The compiler cannot prove that the buffers do not alias, so it has to emit a reload. On our internal workloads, the reloads are about 1% of the total time spent decoding frames. The loop before the change: movzwl 0x8(%r15), %edx # load ref_frame addq $0xc, %rax movw %dx, -0x4(%rax) # store ref_frame movq 0xc(%r15), %rdx # load mv movq %rdx, -0xc(%rax) # store mv cmpq %rax, %rcx jne -0x1a The loop after the change: movw %r9w, 0x8(%rax) # store cached ref_frame addq $0xc, %rax movq %r8, -0xc(%rax) # store cached mv cmpq %rax, %rdx jne -0x12 Change-Id: Ia1e9634bcabb4d7e06ed60f470bc4cd67f5ab27e
2019-12-04trivial: remove reference to error correctionJohann
vp9 does not support error correction Change-Id: I89517ae97abfa60833c9150495556d49c9656778
2019-12-02Merge "Fix mutex free in multi-thread lpf"James Zern
2019-11-27Fix mutex free in multi-thread lpfVenkatarama NG. Avadhani
The mutex lf_mutex will now be allocated and destroyed, making it easier to verify if it has been inited before destruction. BUG=webm:1662 Change-Id: I8169bea9e117bd615d68b8d02da98aeab570b53f
2019-11-14Move buffer from extend_and_predict into TileWorkerDataVitaly Buka
This avoids unneeded initializations. extend_and_predict is called from multiple nested loops, allocate large buffer on stack and use just a portion of it. -ftrivial-auto-var-init= inserts initializations which performed on multiple iterations of loops causing 258.5% regression on webrtc_perf_tests decode_time/pc_vp9svc_3sl_low_alice-video. Bug: 1020220, 977230 Change-Id: I7e5bb3c3780adab74dd8b5c8bd2a96bf45e0c231
2019-10-03vp9/decoder/vp9_detokenize: fix int sanitizer warningsHien Ho
From unit test: VP9MultiThreaded/InvalidFileTest implicit conversion from type 'int' of value 83144 (32-bit, signed) to type 'tran_low_t' (aka 'short') changed the value to 17608 (16-bit, signed) BUG=webm:1615 BUG=webm:1648 Change-Id: I4170494c328596ace66432c8563c55f31745cf76
2019-08-28Don't generate mv refs that won't be usedAlex Converse
Spends 25% less time in dec_find_mv_refs for grass_1_1280X768_fr30_bd8_sub8X8_l31.webm saving 0.7% overall. Change-Id: I658bb5d6dd8ac82a568c7823dea3f4947ad7ed73
2019-05-06Add mismatch_debug toolAngie Chiang
Change-Id: I045b4cf625d428109688303ced5433d824df2790
2019-04-26Add bistream_debug toolAngie Chiang
Change-Id: I339899cff65c7ef563f9411f2d7af9a32a08a705
2019-04-22[vp9] Fix handling of skip in row_mt=1Harish Mahendrakar
For row_mt=1, when mi->skip is set to 1 after parse based on eobtotal for that partition, dqcoeff and eob need to be restored as recon_partition doesn't increment these pointers for skip cases Change-Id: I79711b0c175937aa6da3bba3b3bc053f91a8ce35
2019-04-19[CFI] Remove function pointer cast of row_decode_worker_hookHarish Mahendrakar
This fixes CFI error flagged for this function when row-mt=1 Change-Id: Ic5b427a6b621228280ebe829d00b540b18e2c087
2019-04-16Revert "Refactor tile boundary condition for intra prediction"James Zern
This reverts commit 14208ab41e114f5779d106ae54a7cc8fd9d43820. This causes test vectors failures with --row-mt=1. BUG=webm:1617 Change-Id: Icb14bbbb6f38608a73dde0370ad874c0b1b0af8a
2019-04-11Fix static analysis warningskyslov
With switching to clang-7.0.1 we got new warnings. With this change the warnings are back to 0 for all configurations (excluding warnings in third_party) BUG=webm:1616 Change-Id: I25ceb592c425394e8f14d333fb5680144f892213
2019-03-14Refactor tile boundary condition for intra predictionJingning Han
Explicitly compare the block location against tile coordinate to decide if intra prediction boundary is available. No coding stats will be changed by this refactoring. Change-Id: I80b3a131366bb2c5f8ea53a139ed6e9b0b7ddb68
2019-02-07Fixing ClangTidy issues reported by downstream integrationkyslov
ClangTidy reported 16 issues. All are around typecasting and straightforward Change-Id: Ie8f9fc2ba7992dd44fef65b121fe65966a1a1297
2019-02-01Fix segmentation fault when num tile cols change in row-mt.Ritu Baldwa
Change-Id: Ifc165d76a71fcdb7c19c158c940a8d273be0d95f
2019-01-30Modify map read/write to sync logic in row_mt caseRitu Baldwa
Adds conditional wait/signal instead of sched_yield. Change-Id: I49a760eacdd6b6ac690e797ea5f10febf6a1a084
2019-01-19Revert "Revert "Add Tile-SB-Row based Multi-threading in Decoder""Ritu Baldwa
This reverts commit 06983668cf41f66765528db044419f954e5a5d64. Fixes Visual Studio build errors introduced by earlier row mt commit BUG=webm:1587 Change-Id: I792df86e8254cd6b2a511955b691af619a569cd0
2018-12-22Revert "Add Tile-SB-Row based Multi-threading in Decoder"James Zern
This reverts commit 02b3ef7faee5be5ee519856fbb3523d3ab49f6e7. Reason for revert: fails to build under visual studio Original change's description: > Add Tile-SB-Row based Multi-threading in Decoder > > Add the multi-thread function that decodes a video row by row instead > of a tile at a time. Create a job queue for queueing all parse and recon jobs. > Each SB row of a tile is a job. > > Performance Improvement: > > Platform Resolution 3 Threads 4 Threads > ARM 720p 36.81% 18.37% > 1080p 32.27% 14.76% > > ARM Improvement measured on Nexus 6 Snapdragon 805 Quad-core @ 2.65 GHz > > Change-Id: I3d4dd7a932fc2904c90d9546b2de99c809afd29e BUG=webm:1587 Change-Id: Ia4c8f5128922a205cd9fd83aaef8a2e73764d4a7
2018-12-21vp9_decodeframe.c: resolve missing declarationsJohann
BUG=webm:1584 Change-Id: Ie0d26b745ab1f5907a6a2dc10fbc5083f3fb0b8d
2018-12-21Merge "Add Tile-SB-Row based Multi-threading in Decoder"Harish Mahendrakar
2018-12-18Add Tile-SB-Row based Multi-threading in DecoderRitu Baldwa
Add the multi-thread function that decodes a video row by row instead of a tile at a time. Create a job queue for queueing all parse and recon jobs. Each SB row of a tile is a job. Performance Improvement: Platform Resolution 3 Threads 4 Threads ARM 720p 36.81% 18.37% 1080p 32.27% 14.76% ARM Improvement measured on Nexus 6 Snapdragon 805 Quad-core @ 2.65 GHz Change-Id: I3d4dd7a932fc2904c90d9546b2de99c809afd29e
2018-12-07Merge "vp9 decoder: cleanup on exit if no available frame buffer."Jerome Jiang
2018-12-06vp9 decoder: cleanup on exit if no available frame buffer.Jerome Jiang
There was no setjmp on vpx_internal_error when there is no available frame buffer, ready_for_new_data is not reset to 1. BUG=webm:1571 Change-Id: I4f8efffb7d6fed3085b1f0229d0d1071a056b6c6
2018-12-03Add Parse and Recon Split functionsShubham Tandle
Add functions that will do only parse or only recon. These are duplicated and modified from decode_partition and decode_block. Change-Id: I2201e235bf491e823ae63d27b2586bbb43b48929
2018-10-30clang-tidy: fix vp9/decoder parametersJohann
BUG=webm:1444 Change-Id: I9c7c0a4161aaf52436bd5c01d30b035b2ff5508c
2018-10-25Add Memory to Enable Row DecodeRitu Baldwa
Row based multi-thread needs extra memory to store the parsed co-efficients, partitions and eob. This commit adds memory for the same. Change-Id: I13fa4a6ada2ec3048bc973e465055b832429388f
2018-10-08Loopfilter Multi-Thread OptimizationSupradeep T R
Take the original loopfilter multi-thread optimization (dafe064289a917977439ab6f4f002b9946496084) along with the fixes for bugs 1558 and 1562. BUG=webm:1558 BUG=webm:1562 Change-Id: Ibbf6bd13f4ffff0e79184ccfd6b85a49e067a6d8
2018-09-22Revert "Revert "Revert "Loopfilter MultiThread Optimization"""James Zern
This reverts commit bf6299010e815e111d7326530c249e9d99611f34. segfaults, causes an assertion failure with corrupt input: get_uv_tx_size: Assertion `mi->sb_type < BLOCK_8X8 || ss_size_lookup[mi->sb_type][pd->subsampling_x][pd->subsampling_y] != BLOCK_INVALID BUG=webm:1562 Change-Id: I05a711cad3d8e7f1a8e64422b4356bdf4edb3d12
2018-09-21Rework is_compound_allowed logic at encoderJingning Han
Allow the encoder to fully utilize the decoder's capability to handle both 1 fwd + 2 bwd case and 2 fwd + 1 bw case. Change-Id: I3f984d52552ddb701b80b042d979f8fe09dd3a80
2018-09-20Generalize encoder comp_var_ref settingJingning Han
Generalize the encoder comp_fixed_ref and comp_var_ref assignments. Make it fully support 2 fwd + 1 bwd and 1 fwd + 2 bwd settings that VP9 decoder allows. Change-Id: Id74da9a66327189a3fdf382d447243003c431131
2018-09-18Merge "Fix buffer overrun of postproc_state.limits"Johann Koenig
2018-09-15cosmetics: normalize include guardsJames Zern
use the recommended format [1] of: <PROJECT>_<PATH>_<FILE>_H_ [1] https://google.github.io/styleguide/cppguide.html#The__define_Guard "All header files should have #define guards to prevent multiple inclusion. The format of the symbol name should be <PROJECT>_<PATH>_<FILE>_H_." Change-Id: I2e8ab0b32fb23c30fa43cff5fec12d043c0d2037
2018-09-12Fix buffer overrun of postproc_state.limitsMatthias Räncker
Always allocate cpi->common.postproc_state.limits using unscaled width. With ./configure --enable-pic --enable-decode-perf-tests --enable-encode-perf-tests --enable-encode-perf-tests --enable-vp9-highbitdepth --enable-better-hw-compatibility --enable-internal-stats --enable-postproc --enable-vp9-postproc --enable-error-concealment --enable-coefficient-range-checking --enable-postproc-visualizer --enable-multi-res-encodin --enable-vp9-temporal-denoising --enable-webm-io --enable-libyuv segfaults tend to occur in VP9/DatarateOnePassCbrSvcSingleBR.* tests. This is an analogue to issue https://bugs.chromium.org/p/webm/issues/detail?id=1374 where a buffer allocated using a scaled width is reused after scaling back to the original size. Unfortunately, in this case the unscaled width doesn't appear to be known in the immediated context of the allocation, so the the signature of vp9_post_proc_frame needs to be changed to provide that information in order to provide a similar fix as in #1374. Signed-off-by: Matthias Räncker <theonetruecamper@gmx.de> Change-Id: I6f943aafbb3484ee94c5b38d7fcdd9d53fce3e5f
2018-09-12Revert "Revert "Loopfilter MultiThread Optimization""Venkatarama NG. Avadhani
This reverts commit 753fd86e86ac727dccac88376260b8f54502f2a3. This also has the fix for the DoS reported in bug 1558. BUG=webm:1558 Change-Id: I65ea84e0c11d6bd40d8cb0587dfe934b3ac11dce
2018-08-30Revert "Loopfilter MultiThread Optimization"James Zern
This reverts commit dafe064289a917977439ab6f4f002b9946496084. Corrupted files may cause the decoder to hang as row progress in the loopfilter is used to progress each thread. BUG=webm:1558 Change-Id: I0674ce9af14d3fb7b2da8124e7b600616c8e734a
2018-08-27Rework enc/dec mismatch detectionJingning Han
The previous enc/dec mismatch detection assumes the previously reconstructed frame would always stay at frame buffer pool index at 0. It could hence cause certain delay in enc/dec mismatch detection when the immediate reconstruction frame is not yet propagated to index 0 in the buffer map pool. This change always keeps the latest decoded show frame buffer index and directly gets the reconstructed frame from encoder and decoder buffer pools to check for mismatch. Change-Id: If53092cbc42ab78d55af5b83f12a489fc362f3ae
2018-08-21Merge "Loopfilter MultiThread Optimization"Harish Mahendrakar
2018-08-20Loopfilter MultiThread OptimizationSupradeep T R
Adding LPF within the tileworker hook. This means that LPF will be done immediately after decode, without waiting for all threads to sync. Performance Improvement - Platform Resolution 2 Threads 4 Threads X86 720p 7.24% 22.04% 1080p 5.29% 17.02% ARM 720p 4.61% 8.75% 1080p 5.55% 12.03% x86 Improvement measured on Intel Core i7-6700 CPU @ 2.10GHz set in performance with turbo mode off ARM Improvement measured on Nexus 6 Snapdragon 805 Quad-core @ 2.65 GHz Change-Id: Ifa73c71b40db3fa7fa16f54f4e3aa06d1258caae
2018-08-13Merge "vp9: don't release buffer for current frame."Jerome Jiang
2018-08-11vp9: don't release buffer for current frame.Jerome Jiang
when resync is needed, we flush all frame buffers on key frame. BUG=b/112406540 BUG=oss-fuzz:9722 Change-Id: Ie53feb12126f25877436eba40317400bf69c6207
2018-08-06vp9: address integer sanitizer warningJohann
Comparing the size values with subtraction requires casting. Sort in descending order. (a < b) - (a > b) If a is greater, this is 0 - 1 = -1 If the values are equal, this is 0 - 0 = 0 If b is greater, this is 1 - 0 = 1 Change-Id: I5c20fd10fbc97c391c6858235c44d25d7db57f0e
2018-07-27Merge "vp9: release frame buffer on key frame."Jerome Jiang
2018-07-26vp9: release frame buffer on key frame.Jerome Jiang
Add tests with corrupted frames and periodic key frames. BUG=webm:1545 Change-Id: Ic0684bdafd01507036f56465387b9d2187b1458e
2018-07-20Add Flag to Enable Row Based MultiThreadingVenkatarama NG. Avadhani
This commit adds a command line argument "--row-mt". Passing "--row-mt=1" will set the row_mt flag in the decoder context. This flag will be used to determine whether row-wise multi-threading path is to be taken when the row-wise multi-threading functions are added. Change-Id: I35a5393a2720254437daa5e796630709049e0bc2
2018-07-12Backport libaom bug fixes.Wan-Teh Chang
libaom commit 80a5b09337a80093e1e7ae5eb540020a22949805: dec_free_mi: Reset cm->mi_alloc_size. libaom commit fb0dd0bb80fc95ef016f1421b105a52fffa32816: Clear cm->width and cm->height on alloc failure. libaom commit ccb27264089a8cfa1334391ebbcb6a11b8dff442: Misc. resize fixes along with the resize test Note: only the change to enc_free_mi in av1/encoder/encoder.c is merged. Change-Id: I602813230d40125e59608fa013085dca3e160c33
2018-06-06VP9: fix unsigned integer overflow in decoder.Jerome Jiang
The difference of two size_t variables. Change-Id: I73f35cdafc2ba64a9ddaf855cc6a410cfb63b8da
2017-11-20[CFI] Remove function pointer castsVlad Tsyrklevich
Control Flow Integrity [1] indirect call checking verifies that function pointers only call valid functions with a matching type signature. This change eliminates function pointer casts to make libvpx CFI-safe. [1] https://www.chromium.org/developers/testing/control-flow-integrity Change-Id: I7e08522d195a43c88cda06fa20414426c8c4372c
2017-11-09vp9: Fix mem rel for non-ref for external buffer.Jerome Jiang
Release frame buffers for non-ref when the decoder is destroyed. Enable the non ref test. BUG=b/68819248 Change-Id: Id87ef3b0a62318f9812e927cd957c05c859047fa
2017-07-05vp9: remove FrameWorkerData & vp9_dthread.hJames Zern
the file was empty after the struct removal. the only remaining use was within vp9_dx_iface, but the wrapper became unnecessary after the removal of frame_parallel_decode. BUG=webm:1395 Change-Id: I515ab585d701e77d388d12b2802d844c424f9bcd