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);