diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index b6a329d2098313fceb8586808367935be970e89e..461d3aa6117fc6e0568c2511ad7e3e9b7491cfb7 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -131,7 +131,7 @@ static int avi_write_counters(AVFormatContext *s, int riff_id)
         av_assert0(avist->frames_hdr_strm);
         stream = s->streams[n]->codec;
         avio_seek(pb, avist->frames_hdr_strm, SEEK_SET);
-        ff_parse_specific_params(stream, &au_byterate, &au_ssize, &au_scale);
+        ff_parse_specific_params(s->streams[n], &au_byterate, &au_ssize, &au_scale);
         if (au_ssize == 0)
             avio_wl32(pb, avist->packet_count);
         else
@@ -260,7 +260,7 @@ static int avi_write_header(AVFormatContext *s)
         avio_wl16(pb, 0); /* language */
         avio_wl32(pb, 0); /* initial frame */
 
-        ff_parse_specific_params(enc, &au_byterate, &au_ssize, &au_scale);
+        ff_parse_specific_params(st, &au_byterate, &au_ssize, &au_scale);
 
         if (   enc->codec_type == AVMEDIA_TYPE_VIDEO
             && enc->codec_id != AV_CODEC_ID_XSUB
diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c
index b7ea286338a53cc3e241afb3492c32ed9deb4dd9..5db380f752078a2b30ef6f72a19eccf84eecc7f8 100644
--- a/libavformat/nutenc.c
+++ b/libavformat/nutenc.c
@@ -722,7 +722,7 @@ static int nut_write_header(AVFormatContext *s)
         AVStream *st = s->streams[i];
         int ssize;
         AVRational time_base;
-        ff_parse_specific_params(st->codec, &time_base.den, &ssize, &time_base.num);
+        ff_parse_specific_params(st, &time_base.den, &ssize, &time_base.num);
 
         if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && st->codec->sample_rate) {
             time_base = (AVRational) {1, st->codec->sample_rate};
diff --git a/libavformat/riff.h b/libavformat/riff.h
index 6f07179b2aeb50797770837d85dda6c5ce6e3727..88a77b07c8d749a13ab51666fc8499882cd6627e 100644
--- a/libavformat/riff.h
+++ b/libavformat/riff.h
@@ -67,7 +67,7 @@ int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size);
 extern const AVCodecTag ff_codec_bmp_tags[]; // exposed through avformat_get_riff_video_tags()
 extern const AVCodecTag ff_codec_wav_tags[];
 
-void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale);
+void ff_parse_specific_params(AVStream *st, int *au_rate, int *au_ssize, int *au_scale);
 
 int ff_read_riff_info(AVFormatContext *s, int64_t size);
 
diff --git a/libavformat/riffenc.c b/libavformat/riffenc.c
index 9cdf301f2631cc353b4fb20e563e0f83a6e7265e..edb8b4ce4420ce6f8ca4b145ea35967b6bcea9e2 100644
--- a/libavformat/riffenc.c
+++ b/libavformat/riffenc.c
@@ -234,32 +234,33 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc,
     }
 }
 
-void ff_parse_specific_params(AVCodecContext *stream, int *au_rate,
+void ff_parse_specific_params(AVStream *st, int *au_rate,
                               int *au_ssize, int *au_scale)
 {
+    AVCodecContext *codec = st->codec;
     int gcd;
     int audio_frame_size;
 
     /* We use the known constant frame size for the codec if known, otherwise
      * fall back on using AVCodecContext.frame_size, which is not as reliable
      * for indicating packet duration. */
-    audio_frame_size = av_get_audio_frame_duration(stream, 0);
+    audio_frame_size = av_get_audio_frame_duration(codec, 0);
     if (!audio_frame_size)
-        audio_frame_size = stream->frame_size;
+        audio_frame_size = codec->frame_size;
 
-    *au_ssize = stream->block_align;
-    if (audio_frame_size && stream->sample_rate) {
+    *au_ssize = codec->block_align;
+    if (audio_frame_size && codec->sample_rate) {
         *au_scale = audio_frame_size;
-        *au_rate  = stream->sample_rate;
-    } else if (stream->codec_type == AVMEDIA_TYPE_VIDEO ||
-               stream->codec_type == AVMEDIA_TYPE_DATA ||
-               stream->codec_type == AVMEDIA_TYPE_SUBTITLE) {
-        *au_scale = stream->time_base.num;
-        *au_rate  = stream->time_base.den;
+        *au_rate  = codec->sample_rate;
+    } else if (codec->codec_type == AVMEDIA_TYPE_VIDEO ||
+               codec->codec_type == AVMEDIA_TYPE_DATA ||
+               codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
+        *au_scale = codec->time_base.num;
+        *au_rate  = codec->time_base.den;
     } else {
-        *au_scale = stream->block_align ? stream->block_align * 8 : 8;
-        *au_rate  = stream->bit_rate ? stream->bit_rate :
-                    8 * stream->sample_rate;
+        *au_scale = codec->block_align ? codec->block_align * 8 : 8;
+        *au_rate  = codec->bit_rate ? codec->bit_rate :
+                    8 * codec->sample_rate;
     }
     gcd        = av_gcd(*au_scale, *au_rate);
     *au_scale /= gcd;