mirror of
https://github.com/reactos/reactos.git
synced 2025-05-23 11:04:52 +00:00
[STRMBASE] Sync with Wine 3.0. CORE-14225
This commit is contained in:
parent
85b71880fa
commit
a7ef5747b5
10 changed files with 205 additions and 97 deletions
|
@ -250,7 +250,7 @@ In addition the following libs, dlls and source files are mostly based on code p
|
||||||
from Winehq CVS. If you are looking to update something in these files
|
from Winehq CVS. If you are looking to update something in these files
|
||||||
check Wine current sources first as it may already be fixed.
|
check Wine current sources first as it may already be fixed.
|
||||||
|
|
||||||
reactos/sdk/lib/3rdparty/strmbase # Synced to WineStaging-1.9.16
|
reactos/sdk/lib/3rdparty/strmbase # Synced to Wine-3.0
|
||||||
|
|
||||||
reactos/sdk/lib/rtl/actctx.c # Partly synced with WineStaging-1.9.16
|
reactos/sdk/lib/rtl/actctx.c # Partly synced with WineStaging-1.9.16
|
||||||
reactos/sdk/lib/rtl/timerqueue.c # Partly synced with WineStaging-1.7.55
|
reactos/sdk/lib/rtl/timerqueue.c # Partly synced with WineStaging-1.7.55
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "wine/list.h"
|
||||||
|
|
||||||
HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc);
|
HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc);
|
||||||
void WINAPI FreeMediaType(AM_MEDIA_TYPE * pMediaType);
|
void WINAPI FreeMediaType(AM_MEDIA_TYPE * pMediaType);
|
||||||
AM_MEDIA_TYPE * WINAPI CreateMediaType(AM_MEDIA_TYPE const * pSrc);
|
AM_MEDIA_TYPE * WINAPI CreateMediaType(AM_MEDIA_TYPE const * pSrc);
|
||||||
|
@ -351,7 +353,7 @@ typedef struct tagOutputQueue {
|
||||||
BOOL bTerminate;
|
BOOL bTerminate;
|
||||||
BOOL bSendAnyway;
|
BOOL bSendAnyway;
|
||||||
|
|
||||||
struct list *SampleList;
|
struct list SampleList;
|
||||||
|
|
||||||
const struct OutputQueueFuncTable* pFuncsTable;
|
const struct OutputQueueFuncTable* pFuncsTable;
|
||||||
} OutputQueue;
|
} OutputQueue;
|
||||||
|
|
13
sdk/lib/3rdparty/strmbase/mediatype.c
vendored
13
sdk/lib/3rdparty/strmbase/mediatype.c
vendored
|
@ -118,18 +118,23 @@ HRESULT WINAPI EnumMediaTypes_Construct(BasePin *basePin, BasePin_GetMediaType e
|
||||||
pEnumMediaTypes->basePin = basePin;
|
pEnumMediaTypes->basePin = basePin;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (enumFunc(basePin, i, &amt) == S_OK) i++;
|
while (enumFunc(basePin, i, &amt) == S_OK)
|
||||||
|
{
|
||||||
|
FreeMediaType(&amt);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
pEnumMediaTypes->enumMediaDetails.cMediaTypes = i;
|
pEnumMediaTypes->enumMediaDetails.cMediaTypes = i;
|
||||||
pEnumMediaTypes->enumMediaDetails.pMediaTypes = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * i);
|
pEnumMediaTypes->enumMediaDetails.pMediaTypes = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * i);
|
||||||
memset(pEnumMediaTypes->enumMediaDetails.pMediaTypes, 0, sizeof(AM_MEDIA_TYPE) * i);
|
memset(pEnumMediaTypes->enumMediaDetails.pMediaTypes, 0, sizeof(AM_MEDIA_TYPE) * i);
|
||||||
for (i = 0; i < pEnumMediaTypes->enumMediaDetails.cMediaTypes; i++)
|
for (i = 0; i < pEnumMediaTypes->enumMediaDetails.cMediaTypes; i++)
|
||||||
{
|
{
|
||||||
enumFunc(basePin,i,&amt);
|
HRESULT hr;
|
||||||
if (FAILED(CopyMediaType(&pEnumMediaTypes->enumMediaDetails.pMediaTypes[i], &amt)))
|
|
||||||
|
if (FAILED(hr = enumFunc(basePin, i, &pEnumMediaTypes->enumMediaDetails.pMediaTypes[i])))
|
||||||
{
|
{
|
||||||
IEnumMediaTypes_Release(&pEnumMediaTypes->IEnumMediaTypes_iface);
|
IEnumMediaTypes_Release(&pEnumMediaTypes->IEnumMediaTypes_iface);
|
||||||
return E_OUTOFMEMORY;
|
return hr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*ppEnum = &pEnumMediaTypes->IEnumMediaTypes_iface;
|
*ppEnum = &pEnumMediaTypes->IEnumMediaTypes_iface;
|
||||||
|
|
33
sdk/lib/3rdparty/strmbase/outputqueue.c
vendored
33
sdk/lib/3rdparty/strmbase/outputqueue.c
vendored
|
@ -40,7 +40,7 @@ static DWORD WINAPI OutputQueue_InitialThreadProc(LPVOID data)
|
||||||
static void OutputQueue_FreeSamples(OutputQueue *pOutputQueue)
|
static void OutputQueue_FreeSamples(OutputQueue *pOutputQueue)
|
||||||
{
|
{
|
||||||
struct list *cursor, *cursor2;
|
struct list *cursor, *cursor2;
|
||||||
LIST_FOR_EACH_SAFE(cursor, cursor2, pOutputQueue->SampleList)
|
LIST_FOR_EACH_SAFE(cursor, cursor2, &pOutputQueue->SampleList)
|
||||||
{
|
{
|
||||||
QueuedEvent *qev = LIST_ENTRY(cursor, QueuedEvent, entry);
|
QueuedEvent *qev = LIST_ENTRY(cursor, QueuedEvent, entry);
|
||||||
list_remove(cursor);
|
list_remove(cursor);
|
||||||
|
@ -77,14 +77,7 @@ HRESULT WINAPI OutputQueue_Construct(
|
||||||
This->bBatchExact = bBatchExact;
|
This->bBatchExact = bBatchExact;
|
||||||
InitializeCriticalSection(&This->csQueue);
|
InitializeCriticalSection(&This->csQueue);
|
||||||
This->csQueue.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": OutputQueue.csQueue");
|
This->csQueue.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": OutputQueue.csQueue");
|
||||||
This->SampleList = HeapAlloc(GetProcessHeap(),0,sizeof(struct list));
|
list_init(&This->SampleList);
|
||||||
if (!This->SampleList)
|
|
||||||
{
|
|
||||||
OutputQueue_Destroy(This);
|
|
||||||
*ppOutputQueue = NULL;
|
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
}
|
|
||||||
list_init(This->SampleList);
|
|
||||||
|
|
||||||
This->pInputPin = pInputPin;
|
This->pInputPin = pInputPin;
|
||||||
IPin_AddRef(&pInputPin->pin.IPin_iface);
|
IPin_AddRef(&pInputPin->pin.IPin_iface);
|
||||||
|
@ -121,8 +114,6 @@ HRESULT WINAPI OutputQueue_Destroy(OutputQueue *pOutputQueue)
|
||||||
DeleteCriticalSection(&pOutputQueue->csQueue);
|
DeleteCriticalSection(&pOutputQueue->csQueue);
|
||||||
CloseHandle(pOutputQueue->hProcessQueue);
|
CloseHandle(pOutputQueue->hProcessQueue);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),0,pOutputQueue->SampleList);
|
|
||||||
|
|
||||||
IPin_Release(&pOutputQueue->pInputPin->pin.IPin_iface);
|
IPin_Release(&pOutputQueue->pInputPin->pin.IPin_iface);
|
||||||
HeapFree(GetProcessHeap(),0,pOutputQueue);
|
HeapFree(GetProcessHeap(),0,pOutputQueue);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -159,11 +150,11 @@ HRESULT WINAPI OutputQueue_ReceiveMultiple(OutputQueue *pOutputQueue, IMediaSamp
|
||||||
qev->type = SAMPLE_PACKET;
|
qev->type = SAMPLE_PACKET;
|
||||||
qev->pSample = ppSamples[i];
|
qev->pSample = ppSamples[i];
|
||||||
IMediaSample_AddRef(ppSamples[i]);
|
IMediaSample_AddRef(ppSamples[i]);
|
||||||
list_add_tail(pOutputQueue->SampleList, &qev->entry);
|
list_add_tail(&pOutputQueue->SampleList, &qev->entry);
|
||||||
(*nSamplesProcessed)++;
|
(*nSamplesProcessed)++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pOutputQueue->bBatchExact || list_count(pOutputQueue->SampleList) >= pOutputQueue->lBatchSize)
|
if (!pOutputQueue->bBatchExact || list_count(&pOutputQueue->SampleList) >= pOutputQueue->lBatchSize)
|
||||||
SetEvent(pOutputQueue->hProcessQueue);
|
SetEvent(pOutputQueue->hProcessQueue);
|
||||||
LeaveCriticalSection(&pOutputQueue->csQueue);
|
LeaveCriticalSection(&pOutputQueue->csQueue);
|
||||||
}
|
}
|
||||||
|
@ -181,7 +172,7 @@ VOID WINAPI OutputQueue_SendAnyway(OutputQueue *pOutputQueue)
|
||||||
if (pOutputQueue->hThread)
|
if (pOutputQueue->hThread)
|
||||||
{
|
{
|
||||||
EnterCriticalSection(&pOutputQueue->csQueue);
|
EnterCriticalSection(&pOutputQueue->csQueue);
|
||||||
if (!list_empty(pOutputQueue->SampleList))
|
if (!list_empty(&pOutputQueue->SampleList))
|
||||||
{
|
{
|
||||||
pOutputQueue->bSendAnyway = TRUE;
|
pOutputQueue->bSendAnyway = TRUE;
|
||||||
SetEvent(pOutputQueue->hProcessQueue);
|
SetEvent(pOutputQueue->hProcessQueue);
|
||||||
|
@ -204,7 +195,7 @@ VOID WINAPI OutputQueue_EOS(OutputQueue *pOutputQueue)
|
||||||
}
|
}
|
||||||
qev->type = EOS_PACKET;
|
qev->type = EOS_PACKET;
|
||||||
qev->pSample = NULL;
|
qev->pSample = NULL;
|
||||||
list_add_tail(pOutputQueue->SampleList, &qev->entry);
|
list_add_tail(&pOutputQueue->SampleList, &qev->entry);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -226,14 +217,14 @@ DWORD WINAPI OutputQueueImpl_ThreadProc(OutputQueue *pOutputQueue)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
EnterCriticalSection(&pOutputQueue->csQueue);
|
EnterCriticalSection(&pOutputQueue->csQueue);
|
||||||
if (!list_empty(pOutputQueue->SampleList) &&
|
if (!list_empty(&pOutputQueue->SampleList) &&
|
||||||
(!pOutputQueue->bBatchExact ||
|
(!pOutputQueue->bBatchExact ||
|
||||||
list_count(pOutputQueue->SampleList) >= pOutputQueue->lBatchSize ||
|
list_count(&pOutputQueue->SampleList) >= pOutputQueue->lBatchSize ||
|
||||||
pOutputQueue->bSendAnyway
|
pOutputQueue->bSendAnyway
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
while (!list_empty(pOutputQueue->SampleList))
|
while (!list_empty(&pOutputQueue->SampleList))
|
||||||
{
|
{
|
||||||
IMediaSample **ppSamples;
|
IMediaSample **ppSamples;
|
||||||
LONG nSamples;
|
LONG nSamples;
|
||||||
|
@ -242,10 +233,10 @@ DWORD WINAPI OutputQueueImpl_ThreadProc(OutputQueue *pOutputQueue)
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
/* First Pass Process Samples */
|
/* First Pass Process Samples */
|
||||||
i = list_count(pOutputQueue->SampleList);
|
i = list_count(&pOutputQueue->SampleList);
|
||||||
ppSamples = HeapAlloc(GetProcessHeap(),0,sizeof(IMediaSample*) * i);
|
ppSamples = HeapAlloc(GetProcessHeap(),0,sizeof(IMediaSample*) * i);
|
||||||
nSamples = 0;
|
nSamples = 0;
|
||||||
LIST_FOR_EACH_SAFE(cursor, cursor2, pOutputQueue->SampleList)
|
LIST_FOR_EACH_SAFE(cursor, cursor2, &pOutputQueue->SampleList)
|
||||||
{
|
{
|
||||||
QueuedEvent *qev = LIST_ENTRY(cursor, QueuedEvent, entry);
|
QueuedEvent *qev = LIST_ENTRY(cursor, QueuedEvent, entry);
|
||||||
if (qev->type == SAMPLE_PACKET)
|
if (qev->type == SAMPLE_PACKET)
|
||||||
|
@ -269,7 +260,7 @@ DWORD WINAPI OutputQueueImpl_ThreadProc(OutputQueue *pOutputQueue)
|
||||||
HeapFree(GetProcessHeap(),0,ppSamples);
|
HeapFree(GetProcessHeap(),0,ppSamples);
|
||||||
|
|
||||||
/* Process Non-Samples */
|
/* Process Non-Samples */
|
||||||
LIST_FOR_EACH_SAFE(cursor, cursor2, pOutputQueue->SampleList)
|
LIST_FOR_EACH_SAFE(cursor, cursor2, &pOutputQueue->SampleList)
|
||||||
{
|
{
|
||||||
QueuedEvent *qev = LIST_ENTRY(cursor, QueuedEvent, entry);
|
QueuedEvent *qev = LIST_ENTRY(cursor, QueuedEvent, entry);
|
||||||
if (qev->type == EOS_PACKET)
|
if (qev->type == EOS_PACKET)
|
||||||
|
|
10
sdk/lib/3rdparty/strmbase/pin.c
vendored
10
sdk/lib/3rdparty/strmbase/pin.c
vendored
|
@ -329,7 +329,7 @@ HRESULT WINAPI BasePinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFER
|
||||||
{
|
{
|
||||||
BasePin *This = impl_from_IPin(iface);
|
BasePin *This = impl_from_IPin(iface);
|
||||||
|
|
||||||
TRACE("(%x%08x, %x%08x, %e)\n", (ULONG)(tStart >> 32), (ULONG)tStart, (ULONG)(tStop >> 32), (ULONG)tStop, dRate);
|
TRACE("(%s, %s, %e)\n", wine_dbgstr_longlong(tStart), wine_dbgstr_longlong(tStop), dRate);
|
||||||
|
|
||||||
This->tStart = tStart;
|
This->tStart = tStart;
|
||||||
This->tStop = tStop;
|
This->tStop = tStop;
|
||||||
|
@ -387,10 +387,8 @@ ULONG WINAPI BaseOutputPinImpl_Release(IPin * iface)
|
||||||
TRACE("(%p)->() Release from %d\n", iface, refCount + 1);
|
TRACE("(%p)->() Release from %d\n", iface, refCount + 1);
|
||||||
|
|
||||||
if (!refCount)
|
if (!refCount)
|
||||||
{
|
|
||||||
BaseOutputPin_Destroy(This);
|
BaseOutputPin_Destroy(This);
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return refCount;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1009,7 +1007,7 @@ HRESULT WINAPI BaseInputPinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart,
|
||||||
BaseInputPin *This = impl_BaseInputPin_from_IPin(iface);
|
BaseInputPin *This = impl_BaseInputPin_from_IPin(iface);
|
||||||
newsegmentargs args;
|
newsegmentargs args;
|
||||||
|
|
||||||
TRACE("(%x%08x, %x%08x, %e)\n", (ULONG)(tStart >> 32), (ULONG)tStart, (ULONG)(tStop >> 32), (ULONG)tStop, dRate);
|
TRACE("(%s, %s, %e)\n", wine_dbgstr_longlong(tStart), wine_dbgstr_longlong(tStop), dRate);
|
||||||
|
|
||||||
args.tStart = This->pin.tStart = tStart;
|
args.tStart = This->pin.tStart = tStart;
|
||||||
args.tStop = This->pin.tStop = tStop;
|
args.tStop = This->pin.tStop = tStop;
|
||||||
|
@ -1202,7 +1200,7 @@ HRESULT BaseInputPin_Construct(const IPinVtbl *InputPin_Vtbl, LONG inputpin_size
|
||||||
|
|
||||||
if (SUCCEEDED(InputPin_Init(InputPin_Vtbl, pPinInfo, vtbl, pCritSec, allocator, pPinImpl)))
|
if (SUCCEEDED(InputPin_Init(InputPin_Vtbl, pPinInfo, vtbl, pCritSec, allocator, pPinImpl)))
|
||||||
{
|
{
|
||||||
*ppPin = (IPin *)pPinImpl;
|
*ppPin = &pPinImpl->pin.IPin_iface;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
26
sdk/lib/3rdparty/strmbase/pospass.c
vendored
26
sdk/lib/3rdparty/strmbase/pospass.c
vendored
|
@ -67,7 +67,7 @@ static HRESULT WINAPI SeekInner_QueryInterface(IUnknown * iface,
|
||||||
REFIID riid,
|
REFIID riid,
|
||||||
LPVOID *ppvObj) {
|
LPVOID *ppvObj) {
|
||||||
PassThruImpl *This = impl_from_IUnknown_inner(iface);
|
PassThruImpl *This = impl_from_IUnknown_inner(iface);
|
||||||
TRACE("(%p)->(%s (%p), %p)\n", This, debugstr_guid(riid), riid, ppvObj);
|
TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObj);
|
||||||
|
|
||||||
if (This->bAggregatable)
|
if (This->bAggregatable)
|
||||||
This->bUnkOuterValid = TRUE;
|
This->bUnkOuterValid = TRUE;
|
||||||
|
@ -142,9 +142,9 @@ static HRESULT SeekOuter_QueryInterface(PassThruImpl *This, REFIID riid, LPVOID
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
IUnknown_AddRef((IUnknown *)&(This->IUnknown_inner));
|
IUnknown_AddRef(&This->IUnknown_inner);
|
||||||
hr = IUnknown_QueryInterface((IUnknown *)&(This->IUnknown_inner), riid, ppv);
|
hr = IUnknown_QueryInterface(&This->IUnknown_inner, riid, ppv);
|
||||||
IUnknown_Release((IUnknown *)&(This->IUnknown_inner));
|
IUnknown_Release(&This->IUnknown_inner);
|
||||||
This->bAggregatable = TRUE;
|
This->bAggregatable = TRUE;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
@ -153,28 +153,28 @@ static HRESULT SeekOuter_QueryInterface(PassThruImpl *This, REFIID riid, LPVOID
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return IUnknown_QueryInterface((IUnknown *)&(This->IUnknown_inner), riid, ppv);
|
return IUnknown_QueryInterface(&This->IUnknown_inner, riid, ppv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG SeekOuter_AddRef(PassThruImpl *This)
|
static ULONG SeekOuter_AddRef(PassThruImpl *This)
|
||||||
{
|
{
|
||||||
if (This->outer_unk && This->bUnkOuterValid)
|
if (This->outer_unk && This->bUnkOuterValid)
|
||||||
return IUnknown_AddRef(This->outer_unk);
|
return IUnknown_AddRef(This->outer_unk);
|
||||||
return IUnknown_AddRef((IUnknown *)&(This->IUnknown_inner));
|
return IUnknown_AddRef(&This->IUnknown_inner);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG SeekOuter_Release(PassThruImpl *This)
|
static ULONG SeekOuter_Release(PassThruImpl *This)
|
||||||
{
|
{
|
||||||
if (This->outer_unk && This->bUnkOuterValid)
|
if (This->outer_unk && This->bUnkOuterValid)
|
||||||
return IUnknown_Release(This->outer_unk);
|
return IUnknown_Release(This->outer_unk);
|
||||||
return IUnknown_Release((IUnknown *)&(This->IUnknown_inner));
|
return IUnknown_Release(&This->IUnknown_inner);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI SeekingPassThru_QueryInterface(ISeekingPassThru *iface, REFIID riid, LPVOID *ppvObj)
|
static HRESULT WINAPI SeekingPassThru_QueryInterface(ISeekingPassThru *iface, REFIID riid, LPVOID *ppvObj)
|
||||||
{
|
{
|
||||||
PassThruImpl *This = impl_from_ISeekingPassThru(iface);
|
PassThruImpl *This = impl_from_ISeekingPassThru(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%s (%p), %p)\n", This, iface, debugstr_guid(riid), riid, ppvObj);
|
TRACE("(%p/%p)->(%s, %p)\n", This, iface, debugstr_guid(riid), ppvObj);
|
||||||
|
|
||||||
return SeekOuter_QueryInterface(This, riid, ppvObj);
|
return SeekOuter_QueryInterface(This, riid, ppvObj);
|
||||||
}
|
}
|
||||||
|
@ -266,7 +266,7 @@ static HRESULT WINAPI MediaSeekingPassThru_QueryInterface(IMediaSeeking *iface,
|
||||||
{
|
{
|
||||||
PassThruImpl *This = impl_from_IMediaSeeking(iface);
|
PassThruImpl *This = impl_from_IMediaSeeking(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%s (%p), %p)\n", This, iface, debugstr_guid(riid), riid, ppvObj);
|
TRACE("(%p/%p)->(%s, %p)\n", This, iface, debugstr_guid(riid), ppvObj);
|
||||||
|
|
||||||
return SeekOuter_QueryInterface(This, riid, ppvObj);
|
return SeekOuter_QueryInterface(This, riid, ppvObj);
|
||||||
}
|
}
|
||||||
|
@ -516,11 +516,9 @@ static HRESULT WINAPI MediaSeekingPassThru_GetPositions(IMediaSeeking * iface, L
|
||||||
if (SUCCEEDED(hr)) {
|
if (SUCCEEDED(hr)) {
|
||||||
hr = IMediaSeeking_GetPositions(seek, pCurrent, pStop);
|
hr = IMediaSeeking_GetPositions(seek, pCurrent, pStop);
|
||||||
IMediaSeeking_Release(seek);
|
IMediaSeeking_Release(seek);
|
||||||
} else if (hr == VFW_E_NOT_CONNECTED) {
|
|
||||||
*pCurrent = 0;
|
|
||||||
*pStop = 0;
|
|
||||||
hr = S_OK;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
return E_NOTIMPL;
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -651,7 +649,7 @@ static HRESULT WINAPI MediaPositionPassThru_QueryInterface(IMediaPosition *iface
|
||||||
{
|
{
|
||||||
PassThruImpl *This = impl_from_IMediaPosition(iface);
|
PassThruImpl *This = impl_from_IMediaPosition(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%s (%p), %p)\n", This, iface, debugstr_guid(riid), riid, ppvObj);
|
TRACE("(%p/%p)->(%s, %p)\n", This, iface, debugstr_guid(riid), ppvObj);
|
||||||
|
|
||||||
return SeekOuter_QueryInterface(This, riid, ppvObj);
|
return SeekOuter_QueryInterface(This, riid, ppvObj);
|
||||||
}
|
}
|
||||||
|
|
6
sdk/lib/3rdparty/strmbase/renderer.c
vendored
6
sdk/lib/3rdparty/strmbase/renderer.c
vendored
|
@ -228,7 +228,8 @@ static const BaseInputPinFuncTable input_BaseInputFuncTable = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
HRESULT WINAPI BaseRenderer_Init(BaseRenderer * This, const IBaseFilterVtbl *Vtbl, IUnknown *pUnkOuter, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseRendererFuncTable* pBaseFuncsTable)
|
HRESULT WINAPI BaseRenderer_Init(BaseRenderer * This, const IBaseFilterVtbl *Vtbl, IUnknown *pUnkOuter, const CLSID *pClsid,
|
||||||
|
DWORD_PTR DebugInfo, const BaseRendererFuncTable* pBaseFuncsTable)
|
||||||
{
|
{
|
||||||
PIN_INFO piInput;
|
PIN_INFO piInput;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -247,7 +248,8 @@ HRESULT WINAPI BaseRenderer_Init(BaseRenderer * This, const IBaseFilterVtbl *Vtb
|
||||||
|
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
hr = CreatePosPassThru(pUnkOuter ? pUnkOuter: (IUnknown*)This, TRUE, &This->pInputPin->pin.IPin_iface, &This->pPosition);
|
hr = CreatePosPassThru(pUnkOuter ? pUnkOuter: (IUnknown *)&This->filter.IBaseFilter_iface, TRUE,
|
||||||
|
&This->pInputPin->pin.IPin_iface, &This->pPosition);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
|
10
sdk/lib/3rdparty/strmbase/transform.c
vendored
10
sdk/lib/3rdparty/strmbase/transform.c
vendored
|
@ -223,7 +223,8 @@ static HRESULT TransformFilter_Init(const IBaseFilterVtbl *pVtbl, const CLSID* p
|
||||||
{
|
{
|
||||||
ISeekingPassThru *passthru;
|
ISeekingPassThru *passthru;
|
||||||
pTransformFilter->seekthru_unk = NULL;
|
pTransformFilter->seekthru_unk = NULL;
|
||||||
hr = CoCreateInstance(&CLSID_SeekingPassThru, (IUnknown*)pTransformFilter, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&pTransformFilter->seekthru_unk);
|
hr = CoCreateInstance(&CLSID_SeekingPassThru, (IUnknown *)&pTransformFilter->filter.IBaseFilter_iface, CLSCTX_INPROC_SERVER,
|
||||||
|
&IID_IUnknown, (void **)&pTransformFilter->seekthru_unk);
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
{
|
||||||
IUnknown_QueryInterface(pTransformFilter->seekthru_unk, &IID_ISeekingPassThru, (void**)&passthru);
|
IUnknown_QueryInterface(pTransformFilter->seekthru_unk, &IID_ISeekingPassThru, (void**)&passthru);
|
||||||
|
@ -326,11 +327,8 @@ ULONG WINAPI TransformFilterImpl_Release(IBaseFilter * iface)
|
||||||
IUnknown_Release(This->seekthru_unk);
|
IUnknown_Release(This->seekthru_unk);
|
||||||
BaseFilter_Destroy(&This->filter);
|
BaseFilter_Destroy(&This->filter);
|
||||||
CoTaskMemFree(This);
|
CoTaskMemFree(This);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
else
|
return refCount;
|
||||||
return refCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IMediaFilter methods **/
|
/** IMediaFilter methods **/
|
||||||
|
@ -530,7 +528,7 @@ static HRESULT WINAPI TransformFilter_InputPin_NewSegment(IPin * iface, REFERENC
|
||||||
TransformFilter* pTransform;
|
TransformFilter* pTransform;
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
TRACE("(%p)->()\n", iface);
|
TRACE("(%p)->(%s %s %e)\n", iface, wine_dbgstr_longlong(tStart), wine_dbgstr_longlong(tStop), dRate);
|
||||||
|
|
||||||
pTransform = impl_from_IBaseFilter(This->pin.pinInfo.pFilter);
|
pTransform = impl_from_IBaseFilter(This->pin.pinInfo.pFilter);
|
||||||
EnterCriticalSection(&pTransform->filter.csFilter);
|
EnterCriticalSection(&pTransform->filter.csFilter);
|
||||||
|
|
196
sdk/lib/3rdparty/strmbase/video.c
vendored
196
sdk/lib/3rdparty/strmbase/video.c
vendored
|
@ -43,6 +43,33 @@ HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo)
|
||||||
return BaseDispatch_Destroy(&pControlVideo->baseDispatch);
|
return BaseDispatch_Destroy(&pControlVideo->baseDispatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT BaseControlVideoImpl_CheckSourceRect(BaseControlVideo *This, RECT *pSourceRect)
|
||||||
|
{
|
||||||
|
LONG VideoWidth, VideoHeight;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (IsRectEmpty(pSourceRect))
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
hr = BaseControlVideoImpl_GetVideoSize((IBasicVideo *)This, &VideoWidth, &VideoHeight);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
if (pSourceRect->top < 0 || pSourceRect->left < 0 ||
|
||||||
|
pSourceRect->bottom > VideoHeight || pSourceRect->right > VideoWidth)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT BaseControlVideoImpl_CheckTargetRect(BaseControlVideo *This, RECT *pTargetRect)
|
||||||
|
{
|
||||||
|
if (IsRectEmpty(pTargetRect))
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT *pctinfo)
|
HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT *pctinfo)
|
||||||
{
|
{
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
@ -85,6 +112,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_AvgTimePerFrame(IBasicVideo *iface, REFT
|
||||||
VIDEOINFOHEADER *vih;
|
VIDEOINFOHEADER *vih;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
|
if (!pAvgTimePerFrame)
|
||||||
|
return E_POINTER;
|
||||||
if (!This->pPin->pConnectedTo)
|
if (!This->pPin->pConnectedTo)
|
||||||
return VFW_E_NOT_CONNECTED;
|
return VFW_E_NOT_CONNECTED;
|
||||||
|
|
||||||
|
@ -102,6 +131,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_BitRate(IBasicVideo *iface, LONG *pBitRa
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pBitRate);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pBitRate);
|
||||||
|
|
||||||
|
if (!pBitRate)
|
||||||
|
return E_POINTER;
|
||||||
if (!This->pPin->pConnectedTo)
|
if (!This->pPin->pConnectedTo)
|
||||||
return VFW_E_NOT_CONNECTED;
|
return VFW_E_NOT_CONNECTED;
|
||||||
|
|
||||||
|
@ -117,6 +148,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_BitErrorRate(IBasicVideo *iface, LONG *p
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pBitErrorRate);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pBitErrorRate);
|
||||||
|
|
||||||
|
if (!pBitErrorRate)
|
||||||
|
return E_POINTER;
|
||||||
if (!This->pPin->pConnectedTo)
|
if (!This->pPin->pConnectedTo)
|
||||||
return VFW_E_NOT_CONNECTED;
|
return VFW_E_NOT_CONNECTED;
|
||||||
|
|
||||||
|
@ -131,6 +164,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_VideoWidth(IBasicVideo *iface, LONG *pVi
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pVideoWidth);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pVideoWidth);
|
||||||
|
if (!pVideoWidth)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
vih = This->pFuncsTable->pfnGetVideoFormat(This);
|
vih = This->pFuncsTable->pfnGetVideoFormat(This);
|
||||||
*pVideoWidth = vih->bmiHeader.biWidth;
|
*pVideoWidth = vih->bmiHeader.biWidth;
|
||||||
|
@ -144,6 +179,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_VideoHeight(IBasicVideo *iface, LONG *pV
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pVideoHeight);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pVideoHeight);
|
||||||
|
if (!pVideoHeight)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
vih = This->pFuncsTable->pfnGetVideoFormat(This);
|
vih = This->pFuncsTable->pfnGetVideoFormat(This);
|
||||||
*pVideoHeight = abs(vih->bmiHeader.biHeight);
|
*pVideoHeight = abs(vih->bmiHeader.biHeight);
|
||||||
|
@ -155,13 +192,20 @@ HRESULT WINAPI BaseControlVideoImpl_put_SourceLeft(IBasicVideo *iface, LONG Sour
|
||||||
{
|
{
|
||||||
RECT SourceRect;
|
RECT SourceRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, SourceLeft);
|
TRACE("(%p/%p)->(%d)\n", This, iface, SourceLeft);
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
SourceRect.left = SourceLeft;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
{
|
||||||
|
SourceRect.right = (SourceRect.right - SourceRect.left) + SourceLeft;
|
||||||
|
SourceRect.left = SourceLeft;
|
||||||
|
hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_SourceLeft(IBasicVideo *iface, LONG *pSourceLeft)
|
HRESULT WINAPI BaseControlVideoImpl_get_SourceLeft(IBasicVideo *iface, LONG *pSourceLeft)
|
||||||
|
@ -170,6 +214,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_SourceLeft(IBasicVideo *iface, LONG *pSo
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceLeft);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceLeft);
|
||||||
|
if (!pSourceLeft)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
*pSourceLeft = SourceRect.left;
|
*pSourceLeft = SourceRect.left;
|
||||||
|
|
||||||
|
@ -180,13 +226,19 @@ HRESULT WINAPI BaseControlVideoImpl_put_SourceWidth(IBasicVideo *iface, LONG Sou
|
||||||
{
|
{
|
||||||
RECT SourceRect;
|
RECT SourceRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, SourceWidth);
|
TRACE("(%p/%p)->(%d)\n", This, iface, SourceWidth);
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
SourceRect.right = SourceRect.left + SourceWidth;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
{
|
||||||
|
SourceRect.right = SourceRect.left + SourceWidth;
|
||||||
|
hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_SourceWidth(IBasicVideo *iface, LONG *pSourceWidth)
|
HRESULT WINAPI BaseControlVideoImpl_get_SourceWidth(IBasicVideo *iface, LONG *pSourceWidth)
|
||||||
|
@ -195,6 +247,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_SourceWidth(IBasicVideo *iface, LONG *pS
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceWidth);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceWidth);
|
||||||
|
if (!pSourceWidth)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
*pSourceWidth = SourceRect.right - SourceRect.left;
|
*pSourceWidth = SourceRect.right - SourceRect.left;
|
||||||
|
|
||||||
|
@ -205,13 +259,20 @@ HRESULT WINAPI BaseControlVideoImpl_put_SourceTop(IBasicVideo *iface, LONG Sourc
|
||||||
{
|
{
|
||||||
RECT SourceRect;
|
RECT SourceRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, SourceTop);
|
TRACE("(%p/%p)->(%d)\n", This, iface, SourceTop);
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
SourceRect.top = SourceTop;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
{
|
||||||
|
SourceRect.bottom = (SourceRect.bottom - SourceRect.top) + SourceTop;
|
||||||
|
SourceRect.top = SourceTop;
|
||||||
|
hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_SourceTop(IBasicVideo *iface, LONG *pSourceTop)
|
HRESULT WINAPI BaseControlVideoImpl_get_SourceTop(IBasicVideo *iface, LONG *pSourceTop)
|
||||||
|
@ -220,6 +281,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_SourceTop(IBasicVideo *iface, LONG *pSou
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceTop);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceTop);
|
||||||
|
if (!pSourceTop)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
*pSourceTop = SourceRect.top;
|
*pSourceTop = SourceRect.top;
|
||||||
|
|
||||||
|
@ -230,13 +293,19 @@ HRESULT WINAPI BaseControlVideoImpl_put_SourceHeight(IBasicVideo *iface, LONG So
|
||||||
{
|
{
|
||||||
RECT SourceRect;
|
RECT SourceRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, SourceHeight);
|
TRACE("(%p/%p)->(%d)\n", This, iface, SourceHeight);
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
SourceRect.bottom = SourceRect.top + SourceHeight;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
{
|
||||||
|
SourceRect.bottom = SourceRect.top + SourceHeight;
|
||||||
|
hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_SourceHeight(IBasicVideo *iface, LONG *pSourceHeight)
|
HRESULT WINAPI BaseControlVideoImpl_get_SourceHeight(IBasicVideo *iface, LONG *pSourceHeight)
|
||||||
|
@ -245,6 +314,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_SourceHeight(IBasicVideo *iface, LONG *p
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceHeight);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceHeight);
|
||||||
|
if (!pSourceHeight)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
|
|
||||||
*pSourceHeight = SourceRect.bottom - SourceRect.top;
|
*pSourceHeight = SourceRect.bottom - SourceRect.top;
|
||||||
|
@ -256,13 +327,20 @@ HRESULT WINAPI BaseControlVideoImpl_put_DestinationLeft(IBasicVideo *iface, LONG
|
||||||
{
|
{
|
||||||
RECT DestRect;
|
RECT DestRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationLeft);
|
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationLeft);
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
DestRect.left = DestinationLeft;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
{
|
||||||
|
DestRect.right = (DestRect.right - DestRect.left) + DestinationLeft;
|
||||||
|
DestRect.left = DestinationLeft;
|
||||||
|
hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_DestinationLeft(IBasicVideo *iface, LONG *pDestinationLeft)
|
HRESULT WINAPI BaseControlVideoImpl_get_DestinationLeft(IBasicVideo *iface, LONG *pDestinationLeft)
|
||||||
|
@ -271,6 +349,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_DestinationLeft(IBasicVideo *iface, LONG
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationLeft);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationLeft);
|
||||||
|
if (!pDestinationLeft)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
*pDestinationLeft = DestRect.left;
|
*pDestinationLeft = DestRect.left;
|
||||||
|
|
||||||
|
@ -281,13 +361,19 @@ HRESULT WINAPI BaseControlVideoImpl_put_DestinationWidth(IBasicVideo *iface, LON
|
||||||
{
|
{
|
||||||
RECT DestRect;
|
RECT DestRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationWidth);
|
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationWidth);
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
DestRect.right = DestRect.left + DestinationWidth;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
{
|
||||||
|
DestRect.right = DestRect.left + DestinationWidth;
|
||||||
|
hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_DestinationWidth(IBasicVideo *iface, LONG *pDestinationWidth)
|
HRESULT WINAPI BaseControlVideoImpl_get_DestinationWidth(IBasicVideo *iface, LONG *pDestinationWidth)
|
||||||
|
@ -296,6 +382,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_DestinationWidth(IBasicVideo *iface, LON
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationWidth);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationWidth);
|
||||||
|
if (!pDestinationWidth)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
*pDestinationWidth = DestRect.right - DestRect.left;
|
*pDestinationWidth = DestRect.right - DestRect.left;
|
||||||
|
|
||||||
|
@ -306,13 +394,20 @@ HRESULT WINAPI BaseControlVideoImpl_put_DestinationTop(IBasicVideo *iface, LONG
|
||||||
{
|
{
|
||||||
RECT DestRect;
|
RECT DestRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationTop);
|
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationTop);
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
DestRect.top = DestinationTop;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
{
|
||||||
|
DestRect.bottom = (DestRect.bottom - DestRect.top) + DestinationTop;
|
||||||
|
DestRect.top = DestinationTop;
|
||||||
|
hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_DestinationTop(IBasicVideo *iface, LONG *pDestinationTop)
|
HRESULT WINAPI BaseControlVideoImpl_get_DestinationTop(IBasicVideo *iface, LONG *pDestinationTop)
|
||||||
|
@ -321,6 +416,8 @@ HRESULT WINAPI BaseControlVideoImpl_get_DestinationTop(IBasicVideo *iface, LONG
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationTop);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationTop);
|
||||||
|
if (!pDestinationTop)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
*pDestinationTop = DestRect.top;
|
*pDestinationTop = DestRect.top;
|
||||||
|
|
||||||
|
@ -331,13 +428,19 @@ HRESULT WINAPI BaseControlVideoImpl_put_DestinationHeight(IBasicVideo *iface, LO
|
||||||
{
|
{
|
||||||
RECT DestRect;
|
RECT DestRect;
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationHeight);
|
TRACE("(%p/%p)->(%d)\n", This, iface, DestinationHeight);
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
DestRect.right = DestRect.left + DestinationHeight;
|
if (SUCCEEDED(hr))
|
||||||
This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
{
|
||||||
|
DestRect.bottom = DestRect.top + DestinationHeight;
|
||||||
|
hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
|
||||||
|
}
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_get_DestinationHeight(IBasicVideo *iface, LONG *pDestinationHeight)
|
HRESULT WINAPI BaseControlVideoImpl_get_DestinationHeight(IBasicVideo *iface, LONG *pDestinationHeight)
|
||||||
|
@ -346,8 +449,10 @@ HRESULT WINAPI BaseControlVideoImpl_get_DestinationHeight(IBasicVideo *iface, LO
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationHeight);
|
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationHeight);
|
||||||
|
if (!pDestinationHeight)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
*pDestinationHeight = DestRect.right - DestRect.left;
|
*pDestinationHeight = DestRect.bottom - DestRect.top;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -360,9 +465,9 @@ HRESULT WINAPI BaseControlVideoImpl_SetSourcePosition(IBasicVideo *iface, LONG L
|
||||||
TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
|
TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
|
||||||
|
|
||||||
SetRect(&SourceRect, Left, Top, Left + Width, Top + Height);
|
SetRect(&SourceRect, Left, Top, Left + Width, Top + Height);
|
||||||
This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
if (FAILED(BaseControlVideoImpl_CheckSourceRect(This, &SourceRect)))
|
||||||
|
return E_INVALIDARG;
|
||||||
return S_OK;
|
return This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_GetSourcePosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
|
HRESULT WINAPI BaseControlVideoImpl_GetSourcePosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
|
||||||
|
@ -371,6 +476,8 @@ HRESULT WINAPI BaseControlVideoImpl_GetSourcePosition(IBasicVideo *iface, LONG *
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight);
|
TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight);
|
||||||
|
if (!pLeft || !pTop || !pWidth || !pHeight)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
|
||||||
|
|
||||||
*pLeft = SourceRect.left;
|
*pLeft = SourceRect.left;
|
||||||
|
@ -397,9 +504,9 @@ HRESULT WINAPI BaseControlVideoImpl_SetDestinationPosition(IBasicVideo *iface, L
|
||||||
TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
|
TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
|
||||||
|
|
||||||
SetRect(&DestRect, Left, Top, Left + Width, Top + Height);
|
SetRect(&DestRect, Left, Top, Left + Width, Top + Height);
|
||||||
This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
if (FAILED(BaseControlVideoImpl_CheckTargetRect(This, &DestRect)))
|
||||||
|
return E_INVALIDARG;
|
||||||
return S_OK;
|
return This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_GetDestinationPosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
|
HRESULT WINAPI BaseControlVideoImpl_GetDestinationPosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
|
||||||
|
@ -408,6 +515,8 @@ HRESULT WINAPI BaseControlVideoImpl_GetDestinationPosition(IBasicVideo *iface, L
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight);
|
TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight);
|
||||||
|
if (!pLeft || !pTop || !pWidth || !pHeight)
|
||||||
|
return E_POINTER;
|
||||||
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
|
||||||
|
|
||||||
*pLeft = DestRect.left;
|
*pLeft = DestRect.left;
|
||||||
|
@ -432,6 +541,8 @@ HRESULT WINAPI BaseControlVideoImpl_GetVideoSize(IBasicVideo *iface, LONG *pWidt
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight);
|
TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight);
|
||||||
|
if (!pWidth || !pHeight)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
vih = This->pFuncsTable->pfnGetVideoFormat(This);
|
vih = This->pFuncsTable->pfnGetVideoFormat(This);
|
||||||
*pHeight = vih->bmiHeader.biHeight;
|
*pHeight = vih->bmiHeader.biHeight;
|
||||||
|
@ -445,15 +556,18 @@ HRESULT WINAPI BaseControlVideoImpl_GetVideoPaletteEntries(IBasicVideo *iface, L
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%d, %d, %p, %p)\n", This, iface, StartIndex, Entries, pRetrieved, pPalette);
|
TRACE("(%p/%p)->(%d, %d, %p, %p)\n", This, iface, StartIndex, Entries, pRetrieved, pPalette);
|
||||||
|
if (!pRetrieved || !pPalette)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
if (pRetrieved)
|
*pRetrieved = 0;
|
||||||
*pRetrieved = 0;
|
|
||||||
return VFW_E_NO_PALETTE_AVAILABLE;
|
return VFW_E_NO_PALETTE_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI BaseControlVideoImpl_GetCurrentImage(IBasicVideo *iface, LONG *pBufferSize, LONG *pDIBImage)
|
HRESULT WINAPI BaseControlVideoImpl_GetCurrentImage(IBasicVideo *iface, LONG *pBufferSize, LONG *pDIBImage)
|
||||||
{
|
{
|
||||||
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
BaseControlVideo *This = impl_from_IBasicVideo(iface);
|
||||||
|
if (!pBufferSize || !pDIBImage)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
return This->pFuncsTable->pfnGetStaticImage(This, pBufferSize, pDIBImage);
|
return This->pFuncsTable->pfnGetStaticImage(This, pBufferSize, pDIBImage);
|
||||||
}
|
}
|
||||||
|
|
2
sdk/lib/3rdparty/strmbase/window.c
vendored
2
sdk/lib/3rdparty/strmbase/window.c
vendored
|
@ -285,7 +285,7 @@ HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG W
|
||||||
|
|
||||||
TRACE("(%p/%p)->(%x -> %x)\n", This, iface, old, WindowStyle);
|
TRACE("(%p/%p)->(%x -> %x)\n", This, iface, old, WindowStyle);
|
||||||
|
|
||||||
if (WindowStyle & (WS_DISABLED|WS_HSCROLL|WS_ICONIC|WS_MAXIMIZE|WS_MINIMIZE|WS_VSCROLL))
|
if (WindowStyle & (WS_DISABLED|WS_HSCROLL|WS_MAXIMIZE|WS_MINIMIZE|WS_VSCROLL))
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
SetWindowLongW(This->baseWindow.hWnd, GWL_STYLE, WindowStyle);
|
SetWindowLongW(This->baseWindow.hWnd, GWL_STYLE, WindowStyle);
|
||||||
|
|
Loading…
Reference in a new issue