summaryrefslogtreecommitdiff
path: root/vp8
AgeCommit message (Collapse)Author
2018-12-21vp8: kill all threads on corrupted frame.Jerome Jiang
If decoder keeps going, threads will be brought up. BUG=902650,webm:1577 Change-Id: I7765ba134aeed76ec0f58bd05e3a35383e6861c3
2018-12-17Merge "Remove -Wextra suppression."Jerome Jiang
2018-12-17Remove -Wextra suppression.Jerome Jiang
BUG=webm:1246 Change-Id: Iae78e266faa9c4989500fc919b24f2f584ac0550
2018-12-15Merge "vp8: Fix potential use-after-free in mfqe."Jerome Jiang
2018-12-14vp8: Fix potential use-after-free in mfqe.Jerome Jiang
Similar issue to 842265. The pointer in vp8 postproc refers to show_frame_mi which is only updated on show frame. However, when there is a no-show frame which also changes the size (thus new frame buffers allocated), show_frame_mi is not updated with new frame buffer memory. Change the pointer in postproc to mi which is always updated. BUG=913246 Change-Id: I5159ba7134a06db472c29a1d84b8d39bb60c7254
2018-12-13vp8-mfqe: Increase initial frame# thresholdMarco Paniconi
Increase the initial frame number threshold for the mfqe, as using the running average of last_base_qindex doesn't work well after very first frame. Only affects the very first few frames. Fixes an issue with a test. Change-Id: Ia249924257b44263e0b9f43cbff473902f08e28c
2018-11-12quantize: use aarch64 vmaxvJohann
Simplify max value calculation on aarch64 by using vmaxv. Much faster for 4x4 but diminishing returns as the block size grows. Only the vp9 quantize has a speed test hooked up. Anticipate similar results for the other quantize versions. Before: [ RUN ] NEON/VP9QuantizeTest.DISABLED_Speed/2 [ BENCH ] Bypass calculations 4x4 31.6 ms ( ±0.0 ms ) [ BENCH ] Full calculations 4x4 31.6 ms ( ±0.0 ms ) [ BENCH ] Bypass calculations 8x8 17.7 ms ( ±0.0 ms ) [ BENCH ] Full calculations 8x8 17.7 ms ( ±0.0 ms ) [ BENCH ] Bypass calculations 16x16 14.2 ms ( ±0.0 ms ) [ BENCH ] Full calculations 16x16 14.2 ms ( ±0.0 ms ) [ OK ] NEON/VP9QuantizeTest.DISABLED_Speed/2 (1906 ms) [ RUN ] NEON/VP9QuantizeTest.DISABLED_Speed/3 [ BENCH ] Bypass calculations 32x32 18.6 ms ( ±0.0 ms ) [ BENCH ] Full calculations 32x32 18.6 ms ( ±0.0 ms ) After: [ RUN ] NEON/VP9QuantizeTest.DISABLED_Speed/2 [ BENCH ] Bypass calculations 4x4 29.1 ms ( ±0.0 ms ) [ BENCH ] Full calculations 4x4 29.1 ms ( ±0.0 ms ) [ BENCH ] Bypass calculations 8x8 16.9 ms ( ±0.0 ms ) [ BENCH ] Full calculations 8x8 16.9 ms ( ±0.0 ms ) [ BENCH ] Bypass calculations 16x16 14.1 ms ( ±0.0 ms ) [ BENCH ] Full calculations 16x16 14.1 ms ( ±0.0 ms ) [ OK ] NEON/VP9QuantizeTest.DISABLED_Speed/2 (1803 ms) [ RUN ] NEON/VP9QuantizeTest.DISABLED_Speed/3 [ BENCH ] Bypass calculations 32x32 18.6 ms ( ±0.0 ms ) [ BENCH ] Full calculations 32x32 18.6 ms ( ±0.0 ms ) Change-Id: Ic95812b3fdbd4e47b4dcb8ed46c68a9617de38d2
2018-11-09vp8: Init buffers and pred arrays for mt after allocation.Jerome Jiang
Buffers and arrays used for prediction are not initialized after allocation. BUG=902691 Change-Id: Ic727e5dab7456e91ec9d6c80694f60a1a3600640
2018-11-07Merge "vp8: remove VP8_ENTROPY_STATS code"Johann Koenig
2018-11-06Merge "vp8: Increase rate correction threshold for drop-overshoot"Marco Paniconi
2018-11-06Merge "vp8 dec: only compute ref frame buffer pointer for non intra"Jerome Jiang
2018-11-05vp8 dec: only compute ref frame buffer pointer for non intraJerome Jiang
When ref frame is INTRA_FRAME, pre buffer shouldn't be used. This CL copies behavior in single thread. That should apply to multithreading case too. BUG=webm:1496 Change-Id: Ibe9ab8ea9dc664151fa7ebac529d5fd1a481b4a3
2018-11-05vpx_codec_enc_config_default: disable 'usage'Johann
Found with clang-tidy. This value is unused in libvpx. There is an existing test which ensures this is not used: test/encode_api_test.cc: EXPECT_EQ(VPX_CODEC_INVALID_PARAM, vpx_codec_enc_config_default(kCodecs[i], &cfg, 1)); Change-Id: I94bd0663c6652b4267204c02c3921972c854d0b0
2018-11-05vp8: Increase rate correction threshold for drop-overshootMarco Paniconi
For 1 pass cbr encoding mode, with frame-dropping on: increase the rate correction threshold for drop-overshoot detection, to better capture cases of large overshoot. Change-Id: I1153b1b71cf106749dd985074d6bc8f37d163c7e
2018-11-01vp8: remove VP8_ENTROPY_STATS codeJohann
Does not compile. Noticed while cleaning up un-namespaced functions Change-Id: I4a9048e66d051397f652e7b5412606a5e234f61f
2018-10-31Merge "vp8 boolcoder: normalize to "bc""Johann Koenig
2018-10-31Merge "vp8: fix to address overflow in decoder."Jerome Jiang
2018-10-31Merge "vp8dx_get_quantizer: normalize VP8D_COMP"Johann Koenig
2018-10-31vp8 boolcoder: normalize to "bc"Johann
"bc" maps to BOOL_CODER better than "br" Change-Id: Idefd03e79ccc1851a1b26f8206a159b0e5c5fb2d
2018-10-31vp8dx_get_quantizer: normalize VP8D_COMPJohann
Use "pbi" like the rest of the functions Change-Id: I5f3036b8f8361c30353be378d83455b83b82ac9f
2018-10-31vp8: fix to address overflow in decoder.Jerome Jiang
Can't call internal error from the decoder thread. Add vpx_internal_error_info to MACROBLOCKD. When corrupted frame detected, the decoder thread returns to its own context and signal completion of decoding for current frame. The main decoding thread will detect error too and return error code to decoding API call. Each thread will signal end of decoding of the frame. Main thread waits for the signal of all other threads to start decoding next frame. BUG=875626,webm:1496 Change-Id: Icd05fbc558893a4e7d8532c1e7177e7550283a64
2018-10-30clang-tidy: fix vp8/encoder parametersJohann
BUG=webm:1444 Change-Id: I57a305cdab0d62b0745116272fbd5d9257c6e679
2018-10-30clang-tidy: fix vp8/decoder parametersJohann
BUG=webm:1444 Change-Id: I3dfc56f7f6430d36a1c447d8999733015a001101
2018-10-30clang-tidy: fix vp8/common parametersJohann
Match function definitions to declarations BUG=webm:1444 Change-Id: Ib96d3b735eaf81cece5406c89cc5156bc2cde462
2018-10-29vp8 bilinear: ensure non-16x16 arrays are alignedJohann Koenig
The 16x16 array was changed to aligned. The 8xN and 4x4 functions use aligned loads/stores on their internal arrays as well. BUG=webm:1570 Change-Id: I9cfe53d7c8ed76e8854c2688eb9a509b876471d8
2018-10-29vp8 bilinear: ensure temp array is alignedJohann
Loads and stores to this array require 16 byte alignment. BUG=webm:1570 Change-Id: I82c7d21c9539a108930fd030d79caaa0bcd1eeb3
2018-10-26remove "register" keywordJohann
This has been deprecated for a long time. c++17 is trying to recover the name. Change-Id: Iade6bebce03a50b76061695f9e634a107cd989cd
2018-10-25vp8 bilinear: rewrite 4x4Johann
~20% faster than the MMX. Removes the last usage of vp8_bilinear_filters_x86_[48]. Change-Id: Iee976fab9655d0020440f26c4403ce50103af913
2018-10-25vp8 bilinear: rewrite 16x16Johann
Marginally faster. Most importantly it drops a dependency on an external symbol (vp8_bilinear_filters_x86_8). Change-Id: Iff022e718720f1f0eeced6201a1ad69a9c9c4f45
2018-10-24vp8 bilinear: rewrite in intrinsicsJohann
8x8 is 15% faster than the assembly. 8x4 is 200% faster than MMX. Remove MMX version. Change-Id: I55642ebd276db265911f2c79616177a3a9a7e04f
2018-10-11Revert "vp8: Increase rate threshold for overshoot-drop"Marco Paniconi
This reverts commit bc066684ca4deff24d02ee56071d731b431bf438. Reason for revert: <INSERT REASONING HERE> Regression in webrtc perf test Original change's description: > vp8: Increase rate threshold for overshoot-drop > > Increase the rate threshold for the dropping when > overshoot is detected during encoding. This helps > to prevent some unneccessary drops for hard content. > > Change-Id: I258bf33883d46347efd44e1e192cb25c444d05fe TBR=sprang@chromium.org,marpan@google.com,builds@webmproject.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ib0e84747430ba6d04e479f9efd86d628b80a1e67
2018-10-03vp8: Increase rate threshold for overshoot-dropMarco Paniconi
Increase the rate threshold for the dropping when overshoot is detected during encoding. This helps to prevent some unneccessary drops for hard content. Change-Id: I258bf33883d46347efd44e1e192cb25c444d05fe
2018-09-24clang-format v6.0.1Johann
Change-Id: I83c7e64fe70f7c49aa2492ed2d640c6756b7ebaa
2018-09-21vp8: exit with bad fragment size in decoder.Jerome Jiang
BUG=webm:1555 Change-Id: Ie024c9f5a21f4ed05ab6b93f1677662eeef9e6d8
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-08-22Revert "vp8: Fix memory address overflow in decoder."Jerome Jiang
This reverts commit 45cf384738ad261de7d00769c19b9b2842af06a7. BUG=875626,875680,webm:1496 Change-Id: I78037b5e57dbf6cfe326b29beaad1128868f09f2
2018-07-30Merge "vp8: Fix memory address overflow in decoder."Jerome Jiang
2018-07-19vp8: Fix memory address overflow in decoder.Jerome Jiang
Ref frame buffer is corrupted but it's not checked before it's used to compute the reconstructed previous frame buffer. BUG=webm:1496 Change-Id: Ief0e85b91b19576632685d17c8176c8d29158028
2018-06-13vp8: remove assertion in tree coder.Jerome Jiang
Cast the counter to uint64_t in case it overflows. The assert was to prevent c[0] * Pfac being overflow beyong unsigned int since Pfac could be 2^8. Thus c[0] needs to be smaller than 2^24. In VP9, the assert was removed and c[0] was casted to uint64_t. Bug: 805277 Change-Id: Ic46a3c5b4af2f267de4e32c1518b64e8d6e9d856
2018-05-25VP8: Fix use-after-free in postproc.Jerome Jiang
The pointer in vp8 postproc refers to show_frame_mi which is only updated on show frame. However, when there is a no-show frame which also changes the size (thus new frame buffers allocated), show_frame_mi is not updated with new frame buffer memory. Change the pointer in postproc to mi which is always updated. Bug: 842265 Change-Id: I33874f2112b39f74562cba528432b5f239e6a7bd
2018-05-10Fix vpxdec fuzz failure.Jerome Jiang
BUG=webm:1495 Change-Id: Ibaee35aa5e8e00847c61e707f2c9b4c0cff23673
2018-04-09vpx_image: remove unused image formatsJames Zern
libvpx only emits: VPX_IMG_FMT_{I420,I422,I440,I444,I42016,I42216,I44016,I44416} and additionally supports YV12 as input. interleaved yuv, rgb and alpha formats are unused. Change-Id: Ie2ab1099e950c6e696f475d46882f5c47a174042
2018-03-22Fix implicit-fallthrough warningsLinfeng Zhang
Compiler -- gcc (Debian 7.3.0-5) 7.3.0 Change-Id: Ied91c7ef3d25c3ef44a1f667656176e2709b4f44
2018-03-20vp9-svc: Improve frame dropper for spatial layers.Marco Paniconi
SVC frame dropper: modify the logic to allow for individual spatial layers to drop. This removes the constraint that all upper spatial layers must drop when a given spatial layer drops. Add a flag to the pkt to indicate whether a spatial layer is encoded or dropped. This is needed for applications that enable this feature (frame dropping for SVC). For a current spatial layer, if its previous spatial layer is dropped, then disable certain features for that layer: inter-layer prediction, base_mv, partition_reuse, copy partition. Also add the constraint to never drop a spatial layer if its base layer is a key frame. Updates to sample encoder (vp9_spatial_svc_encoder) and the SVC datarate unittests to properly handle frame dropping. Bump up ABI version. Change-Id: I7d14ccf67b8d014a7abfce5ba3989fc623e94067
2018-03-17VP8: Fix out of range index for mvcost.Jerome Jiang
Clamp index between 0 and MVvals. Bit exact for speed -8, -6 and -4 on RTC set. BUG=b/72510002 Change-Id: I61bdb02a0924e157b3c1980f74fbbfe5ce51bc44
2018-03-15vp9-svc: Frame dropper for SVC.Marco Paniconi
If a given spatial layer decides to drop, due to the buffer/overshoot conditions for that layer, then drop that current spatial layer and all spatial layers above. In the current implementation the svc frame counter (and hence the pattern for the non-flexible SVC case) are updated on frame drops. Also add last spatial layer encoded to the pkt. This is useful for RTC applications that enable frame dropping for SVC. Update to the SVC datarate tests: enabled frame dropper on all SVC datarate tests, and made a fix to properly set the temporal_layer_id, which works now even on frame drops. Change-Id: If828c193f3cb6b1839803fd52fe9fbbda5b5a039
2018-03-14vp8 rdopt.c: zero rd.[rate_uv|distortion_uv]Johann
These values are not consistently set before calling update_best_mode. In vp9_rdopt.c they are individual values instead of a struct and are zero'd at declaration. Clears a static analysis warning: warning: The right operand of '-' is a garbage value RDCOST(x->rdmult, x->rddiv, (rd->rate2 - rd->rate_uv - other_cost), warning: The right operand of '-' is a garbage value (rd->distortion2 - rd->distortion_uv)); Change-Id: I19895d062e7c0ac67937126ebc5dcb0afd3a2931
2018-03-14vp8 mfqe: zero map[]Johann
The loop appears to set map[i] with the intention of running the 'j' loop up to that point. However, without zero'ing map[] first the behavior is unpredictable. Fixes a static analysis warning: warning: Branch condition evaluates to a garbage value for (j = 0; j < 4 && map[j]; ++j) { Change-Id: Ifa39353d8aa5cc47b467a7d3d8cdd3b5319fd997
2018-03-12vp8 temporal_filter: ignore return valueJohann
Clears up static clang analysis warning regarding a dead store. Change-Id: I6a90e6fd5f2775d933c46c7553811635bd2def21
2018-03-04move vp8 encodeopt to block_error_sse2Johann
The file contains sse2 implementations related to various block error functions. Update the .mk file to include it only when sse2 is requested. BUG=webm:1500 Change-Id: I67b766faed425fd7a96db8541b13c69670b65fec