summaryrefslogtreecommitdiffstats
path: root/dec_audio.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-10-23 13:56:44 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-10-23 13:56:44 +0000
commit5462f7f5275121516786450f35053901e7d48b22 (patch)
tree876fca85993bfe1cc9cef4be56bd8a1bb9fba663 /dec_audio.c
parentadfdd89012aec17df319824f712acd817a26154e (diff)
downloadmpv-5462f7f5275121516786450f35053901e7d48b22.tar.bz2
mpv-5462f7f5275121516786450f35053901e7d48b22.tar.xz
ima4 mov audio support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2421 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'dec_audio.c')
-rw-r--r--dec_audio.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/dec_audio.c b/dec_audio.c
index 766c8e437b..88b1f8e135 100644
--- a/dec_audio.c
+++ b/dec_audio.c
@@ -32,6 +32,8 @@ int fakemono=0;
#include "ac3-iec958.h"
+#include "ima4.h"
+
#ifdef USE_DIRECTSHOW
#include "loader/DirectShow/DS_AudioDec.h"
#endif
@@ -227,6 +229,12 @@ case AFM_GSM:
// MS-GSM audio codec:
sh_audio->audio_out_minsize=4*320;
break;
+case AFM_IMA4:
+ // IMA-ADPCM 4:1 audio codec:
+ sh_audio->audio_out_minsize=4096; //4*IMA4_SAMPLES_PER_BLOCK;
+ sh_audio->ds->ss_div=IMA4_SAMPLES_PER_BLOCK;
+ sh_audio->ds->ss_mul=IMA4_BLOCK_SIZE;
+ break;
case AFM_MPEG:
// MPEG Audio:
sh_audio->audio_out_minsize=4608;
@@ -412,6 +420,14 @@ case AFM_GSM: {
sh_audio->i_bps=65*(sh_audio->channels*sh_audio->samplerate)/320; // 1:10
break;
}
+case AFM_IMA4: {
+ // IMA-ADPCM 4:1 audio codec:
+ sh_audio->channels=sh_audio->wf->nChannels;
+ sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
+ // decodes 34 byte -> 64 short
+ sh_audio->i_bps=IMA4_BLOCK_SIZE*(sh_audio->channels*sh_audio->samplerate)/IMA4_SAMPLES_PER_BLOCK; // 1:4
+ break;
+}
case AFM_MPEG: {
// MPEG Audio:
dec_audio_sh=sh_audio; // save sh_audio for the callback:
@@ -773,13 +789,19 @@ int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){
break;
}
case AFM_GSM: // MS-GSM decoder
- { unsigned char buf[65]; // 65 bytes / frame
- if(demux_read_data(sh_audio->ds,buf,65)!=65) break; // EOF
- XA_MSGSM_Decoder(buf,(unsigned short *) buf); // decodes 65 byte -> 320 short
+ { unsigned char ibuf[65]; // 65 bytes / frame
+ if(demux_read_data(sh_audio->ds,ibuf,65)!=65) break; // EOF
+ XA_MSGSM_Decoder(ibuf,(unsigned short *) buf); // decodes 65 byte -> 320 short
// XA_GSM_Decoder(buf,(unsigned short *) &sh_audio->a_buffer[sh_audio->a_buffer_len]); // decodes 33 byte -> 160 short
len=2*320;
break;
}
+ case AFM_IMA4: // IMA-ADPCM 4:1 audio codec:
+ { unsigned char ibuf[IMA4_BLOCK_SIZE]; // bytes / frame
+ if(demux_read_data(sh_audio->ds,ibuf,IMA4_BLOCK_SIZE)!=IMA4_BLOCK_SIZE) break; // EOF
+ len=2*ima4_decode_block(buf,ibuf,2*IMA4_SAMPLES_PER_BLOCK);
+ break;
+ }
case AFM_AC3: // AC3 decoder
//printf("{1:%d}",avi_header.idx_pos);fflush(stdout);
if(!sh_audio->ac3_frame) sh_audio->ac3_frame=ac3_decode_frame();