|
|
@@ -36,6 +36,7 @@ |
|
|
|
typedef struct WAVMuxContext { |
|
|
|
const AVClass *class; |
|
|
|
int64_t data; |
|
|
|
int64_t fact_pos; |
|
|
|
int64_t minpts; |
|
|
|
int64_t maxpts; |
|
|
|
int last_duration; |
|
|
@@ -100,7 +101,7 @@ static int wav_write_header(AVFormatContext *s) |
|
|
|
{ |
|
|
|
WAVMuxContext *wav = s->priv_data; |
|
|
|
AVIOContext *pb = s->pb; |
|
|
|
int64_t fmt, fact; |
|
|
|
int64_t fmt; |
|
|
|
|
|
|
|
ffio_wfourcc(pb, "RIFF"); |
|
|
|
avio_wl32(pb, 0); /* file length */ |
|
|
@@ -117,9 +118,9 @@ static int wav_write_header(AVFormatContext *s) |
|
|
|
|
|
|
|
if (s->streams[0]->codec->codec_tag != 0x01 /* hence for all other than PCM */ |
|
|
|
&& s->pb->seekable) { |
|
|
|
fact = ff_start_tag(pb, "fact"); |
|
|
|
wav->fact_pos = ff_start_tag(pb, "fact"); |
|
|
|
avio_wl32(pb, 0); |
|
|
|
ff_end_tag(pb, fact); |
|
|
|
ff_end_tag(pb, wav->fact_pos); |
|
|
|
} |
|
|
|
|
|
|
|
if (wav->write_bext) |
|
|
@@ -179,7 +180,7 @@ static int wav_write_trailer(AVFormatContext *s) |
|
|
|
number_of_samples = av_rescale(wav->maxpts - wav->minpts + wav->last_duration, |
|
|
|
s->streams[0]->codec->sample_rate * (int64_t)s->streams[0]->time_base.num, |
|
|
|
s->streams[0]->time_base.den); |
|
|
|
avio_seek(pb, wav->data-12, SEEK_SET); |
|
|
|
avio_seek(pb, wav->fact_pos, SEEK_SET); |
|
|
|
avio_wl32(pb, number_of_samples); |
|
|
|
avio_seek(pb, file_size, SEEK_SET); |
|
|
|
avio_flush(pb); |
|
|
|