Lines Matching refs:ds

124 static void dsound_clear_sample (DSoundVoiceOut *ds);
426 static void dsoundPlayInterfaceRelease (DSoundVoiceOut *ds)
428 if (ds->dsound) {
429 IDirectSound_Release (ds->dsound);
430 ds->dsound = NULL;
434 static int dsoundPlayInterfaceCreate (DSoundVoiceOut *ds)
440 if (ds->dsound != NULL) {
446 &IID_IDirectSound, (void **) &ds->dsound);
451 hr = IDirectSound_Initialize (ds->dsound, s->devguidp_play);
454 hr = IDirectSound_SetCooperativeLevel (ds->dsound, hwnd, DSSCL_PRIORITY);
466 dsoundPlayInterfaceRelease (ds);
473 static void dsoundPlayClose (DSoundVoiceOut *ds)
479 DSLOGF(("DSound: playback close %p buffer %p\n", ds, ds->dsound_buffer));
481 if (ds->dsound_buffer) {
482 hr = IDirectSoundBuffer_Stop (ds->dsound_buffer);
487 IDirectSoundBuffer_Release (ds->dsound_buffer);
488 ds->dsound_buffer = NULL;
491 dsoundPlayInterfaceRelease (ds);
494 static int dsoundPlayOpen (DSoundVoiceOut *ds)
505 ds,
506 ds->hw.samples,
507 ds->hw.info.freq,
508 ds->hw.info.nchannels,
509 ds->hw.info.bits,
510 ds->hw.info.sign));
512 if (ds->dsound_buffer != NULL) {
515 dsoundPlayClose (ds);
518 err = waveformat_from_audio_settings (&wfx, &ds->as);
523 err = dsoundPlayInterfaceCreate (ds);
532 bd.dwBufferBytes = ds->hw.samples << ds->hw.info.shift;
533 hr = IDirectSound_CreateSoundBuffer (ds->dsound,
534 &bd, &ds->dsound_buffer, NULL);
542 hr = IDirectSoundBuffer_GetFormat (ds->dsound_buffer, &wfx, sizeof (wfx), NULL);
550 hr = IDirectSoundBuffer_GetCaps (ds->dsound_buffer, &bc);
573 if (bc.dwBufferBytes & ds->hw.info.align) {
575 bc.dwBufferBytes, ds->hw.info.align + 1));
578 if (ds->hw.samples != 0 && ds->hw.samples != (bc.dwBufferBytes >> ds->hw.info.shift)) {
580 bc.dwBufferBytes, ds->hw.samples << ds->hw.info.shift));
587 ds->playback_buffer_size = bc.dwBufferBytes >> ds->hw.info.shift;
588 DSLOGF(("DSound: playback open playback_buffer_size %d\n", ds->playback_buffer_size));
593 dsoundPlayClose (ds);
597 static int dsoundPlayGetStatus (DSoundVoiceOut *ds, DWORD *statusp)
603 if (ds->dsound_buffer != NULL) {
605 hr = IDirectSoundBuffer_GetStatus (ds->dsound_buffer, &status);
615 if (dsound_restore_out (ds->dsound_buffer)) {
633 static void dsoundPlayStop (DSoundVoiceOut *ds)
638 if (ds->dsound_buffer != NULL) {
640 dsoundPlayGetStatus (ds, &status);
642 hr = IDirectSoundBuffer_Stop (ds->dsound_buffer);
649 static int dsoundPlayStart (DSoundVoiceOut *ds)
654 if (ds->dsound_buffer != NULL) {
655 if (dsoundPlayGetStatus (ds, &status)) {
664 dsound_clear_sample (ds);
667 ds->first_time = 1;
671 hr = IDirectSoundBuffer_Play (ds->dsound_buffer, 0, 0, DSBPLAY_LOOPING);
689 static void dsoundCaptureInterfaceRelease (DSoundVoiceIn *ds)
691 if (ds->dsound_capture) {
692 IDirectSoundCapture_Release (ds->dsound_capture);
693 ds->dsound_capture = NULL;
697 static int dsoundCaptureInterfaceCreate (DSoundVoiceIn *ds)
703 if (ds->dsound_capture != NULL) {
709 &IID_IDirectSoundCapture, (void **) &ds->dsound_capture);
714 hr = IDirectSoundCapture_Initialize (ds->dsound_capture, s->devguidp_capture);
722 dsoundCaptureInterfaceRelease (ds);
729 static void dsoundCaptureClose (DSoundVoiceIn *ds)
733 DSLOGF(("DSound: capture close %p buffer %p\n", ds, ds->dsound_capture_buffer));
735 if (ds->dsound_capture_buffer) {
736 HRESULT hr = IDirectSoundCaptureBuffer_Stop (ds->dsound_capture_buffer);
741 IDirectSoundCaptureBuffer_Release (ds->dsound_capture_buffer);
742 ds->dsound_capture_buffer = NULL;
745 dsoundCaptureInterfaceRelease (ds);
748 static int dsoundCaptureOpen (DSoundVoiceIn *ds)
760 ds,
761 ds->hw.samples,
762 ds->hw.info.freq,
763 ds->hw.info.nchannels,
764 ds->hw.info.bits,
765 ds->hw.info.sign));
767 if (ds->dsound_capture_buffer != NULL) {
770 dsoundCaptureClose (ds);
773 err = waveformat_from_audio_settings (&wfx, &ds->as);
778 err = dsoundCaptureInterfaceCreate (ds);
786 bd.dwBufferBytes = ds->hw.samples << ds->hw.info.shift;
787 hr = IDirectSoundCapture_CreateCaptureBuffer (ds->dsound_capture,
788 &bd, &ds->dsound_capture_buffer, NULL);
792 ds->dsound_capture_buffer = NULL;
798 hr = IDirectSoundCaptureBuffer_GetCurrentPosition (ds->dsound_capture_buffer, NULL, &rpos);
805 hr = IDirectSoundCaptureBuffer_GetFormat (ds->dsound_capture_buffer, &wfx, sizeof (wfx), NULL);
813 hr = IDirectSoundCaptureBuffer_GetCaps (ds->dsound_capture_buffer, &bc);
836 if (bc.dwBufferBytes & ds->hw.info.align) {
838 bc.dwBufferBytes, ds->hw.info.align + 1));
841 if (ds->hw.samples != 0 && ds->hw.samples != (bc.dwBufferBytes >> ds->hw.info.shift)) {
843 bc.dwBufferBytes, ds->hw.samples << ds->hw.info.shift));
847 ds->hw.wpos = 0;
848 ds->last_read_pos = rpos >> ds->hw.info.shift;
849 ds->capture_buffer_size = bc.dwBufferBytes >> ds->hw.info.shift;
850 DSLOGF(("DSound: capture open last_read_pos %d, capture_buffer_size %d\n", ds->last_read_pos, ds->capture_buffer_size));
852 ds->hr_last_run_in = S_OK;
857 dsoundCaptureClose (ds);
861 static void dsoundCaptureStop (DSoundVoiceIn *ds)
863 if (ds->dsound_capture_buffer) {
864 HRESULT hr = IDirectSoundCaptureBuffer_Stop (ds->dsound_capture_buffer);
871 static int dsoundCaptureStart (DSoundVoiceIn *ds)
876 if (ds->dsound_capture_buffer != NULL) {
877 hr = IDirectSoundCaptureBuffer_GetStatus (ds->dsound_capture_buffer, &status);
889 hr = IDirectSoundCaptureBuffer_Start (ds->dsound_capture_buffer, DSCBSTART_LOOPING);
935 static void dsound_clear_sample (DSoundVoiceOut *ds)
942 ds->dsound_buffer,
943 &ds->hw.info,
945 ds->playback_buffer_size << ds->hw.info.shift,
954 len1 = blen1 >> ds->hw.info.shift;
955 len2 = blen2 >> ds->hw.info.shift;
958 audio_pcm_info_clear_buf (&ds->hw.info, p1, len1);
962 audio_pcm_info_clear_buf (&ds->hw.info, p2, len2);
965 dsound_unlock_out (ds->dsound_buffer, p1, p2, blen1, blen2);
970 DSoundVoiceOut *ds = (DSoundVoiceOut *) hw;
975 if (dsoundPlayStart (ds)) {
976 dsoundPlayClose (ds);
977 dsoundPlayOpen (ds);
979 if (dsoundPlayStart (ds)) {
986 dsoundPlayStop (ds);
1001 DSoundVoiceOut *ds = (DSoundVoiceOut *) hw;
1002 LPDIRECTSOUNDBUFFER dsb = ds->dsound_buffer;
1017 bufsize = ds->playback_buffer_size << hwshift;
1040 if (ds->first_time) {
1056 ds->first_time = 0;
1059 if (ds->old_pos == ppos) {
1064 old_pos = ds->old_pos;
1113 ds->old_pos = (old_pos + (decr << hwshift)) % bufsize;
1120 DSoundVoiceIn *ds = (DSoundVoiceIn *) hw;
1125 if (dsoundCaptureStart (ds)) {
1126 dsoundCaptureClose (ds);
1127 dsoundCaptureOpen (ds);
1129 if (dsoundCaptureStart (ds)) {
1136 dsoundCaptureStop (ds);
1151 DSoundVoiceIn *ds = (DSoundVoiceIn *) hw;
1152 LPDIRECTSOUNDCAPTUREBUFFER dscb = ds->dsound_capture_buffer;
1181 if (hr != ds->hr_last_run_in) {
1184 ds->hr_last_run_in = hr;
1187 ds->hr_last_run_in = hr;
1196 len = audio_ring_dist (rpos, ds->last_read_pos, ds->capture_buffer_size);
1205 ds->last_read_pos << hwshift,
1240 ds->last_read_pos = (ds->last_read_pos + decr) % ds->capture_buffer_size;