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:
parent
2295d937a8
commit
2e9a036f9a
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue