diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h
index 386774750a..799470015c 100644
--- a/libavcodec/cbs_av1.h
+++ b/libavcodec/cbs_av1.h
@@ -130,6 +130,38 @@ typedef struct AV1RawSequenceHeader {
     uint8_t film_grain_params_present;
 } AV1RawSequenceHeader;
 
+typedef struct AV1RawFilmGrainParams {
+    uint8_t  apply_grain;
+    uint16_t grain_seed;
+    uint8_t  update_grain;
+    uint8_t  film_grain_params_ref_idx;
+    uint8_t  num_y_points;
+    uint8_t  point_y_value[14];
+    uint8_t  point_y_scaling[14];
+    uint8_t  chroma_scaling_from_luma;
+    uint8_t  num_cb_points;
+    uint8_t  point_cb_value[10];
+    uint8_t  point_cb_scaling[10];
+    uint8_t  num_cr_points;
+    uint8_t  point_cr_value[10];
+    uint8_t  point_cr_scaling[10];
+    uint8_t  grain_scaling_minus_8;
+    uint8_t  ar_coeff_lag;
+    uint8_t  ar_coeffs_y_plus_128[24];
+    uint8_t  ar_coeffs_cb_plus_128[25];
+    uint8_t  ar_coeffs_cr_plus_128[25];
+    uint8_t  ar_coeff_shift_minus_6;
+    uint8_t  grain_scale_shift;
+    uint8_t  cb_mult;
+    uint8_t  cb_luma_mult;
+    uint16_t cb_offset;
+    uint8_t  cr_mult;
+    uint8_t  cr_luma_mult;
+    uint16_t cr_offset;
+    uint8_t  overlap_flag;
+    uint8_t  clip_to_restricted_range;
+} AV1RawFilmGrainParams;
+
 typedef struct AV1RawFrameHeader {
     uint8_t  show_existing_frame;
     uint8_t  frame_to_show_map_idx;
@@ -251,35 +283,7 @@ typedef struct AV1RawFrameHeader {
     //AV1RawSubexp gm_params[AV1_TOTAL_REFS_PER_FRAME][6];
     uint32_t gm_params[AV1_TOTAL_REFS_PER_FRAME][6];
 
-    uint8_t  apply_grain;
-    uint16_t grain_seed;
-    uint8_t  update_grain;
-    uint8_t  film_grain_params_ref_idx;
-    uint8_t  num_y_points;
-    uint8_t  point_y_value[14];
-    uint8_t  point_y_scaling[14];
-    uint8_t  chroma_scaling_from_luma;
-    uint8_t  num_cb_points;
-    uint8_t  point_cb_value[10];
-    uint8_t  point_cb_scaling[10];
-    uint8_t  num_cr_points;
-    uint8_t  point_cr_value[10];
-    uint8_t  point_cr_scaling[10];
-    uint8_t  grain_scaling_minus_8;
-    uint8_t  ar_coeff_lag;
-    uint8_t  ar_coeffs_y_plus_128[24];
-    uint8_t  ar_coeffs_cb_plus_128[25];
-    uint8_t  ar_coeffs_cr_plus_128[25];
-    uint8_t  ar_coeff_shift_minus_6;
-    uint8_t  grain_scale_shift;
-    uint8_t  cb_mult;
-    uint8_t  cb_luma_mult;
-    uint16_t cb_offset;
-    uint8_t  cr_mult;
-    uint8_t  cr_luma_mult;
-    uint16_t cr_offset;
-    uint8_t  overlap_flag;
-    uint8_t  clip_to_restricted_range;
+    AV1RawFilmGrainParams film_grain;
 } AV1RawFrameHeader;
 
 typedef struct AV1RawTileData {
diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index f866dc7b2e..c95b1c1c1a 100644
--- a/libavcodec/cbs_av1_syntax_template.c
+++ b/libavcodec/cbs_av1_syntax_template.c
@@ -1194,15 +1194,16 @@ static int FUNC(global_motion_params)(CodedBitstreamContext *ctx, RWContext *rw,
 }
 
 static int FUNC(film_grain_params)(CodedBitstreamContext *ctx, RWContext *rw,
-                                   AV1RawFrameHeader *current)
+                                   AV1RawFrameHeader *frame_header)
 {
     CodedBitstreamAV1Context  *priv = ctx->priv_data;
     const AV1RawSequenceHeader *seq = priv->sequence_header;
+    AV1RawFilmGrainParams *current = &frame_header->film_grain;
     int num_pos_luma, num_pos_chroma;
     int i, err;
 
     if (!seq->film_grain_params_present ||
-        (!current->show_frame && !current->showable_frame))
+        (!frame_header->show_frame && !frame_header->showable_frame))
         return 0;
 
     flag(apply_grain);
@@ -1212,7 +1213,7 @@ static int FUNC(film_grain_params)(CodedBitstreamContext *ctx, RWContext *rw,
 
     fb(16, grain_seed);
 
-    if (current->frame_type == AV1_FRAME_INTER)
+    if (frame_header->frame_type == AV1_FRAME_INTER)
         flag(update_grain);
     else
         infer(update_grain, 1);
diff --git a/libavcodec/nvdec_av1.c b/libavcodec/nvdec_av1.c
index 9da1c840e3..1bac1fe26c 100644
--- a/libavcodec/nvdec_av1.c
+++ b/libavcodec/nvdec_av1.c
@@ -42,6 +42,7 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u
     const AV1DecContext *s = avctx->priv_data;
     const AV1RawSequenceHeader *seq = s->raw_seq;
     const AV1RawFrameHeader *frame_header = s->raw_frame_header;
+    const AV1RawFilmGrainParams *film_grain = &frame_header->film_grain;
 
     NVDECContext      *ctx = avctx->internal->hwaccel_priv_data;
     CUVIDPICPARAMS     *pp = &ctx->pic_params;
@@ -54,7 +55,7 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u
 
     int ret, i, j;
 
-    ret = ff_nvdec_start_frame_sep_ref(avctx, cur_frame, frame_header->apply_grain);
+    ret = ff_nvdec_start_frame_sep_ref(avctx, cur_frame, film_grain->apply_grain);
     if (ret < 0)
         return ret;
 
@@ -181,24 +182,24 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u
             .spatial_layer_id  = s->cur_frame.spatial_id,
 
             /* Film Grain Params */
-            .apply_grain              = frame_header->apply_grain,
-            .overlap_flag             = frame_header->overlap_flag,
-            .scaling_shift_minus8     = frame_header->grain_scaling_minus_8,
-            .chroma_scaling_from_luma = frame_header->chroma_scaling_from_luma,
-            .ar_coeff_lag             = frame_header->ar_coeff_lag,
-            .ar_coeff_shift_minus6    = frame_header->ar_coeff_shift_minus_6,
-            .grain_scale_shift        = frame_header->grain_scale_shift,
-            .clip_to_restricted_range = frame_header->clip_to_restricted_range,
-            .num_y_points             = frame_header->num_y_points,
-            .num_cb_points            = frame_header->num_cb_points,
-            .num_cr_points            = frame_header->num_cr_points,
-            .random_seed              = frame_header->grain_seed,
-            .cb_mult                  = frame_header->cb_mult,
-            .cb_luma_mult             = frame_header->cb_luma_mult,
-            .cb_offset                = frame_header->cb_offset,
-            .cr_mult                  = frame_header->cr_mult,
-            .cr_luma_mult             = frame_header->cr_luma_mult,
-            .cr_offset                = frame_header->cr_offset
+            .apply_grain              = film_grain->apply_grain,
+            .overlap_flag             = film_grain->overlap_flag,
+            .scaling_shift_minus8     = film_grain->grain_scaling_minus_8,
+            .chroma_scaling_from_luma = film_grain->chroma_scaling_from_luma,
+            .ar_coeff_lag             = film_grain->ar_coeff_lag,
+            .ar_coeff_shift_minus6    = film_grain->ar_coeff_shift_minus_6,
+            .grain_scale_shift        = film_grain->grain_scale_shift,
+            .clip_to_restricted_range = film_grain->clip_to_restricted_range,
+            .num_y_points             = film_grain->num_y_points,
+            .num_cb_points            = film_grain->num_cb_points,
+            .num_cr_points            = film_grain->num_cr_points,
+            .random_seed              = film_grain->grain_seed,
+            .cb_mult                  = film_grain->cb_mult,
+            .cb_luma_mult             = film_grain->cb_luma_mult,
+            .cb_offset                = film_grain->cb_offset,
+            .cr_mult                  = film_grain->cr_mult,
+            .cr_luma_mult             = film_grain->cr_luma_mult,
+            .cr_offset                = film_grain->cr_offset
         }
     };
 
