- Sync quartz with Wine head

svn path=/trunk/; revision=40045
This commit is contained in:
Dmitry Chapyshev 2009-03-15 19:03:42 +00:00
parent ea9fc099f5
commit 57e8c21128
26 changed files with 871 additions and 888 deletions

View file

@ -262,7 +262,7 @@ static HRESULT ACMWrapper_ConnectInput(InputPin *pin, const AM_MEDIA_TYPE * pmt)
This->pWfOut = (WAVEFORMATEX*)outpmt->pbFormat; This->pWfOut = (WAVEFORMATEX*)outpmt->pbFormat;
This->pWfOut->wFormatTag = WAVE_FORMAT_PCM; This->pWfOut->wFormatTag = WAVE_FORMAT_PCM;
This->pWfOut->wBitsPerSample = 16; This->pWfOut->wBitsPerSample = 16;
This->pWfOut->nBlockAlign = 4; This->pWfOut->nBlockAlign = This->pWfOut->wBitsPerSample * This->pWfOut->nChannels / 8;
This->pWfOut->cbSize = 0; This->pWfOut->cbSize = 0;
This->pWfOut->nAvgBytesPerSec = This->pWfOut->nChannels * This->pWfOut->nSamplesPerSec This->pWfOut->nAvgBytesPerSec = This->pWfOut->nChannels * This->pWfOut->nSamplesPerSec
* (This->pWfOut->wBitsPerSample/8); * (This->pWfOut->wBitsPerSample/8);
@ -331,7 +331,7 @@ HRESULT ACMWrapper_create(IUnknown * pUnkOuter, LPVOID * ppv)
if (FAILED(hr)) if (FAILED(hr))
return hr; return hr;
*ppv = (LPVOID)This; *ppv = This;
This->lasttime_real = This->lasttime_sent = -1; This->lasttime_real = This->lasttime_sent = -1;
return hr; return hr;

View file

@ -336,7 +336,7 @@ HRESULT AVIDec_create(IUnknown * pUnkOuter, LPVOID * ppv)
if (FAILED(hr)) if (FAILED(hr))
return hr; return hr;
*ppv = (LPVOID)This; *ppv = This;
return hr; return hr;
} }

View file

