1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-09 04:16:08 +00:00

mfplat: Add partial implementation of ConvertToContiguousBuffer().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2019-04-26 09:56:49 +03:00 committed by Alexandre Julliard
parent 2295d937a8
commit 2e9a036f9a
2 changed files with 69 additions and 2 deletions

View File

@ -686,9 +686,29 @@ static HRESULT WINAPI sample_GetBufferByIndex(IMFSample *iface, DWORD index, IMF
static HRESULT WINAPI sample_ConvertToContiguousBuffer(IMFSample *iface, IMFMediaBuffer **buffer)
{
FIXME("%p, %p.\n", iface, buffer);
struct sample *sample = impl_from_IMFSample(iface);
HRESULT hr = S_OK;
return E_NOTIMPL;
TRACE("%p, %p.\n", iface, buffer);
EnterCriticalSection(&sample->cs);
if (sample->buffer_count == 0)
hr = E_UNEXPECTED;
else if (sample->buffer_count == 1)
{
*buffer = sample->buffers[0];
IMFMediaBuffer_AddRef(*buffer);
}
else
{
FIXME("Samples with multiple buffers are not supported.\n");
hr = E_NOTIMPL;
}
LeaveCriticalSection(&sample->cs);
return hr;
}
static HRESULT WINAPI sample_AddBuffer(IMFSample *iface, IMFMediaBuffer *buffer)

View File

@ -1475,6 +1475,53 @@ static void test_sample(void)
IMFAttributes_Release(attributes);
IMFSample_Release(sample);
/* ConvertToContiguousBuffer() */
hr = MFCreateSample(&sample);
ok(hr == S_OK, "Failed to create a sample, hr %#x.\n", hr);
hr = IMFSample_ConvertToContiguousBuffer(sample, &buffer);
ok(hr == E_UNEXPECTED, "Unexpected hr %#x.\n", hr);
hr = MFCreateMemoryBuffer(16, &buffer);
ok(hr == S_OK, "Failed to create a buffer, hr %#x.\n", hr);
hr = IMFSample_AddBuffer(sample, buffer);
ok(hr == S_OK, "Failed to add buffer, hr %#x.\n", hr);
hr = IMFSample_ConvertToContiguousBuffer(sample, &buffer2);
ok(hr == S_OK, "Failed to convert, hr %#x.\n", hr);
ok(buffer2 == buffer, "Unexpected buffer instance.\n");
IMFMediaBuffer_Release(buffer2);
hr = IMFSample_ConvertToContiguousBuffer(sample, &buffer2);
ok(hr == S_OK, "Failed to convert, hr %#x.\n", hr);
ok(buffer2 == buffer, "Unexpected buffer instance.\n");
IMFMediaBuffer_Release(buffer2);
hr = MFCreateMemoryBuffer(16, &buffer2);
ok(hr == S_OK, "Failed to create a buffer, hr %#x.\n", hr);
hr = IMFSample_AddBuffer(sample, buffer2);
ok(hr == S_OK, "Failed to add buffer, hr %#x.\n", hr);
IMFMediaBuffer_Release(buffer2);
hr = IMFSample_GetBufferCount(sample, &count);
ok(hr == S_OK, "Failed to get buffer count, hr %#x.\n", hr);
ok(count == 2, "Unexpected buffer count %u.\n", count);
hr = IMFSample_ConvertToContiguousBuffer(sample, &buffer2);
todo_wine
ok(hr == S_OK, "Failed to convert, hr %#x.\n", hr);
if (SUCCEEDED(hr))
IMFMediaBuffer_Release(buffer2);
hr = IMFSample_GetBufferCount(sample, &count);
ok(hr == S_OK, "Failed to get buffer count, hr %#x.\n", hr);
todo_wine
ok(count == 1, "Unexpected buffer count %u.\n", count);
IMFSample_Release(sample);
}
struct test_callback