summaryrefslogtreecommitdiff
path: root/vp9/decoder/vp9_decoder.c
AgeCommit message (Collapse)Author
2014-09-29Miscellaneous decoder changes for high bitdepthDeb Mukherjee
Also includes yv12 config changes. Change-Id: Iacf40d8bf486815b54c32a127ce3cd4516b7e44f
2014-09-09vp9: wait for key/intra-only frame after corruptionJames Zern
don't bother decoding any further after receiving an earlier decode error until a key/intra-only frame is encountered. Change-Id: I381917b70d7a9e6f8d6de42e3d181bb113a4cec4
2014-09-03Initializing intra modes without vpx_once().Dmitry Kovalev
Change-Id: I0a9d52432f2500f1bd8f43f229e70e38bb9a0343
2014-09-02Adds config opt for highbitdepth + misc. vpxDeb Mukherjee
Adds config parameter vp9_highbitdepth, to support highbitdepth profiles. Also includes most vpx level high bit-depth functions. However encode/decode in the highbitdepth profiles will not work until the rest of the code is in place. Change-Id: I34c53b253c38873611057a6cbc89a1361b8985a6
2014-08-29vp9: fix m/t loop filter invalid freeJames Zern
store the number of allocated rows in VP9LfSync, the calculated values can not be relied on when dealing with corrupt material. Change-Id: I13b8bcec9738c299a71df726772ab7ac05511e5b
2014-08-19Merge "[spatial svc]Add a few different encode frame tests."Minghai Shang
2014-08-18[spatial svc]Add a few different encode frame tests.Minghai Shang
1. Clean the code for encode frame tests 2. Add encode w/ and w/o alt reference frame test 3. Add encode SNR layers test 4. Add encode multiple layers but decode partial layers test Change-Id: Ibd2c9bc02525db584a6f931a98405f2d851b3cd6
2014-08-14vp9_copy_reference_dec: check ref frame index before useJames Zern
use get_ref_frame() to ensure a valid frame is retrieved if one exists Change-Id: I4b116d928e643ee62a991babd4b974037b6b3830
2014-08-08Common encode/decode function to get reference frameAdrian Grange
Replaced encoder and decoder functions to get a pointer to a reference frame with a common function, vp9_get_ref_frame, and simplified it. Change-Id: Icb206fcce8caace3bfd1db3dbfa318dde79043ee
2014-07-15Fix show_existing_frame not decreasing frame buffer ref counter.Alexander Voronov
The issue was introduced by commit g7c43fb6. If current frame is repeated from existing-ref pool, frame buffer ref counter is not decreased, so buffer isn't released. Decoder fails being unable to allocate new frame buffer at some point. Added a test vector to verify that the condition will not recur later. Test vector was generated by the code in this patch: https://gerrit.chromium.org/gerrit/#/c/70862/ Change-Id: I8af96eb5b9670176e01a281d2e18bd458712cf78
2014-07-10call vp[89]_clear_system_state after longjmpJames Zern
restore the environment post encode/decode failure Change-Id: I3c72e2260a616432eaf1f9545d4fb4d8e45cc7b0
2014-07-09Merge "vp9_decoder_remove: destroy common after thread shutdown"James Zern
2014-07-09vp9_decoder_remove: destroy common after thread shutdownJames Zern
in a failure case the threads may still be running and share a reference to VP9_COMMON Change-Id: I867034b4b55f133663b8cbf6ca06e72acf952849
2014-07-08Fix decoder handling of intra-only framesAdrian Grange
This patch fixes bug 633: https://code.google.com/p/webm/issues/detail?id=633 The first decoded frame does not have to be a keyframe, it could be an inter-frame that is coded intra-only. This patch fixes the handling of intra-only frames. A test vector has also been added that encodes 3 intra-only frames at the start of the clip. The test vector was generated using the code in the following patch: https://gerrit.chromium.org/gerrit/#/c/70680/ Change-Id: Ib40b1dbf91aae2bc047e23c626eaef09d1860147
2014-07-01update vp9_thread.[hc]James Zern
pull the latest from WebP, which adds a worker interface abstraction allowing an application to override init/reset/sync/launch/execute/end this has the side effect of removing a harmless, but annoying, TSan warning. Original source: http://git.chromium.org/webm/libwebp.git 100644 blob 08ad4e1fecba302bf1247645e84a7d2779956bc3 src/utils/thread.c 100644 blob 7bd451b124ae3b81596abfbcc823e3cb129d3a38 src/utils/thread.h Local modifications: - s/WebP/VP9/g - camelcase functions -> lower with _'s - associate '*' with the variable, not the type Change-Id: I875ac5a74ed873cbcb19a3a100b5e0ca6fcd9aed
2014-06-27Revert "Revert "Revert 3 patches from Hangyu to get Chrome to build:""James Zern
This reverts commit b336356198b8ada50fbb59f04f11cefceaf5ff95. This causes a hang in: VP9/InvalidFileTest.ReturnCode/3 the change to test/user_priv_test.cc remains with a minor update Change-Id: I4a8a272ca37ea329b0f413f0b1cd827a238bd9fd
2014-06-25Revert "Revert 3 patches from Hangyu to get Chrome to build:"hkuang
This patch reverts the previous revert from Jim and also add a variable user_priv in the FrameWorker to save the user_priv passed from the application. In the decoder_get_frame function, the user_priv will be binded with the img. This change is needed or it will fail the unit test added here: https://gerrit.chromium.org/gerrit/#/c/70610/ This reverts commit 9be46e4565f553460a1bbbf58d9f99067d3242ce. Change-Id: I376d9a12ee196faffdf3c792b59e6137c56132c1
2014-06-23Merge "Remove unused vp9_init_quant_tables function"Jingning Han
2014-06-21Revert 3 patches from Hangyu to get Chrome to build:Jim Bankoski
Avoids failures: MSE_ClearKey/EncryptedMediaTest.Playback_VP9Video_WebM/0 MSE_ClearKey_Prefixed/EncryptedMediaTest.Playback_VP9Video_WebM/0 MSE_ExternalClearKey_Prefixed/EncryptedMediaTest.Playback_VP9Video_WebM/0 MSE_ExternalClearKey/EncryptedMediaTest.Playback_VP9Video_WebM/0 MSE_ExternalClearKeyDecryptOnly/EncryptedMediaTest.Playback_VP9Video_WebM/0 MSE_ExternalClearKeyDecryptOnly_Prefixed/EncryptedMediaTest.Playback_VP9Video_WebM/0 SRC_ExternalClearKey/EncryptedMediaTest.Playback_VP9Video_WebM/0 SRC_ExternalClearKey_Prefixed/EncryptedMediaTest.Playback_VP9Video_WebM/0 SRC_ClearKey_Prefixed/EncryptedMediaTest.Playback_VP9Video_WebM/0 Patches are This reverts commit 9bc040859b0ca6869d31bc0efa223e8684eef37a This reverts commit 6f5aba069a2c7ffb293ddce70219a9ab4a037441 This reverts commit 9bc040859b0ca6869d31bc0efa223e8684eef37a I1f250441 Revert "Refactor the vp9_get_frame code for frame parallel." Ibfdddce5 Revert "Delay decreasing reference count in frame-parallel decoding." I00ce6771 Revert "Introduce FrameWorker for decoding." Need better testing in libvpx for these commits Change-Id: Ifa1f279b0cabf4b47c051ec26018f9301c1e130e
2014-06-20Fix bug in error handling that causes segfaultJim Bankoski
See: https://code.google.com/p/chromium/issues/detail?id=362697 The code properly catches an invalid stream but seg faults instead of returning an error due to a buffer not having been initialized. This code fixes that. Change-Id: I695595e742cb08807e1dfb2f00bc097b3eae3a9b
2014-06-18Remove unused vp9_init_quant_tables functionJingning Han
This function is not effectively used, hence removed. Change-Id: I2e8e48fa07c7518931690f3b04bae920cb360e49
2014-06-13Delay decreasing reference count in frame-parallel decoding.hkuang
The current decoding scheme will decrease the reference count of the output frame when finish decoding. Then the application could copy the frame from the decoder buffer to application buffer. In frame-parallel decoding, a decoded frame will not be outputted until several frames later which depends on thread numbers. So the decoded frame's reference count should be decreased only after application finish copying the frame out. But due to the limitation of vpx_codec_get_frame, decoder could not know when application finish decoding. So use a index last_show_frame to release the last output frame's reference count. Change-Id: I403ee0d01148ac1182e5a2d87cf7dcc302b51e63
2014-05-21Removing decoded_key_frame flag.Dmitry Kovalev
Change-Id: I79576920efb7f3f6f197d386727409759d8bda8d
2014-05-21Merge "Deadline is not supported in VP9 decoder, removing it completely."Dmitry Kovalev
2014-05-20Refactor decode_tiles and loopfilter code.hkuang
The current decode_tiles decodes the frame one tile by one tile and then loopfilter the whole frame or use another worker thread to do loopfiltering. |------|------|------|------| |Tile1-|Tile2-|Tile3-|Tile4-| |------|------|------|------| For example, if a tile video has one row and four cols, decode_tiles will decode the Tile1, then Tile2, then Tile3, then Tile4. And during decode each tile, decode_tile will decode row by row in each tile. For frame parallel decoding, decode_tiles will decode video in row order across the tiles. So the order will be: "Decode 1st row of Tile1" -> "Decode 1st row of Tile2" -> "Decode 1st row of Tile3" -> "Decode 1st row of Tile4" -> "Decode 2nd row of Tile1" -> "Decode 2nd row of Tile2" -> "Decode 2nd row of Tile3" -> "Decode 2nd row of Tile4"-> "loopfilter 1st row" Change-Id: I2211f9adc6d142fbf411d491031203cb8a6dbf6b
2014-05-19Merge "Making vp9_initialize_dec() static."Dmitry Kovalev
2014-05-15cleanup -wextra warnings:Yaowu Xu
vp9_decoder.c vp9_dthread.c Change-Id: Iaafe941545db98e9e3559096a955894646084ac2
2014-05-14Making vp9_initialize_dec() static.Dmitry Kovalev
Change-Id: I831fe91dfadf4e89f5bbba6ab7a9917d8dd2ed55
2014-05-13Deadline is not supported in VP9 decoder, removing it completely.Dmitry Kovalev
Change-Id: I7675f23150404913f4b457add69fb846f6921997
2014-05-12Moving loopfilter call to vp9_decode_frame().Dmitry Kovalev
Inline loopfilter has been already handled in vp9_decode_frame(). Collecting all similar code in one place now. Change-Id: I358a0280fc7c2b27cca520bc1e8c16c4eb6491dd
2014-05-08Removing VP9DecoderConfig.Dmitry Kovalev
We only used two members from that struct: max_threads and inv_tile_order. Moving them directly to VP9Decoder struct. Change-Id: If696a4e5b5b41868a55f3cc971e1d7c1dd9d5f69
2014-04-29Using crop_{width, height} instead of {width, height}.Dmitry Kovalev
Change-Id: I6dc9741cdcd700f5c4a387f58da7feb58dd4bbda
2014-04-25Removing WRITE_RECON_BUFFER related code.Dmitry Kovalev
That code is not used, we could easily return it back using vpx_img_write() function. Change-Id: Id107875c6feab6ad245a518f6b437b6ed4b1246d
2014-04-11Renaming VP9D_CONFIG to VP9DecoderConfig.Dmitry Kovalev
Change-Id: I9677aab1c7bb0ca9e989cb21348a3a2c926d8f5a
2014-04-10Cleaning up vp9_dthread.{c, h}.Dmitry Kovalev
Change-Id: If33087462293605f79d9281af133091fff33a876
2014-04-08Renaming VP9D_COMP & VP9Decompressor to VP9Decoder.Dmitry Kovalev
Change-Id: Ieb9b455b8aaef9884391021b7f640ef24c554687
2014-04-07Cleaning up vp9_{cx, dx}_iface.c files.Dmitry Kovalev
Change-Id: Ib4e31ba74c4b882bd93942ef743f4a189892738d
2014-04-03Code clean up.hkuang
No need to check pbi->common.frame_to_show again. Change-Id: I572ea4afd0d8b6000c0bb7575b7023d75cad5a4e
2014-04-01Common configuration for MACROBLOCKD struct.Dmitry Kovalev
Change-Id: Ie2ea9dd8bd338cc9fe12ca9033df64f7644c68b3
2014-03-28Moving dqcoeff array to MACROBLOCKD in decoder.Dmitry Kovalev
Change-Id: I3e20c0cdb9d2437bddf21afb255855f2dead8e02
2014-03-25Removing redundant vpx_free() call.Dmitry Kovalev
above_seg_context is alreaded freed during vp9_remove_common() call. Change-Id: I16b72c710e71d2f143df2d47e876d220c8d374e0
2014-03-25Moving above_context to VP9_COMMON.Dmitry Kovalev
Change-Id: I713af99d1e17e05a20eab20df51d74ebfd1a68d2
2014-03-24Merge "Initialization code cleanup."Dmitry Kovalev
2014-03-24Initialization code cleanup.Dmitry Kovalev
Change-Id: I47a8b4bf9a6cc0063d1a6785eaaad641d0659e24
2014-03-21General cleanup in vp9_decoder.{h, c}.Dmitry Kovalev
Change-Id: I68819558a9c5ac6ea85fe62260712af6f4cc46b7
2014-03-21Merge "Reusing {above, left}_seg_context vars in both encoder and decoder."Dmitry Kovalev
2014-03-20Reusing {above, left}_seg_context vars in both encoder and decoder.Dmitry Kovalev
Change-Id: Id1fa36c92cb007b73a450cc8552e810cedad38b9
2014-03-20Removing source & source_sz from VP9Decompressor struct.Dmitry Kovalev
Change-Id: If4c1a48c60e8b27dd021a83170289ccc5467c6de
2014-03-19Removing mi_stream.Dmitry Kovalev
Change-Id: If674140e30c223c88894b983fd22a583efb99dcf
2014-03-13Adding vp9_swap_mi_and_prev_mi() function.Dmitry Kovalev
Change-Id: I18b3939f0b51085cdd25c9182c3a9c7536ca7e3e