X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fflacdec.c;h=cb516fb1f3ea6e1c2992afb8c678de20609ddd18;hb=af9e622776c9268fd473cc23a0fd6b29f0017f64;hp=ea803f57dd72b27486657a69ca63c63e88fe39bb;hpb=3e076faf3b86bb16f746e7c9b0cf3dac5f9a851a;p=ffmpeg diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c index ea803f57dd7..cb516fb1f3e 100644 --- a/libavformat/flacdec.c +++ b/libavformat/flacdec.c @@ -31,6 +31,8 @@ #define SEEKPOINT_SIZE 18 typedef struct FLACDecContext { + AVClass *class; + int raw_packet_size; int found_seektable; } FLACDecContext; @@ -257,7 +259,7 @@ static int flac_probe(const 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, };