Commit 3c5a53cd authored by James Almer's avatar James Almer

avformat/oggenc: add ogg_init() and ogg_free()

Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
parent 7ed6f916
...@@ -483,7 +483,7 @@ static void ogg_write_pages(AVFormatContext *s, int flush) ...@@ -483,7 +483,7 @@ static void ogg_write_pages(AVFormatContext *s, int flush)
ogg->page_list = p; ogg->page_list = p;
} }
static int ogg_write_header(AVFormatContext *s) static int ogg_init(AVFormatContext *s)
{ {
OGGContext *ogg = s->priv_data; OGGContext *ogg = s->priv_data;
OGGStreamContext *oggstream = NULL; OGGStreamContext *oggstream = NULL;
...@@ -617,8 +617,16 @@ static int ogg_write_header(AVFormatContext *s) ...@@ -617,8 +617,16 @@ static int ogg_write_header(AVFormatContext *s)
} }
} }
return 0;
}
static int ogg_write_header(AVFormatContext *s)
{
OGGStreamContext *oggstream = NULL;
int i, j;
for (j = 0; j < s->nb_streams; j++) { for (j = 0; j < s->nb_streams; j++) {
OGGStreamContext *oggstream = s->streams[j]->priv_data; oggstream = s->streams[j]->priv_data;
ogg_buffer_data(s, s->streams[j], oggstream->header[0], ogg_buffer_data(s, s->streams[j], oggstream->header[0],
oggstream->header_len[0], 0, 1); oggstream->header_len[0], 0, 1);
oggstream->page.flags |= 2; // bos oggstream->page.flags |= 2; // bos
...@@ -626,7 +634,7 @@ static int ogg_write_header(AVFormatContext *s) ...@@ -626,7 +634,7 @@ static int ogg_write_header(AVFormatContext *s)
} }
for (j = 0; j < s->nb_streams; j++) { for (j = 0; j < s->nb_streams; j++) {
AVStream *st = s->streams[j]; AVStream *st = s->streams[j];
OGGStreamContext *oggstream = st->priv_data; oggstream = st->priv_data;
for (i = 1; i < 3; i++) { for (i = 1; i < 3; i++) {
if (oggstream->header_len[i]) if (oggstream->header_len[i])
ogg_buffer_data(s, st, oggstream->header[i], ogg_buffer_data(s, st, oggstream->header[i],
...@@ -725,6 +733,13 @@ static int ogg_write_trailer(AVFormatContext *s) ...@@ -725,6 +733,13 @@ static int ogg_write_trailer(AVFormatContext *s)
ogg_write_pages(s, 1); ogg_write_pages(s, 1);
return 0;
}
static void ogg_free(AVFormatContext *s)
{
int i;
for (i = 0; i < s->nb_streams; i++) { for (i = 0; i < s->nb_streams; i++) {
AVStream *st = s->streams[i]; AVStream *st = s->streams[i];
OGGStreamContext *oggstream = st->priv_data; OGGStreamContext *oggstream = st->priv_data;
...@@ -737,7 +752,6 @@ static int ogg_write_trailer(AVFormatContext *s) ...@@ -737,7 +752,6 @@ static int ogg_write_trailer(AVFormatContext *s)
av_freep(&oggstream->header[1]); av_freep(&oggstream->header[1]);
av_freep(&st->priv_data); av_freep(&st->priv_data);
} }
return 0;
} }
#if CONFIG_OGG_MUXER #if CONFIG_OGG_MUXER
...@@ -761,9 +775,11 @@ AVOutputFormat ff_ogg_muxer = { ...@@ -761,9 +775,11 @@ AVOutputFormat ff_ogg_muxer = {
.audio_codec = CONFIG_LIBVORBIS_ENCODER ? .audio_codec = CONFIG_LIBVORBIS_ENCODER ?
AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC, AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC,
.video_codec = AV_CODEC_ID_THEORA, .video_codec = AV_CODEC_ID_THEORA,
.init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, .flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH,
.priv_class = &ogg_muxer_class, .priv_class = &ogg_muxer_class,
}; };
...@@ -778,9 +794,11 @@ AVOutputFormat ff_oga_muxer = { ...@@ -778,9 +794,11 @@ AVOutputFormat ff_oga_muxer = {
.extensions = "oga", .extensions = "oga",
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = AV_CODEC_ID_FLAC, .audio_codec = AV_CODEC_ID_FLAC,
.init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, .flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH,
.priv_class = &oga_muxer_class, .priv_class = &oga_muxer_class,
}; };
...@@ -798,9 +816,11 @@ AVOutputFormat ff_ogv_muxer = { ...@@ -798,9 +816,11 @@ AVOutputFormat ff_ogv_muxer = {
AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC, AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC,
.video_codec = CONFIG_LIBTHEORA_ENCODER ? .video_codec = CONFIG_LIBTHEORA_ENCODER ?
AV_CODEC_ID_THEORA : AV_CODEC_ID_VP8, AV_CODEC_ID_THEORA : AV_CODEC_ID_VP8,
.init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, .flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH,
.priv_class = &ogv_muxer_class, .priv_class = &ogv_muxer_class,
}; };
...@@ -815,9 +835,11 @@ AVOutputFormat ff_spx_muxer = { ...@@ -815,9 +835,11 @@ AVOutputFormat ff_spx_muxer = {
.extensions = "spx", .extensions = "spx",
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = AV_CODEC_ID_SPEEX, .audio_codec = AV_CODEC_ID_SPEEX,
.init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, .flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH,
.priv_class = &spx_muxer_class, .priv_class = &spx_muxer_class,
}; };
...@@ -832,9 +854,11 @@ AVOutputFormat ff_opus_muxer = { ...@@ -832,9 +854,11 @@ AVOutputFormat ff_opus_muxer = {
.extensions = "opus", .extensions = "opus",
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = AV_CODEC_ID_OPUS, .audio_codec = AV_CODEC_ID_OPUS,
.init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, .flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH,
.priv_class = &opus_muxer_class, .priv_class = &opus_muxer_class,
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment