[FFmpeg-devel] [PATCH] avformat/aiffenc: add aiff_init()
James Almer
jamrial at gmail.com
Sun May 28 23:39:21 EEST 2017
Signed-off-by: James Almer <jamrial at gmail.com>
---
libavformat/aiffenc.c | 45 +++++++++++++++++++++++++++++----------------
1 file changed, 29 insertions(+), 16 deletions(-)
diff --git a/libavformat/aiffenc.c b/libavformat/aiffenc.c
index fcadf149a0..1e0c5b11a0 100644
--- a/libavformat/aiffenc.c
+++ b/libavformat/aiffenc.c
@@ -98,13 +98,11 @@ static void put_meta(AVFormatContext *s, const char *key, uint32_t id)
}
}
-static int aiff_write_header(AVFormatContext *s)
+static int aiff_init(AVFormatContext *s)
{
AIFFOutputContext *aiff = s->priv_data;
- AVIOContext *pb = s->pb;
AVCodecParameters *par;
- uint64_t sample_rate;
- int i, aifc = 0;
+ int i;
aiff->audio_stream_idx = -1;
for (i = 0; i < s->nb_streams; i++) {
@@ -126,6 +124,32 @@ static int aiff_write_header(AVFormatContext *s)
/* First verify if format is ok */
if (!par->codec_tag)
return -1;
+
+ if (!par->bits_per_coded_sample)
+ par->bits_per_coded_sample = av_get_bits_per_sample(par->codec_id);
+ if (!par->bits_per_coded_sample) {
+ av_log(s, AV_LOG_ERROR, "could not compute bits per sample\n");
+ return -1;
+ }
+ if (!par->block_align)
+ par->block_align = (par->bits_per_coded_sample * par->channels) >> 3;
+
+ avpriv_set_pts_info(s->streams[aiff->audio_stream_idx], 64, 1,
+ s->streams[aiff->audio_stream_idx]->codecpar->sample_rate);
+
+ return 0;
+}
+
+static int aiff_write_header(AVFormatContext *s)
+{
+ AIFFOutputContext *aiff = s->priv_data;
+ AVIOContext *pb = s->pb;
+ AVCodecParameters *par;
+ uint64_t sample_rate;
+ int aifc = 0;
+
+ par = s->streams[aiff->audio_stream_idx]->codecpar;
+
if (par->codec_tag != MKTAG('N','O','N','E'))
aifc = 1;
@@ -165,15 +189,6 @@ static int aiff_write_header(AVFormatContext *s)
aiff->frames = avio_tell(pb);
avio_wb32(pb, 0); /* Number of frames */
- if (!par->bits_per_coded_sample)
- par->bits_per_coded_sample = av_get_bits_per_sample(par->codec_id);
- if (!par->bits_per_coded_sample) {
- av_log(s, AV_LOG_ERROR, "could not compute bits per sample\n");
- return -1;
- }
- if (!par->block_align)
- par->block_align = (par->bits_per_coded_sample * par->channels) >> 3;
-
avio_wb16(pb, par->bits_per_coded_sample); /* Sample size */
sample_rate = av_double2int(par->sample_rate);
@@ -199,9 +214,6 @@ static int aiff_write_header(AVFormatContext *s)
avio_wb32(pb, 0); /* Data offset */
avio_wb32(pb, 0); /* Block-size (block align) */
- avpriv_set_pts_info(s->streams[aiff->audio_stream_idx], 64, 1,
- s->streams[aiff->audio_stream_idx]->codecpar->sample_rate);
-
/* Data is starting here */
avio_flush(pb);
@@ -327,6 +339,7 @@ AVOutputFormat ff_aiff_muxer = {
.priv_data_size = sizeof(AIFFOutputContext),
.audio_codec = AV_CODEC_ID_PCM_S16BE,
.video_codec = AV_CODEC_ID_PNG,
+ .init = aiff_init,
.write_header = aiff_write_header,
.write_packet = aiff_write_packet,
.write_trailer = aiff_write_trailer,
--
2.12.1
More information about the ffmpeg-devel
mailing list