Commit Graph

109 Commits

Author SHA1 Message Date
jeffqjiangNew c919735380 * rocDecode/AVC: Added support for multiple slice parameter buffer submission for AVC multi-slice streams. (#234)
[ROCm/rocdecode commit: c496dfd3f2]
2024-02-12 10:22:42 -05:00
jeffqjiangNew cd37b816b6 Implemented proper slice parameter buffer submission for multiple slice streams. (#226)
* * rocDecode: Implemented proper slice parameter buffer submission for multiple slice streams.
 - We were submitting single slice parameter buffer for multiple slice streams. This works for other APIs but not for VAAPI, which requires to send slice parameter buffer once per slice.
 - At step 1, all the multi-slice structures are fixed sized (256). Will make them dynamic in the next step.
 - With this change, all 135 HEVC conformance streams now pass.

* * rocDecode: Multiple slice change step 2: make the fixed size slice info structure lists dynamic.

* * rocDecode: Minor changes in comments. No functional changes.

* *rocDecode: Changed INIT_SLICE_PARAM_LIST_NUM from 256 back to 16. 256 was set during debug process.

* * rocDecode: Add suggest changes from code review.

* * rocDecode: Moved slice_params_buf_id_ initialization to class VaapiVideoDecoder declaration, as suggested by code review.

[ROCm/rocdecode commit: 00127f16f1]
2024-02-09 15:09:49 -05:00
jeffqjiangNew 4c9d73f6af * rocDecode: Set MI2xx(VCN2.6) HEVC max decode resolution to 7680x4320. (#228)
[ROCm/rocdecode commit: 2576eb4390]
2024-02-08 10:54:07 -05:00
Aryan Salmanpour d7785b3d5e Return ROCDEC_NOT_IMPLEMENTED for GetDecoderCaps API for future GPU (#224)
[ROCm/rocdecode commit: 730f3b76d4]
2024-02-06 16:18:02 -05:00
Aryan Salmanpour 881d06a244 Enhance logging error in rocDecode library - let the upper level class prints the correct error code string instead of integer code from lower levels (#223)
[ROCm/rocdecode commit: 15526253c7]
2024-02-06 13:35:41 -05:00
Aryan Salmanpour c7f7a7c0e8 rename roDecMapVideoFrame to rocDecoGetVideoFrame and some other minor code cleanups (#222)
[ROCm/rocdecode commit: 38f50a1a10]
2024-02-06 11:38:54 -05:00
Aryan Salmanpour 18f165e424 Fix the performance issue introduced after PR#192 (#220)
* Fix the performance issue introduced after PR#192

* Destroy the current interop memories before reconfiguration

* initialize the interop to 0 after unmapping a surface

* code clean up

* check the mapped device mem/ext mem to be valid before destrying them

* code cleanup - add some comments

* make changes based on the reviewer comments

[ROCm/rocdecode commit: 929123abff]
2024-02-05 17:12:39 -05:00
jeffqjiangNew 39cc3e2a44 * rocDecode/AVC: Added initial B frame support. (#214)
- Basic B frames are decoded clean now.

[ROCm/rocdecode commit: 300be009de]
2024-02-01 09:58:00 -05:00
jeffqjiangNew 031c28105c * rocDecode/AVC: Fixed a few issues with P frame. (#212)
- Moved decoded reference picture marking after decode picture submission, according to the spec.
 - Fixed several errors in the decoding process.
 - Added two debug functions to log out DPB content and VAAPI buffer info.
 - P frames look good now.

[ROCm/rocdecode commit: 90cddfe655]
2024-01-31 09:10:41 -05:00
Aryan Salmanpour 119ee113c3 use the error code of VA_STATUS_ERROR_TIMEDOUT to avoid build failure with older va headers (#211)
[ROCm/rocdecode commit: e90a93eb4a]
2024-01-30 13:33:53 -05:00
jeffqjiangNew d15be3fff3 * rocDecode: Removed warning message about vaSyncSurface() time out error. (#209)
[ROCm/rocdecode commit: a55b967f86]
2024-01-29 14:21:21 -05:00
jeffqjiangNew e140ba1249 AVC: Added several steps in slice decoding process (8.2) (#208)
* * rocDecode/AVC: Added decode picture callback from parser to decoder and VAAPI decode submission.

* * rocDecode/AVC: Minor changes based on code review comments.

* * rocDecode/AVC: Removed a redundant line.

* * rocDecode/AVC: Added picture order count calculation.

* * rocDecode/AVC: Added initial implementation of reference list setup.

* * rocDecode/AVC: Added decoded reference picture marking.

* * rocDecode/AVC: Minor changes based on code review.

[ROCm/rocdecode commit: 6bd8509bec]
2024-01-29 12:09:36 -05:00
jeffqjiangNew e5ad62fa09 * rocDecode: Added back vaSyncSurface() to ExportSurface() call to guarantee decode completion. (#205)
- Needed to take care of time out case. Current implementation of vaSyncSurface() does not block indefinitely (contrary to VA-API spec), it returns VA_STATUS_ERROR_TIMEDOUT error when it blocks for a certain amount of time. Although time out can come from various reasons, we treat it as non-fatal and contiue waiting.

[ROCm/rocdecode commit: 10e3f0aeec]
2024-01-26 11:48:30 -05:00
jeffqjiangNew a0e7d3c29f Changed rocDecode API header variable naming to Google C++ style. (#196)
* * rocDecode: Changed rocDecode API header variable naming to Google C++ style.

* * rocDecode: Unified AVC/H264 naming to AVC. Minor naming changes on HEVC related names.

* * rocDecode: Minor comment fix based on code review.

[ROCm/rocdecode commit: cd6401750e]
2024-01-24 18:03:46 -05:00
jeffqjiangNew fd2b762fab AVC: Added decode picture callback from parser to decoder and VAAPI decode submission. (#190)
* * rocDecode/AVC: Added decode picture callback from parser to decoder and VAAPI decode submission.

* * rocDecode/AVC: Minor changes based on code review comments.

* * rocDecode/AVC: Removed a redundant line.

* * rocDecode/AVC: Condensed several lines based on code review feedback.

[ROCm/rocdecode commit: 426067898c]
2024-01-23 17:30:29 -08:00
Hui Liu 439eca4c3d fix mem leak (#194)
[ROCm/rocdecode commit: e7dbd65315]
2024-01-23 11:23:30 -08:00
Lakshmi Kumar fdcbc7ed25 fixes crashes from vaSyncSurface call (#195)
[ROCm/rocdecode commit: a65c52bc71]
2024-01-22 15:43:11 -08:00
jeffqjiangNew 5527ee0b79 Fixed display aspect ratio calculation for both AVC and HEVC. (#187)
* * rocDecode: Fixed display aspect ratio calculation.
 - We were assigning sample aspect ration (SAR) from VUI directly to display aspect ratio (DAR). Now we follow the correct procedure.

* * rocDecode: Fixed an error in display aspect ratio calculation. Should include sample aspect ratio in the final step.

[ROCm/rocdecode commit: cf82317396]
2024-01-18 11:31:54 -08:00
jeffqjiangNew e416b5a192 Added new sequence notification callback for AVC. (#184)
* * rocDecode/AVC: Added new sequence notification callback.

* * rocDecode/AVC: Removed the commented out code.

* * rocDecode/AVC: Changed function name to better describe the operation.

* * rocDecode/AVC: Minor formatting change.

[ROCm/rocdecode commit: a7bb9953c6]
2024-01-17 14:24:58 -05:00
Aryan Salmanpour e723871cba Add support for rocDecGetErrorName for getting the rocDecStatus error string (#185)
* Add support for rocDecGetErrorName for getting the rocDecStatus error string

* Add description of the API

[ROCm/rocdecode commit: f7997b716d]
2024-01-17 14:00:54 -05:00
Aryan Salmanpour 5456737287 Print the vaapi error name string instead of the vaapi status integer for better clarity if a vaapi failure occurs (#182)
[ROCm/rocdecode commit: f7fce4d9b4]
2024-01-17 11:06:34 -05:00
Aryan Salmanpour 03192ed89c Print the hip error name string instead of the hip status integer for better clarity of a hip failure occurs (#181)
[ROCm/rocdecode commit: 1a77f3d1b0]
2024-01-17 10:52:48 -05:00
Aryan Salmanpour 5cd81b0a5b Remove unnecessary device id check (#180)
[ROCm/rocdecode commit: b188989f3f]
2024-01-17 10:27:06 -05:00
jeffqjiangNew 40408ce2b3 Added initial AVC parser. (#176)
* * rocDecode/AVC: Added initial AVC parser.
 - Added AVC SPS, PPS and slice header parsing functions.
 - Merged common parsing code from AVC and HEVC parsers to their super class.

* * rocDecode/AVC: Formating changes. No functional changes.

[ROCm/rocdecode commit: 395a1249c1]
2024-01-16 20:57:40 -05:00
Aryan Salmanpour 4c0c0a518f Add support to correctly detect the gfx name for gfx940/gfx941/gfx942 (#178)
[ROCm/rocdecode commit: fb953b4366]
2024-01-16 14:49:54 -05:00
Aryan Salmanpour a28ebcb3f2 Remove unsupported GPUs (#175)
[ROCm/rocdecode commit: 3d28911453]
2024-01-15 10:50:34 -08:00
Aryan Salmanpour 8512426f1b Add support for gfx1101 and gfx1102 (#165)
[ROCm/rocdecode commit: 28c00cb354]
2024-01-10 14:17:04 -05:00
jeffqjiangNew f90684cc40 * rocDecode/HEVC: Code clean up. (#163)
- Moved HEVC standard specific defines out of HevcVideoParser class to a new file.
 - Changed some namings to be more specification compliant.
 - No functional changes.

[ROCm/rocdecode commit: 2a4026470f]
2024-01-10 11:44:07 -05:00
jeffqjiangNew 4c9a35a6a8 * rocDecode: Updated Copyright message for 2024. (#160)
[ROCm/rocdecode commit: 04fe74f390]
2024-01-09 20:47:16 -05:00
Aryan Salmanpour adb35c9fa5 code cleanup - remove unused hipstream from the RocDecoder class (#155)
[ROCm/rocdecode commit: 224e98ab2d]
2024-01-08 14:54:28 -05:00
jeffqjiangNew bacf9f6700 Fixed a couple of errors in long term reference picture set parsing and long term reference picture list construction. (#151)
* * rocDecode/HEVC: Fixed a couple of errors in long term reference picture set parsing and long term reference picture list construction.

* * rocDecode/HEVC: Coding format change: removed newline in front of else statements. No functional changes.

[ROCm/rocdecode commit: c5483c751e]
2024-01-05 09:15:33 -05:00
jeffqjiangNew 7ee24483ff * rocDecode/HEVC: Fixed a bug in destroy data buffer function in VAAPI layer. (#150)
- We have to clear the buffer id after destroying it. Without this clearing, we will encounter VAAPI buffer destroy failure on certain conformance streams where scaling list is signaled dynamically. In this case, we create different number of data buffers on different frames. If we do not clear the buffer id when destroying it, a dummy scaling list buffer id will have the same value as another buffer, resulting double destroy.

[ROCm/rocdecode commit: 33d6b37ddb]
2024-01-02 15:56:18 -05:00
jeffqjiangNew 2b9ea06e5c * rocDecode/HEVC: Fixed an issue in reference list reconstruction. (#149)
- Removed a size check which was put in in early bring up stage and causes some conformance stream failures.
  - Also capped the DPB buffer size to 16 when we increase it from the spec value.

[ROCm/rocdecode commit: 6db0b79144]
2024-01-02 15:55:52 -05:00
Aryan Salmanpour c0efaf16e6 Check va_display_ to be valid before calling any VA APIs (#148)
[ROCm/rocdecode commit: 6c07e53614]
2023-12-21 08:16:24 -08:00
jeffqjiangNew 3567946884 Fixed a POC calculation error in some corner cases. (#145)
* * rocDecode/HEVC: Fixed a POC calculation error in some corner cases.

* * rocDecode/HEVC: Added a newline between two functions. No functional changes.

[ROCm/rocdecode commit: 1cdbac7d70]
2023-12-18 08:20:55 -05:00
jeffqjiangNew 8d44a48ee0 Fixed a bug in reference picture list modification parsing. (#143)
* * rocDecode/HEVC: Fixed the random crash associated with undecodable RASL pictures.
  - When a CRA picutre occurs, all the pictures in the DPB are emptied. However, the following RASL (Random Access Skipped Leading) picture can still reference these emptied pictures, making them undecodeble.
  - We initialized the reference picture lists with (0xFF), representing invalid picture index. Normally these invalid indices are replaced by valid values during RPS decoding. However, on undecodable RASL pictures, we can not find an existing reference picture in DPB, leaving the invalid index untouched and resulting invalid indexing later on.
  - Now we initialize the reference picture lists with a valid value 0. Also we add index range check on reference buffer at VA-API layer to avoid invalid memory access.

* * rocDecode/HEVC: Fixed a typo in sampel app message.

* *rocDecode/HEVC: Fixed a bug in reference picture list modification parsing.
  - This fixed the test failure of two conformance streams.

[ROCm/rocdecode commit: c9cfcde12d]
2023-12-15 16:08:19 -05:00
jeffqjiangNew 7b2035c071 Fixed the random crash associated with undecodable RASL pictures. (#141)
* * rocDecode/HEVC: Fixed the random crash associated with undecodable RASL pictures.
  - When a CRA picutre occurs, all the pictures in the DPB are emptied. However, the following RASL (Random Access Skipped Leading) picture can still reference these emptied pictures, making them undecodeble.
  - We initialized the reference picture lists with (0xFF), representing invalid picture index. Normally these invalid indices are replaced by valid values during RPS decoding. However, on undecodable RASL pictures, we can not find an existing reference picture in DPB, leaving the invalid index untouched and resulting invalid indexing later on.
  - Now we initialize the reference picture lists with a valid value 0. Also we add index range check on reference buffer at VA-API layer to avoid invalid memory access.

* * rocDecode/HEVC: Fixed a typo in sampel app message.

[ROCm/rocdecode commit: 0fbd030b5d]
2023-12-15 15:54:43 -05:00
Aryan Salmanpour 0652ec852c return the correct rocdec_status if DestroyDataBuffers fails (#137)
[ROCm/rocdecode commit: 9a78101d22]
2023-12-13 10:57:14 -05:00
jeffqjiangNew 82d328b627 * rocDecode/HEVC: Fixed the decode failure of the conformance stream BUMPING_A_ericsson_1.bit. (#133)
- This stream tests output order conformance, in particular the bumping process. Four temporal layers are used and IRAP pictures with no_output_of_prior_pics_flag equal to 1 are present in the bitstream.

[ROCm/rocdecode commit: 42f109369e]
2023-12-13 09:48:15 -05:00
jeffqjiangNew 7cd5d6c0ee * rocDecode/HEVC: Added frame rate info report when it is available, from the parser. (#130)
[ROCm/rocdecode commit: 7240ee8973]
2023-12-12 13:47:19 -05:00
Aryan Salmanpour 5a9f519761 Don't call DestroyDataBuffers during the reconfiguration - this function will be called during SubmitDecode (#131)
[ROCm/rocdecode commit: b8a8b66b91]
2023-12-11 17:10:10 -05:00
Aryan Salmanpour b62bf4a6a1 Fix perf drop on some MI250 nodes - create VABuffers for every submission, and don't use vaMapBuffer/vaUnmapBuffer (#129)
* create VABuffers for every submission, and don't use vaMapBuffer/vaUnmapBuffer

* code clean up

* address review comments

[ROCm/rocdecode commit: b77d00e38e]
2023-12-11 15:40:50 -05:00
jeffqjiangNew a265b9a3da * rocDecode: Fix for the performance regression introduced by PR#114. (#128)
- Skip the additional buffer bumping specified in process C.5.2.2., to avoid synchronous job submission in some cases.
  - Increase DPB buffer size now by 2 to avoid overwriting pictures to be output.

[ROCm/rocdecode commit: a2dfa8bc26]
2023-12-08 17:53:01 -05:00
Lakshmi Kumar 6c3f0095da adding support for MI300A A1 - gfx942 (#124)
[ROCm/rocdecode commit: f221d78258]
2023-12-07 09:31:44 -05:00
jeffqjiangNew 64d7f1c37f * rocDecode/HEVC: In flush DPB function, added a check for any buffers that need for output before any actions. This prevents any potential issues. (#121)
[ROCm/rocdecode commit: fcd63b9358]
2023-12-06 09:39:49 -05:00
Aryan Salmanpour 08c99da4fa Add nullptr parameters check for all decoder/parser APIs and some code clean up (#120)
[ROCm/rocdecode commit: 9257cd6fcf]
2023-12-05 13:06:34 -05:00
Aryan Salmanpour 70a18314d5 Add support for rocDecReconfigureDecoder API (#116)
* Add support for rocDecReconfigureDecoder API

* adrress reviewer's comemnts

* Add doxygen comment for ReconfigureDecoder function

[ROCm/rocdecode commit: 875994bb4f]
2023-12-05 11:16:32 -05:00
jeffqjiangNew dd3b609a09 * rocDecode/HEVC: Fix for decode errors on a few conformance streams. (#114)
- Re-wrote short term RPS parsing function. The previous code generates incorrect results on some conformance streams.
  - No longer skip the additional buffer bumping specified in process C.5.2.2. This avoids the situation where the current frame overwrites the previously decoded buffer that is being output/displayed.

[ROCm/rocdecode commit: 5e65788bdd]
2023-12-04 11:53:26 -05:00
Aryan Salmanpour bf9ca09a9a Chamne the return type of FillSeqCallbackFn to int and check to see if it returns any error (#112)
[ROCm/rocdecode commit: ae63fbacab]
2023-12-01 14:50:33 -05:00
jeffqjiangNew 10545bcd94 * rocDecode/HEVC: When video size changes, set new SPS activation flag. This takes care of the case where a new SPS replaces the old SPS with the same id but with different dimensions. (#110)
[ROCm/rocdecode commit: a878a106fb]
2023-11-30 18:32:25 -05:00