From 9ba4821d933739d923edcb229e7129d939d56d48 Mon Sep 17 00:00:00 2001 From: Ramiro Polla Date: Thu, 19 Mar 2009 21:23:39 +0000 Subject: [PATCH] Split TrueHD decoder from MLP Originally committed as revision 18045 to svn://svn.ffmpeg.org/ffmpeg/trunk --- doc/general.texi | 6 ++++-- libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/avcodec.h | 3 ++- libavcodec/mlp_parser.c | 2 +- libavcodec/mlpdec.c | 17 ++++++++++++++++- libavformat/mpeg.c | 2 +- 7 files changed, 26 insertions(+), 6 deletions(-) diff --git a/doc/general.texi b/doc/general.texi index 602d5f446a..4f0ab2a7af 100644 --- a/doc/general.texi +++ b/doc/general.texi @@ -544,8 +544,8 @@ following image formats are supported: @item IMC (Intel Music Coder) @tab @tab X @item MACE (Macintosh Audio Compression/Expansion) 3:1 @tab @tab X @item MACE (Macintosh Audio Compression/Expansion) 6:1 @tab @tab X -@item MLP(Meridian Lossless Packing)/TrueHD @tab @tab X - @tab Used in DVD-Audio and Blu-Ray discs. +@item MLP (Meridian Lossless Packing) @tab @tab X + @tab Used in DVD-Audio discs. @item Monkey's Audio @tab @tab X @tab Only versions 3.97-3.99 are supported. @item MP1 (MPEG audio layer 1) @tab @tab IX @@ -598,6 +598,8 @@ following image formats are supported: @item Speex @tab @tab E @tab supported through external library libspeex @item True Audio (TTA) @tab @tab X +@item TrueHD @tab @tab X + @tab Used in HD-DVD and Blu-Ray discs. @item Vorbis @tab E @tab X @ A native but very primitive encoder exists. @item WavPack @tab @tab X diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 13415fc0d2..62793bf0e6 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -211,6 +211,7 @@ OBJS-$(CONFIG_THP_DECODER) += mjpegdec.o mjpeg.o OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o OBJS-$(CONFIG_TIFF_DECODER) += tiff.o lzw.o faxcompr.o OBJS-$(CONFIG_TIFF_ENCODER) += tiffenc.o rle.o lzwenc.o +OBJS-$(CONFIG_TRUEHD_DECODER) += mlpdec.o mlp_parser.o mlp.o OBJS-$(CONFIG_TRUEMOTION1_DECODER) += truemotion1.o OBJS-$(CONFIG_TRUEMOTION2_DECODER) += truemotion2.o OBJS-$(CONFIG_TRUESPEECH_DECODER) += truespeech.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index b024e01dd6..4dcbcd8b13 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -215,6 +215,7 @@ void avcodec_register_all(void) REGISTER_DECODER (SMACKAUD, smackaud); REGISTER_ENCDEC (SONIC, sonic); REGISTER_ENCODER (SONIC_LS, sonic_ls); + REGISTER_DECODER (TRUEHD, truehd); REGISTER_DECODER (TRUESPEECH, truespeech); REGISTER_DECODER (TTA, tta); REGISTER_DECODER (VMDAUDIO, vmdaudio); diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 3adc941ca8..0519dde1ea 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -30,7 +30,7 @@ #include "libavutil/avutil.h" #define LIBAVCODEC_VERSION_MAJOR 52 -#define LIBAVCODEC_VERSION_MINOR 21 +#define LIBAVCODEC_VERSION_MINOR 22 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -310,6 +310,7 @@ enum CodecID { CODEC_ID_SIPR, CODEC_ID_MP1, CODEC_ID_TWINVQ, + CODEC_ID_TRUEHD, /* subtitle codecs */ CODEC_ID_DVD_SUBTITLE= 0x17000, diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c index b3e5b3a191..34ee193da2 100644 --- a/libavcodec/mlp_parser.c +++ b/libavcodec/mlp_parser.c @@ -287,7 +287,7 @@ lost_sync: } AVCodecParser mlp_parser = { - { CODEC_ID_MLP }, + { CODEC_ID_MLP, CODEC_ID_TRUEHD }, sizeof(MLPParseContext), mlp_init, mlp_parse, diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c index 99754b329c..6b825cdea1 100644 --- a/libavcodec/mlpdec.c +++ b/libavcodec/mlpdec.c @@ -1038,6 +1038,7 @@ error: return -1; } +#if CONFIG_MLP_DECODER AVCodec mlp_decoder = { "mlp", CODEC_TYPE_AUDIO, @@ -1047,6 +1048,20 @@ AVCodec mlp_decoder = { NULL, NULL, read_access_unit, - .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)/TrueHD"), + .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"), }; +#endif /* CONFIG_MLP_DECODER */ +#if CONFIG_TRUEHD_DECODER +AVCodec truehd_decoder = { + "truehd", + CODEC_TYPE_AUDIO, + CODEC_ID_TRUEHD, + sizeof(MLPDecodeContext), + mlp_decode_init, + NULL, + NULL, + read_access_unit, + .long_name = NULL_IF_CONFIG_SMALL("TrueHD"), +}; +#endif /* CONFIG_TRUEHD_DECODER */ diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index b0f45e5343..17b5aba13c 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -487,7 +487,7 @@ static int mpegps_read_packet(AVFormatContext *s, codec_id = CODEC_ID_PCM_DVD; } else if (startcode >= 0xb0 && startcode <= 0xbf) { type = CODEC_TYPE_AUDIO; - codec_id = CODEC_ID_MLP; + codec_id = CODEC_ID_TRUEHD; } else if (startcode >= 0xc0 && startcode <= 0xcf) { /* Used for both AC-3 and E-AC-3 in EVOB files */ type = CODEC_TYPE_AUDIO;