comparison dec_audio.c @ 401:835fac6382be

DVD PCM audio support
author arpi_esp
date Sat, 14 Apr 2001 15:25:11 +0000
parents 1f7c824033fb
children 5251b0c57e39
comparison
equal deleted inserted replaced
400:ae91bfef2a94 401:835fac6382be
3 3
4 int driver=sh_audio->codec->driver; 4 int driver=sh_audio->codec->driver;
5 5
6 sh_audio->samplesize=2; 6 sh_audio->samplesize=2;
7 sh_audio->samplerate=0; 7 sh_audio->samplerate=0;
8 sh_audio->pcm_bswap=0; 8 //sh_audio->pcm_bswap=0;
9 9
10 sh_audio->a_buffer_size=16384; // default size, maybe not enough for Win32/ACM 10 sh_audio->a_buffer_size=16384; // default size, maybe not enough for Win32/ACM
11 sh_audio->a_buffer=NULL; 11 sh_audio->a_buffer=NULL;
12 12
13 if(driver==4){ 13 if(driver==4){
61 driver=0; 61 driver=0;
62 } 62 }
63 break; 63 break;
64 } 64 }
65 case 2: { 65 case 2: {
66 // if(file_format==DEMUXER_TYPE_AVI){ // FIXME!!!!!!!
67 // AVI PCM Audio: 66 // AVI PCM Audio:
68 WAVEFORMATEX *h=&sh_audio->wf; 67 WAVEFORMATEX *h=&sh_audio->wf;
69 sh_audio->channels=h->nChannels; 68 sh_audio->channels=h->nChannels;
70 sh_audio->samplerate=h->nSamplesPerSec; 69 sh_audio->samplerate=h->nSamplesPerSec;
71 sh_audio->samplesize=(h->wBitsPerSample+7)/8; 70 sh_audio->samplesize=(h->wBitsPerSample+7)/8;
72 // } else { 71 break;
73 // // DVD PCM audio: 72 }
74 // sh_audio->channels=2; 73 case 8: {
75 // sh_audio->samplerate=48000; 74 // DVD PCM Audio:
75 sh_audio->channels=2;
76 sh_audio->samplerate=48000;
76 // sh_audio->pcm_bswap=1; 77 // sh_audio->pcm_bswap=1;
77 // }
78 break; 78 break;
79 } 79 }
80 case 3: { 80 case 3: {
81 // Dolby AC3 audio: 81 // Dolby AC3 audio:
82 ac3_config.fill_buffer_callback = ac3_fill_buffer; 82 ac3_config.fill_buffer_callback = ac3_fill_buffer;
147 switch(sh_audio->codec->driver){ 147 switch(sh_audio->codec->driver){
148 case 1: // MPEG layer 2 or 3 148 case 1: // MPEG layer 2 or 3
149 len=MP3_DecodeFrame(buf,-1); 149 len=MP3_DecodeFrame(buf,-1);
150 sh_audio->channels=2; // hack 150 sh_audio->channels=2; // hack
151 break; 151 break;
152 case 2: // PCM 152 case 2: // AVI PCM
153 { len=demux_read_data(sh_audio->ds,buf,OUTBURST); 153 { len=demux_read_data(sh_audio->ds,buf,OUTBURST);
154 if(sh_audio->pcm_bswap){ 154 break;
155 int j; 155 }
156 case 8: // DVD PCM
157 { int j;
158 len=demux_read_data(sh_audio->ds,buf,OUTBURST);
156 //if(i&1){ printf("Warning! pcm_audio_size&1 !=0 (%d)\n",i);i&=~1; } 159 //if(i&1){ printf("Warning! pcm_audio_size&1 !=0 (%d)\n",i);i&=~1; }
157 for(j=0;j<len;j+=2){ 160 for(j=0;j<len;j+=2){
158 char x=buf[j]; 161 char x=buf[j];
159 buf[j]=buf[j+1]; 162 buf[j]=buf[j+1];
160 buf[j+1]=x; 163 buf[j+1]=x;
161 } 164 }
162 }
163 break; 165 break;
164 } 166 }
165 case 5: // aLaw decoder 167 case 5: // aLaw decoder
166 { int l=demux_read_data(sh_audio->ds,buf,OUTBURST/2); 168 { int l=demux_read_data(sh_audio->ds,buf,OUTBURST/2);
167 unsigned short *d=(unsigned short *) buf; 169 unsigned short *d=(unsigned short *) buf;