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;