Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
206f8628
Commit
206f8628
authored
Jan 28, 2014
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wasapi: mark more desktop-only code
parent
9f7bfd93
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
42 additions
and
61 deletions
+42
-61
modules/audio_output/mmdevice.c
modules/audio_output/mmdevice.c
+42
-61
No files found.
modules/audio_output/mmdevice.c
View file @
206f8628
...
...
@@ -71,24 +71,25 @@ static void LeaveMTA(void)
struct
aout_sys_t
{
audio_output_t
*
aout
;
aout_stream_t
*
stream
;
/**< Underlying audio output stream */
IMMDevice
*
dev
;
/**< Selected output device, NULL if none */
ISimpleAudioVolume
*
volume
;
/**< Volume setter */
#if !VLC_WINSTORE_APP
audio_output_t
*
aout
;
IMMDeviceEnumerator
*
it
;
/**< Device enumerator, NULL when exiting */
/*TODO: IMMNotificationClient*/
IMMDevice
*
dev
;
/**< Selected output device, NULL if none */
IAudioSessionManager
*
manager
;
/**< Session for the output device */
ISimpleAudioVolume
*
volume
;
/**< Volume setter */
struct
IAudioSessionEvents
session_events
;
LONG
refs
;
HANDLE
device_changed
;
/**< Event to reset thread */
HANDLE
device_ready
;
/**< Event when thread is reset */
vlc_thread_t
thread
;
/**< Thread for audio session control */
#else
void
*
client
;
#endif
};
...
...
@@ -170,6 +171,7 @@ static void Flush(audio_output_t *aout, bool wait)
}
#if !VLC_WINSTORE_APP
static
int
VolumeSet
(
audio_output_t
*
aout
,
float
vol
)
{
ISimpleAudioVolume
*
volume
=
aout
->
sys
->
volume
;
...
...
@@ -204,7 +206,6 @@ static int MuteSet(audio_output_t *aout, bool mute)
return
FAILED
(
hr
)
?
-
1
:
0
;
}
#if !VLC_WINSTORE_APP
/*** Audio session events ***/
static
inline
aout_sys_t
*
vlc_AudioSessionEvents_sys
(
IAudioSessionEvents
*
this
)
{
...
...
@@ -628,50 +629,6 @@ static void CloseDevice(audio_output_t *aout)
sys
->
dev
=
NULL
;
}
/**
* Callback for aout_stream_t to create a stream on the device.
* This can instantiate an IAudioClient or IDirectSound(8) object.
*/
static
HRESULT
ActivateDevice
(
void
*
opaque
,
REFIID
iid
,
PROPVARIANT
*
actparms
,
void
**
restrict
pv
)
{
IMMDevice
*
dev
=
opaque
;
return
IMMDevice_Activate
(
dev
,
iid
,
CLSCTX_ALL
,
actparms
,
pv
);
}
#else
/* VLC_WINSTORE_APP */
static
HRESULT
OpenDevice
(
audio_output_t
*
aout
,
const
char
*
devid
)
{
aout_sys_t
*
sys
=
aout
->
sys
;
assert
(
sys
->
dev
==
NULL
);
(
void
)
devid
;
assert
(
!
devid
);
sys
->
dev
=
var_InheritAddress
(
aout
,
"mmdevice-audioclient"
);
return
S_OK
;
}
static
void
CloseDevice
(
audio_output_t
*
aout
)
{
aout_sys_t
*
sys
=
aout
->
sys
;
assert
(
sys
->
dev
!=
NULL
);
free
(
sys
->
dev
);
sys
->
dev
=
NULL
;
}
static
HRESULT
ActivateDevice
(
void
*
opaque
,
REFIID
iid
,
PROPVARIANT
*
actparms
,
void
**
restrict
pv
)
{
IMMDevice
*
dev
=
opaque
;
(
void
)
iid
;
(
void
)
actparms
;
*
pv
=
dev
;
return
S_OK
;
}
#endif
/* !VLC_WINSTORE_APP */
static
int
DeviceSelect
(
audio_output_t
*
aout
,
const
char
*
id
)
{
aout_sys_t
*
sys
=
aout
->
sys
;
...
...
@@ -694,15 +651,39 @@ static int DeviceSelect(audio_output_t *aout, const char *id)
return
FAILED
(
hr
)
?
-
1
:
0
;
}
/**
* Callback for aout_stream_t to create a stream on the device.
* This can instantiate an IAudioClient or IDirectSound(8) object.
*/
static
HRESULT
ActivateDevice
(
void
*
opaque
,
REFIID
iid
,
PROPVARIANT
*
actparms
,
void
**
restrict
pv
)
{
IMMDevice
*
dev
=
opaque
;
return
IMMDevice_Activate
(
dev
,
iid
,
CLSCTX_ALL
,
actparms
,
pv
);
}
#else
/* VLC_WINSTORE_APP */
static
HRESULT
ActivateDevice
(
void
*
opaque
,
REFIID
iid
,
PROPVARIANT
*
actparms
,
void
**
restrict
pv
)
{
aout_sys_t
*
sys
=
opaque
;
(
void
)
iid
;
(
void
)
actparms
;
*
pv
=
sys
->
client
;
return
S_OK
;
}
#endif
/* VLC_WINSTORE_APP */
static
int
Start
(
audio_output_t
*
aout
,
audio_sample_format_t
*
restrict
fmt
)
{
aout_sys_t
*
sys
=
aout
->
sys
;
HRESULT
hr
;
assert
(
sys
->
stream
==
NULL
);
#if !VLC_WINSTORE_APP
/* Open the default device if required (to deal with restarts) */
if
(
sys
->
dev
==
NULL
&&
FAILED
(
DeviceSelect
(
aout
,
NULL
)))
return
-
1
;
#endif
aout_stream_t
*
s
=
vlc_object_create
(
aout
,
sizeof
(
*
s
));
if
(
unlikely
(
s
==
NULL
))
...
...
@@ -749,11 +730,11 @@ static int Open(vlc_object_t *obj)
return
VLC_ENOMEM
;
aout
->
sys
=
sys
;
sys
->
aout
=
aout
;
sys
->
stream
=
NULL
;
sys
->
dev
=
NULL
;
#if !VLC_WINSTORE_APP
sys
->
aout
=
aout
;
sys
->
it
=
NULL
;
sys
->
dev
=
NULL
;
sys
->
manager
=
NULL
;
sys
->
session_events
.
lpVtbl
=
&
vlc_AudioSessionEvents
;
sys
->
refs
=
1
;
...
...
@@ -780,23 +761,22 @@ static int Open(vlc_object_t *obj)
if
(
vlc_clone
(
&
sys
->
thread
,
MMThread
,
aout
,
VLC_THREAD_PRIORITY_LOW
))
goto
error
;
WaitForSingleObject
(
sys
->
device_ready
,
INFINITE
);
#endif
DeviceSelect
(
aout
,
NULL
);
/* Get a device to start with */
LeaveMTA
();
/* leave MTA after thread has entered MTA */
#else
sys
->
client
=
var_InheritAddress
(
aout
,
"mmdevice-audioclient"
);
assert
(
sys
->
client
!=
NULL
);
#endif
aout
->
start
=
Start
;
aout
->
stop
=
Stop
;
aout
->
time_get
=
TimeGet
;
aout
->
play
=
Play
;
aout
->
pause
=
Pause
;
aout
->
flush
=
Flush
;
#if !VLC_WINSTORE_APP
aout
->
volume_set
=
VolumeSet
;
aout
->
mute_set
=
MuteSet
;
#if VLC_WINSTORE_APP
aout
->
device_select
=
NULL
;
return
VLC_SUCCESS
;
#else
aout
->
device_select
=
DeviceSelect
;
DevicesEnum
(
aout
);
return
VLC_SUCCESS
;
...
...
@@ -813,6 +793,8 @@ error:
CloseHandle
(
sys
->
device_changed
);
free
(
sys
);
return
VLC_EGENERIC
;
#else
return
VLC_SUCCESS
;
#endif
}
...
...
@@ -837,8 +819,7 @@ static void Close(vlc_object_t *obj)
CloseHandle
(
sys
->
device_ready
);
CloseHandle
(
sys
->
device_changed
);
#else
if
(
sys
->
dev
!=
NULL
)
CloseDevice
(
aout
);
free
(
sys
->
client
);
#endif
free
(
sys
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment