35#include "wine/unicode.h"
43static const WCHAR wcsOutputPinName[] = {
'o',
'u',
't',
'p',
'u',
't',
' ',
'p',
'i',
'n',0};
82 TransformFilter * pTransform;
87 if (pTransform->pFuncsTable->pfnCheckInputType)
88 return pTransform->pFuncsTable->pfnCheckInputType(pTransform, pmt);
97 TransformFilter * pTransform;
102 if (pTransform->filter.state == State_Stopped)
108 if (
This->end_of_stream ||
This->flushing)
115 if (pTransform->pFuncsTable->pfnReceive)
116 hr = pTransform->pFuncsTable->pfnReceive(pTransform, pInSample);
128 TRACE(
"%p\n", iface);
130 if (
IsEqualIID(&pmt->majortype, &outpmt->majortype)
139 return pTransformFilter->pFuncsTable->pfnDecideBufferSize(pTransformFilter, pAlloc, ppropInputRequest);
161 IPin_AddRef(
This->ppPins[
pos]);
169 return (
This->npins+1);
181 BasePinImpl_GetMediaTypeVersion,
182 BasePinImpl_GetMediaType
191 BasePinImpl_GetMediaTypeVersion,
196 BaseOutputPinImpl_BreakConnect
205 BaseFilter_Init(&pTransformFilter->filter, pVtbl, pClsid, (
DWORD_PTR)(__FILE__
": TransformFilter.csFilter"), &
tfBaseFuncTable);
208 pTransformFilter->csReceive.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": TransformFilter.csReceive");
211 pTransformFilter->pFuncsTable = pFuncsTable;
212 ZeroMemory(&pTransformFilter->pmt,
sizeof(pTransformFilter->pmt));
213 pTransformFilter->npins = 2;
219 piInput.pFilter = &pTransformFilter->filter.IBaseFilter_iface;
222 piOutput.pFilter = &pTransformFilter->filter.IBaseFilter_iface;
233 ERR(
"Cannot create output pin (%x)\n",
hr);
235 QualityControlImpl_Create( pTransformFilter->ppPins[0], &pTransformFilter->filter.IBaseFilter_iface, &pTransformFilter->qcimpl);
243 pTransformFilter->seekthru_unk =
NULL;
245 &
IID_IUnknown, (
void **)&pTransformFilter->seekthru_unk);
248 IUnknown_QueryInterface(pTransformFilter->seekthru_unk, &IID_ISeekingPassThru, (
void**)&passthru);
249 ISeekingPassThru_Init(passthru,
FALSE, pTransformFilter->ppPins[0]);
250 ISeekingPassThru_Release(passthru);
257 BaseFilterImpl_Release(&pTransformFilter->filter.IBaseFilter_iface);
265 TransformFilter* pTf;
267 *ppTransformFilter =
NULL;
269 assert(filter_size >=
sizeof(TransformFilter));
280 *ppTransformFilter = &pTf->filter.IBaseFilter_iface;
302 return IUnknown_QueryInterface(
This->seekthru_unk,
riid,
ppv);
304 hr = BaseFilterImpl_QueryInterface(iface,
riid,
ppv);
318 TRACE(
"(%p/%p)->() Release from %d\n",
This, iface, refCount + 1);
324 for (
i = 0;
i <
This->npins;
i++)
330 IPin_Disconnect(pConnectedTo);
331 IPin_Release(pConnectedTo);
333 IPin_Disconnect(
This->ppPins[
i]);
335 IPin_Release(
This->ppPins[
i]);
340 TRACE(
"Destroying transform filter\n");
341 This->csReceive.DebugInfo->Spare[0] = 0;
345 IUnknown_Release(
This->seekthru_unk);
346 BaseFilter_Destroy(&
This->filter);
363 This->filter.state = State_Stopped;
364 if (
This->pFuncsTable->pfnStopStreaming)
365 hr =
This->pFuncsTable->pfnStopStreaming(
This);
383 if (
This->filter.state == State_Stopped)
384 hr = IBaseFilter_Run(iface, -1);
389 This->filter.state = State_Paused;
405 if (
This->filter.state == State_Stopped)
408 if (
This->pFuncsTable->pfnStartStreaming)
409 hr =
This->pFuncsTable->pfnStartStreaming(
This);
416 This->filter.rtStreamStart = tStart;
417 This->filter.state = State_Running;
444 TransformFilter* pTransform;
448 TRACE(
"(%p)->()\n", iface);
455 hr = IPin_ConnectedTo(pTransform->ppPins[1], &ppin);
458 hr = IPin_EndOfStream(ppin);
470 TransformFilter* pTransform;
473 TRACE(
"(%p)->(%p, %p)\n", iface, pReceivePin, pmt);
477 if (pTransform->pFuncsTable->pfnSetMediaType)
478 hr = pTransform->pFuncsTable->pfnSetMediaType(pTransform,
PINDIR_INPUT, pmt);
480 if (
SUCCEEDED(
hr) && pTransform->pFuncsTable->pfnCompleteConnect)
481 hr = pTransform->pFuncsTable->pfnCompleteConnect(pTransform,
PINDIR_INPUT, pReceivePin);
485 hr = BaseInputPinImpl_ReceiveConnection(iface, pReceivePin, pmt);
486 if (
FAILED(
hr) && pTransform->pFuncsTable->pfnBreakConnect)
487 pTransform->pFuncsTable->pfnBreakConnect(pTransform,
PINDIR_INPUT);
496 TransformFilter* pTransform;
498 TRACE(
"(%p)->()\n", iface);
501 if (pTransform->pFuncsTable->pfnBreakConnect)
502 pTransform->pFuncsTable->pfnBreakConnect(pTransform,
PINDIR_INPUT);
504 return BasePinImpl_Disconnect(iface);
510 TransformFilter* pTransform;
513 TRACE(
"(%p)->()\n", iface);
517 if (pTransform->pFuncsTable->pfnBeginFlush)
518 hr = pTransform->pFuncsTable->pfnBeginFlush(pTransform);
520 hr = BaseInputPinImpl_BeginFlush(iface);
528 TransformFilter* pTransform;
531 TRACE(
"(%p)->()\n", iface);
535 if (pTransform->pFuncsTable->pfnEndFlush)
536 hr = pTransform->pFuncsTable->pfnEndFlush(pTransform);
538 hr = BaseInputPinImpl_EndFlush(iface);
546 TransformFilter* pTransform;
553 if (pTransform->pFuncsTable->pfnNewSegment)
554 hr = pTransform->pFuncsTable->pfnNewSegment(pTransform, tStart, tStop, dRate);
556 hr = BaseInputPinImpl_NewSegment(iface, tStart, tStop, dRate);
563 BaseInputPinImpl_QueryInterface,
565 BaseInputPinImpl_Release,
566 BaseInputPinImpl_Connect,
569 BasePinImpl_ConnectedTo,
570 BasePinImpl_ConnectionMediaType,
571 BasePinImpl_QueryPinInfo,
572 BasePinImpl_QueryDirection,
574 BaseInputPinImpl_QueryAccept,
575 BasePinImpl_EnumMediaTypes,
576 BasePinImpl_QueryInternalConnections,
585 BaseOutputPinImpl_QueryInterface,
587 BaseOutputPinImpl_Release,
588 BaseOutputPinImpl_Connect,
589 BaseOutputPinImpl_ReceiveConnection,
590 BaseOutputPinImpl_Disconnect,
591 BasePinImpl_ConnectedTo,
592 BasePinImpl_ConnectionMediaType,
593 BasePinImpl_QueryPinInfo,
594 BasePinImpl_QueryDirection,
597 BasePinImpl_EnumMediaTypes,
598 BasePinImpl_QueryInternalConnections,
599 BaseOutputPinImpl_EndOfStream,
600 BaseOutputPinImpl_BeginFlush,
601 BaseOutputPinImpl_EndFlush,
602 BasePinImpl_NewSegment
606 QualityControlImpl *qc = (QualityControlImpl*)iface;
609 if (
This->pFuncsTable->pfnNotify)
610 return This->pFuncsTable->pfnNotify(
This, sender, qm);
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define IsEqualIID(riid1, riid2)
ULONG WINAPI QualityControlImpl_AddRef(IQualityControl *iface)
HRESULT WINAPI QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm)
void QualityControlImpl_Destroy(QualityControlImpl *This)
HRESULT WINAPI QualityControlImpl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
ULONG WINAPI QualityControlImpl_Release(IQualityControl *iface)
HRESULT QualityControlImpl_Create(IPin *input, IBaseFilter *self, QualityControlImpl **ppv)
HRESULT WINAPI QualityControlImpl_SetSink(IQualityControl *iface, IQualityControl *tonotify)
HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE *pDest, const AM_MEDIA_TYPE *pSrc)
void WINAPI FreeMediaType(AM_MEDIA_TYPE *pMediaType)
HRESULT WINAPI BaseOutputPinImpl_DecideAllocator(struct strmbase_source *pin, IMemInputPin *peer, IMemAllocator **allocator)
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *pin, IPin *peer, const AM_MEDIA_TYPE *mt)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define CONTAINING_RECORD(address, type, field)
#define VFW_E_WRONG_STATE
#define VFW_S_NO_MORE_ITEMS
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)