mirror of
https://github.com/reactos/wine.git
synced 2025-02-04 11:08:48 +00:00
qedit: Implement IMediaSeeking and IMediaPosition in sample grabber.
This commit is contained in:
parent
f53fa4f05b
commit
ae771fee02
@ -369,7 +369,9 @@ typedef struct _SG_Impl {
|
|||||||
IBaseFilter IBaseFilter_iface;
|
IBaseFilter IBaseFilter_iface;
|
||||||
ISampleGrabber ISampleGrabber_iface;
|
ISampleGrabber ISampleGrabber_iface;
|
||||||
IMemInputPin IMemInputPin_iface;
|
IMemInputPin IMemInputPin_iface;
|
||||||
/* TODO: IMediaPosition, IMediaSeeking, IQualityControl */
|
/* IMediaSeeking and IMediaPosition are implemented by ISeekingPassThru */
|
||||||
|
IUnknown* seekthru_unk;
|
||||||
|
/* TODO: IQualityControl */
|
||||||
IUnknown *outer_unk;
|
IUnknown *outer_unk;
|
||||||
LONG ref;
|
LONG ref;
|
||||||
CRITICAL_SECTION critSect;
|
CRITICAL_SECTION critSect;
|
||||||
@ -433,6 +435,8 @@ static void SampleGrabber_cleanup(SG_Impl *This)
|
|||||||
CoTaskMemFree(This->mtype.pbFormat);
|
CoTaskMemFree(This->mtype.pbFormat);
|
||||||
if (This->bufferData)
|
if (This->bufferData)
|
||||||
CoTaskMemFree(This->bufferData);
|
CoTaskMemFree(This->bufferData);
|
||||||
|
if(This->seekthru_unk)
|
||||||
|
IUnknown_Release(This->seekthru_unk);
|
||||||
This->critSect.DebugInfo->Spare[0] = 0;
|
This->critSect.DebugInfo->Spare[0] = 0;
|
||||||
DeleteCriticalSection(&This->critSect);
|
DeleteCriticalSection(&This->critSect);
|
||||||
}
|
}
|
||||||
@ -455,9 +459,9 @@ static HRESULT WINAPI SampleGrabber_QueryInterface(IUnknown *iface, REFIID riid,
|
|||||||
else if (IsEqualIID(riid, &IID_IMemInputPin))
|
else if (IsEqualIID(riid, &IID_IMemInputPin))
|
||||||
*ppv = &This->IMemInputPin_iface;
|
*ppv = &This->IMemInputPin_iface;
|
||||||
else if (IsEqualIID(riid, &IID_IMediaPosition))
|
else if (IsEqualIID(riid, &IID_IMediaPosition))
|
||||||
FIXME("IMediaPosition not implemented\n");
|
return IUnknown_QueryInterface(This->seekthru_unk, riid, ppv);
|
||||||
else if (IsEqualIID(riid, &IID_IMediaSeeking))
|
else if (IsEqualIID(riid, &IID_IMediaSeeking))
|
||||||
FIXME("IMediaSeeking not implemented\n");
|
return IUnknown_QueryInterface(This->seekthru_unk, riid, ppv);
|
||||||
else if (IsEqualIID(riid, &IID_IQualityControl))
|
else if (IsEqualIID(riid, &IID_IQualityControl))
|
||||||
FIXME("IQualityControl not implemented\n");
|
FIXME("IQualityControl not implemented\n");
|
||||||
else
|
else
|
||||||
@ -1048,6 +1052,10 @@ SampleGrabber_IPin_QueryInterface(IPin *iface, REFIID riid, void **ppv)
|
|||||||
*ppv = iface;
|
*ppv = iface;
|
||||||
else if (IsEqualIID(riid, &IID_IMemInputPin))
|
else if (IsEqualIID(riid, &IID_IMemInputPin))
|
||||||
*ppv = &This->sg->IMemInputPin_iface;
|
*ppv = &This->sg->IMemInputPin_iface;
|
||||||
|
else if (IsEqualIID(riid, &IID_IMediaSeeking))
|
||||||
|
return IUnknown_QueryInterface(&This->sg->IUnknown_inner, riid, ppv);
|
||||||
|
else if (IsEqualIID(riid, &IID_IMediaPosition))
|
||||||
|
return IUnknown_QueryInterface(&This->sg->IUnknown_inner, riid, ppv);
|
||||||
else {
|
else {
|
||||||
WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
|
WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppv);
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
@ -1467,6 +1475,8 @@ static const IPinVtbl IPin_Out_VTable =
|
|||||||
HRESULT SampleGrabber_create(IUnknown *pUnkOuter, LPVOID *ppv)
|
HRESULT SampleGrabber_create(IUnknown *pUnkOuter, LPVOID *ppv)
|
||||||
{
|
{
|
||||||
SG_Impl* obj = NULL;
|
SG_Impl* obj = NULL;
|
||||||
|
ISeekingPassThru *passthru;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p,%p)\n", ppv, pUnkOuter);
|
TRACE("(%p,%p)\n", ppv, pUnkOuter);
|
||||||
|
|
||||||
@ -1514,6 +1524,13 @@ HRESULT SampleGrabber_create(IUnknown *pUnkOuter, LPVOID *ppv)
|
|||||||
else
|
else
|
||||||
obj->outer_unk = &obj->IUnknown_inner;
|
obj->outer_unk = &obj->IUnknown_inner;
|
||||||
|
|
||||||
|
hr = CoCreateInstance(&CLSID_SeekingPassThru, (IUnknown*)obj, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&obj->seekthru_unk);
|
||||||
|
if(hr)
|
||||||
|
return hr;
|
||||||
|
IUnknown_QueryInterface(obj->seekthru_unk, &IID_ISeekingPassThru, (void**)&passthru);
|
||||||
|
ISeekingPassThru_Init(passthru, FALSE, &obj->pin_in.IPin_iface);
|
||||||
|
ISeekingPassThru_Release(passthru);
|
||||||
|
|
||||||
*ppv = &obj->IUnknown_inner;
|
*ppv = &obj->IUnknown_inner;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user