Mercurial > mplayer.hg
annotate libao2/ao_dsound.c @ 23011:365eef1fc4f0
Disable caching of rotated glyphs.
The following commits will add perspective distortion to the glyphs rotated
with \frx and \fry. Somewhere along the way correct caching of such glyphs
will become impossible, but in the end everything will be fine.
author | eugeni |
---|---|
date | Fri, 20 Apr 2007 22:49:48 +0000 |
parents | 7cfd3a04d537 |
children | a124f3abc1ec |
rev | line source |
---|---|
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
1 /****************************************************************************** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
2 * ao_dsound.c: Windows DirectSound interface for MPlayer |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
3 * Copyright (c) 2004 Gabor Szecsi <deje@miki.hu> |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
4 * |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
5 * This program is free software; you can redistribute it and/or modify |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
6 * it under the terms of the GNU General Public License as published by |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
7 * the Free Software Foundation; either version 2 of the License, or |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
8 * (at your option) any later version. |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
9 * |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
10 * This program is distributed in the hope that it will be useful, |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
13 * GNU General Public License for more details. |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
14 * |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
16 * along with this program; if not, write to the Free Software |
19614 | 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
18 * |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
19 *****************************************************************************/ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
20 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
21 \todo verify/extend multichannel support |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
22 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
23 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
24 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
25 #include <stdio.h> |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
26 #include <stdlib.h> |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
27 #include <windows.h> |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
28 #define DIRECTSOUND_VERSION 0x0600 |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
29 #include <dsound.h> |
16972
6a1eaca0e6c1
DirectSound's GetVolume and SetVolume use 100ths of decibels and range from -10,000 to 0.
joey
parents:
14947
diff
changeset
|
30 #include <math.h> |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
31 |
14479 | 32 #include "config.h" |
14245 | 33 #include "libaf/af_format.h" |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
34 #include "audio_out.h" |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
35 #include "audio_out_internal.h" |
14123 | 36 #include "mp_msg.h" |
37 #include "libvo/fastmemcpy.h" | |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
38 #include "osdep/timer.h" |
14398 | 39 #include "subopt-helper.h" |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
40 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
41 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
42 static ao_info_t info = |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
43 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
44 "Windows DirectSound audio output", |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
45 "dsound", |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
46 "Gabor Szecsi <deje@miki.hu>", |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
47 "" |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
48 }; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
49 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
50 LIBAO_EXTERN(dsound) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
51 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
52 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
53 \todo use the definitions from the win32 api headers when they define these |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
54 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
55 #if 1 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
56 #define WAVE_FORMAT_IEEE_FLOAT 0x0003 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
57 #define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
58 #define WAVE_FORMAT_EXTENSIBLE 0xFFFE |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
59 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
60 static const GUID KSDATAFORMAT_SUBTYPE_PCM = {0x1,0x0000,0x0010, {0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71}}; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
61 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
62 #define SPEAKER_FRONT_LEFT 0x1 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
63 #define SPEAKER_FRONT_RIGHT 0x2 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
64 #define SPEAKER_FRONT_CENTER 0x4 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
65 #define SPEAKER_LOW_FREQUENCY 0x8 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
66 #define SPEAKER_BACK_LEFT 0x10 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
67 #define SPEAKER_BACK_RIGHT 0x20 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
68 #define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
69 #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
70 #define SPEAKER_BACK_CENTER 0x100 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
71 #define SPEAKER_SIDE_LEFT 0x200 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
72 #define SPEAKER_SIDE_RIGHT 0x400 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
73 #define SPEAKER_TOP_CENTER 0x800 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
74 #define SPEAKER_TOP_FRONT_LEFT 0x1000 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
75 #define SPEAKER_TOP_FRONT_CENTER 0x2000 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
76 #define SPEAKER_TOP_FRONT_RIGHT 0x4000 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
77 #define SPEAKER_TOP_BACK_LEFT 0x8000 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
78 #define SPEAKER_TOP_BACK_CENTER 0x10000 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
79 #define SPEAKER_TOP_BACK_RIGHT 0x20000 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
80 #define SPEAKER_RESERVED 0x80000000 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
81 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
82 #define DSSPEAKER_HEADPHONE 0x00000001 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
83 #define DSSPEAKER_MONO 0x00000002 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
84 #define DSSPEAKER_QUAD 0x00000003 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
85 #define DSSPEAKER_STEREO 0x00000004 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
86 #define DSSPEAKER_SURROUND 0x00000005 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
87 #define DSSPEAKER_5POINT1 0x00000006 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
88 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
89 #ifndef _WAVEFORMATEXTENSIBLE_ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
90 typedef struct { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
91 WAVEFORMATEX Format; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
92 union { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
93 WORD wValidBitsPerSample; /* bits of precision */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
94 WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
95 WORD wReserved; /* If neither applies, set to zero. */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
96 } Samples; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
97 DWORD dwChannelMask; /* which channels are */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
98 /* present in stream */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
99 GUID SubFormat; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
100 } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
101 #endif |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
102 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
103 #endif |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
104 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
105 static const int channel_mask[] = { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
106 SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_LOW_FREQUENCY, |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
107 SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT, |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
108 SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | SPEAKER_LOW_FREQUENCY, |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
109 SPEAKER_FRONT_LEFT | SPEAKER_FRONT_CENTER | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | SPEAKER_LOW_FREQUENCY |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
110 }; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
111 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
112 static HINSTANCE hdsound_dll = NULL; ///handle to the dll |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
113 static LPDIRECTSOUND hds = NULL; ///direct sound object |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
114 static LPDIRECTSOUNDBUFFER hdspribuf = NULL; ///primary direct sound buffer |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
115 static LPDIRECTSOUNDBUFFER hdsbuf = NULL; ///secondary direct sound buffer (stream buffer) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
116 static int buffer_size = 0; ///size in bytes of the direct sound buffer |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
117 static int write_offset = 0; ///offset of the write cursor in the direct sound buffer |
14555
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
118 static int min_free_space = 0; ///if the free space is below this value get_space() will return 0 |
14947
2f4f347bd5e4
get_space fix by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
14555
diff
changeset
|
119 ///there will always be at least this amout of free space to prevent |
2f4f347bd5e4
get_space fix by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
14555
diff
changeset
|
120 ///get_space() from returning wrong values when buffer is 100% full. |
2f4f347bd5e4
get_space fix by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
14555
diff
changeset
|
121 ///will be replaced with nBlockAlign in init() |
14398 | 122 static int device_num = 0; ///wanted device number |
123 static GUID device; ///guid of the device | |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
124 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
125 /***************************************************************************************/ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
126 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
127 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
128 \brief output error message |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
129 \param err error code |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
130 \return string with the error message |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
131 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
132 static char * dserr2str(int err) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
133 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
134 switch (err) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
135 case DS_OK: return "DS_OK"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
136 case DS_NO_VIRTUALIZATION: return "DS_NO_VIRTUALIZATION"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
137 case DSERR_ALLOCATED: return "DS_NO_VIRTUALIZATION"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
138 case DSERR_CONTROLUNAVAIL: return "DSERR_CONTROLUNAVAIL"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
139 case DSERR_INVALIDPARAM: return "DSERR_INVALIDPARAM"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
140 case DSERR_INVALIDCALL: return "DSERR_INVALIDCALL"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
141 case DSERR_GENERIC: return "DSERR_GENERIC"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
142 case DSERR_PRIOLEVELNEEDED: return "DSERR_PRIOLEVELNEEDED"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
143 case DSERR_OUTOFMEMORY: return "DSERR_OUTOFMEMORY"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
144 case DSERR_BADFORMAT: return "DSERR_BADFORMAT"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
145 case DSERR_UNSUPPORTED: return "DSERR_UNSUPPORTED"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
146 case DSERR_NODRIVER: return "DSERR_NODRIVER"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
147 case DSERR_ALREADYINITIALIZED: return "DSERR_ALREADYINITIALIZED"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
148 case DSERR_NOAGGREGATION: return "DSERR_NOAGGREGATION"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
149 case DSERR_BUFFERLOST: return "DSERR_BUFFERLOST"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
150 case DSERR_OTHERAPPHASPRIO: return "DSERR_OTHERAPPHASPRIO"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
151 case DSERR_UNINITIALIZED: return "DSERR_UNINITIALIZED"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
152 case DSERR_NOINTERFACE: return "DSERR_NOINTERFACE"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
153 case DSERR_ACCESSDENIED: return "DSERR_ACCESSDENIED"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
154 default: return "unknown"; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
155 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
156 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
157 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
158 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
159 \brief uninitialize direct sound |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
160 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
161 static void UninitDirectSound(void) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
162 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
163 // finally release the DirectSound object |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
164 if (hds) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
165 IDirectSound_Release(hds); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
166 hds = NULL; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
167 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
168 // free DSOUND.DLL |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
169 if (hdsound_dll) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
170 FreeLibrary(hdsound_dll); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
171 hdsound_dll = NULL; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
172 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
173 mp_msg(MSGT_AO, MSGL_V, "ao_dsound: DirectSound uninitialized\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
174 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
175 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
176 /** |
14398 | 177 \brief print the commandline help |
178 */ | |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
179 static void print_help(void) |
14398 | 180 { |
181 mp_msg(MSGT_AO, MSGL_FATAL, | |
182 "\n-ao dsound commandline help:\n" | |
183 "Example: mplayer -ao dsound:device=1\n" | |
184 " sets 1st device\n" | |
185 "\nOptions:\n" | |
186 " device=<device-number>\n" | |
187 " Sets device number, use -v to get a list\n"); | |
188 } | |
189 | |
190 | |
191 /** | |
192 \brief enumerate direct sound devices | |
193 \return TRUE to continue with the enumeration | |
194 */ | |
195 static BOOL CALLBACK DirectSoundEnum(LPGUID guid,LPCSTR desc,LPCSTR module,LPVOID context) | |
196 { | |
197 int* device_index=context; | |
198 mp_msg(MSGT_AO, MSGL_V,"%i %s ",*device_index,desc); | |
199 if(device_num==*device_index){ | |
200 mp_msg(MSGT_AO, MSGL_V,"<--"); | |
201 if(guid){ | |
202 memcpy(&device,guid,sizeof(GUID)); | |
203 } | |
204 } | |
205 mp_msg(MSGT_AO, MSGL_V,"\n"); | |
206 (*device_index)++; | |
207 return TRUE; | |
208 } | |
209 | |
210 | |
211 /** | |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
212 \brief initilize direct sound |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
213 \return 0 if error, 1 if ok |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
214 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
215 static int InitDirectSound(void) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
216 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
217 DSCAPS dscaps; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
218 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
219 // initialize directsound |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
220 HRESULT (WINAPI *OurDirectSoundCreate)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); |
14398 | 221 HRESULT (WINAPI *OurDirectSoundEnumerate)(LPDSENUMCALLBACKA, LPVOID); |
222 int device_index=0; | |
223 opt_t subopts[] = { | |
224 {"device", OPT_ARG_INT, &device_num,NULL}, | |
225 {NULL} | |
226 }; | |
227 if (subopt_parse(ao_subdevice, subopts) != 0) { | |
228 print_help(); | |
229 return 0; | |
230 } | |
231 | |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
232 hdsound_dll = LoadLibrary("DSOUND.DLL"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
233 if (hdsound_dll == NULL) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
234 mp_msg(MSGT_AO, MSGL_ERR, "ao_dsound: cannot load DSOUND.DLL\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
235 return 0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
236 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
237 OurDirectSoundCreate = (void*)GetProcAddress(hdsound_dll, "DirectSoundCreate"); |
14398 | 238 OurDirectSoundEnumerate = (void*)GetProcAddress(hdsound_dll, "DirectSoundEnumerateA"); |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
239 |
14398 | 240 if (OurDirectSoundCreate == NULL || OurDirectSoundEnumerate == NULL) { |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
241 mp_msg(MSGT_AO, MSGL_ERR, "ao_dsound: GetProcAddress FAILED\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
242 FreeLibrary(hdsound_dll); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
243 return 0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
244 } |
14398 | 245 |
246 // Enumerate all directsound devices | |
247 mp_msg(MSGT_AO, MSGL_V,"ao_dsound: Output Devices:\n"); | |
248 OurDirectSoundEnumerate(DirectSoundEnum,&device_index); | |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
249 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
250 // Create the direct sound object |
14398 | 251 if FAILED(OurDirectSoundCreate((device_num)?&device:NULL, &hds, NULL )) { |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
252 mp_msg(MSGT_AO, MSGL_ERR, "ao_dsound: cannot create a DirectSound device\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
253 FreeLibrary(hdsound_dll); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
254 return 0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
255 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
256 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
257 /* Set DirectSound Cooperative level, ie what control we want over Windows |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
258 * sound device. In our case, DSSCL_EXCLUSIVE means that we can modify the |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
259 * settings of the primary buffer, but also that only the sound of our |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
260 * application will be hearable when it will have the focus. |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
261 * !!! (this is not really working as intended yet because to set the |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
262 * cooperative level you need the window handle of your application, and |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
263 * I don't know of any easy way to get it. Especially since we might play |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
264 * sound without any video, and so what window handle should we use ??? |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
265 * The hack for now is to use the Desktop window handle - it seems to be |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
266 * working */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
267 if (IDirectSound_SetCooperativeLevel(hds, GetDesktopWindow(), DSSCL_EXCLUSIVE)) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
268 mp_msg(MSGT_AO, MSGL_ERR, "ao_dsound: cannot set direct sound cooperative level\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
269 IDirectSound_Release(hds); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
270 FreeLibrary(hdsound_dll); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
271 return 0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
272 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
273 mp_msg(MSGT_AO, MSGL_V, "ao_dsound: DirectSound initialized\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
274 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
275 memset(&dscaps, 0, sizeof(DSCAPS)); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
276 dscaps.dwSize = sizeof(DSCAPS); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
277 if (DS_OK == IDirectSound_GetCaps(hds, &dscaps)) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
278 if (dscaps.dwFlags & DSCAPS_EMULDRIVER) mp_msg(MSGT_AO, MSGL_V, "ao_dsound: DirectSound is emulated, waveOut may give better performance\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
279 } else { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
280 mp_msg(MSGT_AO, MSGL_V, "ao_dsound: cannot get device capabilities\n"); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
281 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
282 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
283 return 1; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
284 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
285 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
286 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
287 \brief destroy the direct sound buffer |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
288 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
289 static void DestroyBuffer(void) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
290 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
291 if (hdsbuf) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
292 IDirectSoundBuffer_Release(hdsbuf); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
293 hdsbuf = NULL; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
294 } |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
295 if (hdspribuf) { |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
296 IDirectSoundBuffer_Release(hdspribuf); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
297 hdspribuf = NULL; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
298 } |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
299 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
300 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
301 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
302 \brief fill sound buffer |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
303 \param data pointer to the sound data to copy |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
304 \param len length of the data to copy in bytes |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
305 \return number of copyed bytes |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
306 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
307 static int write_buffer(unsigned char *data, int len) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
308 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
309 HRESULT res; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
310 LPVOID lpvPtr1; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
311 DWORD dwBytes1; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
312 LPVOID lpvPtr2; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
313 DWORD dwBytes2; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
314 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
315 // Lock the buffer |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
316 res = IDirectSoundBuffer_Lock(hdsbuf,write_offset, len, &lpvPtr1, &dwBytes1, &lpvPtr2, &dwBytes2, 0); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
317 // If the buffer was lost, restore and retry lock. |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
318 if (DSERR_BUFFERLOST == res) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
319 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
320 IDirectSoundBuffer_Restore(hdsbuf); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
321 res = IDirectSoundBuffer_Lock(hdsbuf,write_offset, len, &lpvPtr1, &dwBytes1, &lpvPtr2, &dwBytes2, 0); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
322 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
323 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
324 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
325 if (SUCCEEDED(res)) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
326 { |
14245 | 327 if( (ao_data.channels == 6) && (ao_data.format!=AF_FORMAT_AC3) ) { |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
328 // reorder channels while writing to pointers. |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
329 // it's this easy because buffer size and len are always |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
330 // aligned to multiples of channels*bytespersample |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
331 // there's probably some room for speed improvements here |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
332 const int chantable[6] = {0, 1, 4, 5, 2, 3}; // reorder "matrix" |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
333 int i, j; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
334 int numsamp,sampsize; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
335 |
14249 | 336 sampsize = af_fmt2bits(ao_data.format)>>3; // bytes per sample |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
337 numsamp = dwBytes1 / (ao_data.channels * sampsize); // number of samples for each channel in this buffer |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
338 |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
339 for( i = 0; i < numsamp; i++ ) for( j = 0; j < ao_data.channels; j++ ) { |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
340 memcpy(lpvPtr1+(i*ao_data.channels*sampsize)+(chantable[j]*sampsize),data+(i*ao_data.channels*sampsize)+(j*sampsize),sampsize); |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
341 } |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
342 |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
343 if (NULL != lpvPtr2 ) |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
344 { |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
345 numsamp = dwBytes2 / (ao_data.channels * sampsize); |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
346 for( i = 0; i < numsamp; i++ ) for( j = 0; j < ao_data.channels; j++ ) { |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
347 memcpy(lpvPtr2+(i*ao_data.channels*sampsize)+(chantable[j]*sampsize),data+dwBytes1+(i*ao_data.channels*sampsize)+(j*sampsize),sampsize); |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
348 } |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
349 } |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
350 |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
351 write_offset+=dwBytes1+dwBytes2; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
352 if(write_offset>=buffer_size)write_offset=dwBytes2; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
353 } else { |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
354 // Write to pointers without reordering. |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
355 memcpy(lpvPtr1,data,dwBytes1); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
356 if (NULL != lpvPtr2 )memcpy(lpvPtr2,data+dwBytes1,dwBytes2); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
357 write_offset+=dwBytes1+dwBytes2; |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
358 if(write_offset>=buffer_size)write_offset=dwBytes2; |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
359 } |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
360 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
361 // Release the data back to DirectSound. |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
362 res = IDirectSoundBuffer_Unlock(hdsbuf,lpvPtr1,dwBytes1,lpvPtr2,dwBytes2); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
363 if (SUCCEEDED(res)) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
364 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
365 // Success. |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
366 DWORD status; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
367 IDirectSoundBuffer_GetStatus(hdsbuf, &status); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
368 if (!(status & DSBSTATUS_PLAYING)){ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
369 res = IDirectSoundBuffer_Play(hdsbuf, 0, 0, DSBPLAY_LOOPING); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
370 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
371 return dwBytes1+dwBytes2; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
372 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
373 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
374 // Lock, Unlock, or Restore failed. |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
375 return 0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
376 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
377 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
378 /***************************************************************************************/ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
379 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
380 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
381 \brief handle control commands |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
382 \param cmd command |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
383 \param arg argument |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
384 \return CONTROL_OK or -1 in case the command can't be handled |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
385 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
386 static int control(int cmd, void *arg) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
387 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
388 DWORD volume; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
389 switch (cmd) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
390 case AOCONTROL_GET_VOLUME: { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
391 ao_control_vol_t* vol = (ao_control_vol_t*)arg; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
392 IDirectSoundBuffer_GetVolume(hdsbuf, &volume); |
16972
6a1eaca0e6c1
DirectSound's GetVolume and SetVolume use 100ths of decibels and range from -10,000 to 0.
joey
parents:
14947
diff
changeset
|
393 vol->left = vol->right = pow(10.0, (float)(volume+10000) / 5000.0); |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
394 //printf("ao_dsound: volume: %f\n",vol->left); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
395 return CONTROL_OK; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
396 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
397 case AOCONTROL_SET_VOLUME: { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
398 ao_control_vol_t* vol = (ao_control_vol_t*)arg; |
16972
6a1eaca0e6c1
DirectSound's GetVolume and SetVolume use 100ths of decibels and range from -10,000 to 0.
joey
parents:
14947
diff
changeset
|
399 volume = (DWORD)(log10(vol->right) * 5000.0) - 10000; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
400 IDirectSoundBuffer_SetVolume(hdsbuf, volume); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
401 //printf("ao_dsound: volume: %f\n",vol->left); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
402 return CONTROL_OK; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
403 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
404 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
405 return -1; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
406 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
407 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
408 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
409 \brief setup sound device |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
410 \param rate samplerate |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
411 \param channels number of channels |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
412 \param format format |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
413 \param flags unused |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
414 \return 1=success 0=fail |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
415 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
416 static int init(int rate, int channels, int format, int flags) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
417 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
418 int res; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
419 if (!InitDirectSound()) return 0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
420 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
421 // ok, now create the buffers |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
422 WAVEFORMATEXTENSIBLE wformat; |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
423 DSBUFFERDESC dsbpridesc; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
424 DSBUFFERDESC dsbdesc; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
425 |
14135 | 426 //check if the format is supported in general |
427 switch(format){ | |
14245 | 428 case AF_FORMAT_AC3: |
429 case AF_FORMAT_S24_LE: | |
430 case AF_FORMAT_S16_LE: | |
431 case AF_FORMAT_S8: | |
14135 | 432 break; |
433 default: | |
14264 | 434 mp_msg(MSGT_AO, MSGL_V,"ao_dsound: format %s not supported defaulting to Signed 16-bit Little-Endian\n",af_fmt2str_short(format)); |
14245 | 435 format=AF_FORMAT_S16_LE; |
14135 | 436 } |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
437 //fill global ao_data |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
438 ao_data.channels = channels; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
439 ao_data.samplerate = rate; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
440 ao_data.format = format; |
14249 | 441 ao_data.bps = channels * rate * (af_fmt2bits(format)>>3); |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
442 if(ao_data.buffersize==-1) ao_data.buffersize = ao_data.bps; // space for 1 sec |
14264 | 443 mp_msg(MSGT_AO, MSGL_V,"ao_dsound: Samplerate:%iHz Channels:%i Format:%s\n", rate, channels, af_fmt2str_short(format)); |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
444 mp_msg(MSGT_AO, MSGL_V,"ao_dsound: Buffersize:%d bytes (%d msec)\n", ao_data.buffersize, ao_data.buffersize / ao_data.bps * 1000); |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
445 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
446 //fill waveformatex |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
447 ZeroMemory(&wformat, sizeof(WAVEFORMATEXTENSIBLE)); |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
448 wformat.Format.cbSize = (channels > 2) ? sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) : 0; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
449 wformat.Format.nChannels = channels; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
450 wformat.Format.nSamplesPerSec = rate; |
14245 | 451 if (format == AF_FORMAT_AC3) { |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
452 wformat.Format.wFormatTag = WAVE_FORMAT_DOLBY_AC3_SPDIF; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
453 wformat.Format.wBitsPerSample = 16; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
454 wformat.Format.nBlockAlign = 4; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
455 } else { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
456 wformat.Format.wFormatTag = (channels > 2) ? WAVE_FORMAT_EXTENSIBLE : WAVE_FORMAT_PCM; |
14249 | 457 wformat.Format.wBitsPerSample = af_fmt2bits(format); |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
458 wformat.Format.nBlockAlign = wformat.Format.nChannels * (wformat.Format.wBitsPerSample >> 3); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
459 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
460 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
461 // fill in primary sound buffer descriptor |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
462 memset(&dsbpridesc, 0, sizeof(DSBUFFERDESC)); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
463 dsbpridesc.dwSize = sizeof(DSBUFFERDESC); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
464 dsbpridesc.dwFlags = DSBCAPS_PRIMARYBUFFER; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
465 dsbpridesc.dwBufferBytes = 0; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
466 dsbpridesc.lpwfxFormat = NULL; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
467 |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
468 |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
469 // fill in the secondary sound buffer (=stream buffer) descriptor |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
470 memset(&dsbdesc, 0, sizeof(DSBUFFERDESC)); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
471 dsbdesc.dwSize = sizeof(DSBUFFERDESC); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
472 dsbdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 /** Better position accuracy */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
473 | DSBCAPS_GLOBALFOCUS /** Allows background playing */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
474 | DSBCAPS_CTRLVOLUME; /** volume control enabled */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
475 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
476 if (channels > 2) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
477 wformat.dwChannelMask = channel_mask[channels - 3]; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
478 wformat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
479 wformat.Samples.wValidBitsPerSample = wformat.Format.wBitsPerSample; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
480 // Needed for 5.1 on emu101k - shit soundblaster |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
481 dsbdesc.dwFlags |= DSBCAPS_LOCHARDWARE; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
482 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
483 wformat.Format.nAvgBytesPerSec = wformat.Format.nSamplesPerSec * wformat.Format.nBlockAlign; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
484 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
485 dsbdesc.dwBufferBytes = ao_data.buffersize; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
486 dsbdesc.lpwfxFormat = (WAVEFORMATEX *)&wformat; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
487 buffer_size = dsbdesc.dwBufferBytes; |
14555
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
488 write_offset = 0; |
14947
2f4f347bd5e4
get_space fix by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
14555
diff
changeset
|
489 min_free_space = wformat.Format.nBlockAlign; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
490 ao_data.outburst = wformat.Format.nBlockAlign * 512; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
491 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
492 // create primary buffer and set its format |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
493 |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
494 res = IDirectSound_CreateSoundBuffer( hds, &dsbpridesc, &hdspribuf, NULL ); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
495 if ( res != DS_OK ) { |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
496 UninitDirectSound(); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
497 mp_msg(MSGT_AO, MSGL_ERR,"ao_dsound: cannot create primary buffer (%s)\n", dserr2str(res)); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
498 return 0; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
499 } |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
500 res = IDirectSoundBuffer_SetFormat( hdspribuf, (WAVEFORMATEX *)&wformat ); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
501 if ( res != DS_OK ) mp_msg(MSGT_AO, MSGL_WARN,"ao_dsound: cannot set primary buffer format (%s), using standard setting (bad quality)", dserr2str(res)); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
502 |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
503 mp_msg(MSGT_AO, MSGL_V, "ao_dsound: primary buffer created\n"); |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
504 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
505 // now create the stream buffer |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
506 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
507 res = IDirectSound_CreateSoundBuffer(hds, &dsbdesc, &hdsbuf, NULL); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
508 if (res != DS_OK) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
509 if (dsbdesc.dwFlags & DSBCAPS_LOCHARDWARE) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
510 // Try without DSBCAPS_LOCHARDWARE |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
511 dsbdesc.dwFlags &= ~DSBCAPS_LOCHARDWARE; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
512 res = IDirectSound_CreateSoundBuffer(hds, &dsbdesc, &hdsbuf, NULL); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
513 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
514 if (res != DS_OK) { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
515 UninitDirectSound(); |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
516 mp_msg(MSGT_AO, MSGL_ERR, "ao_dsound: cannot create secondary (stream)buffer (%s)\n", dserr2str(res)); |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
517 return 0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
518 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
519 } |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
520 mp_msg(MSGT_AO, MSGL_V, "ao_dsound: secondary (stream)buffer created\n"); |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
521 return 1; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
522 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
523 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
524 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
525 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
526 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
527 \brief stop playing and empty buffers (for seeking/pause) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
528 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
529 static void reset(void) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
530 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
531 IDirectSoundBuffer_Stop(hdsbuf); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
532 // reset directsound buffer |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
533 IDirectSoundBuffer_SetCurrentPosition(hdsbuf, 0); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
534 write_offset=0; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
535 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
536 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
537 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
538 \brief stop playing, keep buffers (for pause) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
539 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
540 static void audio_pause(void) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
541 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
542 IDirectSoundBuffer_Stop(hdsbuf); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
543 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
544 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
545 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
546 \brief resume playing, after audio_pause() |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
547 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
548 static void audio_resume(void) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
549 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
550 IDirectSoundBuffer_Play(hdsbuf, 0, 0, DSBPLAY_LOOPING); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
551 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
552 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
553 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
554 \brief close audio device |
14555
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
555 \param immed stop playback immediately |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
556 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
557 static void uninit(int immed) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
558 { |
14555
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
559 if(immed)reset(); |
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
560 else{ |
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
561 DWORD status; |
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
562 IDirectSoundBuffer_Play(hdsbuf, 0, 0, 0); |
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
563 while(!IDirectSoundBuffer_GetStatus(hdsbuf,&status) && (status&DSBSTATUS_PLAYING)) |
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
564 usec_sleep(20000); |
6fb9eca97d41
support immed flag, always initialize write_offset, min_free_space doesn't seem to be required anymore after Florian Dietrichs patches
faust3
parents:
14479
diff
changeset
|
565 } |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
566 DestroyBuffer(); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
567 UninitDirectSound(); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
568 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
569 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
570 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
571 \brief find out how many bytes can be written into the audio buffer without |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
572 \return free space in bytes, has to return 0 if the buffer is almost full |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
573 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
574 static int get_space(void) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
575 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
576 int space; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
577 DWORD play_offset; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
578 IDirectSoundBuffer_GetCurrentPosition(hdsbuf,&play_offset,NULL); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
579 space=buffer_size-(write_offset-play_offset); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
580 // | | <-- const --> | | | |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
581 // buffer start play_cursor write_cursor write_offset buffer end |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
582 // play_cursor is the actual postion of the play cursor |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
583 // write_cursor is the position after which it is assumed to be save to write data |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
584 // write_offset is the postion where we actually write the data to |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
585 if(space > buffer_size)space -= buffer_size; // write_offset < play_offset |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
586 if(space < min_free_space)return 0; |
14947
2f4f347bd5e4
get_space fix by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
14555
diff
changeset
|
587 return space-min_free_space; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
588 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
589 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
590 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
591 \brief play 'len' bytes of 'data' |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
592 \param data pointer to the data to play |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
593 \param len size in bytes of the data buffer, gets rounded down to outburst*n |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
594 \param flags currently unused |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
595 \return number of played bytes |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
596 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
597 static int play(void* data, int len, int flags) |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
598 { |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
599 DWORD play_offset; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
600 int space; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
601 |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
602 // make sure we have enough space to write data |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
603 IDirectSoundBuffer_GetCurrentPosition(hdsbuf,&play_offset,NULL); |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
604 space=buffer_size-(write_offset-play_offset); |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
605 if(space > buffer_size)space -= buffer_size; // write_offset < play_offset |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
606 if(space < len) len = space; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
607 |
20250
7cfd3a04d537
Implement AOPLAY_FINAL_CHUNK support for dshow and win32 out.
reimar
parents:
19614
diff
changeset
|
608 if (!(flags & AOPLAY_FINAL_CHUNK)) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
609 len = (len / ao_data.outburst) * ao_data.outburst; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
610 return write_buffer(data, len); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
611 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
612 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
613 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
614 \brief get the delay between the first and last sample in the buffer |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
615 \return delay in seconds |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
616 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
617 static float get_delay(void) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
618 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
619 DWORD play_offset; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
620 int space; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
621 IDirectSoundBuffer_GetCurrentPosition(hdsbuf,&play_offset,NULL); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
622 space=play_offset-write_offset; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
623 if(space <= 0)space += buffer_size; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
624 return (float)(buffer_size - space) / (float)ao_data.bps; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
625 } |