]> git.sesse.net Git - vlc/commitdiff
* modules/demux/mp4, modules/codec/ffmpeg: support for Apple Lossless Audio Codec.
authorGildas Bazin <gbazin@videolan.org>
Sun, 6 Mar 2005 16:25:02 +0000 (16:25 +0000)
committerGildas Bazin <gbazin@videolan.org>
Sun, 6 Mar 2005 16:25:02 +0000 (16:25 +0000)
modules/codec/ffmpeg/ffmpeg.c
modules/demux/mp4/libmp4.c
modules/demux/mp4/libmp4.h
modules/demux/mp4/mp4.c

index 02f6e5d176e95b8b895650d85c52a89e17f12414..3a4c2242db43fdd1450731a62fdccf588c6b9cb2 100644 (file)
@@ -873,6 +873,12 @@ static struct
       AUDIO_ES, "AMR wide band" },
 #endif
 
+#if LIBAVCODEC_BUILD >= 4745
+    /* ALAC */
+    { VLC_FOURCC('a','l','a','c'), CODEC_ID_ALAC,
+      AUDIO_ES, "Apple Lossless Audio Codec" },
+#endif
+
     /* PCM */
     { VLC_FOURCC('s','8',' ',' '), CODEC_ID_PCM_S8,
       AUDIO_ES, "PCM S8" },
index c32639cb51b526dd0ad131b70e22c0a3436f0c45..f8b64d04982cbdc5d700d82a2091e1402a992ba8 100644 (file)
@@ -1138,7 +1138,19 @@ static int MP4_ReadBox_sample_soun( stream_t *p_stream, MP4_Box_t *p_box )
         p_box->data.p_sample_soun->i_channelcount = 1;
     }
 
-    MP4_ReadBoxContainerRaw( p_stream, p_box ); /* esds */
+    if( p_box->i_type == FOURCC_alac )
+    {
+        if( p_box->data.p_sample_soun->p_qt_description )
+            free( p_box->data.p_sample_soun->p_qt_description );
+
+        p_box->data.p_sample_soun->p_qt_description = malloc( i_read );
+        p_box->data.p_sample_soun->i_qt_description = i_read;
+        memcpy( p_box->data.p_sample_soun->p_qt_description, p_peek, i_read );
+    }
+    else
+    {
+        MP4_ReadBoxContainerRaw( p_stream, p_box ); /* esds */
+    }
 
 #ifdef MP4_VERBOSE
     msg_Dbg( p_stream, "read box: \"soun\" in stsd channel %d "
@@ -2137,6 +2149,7 @@ static struct
     { FOURCC_samr,  MP4_ReadBox_sample_soun,    MP4_FreeBox_sample_soun },
     { FOURCC_sawb,  MP4_ReadBox_sample_soun,    MP4_FreeBox_sample_soun },
     { FOURCC_OggS,  MP4_ReadBox_sample_soun,    MP4_FreeBox_sample_soun },
+    { FOURCC_alac,  MP4_ReadBox_sample_soun,    MP4_FreeBox_sample_soun },
 
     { FOURCC_vide,  MP4_ReadBox_sample_vide,    MP4_FreeBox_sample_vide },
     { FOURCC_mp4v,  MP4_ReadBox_sample_vide,    MP4_FreeBox_sample_vide },
index 941e701c6e6da1128e9c9ae222231857dda7ed4b..0bc7899b5348c07a0ed73eb559f0803f3e60a047 100644 (file)
 #define FOURCC_samr VLC_FOURCC( 's', 'a', 'm', 'r' )
 #define FOURCC_sawb VLC_FOURCC( 's', 'a', 'w', 'b' )
 #define FOURCC_OggS VLC_FOURCC( 'O', 'g', 'g', 'S' )
+#define FOURCC_alac VLC_FOURCC( 'a', 'l', 'a', 'c' )
 
 #define FOURCC_zlib VLC_FOURCC( 'z', 'l', 'i', 'b' )
 #define FOURCC_SVQ1 VLC_FOURCC( 'S', 'V', 'Q', '1' )
index d3ef974242bc4caeedd477f701bc1acdc3f97930..85fb188a7fc5728925b92e1ae968f82197eef50b 100644 (file)
@@ -1381,6 +1381,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t *p_track,
             case VLC_FOURCC( 'Q', 'D', 'M', '2' ):
             case VLC_FOURCC( 'Q', 'c', 'l', 'p' ):
             case VLC_FOURCC( 's', 'a', 'm', 'r' ):
+            case VLC_FOURCC( 'a', 'l', 'a', 'c' ):
                 p_track->fmt.i_extra =
                     p_sample->data.p_sample_soun->i_qt_description;
                 if( p_track->fmt.i_extra > 0 )