diff --git a/libavcodec/dxva2_h264.c b/libavcodec/dxva2_h264.c
index bf66f1e01e6f03adcb3ead3c9d494f3f9485f9f5..9262bb89575793a69bc113f195cf657828b1c016 100644
--- a/libavcodec/dxva2_h264.c
+++ b/libavcodec/dxva2_h264.c
@@ -220,11 +220,11 @@ static void fill_slice_long(AVCodecContext *avctx, DXVA_Slice_H264_Long *slice,
                 for (plane = 0; plane < 3; plane++) {
                     int w, o;
                     if (plane == 0 && h->luma_weight_flag[list]) {
-                        w = h->luma_weight[list][i][0];
-                        o = h->luma_weight[list][i][1];
+                        w = h->luma_weight[i][list][0];
+                        o = h->luma_weight[i][list][1];
                     } else if (plane >= 1 && h->chroma_weight_flag[list]) {
-                        w = h->chroma_weight[list][i][plane-1][0];
-                        o = h->chroma_weight[list][i][plane-1][1];
+                        w = h->chroma_weight[i][list][plane-1][0];
+                        o = h->chroma_weight[i][list][plane-1][1];
                     } else {
                         w = 1 << (plane == 0 ? h->luma_log2_weight_denom :
                                                h->chroma_log2_weight_denom);