@@ -258,23 +259,23 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u
     }
 
     /* Film Grain Params */
-    if (frame_header->apply_grain) {
+    if (film_grain->apply_grain) {
         for (i = 0; i < 14; ++i) {
-            ppc->scaling_points_y[i][0] = frame_header->point_y_value[i];
-            ppc->scaling_points_y[i][1] = frame_header->point_y_scaling[i];
+            ppc->scaling_points_y[i][0] = film_grain->point_y_value[i];
+            ppc->scaling_points_y[i][1] = film_grain->point_y_scaling[i];
         }
         for (i = 0; i < 10; ++i) {
-            ppc->scaling_points_cb[i][0] = frame_header->point_cb_value[i];
-            ppc->scaling_points_cb[i][1] = frame_header->point_cb_scaling[i];
-            ppc->scaling_points_cr[i][0] = frame_header->point_cr_value[i];
-            ppc->scaling_points_cr[i][1] = frame_header->point_cr_scaling[i];
+            ppc->scaling_points_cb[i][0] = film_grain->point_cb_value[i];
+            ppc->scaling_points_cb[i][1] = film_grain->point_cb_scaling[i];
+            ppc->scaling_points_cr[i][0] = film_grain->point_cr_value[i];
+            ppc->scaling_points_cr[i][1] = film_grain->point_cr_scaling[i];
         }
         for (i = 0; i < 24; ++i) {
-            ppc->ar_coeffs_y[i] = (short)frame_header->ar_coeffs_y_plus_128[i] - 128;
+            ppc->ar_coeffs_y[i] = (short)film_grain->ar_coeffs_y_plus_128[i] - 128;
         }
         for (i = 0; i < 25; ++i) {
-            ppc->ar_coeffs_cb[i] = (short)frame_header->ar_coeffs_cb_plus_128[i] - 128;
-            ppc->ar_coeffs_cr[i] = (short)frame_header->ar_coeffs_cr_plus_128[i] - 128;
+            ppc->ar_coeffs_cb[i] = (short)film_grain->ar_coeffs_cb_plus_128[i] - 128;
+            ppc->ar_coeffs_cr[i] = (short)film_grain->ar_coeffs_cr_plus_128[i] - 128;
         }
     }
 
