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],