[FFmpeg-cvslog] Support adpcm_ima_wav and adpcm_ms in caf.

Carl Eugen Hoyos git at videolan.org
Tue Jul 12 17:37:38 CEST 2011


ffmpeg | branch: master | Carl Eugen Hoyos <cehoyos at ag.or.at> | Tue Jul 12 17:35:20 2011 +0200| [45ecc7a294d56e41dab621512f6f70fc2578340e] | committer: Carl Eugen Hoyos

Support adpcm_ima_wav and adpcm_ms in caf.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=45ecc7a294d56e41dab621512f6f70fc2578340e
---

 libavformat/caf.c    |    2 ++
 libavformat/cafenc.c |    8 ++++++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/libavformat/caf.c b/libavformat/caf.c
index 1f3057d..faed166 100644
--- a/libavformat/caf.c
+++ b/libavformat/caf.c
@@ -39,6 +39,8 @@ const AVCodecTag ff_codec_caf_tags[] = {
   /*{ CODEC_ID_DVAUDIO,         MKBETAG('v','d','v','a') },*/
   /*{ CODEC_ID_DVAUDIO,         MKBETAG('d','v','c','a') },*/
     { CODEC_ID_ADPCM_IMA_QT,    MKBETAG('i','m','a','4') },
+    { CODEC_ID_ADPCM_IMA_WAV,   MKBETAG('m','s', 0, 17 ) },
+    { CODEC_ID_ADPCM_MS,        MKBETAG('m','s', 0,  2 ) },
     { CODEC_ID_AMR_NB,          MKBETAG('s','a','m','r') },
     { CODEC_ID_GSM,             MKBETAG('a','g','s','m') },
     { CODEC_ID_GSM_MS,          MKBETAG('m','s', 0, '1') },
diff --git a/libavformat/cafenc.c b/libavformat/cafenc.c
index 7cb4777..43f5662 100644
--- a/libavformat/cafenc.c
+++ b/libavformat/cafenc.c
@@ -47,7 +47,7 @@ static uint32_t codec_flags(enum CodecID codec_id) {
     }
 }
 
-static uint32_t samples_per_packet(enum CodecID codec_id) {
+static uint32_t samples_per_packet(enum CodecID codec_id, int channels) {
     switch (codec_id) {
     case CODEC_ID_PCM_S8:
     case CODEC_ID_PCM_S16LE:
@@ -84,6 +84,10 @@ static uint32_t samples_per_packet(enum CodecID codec_id) {
     case CODEC_ID_ALAC:
     case CODEC_ID_QDM2:
         return 4096;
+    case CODEC_ID_ADPCM_IMA_WAV:
+        return (1024 - 4 * channels) * 8 / (4 * channels) + 1;
+    case CODEC_ID_ADPCM_MS:
+        return (1024 - 7 * channels) * 2 / channels + 2;
     default:
         return 0;
     }
@@ -133,7 +137,7 @@ static int caf_write_header(AVFormatContext *s)
     avio_wb32(pb, codec_tag);                         //< mFormatID
     avio_wb32(pb, codec_flags(enc->codec_id));        //< mFormatFlags
     avio_wb32(pb, enc->block_align);                  //< mBytesPerPacket
-    avio_wb32(pb, samples_per_packet(enc->codec_id)); //< mFramesPerPacket
+    avio_wb32(pb, samples_per_packet(enc->codec_id, enc->channels)); //< mFramesPerPacket
     avio_wb32(pb, enc->channels);                     //< mChannelsPerFrame
     avio_wb32(pb, enc->bits_per_coded_sample);        //< mBitsPerChannel
 



More information about the ffmpeg-cvslog mailing list