ff_end_tag(s->pb, bext);
}
-static av_cold void peak_free_buffers(AVFormatContext *s)
+static av_cold void wav_deinit(AVFormatContext *s)
{
WAVMuxContext *wav = s->priv_data;
nomem:
av_log(s, AV_LOG_ERROR, "Out of memory\n");
- peak_free_buffers(s);
return AVERROR(ENOMEM);
}
wav->data = ff_start_tag(pb, "data");
}
- avio_flush(pb);
-
return 0;
}
int rf64 = 0;
int ret = 0;
- avio_flush(pb);
-
if (s->pb->seekable & AVIO_SEEKABLE_NORMAL) {
if (wav->write_peak != PEAK_ONLY && avio_tell(pb) - wav->data < UINT32_MAX) {
ff_end_tag(pb, wav->data);
- avio_flush(pb);
}
if (wav->write_peak && wav->peak_output) {
ret = peak_write_chunk(s);
- avio_flush(pb);
}
/* update file size */
avio_seek(pb, 4, SEEK_SET);
avio_wl32(pb, (uint32_t)(file_size - 8));
avio_seek(pb, file_size, SEEK_SET);
-
- avio_flush(pb);
} else {
av_log(s, AV_LOG_ERROR,
"Filesize %"PRId64" invalid for wav, output file will be broken\n",
file_size);
}
-
- number_of_samples = av_rescale(wav->maxpts - wav->minpts + wav->last_duration,
- s->streams[0]->codecpar->sample_rate * (int64_t)s->streams[0]->time_base.num,
- s->streams[0]->time_base.den);
+ number_of_samples = av_rescale_q(wav->maxpts - wav->minpts + wav->last_duration,
+ s->streams[0]->time_base,
+ av_make_q(1, s->streams[0]->codecpar->sample_rate));
if(s->streams[0]->codecpar->codec_tag != 0x01) {
/* Update num_samps in fact chunk */
} else {
avio_wl32(pb, number_of_samples);
avio_seek(pb, file_size, SEEK_SET);
- avio_flush(pb);
}
}
avio_wl32(pb, -1);
avio_seek(pb, file_size, SEEK_SET);
- avio_flush(pb);
}
}
- if (wav->write_peak)
- peak_free_buffers(s);
-
return ret;
}
.write_header = wav_write_header,
.write_packet = wav_write_packet,
.write_trailer = wav_write_trailer,
+ .deinit = wav_deinit,
.flags = AVFMT_TS_NONSTRICT,
.codec_tag = (const AVCodecTag* const []){ ff_codec_wav_tags, 0 },
.priv_class = &wav_muxer_class,
}
avio_seek(pb, file_size, SEEK_SET);
- avio_flush(pb);
}
return 0;