summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-12-09 02:50:17 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-12-09 02:50:17 +0200
commitcc2d748b73c0147c11089d63e4ff9836070a09a8 (patch)
tree6062375e90a7cc23818a969d6aeff199d801547a
parent102b240e96ea2d5a675958d8365f2feb301a7498 (diff)
downloadmpv-cc2d748b73c0147c11089d63e4ff9836070a09a8.tar.bz2
mpv-cc2d748b73c0147c11089d63e4ff9836070a09a8.tar.xz
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.
-rw-r--r--libmpdemux/demux_audio.c1
-rw-r--r--libmpdemux/demux_lavf.c6
-rw-r--r--libmpdemux/demuxer.c3
3 files changed, 9 insertions, 1 deletions
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;