[vlc-commits] wasapi: mark more desktop-only code
Rémi Denis-Courmont
git at videolan.org
Wed Jan 29 17:47:24 CET 2014
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Jan 28 20:20:44 2014 +0200| [206f86289954cc2e0078328e0e4a90952e9b461c] | committer: Rémi Denis-Courmont
wasapi: mark more desktop-only code
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=206f86289954cc2e0078328e0e4a90952e9b461c
---
modules/audio_output/mmdevice.c | 103 ++++++++++++++++-----------------------
1 file changed, 42 insertions(+), 61 deletions(-)
diff --git a/modules/audio_output/mmdevice.c b/modules/audio_output/mmdevice.c
index 285e725..e2ace47 100644
--- a/modules/audio_output/mmdevice.c
+++ b/modules/audio_output/mmdevice.c
@@ -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);
}
More information about the vlc-commits
mailing list