comparison dec_audio.c @ 2420:311676805f20

ima4 mov audio support
author arpi
date Tue, 23 Oct 2001 13:56:44 +0000
parents eab58e827cf7
children ff50f2a576f2
comparison
equal deleted inserted replaced
2419:24ba3dfb8e89 2420:311676805f20
29 #include "alaw.h" 29 #include "alaw.h"
30 30
31 #include "xa/xa_gsm.h" 31 #include "xa/xa_gsm.h"
32 32
33 #include "ac3-iec958.h" 33 #include "ac3-iec958.h"
34
35 #include "ima4.h"
34 36
35 #ifdef USE_DIRECTSHOW 37 #ifdef USE_DIRECTSHOW
36 #include "loader/DirectShow/DS_AudioDec.h" 38 #include "loader/DirectShow/DS_AudioDec.h"
37 #endif 39 #endif
38 40
224 sh_audio->sample_format = AFMT_AC3; 226 sh_audio->sample_format = AFMT_AC3;
225 break; 227 break;
226 case AFM_GSM: 228 case AFM_GSM:
227 // MS-GSM audio codec: 229 // MS-GSM audio codec:
228 sh_audio->audio_out_minsize=4*320; 230 sh_audio->audio_out_minsize=4*320;
231 break;
232 case AFM_IMA4:
233 // IMA-ADPCM 4:1 audio codec:
234 sh_audio->audio_out_minsize=4096; //4*IMA4_SAMPLES_PER_BLOCK;
235 sh_audio->ds->ss_div=IMA4_SAMPLES_PER_BLOCK;
236 sh_audio->ds->ss_mul=IMA4_BLOCK_SIZE;
229 break; 237 break;
230 case AFM_MPEG: 238 case AFM_MPEG:
231 // MPEG Audio: 239 // MPEG Audio:
232 sh_audio->audio_out_minsize=4608; 240 sh_audio->audio_out_minsize=4608;
233 break; 241 break;
408 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; 416 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
409 // decodes 65 byte -> 320 short 417 // decodes 65 byte -> 320 short
410 // 1 sec: sh_audio->channels*sh_audio->samplerate samples 418 // 1 sec: sh_audio->channels*sh_audio->samplerate samples
411 // 1 frame: 320 samples 419 // 1 frame: 320 samples
412 sh_audio->i_bps=65*(sh_audio->channels*sh_audio->samplerate)/320; // 1:10 420 sh_audio->i_bps=65*(sh_audio->channels*sh_audio->samplerate)/320; // 1:10
421 break;
422 }
423 case AFM_IMA4: {
424 // IMA-ADPCM 4:1 audio codec:
425 sh_audio->channels=sh_audio->wf->nChannels;
426 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec;
427 // decodes 34 byte -> 64 short
428 sh_audio->i_bps=IMA4_BLOCK_SIZE*(sh_audio->channels*sh_audio->samplerate)/IMA4_SAMPLES_PER_BLOCK; // 1:4
413 break; 429 break;
414 } 430 }
415 case AFM_MPEG: { 431 case AFM_MPEG: {
416 // MPEG Audio: 432 // MPEG Audio:
417 dec_audio_sh=sh_audio; // save sh_audio for the callback: 433 dec_audio_sh=sh_audio; // save sh_audio for the callback:
771 while(l>0){ --l; d[l]=ulaw2short[s[l]]; } 787 while(l>0){ --l; d[l]=ulaw2short[s[l]]; }
772 } 788 }
773 break; 789 break;
774 } 790 }
775 case AFM_GSM: // MS-GSM decoder 791 case AFM_GSM: // MS-GSM decoder
776 { unsigned char buf[65]; // 65 bytes / frame 792 { unsigned char ibuf[65]; // 65 bytes / frame
777 if(demux_read_data(sh_audio->ds,buf,65)!=65) break; // EOF 793 if(demux_read_data(sh_audio->ds,ibuf,65)!=65) break; // EOF
778 XA_MSGSM_Decoder(buf,(unsigned short *) buf); // decodes 65 byte -> 320 short 794 XA_MSGSM_Decoder(ibuf,(unsigned short *) buf); // decodes 65 byte -> 320 short
779 // XA_GSM_Decoder(buf,(unsigned short *) &sh_audio->a_buffer[sh_audio->a_buffer_len]); // decodes 33 byte -> 160 short 795 // XA_GSM_Decoder(buf,(unsigned short *) &sh_audio->a_buffer[sh_audio->a_buffer_len]); // decodes 33 byte -> 160 short
780 len=2*320; 796 len=2*320;
797 break;
798 }
799 case AFM_IMA4: // IMA-ADPCM 4:1 audio codec:
800 { unsigned char ibuf[IMA4_BLOCK_SIZE]; // bytes / frame
801 if(demux_read_data(sh_audio->ds,ibuf,IMA4_BLOCK_SIZE)!=IMA4_BLOCK_SIZE) break; // EOF
802 len=2*ima4_decode_block(buf,ibuf,2*IMA4_SAMPLES_PER_BLOCK);
781 break; 803 break;
782 } 804 }
783 case AFM_AC3: // AC3 decoder 805 case AFM_AC3: // AC3 decoder
784 //printf("{1:%d}",avi_header.idx_pos);fflush(stdout); 806 //printf("{1:%d}",avi_header.idx_pos);fflush(stdout);
785 if(!sh_audio->ac3_frame) sh_audio->ac3_frame=ac3_decode_frame(); 807 if(!sh_audio->ac3_frame) sh_audio->ac3_frame=ac3_decode_frame();