qedit/samplegrabber: Implement sample_grabber_source_query_accept().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a5f547420f
commit
cdf7d4ff9a
|
@ -547,6 +547,28 @@ static HRESULT sample_grabber_source_query_interface(struct strmbase_pin *iface,
|
|||
|
||||
static HRESULT sample_grabber_source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
|
||||
{
|
||||
SG_Impl *filter = impl_from_source_pin(iface);
|
||||
|
||||
if (filter->sink.pin.peer && IPin_QueryAccept(filter->sink.pin.peer, mt) != S_OK)
|
||||
return S_FALSE;
|
||||
|
||||
strmbase_dump_media_type(&filter->filter_mt);
|
||||
|
||||
if (IsEqualGUID(&filter->filter_mt.majortype, &GUID_NULL))
|
||||
return S_OK;
|
||||
if (!IsEqualGUID(&filter->filter_mt.majortype, &mt->majortype))
|
||||
return S_FALSE;
|
||||
|
||||
if (IsEqualGUID(&filter->filter_mt.subtype, &GUID_NULL))
|
||||
return S_OK;
|
||||
if (!IsEqualGUID(&filter->filter_mt.subtype, &mt->subtype))
|
||||
return S_FALSE;
|
||||
|
||||
if (IsEqualGUID(&filter->filter_mt.formattype, &GUID_NULL))
|
||||
return S_OK;
|
||||
if (!IsEqualGUID(&filter->filter_mt.formattype, &mt->formattype))
|
||||
return S_FALSE;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -566,22 +588,6 @@ static HRESULT sample_grabber_source_get_media_type(struct strmbase_pin *iface,
|
|||
static HRESULT WINAPI sample_grabber_source_DecideAllocator(struct strmbase_source *iface,
|
||||
IMemInputPin *peer, IMemAllocator **allocator)
|
||||
{
|
||||
SG_Impl *filter = impl_from_source_pin(&iface->pin);
|
||||
const AM_MEDIA_TYPE *mt = &iface->pin.mt;
|
||||
|
||||
if (!IsEqualGUID(&mt->majortype, &filter->filter_mt.majortype))
|
||||
return VFW_E_TYPE_NOT_ACCEPTED;
|
||||
if (!IsEqualGUID(&mt->subtype, &filter->filter_mt.subtype))
|
||||
return VFW_E_TYPE_NOT_ACCEPTED;
|
||||
if (!IsEqualGUID(&mt->formattype, &FORMAT_None)
|
||||
&& !IsEqualGUID(&mt->formattype, &GUID_NULL)
|
||||
&& !IsEqualGUID(&mt->formattype, &filter->filter_mt.formattype))
|
||||
return VFW_E_TYPE_NOT_ACCEPTED;
|
||||
if (!IsEqualGUID(&mt->formattype, &FORMAT_None)
|
||||
&& !IsEqualGUID(&mt->formattype, &GUID_NULL)
|
||||
&& !mt->pbFormat)
|
||||
return VFW_E_TYPE_NOT_ACCEPTED;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -517,13 +517,13 @@ static void test_media_types(void)
|
|||
hr = IPin_QueryAccept(sink, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
hr = IPin_QueryAccept(source, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
|
||||
mt.majortype = GUID_NULL;
|
||||
hr = IPin_QueryAccept(sink, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
hr = IPin_QueryAccept(source, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
mt.majortype = match_mt.majortype;
|
||||
hr = IPin_QueryAccept(sink, &mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
@ -537,13 +537,13 @@ static void test_media_types(void)
|
|||
hr = IPin_QueryAccept(sink, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
hr = IPin_QueryAccept(source, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
|
||||
mt.subtype = GUID_NULL;
|
||||
hr = IPin_QueryAccept(sink, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
hr = IPin_QueryAccept(source, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
mt.subtype = match_mt.subtype;
|
||||
hr = IPin_QueryAccept(sink, &mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
@ -556,13 +556,13 @@ static void test_media_types(void)
|
|||
hr = IPin_QueryAccept(sink, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
hr = IPin_QueryAccept(source, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
|
||||
mt.formattype = GUID_NULL;
|
||||
hr = IPin_QueryAccept(sink, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
hr = IPin_QueryAccept(source, &mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
mt.formattype = match_mt.formattype;
|
||||
hr = IPin_QueryAccept(sink, &mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
@ -841,7 +841,7 @@ static void test_connect_pin(void)
|
|||
hr = IPin_QueryAccept(sink, &req_mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
hr = IPin_QueryAccept(source, &req_mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
req_mt.bTemporalCompression = TRUE;
|
||||
hr = IPin_QueryAccept(source, &req_mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
@ -852,12 +852,12 @@ static void test_connect_pin(void)
|
|||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
hr = IPin_QueryAccept(source, &req_mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
|
||||
req_mt.majortype = MEDIATYPE_Midi;
|
||||
req_mt.bTemporalCompression = FALSE;
|
||||
hr = IPin_QueryAccept(source, &req_mt);
|
||||
todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
|
||||
req_mt.bTemporalCompression = TRUE;
|
||||
hr = IPin_QueryAccept(source, &req_mt);
|
||||
|
@ -885,10 +885,8 @@ static void test_connect_pin(void)
|
|||
|
||||
req_mt.bTemporalCompression = TRUE;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
||||
if (hr == S_OK)
|
||||
{
|
||||
hr = IPin_ConnectedTo(source, &peer);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
ok(peer == &testsink.sink.pin.IPin_iface, "Got peer %p.\n", peer);
|
||||
|
@ -898,7 +896,7 @@ static void test_connect_pin(void)
|
|||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
ok(compare_media_types(&mt, &req_mt), "Media types didn't match.\n");
|
||||
ok(compare_media_types(&testsink.sink.pin.mt, &req_mt), "Media types didn't match.\n");
|
||||
ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
todo_wine ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
|
||||
hr = IFilterGraph2_Disconnect(graph, source);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
|
@ -906,60 +904,53 @@ static void test_connect_pin(void)
|
|||
ok(hr == S_FALSE, "Got hr %#x.\n", hr);
|
||||
ok(testsink.sink.pin.peer == source, "Got peer %p.\n", testsink.sink.pin.peer);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
|
||||
/* Connection with wildcards. */
|
||||
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
|
||||
testsource.source_mt.bTemporalCompression = TRUE;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
todo_wine ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
}
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
|
||||
req_mt.majortype = GUID_NULL;
|
||||
req_mt.bTemporalCompression = FALSE;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
todo_wine ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
}
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
|
||||
req_mt.subtype = MEDIASUBTYPE_RGB32;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
|
||||
req_mt.subtype = GUID_NULL;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
todo_wine ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
}
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
|
||||
req_mt.formattype = FORMAT_None;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
|
||||
req_mt.majortype = MEDIATYPE_Video;
|
||||
req_mt.subtype = MEDIASUBTYPE_RGB8;
|
||||
|
@ -980,68 +971,49 @@ static void test_connect_pin(void)
|
|||
|
||||
req_mt.subtype = GUID_NULL;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
todo_wine ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
}
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
|
||||
req_mt.majortype = MEDIATYPE_Audio;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
|
||||
testsource.source_mt.majortype = testsource.source_mt.subtype = testsource.source_mt.formattype = GUID_NULL;
|
||||
req_mt.majortype = req_mt.subtype = req_mt.formattype = GUID_NULL;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
todo_wine ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
todo_wine ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
ok(compare_media_types(&testsink.sink.pin.mt, &testsource.source_mt), "Media types didn't match.\n");
|
||||
ok(compare_media_types(&testsource.source.pin.mt, &testsink.sink.pin.mt), "Media types didn't match.\n");
|
||||
}
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
|
||||
req_mt.majortype = MEDIATYPE_Video;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
req_mt.majortype = GUID_NULL;
|
||||
|
||||
req_mt.subtype = MEDIASUBTYPE_RGB8;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
req_mt.subtype = GUID_NULL;
|
||||
|
||||
req_mt.formattype = FORMAT_None;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, &req_mt);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
req_mt.formattype = GUID_NULL;
|
||||
|
||||
testsink.sink_mt = &req_mt;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
|
||||
todo_wine ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
IFilterGraph2_Disconnect(graph, source);
|
||||
IFilterGraph2_Disconnect(graph, &testsink.sink.pin.IPin_iface);
|
||||
}
|
||||
ok(hr == VFW_E_NO_ACCEPTABLE_TYPES, "Got hr %#x.\n", hr);
|
||||
|
||||
req_mt.bTemporalCompression = TRUE;
|
||||
hr = IFilterGraph2_ConnectDirect(graph, source, &testsink.sink.pin.IPin_iface, NULL);
|
||||
|
|
Loading…
Reference in New Issue