diff options
author | Aurelien Jacobs <aurel@gnuage.org> | 2008-08-20 00:49:45 +0000 |
---|---|---|
committer | Aurelien Jacobs <aurel@gnuage.org> | 2008-08-20 00:49:45 +0000 |
commit | eb9cf50a74aa44827e790d8de59be4359548821c (patch) | |
tree | ca502d8c6efa0ec989109bd604b4659b939fff1a /libavformat | |
parent | b49d17b77ae499fb19a666672873ed9b2f07519e (diff) | |
download | ffmpeg-eb9cf50a74aa44827e790d8de59be4359548821c.tar.gz |
matroska: add support for most variants of PCM
Originally committed as revision 14862 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/matroska.c | 12 | ||||
-rw-r--r-- | libavformat/matroskadec.c | 14 |
2 files changed, 23 insertions, 3 deletions
diff --git a/libavformat/matroska.c b/libavformat/matroska.c index 01e9decdf4..8862d7c585 100644 --- a/libavformat/matroska.c +++ b/libavformat/matroska.c @@ -41,9 +41,15 @@ const CodecTags ff_mkv_codec_tags[]={ {"A_MPEG/L3" , CODEC_ID_MP3}, {"A_MPEG/L2" , CODEC_ID_MP2}, {"A_MPEG/L1" , CODEC_ID_MP2}, - {"A_PCM/INT/BIG" , CODEC_ID_PCM_U16BE}, - {"A_PCM/INT/LIT" , CODEC_ID_PCM_U16LE}, -// {"A_PCM/FLOAT/IEEE" , CODEC_ID_NONE}, + {"A_PCM/INT/BIG" , CODEC_ID_PCM_S16BE}, + {"A_PCM/INT/BIG" , CODEC_ID_PCM_S24BE}, + {"A_PCM/INT/BIG" , CODEC_ID_PCM_S32BE}, + {"A_PCM/INT/LIT" , CODEC_ID_PCM_S16LE}, + {"A_PCM/INT/LIT" , CODEC_ID_PCM_S24LE}, + {"A_PCM/INT/LIT" , CODEC_ID_PCM_S32LE}, + {"A_PCM/INT/LIT" , CODEC_ID_PCM_U8}, + {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F32LE}, + {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F64LE}, {"A_AC3" , CODEC_ID_AC3}, // {"A_EAC3" , CODEC_ID_EAC3}, {"A_DTS" , CODEC_ID_DTS}, diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index e7819f9f32..4f8bbbe2e2 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -1162,6 +1162,20 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap) && (track->codec_priv.data != NULL)) { track->video.fourcc = AV_RL32(track->codec_priv.data); codec_id=codec_get_id(codec_movvideo_tags, track->video.fourcc); + } else if (codec_id == CODEC_ID_PCM_S16BE) { + switch (track->audio.bitdepth) { + case 8: codec_id = CODEC_ID_PCM_U8; break; + case 24: codec_id = CODEC_ID_PCM_S24BE; break; + case 32: codec_id = CODEC_ID_PCM_S32BE; break; + } + } else if (codec_id == CODEC_ID_PCM_S16LE) { + switch (track->audio.bitdepth) { + case 8: codec_id = CODEC_ID_PCM_U8; break; + case 24: codec_id = CODEC_ID_PCM_S24LE; break; + case 32: codec_id = CODEC_ID_PCM_S32LE; break; + } + } else if (codec_id==CODEC_ID_PCM_F32LE && track->audio.bitdepth==64) { + codec_id = CODEC_ID_PCM_F64LE; } else if (codec_id == CODEC_ID_AAC && !track->codec_priv.size) { int profile = matroska_aac_profile(track->codec_id); int sri = matroska_aac_sri(track->audio.samplerate); |