comparison mplayer.c @ 190:a8552ad553e0

DirectShow audio support
author arpi_esp
date Thu, 22 Mar 2001 01:57:58 +0000
parents 55206b791586
children ae0f909ccc7c
comparison
equal deleted inserted replaced
189:45778577e6aa 190:a8552ad553e0
56 char f4[8]; 56 char f4[8];
57 } GUID; 57 } GUID;
58 58
59 #ifdef USE_DIRECTSHOW 59 #ifdef USE_DIRECTSHOW
60 #include "DirectShow/DS_VideoDec.h" 60 #include "DirectShow/DS_VideoDec.h"
61 #include "DirectShow/DS_AudioDec.h"
61 #endif 62 #endif
62 63
63 #include "opendivx/decore.h" 64 #include "opendivx/decore.h"
64 65
65 66
365 int seek_to_byte=0; 366 int seek_to_byte=0;
366 int f; // filedes 367 int f; // filedes
367 int stream_type; 368 int stream_type;
368 stream_t* stream=NULL; 369 stream_t* stream=NULL;
369 int file_format=DEMUXER_TYPE_UNKNOWN; 370 int file_format=DEMUXER_TYPE_UNKNOWN;
370 int has_audio=1; // audio format 0=no 1=mpeg 2=pcm 3=ac3 4=win32 5=alaw 6=msgsm 371 int has_audio=1; // audio 0=no 1=mpeg 2=pcm 3=ac3 4=ACM 5=alaw 6=msgsm 7=DShow
371 int has_video=0; // video format 0=no 1=mpeg 2=win32/VfW 3=OpenDivX 4=w32/DShow 372 int has_video=0; // video 0=no 1=mpeg 2=win32/VfW 3=OpenDivX 4=w32/DShow
372 // 373 //
373 int audio_format=0; // override 374 int audio_format=0; // override
374 #ifdef ALSA_TIMER 375 #ifdef ALSA_TIMER
375 int alsa=1; 376 int alsa=1;
376 #else 377 #else
674 has_audio=4; // Win32/ACM 675 has_audio=4; // Win32/ACM
675 } 676 }
676 if(verbose) printf("detected AVI audio format: %d\n",has_audio); 677 if(verbose) printf("detected AVI audio format: %d\n",has_audio);
677 if(has_audio==4){ 678 if(has_audio==4){
678 if(!avi_header.audio_codec) avi_header.audio_codec=get_auds_codec_name(); 679 if(!avi_header.audio_codec) avi_header.audio_codec=get_auds_codec_name();
680 if(avi_header.auds_guid) has_audio=7; // force DShow
679 if(!avi_header.audio_codec) has_audio=0; // unknown win32 codec 681 if(!avi_header.audio_codec) has_audio=0; // unknown win32 codec
680 if(verbose) printf("win32 audio codec: '%s'\n",avi_header.audio_codec); 682 if(verbose) printf("win32 audio codec: '%s'\n",avi_header.audio_codec);
681 } 683 }
682 if(has_audio){ 684 if(has_audio){
683 if(verbose) printf("AVI: Searching for audio stream (id:%d)\n",d_audio->id); 685 if(verbose) printf("AVI: Searching for audio stream (id:%d)\n",d_audio->id);
741 has_audio=4; // Win32/ACM 743 has_audio=4; // Win32/ACM
742 } 744 }
743 if(verbose) printf("detected ASF audio format: %d\n",has_audio); 745 if(verbose) printf("detected ASF audio format: %d\n",has_audio);
744 if(has_audio==4){ 746 if(has_audio==4){
745 if(!avi_header.audio_codec) avi_header.audio_codec=get_auds_codec_name(); 747 if(!avi_header.audio_codec) avi_header.audio_codec=get_auds_codec_name();
748 if(avi_header.auds_guid) has_audio=7; // force DShow
746 if(!avi_header.audio_codec) has_audio=0; // unknown win32 codec 749 if(!avi_header.audio_codec) has_audio=0; // unknown win32 codec
747 if(verbose) printf("win32 audio codec: '%s'\n",avi_header.audio_codec); 750 if(verbose) printf("win32 audio codec: '%s'\n",avi_header.audio_codec);
748 } 751 }
749 if(has_audio){ 752 if(has_audio){
750 if(verbose) printf("ASF: Searching for audio stream (id:%d)\n",d_audio->id); 753 if(verbose) printf("ASF: Searching for audio stream (id:%d)\n",d_audio->id);
1163 has_audio=1; // fallback to mp3lib 1166 has_audio=1; // fallback to mp3lib
1164 } else 1167 } else
1165 has_audio=0; // nosound 1168 has_audio=0; // nosound
1166 } 1169 }
1167 } 1170 }
1171
1172 if(has_audio==7){
1173 #ifndef USE_DIRECTSHOW
1174 printf("Compiled without DirectShow support -> force nosound :(\n");
1175 has_audio=0;
1176 #else
1177 // Win32 DShow audio codec:
1178 WAVEFORMATEX *in_fmt=(WAVEFORMATEX*)&avi_header.wf_ext;
1179 avi_header.wf.nChannels=in_fmt->nChannels;
1180 avi_header.wf.nSamplesPerSec=in_fmt->nSamplesPerSec;
1181 avi_header.wf.nAvgBytesPerSec=2*avi_header.wf.nSamplesPerSec*avi_header.wf.nChannels;
1182 avi_header.wf.wFormatTag=WAVE_FORMAT_PCM;
1183 avi_header.wf.nBlockAlign=2*in_fmt->nChannels;
1184 avi_header.wf.wBitsPerSample=16;
1185 avi_header.wf.cbSize=0;
1186
1187 if(!DS_AudioDecoder_Open(avi_header.audio_codec,avi_header.auds_guid,in_fmt)){
1188 MP3_channels=avi_header.wf.nChannels;
1189 MP3_samplerate=avi_header.wf.nSamplesPerSec;
1190 } else {
1191 printf("Could not load/initialize Win32/DirctShow AUDIO codec (missing .AX file?)\n");
1192 if((in_fmt->wFormatTag)==0x55){
1193 printf("Audio format is MP3 -> fallback to internal mp3lib/mpg123\n");
1194 has_audio=1; // fallback to mp3lib
1195 } else
1196 has_audio=0; // nosound
1197 }
1198 #endif
1199 }
1200
1168 1201
1169 // allocate audio out buffer: 1202 // allocate audio out buffer:
1170 a_buffer=malloc(a_buffer_size); 1203 a_buffer=malloc(a_buffer_size);
1171 memset(a_buffer,0,a_buffer_size); 1204 memset(a_buffer,0,a_buffer_size);
1172 a_buffer_len=0; 1205 a_buffer_len=0;