From cc2d748b73c0147c11089d63e4ff9836070a09a8 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Thu, 9 Dec 2010 02:50:17 +0200 Subject: audio: FLAC: support new libavcodec parser, use lavf to demux Parse FLAC data with new libavcodec parser if needed. Use libavformat demuxer for raw FLAC files by default. --- libmpdemux/demux_audio.c | 1 + libmpdemux/demux_lavf.c | 6 +++++- libmpdemux/demuxer.c | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libmpdemux/demux_audio.c b/libmpdemux/demux_audio.c index f5c476d250..7f0bb5e55f 100644 --- a/libmpdemux/demux_audio.c +++ b/libmpdemux/demux_audio.c @@ -491,6 +491,7 @@ static int demux_audio_open(demuxer_t* demuxer) { } if (sh_audio->i_bps < 1) // guess value to prevent crash sh_audio->i_bps = 64 * 1024; + sh_audio->needs_parsing = 1; // get_flac_metadata (demuxer); break; } diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 09999d80b5..6d3e68d9c0 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -234,8 +234,12 @@ static const char * const preferred_internal[] = { /* lavf Matroska demuxer doesn't support ordered chapters and fails * for more files */ "matroska", - /* seeking won't work in lavf FLAC demuxer until a parser is committed */ +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52, 99, 0) + /* Seeking doesn't work with lavf FLAC demuxer in FFmpeg versions + * without a FLAC parser. In principle this could use a runtime check to + * switch if a shared library is updated. */ "flac", +#endif /* lavf gives neither pts nor dts for some video frames in .rm */ "rm", NULL diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 51343f1595..af7f40c004 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -464,6 +464,9 @@ static void allocate_parser(AVCodecContext **avctx, AVCodecParserContext **parse case 0x86: codec_id = CODEC_ID_DTS; break; + case MKTAG('f', 'L', 'a', 'C'): + codec_id = CODEC_ID_FLAC; + break; case MKTAG('M', 'L', 'P', ' '): codec_id = CODEC_ID_MLP; break; -- cgit v1.2.3