Commit 5d26d0b2 authored by Anton Romanov's avatar Anton Romanov Committed by Alexandre Julliard

wmp: IWMPSettings implement put/get volume.

parent 6e2c6118
...@@ -958,15 +958,27 @@ static HRESULT WINAPI WMPSettings_put_balance(IWMPSettings *iface, LONG v) ...@@ -958,15 +958,27 @@ static HRESULT WINAPI WMPSettings_put_balance(IWMPSettings *iface, LONG v)
static HRESULT WINAPI WMPSettings_get_volume(IWMPSettings *iface, LONG *p) static HRESULT WINAPI WMPSettings_get_volume(IWMPSettings *iface, LONG *p)
{ {
WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); WindowsMediaPlayer *This = impl_from_IWMPSettings(iface);
FIXME("(%p)->(%p)\n", This, p); TRACE("(%p)->(%p)\n", This, p);
return E_NOTIMPL; if (!p)
return E_POINTER;
*p = This->volume;
return S_OK;
} }
static HRESULT WINAPI WMPSettings_put_volume(IWMPSettings *iface, LONG v) static HRESULT WINAPI WMPSettings_put_volume(IWMPSettings *iface, LONG v)
{ {
HRESULT hres;
WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); WindowsMediaPlayer *This = impl_from_IWMPSettings(iface);
FIXME("(%p)->(%d)\n", This, v); TRACE("(%p)->(%d)\n", This, v);
return E_NOTIMPL; This->volume = v;
if (!This->filter_graph) {
hres = S_OK;
} else {
/* IBasicAudio - [-10000, 0], wmp - [0, 100] */
v = 10000 * v / 100 - 10000;
hres = IBasicAudio_put_Volume(This->basic_audio, v);
}
return hres;
} }
static HRESULT WINAPI WMPSettings_getMode(IWMPSettings *iface, BSTR mode, VARIANT_BOOL *p) static HRESULT WINAPI WMPSettings_getMode(IWMPSettings *iface, BSTR mode, VARIANT_BOOL *p)
...@@ -1484,6 +1496,10 @@ static HRESULT WINAPI WMPControls_play(IWMPControls *iface) ...@@ -1484,6 +1496,10 @@ static HRESULT WINAPI WMPControls_play(IWMPControls *iface)
IMediaEventEx_Release(media_event_ex); IMediaEventEx_Release(media_event_ex);
} }
} }
if (SUCCEEDED(hres))
hres = IGraphBuilder_QueryInterface(This->filter_graph, &IID_IBasicAudio, (void**)&This->basic_audio);
if (SUCCEEDED(hres))
hres = IWMPSettings_put_volume(&This->IWMPSettings_iface, This->volume);
} }
update_state(This, DISPID_WMPCOREEVENT_PLAYSTATECHANGE, wmppsTransitioning); update_state(This, DISPID_WMPCOREEVENT_PLAYSTATECHANGE, wmppsTransitioning);
...@@ -1525,11 +1541,15 @@ static HRESULT WINAPI WMPControls_stop(IWMPControls *iface) ...@@ -1525,11 +1541,15 @@ static HRESULT WINAPI WMPControls_stop(IWMPControls *iface)
if (This->media_seeking) { if (This->media_seeking) {
IMediaSeeking_Release(This->media_seeking); IMediaSeeking_Release(This->media_seeking);
} }
if (This->basic_audio) {
IBasicAudio_Release(This->basic_audio);
}
IGraphBuilder_Release(This->filter_graph); IGraphBuilder_Release(This->filter_graph);
This->filter_graph = NULL; This->filter_graph = NULL;
This->media_control = NULL; This->media_control = NULL;
This->media_event = NULL; This->media_event = NULL;
This->media_seeking = NULL; This->media_seeking = NULL;
This->basic_audio = NULL;
update_state(This, DISPID_WMPCOREEVENT_OPENSTATECHANGE, wmposPlaylistOpenNoMedia); update_state(This, DISPID_WMPCOREEVENT_OPENSTATECHANGE, wmposPlaylistOpenNoMedia);
update_state(This, DISPID_WMPCOREEVENT_PLAYSTATECHANGE, wmppsStopped); update_state(This, DISPID_WMPCOREEVENT_PLAYSTATECHANGE, wmppsStopped);
...@@ -1983,6 +2003,7 @@ BOOL init_player(WindowsMediaPlayer *wmp) ...@@ -1983,6 +2003,7 @@ BOOL init_player(WindowsMediaPlayer *wmp)
wmp->invoke_urls = VARIANT_TRUE; wmp->invoke_urls = VARIANT_TRUE;
wmp->auto_start = VARIANT_TRUE; wmp->auto_start = VARIANT_TRUE;
wmp->volume = 100;
return TRUE; return TRUE;
} }
......
...@@ -338,7 +338,6 @@ static BOOL test_wmp(void) ...@@ -338,7 +338,6 @@ static BOOL test_wmp(void)
hres = IWMPSettings_put_autoStart(settings, VARIANT_FALSE); hres = IWMPSettings_put_autoStart(settings, VARIANT_FALSE);
ok(hres == S_OK, "Could not put autoStart in IWMPSettings: %08x\n", hres); ok(hres == S_OK, "Could not put autoStart in IWMPSettings: %08x\n", hres);
IWMPSettings_Release(settings);
controls = NULL; controls = NULL;
hres = IWMPPlayer4_get_controls(player4, &controls); hres = IWMPPlayer4_get_controls(player4, &controls);
...@@ -352,6 +351,12 @@ static BOOL test_wmp(void) ...@@ -352,6 +351,12 @@ static BOOL test_wmp(void)
hres = IWMPControls_play(controls); hres = IWMPControls_play(controls);
ok(hres == NS_S_WMPCORE_COMMAND_NOT_AVAILABLE, "IWMPControls_play is available: %08x\n", hres); ok(hres == NS_S_WMPCORE_COMMAND_NOT_AVAILABLE, "IWMPControls_play is available: %08x\n", hres);
hres = IWMPSettings_put_volume(settings, 36);
ok(hres == S_OK, "IWMPSettings_put_volume failed: %08x\n", hres);
hres = IWMPSettings_get_volume(settings, &progress);
ok(hres == S_OK, "IWMPSettings_get_volume failed: %08x\n", hres);
ok(progress == 36, "unexpected value: %d\n", progress);
filename = SysAllocString(load_resource(mp3file)); filename = SysAllocString(load_resource(mp3file));
SET_EXPECT(OPENSTATE, wmposPlaylistChanging); SET_EXPECT(OPENSTATE, wmposPlaylistChanging);
...@@ -460,7 +465,17 @@ playback_skip: ...@@ -460,7 +465,17 @@ playback_skip:
hres = IConnectionPoint_Unadvise(point, dw); hres = IConnectionPoint_Unadvise(point, dw);
ok(hres == S_OK, "Unadvise failed: %08x\n", hres); ok(hres == S_OK, "Unadvise failed: %08x\n", hres);
hres = IWMPSettings_get_volume(settings, &progress);
ok(hres == S_OK, "IWMPSettings_get_volume failed: %08x\n", hres);
ok(progress == 36, "unexpected value: %d\n", progress);
hres = IWMPSettings_put_volume(settings, 99);
ok(hres == S_OK, "IWMPSettings_put_volume failed: %08x\n", hres);
hres = IWMPSettings_get_volume(settings, &progress);
ok(hres == S_OK, "IWMPSettings_get_volume failed: %08x\n", hres);
ok(progress == 99, "unexpected value: %d\n", progress);
IConnectionPoint_Release(point); IConnectionPoint_Release(point);
IWMPSettings_Release(settings);
IWMPControls_Release(controls); IWMPControls_Release(controls);
IWMPPlayer4_Release(player4); IWMPPlayer4_Release(player4);
IOleObject_Release(oleobj); IOleObject_Release(oleobj);
......
...@@ -69,6 +69,7 @@ struct WindowsMediaPlayer { ...@@ -69,6 +69,7 @@ struct WindowsMediaPlayer {
VARIANT_BOOL auto_start; VARIANT_BOOL auto_start;
VARIANT_BOOL invoke_urls; VARIANT_BOOL invoke_urls;
VARIANT_BOOL enable_error_dialogs; VARIANT_BOOL enable_error_dialogs;
LONG volume;
ConnectionPoint *wmpocx; ConnectionPoint *wmpocx;
...@@ -79,6 +80,7 @@ struct WindowsMediaPlayer { ...@@ -79,6 +80,7 @@ struct WindowsMediaPlayer {
IMediaControl* media_control; IMediaControl* media_control;
IMediaEvent* media_event; IMediaEvent* media_event;
IMediaSeeking* media_seeking; IMediaSeeking* media_seeking;
IBasicAudio* basic_audio;
/* Async event notification */ /* Async event notification */
HWND msg_window; HWND msg_window;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment