Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
... | ... |
@@ -483,7 +483,7 @@ static void ogg_write_pages(AVFormatContext *s, int flush) |
483 | 483 |
ogg->page_list = p; |
484 | 484 |
} |
485 | 485 |
|
486 |
-static int ogg_write_header(AVFormatContext *s) |
|
486 |
+static int ogg_init(AVFormatContext *s) |
|
487 | 487 |
{ |
488 | 488 |
OGGContext *ogg = s->priv_data; |
489 | 489 |
OGGStreamContext *oggstream = NULL; |
... | ... |
@@ -617,8 +617,16 @@ static int ogg_write_header(AVFormatContext *s) |
617 | 617 |
} |
618 | 618 |
} |
619 | 619 |
|
620 |
+ return 0; |
|
621 |
+} |
|
622 |
+ |
|
623 |
+static int ogg_write_header(AVFormatContext *s) |
|
624 |
+{ |
|
625 |
+ OGGStreamContext *oggstream = NULL; |
|
626 |
+ int i, j; |
|
627 |
+ |
|
620 | 628 |
for (j = 0; j < s->nb_streams; j++) { |
621 |
- OGGStreamContext *oggstream = s->streams[j]->priv_data; |
|
629 |
+ oggstream = s->streams[j]->priv_data; |
|
622 | 630 |
ogg_buffer_data(s, s->streams[j], oggstream->header[0], |
623 | 631 |
oggstream->header_len[0], 0, 1); |
624 | 632 |
oggstream->page.flags |= 2; // bos |
... | ... |
@@ -626,7 +634,7 @@ static int ogg_write_header(AVFormatContext *s) |
626 | 626 |
} |
627 | 627 |
for (j = 0; j < s->nb_streams; j++) { |
628 | 628 |
AVStream *st = s->streams[j]; |
629 |
- OGGStreamContext *oggstream = st->priv_data; |
|
629 |
+ oggstream = st->priv_data; |
|
630 | 630 |
for (i = 1; i < 3; i++) { |
631 | 631 |
if (oggstream->header_len[i]) |
632 | 632 |
ogg_buffer_data(s, st, oggstream->header[i], |
... | ... |
@@ -725,6 +733,13 @@ static int ogg_write_trailer(AVFormatContext *s) |
725 | 725 |
|
726 | 726 |
ogg_write_pages(s, 1); |
727 | 727 |
|
728 |
+ return 0; |
|
729 |
+} |
|
730 |
+ |
|
731 |
+static void ogg_free(AVFormatContext *s) |
|
732 |
+{ |
|
733 |
+ int i; |
|
734 |
+ |
|
728 | 735 |
for (i = 0; i < s->nb_streams; i++) { |
729 | 736 |
AVStream *st = s->streams[i]; |
730 | 737 |
OGGStreamContext *oggstream = st->priv_data; |
... | ... |
@@ -737,7 +752,6 @@ static int ogg_write_trailer(AVFormatContext *s) |
737 | 737 |
av_freep(&oggstream->header[1]); |
738 | 738 |
av_freep(&st->priv_data); |
739 | 739 |
} |
740 |
- return 0; |
|
741 | 740 |
} |
742 | 741 |
|
743 | 742 |
#if CONFIG_OGG_MUXER |
... | ... |
@@ -761,9 +775,11 @@ AVOutputFormat ff_ogg_muxer = { |
761 | 761 |
.audio_codec = CONFIG_LIBVORBIS_ENCODER ? |
762 | 762 |
AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC, |
763 | 763 |
.video_codec = AV_CODEC_ID_THEORA, |
764 |
+ .init = ogg_init, |
|
764 | 765 |
.write_header = ogg_write_header, |
765 | 766 |
.write_packet = ogg_write_packet, |
766 | 767 |
.write_trailer = ogg_write_trailer, |
768 |
+ .deinit = ogg_free, |
|
767 | 769 |
.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, |
768 | 770 |
.priv_class = &ogg_muxer_class, |
769 | 771 |
}; |
... | ... |
@@ -778,9 +794,11 @@ AVOutputFormat ff_oga_muxer = { |
778 | 778 |
.extensions = "oga", |
779 | 779 |
.priv_data_size = sizeof(OGGContext), |
780 | 780 |
.audio_codec = AV_CODEC_ID_FLAC, |
781 |
+ .init = ogg_init, |
|
781 | 782 |
.write_header = ogg_write_header, |
782 | 783 |
.write_packet = ogg_write_packet, |
783 | 784 |
.write_trailer = ogg_write_trailer, |
785 |
+ .deinit = ogg_free, |
|
784 | 786 |
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, |
785 | 787 |
.priv_class = &oga_muxer_class, |
786 | 788 |
}; |
... | ... |
@@ -798,9 +816,11 @@ AVOutputFormat ff_ogv_muxer = { |
798 | 798 |
AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC, |
799 | 799 |
.video_codec = CONFIG_LIBTHEORA_ENCODER ? |
800 | 800 |
AV_CODEC_ID_THEORA : AV_CODEC_ID_VP8, |
801 |
+ .init = ogg_init, |
|
801 | 802 |
.write_header = ogg_write_header, |
802 | 803 |
.write_packet = ogg_write_packet, |
803 | 804 |
.write_trailer = ogg_write_trailer, |
805 |
+ .deinit = ogg_free, |
|
804 | 806 |
.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, |
805 | 807 |
.priv_class = &ogv_muxer_class, |
806 | 808 |
}; |
... | ... |
@@ -815,9 +835,11 @@ AVOutputFormat ff_spx_muxer = { |
815 | 815 |
.extensions = "spx", |
816 | 816 |
.priv_data_size = sizeof(OGGContext), |
817 | 817 |
.audio_codec = AV_CODEC_ID_SPEEX, |
818 |
+ .init = ogg_init, |
|
818 | 819 |
.write_header = ogg_write_header, |
819 | 820 |
.write_packet = ogg_write_packet, |
820 | 821 |
.write_trailer = ogg_write_trailer, |
822 |
+ .deinit = ogg_free, |
|
821 | 823 |
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, |
822 | 824 |
.priv_class = &spx_muxer_class, |
823 | 825 |
}; |
... | ... |
@@ -832,9 +854,11 @@ AVOutputFormat ff_opus_muxer = { |
832 | 832 |
.extensions = "opus", |
833 | 833 |
.priv_data_size = sizeof(OGGContext), |
834 | 834 |
.audio_codec = AV_CODEC_ID_OPUS, |
835 |
+ .init = ogg_init, |
|
835 | 836 |
.write_header = ogg_write_header, |
836 | 837 |
.write_packet = ogg_write_packet, |
837 | 838 |
.write_trailer = ogg_write_trailer, |
839 |
+ .deinit = ogg_free, |
|
838 | 840 |
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, |
839 | 841 |
.priv_class = &opus_muxer_class, |
840 | 842 |
}; |