Browse code

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

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>

James Almer authored on 2017/05/29 05:07:06
Showing 1 changed files
... ...
@@ -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
 };