mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-23 23:21:06 +01:00
matroskadec: Implement support for ALAC
This patch implements support reading ALAC from Matroska files. The only non-trivial thing about it is that only the ALAC magic cookie is stored in Matroska's CodecPrivate element but not the "atom size", "tag" and "tag version" fields that FFMPEG's ALAC decoder expects. However, those are trivial to re-create. Sample files are available: http://www.bunkus.org/videotools/mkvtoolnix/samples/alac/alac-in-matroska.mka and the CoreAudio file it was created from with today's mkvmerge: http://www.bunkus.org/videotools/mkvtoolnix/samples/alac/alac-in-matroska-source.caf Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
d106ffd942
commit
bc3b422029
2 changed files with 13 additions and 0 deletions
|
|
@ -24,6 +24,7 @@
|
|||
const CodecTags ff_mkv_codec_tags[]={
|
||||
{"A_AAC" , CODEC_ID_AAC},
|
||||
{"A_AC3" , CODEC_ID_AC3},
|
||||
{"A_ALAC" , CODEC_ID_ALAC},
|
||||
{"A_DTS" , CODEC_ID_DTS},
|
||||
{"A_EAC3" , CODEC_ID_EAC3},
|
||||
{"A_FLAC" , CODEC_ID_FLAC},
|
||||
|
|
|
|||
|
|
@ -1580,6 +1580,18 @@ static int matroska_read_header(AVFormatContext *s)
|
|||
&& (track->codec_priv.data != NULL)) {
|
||||
fourcc = AV_RL32(track->codec_priv.data);
|
||||
codec_id = ff_codec_get_id(ff_codec_movvideo_tags, fourcc);
|
||||
} else if (codec_id == CODEC_ID_ALAC && track->codec_priv.size) {
|
||||
/* Only ALAC's magic cookie is stored in Matroska's track headers.
|
||||
Create the "atom size", "tag", and "tag version" fields the
|
||||
decoder expects manually. */
|
||||
extradata_size = 12 + track->codec_priv.size;
|
||||
extradata = av_mallocz(extradata_size);
|
||||
if (extradata == NULL)
|
||||
return AVERROR(ENOMEM);
|
||||
AV_WB32(extradata, extradata_size);
|
||||
memcpy(&extradata[4], "alac", 4);
|
||||
AV_WB32(&extradata[8], 0);
|
||||
memcpy(&extradata[12], track->codec_priv.data, track->codec_priv.size);
|
||||
} else if (codec_id == CODEC_ID_PCM_S16BE) {
|
||||
switch (track->audio.bitdepth) {
|
||||
case 8: codec_id = CODEC_ID_PCM_U8; break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue