]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/flacdec.c
avutil/opt: add AV_OPT_FLAG_CHILD_CONSTS
[ffmpeg] / libavformat / flacdec.c
index a0323780452c516fa74740b80d8619c935cf0912..cb516fb1f3ea6e1c2992afb8c678de20609ddd18 100644 (file)
@@ -31,6 +31,8 @@
 #define SEEKPOINT_SIZE 18
 
 typedef struct FLACDecContext {
+    AVClass *class;
+    int raw_packet_size;
     int found_seektable;
 } FLACDecContext;
 
@@ -211,7 +213,7 @@ fail:
     return ret;
 }
 
-static int raw_flac_probe(AVProbeData *p)
+static int raw_flac_probe(const AVProbeData *p)
 {
     if ((p->buf[2] & 0xF0) == 0)    // blocksize code invalid
         return 0;
@@ -227,7 +229,7 @@ static int raw_flac_probe(AVProbeData *p)
     return AVPROBE_SCORE_EXTENSION / 4 + 1;
 }
 
-static int flac_probe(AVProbeData *p)
+static int flac_probe(const AVProbeData *p)
 {
     if ((AV_RB16(p->buf) & 0xFFFE) == 0xFFF8)
         return raw_flac_probe(p);
@@ -257,7 +259,7 @@ static int flac_probe(AVProbeData *p)
 static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_index,
                                              int64_t *ppos, int64_t pos_limit)
 {
-    AVPacket pkt, out_pkt;
+    AVPacket pkt;
     AVStream *st = s->streams[stream_index];
     AVCodecParserContext *parser;
     int ret;
@@ -274,6 +276,9 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde
     parser->flags |= PARSER_FLAG_USE_CODEC_TS;
 
     for (;;){
+        uint8_t *data;
+        int size;
+
         ret = ff_raw_read_partial_packet(s, &pkt);
         if (ret < 0){
             if (ret == AVERROR(EAGAIN))
@@ -283,14 +288,12 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde
                 av_assert1(!pkt.size);
             }
         }
-        av_init_packet(&out_pkt);
         av_parser_parse2(parser, st->internal->avctx,
-                         &out_pkt.data, &out_pkt.size, pkt.data, pkt.size,
+                         &data, &size, pkt.data, pkt.size,
                          pkt.pts, pkt.dts, *ppos);
 
         av_packet_unref(&pkt);
-        if (out_pkt.size){
-            int size = out_pkt.size;
+        if (size) {
             if (parser->pts != AV_NOPTS_VALUE){
                 // seeking may not have started from beginning of a frame
                 // calculate frame start position from next frame backwards
@@ -327,6 +330,7 @@ static int flac_seek(AVFormatContext *s, int stream_index, int64_t timestamp, in
     return -1;
 }
 
+FF_RAW_DEMUXER_CLASS(flac)
 AVInputFormat ff_flac_demuxer = {
     .name           = "flac",
     .long_name      = NULL_IF_CONFIG_SMALL("raw FLAC"),
@@ -339,4 +343,5 @@ AVInputFormat ff_flac_demuxer = {
     .extensions     = "flac",
     .raw_codec_id   = AV_CODEC_ID_FLAC,
     .priv_data_size = sizeof(FLACDecContext),
+    .priv_class     = &flac_demuxer_class,
 };