mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 01:45:40 +00:00
- Sync quartz with Wine head
svn path=/trunk/; revision=40045
This commit is contained in:
parent
ea9fc099f5
commit
57e8c21128
26 changed files with 871 additions and 888 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
FIXME("Thread %u terminated with hr %08x!\n", streamnumber, hr);
|
if (hr != S_FALSE)
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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,8 +781,8 @@ 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);
|
||||||
|
|
||||||
if (IsEqualGUID(&pmt->majortype, &This->pmt->majortype) &&
|
if (IsEqualGUID(&pmt->majortype, &This->pmt->majortype) &&
|
||||||
|
@ -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
|
@ -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));
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
@ -35,9 +36,9 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
|
||||||
switch(fdwReason) {
|
switch(fdwReason) {
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
DisableThreadLibraryCalls(hInstDLL);
|
DisableThreadLibraryCalls(hInstDLL);
|
||||||
break;
|
break;
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -86,11 +87,11 @@ DSCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
|
||||||
IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
|
IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
|
||||||
|
|
||||||
if (IsEqualGUID(riid, &IID_IUnknown)
|
if (IsEqualGUID(riid, &IID_IUnknown)
|
||||||
|| IsEqualGUID(riid, &IID_IClassFactory))
|
|| IsEqualGUID(riid, &IID_IClassFactory))
|
||||||
{
|
{
|
||||||
IClassFactory_AddRef(iface);
|
IClassFactory_AddRef(iface);
|
||||||
*ppobj = This;
|
*ppobj = This;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ppobj = NULL;
|
*ppobj = NULL;
|
||||||
|
@ -111,14 +112,14 @@ static ULONG WINAPI DSCF_Release(LPCLASSFACTORY iface)
|
||||||
ULONG ref = InterlockedDecrement(&This->ref);
|
ULONG ref = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
if (ref == 0)
|
if (ref == 0)
|
||||||
CoTaskMemFree(This);
|
CoTaskMemFree(This);
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static HRESULT WINAPI DSCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
|
static HRESULT WINAPI DSCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter,
|
||||||
REFIID riid, LPVOID *ppobj)
|
REFIID riid, LPVOID *ppobj)
|
||||||
{
|
{
|
||||||
IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
|
IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
@ -176,19 +177,19 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
|
||||||
TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
|
TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
|
||||||
|
|
||||||
if ( !IsEqualGUID( &IID_IClassFactory, riid )
|
if ( !IsEqualGUID( &IID_IClassFactory, riid )
|
||||||
&& ! IsEqualGUID( &IID_IUnknown, riid) )
|
&& ! IsEqualGUID( &IID_IUnknown, riid) )
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
|
|
||||||
for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
|
for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
|
||||||
{
|
{
|
||||||
if (IsEqualGUID(object_creation[i].clsid, rclsid))
|
if (IsEqualGUID(object_creation[i].clsid, rclsid))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == sizeof(object_creation)/sizeof(object_creation[0]))
|
if (i == sizeof(object_creation)/sizeof(object_creation[0]))
|
||||||
{
|
{
|
||||||
FIXME("%s: no class found.\n", debugstr_guid(rclsid));
|
FIXME("%s: no class found.\n", debugstr_guid(rclsid));
|
||||||
return CLASS_E_CLASSNOTAVAILABLE;
|
return CLASS_E_CLASSNOTAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
factory = CoTaskMemAlloc(sizeof(*factory));
|
factory = CoTaskMemAlloc(sizeof(*factory));
|
||||||
|
@ -216,8 +217,8 @@ HRESULT WINAPI DllCanUnloadNow(void)
|
||||||
{ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } , #name },
|
{ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } , #name },
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
const GUID riid;
|
const GUID riid;
|
||||||
const char *name;
|
const char *name;
|
||||||
} InterfaceDesc[] =
|
} InterfaceDesc[] =
|
||||||
{
|
{
|
||||||
#include "uuids.h"
|
#include "uuids.h"
|
||||||
|
@ -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);
|
||||||
|
@ -271,7 +252,7 @@ LONG WINAPI DBToAmpFactor(LONG db)
|
||||||
FIXME("(%d) Stub!\n", db);
|
FIXME("(%d) Stub!\n", db);
|
||||||
/* Avoid divide by zero (probably during range computation) in Windows Media Player 6.4 */
|
/* Avoid divide by zero (probably during range computation) in Windows Media Player 6.4 */
|
||||||
if (db < -1000)
|
if (db < -1000)
|
||||||
return 0;
|
return 0;
|
||||||
return 100;
|
return 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,40 +31,42 @@
|
||||||
|
|
||||||
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),
|
||||||
HRESULT (* fnBufferReleased)(IMemAllocator *, StdMediaSample2 *),
|
HRESULT (* fnBufferReleased)(IMemAllocator *, StdMediaSample2 *),
|
||||||
void (* fnDestroyed)(IMemAllocator *),
|
void (* fnDestroyed)(IMemAllocator *),
|
||||||
CRITICAL_SECTION *pCritSect,
|
CRITICAL_SECTION *pCritSect,
|
||||||
BaseMemAllocator * pMemAlloc)
|
BaseMemAllocator * pMemAlloc)
|
||||||
{
|
{
|
||||||
assert(fnAlloc && fnFree && fnDestroyed);
|
assert(fnAlloc && fnFree && fnDestroyed);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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__ */
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
|
||||||
};
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue