Signed-off-by: Anton Romanov theli.ua@gmail.com --- Changed test media file that works more consistently across all windows VMs as far as duration goes. Hopefully this'll help different versions of gstreamer as well.
dlls/wmp/player.c | 65 +++++++++++++++++++++++++++++++++------- dlls/wmp/tests/media.c | 38 +++++++++++++++++++++++ dlls/wmp/tests/rsrc.rc | 2 +- dlls/wmp/tests/test.mp3 | Bin 240333 -> 240333 bytes dlls/wmp/wmp_private.h | 3 ++ 5 files changed, 97 insertions(+), 11 deletions(-)
diff --git a/dlls/wmp/player.c b/dlls/wmp/player.c index f4ce62a447..8448916a80 100644 --- a/dlls/wmp/player.c +++ b/dlls/wmp/player.c @@ -1396,8 +1396,21 @@ static HRESULT WINAPI WMPControls_Invoke(IWMPControls *iface, DISPID dispIdMembe static HRESULT WINAPI WMPControls_get_isAvailable(IWMPControls *iface, BSTR bstrItem, VARIANT_BOOL *pIsAvailable) { WindowsMediaPlayer *This = impl_from_IWMPControls(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(bstrItem)); - return E_NOTIMPL; + static const WCHAR currentPosition[] = {'c','u','r','r','e','n','t','P','o','s','i','t','i','o','n',0}; + TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrItem), pIsAvailable); + if (!This->filter_graph) { + *pIsAvailable = VARIANT_FALSE; + } else if (strcmpW(currentPosition, bstrItem) == 0) { + DWORD capabilities; + IMediaSeeking_GetCapabilities(This->media_seeking, &capabilities); + *pIsAvailable = (capabilities & AM_SEEKING_CanSeekAbsolute) ? + VARIANT_TRUE : VARIANT_FALSE; + } else { + FIXME("%s not implemented\n", debugstr_w(bstrItem)); + return E_NOTIMPL; + } + + return S_OK; }
static HRESULT WINAPI WMPControls_play(IWMPControls *iface) @@ -1428,11 +1441,16 @@ static HRESULT WINAPI WMPControls_play(IWMPControls *iface)
if (SUCCEEDED(hres)) hres = IGraphBuilder_RenderFile(This->filter_graph, media->url, NULL); + if (SUCCEEDED(hres)) + update_state(This, DISPID_WMPCOREEVENT_OPENSTATECHANGE, wmposMediaOpen); if (SUCCEEDED(hres)) hres = IGraphBuilder_QueryInterface(This->filter_graph, &IID_IMediaControl, (void**)&This->media_control); if (SUCCEEDED(hres)) - update_state(This, DISPID_WMPCOREEVENT_OPENSTATECHANGE, wmposMediaOpen); + hres = IGraphBuilder_QueryInterface(This->filter_graph, &IID_IMediaSeeking, + (void**)&This->media_seeking); + if (SUCCEEDED(hres)) + hres = IMediaSeeking_SetTimeFormat(This->media_seeking, &TIME_FORMAT_MEDIA_TIME); if (SUCCEEDED(hres)) hres = IGraphBuilder_QueryInterface(This->filter_graph, &IID_IMediaEvent, (void**)&This->media_event); @@ -1459,7 +1477,10 @@ static HRESULT WINAPI WMPControls_play(IWMPControls *iface) }
if (SUCCEEDED(hres)) { + LONGLONG duration; update_state(This, DISPID_WMPCOREEVENT_PLAYSTATECHANGE, wmppsPlaying); + if (SUCCEEDED(IMediaSeeking_GetDuration(This->media_seeking, &duration))) + media->duration = (DOUBLE)duration / 10000000.0f; } else { update_state(This, DISPID_WMPCOREEVENT_PLAYSTATECHANGE, wmppsUndefined); } @@ -1482,11 +1503,14 @@ static HRESULT WINAPI WMPControls_stop(IWMPControls *iface) if (This->media_event) { IMediaEvent_Release(This->media_event); } - + if (This->media_seeking) { + IMediaSeeking_Release(This->media_seeking); + } IGraphBuilder_Release(This->filter_graph); This->filter_graph = NULL; This->media_control = NULL; This->media_event = NULL; + This->media_seeking = NULL;
update_state(This, DISPID_WMPCOREEVENT_OPENSTATECHANGE, wmposPlaylistOpenNoMedia); update_state(This, DISPID_WMPCOREEVENT_PLAYSTATECHANGE, wmppsStopped); @@ -1517,15 +1541,33 @@ static HRESULT WINAPI WMPControls_fastReverse(IWMPControls *iface) static HRESULT WINAPI WMPControls_get_currentPosition(IWMPControls *iface, DOUBLE *pdCurrentPosition) { WindowsMediaPlayer *This = impl_from_IWMPControls(iface); - FIXME("(%p)->(%p)\n", This, pdCurrentPosition); - return E_NOTIMPL; + HRESULT hres; + LONGLONG currentPosition; + + TRACE("(%p)->(%p)\n", This, pdCurrentPosition); + if (!This->media_seeking) + return S_FALSE; + + hres = IMediaSeeking_GetCurrentPosition(This->media_seeking, ¤tPosition); + *pdCurrentPosition = (DOUBLE) currentPosition / 10000000.0f; + TRACE("hres: %d, pos: %f\n", hres, *pdCurrentPosition); + return hres; }
static HRESULT WINAPI WMPControls_put_currentPosition(IWMPControls *iface, DOUBLE dCurrentPosition) { + LONGLONG Current; + HRESULT hres; WindowsMediaPlayer *This = impl_from_IWMPControls(iface); - FIXME("(%p)->(%f)\n", This, dCurrentPosition); - return E_NOTIMPL; + TRACE("(%p)->(%f)\n", This, dCurrentPosition); + if (!This->media_seeking) + return S_FALSE; + + Current = 10000000 * dCurrentPosition; + hres = IMediaSeeking_SetPositions(This->media_seeking, &Current, + AM_SEEKING_AbsolutePositioning, NULL, AM_SEEKING_NoPositioning); + + return hres; }
static HRESULT WINAPI WMPControls_get_currentPositionString(IWMPControls *iface, BSTR *pbstrCurrentPosition) @@ -1762,9 +1804,12 @@ static HRESULT WINAPI WMPMedia_getMarkerName(IWMPMedia *iface, LONG MarkerNum, B
static HRESULT WINAPI WMPMedia_get_duration(IWMPMedia *iface, DOUBLE *pDuration) { + /* MSDN: If this property is used with a media item other than the one + * specified in Player.currentMedia, it may not contain a valid value. */ WMPMedia *This = impl_from_IWMPMedia(iface); - FIXME("(%p)->(%p)\n", This, pDuration); - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", This, pDuration); + *pDuration = This->duration; + return S_OK; }
static HRESULT WINAPI WMPMedia_get_durationString(IWMPMedia *iface, BSTR *pbstrDuration) diff --git a/dlls/wmp/tests/media.c b/dlls/wmp/tests/media.c index c2cd1cf941..e327c1c213 100644 --- a/dlls/wmp/tests/media.c +++ b/dlls/wmp/tests/media.c @@ -303,6 +303,11 @@ static BOOL test_wmp(void) static DWORD dw = 100; IWMPSettings *settings; BOOL test_ran = TRUE; + DOUBLE duration; + VARIANT_BOOL vbool; + IWMPMedia *media; + static const WCHAR currentPosition[] = {'c','u','r','r','e','n','t','P','o','s','i','t','i','o','n',0}; + BSTR bstrcurrentPosition = SysAllocString(currentPosition);
hres = CoCreateInstance(&CLSID_WindowsMediaPlayer, NULL, CLSCTX_INPROC_SERVER, &IID_IOleObject, (void**)&oleobj); if(hres == REGDB_E_CLASSNOTREG) { @@ -338,6 +343,10 @@ static BOOL test_wmp(void) ok(hres == S_OK, "get_controls failed: %08x\n", hres); ok(controls != NULL, "controls = NULL\n");
+ hres = IWMPControls_get_isAvailable(controls, bstrcurrentPosition, &vbool); + ok(hres == S_OK, "IWMPControls_get_isAvailable failed: %08x\n", hres); + ok(vbool == VARIANT_FALSE, "unexpected value\n"); + hres = IWMPControls_play(controls); ok(hres == NS_S_WMPCORE_COMMAND_NOT_AVAILABLE, "IWMPControls_play is available: %08x\n", hres);
@@ -380,6 +389,34 @@ static BOOL test_wmp(void) /* MediaOpening happens only on xp, 2003 */ CLEAR_CALLED(OPENSTATE, wmposMediaOpening);
+ hres = IWMPControls_get_isAvailable(controls, bstrcurrentPosition, &vbool); + ok(hres == S_OK, "IWMPControls_get_isAvailable failed: %08x\n", hres); + ok(vbool == VARIANT_TRUE, "unexpected value\n"); + + duration = 0.0; + hres = IWMPControls_get_currentPosition(controls, &duration); + ok(hres == S_OK, "IWMPControls_get_currentPosition failed: %08x\n", hres); + ok((int)duration == 0, "unexpected value %f\n", duration); + + duration = 15.0; + hres = IWMPControls_put_currentPosition(controls, duration); + ok(hres == S_OK, "IWMPControls_put_currentPosition failed: %08x\n", hres); + + duration = 0.0; + hres = IWMPControls_get_currentPosition(controls, &duration); + ok(hres == S_OK, "IWMPControls_get_currentPosition failed: %08x\n", hres); + /* builtin quartz does not handle this currently and resets to 0.0, works + * with native quartz */ + todo_wine ok((int)duration >= 15.0, "unexpected value %f\n", duration); + + hres = IWMPPlayer4_get_currentMedia(player4, &media); + ok(hres == S_OK, "IWMPPlayer4_get_currentMedia failed: %08x\n", hres); + hres = IWMPMedia_get_duration(media, &duration); + ok(hres == S_OK, "IWMPMedia_get_duration failed: %08x\n", hres); + ok(round(duration) == 60 || broken(round(duration) == 57), + "unexpected value: %f\n", duration); + IWMPMedia_Release(media); + SET_EXPECT(PLAYSTATE, wmppsStopped); /* The following happens on wine only since we close media on stop */ SET_EXPECT(OPENSTATE, wmposPlaylistOpenNoMedia); @@ -414,6 +451,7 @@ playback_skip: IOleObject_Release(oleobj); DeleteFileW(filename); SysFreeString(filename); + SysFreeString(bstrcurrentPosition);
return test_ran; } diff --git a/dlls/wmp/tests/rsrc.rc b/dlls/wmp/tests/rsrc.rc index a92079e798..7ce8c4b687 100644 --- a/dlls/wmp/tests/rsrc.rc +++ b/dlls/wmp/tests/rsrc.rc @@ -18,7 +18,7 @@
#include "windef.h"
-/* ffmpeg -ar 48000 -t 60 -f s16le -acodec pcm_s16le -ac 2 -i /dev/zero -acodec libmp3lame -aq 4 output.mp3 */ +/* ffmpeg -f lavfi -i anullsrc=r=48000:cl=4 -t 60 -acodec libmp3lame -aq 4 dlls/wmp/tests/test.mp3 */ /* @makedep: test.mp3 */ test.mp3 RCDATA "test.mp3" /* ffmpeg -ar 48000 -t 1 -f s16le -acodec pcm_s16le -ac 2 -i /dev/zero -acodec libmp3lame -aq 4 test1s.mp3 */ diff --git a/dlls/wmp/tests/test.mp3 b/dlls/wmp/tests/test.mp3 index 149a2cd346ee52ae179c46198ce290a5dd4d6251..a8f22ce279cda0861cefe6851dcae0bced1372ad 100644 GIT binary patch literal 240333 zcmeIxVWgdP9Ki9X?nXsMMod)NB697zTaCn0m$o+1ZbrsTx%MKf#3W)&WJV%Il2WE6 ziHzBlD@`Oa#*{=N5s5^ataI*ObidzMn|9cX@AKk0|L^mh=YM|Z<D4xI%&r*5$8GaF zcFc`lR}I6|wmth7Hr_qGX?A*M{raW57f$ET%`Yy?3(GD07M>cdM$cV)YMA=q?O|%= zHP>Cg>W0-fuDR*vTi4!x$DPwNvv+N}=ibft&po(x`@@gS?|f|6?mbT|?0s_IGtcgS z?)euE9DMPmLx*2}<<-~Uc=N4y-aYdEhaY|X$+6=nK3)9$)R$j<{mtn!XTSaahaZ3X z`IldR`~8nU|N8r%@h6Xle0((I%<=(;wO4N*-y6?y^t0)mOY8qm=g+PFVwhSSu6l2D z?UrHKa9|i#Y`bs!+|n0)bbPRuE?xX-y#Km`+MkdA@BJV0{FizErzbrBYZIRT<b>z{ zZo>1oKY!56YyAJpXSoR1`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCF zMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCF zMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCF zMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCF zMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCF zMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCF zMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCF zMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z| z(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3a zk44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W( z`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@I zm5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk z*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb! z!<COk*!j@Im5)W(`Ow3ak44z|(8HCFMcDb!!<COk*!j@Im5)W(`Ow3ak44z|(8F~F X_;{pC>Wi5FlJ@hP+utJWN&EZ@Ay;|i
literal 240333 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
diff --git a/dlls/wmp/wmp_private.h b/dlls/wmp/wmp_private.h index 3792e52abd..e8d534803f 100644 --- a/dlls/wmp/wmp_private.h +++ b/dlls/wmp/wmp_private.h @@ -42,6 +42,8 @@ typedef struct { LONG ref;
WCHAR *url; + + DOUBLE duration; } WMPMedia;
struct WindowsMediaPlayer { @@ -76,6 +78,7 @@ struct WindowsMediaPlayer { IGraphBuilder* filter_graph; IMediaControl* media_control; IMediaEvent* media_event; + IMediaSeeking* media_seeking;
/* Async event notification */ HWND msg_window;
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=37726
Your paranoid android.
=== wvistau64 (64 bit oleobj) === 073c:oleobj: unhandled exception c0000005 at 000007FEF3C2ACA2
On Tue, Apr 17, 2018 at 12:01 AM, Marvin testbot@winehq.org wrote:
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=37726
Your paranoid android.
=== wvistau64 (64 bit oleobj) === 073c:oleobj: unhandled exception c0000005 at 000007FEF3C2ACA2
This is a preexisting failure