[FFmpeg-devel] [PATCH] lavc/vaapi_h264: Don't try to merge fields in DPB for non-field pics
David Rosca
nowrep at gmail.com
Sun May 5 19:36:41 EEST 2024
This path can be hit when there are missing references while decoding
progressive stream and would completely break the DPB contents.
---
libavcodec/vaapi_h264.c | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/libavcodec/vaapi_h264.c b/libavcodec/vaapi_h264.c
index b47531ce1c..ca0076f57a 100644
--- a/libavcodec/vaapi_h264.c
+++ b/libavcodec/vaapi_h264.c
@@ -98,22 +98,24 @@ static int dpb_add(DPB *dpb, const H264Picture *pic)
if (dpb->size >= dpb->max_size)
return -1;
- for (i = 0; i < dpb->size; i++) {
- VAPictureH264 * const va_pic = &dpb->va_pics[i];
- if (va_pic->picture_id == ff_vaapi_get_surface_id(pic->f)) {
- VAPictureH264 temp_va_pic;
- fill_vaapi_pic(&temp_va_pic, pic, 0);
-
- if ((temp_va_pic.flags ^ va_pic->flags) & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)) {
- va_pic->flags |= temp_va_pic.flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD);
- /* Merge second field */
- if (temp_va_pic.flags & VA_PICTURE_H264_TOP_FIELD) {
- va_pic->TopFieldOrderCnt = temp_va_pic.TopFieldOrderCnt;
- } else {
- va_pic->BottomFieldOrderCnt = temp_va_pic.BottomFieldOrderCnt;
+ if (pic->field_picture) {
+ for (i = 0; i < dpb->size; i++) {
+ VAPictureH264 * const va_pic = &dpb->va_pics[i];
+ if (va_pic->picture_id == ff_vaapi_get_surface_id(pic->f)) {
+ VAPictureH264 temp_va_pic;
+ fill_vaapi_pic(&temp_va_pic, pic, 0);
+
+ if ((temp_va_pic.flags ^ va_pic->flags) & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD)) {
+ va_pic->flags |= temp_va_pic.flags & (VA_PICTURE_H264_TOP_FIELD | VA_PICTURE_H264_BOTTOM_FIELD);
+ /* Merge second field */
+ if (temp_va_pic.flags & VA_PICTURE_H264_TOP_FIELD) {
+ va_pic->TopFieldOrderCnt = temp_va_pic.TopFieldOrderCnt;
+ } else {
+ va_pic->BottomFieldOrderCnt = temp_va_pic.BottomFieldOrderCnt;
+ }
}
+ return 0;
}
- return 0;
}
}
--
2.45.0
More information about the ffmpeg-devel
mailing list