mfreadwrite/tests: Fix testing of a source with one stream.
Even when a lower stream count was requested, most of the implementation still used ARRAY_SIZE(source->streams) as actual count, so the implemented behaviour was not the desired one. Also, it implied undefined behaviour. Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
842987cd12
commit
c35adbac8f
|
@ -255,6 +255,7 @@ struct test_source
|
||||||
IMFMediaEventQueue *event_queue;
|
IMFMediaEventQueue *event_queue;
|
||||||
IMFPresentationDescriptor *pd;
|
IMFPresentationDescriptor *pd;
|
||||||
struct test_media_stream *streams[TEST_SOURCE_NUM_STREAMS];
|
struct test_media_stream *streams[TEST_SOURCE_NUM_STREAMS];
|
||||||
|
unsigned stream_count;
|
||||||
enum source_state state;
|
enum source_state state;
|
||||||
CRITICAL_SECTION cs;
|
CRITICAL_SECTION cs;
|
||||||
};
|
};
|
||||||
|
@ -352,7 +353,7 @@ static HRESULT WINAPI test_source_CreatePresentationDescriptor(IMFMediaSource *i
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; i < ARRAY_SIZE(source->streams); ++i)
|
for (i = 0; i < source->stream_count; ++i)
|
||||||
{
|
{
|
||||||
hr = MFCreateMediaType(&media_type);
|
hr = MFCreateMediaType(&media_type);
|
||||||
ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to create media type, hr %#x.\n", hr);
|
||||||
|
@ -368,9 +369,9 @@ static HRESULT WINAPI test_source_CreatePresentationDescriptor(IMFMediaSource *i
|
||||||
IMFMediaType_Release(media_type);
|
IMFMediaType_Release(media_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = MFCreatePresentationDescriptor(ARRAY_SIZE(sds), sds, &source->pd);
|
hr = MFCreatePresentationDescriptor(source->stream_count, sds, &source->pd);
|
||||||
ok(hr == S_OK, "Failed to create presentation descriptor, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to create presentation descriptor, hr %#x.\n", hr);
|
||||||
for (i = 0; i < ARRAY_SIZE(sds); ++i)
|
for (i = 0; i < source->stream_count; ++i)
|
||||||
IMFStreamDescriptor_Release(sds[i]);
|
IMFStreamDescriptor_Release(sds[i]);
|
||||||
|
|
||||||
*pd = source->pd;
|
*pd = source->pd;
|
||||||
|
@ -413,7 +414,7 @@ static HRESULT WINAPI test_source_Start(IMFMediaSource *iface, IMFPresentationDe
|
||||||
hr = IMFMediaEventQueue_QueueEventParamVar(source->event_queue, event_type, &GUID_NULL, S_OK, NULL);
|
hr = IMFMediaEventQueue_QueueEventParamVar(source->event_queue, event_type, &GUID_NULL, S_OK, NULL);
|
||||||
ok(hr == S_OK, "Failed to queue event, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to queue event, hr %#x.\n", hr);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(source->streams); ++i)
|
for (i = 0; i < source->stream_count; ++i)
|
||||||
{
|
{
|
||||||
if (!is_stream_selected(pd, i))
|
if (!is_stream_selected(pd, i))
|
||||||
continue;
|
continue;
|
||||||
|
@ -501,7 +502,7 @@ static struct test_media_stream *create_test_stream(DWORD stream_index, IMFMedia
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
static IMFMediaSource *create_test_source(int stream_num)
|
static IMFMediaSource *create_test_source(int stream_count)
|
||||||
{
|
{
|
||||||
struct test_source *source;
|
struct test_source *source;
|
||||||
int i;
|
int i;
|
||||||
|
@ -509,9 +510,10 @@ static IMFMediaSource *create_test_source(int stream_num)
|
||||||
source = heap_alloc_zero(sizeof(*source));
|
source = heap_alloc_zero(sizeof(*source));
|
||||||
source->IMFMediaSource_iface.lpVtbl = &test_source_vtbl;
|
source->IMFMediaSource_iface.lpVtbl = &test_source_vtbl;
|
||||||
source->refcount = 1;
|
source->refcount = 1;
|
||||||
|
source->stream_count = stream_count;
|
||||||
MFCreateEventQueue(&source->event_queue);
|
MFCreateEventQueue(&source->event_queue);
|
||||||
InitializeCriticalSection(&source->cs);
|
InitializeCriticalSection(&source->cs);
|
||||||
for (i = 0; i < stream_num; ++i)
|
for (i = 0; i < source->stream_count; ++i)
|
||||||
source->streams[i] = create_test_stream(i, &source->IMFMediaSource_iface);
|
source->streams[i] = create_test_stream(i, &source->IMFMediaSource_iface);
|
||||||
|
|
||||||
return &source->IMFMediaSource_iface;
|
return &source->IMFMediaSource_iface;
|
||||||
|
|
Loading…
Reference in New Issue