Commit 7ff0752871 for ffmpeg
commit 7ff075287103af42b13df558ce8a7ff98c17971d
Author: Kacper Michajłow <kasper93@gmail.com>
Date: Tue Nov 10 11:50:28 2026 +0100
avcodec/dxva2_{h264,hevc,vp9}: reject the invalid surface index 127
The DXVA specifications of H.264, HEVC and VP8/VP9 reserve the
Index7Bits value 127 for entries without a valid surface, but the
asserts in fill_picture_entry() accept it. VP9 decoding into surface 127
reset the driver on AMD RX 9070 XT (32.0.32015.12012), and H.264 and
HEVC decoded wrong.
Signed-off-by: Kacper Michajłow <kasper93@gmail.com>
diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c
index 9184ba8889..4bf5f560d9 100644
--- a/libavcodec/dxva2_h264.c
+++ b/libavcodec/dxva2_h264.c
@@ -44,7 +44,7 @@ struct dxva2_picture_context {
static void fill_picture_entry(DXVA_PicEntry_H264 *pic,
unsigned index, unsigned flag)
{
- av_assert0((index&0x7f) == index && (flag&0x01) == flag);
+ av_assert0(index < 0x7f && (flag&0x01) == flag);
pic->bPicEntry = index | (flag << 7);
}
diff --git a/libavcodec/dxva2_hevc.c b/libavcodec/dxva2_hevc.c
index 85698dfcce..3b5b9833ae 100644
--- a/libavcodec/dxva2_hevc.c
+++ b/libavcodec/dxva2_hevc.c
@@ -43,7 +43,7 @@ struct hevc_dxva2_picture_context {
static void fill_picture_entry(DXVA_PicEntry_HEVC *pic,
unsigned index, unsigned flag)
{
- av_assert0((index & 0x7f) == index && (flag & 0x01) == flag);
+ av_assert0(index < 0x7f && (flag & 0x01) == flag);
pic->bPicEntry = index | (flag << 7);
}
diff --git a/libavcodec/dxva2_vp9.c b/libavcodec/dxva2_vp9.c
index cffa95e1d1..a6aa521ed6 100644
--- a/libavcodec/dxva2_vp9.c
+++ b/libavcodec/dxva2_vp9.c
@@ -39,7 +39,7 @@ struct vp9_dxva2_picture_context {
static void fill_picture_entry(DXVA_PicEntry_VPx *pic,
unsigned index, unsigned flag)
{
- av_assert0((index & 0x7f) == index && (flag & 0x01) == flag);
+ av_assert0(index < 0x7f && (flag & 0x01) == flag);
pic->bPicEntry = index | (flag << 7);
}