Initialize the COM libraries for the newly created worker thread in
the AVI splitter. Fixed some returned error codes. Show refcount in the AddRef/Release traces in filter. Added 24 bits source in the video renderer.
This commit is contained in:
parent
35a92e16c7
commit
9b8d5c625f
|
@ -401,14 +401,18 @@ static HRESULT WINAPI AVIDec_QueryInterface(IBaseFilter * iface, REFIID riid, LP
|
||||||
static ULONG WINAPI AVIDec_AddRef(IBaseFilter * iface)
|
static ULONG WINAPI AVIDec_AddRef(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
AVIDecImpl *This = (AVIDecImpl *)iface;
|
AVIDecImpl *This = (AVIDecImpl *)iface;
|
||||||
TRACE("(%p/%p)->()\n", This, iface);
|
|
||||||
|
TRACE("(%p/%p)->() AddRef from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
return InterlockedIncrement(&This->refCount);
|
return InterlockedIncrement(&This->refCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI AVIDec_Release(IBaseFilter * iface)
|
static ULONG WINAPI AVIDec_Release(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
AVIDecImpl *This = (AVIDecImpl *)iface;
|
AVIDecImpl *This = (AVIDecImpl *)iface;
|
||||||
TRACE("(%p/%p)->()\n", This, iface);
|
|
||||||
|
TRACE("(%p/%p)->() Release from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
if (!InterlockedDecrement(&This->refCount))
|
if (!InterlockedDecrement(&This->refCount))
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
|
@ -211,14 +211,18 @@ static HRESULT WINAPI AVISplitter_QueryInterface(IBaseFilter * iface, REFIID rii
|
||||||
static ULONG WINAPI AVISplitter_AddRef(IBaseFilter * iface)
|
static ULONG WINAPI AVISplitter_AddRef(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
AVISplitter *This = (AVISplitter *)iface;
|
AVISplitter *This = (AVISplitter *)iface;
|
||||||
TRACE("()\n");
|
|
||||||
|
TRACE("(%p/%p)->() AddRef from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
return InterlockedIncrement(&This->refCount);
|
return InterlockedIncrement(&This->refCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI AVISplitter_Release(IBaseFilter * iface)
|
static ULONG WINAPI AVISplitter_Release(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
AVISplitter *This = (AVISplitter *)iface;
|
AVISplitter *This = (AVISplitter *)iface;
|
||||||
TRACE("()\n");
|
|
||||||
|
TRACE("(%p/%p)->() Release from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
if (!InterlockedDecrement(&This->refCount))
|
if (!InterlockedDecrement(&This->refCount))
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
|
@ -358,14 +358,18 @@ static HRESULT WINAPI DSoundRender_QueryInterface(IBaseFilter * iface, REFIID ri
|
||||||
static ULONG WINAPI DSoundRender_AddRef(IBaseFilter * iface)
|
static ULONG WINAPI DSoundRender_AddRef(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
DSoundRenderImpl *This = (DSoundRenderImpl *)iface;
|
DSoundRenderImpl *This = (DSoundRenderImpl *)iface;
|
||||||
TRACE("(%p/%p)->()\n", This, iface);
|
|
||||||
|
TRACE("(%p/%p)->() AddRef from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
return InterlockedIncrement(&This->refCount);
|
return InterlockedIncrement(&This->refCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface)
|
static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
DSoundRenderImpl *This = (DSoundRenderImpl *)iface;
|
DSoundRenderImpl *This = (DSoundRenderImpl *)iface;
|
||||||
TRACE("(%p/%p)->()\n", This, iface);
|
|
||||||
|
TRACE("(%p/%p)->() Release from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
if (!InterlockedDecrement(&This->refCount))
|
if (!InterlockedDecrement(&This->refCount))
|
||||||
{
|
{
|
||||||
DeleteCriticalSection(&This->csFilter);
|
DeleteCriticalSection(&This->csFilter);
|
||||||
|
|
|
@ -283,7 +283,7 @@ static HRESULT GetClassMediaFile(IAsyncReader * pReader, LPCOLESTR pszFileName,
|
||||||
if (SUCCEEDED(hr) && !bFound)
|
if (SUCCEEDED(hr) && !bFound)
|
||||||
{
|
{
|
||||||
ERR("Media class not found\n");
|
ERR("Media class not found\n");
|
||||||
hr = S_FALSE;
|
hr = E_FAIL;
|
||||||
}
|
}
|
||||||
else if (bFound)
|
else if (bFound)
|
||||||
TRACE("Found file's class: major = %s, subtype = %s\n", qzdebugstr_guid(majorType), qzdebugstr_guid(minorType));
|
TRACE("Found file's class: major = %s, subtype = %s\n", qzdebugstr_guid(majorType), qzdebugstr_guid(minorType));
|
||||||
|
@ -358,7 +358,7 @@ static ULONG WINAPI AsyncReader_AddRef(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
AsyncReader *This = (AsyncReader *)iface;
|
AsyncReader *This = (AsyncReader *)iface;
|
||||||
|
|
||||||
TRACE("()\n");
|
TRACE("(%p/%p)->() AddRef from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
return InterlockedIncrement(&This->refCount);
|
return InterlockedIncrement(&This->refCount);
|
||||||
}
|
}
|
||||||
|
@ -367,7 +367,7 @@ static ULONG WINAPI AsyncReader_Release(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
AsyncReader *This = (AsyncReader *)iface;
|
AsyncReader *This = (AsyncReader *)iface;
|
||||||
|
|
||||||
TRACE("()\n");
|
TRACE("(%p/%p)->() Release from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
if (!InterlockedDecrement(&This->refCount))
|
if (!InterlockedDecrement(&This->refCount))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1030,7 +1030,7 @@ error:
|
||||||
IGraphBuilder_RemoveFilter(iface, preader);
|
IGraphBuilder_RemoveFilter(iface, preader);
|
||||||
IBaseFilter_Release(preader);
|
IBaseFilter_Release(preader);
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI Graphbuilder_SetLogFile(IGraphBuilder *iface,
|
static HRESULT WINAPI Graphbuilder_SetLogFile(IGraphBuilder *iface,
|
||||||
|
|
|
@ -1134,6 +1134,8 @@ static void CALLBACK PullPin_Thread_Process(ULONG_PTR iface)
|
||||||
REFERENCE_TIME rtCurrent;
|
REFERENCE_TIME rtCurrent;
|
||||||
ALLOCATOR_PROPERTIES allocProps;
|
ALLOCATOR_PROPERTIES allocProps;
|
||||||
|
|
||||||
|
CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
||||||
|
|
||||||
SetEvent(This->hEventStateChanged);
|
SetEvent(This->hEventStateChanged);
|
||||||
|
|
||||||
hr = IMemAllocator_GetProperties(This->pAlloc, &allocProps);
|
hr = IMemAllocator_GetProperties(This->pAlloc, &allocProps);
|
||||||
|
@ -1174,6 +1176,8 @@ static void CALLBACK PullPin_Thread_Process(ULONG_PTR iface)
|
||||||
if (pSample)
|
if (pSample)
|
||||||
IMediaSample_Release(pSample);
|
IMediaSample_Release(pSample);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CALLBACK PullPin_Thread_Stop(ULONG_PTR iface)
|
static void CALLBACK PullPin_Thread_Stop(ULONG_PTR iface)
|
||||||
|
|
|
@ -222,21 +222,22 @@ static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data,
|
||||||
*(ptr + i*psz + 3 + j * sdesc.u1.lPitch) = 0xFF;
|
*(ptr + i*psz + 3 + j * sdesc.u1.lPitch) = 0xFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (format->bmiHeader.biBitCount == 32)
|
else if ((format->bmiHeader.biBitCount == 24) || (format->bmiHeader.biBitCount == 32))
|
||||||
{
|
{
|
||||||
int psz = sdesc.ddpfPixelFormat.u1.dwRGBBitCount == 32 ? 4 : 3;
|
int dpsz = sdesc.ddpfPixelFormat.u1.dwRGBBitCount == 32 ? 4 : 3;
|
||||||
|
int spsz = format->bmiHeader.biBitCount == 32 ? 4 : 3;
|
||||||
for (j = 0; j < height; j++)
|
for (j = 0; j < height; j++)
|
||||||
for (i = 0; i < width; i++)
|
for (i = 0; i < width; i++)
|
||||||
{
|
{
|
||||||
*(ptr + i*psz + 0 + j * sdesc.u1.lPitch) = *(data + (i + 0 + (height-1-j) * width)*4 + 0);
|
*(ptr + i*dpsz + 0 + j * sdesc.u1.lPitch) = *(data + (i + 0 + (height-1-j) * width)*spsz + 0);
|
||||||
*(ptr + i*psz + 1 + j * sdesc.u1.lPitch) = *(data + (i + 0 + (height-1-j) * width)*4 + 1);
|
*(ptr + i*dpsz + 1 + j * sdesc.u1.lPitch) = *(data + (i + 0 + (height-1-j) * width)*spsz + 1);
|
||||||
*(ptr + i*psz + 2 + j * sdesc.u1.lPitch) = *(data + (i + 0 + (height-1-j) * width)*4 + 2);
|
*(ptr + i*dpsz + 2 + j * sdesc.u1.lPitch) = *(data + (i + 0 + (height-1-j) * width)*spsz + 2);
|
||||||
if (psz == 4)
|
if (dpsz == 4)
|
||||||
*(ptr + i*psz + 3 + j * sdesc.u1.lPitch) = 0xFF;
|
*(ptr + i*dpsz + 3 + j * sdesc.u1.lPitch) = 0xFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FIXME("Source size with a depths other than paletted 8 or 32 bits are not yet supported\n");
|
FIXME("Source size with a depths other than 8 (paletted), 24 or 32 bits are not yet supported\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FIXME("Destination depths with a depth other than 24 or 32 bits are not yet supported\n");
|
FIXME("Destination depths with a depth other than 24 or 32 bits are not yet supported\n");
|
||||||
|
@ -403,14 +404,18 @@ static HRESULT WINAPI VideoRenderer_QueryInterface(IBaseFilter * iface, REFIID r
|
||||||
static ULONG WINAPI VideoRenderer_AddRef(IBaseFilter * iface)
|
static ULONG WINAPI VideoRenderer_AddRef(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
VideoRendererImpl *This = (VideoRendererImpl *)iface;
|
VideoRendererImpl *This = (VideoRendererImpl *)iface;
|
||||||
|
|
||||||
TRACE("(%p/%p)->() AddRef from %ld\n", This, iface, This->refCount);
|
TRACE("(%p/%p)->() AddRef from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
return InterlockedIncrement(&This->refCount);
|
return InterlockedIncrement(&This->refCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI VideoRenderer_Release(IBaseFilter * iface)
|
static ULONG WINAPI VideoRenderer_Release(IBaseFilter * iface)
|
||||||
{
|
{
|
||||||
VideoRendererImpl *This = (VideoRendererImpl *)iface;
|
VideoRendererImpl *This = (VideoRendererImpl *)iface;
|
||||||
|
|
||||||
TRACE("(%p/%p)->() Release from %ld\n", This, iface, This->refCount);
|
TRACE("(%p/%p)->() Release from %ld\n", This, iface, This->refCount);
|
||||||
|
|
||||||
if (!InterlockedDecrement(&This->refCount))
|
if (!InterlockedDecrement(&This->refCount))
|
||||||
{
|
{
|
||||||
DeleteCriticalSection(&This->csFilter);
|
DeleteCriticalSection(&This->csFilter);
|
||||||
|
|
Loading…
Reference in New Issue