summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/avienc.c4
-rw-r--r--libavformat/nutenc.c2
-rw-r--r--libavformat/riff.h2
-rw-r--r--libavformat/riffenc.c29
4 files changed, 19 insertions, 18 deletions
diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index 076152e21a..87075d4b93 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -120,7 +120,7 @@ static int avi_write_counters(AVFormatContext *s, int riff_id)
assert(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
@@ -248,7 +248,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);
avio_wl32(pb, au_scale); /* scale */
avio_wl32(pb, au_byterate); /* rate */
diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c
index 0c06c8bc74..b68e00ebbc 100644
--- a/libavformat/nutenc.c
+++ b/libavformat/nutenc.c
@@ -674,7 +674,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,
+ ff_parse_specific_params(st, &time_base.den, &ssize,
&time_base.num);
avpriv_set_pts_info(st, 64, time_base.num, time_base.den);
diff --git a/libavformat/riff.h b/libavformat/riff.h
index f458f266e6..ddfb0fa664 100644
--- a/libavformat/riff.h
+++ b/libavformat/riff.h
@@ -53,7 +53,7 @@ int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size);
extern const AVCodecTag ff_codec_bmp_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 fe92bc56ae..8f0279628e 100644
--- a/libavformat/riffenc.c
+++ b/libavformat/riffenc.c
@@ -209,32 +209,33 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc,
avio_w8(pb, 0);
}
-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;