@ -359,8 +359,10 @@ static DWORD WINAPI AVISplitter_thread_reader(LPVOID data)
AVISplitter_SendEndOfFile(This, streamnumber); AVISplitter_SendEndOfFile(This, streamnumber);
} while (hr == S_OK); } while (hr == S_OK);
if (hr != S_FALSE)
FIXME("Thread %u terminated with hr %08x!\n", streamnumber, hr); FIXME("Thread %u terminated with hr %08x!\n", streamnumber, hr);
else
TRACE("Thread %u terminated properly\n", streamnumber);
return hr; return hr;
} }
@ -401,9 +403,9 @@ static HRESULT AVISplitter_done_process(LPVOID iface);
*/ */
static HRESULT AVISplitter_first_request(LPVOID iface) static HRESULT AVISplitter_first_request(LPVOID iface)
{ {
AVISplitterImpl *This = (AVISplitterImpl *)iface; AVISplitterImpl *This = iface;
HRESULT hr = S_OK; HRESULT hr = S_OK;
int x; DWORD x;
IMediaSample *sample = NULL; IMediaSample *sample = NULL;
BOOL have_sample = FALSE; BOOL have_sample = FALSE;
@ -447,10 +449,12 @@ static HRESULT AVISplitter_first_request(LPVOID iface)
/* Could be an EOF instead */ /* Could be an EOF instead */
have_sample = (hr == S_OK); have_sample = (hr == S_OK);
if (FAILED(hr))
break;
if (hr == S_FALSE) if (hr == S_FALSE)
AVISplitter_SendEndOfFile(This, x); AVISplitter_SendEndOfFile(This, x);
if (FAILED(hr) && hr != VFW_E_NOT_CONNECTED)
break;
hr = S_OK;
} }
/* FIXME: Don't do this for each pin that sent an EOF */ /* FIXME: Don't do this for each pin that sent an EOF */
@ -470,7 +474,7 @@ static HRESULT AVISplitter_first_request(LPVOID iface)
args->This = This; args->This = This;
args->stream = x; args->stream = x;
This->streams[x].thread = CreateThread(NULL, 0, AVISplitter_thread_reader, args, 0, &tid); This->streams[x].thread = CreateThread(NULL, 0, AVISplitter_thread_reader, args, 0, &tid);
FIXME("Created stream %u thread 0x%08x\n", x, tid); TRACE("Created stream %u thread 0x%08x\n", x, tid);
} }
if (FAILED(hr)) if (FAILED(hr))
@ -489,7 +493,7 @@ static HRESULT AVISplitter_done_process(LPVOID iface)
{ {
StreamData *stream = This->streams + x; StreamData *stream = This->streams + x;
FIXME("Waiting for %u to terminate\n", x); TRACE("Waiting for %u to terminate\n", x);
/* Make the thread return first */ /* Make the thread return first */
SetEvent(stream->packet_queued); SetEvent(stream->packet_queued);
assert(WaitForSingleObject(stream->thread, 100000) != WAIT_TIMEOUT); assert(WaitForSingleObject(stream->thread, 100000) != WAIT_TIMEOUT);
@ -502,7 +506,7 @@ static HRESULT AVISplitter_done_process(LPVOID iface)
ResetEvent(stream->packet_queued); ResetEvent(stream->packet_queued);
} }
FIXME("All threads are now terminated\n"); TRACE("All threads are now terminated\n");
return S_OK; return S_OK;
} }
@ -517,7 +521,8 @@ static HRESULT AVISplitter_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt)
static HRESULT AVISplitter_ProcessIndex(AVISplitterImpl *This, AVISTDINDEX **index, LONGLONG qwOffset, DWORD cb) static HRESULT AVISplitter_ProcessIndex(AVISplitterImpl *This, AVISTDINDEX **index, LONGLONG qwOffset, DWORD cb)
{ {
AVISTDINDEX *pIndex; AVISTDINDEX *pIndex;
int x, rest; DWORD x;
int rest;
*index = NULL; *index = NULL;
if (cb < sizeof(AVISTDINDEX)) if (cb < sizeof(AVISTDINDEX))
@ -573,7 +578,7 @@ static HRESULT AVISplitter_ProcessOldIndex(AVISplitterImpl *This)
ULONGLONG mov_pos = BYTES_FROM_MEDIATIME(This->CurrentChunkOffset) - sizeof(DWORD); ULONGLONG mov_pos = BYTES_FROM_MEDIATIME(This->CurrentChunkOffset) - sizeof(DWORD);
AVIOLDINDEX *pAviOldIndex = This->oldindex; AVIOLDINDEX *pAviOldIndex = This->oldindex;
int relative = -1; int relative = -1;
int x; DWORD x;
for (x = 0; x < pAviOldIndex->cb / sizeof(pAviOldIndex->aIndex[0]); ++x) for (x = 0; x < pAviOldIndex->cb / sizeof(pAviOldIndex->aIndex[0]); ++x)
{ {
@ -735,7 +740,7 @@ static HRESULT AVISplitter_ProcessStreamList(AVISplitterImpl * This, const BYTE
pvi = (VIDEOINFOHEADER *)amt.pbFormat; pvi = (VIDEOINFOHEADER *)amt.pbFormat;
pvi->AvgTimePerFrame = (LONGLONG)(10000000.0 / fSamplesPerSec); pvi->AvgTimePerFrame = (LONGLONG)(10000000.0 / fSamplesPerSec);
CopyMemory(&pvi->bmiHeader, (const BYTE *)(pChunk + 1), pChunk->cb); CopyMemory(&pvi->bmiHeader, pChunk + 1, pChunk->cb);
if (pvi->bmiHeader.biCompression) if (pvi->bmiHeader.biCompression)
amt.subtype.Data1 = pvi->bmiHeader.biCompression; amt.subtype.Data1 = pvi->bmiHeader.biCompression;
} }
@ -746,13 +751,13 @@ static HRESULT AVISplitter_ProcessStreamList(AVISplitterImpl * This, const BYTE
amt.cbFormat = sizeof(WAVEFORMATEX); amt.cbFormat = sizeof(WAVEFORMATEX);
amt.pbFormat = CoTaskMemAlloc(amt.cbFormat); amt.pbFormat = CoTaskMemAlloc(amt.cbFormat);
ZeroMemory(amt.pbFormat, amt.cbFormat); ZeroMemory(amt.pbFormat, amt.cbFormat);
CopyMemory(amt.pbFormat, (const BYTE *)(pChunk + 1), pChunk->cb); CopyMemory(amt.pbFormat, pChunk + 1, pChunk->cb);
} }
else else
{ {
amt.cbFormat = pChunk->cb; amt.cbFormat = pChunk->cb;
amt.pbFormat = CoTaskMemAlloc(amt.cbFormat); amt.pbFormat = CoTaskMemAlloc(amt.cbFormat);
CopyMemory(amt.pbFormat, (const BYTE *)(pChunk + 1), amt.cbFormat); CopyMemory(amt.pbFormat, pChunk + 1, amt.cbFormat);
} }
break; break;
case ckidSTREAMNAME: case ckidSTREAMNAME:
@ -769,7 +774,7 @@ static HRESULT AVISplitter_ProcessStreamList(AVISplitterImpl * This, const BYTE
case ckidAVISUPERINDEX: case ckidAVISUPERINDEX:
{ {
const AVISUPERINDEX *pIndex = (const AVISUPERINDEX *)pChunk; const AVISUPERINDEX *pIndex = (const AVISUPERINDEX *)pChunk;
int x; DWORD x;
long rest = pIndex->cb - sizeof(AVISUPERINDEX) + sizeof(RIFFCHUNK) + sizeof(pIndex->aIndex[0]) * ANYSIZE_ARRAY; long rest = pIndex->cb - sizeof(AVISUPERINDEX) + sizeof(RIFFCHUNK) + sizeof(pIndex->aIndex[0]) * ANYSIZE_ARRAY;
if (pIndex->cb < sizeof(AVISUPERINDEX) - sizeof(RIFFCHUNK)) if (pIndex->cb < sizeof(AVISUPERINDEX) - sizeof(RIFFCHUNK))
@ -884,7 +889,7 @@ static HRESULT AVISplitter_ProcessODML(AVISplitterImpl * This, const BYTE * pDat
static HRESULT AVISplitter_InitializeStreams(AVISplitterImpl *This) static HRESULT AVISplitter_InitializeStreams(AVISplitterImpl *This)
{ {
int x; unsigned int x;
if (This->oldindex) if (This->oldindex)
{ {
@ -908,7 +913,7 @@ static HRESULT AVISplitter_InitializeStreams(AVISplitterImpl *This)
FIXME("Stream id %s ignored\n", debugstr_an((char*)&This->oldindex->aIndex[n].dwChunkId, 4)); FIXME("Stream id %s ignored\n", debugstr_an((char*)&This->oldindex->aIndex[n].dwChunkId, 4));
continue; continue;
} }
if (This->streams[streamId].pos == ~0) if (This->streams[streamId].pos == ~0U)
This->streams[streamId].pos = n; This->streams[streamId].pos = n;
if (This->streams[streamId].streamheader.dwSampleSize) if (This->streams[streamId].streamheader.dwSampleSize)
@ -941,7 +946,7 @@ static HRESULT AVISplitter_InitializeStreams(AVISplitterImpl *This)
for (x = 0; x < This->Parser.cStreams; ++x) for (x = 0; x < This->Parser.cStreams; ++x)
{ {
StreamData *stream = This->streams + x; StreamData *stream = This->streams + x;
int y; DWORD y;
DWORD64 frames = 0; DWORD64 frames = 0;
stream->seek = 1; stream->seek = 1;
@ -954,7 +959,7 @@ static HRESULT AVISplitter_InitializeStreams(AVISplitterImpl *This)
{ {
if (stream->streamheader.dwSampleSize) if (stream->streamheader.dwSampleSize)
{ {
int z; DWORD z;
for (z = 0; z < stream->stdindex[y]->nEntriesInUse; ++z) for (z = 0; z < stream->stdindex[y]->nEntriesInUse; ++z)
{ {
@ -997,7 +1002,7 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin,
BYTE * pBuffer; BYTE * pBuffer;
RIFFCHUNK * pCurrentChunk; RIFFCHUNK * pCurrentChunk;
LONGLONG total, avail; LONGLONG total, avail;
int x; ULONG x;
DWORD indexes; DWORD indexes;
AVISplitterImpl * pAviSplit = (AVISplitterImpl *)This->pin.pinInfo.pFilter; AVISplitterImpl * pAviSplit = (AVISplitterImpl *)This->pin.pinInfo.pFilter;
@ -1076,7 +1081,7 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin,
pos += sizeof(RIFFCHUNK) + list.cb; pos += sizeof(RIFFCHUNK) + list.cb;
hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list); hr = IAsyncReader_SyncRead(This->pReader, pos, sizeof(list), (BYTE *)&list);
while (list.fcc == ckidAVIPADDING || (list.fcc == FOURCC_LIST && list.fccListType == ckidINFO)) while (list.fcc == ckidAVIPADDING || (list.fcc == FOURCC_LIST && list.fccListType != listtypeAVIMOVIE))
{ {
pos += sizeof(RIFFCHUNK) + list.cb; pos += sizeof(RIFFCHUNK) + list.cb;
@ -1188,10 +1193,10 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin,
static HRESULT AVISplitter_Flush(LPVOID iface) static HRESULT AVISplitter_Flush(LPVOID iface)
{ {
AVISplitterImpl *This = (AVISplitterImpl*)iface; AVISplitterImpl *This = iface;
DWORD x; DWORD x;
ERR("(%p)->()\n", This); TRACE("(%p)->()\n", This);
for (x = 0; x < This->Parser.cStreams; ++x) for (x = 0; x < This->Parser.cStreams; ++x)
{ {
@ -1211,7 +1216,7 @@ static HRESULT AVISplitter_Flush(LPVOID iface)
static HRESULT AVISplitter_Disconnect(LPVOID iface) static HRESULT AVISplitter_Disconnect(LPVOID iface)
{ {
AVISplitterImpl *This = iface; AVISplitterImpl *This = iface;
int x; ULONG x;
/* TODO: Remove other memory that's allocated during connect */ /* TODO: Remove other memory that's allocated during connect */
CoTaskMemFree(This->oldindex); CoTaskMemFree(This->oldindex);
@ -1219,7 +1224,7 @@ static HRESULT AVISplitter_Disconnect(LPVOID iface)
for (x = 0; x < This->Parser.cStreams; ++x) for (x = 0; x < This->Parser.cStreams; ++x)
{ {
int i; DWORD i;
StreamData *stream = &This->streams[x]; StreamData *stream = &This->streams[x];
@ -1428,7 +1433,7 @@ HRESULT AVISplitter_create(IUnknown * pUnkOuter, LPVOID * ppv)
if (FAILED(hr)) if (FAILED(hr))
return hr; return hr;
*ppv = (LPVOID)This; *ppv = This;
return hr; return hr;
} }

View file

@ -103,7 +103,7 @@ static const IUnknownVtbl IInner_VTable =
}; };
/* Generic functions for aggregation */ /* Generic functions for aggregation */
static HRESULT WINAPI SeekOuter_QueryInterface(PassThruImpl *This, REFIID riid, LPVOID *ppv) static HRESULT SeekOuter_QueryInterface(PassThruImpl *This, REFIID riid, LPVOID *ppv)
{ {
if (This->bAggregatable) if (This->bAggregatable)
This->bUnkOuterValid = TRUE; This->bUnkOuterValid = TRUE;
@ -131,14 +131,14 @@ static HRESULT WINAPI SeekOuter_QueryInterface(PassThruImpl *This, REFIID riid,
return IUnknown_QueryInterface((IUnknown *)&(This->IInner_vtbl), riid, ppv); return IUnknown_QueryInterface((IUnknown *)&(This->IInner_vtbl), riid, ppv);
} }
static ULONG WINAPI SeekOuter_AddRef(PassThruImpl *This) static ULONG SeekOuter_AddRef(PassThruImpl *This)
{ {
if (This->pUnkOuter && This->bUnkOuterValid) if (This->pUnkOuter && This->bUnkOuterValid)
return IUnknown_AddRef(This->pUnkOuter); return IUnknown_AddRef(This->pUnkOuter);
return IUnknown_AddRef((IUnknown *)&(This->IInner_vtbl)); return IUnknown_AddRef((IUnknown *)&(This->IInner_vtbl));
} }
static ULONG WINAPI SeekOuter_Release(PassThruImpl *This) static ULONG SeekOuter_Release(PassThruImpl *This)
{ {
if (This->pUnkOuter && This->bUnkOuterValid) if (This->pUnkOuter && This->bUnkOuterValid)
return IUnknown_Release(This->pUnkOuter); return IUnknown_Release(This->pUnkOuter);
@ -591,9 +591,9 @@ HRESULT WINAPI MediaSeekingImpl_SetPositions(IMediaSeeking * iface, LONGLONG * p
This->llCurrent = llNewCurrent; This->llCurrent = llNewCurrent;
This->llStop = llNewStop; This->llStop = llNewStop;
if (dwCurrentFlags & AM_SEEKING_ReturnTime) if (pCurrent && (dwCurrentFlags & AM_SEEKING_ReturnTime))
*pCurrent = llNewCurrent; *pCurrent = llNewCurrent;
if (dwStopFlags & AM_SEEKING_ReturnTime) if (pStop && (dwStopFlags & AM_SEEKING_ReturnTime))
*pStop = llNewStop; *pStop = llNewStop;
ForwardCmdSeek(This->crst, This->pUserData, fwd_setposition, &args); ForwardCmdSeek(This->crst, This->pUserData, fwd_setposition, &args);

View file

@ -233,11 +233,12 @@ static HRESULT DSoundRender_SendSampleData(DSoundRenderImpl* This, const BYTE *d
static HRESULT DSoundRender_Sample(LPVOID iface, IMediaSample * pSample) static HRESULT DSoundRender_Sample(LPVOID iface, IMediaSample * pSample)
{ {
DSoundRenderImpl *This = (DSoundRenderImpl *)iface; DSoundRenderImpl *This = iface;
LPBYTE pbSrcStream = NULL; LPBYTE pbSrcStream = NULL;
long cbSrcStream = 0; long cbSrcStream = 0;
REFERENCE_TIME tStart, tStop; REFERENCE_TIME tStart, tStop;
HRESULT hr; HRESULT hr;
AM_MEDIA_TYPE *amt;
TRACE("%p %p\n", iface, pSample); TRACE("%p %p\n", iface, pSample);
@ -259,6 +260,39 @@ static HRESULT DSoundRender_Sample(LPVOID iface, IMediaSample * pSample)
return VFW_E_WRONG_STATE; return VFW_E_WRONG_STATE;
} }
if (IMediaSample_GetMediaType(pSample, &amt) == S_OK)
{
AM_MEDIA_TYPE *orig = &This->pInputPin->pin.mtCurrent;
WAVEFORMATEX *origfmt = (WAVEFORMATEX *)orig->pbFormat;
WAVEFORMATEX *newfmt = (WAVEFORMATEX *)amt->pbFormat;
if (origfmt->wFormatTag == newfmt->wFormatTag &&
origfmt->nChannels == newfmt->nChannels &&
origfmt->nBlockAlign == newfmt->nBlockAlign &&
origfmt->wBitsPerSample == newfmt->wBitsPerSample &&
origfmt->cbSize == newfmt->cbSize)
{
if (origfmt->nSamplesPerSec != newfmt->nSamplesPerSec)
{
hr = IDirectSoundBuffer_SetFrequency(This->dsbuffer,
newfmt->nSamplesPerSec);
if (FAILED(hr))
{
LeaveCriticalSection(&This->csFilter);
return VFW_E_TYPE_NOT_ACCEPTED;
}
FreeMediaType(orig);
CopyMediaType(orig, amt);
IMediaSample_SetMediaType(pSample, NULL);
}
}
else
{
LeaveCriticalSection(&This->csFilter);
return VFW_E_TYPE_NOT_ACCEPTED;
}
}
SetEvent(This->state_change); SetEvent(This->state_change);
hr = IMediaSample_GetPointer(pSample, &pbSrcStream); hr = IMediaSample_GetPointer(pSample, &pbSrcStream);
@ -404,7 +438,7 @@ HRESULT DSoundRender_create(IUnknown * pUnkOuter, LPVOID * ppv)
return HRESULT_FROM_WIN32(GetLastError()); return HRESULT_FROM_WIN32(GetLastError());
} }
*ppv = (LPVOID)pDSoundRender; *ppv = pDSoundRender;
} }
else else
{ {
@ -426,17 +460,17 @@ static HRESULT WINAPI DSoundRender_QueryInterface(IBaseFilter * iface, REFIID ri
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IPersist)) else if (IsEqualIID(riid, &IID_IPersist))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaFilter)) else if (IsEqualIID(riid, &IID_IMediaFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBaseFilter)) else if (IsEqualIID(riid, &IID_IBaseFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBasicAudio)) else if (IsEqualIID(riid, &IID_IBasicAudio))
*ppv = (LPVOID)&(This->IBasicAudio_vtbl); *ppv = &This->IBasicAudio_vtbl;
else if (IsEqualIID(riid, &IID_IReferenceClock)) else if (IsEqualIID(riid, &IID_IReferenceClock))
*ppv = (LPVOID)&(This->IReferenceClock_vtbl); *ppv = &This->IReferenceClock_vtbl;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
*ppv = &This->mediaSeeking.lpVtbl; *ppv = &This->mediaSeeking.lpVtbl;
@ -1073,10 +1107,10 @@ static HRESULT WINAPI Basicaudio_Invoke(IBasicAudio *iface,
/*** IBasicAudio methods ***/ /*** IBasicAudio methods ***/
static HRESULT WINAPI Basicaudio_put_Volume(IBasicAudio *iface, static HRESULT WINAPI Basicaudio_put_Volume(IBasicAudio *iface,
long lVolume) { LONG lVolume) {
ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface); ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, lVolume); TRACE("(%p/%p)->(%d)\n", This, iface, lVolume);
if (lVolume > DSBVOLUME_MAX || lVolume < DSBVOLUME_MIN) if (lVolume > DSBVOLUME_MAX || lVolume < DSBVOLUME_MIN)
return E_INVALIDARG; return E_INVALIDARG;
@ -1091,7 +1125,7 @@ static HRESULT WINAPI Basicaudio_put_Volume(IBasicAudio *iface,
} }
static HRESULT WINAPI Basicaudio_get_Volume(IBasicAudio *iface, static HRESULT WINAPI Basicaudio_get_Volume(IBasicAudio *iface,
long *plVolume) { LONG *plVolume) {
ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface); ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, plVolume); TRACE("(%p/%p)->(%p)\n", This, iface, plVolume);
@ -1104,10 +1138,10 @@ static HRESULT WINAPI Basicaudio_get_Volume(IBasicAudio *iface,
} }
static HRESULT WINAPI Basicaudio_put_Balance(IBasicAudio *iface, static HRESULT WINAPI Basicaudio_put_Balance(IBasicAudio *iface,
long lBalance) { LONG lBalance) {
ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface); ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, lBalance); TRACE("(%p/%p)->(%d)\n", This, iface, lBalance);
if (lBalance < DSBPAN_LEFT || lBalance > DSBPAN_RIGHT) if (lBalance < DSBPAN_LEFT || lBalance > DSBPAN_RIGHT)
return E_INVALIDARG; return E_INVALIDARG;
@ -1122,7 +1156,7 @@ static HRESULT WINAPI Basicaudio_put_Balance(IBasicAudio *iface,
} }
static HRESULT WINAPI Basicaudio_get_Balance(IBasicAudio *iface, static HRESULT WINAPI Basicaudio_get_Balance(IBasicAudio *iface,
long *plBalance) { LONG *plBalance) {
ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface); ICOM_THIS_MULTI(DSoundRenderImpl, IBasicAudio_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, plBalance); TRACE("(%p/%p)->(%p)\n", This, iface, plBalance);

View file

@ -74,9 +74,9 @@ static HRESULT WINAPI IEnumFiltersImpl_QueryInterface(IEnumFilters * iface, REFI
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IEnumFilters)) else if (IsEqualIID(riid, &IID_IEnumFilters))
*ppv = (LPVOID)iface; *ppv = iface;
if (*ppv) if (*ppv)
{ {

View file

@ -134,9 +134,9 @@ static HRESULT WINAPI IEnumMediaTypesImpl_QueryInterface(IEnumMediaTypes * iface
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IEnumMediaTypes)) else if (IsEqualIID(riid, &IID_IEnumMediaTypes))
*ppv = (LPVOID)iface; *ppv = iface;
if (*ppv) if (*ppv)
{ {
@ -168,7 +168,7 @@ static ULONG WINAPI IEnumMediaTypesImpl_Release(IEnumMediaTypes * iface)
if (!refCount) if (!refCount)
{ {
int i; ULONG i;
for (i = 0; i < This->enumMediaDetails.cMediaTypes; i++) for (i = 0; i < This->enumMediaDetails.cMediaTypes; i++)
if (This->enumMediaDetails.pMediaTypes[i].pbFormat) if (This->enumMediaDetails.pMediaTypes[i].pbFormat)
CoTaskMemFree(This->enumMediaDetails.pMediaTypes[i].pbFormat); CoTaskMemFree(This->enumMediaDetails.pMediaTypes[i].pbFormat);

View file

@ -84,7 +84,7 @@ static HRESULT WINAPI EnumMonikerImpl_QueryInterface(
if (IsEqualGUID(riid, &IID_IUnknown) || if (IsEqualGUID(riid, &IID_IUnknown) ||
IsEqualGUID(riid, &IID_IEnumMoniker)) IsEqualGUID(riid, &IID_IEnumMoniker))
{ {
*ppvObj = (LPVOID)iface; *ppvObj = iface;
EnumMonikerImpl_AddRef(iface); EnumMonikerImpl_AddRef(iface);
return S_OK; return S_OK;
} }

View file

@ -70,9 +70,9 @@ static HRESULT WINAPI IEnumPinsImpl_QueryInterface(IEnumPins * iface, REFIID rii
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IEnumPins)) else if (IsEqualIID(riid, &IID_IEnumPins))
*ppv = (LPVOID)iface; *ppv = iface;
if (*ppv) if (*ppv)
{ {

View file

@ -97,9 +97,9 @@ static HRESULT WINAPI IEnumRegFiltersImpl_QueryInterface(IEnumRegFilters * iface
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IEnumRegFilters)) else if (IsEqualIID(riid, &IID_IEnumRegFilters))
*ppv = (LPVOID)iface; *ppv = iface;
if (*ppv) if (*ppv)
{ {

View file

@ -168,12 +168,10 @@ static HRESULT process_pattern_string(LPCWSTR wszPatternString, IAsyncReader * p
if (!(wszPatternString = strchrW(wszPatternString, ','))) if (!(wszPatternString = strchrW(wszPatternString, ',')))
hr = E_INVALIDARG; hr = E_INVALIDARG;
wszPatternString++; /* skip ',' */
if (hr == S_OK) if (hr == S_OK)
{ {
for ( ; !isxdigitW(*wszPatternString) && (*wszPatternString != ','); wszPatternString++) wszPatternString++; /* skip ',' */
; while (!isxdigitW(*wszPatternString) && (*wszPatternString != ',')) wszPatternString++;
for (strpos = 0; isxdigitW(*wszPatternString) && (strpos/2 < ulBytes); wszPatternString++, strpos++) for (strpos = 0; isxdigitW(*wszPatternString) && (strpos/2 < ulBytes); wszPatternString++, strpos++)
{ {
@ -363,7 +361,7 @@ HRESULT AsyncReader_create(IUnknown * pUnkOuter, LPVOID * ppv)
pAsyncRead->pszFileName = NULL; pAsyncRead->pszFileName = NULL;
pAsyncRead->pmt = NULL; pAsyncRead->pmt = NULL;
*ppv = (LPVOID)pAsyncRead; *ppv = pAsyncRead;
TRACE("-- created at %p\n", pAsyncRead); TRACE("-- created at %p\n", pAsyncRead);
@ -381,15 +379,15 @@ static HRESULT WINAPI AsyncReader_QueryInterface(IBaseFilter * iface, REFIID rii
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IPersist)) else if (IsEqualIID(riid, &IID_IPersist))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaFilter)) else if (IsEqualIID(riid, &IID_IMediaFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBaseFilter)) else if (IsEqualIID(riid, &IID_IBaseFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IFileSourceFilter)) else if (IsEqualIID(riid, &IID_IFileSourceFilter))
*ppv = (LPVOID)(&This->lpVtblFSF); *ppv = &This->lpVtblFSF;
if (*ppv) if (*ppv)
{ {
@ -533,7 +531,7 @@ static HRESULT AsyncReader_GetPin(IBaseFilter *iface, ULONG pos, IPin **pin, DWO
if (pos >= 1 || !This->pOutputPin) if (pos >= 1 || !This->pOutputPin)
return S_FALSE; return S_FALSE;
*pin = (IPin *)This->pOutputPin; *pin = This->pOutputPin;
IPin_AddRef(*pin); IPin_AddRef(*pin);
return S_OK; return S_OK;
} }
@ -783,7 +781,7 @@ static inline FileAsyncReader *impl_from_IAsyncReader( IAsyncReader *iface )
static HRESULT AcceptProcAFR(LPVOID iface, const AM_MEDIA_TYPE *pmt) static HRESULT AcceptProcAFR(LPVOID iface, const AM_MEDIA_TYPE *pmt)
{ {
AsyncReader *This = (AsyncReader *)iface; AsyncReader *This = iface;
FIXME("(%p, %p)\n", iface, pmt); FIXME("(%p, %p)\n", iface, pmt);
@ -805,11 +803,11 @@ static HRESULT WINAPI FileAsyncReaderPin_QueryInterface(IPin * iface, REFIID rii
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IPin)) else if (IsEqualIID(riid, &IID_IPin))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IAsyncReader)) else if (IsEqualIID(riid, &IID_IAsyncReader))
*ppv = (LPVOID)&This->lpVtblAR; *ppv = &This->lpVtblAR;
if (*ppv) if (*ppv)
{ {
@ -1182,8 +1180,12 @@ static HRESULT WINAPI FileAsyncReader_WaitForNext(IAsyncReader * iface, DWORD dw
if (buffer >= This->samples) if (buffer >= This->samples)
{ {
if (buffer != This->samples) if (buffer != This->samples)
{
FIXME("Returned: %u (%08x)\n", buffer, GetLastError()); FIXME("Returned: %u (%08x)\n", buffer, GetLastError());
hr = VFW_E_TIMEOUT; hr = VFW_E_TIMEOUT;
}
else
hr = VFW_E_WRONG_STATE;
buffer = ~0; buffer = ~0;
} }
else else

File diff suppressed because it is too large Load diff

View file

@ -81,7 +81,7 @@ struct IAMFilterData
{ {
const IAMFilterDataVtbl *lpVtbl; const IAMFilterDataVtbl *lpVtbl;
}; };
const GUID IID_IAMFilterData = { static const GUID IID_IAMFilterData = {
0x97f7c4d4, 0x547b, 0x4a5f, { 0x83,0x32, 0x53,0x64,0x30,0xad,0x2e,0x4d } 0x97f7c4d4, 0x547b, 0x4a5f, { 0x83,0x32, 0x53,0x64,0x30,0xad,0x2e,0x4d }
}; };
@ -560,20 +560,20 @@ static HRESULT FM2_WriteFilterData(const REGFILTER2 * prf2, BYTE **ppData, ULONG
for (j = 0; j < rgPin2.nMediaTypes; j++) for (j = 0; j < rgPin2.nMediaTypes; j++)
{ {
struct REG_TYPE rt; struct REG_TYPE rt;
const CLSID * clsMinorType = rgPin2.lpMediaType[j].clsMinorType ? rgPin2.lpMediaType[j].clsMinorType : &MEDIASUBTYPE_NULL;
rt.signature[0] = '0'; rt.signature[0] = '0';
rt.signature[1] = 't'; rt.signature[1] = 't';
rt.signature[2] = 'y'; rt.signature[2] = 'y';
rt.signature[3] = '3'; rt.signature[3] = '3';
rt.signature[0] += j; rt.signature[0] += j;
rt.dwUnused = 0; rt.dwUnused = 0;
rt.dwOffsetMajor = find_data(&clsidStore, (const BYTE*)rgPin2.lpMediaType[j].clsMajorType, sizeof(CLSID)); rt.dwOffsetMajor = find_data(&clsidStore, (const BYTE*)rgPin2.lpMediaType[j].clsMajorType, sizeof(CLSID));
if (rt.dwOffsetMajor == -1) if (rt.dwOffsetMajor == -1)
rt.dwOffsetMajor = add_data(&clsidStore, (const BYTE*)rgPin2.lpMediaType[j].clsMajorType, sizeof(CLSID)); rt.dwOffsetMajor = add_data(&clsidStore, (const BYTE*)rgPin2.lpMediaType[j].clsMajorType, sizeof(CLSID));
rt.dwOffsetMajor += size; rt.dwOffsetMajor += size;
rt.dwOffsetMinor = find_data(&clsidStore, (const BYTE*)rgPin2.lpMediaType[j].clsMinorType, sizeof(CLSID)); rt.dwOffsetMinor = find_data(&clsidStore, (const BYTE*)clsMinorType, sizeof(CLSID));
if (rt.dwOffsetMinor == -1) if (rt.dwOffsetMinor == -1)
rt.dwOffsetMinor = add_data(&clsidStore, (const BYTE*)rgPin2.lpMediaType[j].clsMinorType, sizeof(CLSID)); rt.dwOffsetMinor = add_data(&clsidStore, (const BYTE*)clsMinorType, sizeof(CLSID));
rt.dwOffsetMinor += size; rt.dwOffsetMinor += size;
add_data(&mainStore, (LPBYTE)&rt, sizeof(rt)); add_data(&mainStore, (LPBYTE)&rt, sizeof(rt));
@ -970,8 +970,8 @@ static BOOL MatchTypes(
/* internal helper function for qsort of MONIKER_MERIT array */ /* internal helper function for qsort of MONIKER_MERIT array */
static int mm_compare(const void * left, const void * right) static int mm_compare(const void * left, const void * right)
{ {
const struct MONIKER_MERIT * mmLeft = (const struct MONIKER_MERIT *)left; const struct MONIKER_MERIT * mmLeft = left;
const struct MONIKER_MERIT * mmRight = (const struct MONIKER_MERIT *)right; const struct MONIKER_MERIT * mmRight = right;
if (mmLeft->dwMerit == mmRight->dwMerit) if (mmLeft->dwMerit == mmRight->dwMerit)
return 0; return 0;
@ -1297,7 +1297,7 @@ static HRESULT WINAPI FilterMapper_EnumMatchingFilters(
NULL, NULL,
&GUID_NULL); &GUID_NULL);
if (!SUCCEEDED(hr)) if (FAILED(hr))
return hr; return hr;
while(IEnumMoniker_Next(ppEnumMoniker, 1, &IMon, &nb) == S_OK) while(IEnumMoniker_Next(ppEnumMoniker, 1, &IMon, &nb) == S_OK)
@ -1346,7 +1346,7 @@ static HRESULT WINAPI FilterMapper_EnumMatchingFilters(
if (SUCCEEDED(hrSub)) if (SUCCEEDED(hrSub))
{ {
len = (strlenW((WCHAR*)V_UNION(&var, bstrVal))+1) * sizeof(WCHAR); len = (strlenW(V_UNION(&var, bstrVal))+1) * sizeof(WCHAR);
if (!(regfilters[idx].Name = CoTaskMemAlloc(len*2))) if (!(regfilters[idx].Name = CoTaskMemAlloc(len*2)))
hr = E_OUTOFMEMORY; hr = E_OUTOFMEMORY;
} }
@ -1384,7 +1384,7 @@ static HRESULT WINAPI FilterMapper_RegisterFilter(IFilterMapper * iface, CLSID c
LPWSTR wszClsid = NULL; LPWSTR wszClsid = NULL;
HKEY hKey; HKEY hKey;
LONG lRet; LONG lRet;
WCHAR wszKeyName[strlenW(wszFilterSlash) + (CHARS_IN_GUID-1) + 1]; WCHAR wszKeyName[ARRAYSIZE(wszFilterSlash)-1 + (CHARS_IN_GUID-1) + 1];
TRACE("(%p)->(%s, %s, %x)\n", iface, debugstr_guid(&clsid), debugstr_w(szName), dwMerit); TRACE("(%p)->(%s, %s, %x)\n", iface, debugstr_guid(&clsid), debugstr_w(szName), dwMerit);
@ -1453,7 +1453,7 @@ static HRESULT WINAPI FilterMapper_RegisterPin(
HKEY hKey = NULL; HKEY hKey = NULL;
HKEY hPinsKey = NULL; HKEY hPinsKey = NULL;
WCHAR * wszPinsKeyName; WCHAR * wszPinsKeyName;
WCHAR wszKeyName[strlenW(wszClsidSlash) + (CHARS_IN_GUID-1) + 1]; WCHAR wszKeyName[ARRAYSIZE(wszClsidSlash)-1 + (CHARS_IN_GUID-1) + 1];
TRACE("(%p)->(%s, %s, %d, %d, %d, %d, %s, %s)\n", iface, debugstr_guid(&Filter), debugstr_w(szName), bRendered, TRACE("(%p)->(%s, %s, %d, %d, %d, %d, %s, %s)\n", iface, debugstr_guid(&Filter), debugstr_w(szName), bRendered,
bOutput, bZero, bMany, debugstr_guid(&ConnectsToFilter), debugstr_w(ConnectsToPin)); bOutput, bZero, bMany, debugstr_guid(&ConnectsToFilter), debugstr_w(ConnectsToPin));
@ -1614,7 +1614,7 @@ static HRESULT WINAPI FilterMapper_UnregisterFilter(IFilterMapper * iface, CLSID
LONG lRet; LONG lRet;
LPWSTR wszClsid = NULL; LPWSTR wszClsid = NULL;
HKEY hKey; HKEY hKey;
WCHAR wszKeyName[strlenW(wszClsidSlash) + (CHARS_IN_GUID-1) + 1]; WCHAR wszKeyName[ARRAYSIZE(wszClsidSlash)-1 + (CHARS_IN_GUID-1) + 1];
TRACE("(%p)->(%s)\n", iface, debugstr_guid(&Filter)); TRACE("(%p)->(%s)\n", iface, debugstr_guid(&Filter));
@ -1676,7 +1676,7 @@ static HRESULT WINAPI FilterMapper_UnregisterPin(IFilterMapper * iface, CLSID Fi
LPWSTR wszClsid = NULL; LPWSTR wszClsid = NULL;
HKEY hKey = NULL; HKEY hKey = NULL;
WCHAR * wszPinNameKey; WCHAR * wszPinNameKey;
WCHAR wszKeyName[strlenW(wszClsidSlash) + (CHARS_IN_GUID-1) + 1]; WCHAR wszKeyName[ARRAYSIZE(wszClsidSlash)-1 + (CHARS_IN_GUID-1) + 1];
TRACE("(%p)->(%s, %s)\n", iface, debugstr_guid(&Filter), debugstr_w(Name)); TRACE("(%p)->(%s, %s)\n", iface, debugstr_guid(&Filter), debugstr_w(Name));

View file

@ -24,6 +24,7 @@
#include "wine/debug.h" #include "wine/debug.h"
#include "quartz_private.h" #include "quartz_private.h"
#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(quartz); WINE_DEFAULT_DEBUG_CHANNEL(quartz);
@ -240,26 +241,6 @@ const char * qzdebugstr_guid( const GUID * id )
return debugstr_guid(id); return debugstr_guid(id);
} }
/***********************************************************************
* qzdebugstr_State (internal)
*
* Gives a text version of the FILTER_STATE enumeration
*/
const char * qzdebugstr_State(FILTER_STATE state)
{
switch (state)
{
case State_Stopped:
return "State_Stopped";
case State_Running:
return "State_Running";
case State_Paused:
return "State_Paused";
default:
return "State_Unknown";
}
}
LONG WINAPI AmpFactorToDB(LONG ampfactor) LONG WINAPI AmpFactorToDB(LONG ampfactor)
{ {
FIXME("(%d) Stub!\n", ampfactor); FIXME("(%d) Stub!\n", ampfactor);
@ -280,7 +261,7 @@ LONG WINAPI DBToAmpFactor(LONG db)
*/ */
DWORD WINAPI AMGetErrorTextA(HRESULT hr, LPSTR buffer, DWORD maxlen) DWORD WINAPI AMGetErrorTextA(HRESULT hr, LPSTR buffer, DWORD maxlen)
{ {
int len; unsigned int len;
static const char format[] = "Error: 0x%x"; static const char format[] = "Error: 0x%x";
char error[MAX_ERROR_TEXT_LEN]; char error[MAX_ERROR_TEXT_LEN];
@ -288,7 +269,7 @@ DWORD WINAPI AMGetErrorTextA(HRESULT hr, LPSTR buffer, DWORD maxlen)
if (!buffer) return 0; if (!buffer) return 0;
wsprintfA(error, format, hr); wsprintfA(error, format, hr);
if ((len = lstrlenA(error)) >= maxlen) return 0; if ((len = strlen(error)) >= maxlen) return 0;
lstrcpyA(buffer, error); lstrcpyA(buffer, error);
return len; return len;
} }
@ -298,7 +279,7 @@ DWORD WINAPI AMGetErrorTextA(HRESULT hr, LPSTR buffer, DWORD maxlen)
*/ */
DWORD WINAPI AMGetErrorTextW(HRESULT hr, LPWSTR buffer, DWORD maxlen) DWORD WINAPI AMGetErrorTextW(HRESULT hr, LPWSTR buffer, DWORD maxlen)
{ {
int len; unsigned int len;
static const WCHAR format[] = {'E','r','r','o','r',':',' ','0','x','%','l','x',0}; static const WCHAR format[] = {'E','r','r','o','r',':',' ','0','x','%','l','x',0};
WCHAR error[MAX_ERROR_TEXT_LEN]; WCHAR error[MAX_ERROR_TEXT_LEN];
@ -306,7 +287,7 @@ DWORD WINAPI AMGetErrorTextW(HRESULT hr, LPWSTR buffer, DWORD maxlen)
if (!buffer) return 0; if (!buffer) return 0;
wsprintfW(error, format, hr); wsprintfW(error, format, hr);
if ((len = lstrlenW(error)) >= maxlen) return 0; if ((len = strlenW(error)) >= maxlen) return 0;
lstrcpyW(buffer, error); lstrcpyW(buffer, error);
return len; return len;
} }

View file

@ -31,33 +31,35 @@
WINE_DEFAULT_DEBUG_CHANNEL(quartz); WINE_DEFAULT_DEBUG_CHANNEL(quartz);
void dump_AM_SAMPLE2_PROPERTIES(const AM_SAMPLE2_PROPERTIES * pProps) typedef struct BaseMemAllocator
{ {
if (!pProps) const IMemAllocatorVtbl * lpVtbl;
{
TRACE("AM_SAMPLE2_PROPERTIES: (null)\n"); LONG ref;
return; ALLOCATOR_PROPERTIES props;
} HRESULT (* fnAlloc) (IMemAllocator *);
TRACE("\tcbData: %d\n", pProps->cbData); HRESULT (* fnFree)(IMemAllocator *);
TRACE("\tdwTypeSpecificFlags: 0x%8x\n", pProps->dwTypeSpecificFlags); HRESULT (* fnVerify)(IMemAllocator *, ALLOCATOR_PROPERTIES *);
TRACE("\tdwSampleFlags: 0x%8x\n", pProps->dwSampleFlags); HRESULT (* fnBufferPrepare)(IMemAllocator *, StdMediaSample2 *, DWORD flags);
TRACE("\tlActual: %d\n", pProps->lActual); HRESULT (* fnBufferReleased)(IMemAllocator *, StdMediaSample2 *);
TRACE("\ttStart: %x%08x%s\n", (LONG)(pProps->tStart >> 32), (LONG)pProps->tStart, pProps->dwSampleFlags & AM_SAMPLE_TIMEVALID ? "" : " (not valid)"); void (* fnDestroyed)(IMemAllocator *);
TRACE("\ttStop: %x%08x%s\n", (LONG)(pProps->tStop >> 32), (LONG)pProps->tStop, pProps->dwSampleFlags & AM_SAMPLE_STOPVALID ? "" : " (not valid)"); HANDLE hSemWaiting;
TRACE("\tdwStreamId: 0x%x\n", pProps->dwStreamId); BOOL bDecommitQueued;
TRACE("\tpMediaType: %p\n", pProps->pMediaType); BOOL bCommitted;
TRACE("\tpbBuffer: %p\n", pProps->pbBuffer); LONG lWaiting;
TRACE("\tcbBuffer: %d\n", pProps->cbBuffer); struct list free_list;
} struct list used_list;
CRITICAL_SECTION *pCritSect;
} BaseMemAllocator;
static const IMemAllocatorVtbl BaseMemAllocator_VTable; static const IMemAllocatorVtbl BaseMemAllocator_VTable;
static const IMediaSample2Vtbl StdMediaSample2_VTable; static const IMediaSample2Vtbl StdMediaSample2_VTable;
#define AM_SAMPLE2_PROP_SIZE_WRITABLE (unsigned int)(&((AM_SAMPLE2_PROPERTIES *)0)->pbBuffer) #define AM_SAMPLE2_PROP_SIZE_WRITABLE FIELD_OFFSET(AM_SAMPLE2_PROPERTIES, pbBuffer)
#define INVALID_MEDIA_TIME (((ULONGLONG)0x7fffffff << 32) | 0xffffffff) #define INVALID_MEDIA_TIME (((ULONGLONG)0x7fffffff << 32) | 0xffffffff)
HRESULT BaseMemAllocator_Init(HRESULT (* fnAlloc)(IMemAllocator *), static HRESULT BaseMemAllocator_Init(HRESULT (* fnAlloc)(IMemAllocator *),
HRESULT (* fnFree)(IMemAllocator *), HRESULT (* fnFree)(IMemAllocator *),
HRESULT (* fnVerify)(IMemAllocator *, ALLOCATOR_PROPERTIES *), HRESULT (* fnVerify)(IMemAllocator *, ALLOCATOR_PROPERTIES *),
HRESULT (* fnBufferPrepare)(IMemAllocator *, StdMediaSample2 *, DWORD), HRESULT (* fnBufferPrepare)(IMemAllocator *, StdMediaSample2 *, DWORD),
@ -97,9 +99,9 @@ static HRESULT WINAPI BaseMemAllocator_QueryInterface(IMemAllocator * iface, REF
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMemAllocator)) else if (IsEqualIID(riid, &IID_IMemAllocator))
*ppv = (LPVOID)This; *ppv = This;
if (*ppv) if (*ppv)
{ {
@ -399,7 +401,7 @@ static const IMemAllocatorVtbl BaseMemAllocator_VTable =
BaseMemAllocator_ReleaseBuffer BaseMemAllocator_ReleaseBuffer
}; };
HRESULT StdMediaSample2_Construct(BYTE * pbBuffer, LONG cbBuffer, IMemAllocator * pParent, StdMediaSample2 ** ppSample) static HRESULT StdMediaSample2_Construct(BYTE * pbBuffer, LONG cbBuffer, IMemAllocator * pParent, StdMediaSample2 ** ppSample)
{ {
assert(pbBuffer && pParent && (cbBuffer > 0)); assert(pbBuffer && pParent && (cbBuffer > 0));
@ -423,7 +425,7 @@ HRESULT StdMediaSample2_Construct(BYTE * pbBuffer, LONG cbBuffer, IMemAllocator
return S_OK; return S_OK;
} }
void StdMediaSample2_Delete(StdMediaSample2 * This) static void StdMediaSample2_Delete(StdMediaSample2 * This)
{ {
/* NOTE: does not remove itself from the list it belongs to */ /* NOTE: does not remove itself from the list it belongs to */
CoTaskMemFree(This); CoTaskMemFree(This);
@ -437,11 +439,11 @@ static HRESULT WINAPI StdMediaSample2_QueryInterface(IMediaSample2 * iface, REFI
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaSample)) else if (IsEqualIID(riid, &IID_IMediaSample))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaSample2)) else if (IsEqualIID(riid, &IID_IMediaSample2))
*ppv = (LPVOID)This; *ppv = This;
if (*ppv) if (*ppv)
{ {
@ -499,7 +501,7 @@ static HRESULT WINAPI StdMediaSample2_GetPointer(IMediaSample2 * iface, BYTE **
return S_OK; return S_OK;
} }
static long WINAPI StdMediaSample2_GetSize(IMediaSample2 * iface) static LONG WINAPI StdMediaSample2_GetSize(IMediaSample2 * iface)
{ {
StdMediaSample2 *This = (StdMediaSample2 *)iface; StdMediaSample2 *This = (StdMediaSample2 *)iface;
@ -875,7 +877,7 @@ HRESULT StdMemAllocator_create(LPUNKNOWN lpUnkOuter, LPVOID * ppv)
pMemAlloc->pMemory = NULL; pMemAlloc->pMemory = NULL;
if (SUCCEEDED(hr = BaseMemAllocator_Init(StdMemAllocator_Alloc, StdMemAllocator_Free, NULL, NULL, NULL, StdMemAllocator_Destroy, &pMemAlloc->csState, &pMemAlloc->base))) if (SUCCEEDED(hr = BaseMemAllocator_Init(StdMemAllocator_Alloc, StdMemAllocator_Free, NULL, NULL, NULL, StdMemAllocator_Destroy, &pMemAlloc->csState, &pMemAlloc->base)))
*ppv = (LPVOID)pMemAlloc; *ppv = pMemAlloc;
else else
CoTaskMemFree(pMemAlloc); CoTaskMemFree(pMemAlloc);

View file

@ -243,7 +243,7 @@ static HRESULT FillBuffer(MPEGSplitterImpl *This, IMediaSample *pCurrentSample)
static HRESULT MPEGSplitter_process_sample(LPVOID iface, IMediaSample * pSample, DWORD_PTR cookie) static HRESULT MPEGSplitter_process_sample(LPVOID iface, IMediaSample * pSample, DWORD_PTR cookie)
{ {
MPEGSplitterImpl *This = (MPEGSplitterImpl*)iface; MPEGSplitterImpl *This = iface;
BYTE *pbSrcStream; BYTE *pbSrcStream;
DWORD cbSrcStream = 0; DWORD cbSrcStream = 0;
REFERENCE_TIME tStart, tStop, tAviStart = This->position; REFERENCE_TIME tStart, tStop, tAviStart = This->position;
@ -286,7 +286,7 @@ static HRESULT MPEGSplitter_process_sample(LPVOID iface, IMediaSample * pSample,
if (BYTES_FROM_MEDIATIME(tStop) >= This->EndOfFile || This->position >= This->Parser.mediaSeeking.llStop) if (BYTES_FROM_MEDIATIME(tStop) >= This->EndOfFile || This->position >= This->Parser.mediaSeeking.llStop)
{ {
int i; unsigned int i;
TRACE("End of file reached\n"); TRACE("End of file reached\n");
@ -301,7 +301,7 @@ static HRESULT MPEGSplitter_process_sample(LPVOID iface, IMediaSample * pSample,
IPin_Release(ppin); IPin_Release(ppin);
} }
if (FAILED(hr)) if (FAILED(hr))
WARN("Error sending EndOfStream to pin %d (%x)\n", i, hr); WARN("Error sending EndOfStream to pin %u (%x)\n", i, hr);
} }
/* Force the pullpin thread to stop */ /* Force the pullpin thread to stop */
@ -615,7 +615,7 @@ static HRESULT MPEGSplitter_pre_connect(IPin *iface, IPin *pConnectPin, ALLOCATO
static HRESULT MPEGSplitter_cleanup(LPVOID iface) static HRESULT MPEGSplitter_cleanup(LPVOID iface)
{ {
MPEGSplitterImpl *This = (MPEGSplitterImpl*)iface; MPEGSplitterImpl *This = iface;
TRACE("(%p)\n", This); TRACE("(%p)\n", This);
@ -709,7 +709,7 @@ static HRESULT MPEGSplitter_disconnect(LPVOID iface)
static HRESULT MPEGSplitter_first_request(LPVOID iface) static HRESULT MPEGSplitter_first_request(LPVOID iface)
{ {
MPEGSplitterImpl *This = (MPEGSplitterImpl*)iface; MPEGSplitterImpl *This = iface;
PullPin *pin = This->Parser.pInputPin; PullPin *pin = This->Parser.pInputPin;
HRESULT hr; HRESULT hr;
LONGLONG length; LONGLONG length;
@ -808,7 +808,7 @@ HRESULT MPEGSplitter_create(IUnknown * pUnkOuter, LPVOID * ppv)
This->seek = 1; This->seek = 1;
/* Note: This memory is managed by the parser filter once created */ /* Note: This memory is managed by the parser filter once created */
*ppv = (LPVOID)This; *ppv = This;
return hr; return hr;
} }

View file

@ -67,22 +67,9 @@ typedef struct NullRendererImpl
MediaSeekingImpl mediaSeeking; MediaSeekingImpl mediaSeeking;
} NullRendererImpl; } NullRendererImpl;
static const IMemInputPinVtbl MemInputPin_Vtbl =
{
MemInputPin_QueryInterface,
MemInputPin_AddRef,
MemInputPin_Release,
MemInputPin_GetAllocator,
MemInputPin_NotifyAllocator,
MemInputPin_GetAllocatorRequirements,
MemInputPin_Receive,
MemInputPin_ReceiveMultiple,
MemInputPin_ReceiveCanBlock
};
static HRESULT NullRenderer_Sample(LPVOID iface, IMediaSample * pSample) static HRESULT NullRenderer_Sample(LPVOID iface, IMediaSample * pSample)
{ {
NullRendererImpl *This = (NullRendererImpl *)iface; NullRendererImpl *This = iface;
HRESULT hr = S_OK; HRESULT hr = S_OK;
TRACE("%p %p\n", iface, pSample); TRACE("%p %p\n", iface, pSample);
@ -193,7 +180,7 @@ HRESULT NullRenderer_create(IUnknown * pUnkOuter, LPVOID * ppv)
MediaSeekingImpl_Init((IBaseFilter*)pNullRenderer, NullRendererImpl_Change, NullRendererImpl_Change, NullRendererImpl_Change, &pNullRenderer->mediaSeeking, &pNullRenderer->csFilter); MediaSeekingImpl_Init((IBaseFilter*)pNullRenderer, NullRendererImpl_Change, NullRendererImpl_Change, NullRendererImpl_Change, &pNullRenderer->mediaSeeking, &pNullRenderer->csFilter);
pNullRenderer->mediaSeeking.lpVtbl = &TransformFilter_Seeking_Vtbl; pNullRenderer->mediaSeeking.lpVtbl = &TransformFilter_Seeking_Vtbl;
*ppv = (LPVOID)pNullRenderer; *ppv = pNullRenderer;
} }
else else
{ {
@ -216,13 +203,13 @@ static HRESULT WINAPI NullRendererInner_QueryInterface(IUnknown * iface, REFIID
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)&(This->IInner_vtbl); *ppv = &This->IInner_vtbl;
else if (IsEqualIID(riid, &IID_IPersist)) else if (IsEqualIID(riid, &IID_IPersist))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaFilter)) else if (IsEqualIID(riid, &IID_IMediaFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBaseFilter)) else if (IsEqualIID(riid, &IID_IBaseFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
*ppv = &This->mediaSeeking; *ppv = &This->mediaSeeking;

View file

@ -115,15 +115,15 @@ HRESULT WINAPI Parser_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID *
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IPersist)) else if (IsEqualIID(riid, &IID_IPersist))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaFilter)) else if (IsEqualIID(riid, &IID_IMediaFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBaseFilter)) else if (IsEqualIID(riid, &IID_IBaseFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
*ppv = (LPVOID)&This->mediaSeeking; *ppv = &This->mediaSeeking;
if (*ppv) if (*ppv)
{ {
@ -219,7 +219,7 @@ HRESULT WINAPI Parser_Stop(IBaseFilter * iface)
{ {
ParserImpl *This = (ParserImpl *)iface; ParserImpl *This = (ParserImpl *)iface;
PullPin *pin = (PullPin *)This->ppPins[0]; PullPin *pin = (PullPin *)This->ppPins[0];
int i; ULONG i;
TRACE("()\n"); TRACE("()\n");
@ -231,6 +231,7 @@ HRESULT WINAPI Parser_Stop(IBaseFilter * iface)
if (This->state == State_Stopped) if (This->state == State_Stopped)
{ {
LeaveCriticalSection(&This->csFilter); LeaveCriticalSection(&This->csFilter);
IAsyncReader_EndFlush(This->pInputPin->pReader);
LeaveCriticalSection(&pin->thread_lock); LeaveCriticalSection(&pin->thread_lock);
return S_OK; return S_OK;
} }
@ -246,6 +247,7 @@ HRESULT WINAPI Parser_Stop(IBaseFilter * iface)
PullPin_PauseProcessing(This->pInputPin); PullPin_PauseProcessing(This->pInputPin);
PullPin_WaitForStateChange(This->pInputPin, INFINITE); PullPin_WaitForStateChange(This->pInputPin, INFINITE);
IAsyncReader_EndFlush(This->pInputPin->pReader);
LeaveCriticalSection(&pin->thread_lock); LeaveCriticalSection(&pin->thread_lock);
return S_OK; return S_OK;
@ -291,7 +293,7 @@ HRESULT WINAPI Parser_Run(IBaseFilter * iface, REFERENCE_TIME tStart)
ParserImpl *This = (ParserImpl *)iface; ParserImpl *This = (ParserImpl *)iface;
PullPin *pin = (PullPin *)This->ppPins[0]; PullPin *pin = (PullPin *)This->ppPins[0];
int i; ULONG i;
TRACE("(%s)\n", wine_dbgstr_longlong(tStart)); TRACE("(%s)\n", wine_dbgstr_longlong(tStart));
@ -494,7 +496,7 @@ HRESULT Parser_AddPin(ParserImpl * This, const PIN_INFO * piOutput, ALLOCATOR_PR
CopyMediaType(pin->pmt, amt); CopyMediaType(pin->pmt, amt);
pin->dwSamplesProcessed = 0; pin->dwSamplesProcessed = 0;
pin->pin.pin.pUserData = (LPVOID)This->ppPins[This->cStreams + 1]; pin->pin.pin.pUserData = This->ppPins[This->cStreams + 1];
pin->pin.pin.pinInfo.pFilter = (LPVOID)This; pin->pin.pin.pinInfo.pFilter = (LPVOID)This;
pin->pin.custom_allocator = 1; pin->pin.custom_allocator = 1;
This->cStreams++; This->cStreams++;
@ -611,9 +613,9 @@ static HRESULT WINAPI Parser_OutputPin_QueryInterface(IPin * iface, REFIID riid,
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IPin)) else if (IsEqualIID(riid, &IID_IPin))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
{ {
return IBaseFilter_QueryInterface(This->pin.pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv); return IBaseFilter_QueryInterface(This->pin.pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv);
@ -677,7 +679,7 @@ static HRESULT WINAPI Parser_OutputPin_Connect(IPin * iface, IPin * pReceivePin,
static HRESULT Parser_OutputPin_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt) static HRESULT Parser_OutputPin_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt)
{ {
Parser_OutputPin *This = (Parser_OutputPin *)iface; Parser_OutputPin *This = iface;
TRACE("()\n"); TRACE("()\n");
dump_AM_MEDIA_TYPE(pmt); dump_AM_MEDIA_TYPE(pmt);
@ -745,7 +747,7 @@ static HRESULT WINAPI Parser_PullPin_Disconnect(IPin * iface)
return hr; return hr;
} }
HRESULT WINAPI Parser_PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt) static HRESULT WINAPI Parser_PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
{ {
HRESULT hr; HRESULT hr;

View file

@ -142,11 +142,6 @@ out:
return hr; return hr;
} }
static inline InputPin *impl_from_IMemInputPin( IMemInputPin *iface )
{
return (InputPin *)((char*)iface - FIELD_OFFSET(InputPin, lpVtblMemInput));
}
static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc) static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc)
{ {
@ -159,205 +154,6 @@ static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc)
pDest->pFilter = pSrc->pFilter; pDest->pFilter = pSrc->pFilter;
} }
/* Function called as a helper to IPin_Connect */
/* specific AM_MEDIA_TYPE - it cannot be NULL */
/* NOTE: not part of standard interface */
static HRESULT OutputPin_ConnectSpecific(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
{
OutputPin *This = (OutputPin *)iface;
HRESULT hr;
IMemAllocator * pMemAlloc = NULL;
ALLOCATOR_PROPERTIES actual; /* FIXME: should we put the actual props back in to This? */
TRACE("(%p, %p)\n", pReceivePin, pmt);
dump_AM_MEDIA_TYPE(pmt);
/* FIXME: call queryacceptproc */
This->pin.pConnectedTo = pReceivePin;
IPin_AddRef(pReceivePin);
CopyMediaType(&This->pin.mtCurrent, pmt);
hr = IPin_ReceiveConnection(pReceivePin, iface, pmt);
/* get the IMemInputPin interface we will use to deliver samples to the
* connected pin */
if (SUCCEEDED(hr))
{
This->pMemInputPin = NULL;
hr = IPin_QueryInterface(pReceivePin, &IID_IMemInputPin, (LPVOID)&This->pMemInputPin);
if (SUCCEEDED(hr) && !This->custom_allocator)
{
hr = IMemInputPin_GetAllocator(This->pMemInputPin, &pMemAlloc);
if (hr == VFW_E_NO_ALLOCATOR)
/* Input pin provides no allocator, use standard memory allocator */
hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, &IID_IMemAllocator, (LPVOID*)&pMemAlloc);
if (SUCCEEDED(hr))
hr = IMemAllocator_SetProperties(pMemAlloc, &This->allocProps, &actual);
if (SUCCEEDED(hr))
hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, pMemAlloc, This->readonly);
if (pMemAlloc)
IMemAllocator_Release(pMemAlloc);
}
else if (SUCCEEDED(hr))
{
if (This->alloc)
{
hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, This->alloc, This->readonly);
}
else
hr = VFW_E_NO_ALLOCATOR;
}
/* break connection if we couldn't get the allocator */
if (FAILED(hr))
{
if (This->pMemInputPin)
IMemInputPin_Release(This->pMemInputPin);
This->pMemInputPin = NULL;
IPin_Disconnect(pReceivePin);
}
}
if (FAILED(hr))
{
IPin_Release(This->pin.pConnectedTo);
This->pin.pConnectedTo = NULL;
FreeMediaType(&This->pin.mtCurrent);
}
TRACE(" -- %x\n", hr);
return hr;
}
static HRESULT InputPin_Init(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData,
QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, InputPin * pPinImpl)
{
TRACE("\n");
/* Common attributes */
pPinImpl->pin.refCount = 1;
pPinImpl->pin.pConnectedTo = NULL;
pPinImpl->pin.fnQueryAccept = pQueryAccept;
pPinImpl->pin.pUserData = pUserData;
pPinImpl->pin.pCritSec = pCritSec;
Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
/* Input pin attributes */
pPinImpl->fnSampleProc = pSampleProc;
pPinImpl->fnCleanProc = pCleanUp;
pPinImpl->pAllocator = pPinImpl->preferred_allocator = allocator;
if (pPinImpl->preferred_allocator)
IMemAllocator_AddRef(pPinImpl->preferred_allocator);
pPinImpl->tStart = 0;
pPinImpl->tStop = 0;
pPinImpl->dRate = 1.0;
pPinImpl->pin.lpVtbl = InputPin_Vtbl;
pPinImpl->lpVtblMemInput = &MemInputPin_Vtbl;
pPinImpl->flushing = pPinImpl->end_of_stream = 0;
return S_OK;
}
static HRESULT OutputPin_Init(const IPinVtbl *OutputPin_Vtbl, const PIN_INFO * pPinInfo, const ALLOCATOR_PROPERTIES * props, LPVOID pUserData,
QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, OutputPin * pPinImpl)
{
TRACE("\n");
/* Common attributes */
pPinImpl->pin.lpVtbl = OutputPin_Vtbl;
pPinImpl->pin.refCount = 1;
pPinImpl->pin.pConnectedTo = NULL;
pPinImpl->pin.fnQueryAccept = pQueryAccept;
pPinImpl->pin.pUserData = pUserData;
pPinImpl->pin.pCritSec = pCritSec;
Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
/* Output pin attributes */
pPinImpl->pMemInputPin = NULL;
pPinImpl->pConnectSpecific = OutputPin_ConnectSpecific;
/* If custom_allocator is set, you will need to specify an allocator
* in the alloc member of the struct before an output pin can connect
*/
pPinImpl->custom_allocator = 0;
pPinImpl->alloc = NULL;
pPinImpl->readonly = FALSE;
if (props)
{
pPinImpl->allocProps = *props;
if (pPinImpl->allocProps.cbAlign == 0)
pPinImpl->allocProps.cbAlign = 1;
}
else
ZeroMemory(&pPinImpl->allocProps, sizeof(pPinImpl->allocProps));
return S_OK;
}
HRESULT InputPin_Construct(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, IPin ** ppPin)
{
InputPin * pPinImpl;
*ppPin = NULL;
if (pPinInfo->dir != PINDIR_INPUT)
{
ERR("Pin direction(%x) != PINDIR_INPUT\n", pPinInfo->dir);
return E_INVALIDARG;
}
pPinImpl = CoTaskMemAlloc(sizeof(*pPinImpl));
if (!pPinImpl)
return E_OUTOFMEMORY;
if (SUCCEEDED(InputPin_Init(InputPin_Vtbl, pPinInfo, pSampleProc, pUserData, pQueryAccept, pCleanUp, pCritSec, allocator, pPinImpl)))
{
*ppPin = (IPin *)pPinImpl;
return S_OK;
}
CoTaskMemFree(pPinImpl);
return E_FAIL;
}
HRESULT OutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, long outputpin_size, const PIN_INFO * pPinInfo, ALLOCATOR_PROPERTIES *props, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, IPin ** ppPin)
{
OutputPin * pPinImpl;
*ppPin = NULL;
if (pPinInfo->dir != PINDIR_OUTPUT)
{
ERR("Pin direction(%x) != PINDIR_OUTPUT\n", pPinInfo->dir);
return E_INVALIDARG;
}
assert(outputpin_size >= sizeof(OutputPin));
pPinImpl = CoTaskMemAlloc(outputpin_size);
if (!pPinImpl)
return E_OUTOFMEMORY;
if (SUCCEEDED(OutputPin_Init(OutputPin_Vtbl, pPinInfo, props, pUserData, pQueryAccept, pCritSec, pPinImpl)))
{
*ppPin = (IPin *)(&pPinImpl->pin.lpVtbl);
return S_OK;
}
CoTaskMemFree(pPinImpl);
return E_FAIL;
}
/*** Common pin functions ***/ /*** Common pin functions ***/
ULONG WINAPI IPinImpl_AddRef(IPin * iface) ULONG WINAPI IPinImpl_AddRef(IPin * iface)
@ -527,11 +323,11 @@ HRESULT WINAPI InputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IPin)) else if (IsEqualIID(riid, &IID_IPin))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IMemInputPin)) else if (IsEqualIID(riid, &IID_IMemInputPin))
*ppv = (LPVOID)&This->lpVtblMemInput; *ppv = &This->lpVtblMemInput;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
{ {
return IBaseFilter_QueryInterface(This->pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv); return IBaseFilter_QueryInterface(This->pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv);
@ -735,28 +531,33 @@ static const IPinVtbl InputPin_Vtbl =
/*** IMemInputPin implementation ***/ /*** IMemInputPin implementation ***/
HRESULT WINAPI MemInputPin_QueryInterface(IMemInputPin * iface, REFIID riid, LPVOID * ppv) static inline InputPin *impl_from_IMemInputPin( IMemInputPin *iface )
{
return (InputPin *)((char*)iface - FIELD_OFFSET(InputPin, lpVtblMemInput));
}
static HRESULT WINAPI MemInputPin_QueryInterface(IMemInputPin * iface, REFIID riid, LPVOID * ppv)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
return IPin_QueryInterface((IPin *)&This->pin, riid, ppv); return IPin_QueryInterface((IPin *)&This->pin, riid, ppv);
} }
ULONG WINAPI MemInputPin_AddRef(IMemInputPin * iface) static ULONG WINAPI MemInputPin_AddRef(IMemInputPin * iface)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
return IPin_AddRef((IPin *)&This->pin); return IPin_AddRef((IPin *)&This->pin);
} }
ULONG WINAPI MemInputPin_Release(IMemInputPin * iface) static ULONG WINAPI MemInputPin_Release(IMemInputPin * iface)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
return IPin_Release((IPin *)&This->pin); return IPin_Release((IPin *)&This->pin);
} }
HRESULT WINAPI MemInputPin_GetAllocator(IMemInputPin * iface, IMemAllocator ** ppAllocator) static HRESULT WINAPI MemInputPin_GetAllocator(IMemInputPin * iface, IMemAllocator ** ppAllocator)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
@ -769,7 +570,7 @@ HRESULT WINAPI MemInputPin_GetAllocator(IMemInputPin * iface, IMemAllocator ** p
return *ppAllocator ? S_OK : VFW_E_NO_ALLOCATOR; return *ppAllocator ? S_OK : VFW_E_NO_ALLOCATOR;
} }
HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator * pAllocator, BOOL bReadOnly) static HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator * pAllocator, BOOL bReadOnly)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
@ -797,7 +598,7 @@ HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator *
return S_OK; return S_OK;
} }
HRESULT WINAPI MemInputPin_GetAllocatorRequirements(IMemInputPin * iface, ALLOCATOR_PROPERTIES * pProps) static HRESULT WINAPI MemInputPin_GetAllocatorRequirements(IMemInputPin * iface, ALLOCATOR_PROPERTIES * pProps)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
@ -808,7 +609,7 @@ HRESULT WINAPI MemInputPin_GetAllocatorRequirements(IMemInputPin * iface, ALLOCA
return E_NOTIMPL; return E_NOTIMPL;
} }
HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample) static HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
HRESULT hr; HRESULT hr;
@ -819,12 +620,12 @@ HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample)
return hr; return hr;
} }
HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample ** pSamples, long nSamples, long *nSamplesProcessed) static HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample ** pSamples, LONG nSamples, LONG *nSamplesProcessed)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
TRACE("(%p/%p)->(%p, %ld, %p)\n", This, iface, pSamples, nSamples, nSamplesProcessed); TRACE("(%p/%p)->(%p, %d, %p)\n", This, iface, pSamples, nSamples, nSamplesProcessed);
for (*nSamplesProcessed = 0; *nSamplesProcessed < nSamples; (*nSamplesProcessed)++) for (*nSamplesProcessed = 0; *nSamplesProcessed < nSamples; (*nSamplesProcessed)++)
{ {
@ -836,7 +637,7 @@ HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample **
return hr; return hr;
} }
HRESULT WINAPI MemInputPin_ReceiveCanBlock(IMemInputPin * iface) static HRESULT WINAPI MemInputPin_ReceiveCanBlock(IMemInputPin * iface)
{ {
InputPin *This = impl_from_IMemInputPin(iface); InputPin *This = impl_from_IMemInputPin(iface);
@ -858,6 +659,8 @@ static const IMemInputPinVtbl MemInputPin_Vtbl =
MemInputPin_ReceiveCanBlock MemInputPin_ReceiveCanBlock
}; };
/*** OutputPin implementation ***/
HRESULT WINAPI OutputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) HRESULT WINAPI OutputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
{ {
OutputPin *This = (OutputPin *)iface; OutputPin *This = (OutputPin *)iface;
@ -867,9 +670,9 @@ HRESULT WINAPI OutputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IPin)) else if (IsEqualIID(riid, &IID_IPin))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
{ {
return IBaseFilter_QueryInterface(This->pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv); return IBaseFilter_QueryInterface(This->pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv);
@ -1150,22 +953,6 @@ HRESULT OutputPin_SendSample(OutputPin * This, IMediaSample * pSample)
return hr; return hr;
} }
HRESULT OutputPin_DeliverNewSegment(OutputPin * This, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
{
HRESULT hr;
EnterCriticalSection(This->pin.pCritSec);
{
if (!This->pin.pConnectedTo)
hr = VFW_E_NOT_CONNECTED;
else
hr = IPin_NewSegment(This->pin.pConnectedTo, tStart, tStop, dRate);
}
LeaveCriticalSection(This->pin.pCritSec);
return hr;
}
HRESULT OutputPin_CommitAllocator(OutputPin * This) HRESULT OutputPin_CommitAllocator(OutputPin * This)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
@ -1260,6 +1047,7 @@ HRESULT OutputPin_DeliverDisconnect(OutputPin * This)
return hr; return hr;
} }
/*** PullPin implementation ***/
static HRESULT PullPin_Init(const IPinVtbl *PullPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PULL pSampleProc, LPVOID pUserData, static HRESULT PullPin_Init(const IPinVtbl *PullPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PULL pSampleProc, LPVOID pUserData,
QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, REQUESTPROC pCustomRequest, STOPPROCESSPROC pDone, LPCRITICAL_SECTION pCritSec, PullPin * pPinImpl) QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, REQUESTPROC pCustomRequest, STOPPROCESSPROC pDone, LPCRITICAL_SECTION pCritSec, PullPin * pPinImpl)
@ -1415,9 +1203,9 @@ HRESULT WINAPI PullPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IPin)) else if (IsEqualIID(riid, &IID_IPin))
*ppv = (LPVOID)iface; *ppv = iface;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
{ {
return IBaseFilter_QueryInterface(This->pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv); return IBaseFilter_QueryInterface(This->pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv);
@ -1460,7 +1248,7 @@ ULONG WINAPI PullPin_Release(IPin *iface)
return refCount; return refCount;
} }
static void CALLBACK PullPin_Flush(PullPin *This) static void PullPin_Flush(PullPin *This)
{ {
IMediaSample *pSample; IMediaSample *pSample;
TRACE("Flushing!\n"); TRACE("Flushing!\n");
@ -1488,7 +1276,7 @@ static void CALLBACK PullPin_Flush(PullPin *This)
} }
} }
static void CALLBACK PullPin_Thread_Process(PullPin *This) static void PullPin_Thread_Process(PullPin *This)
{ {
HRESULT hr; HRESULT hr;
IMediaSample * pSample = NULL; IMediaSample * pSample = NULL;
@ -1526,6 +1314,7 @@ static void CALLBACK PullPin_Thread_Process(PullPin *This)
TRACE("Process sample\n"); TRACE("Process sample\n");
pSample = NULL;
hr = IAsyncReader_WaitForNext(This->pReader, 10000, &pSample, &dwUser); hr = IAsyncReader_WaitForNext(This->pReader, 10000, &pSample, &dwUser);
/* Return an empty sample on error to the implementation in case it does custom parsing, so it knows it's gone */ /* Return an empty sample on error to the implementation in case it does custom parsing, so it knows it's gone */
@ -1537,6 +1326,12 @@ static void CALLBACK PullPin_Thread_Process(PullPin *This)
{ {
/* FIXME: This is not well handled yet! */ /* FIXME: This is not well handled yet! */
ERR("Processing error: %x\n", hr); ERR("Processing error: %x\n", hr);
if (hr == VFW_E_TIMEOUT)
{
assert(!pSample);
hr = S_OK;
continue;
}
} }
if (pSample) if (pSample)
@ -1561,7 +1356,7 @@ static void CALLBACK PullPin_Thread_Process(PullPin *This)
TRACE("End: %08x, %d\n", hr, This->stop_playback); TRACE("End: %08x, %d\n", hr, This->stop_playback);
} }
static void CALLBACK PullPin_Thread_Pause(PullPin *This) static void PullPin_Thread_Pause(PullPin *This)
{ {
PullPin_Flush(This); PullPin_Flush(This);
@ -1571,7 +1366,7 @@ static void CALLBACK PullPin_Thread_Pause(PullPin *This)
LeaveCriticalSection(This->pin.pCritSec); LeaveCriticalSection(This->pin.pCritSec);
} }
static void CALLBACK PullPin_Thread_Stop(PullPin *This) static void PullPin_Thread_Stop(PullPin *This)
{ {
TRACE("(%p)->()\n", This); TRACE("(%p)->()\n", This);
@ -1790,6 +1585,10 @@ HRESULT WINAPI PullPin_EndFlush(IPin * iface)
EnterCriticalSection(&This->thread_lock); EnterCriticalSection(&This->thread_lock);
{ {
FILTER_STATE state; FILTER_STATE state;
if (This->pReader)
IAsyncReader_EndFlush(This->pReader);
IBaseFilter_GetState(This->pin.pinInfo.pFilter, INFINITE, &state); IBaseFilter_GetState(This->pin.pinInfo.pFilter, INFINITE, &state);
if (state != State_Stopped) if (state != State_Stopped)
@ -1865,3 +1664,204 @@ static const IPinVtbl PullPin_Vtbl =
PullPin_EndFlush, PullPin_EndFlush,
PullPin_NewSegment PullPin_NewSegment
}; };
/*** The Construct functions ***/
/* Function called as a helper to IPin_Connect */
/* specific AM_MEDIA_TYPE - it cannot be NULL */
/* NOTE: not part of standard interface */
static HRESULT OutputPin_ConnectSpecific(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
{
OutputPin *This = (OutputPin *)iface;
HRESULT hr;
IMemAllocator * pMemAlloc = NULL;
ALLOCATOR_PROPERTIES actual; /* FIXME: should we put the actual props back in to This? */
TRACE("(%p, %p)\n", pReceivePin, pmt);
dump_AM_MEDIA_TYPE(pmt);
/* FIXME: call queryacceptproc */
This->pin.pConnectedTo = pReceivePin;
IPin_AddRef(pReceivePin);
CopyMediaType(&This->pin.mtCurrent, pmt);
hr = IPin_ReceiveConnection(pReceivePin, iface, pmt);
/* get the IMemInputPin interface we will use to deliver samples to the
* connected pin */
if (SUCCEEDED(hr))
{
This->pMemInputPin = NULL;
hr = IPin_QueryInterface(pReceivePin, &IID_IMemInputPin, (LPVOID)&This->pMemInputPin);
if (SUCCEEDED(hr) && !This->custom_allocator)
{
hr = IMemInputPin_GetAllocator(This->pMemInputPin, &pMemAlloc);
if (hr == VFW_E_NO_ALLOCATOR)
/* Input pin provides no allocator, use standard memory allocator */
hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, &IID_IMemAllocator, (LPVOID*)&pMemAlloc);
if (SUCCEEDED(hr))
hr = IMemAllocator_SetProperties(pMemAlloc, &This->allocProps, &actual);
if (SUCCEEDED(hr))
hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, pMemAlloc, This->readonly);
if (pMemAlloc)
IMemAllocator_Release(pMemAlloc);
}
else if (SUCCEEDED(hr))
{
if (This->alloc)
{
hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, This->alloc, This->readonly);
}
else
hr = VFW_E_NO_ALLOCATOR;
}
/* break connection if we couldn't get the allocator */
if (FAILED(hr))
{
if (This->pMemInputPin)
IMemInputPin_Release(This->pMemInputPin);
This->pMemInputPin = NULL;
IPin_Disconnect(pReceivePin);
}
}
if (FAILED(hr))
{
IPin_Release(This->pin.pConnectedTo);
This->pin.pConnectedTo = NULL;
FreeMediaType(&This->pin.mtCurrent);
}
TRACE(" -- %x\n", hr);
return hr;
}
static HRESULT InputPin_Init(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData,
QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, InputPin * pPinImpl)
{
TRACE("\n");
/* Common attributes */
pPinImpl->pin.refCount = 1;
pPinImpl->pin.pConnectedTo = NULL;
pPinImpl->pin.fnQueryAccept = pQueryAccept;
pPinImpl->pin.pUserData = pUserData;
pPinImpl->pin.pCritSec = pCritSec;
Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
/* Input pin attributes */
pPinImpl->fnSampleProc = pSampleProc;
pPinImpl->fnCleanProc = pCleanUp;
pPinImpl->pAllocator = pPinImpl->preferred_allocator = allocator;
if (pPinImpl->preferred_allocator)
IMemAllocator_AddRef(pPinImpl->preferred_allocator);
pPinImpl->tStart = 0;
pPinImpl->tStop = 0;
pPinImpl->dRate = 1.0;
pPinImpl->pin.lpVtbl = InputPin_Vtbl;
pPinImpl->lpVtblMemInput = &MemInputPin_Vtbl;
pPinImpl->flushing = pPinImpl->end_of_stream = 0;
return S_OK;
}
static HRESULT OutputPin_Init(const IPinVtbl *OutputPin_Vtbl, const PIN_INFO * pPinInfo, const ALLOCATOR_PROPERTIES * props, LPVOID pUserData,
QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, OutputPin * pPinImpl)
{
TRACE("\n");
/* Common attributes */
pPinImpl->pin.lpVtbl = OutputPin_Vtbl;
pPinImpl->pin.refCount = 1;
pPinImpl->pin.pConnectedTo = NULL;
pPinImpl->pin.fnQueryAccept = pQueryAccept;
pPinImpl->pin.pUserData = pUserData;
pPinImpl->pin.pCritSec = pCritSec;
Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
/* Output pin attributes */
pPinImpl->pMemInputPin = NULL;
pPinImpl->pConnectSpecific = OutputPin_ConnectSpecific;
/* If custom_allocator is set, you will need to specify an allocator
* in the alloc member of the struct before an output pin can connect
*/
pPinImpl->custom_allocator = 0;
pPinImpl->alloc = NULL;
pPinImpl->readonly = FALSE;
if (props)
{
pPinImpl->allocProps = *props;
if (pPinImpl->allocProps.cbAlign == 0)
pPinImpl->allocProps.cbAlign = 1;
}
else
ZeroMemory(&pPinImpl->allocProps, sizeof(pPinImpl->allocProps));
return S_OK;
}
HRESULT InputPin_Construct(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, IPin ** ppPin)
{
InputPin * pPinImpl;
*ppPin = NULL;
if (pPinInfo->dir != PINDIR_INPUT)
{
ERR("Pin direction(%x) != PINDIR_INPUT\n", pPinInfo->dir);
return E_INVALIDARG;
}
pPinImpl = CoTaskMemAlloc(sizeof(*pPinImpl));
if (!pPinImpl)
return E_OUTOFMEMORY;
if (SUCCEEDED(InputPin_Init(InputPin_Vtbl, pPinInfo, pSampleProc, pUserData, pQueryAccept, pCleanUp, pCritSec, allocator, pPinImpl)))
{
*ppPin = (IPin *)pPinImpl;
return S_OK;
}
CoTaskMemFree(pPinImpl);
return E_FAIL;
}
HRESULT OutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, long outputpin_size, const PIN_INFO * pPinInfo, ALLOCATOR_PROPERTIES *props, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, IPin ** ppPin)
{
OutputPin * pPinImpl;
*ppPin = NULL;
if (pPinInfo->dir != PINDIR_OUTPUT)
{
ERR("Pin direction(%x) != PINDIR_OUTPUT\n", pPinInfo->dir);
return E_INVALIDARG;
}
assert(outputpin_size >= sizeof(OutputPin));
pPinImpl = CoTaskMemAlloc(outputpin_size);
if (!pPinImpl)
return E_OUTOFMEMORY;
if (SUCCEEDED(OutputPin_Init(OutputPin_Vtbl, pPinInfo, props, pUserData, pQueryAccept, pCritSec, pPinImpl)))
{
*ppPin = (IPin *)(&pPinImpl->pin.lpVtbl);
return S_OK;
}
CoTaskMemFree(pPinImpl);
return E_FAIL;
}

View file

@ -187,20 +187,6 @@ HRESULT OutputPin_DecommitAllocator(OutputPin * This);
HRESULT OutputPin_GetDeliveryBuffer(OutputPin * This, IMediaSample ** ppSample, REFERENCE_TIME * tStart, REFERENCE_TIME * tStop, DWORD dwFlags); HRESULT OutputPin_GetDeliveryBuffer(OutputPin * This, IMediaSample ** ppSample, REFERENCE_TIME * tStart, REFERENCE_TIME * tStop, DWORD dwFlags);
HRESULT OutputPin_SendSample(OutputPin * This, IMediaSample * pSample); HRESULT OutputPin_SendSample(OutputPin * This, IMediaSample * pSample);
HRESULT OutputPin_DeliverDisconnect(OutputPin * This); HRESULT OutputPin_DeliverDisconnect(OutputPin * This);
HRESULT OutputPin_DeliverNewSegment(OutputPin * This, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
/**********************************/
/*** MemInputPin Implementation ***/
HRESULT WINAPI MemInputPin_QueryInterface(IMemInputPin * iface, REFIID riid, LPVOID * ppv);
ULONG WINAPI MemInputPin_AddRef(IMemInputPin * iface);
ULONG WINAPI MemInputPin_Release(IMemInputPin * iface);
HRESULT WINAPI MemInputPin_GetAllocator(IMemInputPin * iface, IMemAllocator ** ppAllocator);
HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator * pAllocator, BOOL bReadOnly);
HRESULT WINAPI MemInputPin_GetAllocatorRequirements(IMemInputPin * iface, ALLOCATOR_PROPERTIES * pProps);
HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample);
HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample ** pSamples, long nSamples, long *nSamplesProcessed);
HRESULT WINAPI MemInputPin_ReceiveCanBlock(IMemInputPin * iface);
/* Pull Pin */ /* Pull Pin */
HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt); HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);

View file

@ -76,7 +76,6 @@ HRESULT IEnumRegFiltersImpl_Construct(REGFILTER * pInRegFilters, const ULONG siz
HRESULT IEnumFiltersImpl_Construct(IBaseFilter ** ppFilters, ULONG nFilters, IEnumFilters ** ppEnum); HRESULT IEnumFiltersImpl_Construct(IBaseFilter ** ppFilters, ULONG nFilters, IEnumFilters ** ppEnum);
extern const char * qzdebugstr_guid(const GUID * id); extern const char * qzdebugstr_guid(const GUID * id);
extern const char * qzdebugstr_State(FILTER_STATE state);
HRESULT CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc); HRESULT CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc);
void FreeMediaType(AM_MEDIA_TYPE * pmt); void FreeMediaType(AM_MEDIA_TYPE * pmt);
@ -97,37 +96,4 @@ typedef struct StdMediaSample2
LONGLONG tMediaEnd; LONGLONG tMediaEnd;
} StdMediaSample2; } StdMediaSample2;
typedef struct BaseMemAllocator
{
const IMemAllocatorVtbl * lpVtbl;
LONG ref;
ALLOCATOR_PROPERTIES props;
HRESULT (* fnAlloc) (IMemAllocator *);
HRESULT (* fnFree)(IMemAllocator *);
HRESULT (* fnVerify)(IMemAllocator *, ALLOCATOR_PROPERTIES *);
HRESULT (* fnBufferPrepare)(IMemAllocator *, StdMediaSample2 *, DWORD flags);
HRESULT (* fnBufferReleased)(IMemAllocator *, StdMediaSample2 *);
void (* fnDestroyed)(IMemAllocator *);
HANDLE hSemWaiting;
BOOL bDecommitQueued;
BOOL bCommitted;
LONG lWaiting;
struct list free_list;
struct list used_list;
CRITICAL_SECTION *pCritSect;
} BaseMemAllocator;
HRESULT BaseMemAllocator_Init(HRESULT (* fnAlloc)(IMemAllocator *),
HRESULT (* fnFree)(IMemAllocator *),
HRESULT (* fnVerify)(IMemAllocator *, ALLOCATOR_PROPERTIES *),
HRESULT (* fnBufferPrepare)(IMemAllocator *, StdMediaSample2 *, DWORD),
HRESULT (* fnBufferReleased)(IMemAllocator *, StdMediaSample2 *),
void (* fnDestroyed)(IMemAllocator *),
CRITICAL_SECTION *pCritSect,
BaseMemAllocator * pMemAlloc);
HRESULT StdMediaSample2_Construct(BYTE * pbBuffer, LONG cbBuffer, IMemAllocator * pParent, StdMediaSample2 ** ppSample);
void StdMediaSample2_Delete(StdMediaSample2 * This);
#endif /* __QUARTZ_PRIVATE_INCLUDED__ */ #endif /* __QUARTZ_PRIVATE_INCLUDED__ */

View file

@ -36,6 +36,7 @@
#include "strmif.h" #include "strmif.h"
#include "wine/debug.h" #include "wine/debug.h"
#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(quartz); WINE_DEFAULT_DEBUG_CHANNEL(quartz);
@ -215,7 +216,7 @@ static HRESULT register_interfaces(struct regsvr_interface const *list)
KEY_READ | KEY_WRITE, NULL, &key, NULL); KEY_READ | KEY_WRITE, NULL, &key, NULL);
if (res != ERROR_SUCCESS) goto error_close_iid_key; if (res != ERROR_SUCCESS) goto error_close_iid_key;
wsprintfW(buf, fmt, list->num_methods); sprintfW(buf, fmt, list->num_methods);
res = RegSetValueExW(key, NULL, 0, REG_SZ, res = RegSetValueExW(key, NULL, 0, REG_SZ,
(CONST BYTE*)buf, (CONST BYTE*)buf,
(lstrlenW(buf) + 1) * sizeof(WCHAR)); (lstrlenW(buf) + 1) * sizeof(WCHAR));

View file

@ -89,7 +89,7 @@ static void QUARTZ_InsertAviseEntryFromQueue(SystemClockImpl* This, SystemClockA
#define ADVISE_ADD_PERIODIC (WM_APP + 8) #define ADVISE_ADD_PERIODIC (WM_APP + 8)
static DWORD WINAPI SystemClockAdviseThread(LPVOID lpParam) { static DWORD WINAPI SystemClockAdviseThread(LPVOID lpParam) {
SystemClockImpl* This = (SystemClockImpl*) lpParam; SystemClockImpl* This = lpParam;
DWORD timeOut = INFINITE; DWORD timeOut = INFINITE;
DWORD tmpTimeOut; DWORD tmpTimeOut;
MSG msg; MSG msg;
@ -260,7 +260,7 @@ static HRESULT WINAPI SystemClockImpl_AdviseTime(IReferenceClock* iface, REFEREN
TRACE("(%p, 0x%s, 0x%s, %ld, %p)\n", This, wine_dbgstr_longlong(rtBaseTime), TRACE("(%p, 0x%s, 0x%s, %ld, %p)\n", This, wine_dbgstr_longlong(rtBaseTime),
wine_dbgstr_longlong(rtStreamTime), hEvent, pdwAdviseCookie); wine_dbgstr_longlong(rtStreamTime), hEvent, pdwAdviseCookie);
if ((HEVENT) 0 == hEvent) { if (!hEvent) {
return E_INVALIDARG; return E_INVALIDARG;
} }
if (0 >= rtBaseTime + rtStreamTime) { if (0 >= rtBaseTime + rtStreamTime) {
@ -296,7 +296,7 @@ static HRESULT WINAPI SystemClockImpl_AdvisePeriodic(IReferenceClock* iface, REF
TRACE("(%p, 0x%s, 0x%s, %ld, %p)\n", This, wine_dbgstr_longlong(rtStartTime), TRACE("(%p, 0x%s, 0x%s, %ld, %p)\n", This, wine_dbgstr_longlong(rtStartTime),
wine_dbgstr_longlong(rtPeriodTime), hSemaphore, pdwAdviseCookie); wine_dbgstr_longlong(rtPeriodTime), hSemaphore, pdwAdviseCookie);
if ((HSEMAPHORE) 0 == hSemaphore) { if (!hSemaphore) {
return E_INVALIDARG; return E_INVALIDARG;
} }
if (0 >= rtStartTime || 0 >= rtPeriodTime) { if (0 >= rtStartTime || 0 >= rtPeriodTime) {

View file

@ -45,7 +45,6 @@ static const WCHAR wcsOutputPinName[] = {'o','u','t','p','u','t',' ','p','i','n'
static const IBaseFilterVtbl TransformFilter_Vtbl; static const IBaseFilterVtbl TransformFilter_Vtbl;
static const IPinVtbl TransformFilter_InputPin_Vtbl; static const IPinVtbl TransformFilter_InputPin_Vtbl;
static const IMemInputPinVtbl MemInputPin_Vtbl;
static const IPinVtbl TransformFilter_OutputPin_Vtbl; static const IPinVtbl TransformFilter_OutputPin_Vtbl;
static HRESULT TransformFilter_Input_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt) static HRESULT TransformFilter_Input_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt)
@ -64,7 +63,7 @@ static HRESULT TransformFilter_Input_QueryAccept(LPVOID iface, const AM_MEDIA_TY
static HRESULT TransformFilter_Output_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt) static HRESULT TransformFilter_Output_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt)
{ {
TransformFilterImpl* pTransformFilter = (TransformFilterImpl*)iface; TransformFilterImpl* pTransformFilter = iface;
AM_MEDIA_TYPE* outpmt = &pTransformFilter->pmt; AM_MEDIA_TYPE* outpmt = &pTransformFilter->pmt;
TRACE("%p\n", iface); TRACE("%p\n", iface);
@ -226,13 +225,13 @@ static HRESULT WINAPI TransformFilter_QueryInterface(IBaseFilter * iface, REFIID
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IPersist)) else if (IsEqualIID(riid, &IID_IPersist))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaFilter)) else if (IsEqualIID(riid, &IID_IMediaFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBaseFilter)) else if (IsEqualIID(riid, &IID_IBaseFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
*ppv = &This->mediaSeeking; *ppv = &This->mediaSeeking;
@ -650,16 +649,3 @@ static const IPinVtbl TransformFilter_OutputPin_Vtbl =
OutputPin_EndFlush, OutputPin_EndFlush,
OutputPin_NewSegment OutputPin_NewSegment
}; };
static const IMemInputPinVtbl MemInputPin_Vtbl =
{
MemInputPin_QueryInterface,
MemInputPin_AddRef,
MemInputPin_Release,
MemInputPin_GetAllocator,
MemInputPin_NotifyAllocator,
MemInputPin_GetAllocatorRequirements,
MemInputPin_Receive,
MemInputPin_ReceiveMultiple,
MemInputPin_ReceiveCanBlock
};

View file

@ -96,7 +96,7 @@ typedef struct VideoRendererImpl
static LRESULT CALLBACK VideoWndProcA(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) static LRESULT CALLBACK VideoWndProcA(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
VideoRendererImpl* pVideoRenderer = (VideoRendererImpl*)GetWindowLongA(hwnd, 0); VideoRendererImpl* pVideoRenderer = (VideoRendererImpl*)GetWindowLongPtrW(hwnd, 0);
LPRECT lprect = (LPRECT)lParam; LPRECT lprect = (LPRECT)lParam;
if (pVideoRenderer && pVideoRenderer->hWndMsgDrain) if (pVideoRenderer && pVideoRenderer->hWndMsgDrain)
@ -197,14 +197,14 @@ static BOOL CreateRenderingWindow(VideoRendererImpl* This)
return FALSE; return FALSE;
} }
SetWindowLongA(This->hWnd, 0, (LONG)This); SetWindowLongPtrW(This->hWnd, 0, (LONG_PTR)This);
return TRUE; return TRUE;
} }
static DWORD WINAPI MessageLoop(LPVOID lpParameter) static DWORD WINAPI MessageLoop(LPVOID lpParameter)
{ {
VideoRendererImpl* This = (VideoRendererImpl*) lpParameter; VideoRendererImpl* This = lpParameter;
MSG msg; MSG msg;
BOOL fGotMessage; BOOL fGotMessage;
@ -237,7 +237,7 @@ static BOOL CreateRenderingSubsystem(VideoRendererImpl* This)
if (!This->hEvent) if (!This->hEvent)
return FALSE; return FALSE;
This->hThread = CreateThread(NULL, 0, MessageLoop, (LPVOID)This, 0, &This->ThreadID); This->hThread = CreateThread(NULL, 0, MessageLoop, This, 0, &This->ThreadID);
if (!This->hThread) if (!This->hThread)
{ {
CloseHandle(This->hEvent); CloseHandle(This->hEvent);
@ -256,31 +256,15 @@ static BOOL CreateRenderingSubsystem(VideoRendererImpl* This)
return TRUE; return TRUE;
} }
static const IMemInputPinVtbl MemInputPin_Vtbl =
{
MemInputPin_QueryInterface,
MemInputPin_AddRef,
MemInputPin_Release,
MemInputPin_GetAllocator,
MemInputPin_NotifyAllocator,
MemInputPin_GetAllocatorRequirements,
MemInputPin_Receive,
MemInputPin_ReceiveMultiple,
MemInputPin_ReceiveCanBlock
};
static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data, DWORD size) static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data, DWORD size)
{ {
AM_MEDIA_TYPE amt; AM_MEDIA_TYPE amt;
HRESULT hr = S_OK; HRESULT hr = S_OK;
DDSURFACEDESC sdesc; DDSURFACEDESC sdesc;
int width;
int height;
LPBYTE palette = NULL;
HDC hDC; HDC hDC;
BITMAPINFOHEADER *bmiHeader; BITMAPINFOHEADER *bmiHeader;
TRACE("%p %p %d\n", This, data, size); TRACE("(%p)->(%p, %d)\n", This, data, size);
sdesc.dwSize = sizeof(sdesc); sdesc.dwSize = sizeof(sdesc);
hr = IPin_ConnectionMediaType((IPin *)This->pInputPin, &amt); hr = IPin_ConnectionMediaType((IPin *)This->pInputPin, &amt);
@ -312,15 +296,16 @@ static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data,
TRACE("biCompression = %s\n", debugstr_an((LPSTR)&(bmiHeader->biCompression), 4)); TRACE("biCompression = %s\n", debugstr_an((LPSTR)&(bmiHeader->biCompression), 4));
TRACE("biSizeImage = %d\n", bmiHeader->biSizeImage); TRACE("biSizeImage = %d\n", bmiHeader->biSizeImage);
width = bmiHeader->biWidth;
height = bmiHeader->biHeight;
palette = ((LPBYTE)bmiHeader) + bmiHeader->biSize;
if (!This->init) if (!This->init)
{ {
DWORD style = GetWindowLongW(This->hWnd, GWL_STYLE);
DWORD style_ex = GetWindowLongW(This->hWnd, GWL_EXSTYLE);
if (!This->WindowPos.right || !This->WindowPos.bottom) if (!This->WindowPos.right || !This->WindowPos.bottom)
This->WindowPos = This->SourceRect; This->WindowPos = This->SourceRect;
AdjustWindowRectEx(&This->WindowPos, style, TRUE, style_ex);
TRACE("WindowPos: %d %d %d %d\n", This->WindowPos.left, This->WindowPos.top, This->WindowPos.right, This->WindowPos.bottom); TRACE("WindowPos: %d %d %d %d\n", This->WindowPos.left, This->WindowPos.top, This->WindowPos.right, This->WindowPos.bottom);
SetWindowPos(This->hWnd, NULL, SetWindowPos(This->hWnd, NULL,
This->WindowPos.left, This->WindowPos.left,
@ -357,14 +342,21 @@ static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data,
static HRESULT VideoRenderer_Sample(LPVOID iface, IMediaSample * pSample) static HRESULT VideoRenderer_Sample(LPVOID iface, IMediaSample * pSample)
{ {
VideoRendererImpl *This = (VideoRendererImpl *)iface; VideoRendererImpl *This = iface;
LPBYTE pbSrcStream = NULL; LPBYTE pbSrcStream = NULL;
long cbSrcStream = 0; long cbSrcStream = 0;
REFERENCE_TIME tStart, tStop; REFERENCE_TIME tStart, tStop;
HRESULT hr; HRESULT hr;
TRACE("(%p)->(%p)\n", iface, pSample);
EnterCriticalSection(&This->csFilter); EnterCriticalSection(&This->csFilter);
if (This->pInputPin->flushing || This->pInputPin->end_of_stream) if (This->pInputPin->flushing || This->pInputPin->end_of_stream)
hr = S_FALSE; {
LeaveCriticalSection(&This->csFilter);
return S_FALSE;
}
if (This->state == State_Stopped) if (This->state == State_Stopped)
{ {
@ -372,8 +364,6 @@ static HRESULT VideoRenderer_Sample(LPVOID iface, IMediaSample * pSample)
return VFW_E_WRONG_STATE; return VFW_E_WRONG_STATE;
} }
TRACE("%p %p\n", iface, pSample);
hr = IMediaSample_GetTime(pSample, &tStart, &tStop); hr = IMediaSample_GetTime(pSample, &tStart, &tStop);
if (FAILED(hr)) if (FAILED(hr))
ERR("Cannot get sample time (%x)\n", hr); ERR("Cannot get sample time (%x)\n", hr);
@ -492,7 +482,7 @@ static HRESULT VideoRenderer_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt
IsEqualIID(&pmt->subtype, &MEDIASUBTYPE_RGB565) || IsEqualIID(&pmt->subtype, &MEDIASUBTYPE_RGB565) ||
IsEqualIID(&pmt->subtype, &MEDIASUBTYPE_RGB8)) IsEqualIID(&pmt->subtype, &MEDIASUBTYPE_RGB8))
{ {
VideoRendererImpl* This = (VideoRendererImpl*) iface; VideoRendererImpl* This = iface;
if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo)) if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo))
{ {
@ -573,7 +563,7 @@ static const IMediaSeekingVtbl VideoRendererImpl_Seeking_Vtbl =
static HRESULT VideoRendererImpl_Change(IBaseFilter *iface) static HRESULT VideoRendererImpl_Change(IBaseFilter *iface)
{ {
TRACE("(%p)\n", iface); TRACE("(%p)->()\n", iface);
return S_OK; return S_OK;
} }
@ -624,7 +614,7 @@ HRESULT VideoRenderer_create(IUnknown * pUnkOuter, LPVOID * ppv)
pVideoRenderer->mediaSeeking.lpVtbl = &VideoRendererImpl_Seeking_Vtbl; pVideoRenderer->mediaSeeking.lpVtbl = &VideoRendererImpl_Seeking_Vtbl;
pVideoRenderer->sample_held = NULL; pVideoRenderer->sample_held = NULL;
*ppv = (LPVOID)pVideoRenderer; *ppv = pVideoRenderer;
} }
else else
{ {
@ -663,17 +653,17 @@ static HRESULT WINAPI VideoRendererInner_QueryInterface(IUnknown * iface, REFIID
*ppv = NULL; *ppv = NULL;
if (IsEqualIID(riid, &IID_IUnknown)) if (IsEqualIID(riid, &IID_IUnknown))
*ppv = (LPVOID)&(This->IInner_vtbl); *ppv = &This->IInner_vtbl;
else if (IsEqualIID(riid, &IID_IPersist)) else if (IsEqualIID(riid, &IID_IPersist))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IMediaFilter)) else if (IsEqualIID(riid, &IID_IMediaFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBaseFilter)) else if (IsEqualIID(riid, &IID_IBaseFilter))
*ppv = (LPVOID)This; *ppv = This;
else if (IsEqualIID(riid, &IID_IBasicVideo)) else if (IsEqualIID(riid, &IID_IBasicVideo))
*ppv = (LPVOID)&(This->IBasicVideo_vtbl); *ppv = &This->IBasicVideo_vtbl;
else if (IsEqualIID(riid, &IID_IVideoWindow)) else if (IsEqualIID(riid, &IID_IVideoWindow))
*ppv = (LPVOID)&(This->IVideoWindow_vtbl); *ppv = &This->IVideoWindow_vtbl;
else if (IsEqualIID(riid, &IID_IMediaSeeking)) else if (IsEqualIID(riid, &IID_IMediaSeeking))
*ppv = &This->mediaSeeking; *ppv = &This->mediaSeeking;
@ -963,9 +953,7 @@ static HRESULT WINAPI VideoRenderer_FindPin(IBaseFilter * iface, LPCWSTR Id, IPi
{ {
VideoRendererImpl *This = (VideoRendererImpl *)iface; VideoRendererImpl *This = (VideoRendererImpl *)iface;
TRACE("(%p/%p)->(%p,%p)\n", This, iface, debugstr_w(Id), ppPin); FIXME("(%p/%p)->(%p,%p): stub !!!\n", This, iface, debugstr_w(Id), ppPin);
FIXME("VideoRenderer::FindPin(...)\n");
/* FIXME: critical section */ /* FIXME: critical section */
@ -1196,7 +1184,7 @@ static HRESULT WINAPI Basicvideo_get_AvgTimePerFrame(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_BitRate(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_BitRate(IBasicVideo *iface,
long *pBitRate) { LONG *pBitRate) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBitRate); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBitRate);
@ -1205,7 +1193,7 @@ static HRESULT WINAPI Basicvideo_get_BitRate(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_BitErrorRate(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_BitErrorRate(IBasicVideo *iface,
long *pBitErrorRate) { LONG *pBitErrorRate) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBitErrorRate); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBitErrorRate);
@ -1214,7 +1202,7 @@ static HRESULT WINAPI Basicvideo_get_BitErrorRate(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_VideoWidth(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_VideoWidth(IBasicVideo *iface,
long *pVideoWidth) { LONG *pVideoWidth) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pVideoWidth); TRACE("(%p/%p)->(%p)\n", This, iface, pVideoWidth);
@ -1225,7 +1213,7 @@ static HRESULT WINAPI Basicvideo_get_VideoWidth(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_VideoHeight(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_VideoHeight(IBasicVideo *iface,
long *pVideoHeight) { LONG *pVideoHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pVideoHeight); TRACE("(%p/%p)->(%p)\n", This, iface, pVideoHeight);
@ -1236,10 +1224,10 @@ static HRESULT WINAPI Basicvideo_get_VideoHeight(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_SourceLeft(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_SourceLeft(IBasicVideo *iface,
long SourceLeft) { LONG SourceLeft) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, SourceLeft); TRACE("(%p/%p)->(%d)\n", This, iface, SourceLeft);
This->SourceRect.left = SourceLeft; This->SourceRect.left = SourceLeft;
@ -1247,7 +1235,7 @@ static HRESULT WINAPI Basicvideo_put_SourceLeft(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_SourceLeft(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_SourceLeft(IBasicVideo *iface,
long *pSourceLeft) { LONG *pSourceLeft) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceLeft); TRACE("(%p/%p)->(%p)\n", This, iface, pSourceLeft);
@ -1258,10 +1246,10 @@ static HRESULT WINAPI Basicvideo_get_SourceLeft(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_SourceWidth(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_SourceWidth(IBasicVideo *iface,
long SourceWidth) { LONG SourceWidth) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, SourceWidth); TRACE("(%p/%p)->(%d)\n", This, iface, SourceWidth);
This->SourceRect.right = This->SourceRect.left + SourceWidth; This->SourceRect.right = This->SourceRect.left + SourceWidth;
@ -1269,7 +1257,7 @@ static HRESULT WINAPI Basicvideo_put_SourceWidth(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_SourceWidth(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_SourceWidth(IBasicVideo *iface,
long *pSourceWidth) { LONG *pSourceWidth) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceWidth); TRACE("(%p/%p)->(%p)\n", This, iface, pSourceWidth);
@ -1280,10 +1268,10 @@ static HRESULT WINAPI Basicvideo_get_SourceWidth(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_SourceTop(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_SourceTop(IBasicVideo *iface,
long SourceTop) { LONG SourceTop) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, SourceTop); TRACE("(%p/%p)->(%d)\n", This, iface, SourceTop);
This->SourceRect.top = SourceTop; This->SourceRect.top = SourceTop;
@ -1291,7 +1279,7 @@ static HRESULT WINAPI Basicvideo_put_SourceTop(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_SourceTop(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_SourceTop(IBasicVideo *iface,
long *pSourceTop) { LONG *pSourceTop) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceTop); TRACE("(%p/%p)->(%p)\n", This, iface, pSourceTop);
@ -1302,10 +1290,10 @@ static HRESULT WINAPI Basicvideo_get_SourceTop(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_SourceHeight(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_SourceHeight(IBasicVideo *iface,
long SourceHeight) { LONG SourceHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, SourceHeight); TRACE("(%p/%p)->(%d)\n", This, iface, SourceHeight);
This->SourceRect.bottom = This->SourceRect.top + SourceHeight; This->SourceRect.bottom = This->SourceRect.top + SourceHeight;
@ -1313,7 +1301,7 @@ static HRESULT WINAPI Basicvideo_put_SourceHeight(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_SourceHeight(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_SourceHeight(IBasicVideo *iface,
long *pSourceHeight) { LONG *pSourceHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceHeight); TRACE("(%p/%p)->(%p)\n", This, iface, pSourceHeight);
@ -1324,10 +1312,10 @@ static HRESULT WINAPI Basicvideo_get_SourceHeight(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_DestinationLeft(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_DestinationLeft(IBasicVideo *iface,
long DestinationLeft) { LONG DestinationLeft) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, DestinationLeft); TRACE("(%p/%p)->(%d)\n", This, iface, DestinationLeft);
This->DestRect.left = DestinationLeft; This->DestRect.left = DestinationLeft;
@ -1335,7 +1323,7 @@ static HRESULT WINAPI Basicvideo_put_DestinationLeft(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_DestinationLeft(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_DestinationLeft(IBasicVideo *iface,
long *pDestinationLeft) { LONG *pDestinationLeft) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationLeft); TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationLeft);
@ -1346,10 +1334,10 @@ static HRESULT WINAPI Basicvideo_get_DestinationLeft(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_DestinationWidth(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_DestinationWidth(IBasicVideo *iface,
long DestinationWidth) { LONG DestinationWidth) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, DestinationWidth); TRACE("(%p/%p)->(%d)\n", This, iface, DestinationWidth);
This->DestRect.right = This->DestRect.left + DestinationWidth; This->DestRect.right = This->DestRect.left + DestinationWidth;
@ -1357,7 +1345,7 @@ static HRESULT WINAPI Basicvideo_put_DestinationWidth(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_DestinationWidth(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_DestinationWidth(IBasicVideo *iface,
long *pDestinationWidth) { LONG *pDestinationWidth) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationWidth); TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationWidth);
@ -1368,10 +1356,10 @@ static HRESULT WINAPI Basicvideo_get_DestinationWidth(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_DestinationTop(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_DestinationTop(IBasicVideo *iface,
long DestinationTop) { LONG DestinationTop) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, DestinationTop); TRACE("(%p/%p)->(%d)\n", This, iface, DestinationTop);
This->DestRect.top = DestinationTop; This->DestRect.top = DestinationTop;
@ -1379,7 +1367,7 @@ static HRESULT WINAPI Basicvideo_put_DestinationTop(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_DestinationTop(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_DestinationTop(IBasicVideo *iface,
long *pDestinationTop) { LONG *pDestinationTop) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationTop); TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationTop);
@ -1390,10 +1378,10 @@ static HRESULT WINAPI Basicvideo_get_DestinationTop(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_put_DestinationHeight(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_put_DestinationHeight(IBasicVideo *iface,
long DestinationHeight) { LONG DestinationHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, DestinationHeight); TRACE("(%p/%p)->(%d)\n", This, iface, DestinationHeight);
This->DestRect.right = This->DestRect.left + DestinationHeight; This->DestRect.right = This->DestRect.left + DestinationHeight;
@ -1401,7 +1389,7 @@ static HRESULT WINAPI Basicvideo_put_DestinationHeight(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_get_DestinationHeight(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_get_DestinationHeight(IBasicVideo *iface,
long *pDestinationHeight) { LONG *pDestinationHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationHeight); TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationHeight);
@ -1412,13 +1400,13 @@ static HRESULT WINAPI Basicvideo_get_DestinationHeight(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_SetSourcePosition(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_SetSourcePosition(IBasicVideo *iface,
long Left, LONG Left,
long Top, LONG Top,
long Width, LONG Width,
long Height) { LONG Height) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld, %ld, %ld, %ld)\n", This, iface, Left, Top, Width, Height); TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
This->SourceRect.left = Left; This->SourceRect.left = Left;
This->SourceRect.top = Top; This->SourceRect.top = Top;
@ -1429,10 +1417,10 @@ static HRESULT WINAPI Basicvideo_SetSourcePosition(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_GetSourcePosition(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_GetSourcePosition(IBasicVideo *iface,
long *pLeft, LONG *pLeft,
long *pTop, LONG *pTop,
long *pWidth, LONG *pWidth,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, 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);
@ -1459,13 +1447,13 @@ static HRESULT WINAPI Basicvideo_SetDefaultSourcePosition(IBasicVideo *iface) {
} }
static HRESULT WINAPI Basicvideo_SetDestinationPosition(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_SetDestinationPosition(IBasicVideo *iface,
long Left, LONG Left,
long Top, LONG Top,
long Width, LONG Width,
long Height) { LONG Height) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%ld, %ld, %ld, %ld)\n", This, iface, Left, Top, Width, Height); TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
This->DestRect.left = Left; This->DestRect.left = Left;
This->DestRect.top = Top; This->DestRect.top = Top;
@ -1476,10 +1464,10 @@ static HRESULT WINAPI Basicvideo_SetDestinationPosition(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_GetDestinationPosition(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_GetDestinationPosition(IBasicVideo *iface,
long *pLeft, LONG *pLeft,
long *pTop, LONG *pTop,
long *pWidth, LONG *pWidth,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, 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);
@ -1510,8 +1498,8 @@ static HRESULT WINAPI Basicvideo_SetDefaultDestinationPosition(IBasicVideo *ifac
} }
static HRESULT WINAPI Basicvideo_GetVideoSize(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_GetVideoSize(IBasicVideo *iface,
long *pWidth, LONG *pWidth,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight); TRACE("(%p/%p)->(%p, %p)\n", This, iface, pWidth, pHeight);
@ -1523,26 +1511,28 @@ static HRESULT WINAPI Basicvideo_GetVideoSize(IBasicVideo *iface,
} }
static HRESULT WINAPI Basicvideo_GetVideoPaletteEntries(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_GetVideoPaletteEntries(IBasicVideo *iface,
long StartIndex, LONG StartIndex,
long Entries, LONG Entries,
long *pRetrieved, LONG *pRetrieved,
long *pPalette) { LONG *pPalette) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
FIXME("(%p/%p)->(%ld, %ld, %p, %p): stub !!!\n", This, iface, StartIndex, Entries, pRetrieved, pPalette); FIXME("(%p/%p)->(%d, %d, %p, %p): stub !!!\n", This, iface, StartIndex, Entries, pRetrieved, pPalette);
return S_OK; return S_OK;
} }
static HRESULT WINAPI Basicvideo_GetCurrentImage(IBasicVideo *iface, static HRESULT WINAPI Basicvideo_GetCurrentImage(IBasicVideo *iface,
long *pBufferSize, LONG *pBufferSize,
long *pDIBImage) { LONG *pDIBImage) {
ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IBasicVideo_vtbl, iface);
BITMAPINFOHEADER *bmiHeader; BITMAPINFOHEADER *bmiHeader;
LONG needed_size; LONG needed_size;
AM_MEDIA_TYPE *amt = &This->pInputPin->pin.mtCurrent; AM_MEDIA_TYPE *amt = &This->pInputPin->pin.mtCurrent;
char *ptr; char *ptr;
FIXME("(%p/%p)->(%p, %p): partial stub\n", This, iface, pBufferSize, pDIBImage);
EnterCriticalSection(&This->csFilter); EnterCriticalSection(&This->csFilter);
if (!This->sample_held) if (!This->sample_held)
@ -1551,8 +1541,6 @@ static HRESULT WINAPI Basicvideo_GetCurrentImage(IBasicVideo *iface,
return (This->state == State_Paused ? E_UNEXPECTED : VFW_E_NOT_PAUSED); return (This->state == State_Paused ? E_UNEXPECTED : VFW_E_NOT_PAUSED);
} }
FIXME("(%p/%p)->(%p, %p): partial stub\n", This, iface, pBufferSize, pDIBImage);
if (IsEqualIID(&amt->formattype, &FORMAT_VideoInfo)) if (IsEqualIID(&amt->formattype, &FORMAT_VideoInfo))
{ {
bmiHeader = &((VIDEOINFOHEADER *)amt->pbFormat)->bmiHeader; bmiHeader = &((VIDEOINFOHEADER *)amt->pbFormat)->bmiHeader;
@ -1580,7 +1568,7 @@ static HRESULT WINAPI Basicvideo_GetCurrentImage(IBasicVideo *iface,
if (needed_size < *pBufferSize) if (needed_size < *pBufferSize)
{ {
ERR("Buffer too small %u/%lu\n", needed_size, *pBufferSize); ERR("Buffer too small %u/%u\n", needed_size, *pBufferSize);
LeaveCriticalSection(&This->csFilter); LeaveCriticalSection(&This->csFilter);
return E_FAIL; return E_FAIL;
} }
@ -1758,13 +1746,13 @@ static HRESULT WINAPI Videowindow_get_Caption(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_WindowStyle(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_WindowStyle(IVideoWindow *iface,
long WindowStyle) { LONG WindowStyle) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
LONG old; LONG old;
old = GetWindowLongA(This->hWnd, GWL_STYLE); old = GetWindowLongA(This->hWnd, GWL_STYLE);
TRACE("(%p/%p)->(%x -> %lx)\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_ICONIC|WS_MAXIMIZE|WS_MINIMIZE|WS_VSCROLL))
return E_INVALIDARG; return E_INVALIDARG;
@ -1775,7 +1763,7 @@ static HRESULT WINAPI Videowindow_put_WindowStyle(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_WindowStyle(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_WindowStyle(IVideoWindow *iface,
long *WindowStyle) { LONG *WindowStyle) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, WindowStyle); TRACE("(%p/%p)->(%p)\n", This, iface, WindowStyle);
@ -1786,10 +1774,10 @@ static HRESULT WINAPI Videowindow_get_WindowStyle(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_WindowStyleEx(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_WindowStyleEx(IVideoWindow *iface,
long WindowStyleEx) { LONG WindowStyleEx) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, WindowStyleEx); TRACE("(%p/%p)->(%d)\n", This, iface, WindowStyleEx);
if (WindowStyleEx & (WS_DISABLED|WS_HSCROLL|WS_ICONIC|WS_MAXIMIZE|WS_MINIMIZE|WS_VSCROLL)) if (WindowStyleEx & (WS_DISABLED|WS_HSCROLL|WS_ICONIC|WS_MAXIMIZE|WS_MINIMIZE|WS_VSCROLL))
return E_INVALIDARG; return E_INVALIDARG;
@ -1801,7 +1789,7 @@ static HRESULT WINAPI Videowindow_put_WindowStyleEx(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_WindowStyleEx(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_WindowStyleEx(IVideoWindow *iface,
long *WindowStyleEx) { LONG *WindowStyleEx) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, WindowStyleEx); TRACE("(%p/%p)->(%p)\n", This, iface, WindowStyleEx);
@ -1812,18 +1800,18 @@ static HRESULT WINAPI Videowindow_get_WindowStyleEx(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_AutoShow(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_AutoShow(IVideoWindow *iface,
long AutoShow) { LONG AutoShow) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, AutoShow); TRACE("(%p/%p)->(%d)\n", This, iface, AutoShow);
This->AutoShow = 1; /* FXIME: Should be AutoShow */; This->AutoShow = 1; /* FIXME: Should be AutoShow */;
return S_OK; return S_OK;
} }
static HRESULT WINAPI Videowindow_get_AutoShow(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_AutoShow(IVideoWindow *iface,
long *AutoShow) { LONG *AutoShow) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, AutoShow); TRACE("(%p/%p)->(%p)\n", This, iface, AutoShow);
@ -1834,16 +1822,16 @@ static HRESULT WINAPI Videowindow_get_AutoShow(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_WindowState(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_WindowState(IVideoWindow *iface,
long WindowState) { LONG WindowState) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%ld): stub !!!\n", This, iface, WindowState); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, WindowState);
return S_OK; return S_OK;
} }
static HRESULT WINAPI Videowindow_get_WindowState(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_WindowState(IVideoWindow *iface,
long *WindowState) { LONG *WindowState) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, WindowState); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, WindowState);
@ -1852,16 +1840,16 @@ static HRESULT WINAPI Videowindow_get_WindowState(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_BackgroundPalette(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_BackgroundPalette(IVideoWindow *iface,
long BackgroundPalette) { LONG BackgroundPalette) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%ld): stub !!!\n", This, iface, BackgroundPalette); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, BackgroundPalette);
return S_OK; return S_OK;
} }
static HRESULT WINAPI Videowindow_get_BackgroundPalette(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_BackgroundPalette(IVideoWindow *iface,
long *pBackgroundPalette) { LONG *pBackgroundPalette) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBackgroundPalette); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, pBackgroundPalette);
@ -1870,10 +1858,10 @@ static HRESULT WINAPI Videowindow_get_BackgroundPalette(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_Visible(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_Visible(IVideoWindow *iface,
long Visible) { LONG Visible) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, Visible); TRACE("(%p/%p)->(%d)\n", This, iface, Visible);
ShowWindow(This->hWnd, Visible ? SW_SHOW : SW_HIDE); ShowWindow(This->hWnd, Visible ? SW_SHOW : SW_HIDE);
@ -1881,7 +1869,7 @@ static HRESULT WINAPI Videowindow_put_Visible(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_Visible(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_Visible(IVideoWindow *iface,
long *pVisible) { LONG *pVisible) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pVisible); TRACE("(%p/%p)->(%p)\n", This, iface, pVisible);
@ -1892,10 +1880,10 @@ static HRESULT WINAPI Videowindow_get_Visible(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_Left(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_Left(IVideoWindow *iface,
long Left) { LONG Left) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, Left); TRACE("(%p/%p)->(%d)\n", This, iface, Left);
if (!SetWindowPos(This->hWnd, NULL, Left, This->WindowPos.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE)) if (!SetWindowPos(This->hWnd, NULL, Left, This->WindowPos.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE))
return E_FAIL; return E_FAIL;
@ -1906,7 +1894,7 @@ static HRESULT WINAPI Videowindow_put_Left(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_Left(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_Left(IVideoWindow *iface,
long *pLeft) { LONG *pLeft) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pLeft); TRACE("(%p/%p)->(%p)\n", This, iface, pLeft);
@ -1917,10 +1905,10 @@ static HRESULT WINAPI Videowindow_get_Left(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_Width(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_Width(IVideoWindow *iface,
long Width) { LONG Width) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, Width); TRACE("(%p/%p)->(%d)\n", This, iface, Width);
if (!SetWindowPos(This->hWnd, NULL, 0, 0, Width, This->WindowPos.bottom-This->WindowPos.top, SWP_NOZORDER|SWP_NOMOVE)) if (!SetWindowPos(This->hWnd, NULL, 0, 0, Width, This->WindowPos.bottom-This->WindowPos.top, SWP_NOZORDER|SWP_NOMOVE))
return E_FAIL; return E_FAIL;
@ -1931,7 +1919,7 @@ static HRESULT WINAPI Videowindow_put_Width(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_Width(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_Width(IVideoWindow *iface,
long *pWidth) { LONG *pWidth) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pWidth); TRACE("(%p/%p)->(%p)\n", This, iface, pWidth);
@ -1942,10 +1930,10 @@ static HRESULT WINAPI Videowindow_get_Width(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_Top(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_Top(IVideoWindow *iface,
long Top) { LONG Top) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, Top); TRACE("(%p/%p)->(%d)\n", This, iface, Top);
if (!SetWindowPos(This->hWnd, NULL, This->WindowPos.left, Top, 0, 0, SWP_NOZORDER|SWP_NOSIZE)) if (!SetWindowPos(This->hWnd, NULL, This->WindowPos.left, Top, 0, 0, SWP_NOZORDER|SWP_NOSIZE))
return E_FAIL; return E_FAIL;
@ -1956,7 +1944,7 @@ static HRESULT WINAPI Videowindow_put_Top(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_Top(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_Top(IVideoWindow *iface,
long *pTop) { LONG *pTop) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pTop); TRACE("(%p/%p)->(%p)\n", This, iface, pTop);
@ -1967,10 +1955,10 @@ static HRESULT WINAPI Videowindow_get_Top(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_Height(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_Height(IVideoWindow *iface,
long Height) { LONG Height) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld)\n", This, iface, Height); TRACE("(%p/%p)->(%d)\n", This, iface, Height);
if (!SetWindowPos(This->hWnd, NULL, 0, 0, This->WindowPos.right-This->WindowPos.left, Height, SWP_NOZORDER|SWP_NOMOVE)) if (!SetWindowPos(This->hWnd, NULL, 0, 0, This->WindowPos.right-This->WindowPos.left, Height, SWP_NOZORDER|SWP_NOMOVE))
return E_FAIL; return E_FAIL;
@ -1981,7 +1969,7 @@ static HRESULT WINAPI Videowindow_put_Height(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_Height(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_Height(IVideoWindow *iface,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pHeight); TRACE("(%p/%p)->(%p)\n", This, iface, pHeight);
@ -2006,7 +1994,7 @@ static HRESULT WINAPI Videowindow_get_Owner(IVideoWindow *iface,
OAHWND *Owner) { OAHWND *Owner) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%08x)\n", This, iface, (DWORD) Owner); TRACE("(%p/%p)->(%p)\n", This, iface, Owner);
*(HWND*)Owner = GetParent(This->hWnd); *(HWND*)Owner = GetParent(This->hWnd);
@ -2036,7 +2024,7 @@ static HRESULT WINAPI Videowindow_get_MessageDrain(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_get_BorderColor(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_BorderColor(IVideoWindow *iface,
long *Color) { LONG *Color) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, Color); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, Color);
@ -2045,16 +2033,16 @@ static HRESULT WINAPI Videowindow_get_BorderColor(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_BorderColor(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_BorderColor(IVideoWindow *iface,
long Color) { LONG Color) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%ld): stub !!!\n", This, iface, Color); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, Color);
return S_OK; return S_OK;
} }
static HRESULT WINAPI Videowindow_get_FullScreenMode(IVideoWindow *iface, static HRESULT WINAPI Videowindow_get_FullScreenMode(IVideoWindow *iface,
long *FullScreenMode) { LONG *FullScreenMode) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, FullScreenMode); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, FullScreenMode);
@ -2063,22 +2051,22 @@ static HRESULT WINAPI Videowindow_get_FullScreenMode(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_put_FullScreenMode(IVideoWindow *iface, static HRESULT WINAPI Videowindow_put_FullScreenMode(IVideoWindow *iface,
long FullScreenMode) { LONG FullScreenMode) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%ld): stub !!!\n", This, iface, FullScreenMode); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, FullScreenMode);
return S_OK; return S_OK;
} }
static HRESULT WINAPI Videowindow_SetWindowForeground(IVideoWindow *iface, static HRESULT WINAPI Videowindow_SetWindowForeground(IVideoWindow *iface,
long Focus) { LONG Focus) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
BOOL ret; BOOL ret;
IPin* pPin; IPin* pPin;
HRESULT hr; HRESULT hr;
TRACE("(%p/%p)->(%ld)\n", This, iface, Focus); TRACE("(%p/%p)->(%d)\n", This, iface, Focus);
if ((Focus != FALSE) && (Focus != TRUE)) if ((Focus != FALSE) && (Focus != TRUE))
return E_INVALIDARG; return E_INVALIDARG;
@ -2100,12 +2088,12 @@ static HRESULT WINAPI Videowindow_SetWindowForeground(IVideoWindow *iface,
static HRESULT WINAPI Videowindow_NotifyOwnerMessage(IVideoWindow *iface, static HRESULT WINAPI Videowindow_NotifyOwnerMessage(IVideoWindow *iface,
OAHWND hwnd, OAHWND hwnd,
long uMsg, LONG uMsg,
LONG_PTR wParam, LONG_PTR wParam,
LONG_PTR lParam) { LONG_PTR lParam) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%08x, %ld, %08lx, %08lx)\n", This, iface, (DWORD) hwnd, uMsg, wParam, lParam); TRACE("(%p/%p)->(%08lx, %d, %08lx, %08lx)\n", This, iface, hwnd, uMsg, wParam, lParam);
if (!PostMessageA(This->hWnd, uMsg, wParam, lParam)) if (!PostMessageA(This->hWnd, uMsg, wParam, lParam))
return E_FAIL; return E_FAIL;
@ -2114,13 +2102,13 @@ static HRESULT WINAPI Videowindow_NotifyOwnerMessage(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_SetWindowPosition(IVideoWindow *iface, static HRESULT WINAPI Videowindow_SetWindowPosition(IVideoWindow *iface,
long Left, LONG Left,
long Top, LONG Top,
long Width, LONG Width,
long Height) { LONG Height) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
TRACE("(%p/%p)->(%ld, %ld, %ld, %ld)\n", This, iface, Left, Top, Width, Height); TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
if (!SetWindowPos(This->hWnd, NULL, Left, Top, Width, Height, SWP_NOZORDER)) if (!SetWindowPos(This->hWnd, NULL, Left, Top, Width, Height, SWP_NOZORDER))
return E_FAIL; return E_FAIL;
@ -2134,10 +2122,10 @@ static HRESULT WINAPI Videowindow_SetWindowPosition(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_GetWindowPosition(IVideoWindow *iface, static HRESULT WINAPI Videowindow_GetWindowPosition(IVideoWindow *iface,
long *pLeft, LONG *pLeft,
long *pTop, LONG *pTop,
long *pWidth, LONG *pWidth,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, 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);
@ -2151,8 +2139,8 @@ static HRESULT WINAPI Videowindow_GetWindowPosition(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_GetMinIdealImageSize(IVideoWindow *iface, static HRESULT WINAPI Videowindow_GetMinIdealImageSize(IVideoWindow *iface,
long *pWidth, LONG *pWidth,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p, %p): semi stub !!!\n", This, iface, pWidth, pHeight); FIXME("(%p/%p)->(%p, %p): semi stub !!!\n", This, iface, pWidth, pHeight);
@ -2164,8 +2152,8 @@ static HRESULT WINAPI Videowindow_GetMinIdealImageSize(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_GetMaxIdealImageSize(IVideoWindow *iface, static HRESULT WINAPI Videowindow_GetMaxIdealImageSize(IVideoWindow *iface,
long *pWidth, LONG *pWidth,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p, %p): semi stub !!!\n", This, iface, pWidth, pHeight); FIXME("(%p/%p)->(%p, %p): semi stub !!!\n", This, iface, pWidth, pHeight);
@ -2177,10 +2165,10 @@ static HRESULT WINAPI Videowindow_GetMaxIdealImageSize(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_GetRestorePosition(IVideoWindow *iface, static HRESULT WINAPI Videowindow_GetRestorePosition(IVideoWindow *iface,
long *pLeft, LONG *pLeft,
long *pTop, LONG *pTop,
long *pWidth, LONG *pWidth,
long *pHeight) { LONG *pHeight) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This, iface, pLeft, pTop, pWidth, pHeight); FIXME("(%p/%p)->(%p, %p, %p, %p): stub !!!\n", This, iface, pLeft, pTop, pWidth, pHeight);
@ -2189,16 +2177,16 @@ static HRESULT WINAPI Videowindow_GetRestorePosition(IVideoWindow *iface,
} }
static HRESULT WINAPI Videowindow_HideCursor(IVideoWindow *iface, static HRESULT WINAPI Videowindow_HideCursor(IVideoWindow *iface,
long HideCursor) { LONG HideCursor) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%ld): stub !!!\n", This, iface, HideCursor); FIXME("(%p/%p)->(%d): stub !!!\n", This, iface, HideCursor);
return S_OK; return S_OK;
} }
static HRESULT WINAPI Videowindow_IsCursorHidden(IVideoWindow *iface, static HRESULT WINAPI Videowindow_IsCursorHidden(IVideoWindow *iface,
long *CursorHidden) { LONG *CursorHidden) {
ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface); ICOM_THIS_MULTI(VideoRendererImpl, IVideoWindow_vtbl, iface);
FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, CursorHidden); FIXME("(%p/%p)->(%p): stub !!!\n", This, iface, CursorHidden);

View file

@ -73,7 +73,7 @@ static LONGLONG duration_to_bytepos(WAVEParserImpl *This, LONGLONG duration)
static HRESULT WAVEParser_Sample(LPVOID iface, IMediaSample * pSample, DWORD_PTR cookie) static HRESULT WAVEParser_Sample(LPVOID iface, IMediaSample * pSample, DWORD_PTR cookie)
{ {
WAVEParserImpl *This = (WAVEParserImpl *)iface; WAVEParserImpl *This = iface;
LPBYTE pbSrcStream = NULL; LPBYTE pbSrcStream = NULL;
ULONG cbSrcStream = 0; ULONG cbSrcStream = 0;
REFERENCE_TIME tStart, tStop; REFERENCE_TIME tStart, tStop;
@ -142,7 +142,7 @@ static HRESULT WAVEParser_Sample(LPVOID iface, IMediaSample * pSample, DWORD_PTR
if (tStop >= This->EndOfFile || (bytepos_to_duration(This, tStop) >= This->Parser.mediaSeeking.llStop) || hr == VFW_E_NOT_CONNECTED) if (tStop >= This->EndOfFile || (bytepos_to_duration(This, tStop) >= This->Parser.mediaSeeking.llStop) || hr == VFW_E_NOT_CONNECTED)
{ {
int i; unsigned int i;
TRACE("End of file reached\n"); TRACE("End of file reached\n");
@ -151,7 +151,7 @@ static HRESULT WAVEParser_Sample(LPVOID iface, IMediaSample * pSample, DWORD_PTR
IPin* ppin; IPin* ppin;
HRESULT hr; HRESULT hr;
TRACE("Send End Of Stream to output pin %d\n", i); TRACE("Send End Of Stream to output pin %u\n", i);
hr = IPin_ConnectedTo(This->Parser.ppPins[i+1], &ppin); hr = IPin_ConnectedTo(This->Parser.ppPins[i+1], &ppin);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
@ -333,7 +333,7 @@ static HRESULT WAVEParser_InputPin_PreConnect(IPin * iface, IPin * pConnectPin,
static HRESULT WAVEParser_Cleanup(LPVOID iface) static HRESULT WAVEParser_Cleanup(LPVOID iface)
{ {
WAVEParserImpl *This = (WAVEParserImpl*)iface; WAVEParserImpl *This = iface;
TRACE("(%p)->()\n", This); TRACE("(%p)->()\n", This);
@ -342,7 +342,7 @@ static HRESULT WAVEParser_Cleanup(LPVOID iface)
static HRESULT WAVEParser_first_request(LPVOID iface) static HRESULT WAVEParser_first_request(LPVOID iface)
{ {
WAVEParserImpl *This = (WAVEParserImpl *)iface; WAVEParserImpl *This = iface;
PullPin *pin = This->Parser.pInputPin; PullPin *pin = This->Parser.pInputPin;
HRESULT hr; HRESULT hr;
IMediaSample *sample; IMediaSample *sample;
@ -431,7 +431,7 @@ HRESULT WAVEParser_create(IUnknown * pUnkOuter, LPVOID * ppv)
if (FAILED(hr)) if (FAILED(hr))
return hr; return hr;
*ppv = (LPVOID)This; *ppv = This;
return hr; return hr;
} }