Mercurial > mplayer.hg
comparison dec_audio.c @ 1567:5c7760aa4f94
printf->mp_msg/mp_dbg
author | arpi |
---|---|
date | Fri, 17 Aug 2001 00:40:25 +0000 |
parents | 81aa2d701ae0 |
children | 60afe3421c04 |
comparison
equal
deleted
inserted
replaced
1566:913c1ee56b4f | 1567:5c7760aa4f94 |
---|---|
2 #include <stdio.h> | 2 #include <stdio.h> |
3 #include <stdlib.h> | 3 #include <stdlib.h> |
4 #include <unistd.h> | 4 #include <unistd.h> |
5 | 5 |
6 #include "config.h" | 6 #include "config.h" |
7 #include "mp_msg.h" | |
8 | |
7 #include "libao2/afmt.h" | 9 #include "libao2/afmt.h" |
8 | 10 |
9 extern int verbose; // defined in mplayer.c | 11 extern int verbose; // defined in mplayer.c |
10 | 12 |
11 #ifdef USE_FAKE_MONO | 13 #ifdef USE_FAKE_MONO |
80 sh_audio->audio_out_minsize=8192;// default size, maybe not enough for Win32/ACM | 82 sh_audio->audio_out_minsize=8192;// default size, maybe not enough for Win32/ACM |
81 | 83 |
82 switch(driver){ | 84 switch(driver){ |
83 case AFM_ACM: | 85 case AFM_ACM: |
84 #ifndef USE_WIN32DLL | 86 #ifndef USE_WIN32DLL |
85 printf("Win32/ACM audio codec disabled, or unavailable on non-x86 CPU -> force nosound :(\n"); | 87 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"Win32/ACM audio codec disabled, or unavailable on non-x86 CPU -> force nosound :(\n"); |
86 driver=0; | 88 driver=0; |
87 #else | 89 #else |
88 // Win32 ACM audio codec: | 90 // Win32 ACM audio codec: |
89 if(init_acm_audio_codec(sh_audio)){ | 91 if(init_acm_audio_codec(sh_audio)){ |
90 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; | 92 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; |
93 // if(sh_audio->audio_out_minsize>16384) sh_audio->audio_out_minsize=16384; | 95 // if(sh_audio->audio_out_minsize>16384) sh_audio->audio_out_minsize=16384; |
94 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize; | 96 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize; |
95 // if(sh_audio->a_buffer_size<sh_audio->audio_out_minsize+MAX_OUTBURST) | 97 // if(sh_audio->a_buffer_size<sh_audio->audio_out_minsize+MAX_OUTBURST) |
96 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize+MAX_OUTBURST; | 98 // sh_audio->a_buffer_size=sh_audio->audio_out_minsize+MAX_OUTBURST; |
97 } else { | 99 } else { |
98 printf("Could not load/initialize Win32/ACM AUDIO codec (missing DLL file?)\n"); | 100 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"Could not load/initialize Win32/ACM AUDIO codec (missing DLL file?)\n"); |
99 driver=0; | 101 driver=0; |
100 } | 102 } |
101 #endif | 103 #endif |
102 break; | 104 break; |
103 case AFM_DSHOW: | 105 case AFM_DSHOW: |
104 #ifndef USE_DIRECTSHOW | 106 #ifndef USE_DIRECTSHOW |
105 printf("Compiled without DirectShow support -> force nosound :(\n"); | 107 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"Compiled without DirectShow support -> force nosound :(\n"); |
106 driver=0; | 108 driver=0; |
107 #else | 109 #else |
108 // Win32 DShow audio codec: | 110 // Win32 DShow audio codec: |
109 // printf("DShow_audio: channs=%d rate=%d\n",sh_audio->channels,sh_audio->samplerate); | 111 // printf("DShow_audio: channs=%d rate=%d\n",sh_audio->channels,sh_audio->samplerate); |
110 if(DS_AudioDecoder_Open(sh_audio->codec->dll,&sh_audio->codec->guid,sh_audio->wf)){ | 112 if(DS_AudioDecoder_Open(sh_audio->codec->dll,&sh_audio->codec->guid,sh_audio->wf)){ |
111 printf("ERROR: Could not load/initialize Win32/DirctShow AUDIO codec: %s\n",sh_audio->codec->dll); | 113 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"ERROR: Could not load/initialize Win32/DirctShow AUDIO codec: %s\n",sh_audio->codec->dll); |
112 driver=0; | 114 driver=0; |
113 } else { | 115 } else { |
114 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; | 116 sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; |
115 sh_audio->channels=sh_audio->wf->nChannels; | 117 sh_audio->channels=sh_audio->wf->nChannels; |
116 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; | 118 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; |
151 if(!driver) return 0; | 153 if(!driver) return 0; |
152 | 154 |
153 // allocate audio out buffer: | 155 // allocate audio out buffer: |
154 sh_audio->a_buffer_size=sh_audio->audio_out_minsize+MAX_OUTBURST; // worst case calc. | 156 sh_audio->a_buffer_size=sh_audio->audio_out_minsize+MAX_OUTBURST; // worst case calc. |
155 | 157 |
156 if(verbose) printf("dec_audio: Allocating %d + %d = %d bytes for output buffer\n", | 158 mp_msg(MSGT_DECAUDIO,MSGL_V,"dec_audio: Allocating %d + %d = %d bytes for output buffer\n", |
157 sh_audio->audio_out_minsize,MAX_OUTBURST,sh_audio->a_buffer_size); | 159 sh_audio->audio_out_minsize,MAX_OUTBURST,sh_audio->a_buffer_size); |
158 | 160 |
159 sh_audio->a_buffer=malloc(sh_audio->a_buffer_size); | 161 sh_audio->a_buffer=malloc(sh_audio->a_buffer_size); |
160 if(!sh_audio->a_buffer){ | 162 if(!sh_audio->a_buffer){ |
161 fprintf(stderr,"Cannot allocate audio out buffer\n"); | 163 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"Cannot allocate audio out buffer\n"); |
162 return 0; | 164 return 0; |
163 } | 165 } |
164 memset(sh_audio->a_buffer,0,sh_audio->a_buffer_size); | 166 memset(sh_audio->a_buffer,0,sh_audio->a_buffer_size); |
165 sh_audio->a_buffer_len=0; | 167 sh_audio->a_buffer_len=0; |
166 | 168 |
167 switch(driver){ | 169 switch(driver){ |
168 #ifdef USE_WIN32DLL | 170 #ifdef USE_WIN32DLL |
169 case AFM_ACM: { | 171 case AFM_ACM: { |
170 int ret=acm_decode_audio(sh_audio,sh_audio->a_buffer,4096,sh_audio->a_buffer_size); | 172 int ret=acm_decode_audio(sh_audio,sh_audio->a_buffer,4096,sh_audio->a_buffer_size); |
171 if(ret<0){ | 173 if(ret<0){ |
172 printf("ACM decoding error: %d\n",ret); | 174 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"ACM decoding error: %d\n",ret); |
173 driver=0; | 175 driver=0; |
174 } | 176 } |
175 sh_audio->a_buffer_len=ret; | 177 sh_audio->a_buffer_len=ret; |
176 break; | 178 break; |
177 } | 179 } |
232 struct hwac3info ai; | 234 struct hwac3info ai; |
233 int len, skipped; | 235 int len, skipped; |
234 len = ds_get_packet(sh_audio->ds, &buffer); // maybe 1 packet is not enough, | 236 len = ds_get_packet(sh_audio->ds, &buffer); // maybe 1 packet is not enough, |
235 // at least for mpeg, PS packets contain about max. 2000 bytes of data. | 237 // at least for mpeg, PS packets contain about max. 2000 bytes of data. |
236 if(ac3_iec958_parse_syncinfo(buffer, len, &ai, &skipped) < 0) { | 238 if(ac3_iec958_parse_syncinfo(buffer, len, &ai, &skipped) < 0) { |
237 fprintf(stderr, "AC3 stream not valid.\n"); | 239 mp_msg(MSGT_DECAUDIO,MSGL_ERR, "AC3 stream not valid.\n"); |
238 driver = 0; | 240 driver = 0; |
239 break; | 241 break; |
240 } | 242 } |
241 if(ai.samplerate != 48000) { | 243 if(ai.samplerate != 48000) { |
242 fprintf(stderr, "Only 48000 Hz streams supported.\n"); | 244 mp_msg(MSGT_DECAUDIO,MSGL_ERR,"Only 48000 Hz streams supported.\n"); |
243 driver = 0; | 245 driver = 0; |
244 break; | 246 break; |
245 } | 247 } |
246 sh_audio->samplerate=ai.samplerate; | 248 sh_audio->samplerate=ai.samplerate; |
247 sh_audio->samplesize=ai.framesize; | 249 sh_audio->samplesize=ai.framesize; |
287 break; | 289 break; |
288 } | 290 } |
289 } | 291 } |
290 | 292 |
291 if(!sh_audio->channels || !sh_audio->samplerate){ | 293 if(!sh_audio->channels || !sh_audio->samplerate){ |
292 printf("Unknown/missing audio format, using nosound\n"); | 294 mp_msg(MSGT_DECAUDIO,MSGL_WARN,"Unknown/missing audio format, using nosound\n"); |
293 driver=0; | 295 driver=0; |
294 } | 296 } |
295 | 297 |
296 if(!driver){ | 298 if(!driver){ |
297 if(sh_audio->a_buffer) free(sh_audio->a_buffer); | 299 if(sh_audio->a_buffer) free(sh_audio->a_buffer); |
383 #ifdef USE_DIRECTSHOW | 385 #ifdef USE_DIRECTSHOW |
384 case AFM_DSHOW: // DirectShow | 386 case AFM_DSHOW: // DirectShow |
385 { int size_in=0; | 387 { int size_in=0; |
386 int size_out=0; | 388 int size_out=0; |
387 int srcsize=DS_AudioDecoder_GetSrcSize(maxlen); | 389 int srcsize=DS_AudioDecoder_GetSrcSize(maxlen); |
388 if(verbose>2)printf("DShow says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen); | 390 mp_msg(MSGT_DECAUDIO,MSGL_DBG3,"DShow says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen); |
389 if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! | 391 if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! |
390 if(sh_audio->a_in_buffer_len<srcsize){ | 392 if(sh_audio->a_in_buffer_len<srcsize){ |
391 sh_audio->a_in_buffer_len+= | 393 sh_audio->a_in_buffer_len+= |
392 demux_read_data(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len], | 394 demux_read_data(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len], |
393 srcsize-sh_audio->a_in_buffer_len); | 395 srcsize-sh_audio->a_in_buffer_len); |
394 } | 396 } |
395 DS_AudioDecoder_Convert(sh_audio->a_in_buffer,sh_audio->a_in_buffer_len, | 397 DS_AudioDecoder_Convert(sh_audio->a_in_buffer,sh_audio->a_in_buffer_len, |
396 buf,maxlen, &size_in,&size_out); | 398 buf,maxlen, &size_in,&size_out); |
397 if(verbose) | 399 mp_dbg(MSGT_DECAUDIO,MSGL_DBG2,"DShow: audio %d -> %d converted (in_buf_len=%d of %d) %d\n",size_in,size_out,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,ds_tell_pts(sh_audio->ds)); |
398 printf("DShow: audio %d -> %d converted (in_buf_len=%d of %d) %d\n",size_in,size_out,sh_audio->a_in_buffer_len,sh_audio->a_in_buffer_size,ds_tell_pts(sh_audio->ds)); | |
399 if(size_in>=sh_audio->a_in_buffer_len){ | 400 if(size_in>=sh_audio->a_in_buffer_len){ |
400 sh_audio->a_in_buffer_len=0; | 401 sh_audio->a_in_buffer_len=0; |
401 } else { | 402 } else { |
402 sh_audio->a_in_buffer_len-=size_in; | 403 sh_audio->a_in_buffer_len-=size_in; |
403 memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[size_in],sh_audio->a_in_buffer_len); | 404 memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[size_in],sh_audio->a_in_buffer_len); |