Mercurial > mplayer.hg
annotate libao2/ao_dsound.c @ 33874:e1bec41397bb
Don't let VCD track number and guiInfo.Track differ.
Internally use guiInfo.Track for the track without offset now and
externally speak of "titles" to the user. The titles are given minus
the VCD metadata track. (The dynamic label variable $t isn't affected.)
This also fixes some strange behavior when using the prev/next buttons
when no VCD could be loaded.
Rename MSGTR_VCDTrack MSGTR_Title to reflect the change.
author | ib |
---|---|
date | Wed, 10 Aug 2011 14:48:49 +0000 |
parents | ed1000201cd0 |
children | 539bfa51eb72 |
rev | line source |
---|---|
26743
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
1 /* |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
2 * Windows DirectSound interface |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
3 * |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
4 * 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
|
5 * |
26743
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
6 * This file is part of MPlayer. |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
7 * |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
8 * MPlayer is free software; you can redistribute it and/or modify |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
9 * 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
|
10 * 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
|
11 * (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
|
12 * |
26743
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
13 * MPlayer is distributed in the hope that it will be useful, |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
14 * 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
|
15 * 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
|
16 * 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
|
17 * |
26743
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
18 * You should have received a copy of the GNU General Public License along |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
19 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
21 */ |
0f42fb42843c
Use standard license headers with standard formatting.
diego
parents:
23458
diff
changeset
|
22 |
13460
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 \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
|
25 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
26 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
27 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
28 #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
|
29 #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
|
30 #include <windows.h> |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
31 #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
|
32 #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
|
33 #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
|
34 |
14479 | 35 #include "config.h" |
14245 | 36 #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
|
37 #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
|
38 #include "audio_out_internal.h" |
14123 | 39 #include "mp_msg.h" |
40 #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
|
41 #include "osdep/timer.h" |
14398 | 42 #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
|
43 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
44 |
28823 | 45 static const ao_info_t info = |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
46 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
47 "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
|
48 "dsound", |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
49 "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
|
50 "" |
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 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
|
54 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
55 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
56 \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
|
57 */ |
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_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
|
59 #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
|
60 #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
|
61 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
62 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
|
63 |
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_LEFT 0x1 |
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_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
|
66 #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
|
67 #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
|
68 #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
|
69 #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
|
70 #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
|
71 #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
|
72 #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
|
73 #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
|
74 #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
|
75 #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
|
76 #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
|
77 #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
|
78 #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
|
79 #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
|
80 #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
|
81 #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
|
82 #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
|
83 |
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_HEADPHONE 0x00000001 |
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_MONO 0x00000002 |
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_QUAD 0x00000003 |
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_STEREO 0x00000004 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
88 #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
|
89 #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
|
90 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
91 #ifndef _WAVEFORMATEXTENSIBLE_ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
92 typedef struct { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
93 WAVEFORMATEX Format; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
94 union { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
95 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
|
96 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
|
97 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
|
98 } Samples; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
99 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
|
100 /* 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
|
101 GUID SubFormat; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
102 } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; |
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 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
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) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
116 static int buffer_size = 0; ///size in bytes of the direct sound buffer |
13460
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 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
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){ | |
23458
973e53dc7df5
Do not use fast_memcpy for small size copy, esp. when the size is constant
reimar
parents:
23457
diff
changeset
|
202 memcpy(&device,guid,sizeof(GUID)); |
14398 | 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); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
221 HRESULT (WINAPI *OurDirectSoundEnumerate)(LPDSENUMCALLBACKA, LPVOID); |
14398 | 222 int device_index=0; |
29586
2eff450157cd
The suboption parser now takes a const options list, so mark them all const.
reimar
parents:
29263
diff
changeset
|
223 const opt_t subopts[] = { |
14398 | 224 {"device", OPT_ARG_INT, &device_num,NULL}, |
225 {NULL} | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
226 }; |
14398 | 227 if (subopt_parse(ao_subdevice, subopts) != 0) { |
228 print_help(); | |
229 return 0; | |
230 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
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 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
245 |
14398 | 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; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
310 LPVOID lpvPtr1; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
311 DWORD dwBytes1; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
312 LPVOID lpvPtr2; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
313 DWORD dwBytes2; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
314 |
13460
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 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
316 res = IDirectSoundBuffer_Lock(hdsbuf,write_offset, len, &lpvPtr1, &dwBytes1, &lpvPtr2, &dwBytes2, 0); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
317 // If the buffer was lost, restore and retry lock. |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
318 if (DSERR_BUFFERLOST == res) |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
319 { |
13460
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 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
323 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
324 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
325 if (SUCCEEDED(res)) |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
326 { |
30240 | 327 if( (ao_data.channels == 6) && !AF_FORMAT_IS_AC3(ao_data.format) ) { |
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++ ) { |
23458
973e53dc7df5
Do not use fast_memcpy for small size copy, esp. when the size is constant
reimar
parents:
23457
diff
changeset
|
340 memcpy(lpvPtr1+(i*ao_data.channels*sampsize)+(chantable[j]*sampsize),data+(i*ao_data.channels*sampsize)+(j*sampsize),sampsize); |
13674
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++ ) { |
23458
973e53dc7df5
Do not use fast_memcpy for small size copy, esp. when the size is constant
reimar
parents:
23457
diff
changeset
|
347 memcpy(lpvPtr2+(i*ao_data.channels*sampsize)+(chantable[j]*sampsize),data+dwBytes1+(i*ao_data.channels*sampsize)+(j*sampsize),sampsize); |
13674
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 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
354 // Write to pointers without reordering. |
23457
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
20250
diff
changeset
|
355 fast_memcpy(lpvPtr1,data,dwBytes1); |
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
20250
diff
changeset
|
356 if (NULL != lpvPtr2 )fast_memcpy(lpvPtr2,data+dwBytes1,dwBytes2); |
13460
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 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
360 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
361 // Release the data back to DirectSound. |
13460
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); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
363 if (SUCCEEDED(res)) |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
364 { |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
365 // Success. |
13460
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 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
371 return dwBytes1+dwBytes2; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
372 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
373 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
374 // Lock, Unlock, or Restore failed. |
13460
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 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
408 /** |
13460
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 |
29826 | 426 //check if the channel count and format is supported in general |
427 if (channels > 6) { | |
428 UninitDirectSound(); | |
429 mp_msg(MSGT_AO, MSGL_ERR, "ao_dsound: 8 channel audio not yet supported\n"); | |
430 return 0; | |
431 } | |
30241
02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents:
30240
diff
changeset
|
432 |
02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents:
30240
diff
changeset
|
433 if (AF_FORMAT_IS_AC3(format)) |
02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents:
30240
diff
changeset
|
434 format = AF_FORMAT_AC3_NE; |
14135 | 435 switch(format){ |
30241
02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
reimar
parents:
30240
diff
changeset
|
436 case AF_FORMAT_AC3_NE: |
14245 | 437 case AF_FORMAT_S24_LE: |
438 case AF_FORMAT_S16_LE: | |
28815
ce24a9f06ccb
The 8 bit per sample formats are unsigned on Windows, fixes playback with
reimar
parents:
26743
diff
changeset
|
439 case AF_FORMAT_U8: |
14135 | 440 break; |
441 default: | |
14264 | 442 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 | 443 format=AF_FORMAT_S16_LE; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
444 } |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
445 //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
|
446 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
|
447 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
|
448 ao_data.format = format; |
14249 | 449 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
|
450 if(ao_data.buffersize==-1) ao_data.buffersize = ao_data.bps; // space for 1 sec |
14264 | 451 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
|
452 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
|
453 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
454 //fill waveformatex |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
455 ZeroMemory(&wformat, sizeof(WAVEFORMATEXTENSIBLE)); |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
456 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
|
457 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
|
458 wformat.Format.nSamplesPerSec = rate; |
30240 | 459 if (AF_FORMAT_IS_AC3(format)) { |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
460 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
|
461 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
|
462 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
|
463 } else { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
464 wformat.Format.wFormatTag = (channels > 2) ? WAVE_FORMAT_EXTENSIBLE : WAVE_FORMAT_PCM; |
14249 | 465 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
|
466 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
|
467 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
468 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
469 // fill in primary sound buffer descriptor |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
470 memset(&dsbpridesc, 0, sizeof(DSBUFFERDESC)); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
471 dsbpridesc.dwSize = sizeof(DSBUFFERDESC); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
472 dsbpridesc.dwFlags = DSBCAPS_PRIMARYBUFFER; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
473 dsbpridesc.dwBufferBytes = 0; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
474 dsbpridesc.lpwfxFormat = NULL; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
475 |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
476 |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
477 // 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
|
478 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
|
479 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
|
480 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
|
481 | 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
|
482 | 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
|
483 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
484 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
|
485 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
|
486 wformat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
487 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
|
488 // 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
|
489 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
|
490 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
491 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
|
492 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
493 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
|
494 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
|
495 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
|
496 write_offset = 0; |
14947
2f4f347bd5e4
get_space fix by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
14555
diff
changeset
|
497 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
|
498 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
|
499 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
500 // create primary buffer and set its format |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
501 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
502 res = IDirectSound_CreateSoundBuffer( hds, &dsbpridesc, &hdspribuf, NULL ); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
503 if ( res != DS_OK ) { |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
504 UninitDirectSound(); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
505 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
|
506 return 0; |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
507 } |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
508 res = IDirectSoundBuffer_SetFormat( hdspribuf, (WAVEFORMATEX *)&wformat ); |
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
509 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
|
510 |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
511 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
|
512 |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
513 // 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
|
514 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
515 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
|
516 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
|
517 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
|
518 // 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
|
519 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
|
520 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
|
521 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
522 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
|
523 UninitDirectSound(); |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
524 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
|
525 return 0; |
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 } |
13640
a7d080bc610f
ao dsound improvements patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13460
diff
changeset
|
528 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
|
529 return 1; |
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 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
532 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
533 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
534 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
535 \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
|
536 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
537 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
|
538 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
539 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
|
540 // 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
|
541 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
|
542 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
|
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 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
|
547 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
548 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
|
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_Stop(hdsbuf); |
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 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
|
555 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
556 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
|
557 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
558 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
|
559 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
560 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
561 /** |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
562 \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
|
563 \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
|
564 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
565 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
|
566 { |
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
|
567 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
|
568 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
|
569 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
|
570 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
|
571 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
|
572 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
|
573 } |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
574 DestroyBuffer(); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
575 UninitDirectSound(); |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
576 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
577 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
578 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
579 \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
|
580 \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
|
581 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
582 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
|
583 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
584 int space; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
585 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
|
586 IDirectSoundBuffer_GetCurrentPosition(hdsbuf,&play_offset,NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
587 space=buffer_size-(write_offset-play_offset); |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
588 // | | <-- const --> | | | |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
589 // 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
|
590 // 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
|
591 // 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
|
592 // 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
|
593 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
|
594 if(space < min_free_space)return 0; |
14947
2f4f347bd5e4
get_space fix by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
14555
diff
changeset
|
595 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
|
596 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
597 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
598 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
599 \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
|
600 \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
|
601 \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
|
602 \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
|
603 \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
|
604 */ |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
605 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
|
606 { |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
607 DWORD play_offset; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
608 int space; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
609 |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
610 // 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
|
611 IDirectSoundBuffer_GetCurrentPosition(hdsbuf,&play_offset,NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
612 space=buffer_size-(write_offset-play_offset); |
13674
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
613 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
|
614 if(space < len) len = space; |
b7322244e53c
channel reorder patch by Florian Dietrich <flodt8 at yahoo.de>
faust3
parents:
13640
diff
changeset
|
615 |
20250
7cfd3a04d537
Implement AOPLAY_FINAL_CHUNK support for dshow and win32 out.
reimar
parents:
19614
diff
changeset
|
616 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
|
617 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
|
618 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
|
619 } |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
620 |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
621 /** |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
622 \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
|
623 \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
|
624 */ |
18915
99e20a22d5d0
modifies function declarations without parameters from ()
reynaldo
parents:
16972
diff
changeset
|
625 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
|
626 { |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
627 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
|
628 int space; |
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
629 IDirectSoundBuffer_GetCurrentPosition(hdsbuf,&play_offset,NULL); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28823
diff
changeset
|
630 space=play_offset-write_offset; |
13460
70d8f1975fc8
directsound audio output plugin, patch by Gabor Szecsi <deje at miki.hu> some minor modifications by me
faust3
parents:
diff
changeset
|
631 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
|
632 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
|
633 } |