diff --git a/etc/codecs.conf b/etc/codecs.conf index 51d31896fb..45d549b4a9 100644 --- a/etc/codecs.conf +++ b/etc/codecs.conf @@ -2166,6 +2166,13 @@ audiocodec ffflac driver ffmpeg dll "flac" +audiocodec ffalac + info "FFmpeg ALAC audio decoder" + status working + fourcc alac + driver ffmpeg + dll "alac" + audiocodec pcm info "Uncompressed PCM" status working diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c index 13f56e054d..4d6de38fcd 100644 --- a/libmpcodecs/ad_ffmpeg.c +++ b/libmpcodecs/ad_ffmpeg.c @@ -66,6 +66,7 @@ static int init(sh_audio_t *sh_audio) lavc_context->sample_rate = sh_audio->wf->nSamplesPerSec; lavc_context->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; lavc_context->block_align = sh_audio->wf->nBlockAlign; + lavc_context->bits_per_sample = sh_audio->wf->wBitsPerSample; } lavc_context->codec_tag = sh_audio->format; //FOURCC lavc_context->codec_id = lavc_codec->id; // not sure if required, imho not --A'rpi diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c index a5fd1b7e93..4c98397e0a 100644 --- a/libmpdemux/demux_mov.c +++ b/libmpdemux/demux_mov.c @@ -988,6 +988,15 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak #endif } } break; + case MOV_FOURCC('a','l','a','c'): { + mp_msg(MSGT_DEMUX, MSGL_INFO, "MOV: Found alac atom (%d)!\n", atom_len); + if(atom_len > 8) { + // copy all the atom (not only payload) for lavc alac decoder + sh->codecdata_len = atom_len; + sh->codecdata = (unsigned char *)malloc(sh->codecdata_len); + memcpy(sh->codecdata, &trak->stdata[28], sh->codecdata_len); + } + } break; default: mp_msg(MSGT_DEMUX, MSGL_INFO, "MOV: Found unknown audio atom %c%c%c%c (%d)!\n", trak->stdata[32+adjust],trak->stdata[33+adjust],trak->stdata[34+adjust],trak->stdata[35+adjust],