radeonsi/vcn: Fix decode target index for H264 interlaced streams
With H264 the target surface can also be in the reference list for
current frame, so it can only be inserted into the DPB list after
iterating over all references.
Fixes: 0e68a2655f
("radeonsi/vcn: Rework decode ref handling")
Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34527>
(cherry picked from commit b0b52d4922c5d1cd818461801506a0bd6593643d)
This commit is contained in:

committed by
Eric Engestrom

parent
39e4fe7ab4
commit
5bae75e3a0
@@ -224,7 +224,7 @@
|
||||
"description": "radeonsi/vcn: Fix decode target index for H264 interlaced streams",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "0e68a2655f46b2a1d2ce969cf18fbababa09a099",
|
||||
"notes": null
|
||||
|
@@ -155,11 +155,18 @@ static rvcn_dec_message_avc_t get_h264_msg(struct radeon_decoder *dec,
|
||||
if (!found)
|
||||
dec->render_pic_list[i] = NULL;
|
||||
}
|
||||
if (dec->render_pic_list[i] == target) {
|
||||
result.decoded_pic_idx = i;
|
||||
} else if (result.decoded_pic_idx == 0xff && !dec->render_pic_list[i]) {
|
||||
dec->render_pic_list[i] = target;
|
||||
if (dec->render_pic_list[i] == target)
|
||||
result.decoded_pic_idx = i;
|
||||
}
|
||||
|
||||
/* Target surface can also be a reference (other field) */
|
||||
if (result.decoded_pic_idx == 0xff) {
|
||||
for (i = 0; i < ARRAY_SIZE(pic->ref) + 1; i++) {
|
||||
if (!dec->render_pic_list[i]) {
|
||||
dec->render_pic_list[i] = target;
|
||||
result.decoded_pic_idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user