Changeset 436:4b242e98916e in mediastreamer2
- Timestamp:
- Apr 24, 2009 3:42:36 PM (4 years ago)
- Branch:
- default
- File:
-
- 1 edited
-
linphone/mediastreamer2/src/winsnd2.c (modified) (26 diffs)
Legend:
- Unmodified
- Added
- Removed
-
linphone/mediastreamer2/src/winsnd2.c
r435 r436 17 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 18 */ 19 #if !defined(_WIN32_WCE) /* Allready defined for wince */ 19 20 #ifndef UNICODE 20 21 #define UNICODE 21 22 #endif … … 61 62 UINT uLineIndex; 62 63 63 MMRESULT mr = MMSYSERR_NOERROR;64 DWORD dwVolume = 0xFFFF;65 dwVolume = ((0xFFFF) * percent) / 100;64 MMRESULT mr = MMSYSERR_NOERROR; 65 DWORD dwVolume = 0xFFFF; 66 dwVolume = ((0xFFFF) * percent) / 100; 66 67 67 68 switch(e){ 68 69 case MS_SND_CARD_MASTER: 69 70 mr = waveOutSetVolume((HWAVEOUT)d->out_devid, dwVolume); 70 if (mr != MMSYSERR_NOERROR)71 {72 ms_warning("Failed to set master volume. (waveOutSetVolume:0x%i)", mr);73 return;74 }75 break;76 case MS_SND_CARD_CAPTURE:71 if (mr != MMSYSERR_NOERROR) 72 { 73 ms_warning("Failed to set master volume. (waveOutSetVolume:0x%i)", mr); 74 return; 75 } 76 break; 77 case MS_SND_CARD_CAPTURE: 77 78 mr = mixerGetID( (HMIXEROBJ)d->in_devid, &uMixerID, MIXER_OBJECTF_WAVEIN ); 78 79 if ( mr != MMSYSERR_NOERROR ) … … 213 214 } 214 215 mixerClose( (HMIXER)dwMixerHandle ); 215 if (mr != MMSYSERR_NOERROR)216 {217 ms_warning("Failed to set capture volume. (waveInSetVolume:0x%i)", mr);218 return;219 }220 break;216 if (mr != MMSYSERR_NOERROR) 217 { 218 ms_warning("Failed to set capture volume. (waveInSetVolume:0x%i)", mr); 219 return; 220 } 221 break; 221 222 case MS_SND_CARD_PLAYBACK: 222 223 { … … 280 281 } 281 282 } 282 break;283 default:283 break; 284 default: 284 285 ms_warning("winsnd_card_set_level: unsupported command."); 285 286 } … … 289 290 switch(e){ 290 291 case MS_SND_CARD_MASTER: 291 /*mr=waveOutGetVolume(d->waveoutdev, &dwVolume);*/292 /* Transform to 0 to 100 scale*/293 /*dwVolume = (dwVolume *100) / (0xFFFF);*/294 return 60;295 break;296 case MS_SND_CARD_CAPTURE:297 break;292 /*mr=waveOutGetVolume(d->waveoutdev, &dwVolume);*/ 293 /* Transform to 0 to 100 scale*/ 294 /*dwVolume = (dwVolume *100) / (0xFFFF);*/ 295 return 60; 296 break; 297 case MS_SND_CARD_CAPTURE: 298 break; 298 299 case MS_SND_CARD_PLAYBACK: 299 break;300 break; 300 301 default: 301 302 ms_warning("winsnd_card_get_level: unsupported command."); … … 309 310 switch(source){ 310 311 case MS_SND_CARD_MIC: 311 break;312 break; 312 313 case MS_SND_CARD_LINE: 313 break;314 break; 314 315 } 315 316 } … … 371 372 if (outdev!=-1) 372 373 d->out_devid=outdev; 373 374 374 375 return; 375 376 } … … 380 381 381 382 static void winsndcard_detect(MSSndCardManager *m){ 382 MMRESULT mr = NOERROR;383 unsigned int nOutDevices = waveOutGetNumDevs ();384 unsigned int nInDevices = waveInGetNumDevs ();385 unsigned int item;386 387 if (nOutDevices>nInDevices)383 MMRESULT mr = NOERROR; 384 unsigned int nOutDevices = waveOutGetNumDevs (); 385 unsigned int nInDevices = waveInGetNumDevs (); 386 unsigned int item; 387 388 if (nOutDevices>nInDevices) 388 389 nInDevices = nOutDevices; 389 390 390 for (item = 0; item < nInDevices; item++){391 392 WAVEINCAPS incaps;393 WAVEOUTCAPS outcaps;394 mr = waveInGetDevCaps (item, &incaps, sizeof (WAVEINCAPS));395 if (mr == MMSYSERR_NOERROR)391 for (item = 0; item < nInDevices; item++){ 392 393 WAVEINCAPS incaps; 394 WAVEOUTCAPS outcaps; 395 mr = waveInGetDevCaps (item, &incaps, sizeof (WAVEINCAPS)); 396 if (mr == MMSYSERR_NOERROR) 396 397 { 397 398 #if defined(_WIN32_WCE) … … 406 407 #endif 407 408 } 408 mr = waveOutGetDevCaps (item, &outcaps, sizeof (WAVEOUTCAPS));409 if (mr == MMSYSERR_NOERROR)409 mr = waveOutGetDevCaps (item, &outcaps, sizeof (WAVEOUTCAPS)); 410 if (mr == MMSYSERR_NOERROR) 410 411 { 411 412 #if defined(_WIN32_WCE) 412 413 char card[256]; 413 414 snprintf(card, sizeof(card), "Output card %i", item); 414 add_or_update_card(m,card,-1,item,MS_SND_CARD_CAP_PLAYBACK);415 add_or_update_card(m,card,-1,item,MS_SND_CARD_CAP_PLAYBACK); 415 416 /* _tprintf(L"new card: %s", outcaps.szPname); */ 416 417 #else 417 418 char szName[256]; 418 419 WideCharToMultiByte(CP_UTF8,0,outcaps.szPname,-1,szName,256,0,0); 419 add_or_update_card(m,szName,-1,item,MS_SND_CARD_CAP_PLAYBACK);420 #endif 421 } 422 }420 add_or_update_card(m,szName,-1,item,MS_SND_CARD_CAP_PLAYBACK); 421 #endif 422 } 423 } 423 424 } 424 425 … … 501 502 #ifndef DISABLE_SPEEX 502 503 if (d->pst!=NULL) 503 speex_preprocess_state_destroy(d->pst);504 speex_preprocess_state_destroy(d->pst); 504 505 d->pst=NULL; 505 506 d->pst_frame_size=0; … … 534 535 static void CALLBACK 535 536 read_callback (HWAVEIN waveindev, UINT uMsg, DWORD dwInstance, DWORD dwParam1, 536 DWORD dwParam2)537 DWORD dwParam2) 537 538 { 538 539 WAVEHDR *wHdr=(WAVEHDR *) dwParam1; … … 544 545 case WIM_OPEN: 545 546 ms_debug("read_callback : WIM_OPEN"); 546 break;547 break; 547 548 case WIM_CLOSE: 548 549 ms_debug("read_callback : WIM_CLOSE"); 549 break;550 break; 550 551 case WIM_DATA: 551 552 bsize=wHdr->dwBytesRecorded; … … 583 584 SetEvent(f->ticker->TimeEvent); 584 585 #endif 585 break;586 break; 586 587 } 587 588 } … … 602 603 winsnd_apply_settings(d); 603 604 /* Init Microphone device */ 604 dwFlag = CALLBACK_FUNCTION | WAVE_FORMAT_DIRECT;605 mr = waveInOpen (&d->indev, d->dev_id, &d->wfx,606 (DWORD) read_callback, (DWORD)f, dwFlag);605 dwFlag = CALLBACK_FUNCTION | WAVE_FORMAT_DIRECT; 606 mr = waveInOpen (&d->indev, d->dev_id, &d->wfx, 607 (DWORD) read_callback, (DWORD)f, dwFlag); 607 608 if (mr != MMSYSERR_NOERROR) 608 609 { 609 ms_error("Failed to prepare windows sound device. (waveInOpen:0x%i)", mr);610 if (d->dev_id != WAVE_MAPPER)611 dwFlag = WAVE_MAPPED | CALLBACK_FUNCTION;612 mr = waveInOpen (&d->indev, d->dev_id, &d->wfx,613 (DWORD) read_callback, (DWORD)f, dwFlag);614 }610 ms_error("Failed to prepare windows sound device. (waveInOpen:0x%i)", mr); 611 if (d->dev_id != WAVE_MAPPER) 612 dwFlag = WAVE_MAPPED | CALLBACK_FUNCTION; 613 mr = waveInOpen (&d->indev, d->dev_id, &d->wfx, 614 (DWORD) read_callback, (DWORD)f, dwFlag); 615 } 615 616 if (mr != MMSYSERR_NOERROR) 616 617 { 617 ms_error("Failed to prepare windows sound device. (waveInOpen:0x%i)", mr);618 ms_error("Failed to prepare windows sound device. (waveInOpen:0x%i)", mr); 618 619 mr = waveInOpen (&d->indev, WAVE_MAPPER, &d->wfx, 619 (DWORD) read_callback, (DWORD)f, CALLBACK_FUNCTION);620 (DWORD) read_callback, (DWORD)f, CALLBACK_FUNCTION); 620 621 if (mr != MMSYSERR_NOERROR) 621 622 { 622 623 d->indev=NULL; 623 624 ms_error("Failed to prepare windows sound device. (waveInOpen:0x%i)", mr); 624 return ;625 return ; 625 626 } 626 627 } … … 703 704 static void CALLBACK 704 705 write_callback(HWAVEOUT outdev, UINT uMsg, DWORD dwInstance, 705 DWORD dwParam1, DWORD dwParam2)706 DWORD dwParam1, DWORD dwParam2) 706 707 { 707 708 WAVEHDR *hdr=(WAVEHDR *) dwParam1; 708 709 WinSnd *d=(WinSnd*)dwInstance; 709 710 710 711 switch (uMsg){ 711 712 case WOM_OPEN: … … 722 723 } 723 724 d->stat_output++; 724 break;725 break; 725 726 } 726 727 } … … 741 742 dwFlag = CALLBACK_FUNCTION | WAVE_FORMAT_DIRECT; 742 743 mr = waveOutOpen (&d->outdev, d->dev_id, &d->wfx, 743 (DWORD) write_callback, (DWORD)d, dwFlag);744 (DWORD) write_callback, (DWORD)d, dwFlag); 744 745 if (mr != MMSYSERR_NOERROR) 745 746 { 746 747 ms_error("Failed to open windows sound device %i. (waveOutOpen:0x%i)",d->dev_id, mr); 747 if (d->dev_id != WAVE_MAPPER)748 dwFlag = WAVE_MAPPED | CALLBACK_FUNCTION;749 mr = waveOutOpen (&d->outdev, d->dev_id, &d->wfx,750 (DWORD) write_callback, (DWORD)d, dwFlag);751 }748 if (d->dev_id != WAVE_MAPPER) 749 dwFlag = WAVE_MAPPED | CALLBACK_FUNCTION; 750 mr = waveOutOpen (&d->outdev, d->dev_id, &d->wfx, 751 (DWORD) write_callback, (DWORD)d, dwFlag); 752 } 752 753 if (mr != MMSYSERR_NOERROR) 753 754 { 754 755 ms_error("Failed to open windows sound device %i. (waveOutOpen:0x%i)",d->dev_id, mr); 755 756 mr = waveOutOpen (&d->outdev, WAVE_MAPPER, &d->wfx, 756 (DWORD) write_callback, (DWORD)d, CALLBACK_FUNCTION);757 (DWORD) write_callback, (DWORD)d, CALLBACK_FUNCTION); 757 758 if (mr != MMSYSERR_NOERROR) 758 759 { … … 804 805 #ifndef DISABLE_SPEEX 805 806 if (d->pst!=NULL) 806 speex_preprocess_state_destroy(d->pst);807 speex_preprocess_state_destroy(d->pst); 807 808 d->pst=NULL; 808 809 d->pst_frame_size=0; … … 853 854 /* too many sound card are crappy on windows... */ 854 855 d->stat_minimumbuffer=15; 855 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */856 d->stat_minimumbuffer=8;857 #endif 858 859 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */860 {861 if (d->nbufs_playing+d->write_rq.q_mcount<4)862 {863 d->ready=0;864 }865 }866 else867 {868 if (d->nbufs_playing+d->write_rq.q_mcount<7)869 {870 d->ready=0;871 }872 }856 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */ 857 d->stat_minimumbuffer=8; 858 #endif 859 860 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */ 861 { 862 if (d->nbufs_playing+d->write_rq.q_mcount<4) 863 { 864 d->ready=0; 865 } 866 } 867 else 868 { 869 if (d->nbufs_playing+d->write_rq.q_mcount<7) 870 { 871 d->ready=0; 872 } 873 } 873 874 #if defined(WCE_OPTICON_WORKAROUND) 874 875 if (d->workaround==0) … … 894 895 { 895 896 int missing; 896 missing = 10 - d->write_rq.q_mcount - d->nbufs_playing;897 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */898 missing = 6 - d->write_rq.q_mcount - d->nbufs_playing;899 900 ms_message("WINSND trouble: inserting %i silence", missing);897 missing = 10 - d->write_rq.q_mcount - d->nbufs_playing; 898 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */ 899 missing = 6 - d->write_rq.q_mcount - d->nbufs_playing; 900 901 ms_message("WINSND trouble: inserting %i silence", missing); 901 902 while(missing>0) 902 903 { … … 912 913 if (d->ready==0) 913 914 { 914 int missing;915 int missing; 915 916 missing = 10 - d->write_rq.q_mcount - d->nbufs_playing; 916 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */917 missing = 6 - d->write_rq.q_mcount - d->nbufs_playing;917 if (d->wfx.nSamplesPerSec>=32000) /* better results for high rates */ 918 missing = 6 - d->write_rq.q_mcount - d->nbufs_playing; 918 919 ms_message("WINSND trouble: inserting %i silence", missing); 919 920 while(missing>0) … … 942 943 hdr->dwBufferLength=msgdsize(m); 943 944 hdr->dwFlags = 0; 944 hdr->dwUser = (DWORD)m;945 mr = waveOutPrepareHeader(d->outdev,hdr,sizeof(*hdr));946 if (mr != MMSYSERR_NOERROR){945 hdr->dwUser = (DWORD)m; 946 mr = waveOutPrepareHeader(d->outdev,hdr,sizeof(*hdr)); 947 if (mr != MMSYSERR_NOERROR){ 947 948 ms_error("waveOutPrepareHeader() error"); 948 949 getq(&d->write_rq); … … 976 977 getq(&d->write_rq); 977 978 freemsg(m); 978 discarded++;979 d->stat_notplayed++;979 discarded++; 980 d->stat_notplayed++; 980 981 } 981 982 else … … 985 986 getq(&d->write_rq); 986 987 freemsg(m); 987 ms_message("WINSND trouble: silence removed");988 discarded++;989 d->stat_notplayed++;988 ms_message("WINSND trouble: silence removed"); 989 discarded++; 990 d->stat_notplayed++; 990 991 } 991 992 } … … 1053 1054 MS_FILTER_OTHER, 1054 1055 NULL, 1055 0,1056 0, 1056 1057 1, 1057 1058 winsnd_init, 1058 winsnd_read_preprocess,1059 winsnd_read_preprocess, 1059 1060 winsnd_read_process, 1060 1061 winsnd_read_postprocess, 1061 winsnd_uninit,1062 winsnd_uninit, 1062 1063 winsnd_methods 1063 1064 }; … … 1070 1071 MS_FILTER_OTHER, 1071 1072 NULL, 1072 1,1073 1, 1073 1074 0, 1074 1075 winsnd_init, 1075 winsnd_write_preprocess,1076 winsnd_write_preprocess, 1076 1077 winsnd_write_process, 1077 1078 winsnd_write_postprocess, 1078 1079 winsnd_uninit, 1079 winsnd_methods1080 winsnd_methods 1080 1081 }; 1081 1082
Note: See TracChangeset
for help on using the changeset viewer.
