strmbase/transform: Share pin and filter reference counts.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
08473519e9
commit
7f3d463b45
|
@ -229,10 +229,8 @@ static void test_enum_pins(void)
|
||||||
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
||||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pins[0]);
|
ref = get_refcount(pins[0]);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(enum1);
|
ref = get_refcount(enum1);
|
||||||
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
||||||
|
@ -243,10 +241,8 @@ todo_wine
|
||||||
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
||||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pins[0]);
|
ref = get_refcount(pins[0]);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(enum1);
|
ref = get_refcount(enum1);
|
||||||
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
||||||
|
@ -383,7 +379,7 @@ static void test_pin_info(void)
|
||||||
hr = IBaseFilter_FindPin(filter, sink_id, &pin);
|
hr = IBaseFilter_FindPin(filter, sink_id, &pin);
|
||||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pin);
|
ref = get_refcount(pin);
|
||||||
ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
||||||
|
|
||||||
|
@ -394,9 +390,9 @@ static void test_pin_info(void)
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(!lstrcmpW(info.achName, sink_name), "Got name %s.\n", wine_dbgstr_w(info.achName));
|
ok(!lstrcmpW(info.achName, sink_name), "Got name %s.\n", wine_dbgstr_w(info.achName));
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pin);
|
ref = get_refcount(pin);
|
||||||
todo_wine ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
IBaseFilter_Release(info.pFilter);
|
IBaseFilter_Release(info.pFilter);
|
||||||
|
|
||||||
hr = IPin_QueryDirection(pin, &dir);
|
hr = IPin_QueryDirection(pin, &dir);
|
||||||
|
|
|
@ -254,10 +254,8 @@ static void test_enum_pins(void)
|
||||||
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
||||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pins[0]);
|
ref = get_refcount(pins[0]);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(enum1);
|
ref = get_refcount(enum1);
|
||||||
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
||||||
|
@ -268,10 +266,8 @@ todo_wine
|
||||||
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
hr = IEnumPins_Next(enum1, 1, pins, NULL);
|
||||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pins[0]);
|
ref = get_refcount(pins[0]);
|
||||||
todo_wine
|
|
||||||
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(enum1);
|
ref = get_refcount(enum1);
|
||||||
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 1, "Got unexpected refcount %d.\n", ref);
|
||||||
|
@ -408,7 +404,7 @@ static void test_pin_info(void)
|
||||||
hr = IBaseFilter_FindPin(filter, sink_id, &pin);
|
hr = IBaseFilter_FindPin(filter, sink_id, &pin);
|
||||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pin);
|
ref = get_refcount(pin);
|
||||||
ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 2, "Got unexpected refcount %d.\n", ref);
|
||||||
|
|
||||||
|
@ -418,9 +414,9 @@ static void test_pin_info(void)
|
||||||
ok(info.dir == PINDIR_INPUT, "Got direction %d.\n", info.dir);
|
ok(info.dir == PINDIR_INPUT, "Got direction %d.\n", info.dir);
|
||||||
todo_wine ok(!lstrcmpW(info.achName, sink_name), "Got name %s.\n", wine_dbgstr_w(info.achName));
|
todo_wine ok(!lstrcmpW(info.achName, sink_name), "Got name %s.\n", wine_dbgstr_w(info.achName));
|
||||||
ref = get_refcount(filter);
|
ref = get_refcount(filter);
|
||||||
todo_wine ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
ref = get_refcount(pin);
|
ref = get_refcount(pin);
|
||||||
todo_wine ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
ok(ref == 3, "Got unexpected refcount %d.\n", ref);
|
||||||
IBaseFilter_Release(info.pFilter);
|
IBaseFilter_Release(info.pFilter);
|
||||||
|
|
||||||
hr = IPin_QueryDirection(pin, &dir);
|
hr = IPin_QueryDirection(pin, &dir);
|
||||||
|
|
|
@ -153,9 +153,11 @@ static void transform_destroy(BaseFilter *iface)
|
||||||
IPin_Release(peer);
|
IPin_Release(peer);
|
||||||
}
|
}
|
||||||
IPin_Disconnect(filter->ppPins[i]);
|
IPin_Disconnect(filter->ppPins[i]);
|
||||||
IPin_Release(filter->ppPins[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BaseInputPin_Destroy(impl_BaseInputPin_from_IPin(filter->ppPins[0]));
|
||||||
|
BaseOutputPin_Destroy(impl_BaseOutputPin_from_IPin(filter->ppPins[1]));
|
||||||
|
|
||||||
CoTaskMemFree(filter->ppPins);
|
CoTaskMemFree(filter->ppPins);
|
||||||
|
|
||||||
filter->csReceive.DebugInfo->Spare[0] = 0;
|
filter->csReceive.DebugInfo->Spare[0] = 0;
|
||||||
|
@ -379,7 +381,17 @@ HRESULT WINAPI TransformFilterImpl_Notify(TransformFilter *iface, IBaseFilter *s
|
||||||
return QualityControlImpl_Notify((IQualityControl*)iface->qcimpl, sender, qm);
|
return QualityControlImpl_Notify((IQualityControl*)iface->qcimpl, sender, qm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IBaseFilter implementation **/
|
static ULONG WINAPI TransformFilter_InputPin_AddRef(IPin *iface)
|
||||||
|
{
|
||||||
|
BaseInputPin *pin = impl_BaseInputPin_from_IPin(iface);
|
||||||
|
return IBaseFilter_AddRef(pin->pin.pinInfo.pFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI TransformFilter_InputPin_Release(IPin *iface)
|
||||||
|
{
|
||||||
|
BaseInputPin *pin = impl_BaseInputPin_from_IPin(iface);
|
||||||
|
return IBaseFilter_Release(pin->pin.pinInfo.pFilter);
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI TransformFilter_InputPin_EndOfStream(IPin * iface)
|
static HRESULT WINAPI TransformFilter_InputPin_EndOfStream(IPin * iface)
|
||||||
{
|
{
|
||||||
|
@ -504,8 +516,8 @@ static HRESULT WINAPI TransformFilter_InputPin_NewSegment(IPin * iface, REFERENC
|
||||||
static const IPinVtbl TransformFilter_InputPin_Vtbl =
|
static const IPinVtbl TransformFilter_InputPin_Vtbl =
|
||||||
{
|
{
|
||||||
BaseInputPinImpl_QueryInterface,
|
BaseInputPinImpl_QueryInterface,
|
||||||
BasePinImpl_AddRef,
|
TransformFilter_InputPin_AddRef,
|
||||||
BaseInputPinImpl_Release,
|
TransformFilter_InputPin_Release,
|
||||||
BaseInputPinImpl_Connect,
|
BaseInputPinImpl_Connect,
|
||||||
TransformFilter_InputPin_ReceiveConnection,
|
TransformFilter_InputPin_ReceiveConnection,
|
||||||
TransformFilter_InputPin_Disconnect,
|
TransformFilter_InputPin_Disconnect,
|
||||||
|
@ -543,11 +555,23 @@ static HRESULT WINAPI transform_source_QueryInterface(IPin *iface, REFIID iid, v
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI transform_source_AddRef(IPin *iface)
|
||||||
|
{
|
||||||
|
BaseOutputPin *pin = impl_BaseOutputPin_from_IPin(iface);
|
||||||
|
return IBaseFilter_AddRef(pin->pin.pinInfo.pFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI transform_source_Release(IPin *iface)
|
||||||
|
{
|
||||||
|
BaseOutputPin *pin = impl_BaseOutputPin_from_IPin(iface);
|
||||||
|
return IBaseFilter_Release(pin->pin.pinInfo.pFilter);
|
||||||
|
}
|
||||||
|
|
||||||
static const IPinVtbl TransformFilter_OutputPin_Vtbl =
|
static const IPinVtbl TransformFilter_OutputPin_Vtbl =
|
||||||
{
|
{
|
||||||
transform_source_QueryInterface,
|
transform_source_QueryInterface,
|
||||||
BasePinImpl_AddRef,
|
transform_source_AddRef,
|
||||||
BaseOutputPinImpl_Release,
|
transform_source_Release,
|
||||||
BaseOutputPinImpl_Connect,
|
BaseOutputPinImpl_Connect,
|
||||||
BaseOutputPinImpl_ReceiveConnection,
|
BaseOutputPinImpl_ReceiveConnection,
|
||||||
BaseOutputPinImpl_Disconnect,
|
BaseOutputPinImpl_Disconnect,
|
||||||
|
|
Loading…
Reference in New Issue