[PATCH 2/5] winegstreamer: Implement INSSBuffer::GetMaxLength().

Zebediah Figura zfigura at codeweavers.com
Mon Nov 8 12:49:22 CST 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/winegstreamer/wm_reader.c |  8 ++++++--
 dlls/wmvcore/tests/wmvcore.c   | 16 ++++++++++++++--
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c
index 2de0610165d..2c0f89e29a9 100644
--- a/dlls/winegstreamer/wm_reader.c
+++ b/dlls/winegstreamer/wm_reader.c
@@ -237,8 +237,12 @@ static HRESULT WINAPI buffer_SetLength(INSSBuffer *iface, DWORD size)
 
 static HRESULT WINAPI buffer_GetMaxLength(INSSBuffer *iface, DWORD *size)
 {
-    FIXME("iface %p, size %p, stub!\n", iface, size);
-    return E_NOTIMPL;
+    struct buffer *buffer = impl_from_INSSBuffer(iface);
+
+    TRACE("buffer %p, size %p.\n", buffer, size);
+
+    *size = buffer->size;
+    return S_OK;
 }
 
 static HRESULT WINAPI buffer_GetBuffer(INSSBuffer *iface, BYTE **data)
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c
index 685dd92e27e..0347195ba10 100644
--- a/dlls/wmvcore/tests/wmvcore.c
+++ b/dlls/wmvcore/tests/wmvcore.c
@@ -591,7 +591,7 @@ static void test_reader_attributes(IWMProfile *profile)
 
 static void test_sync_reader_streaming(void)
 {
-    DWORD size, flags, output_number, expect_output_number;
+    DWORD size, capacity, flags, output_number, expect_output_number;
     const WCHAR *filename = load_resource(L"test.wmv");
     WORD stream_numbers[2], stream_number;
     IWMStreamConfig *config, *config2;
@@ -682,6 +682,10 @@ static void test_sync_reader_streaming(void)
                 ok(hr == S_OK, "Got hr %#x.\n", hr);
                 ok(data2 == data, "Data pointers didn't match.\n");
 
+                hr = INSSBuffer_GetMaxLength(sample, &capacity);
+                ok(hr == S_OK, "Got hr %#x.\n", hr);
+                ok(size <= capacity, "Size %u exceeds capacity %u.\n", size, capacity);
+
                 ref = INSSBuffer_Release(sample);
                 ok(!ref, "Got outstanding refcount %d.\n", ref);
 
@@ -747,6 +751,10 @@ static void test_sync_reader_streaming(void)
             ok(hr == S_OK, "Got hr %#x.\n", hr);
             ok(data2 == data, "Data pointers didn't match.\n");
 
+            hr = INSSBuffer_GetMaxLength(sample, &capacity);
+            ok(hr == S_OK, "Got hr %#x.\n", hr);
+            ok(size <= capacity, "Size %u exceeds capacity %u.\n", size, capacity);
+
             ref = INSSBuffer_Release(sample);
             ok(!ref, "Got outstanding refcount %d.\n", ref);
         }
@@ -1193,9 +1201,9 @@ static HRESULT WINAPI callback_OnSample(IWMReaderCallback *iface, DWORD output,
         QWORD time, QWORD duration, DWORD flags, INSSBuffer *sample, void *context)
 {
     struct callback *callback = impl_from_IWMReaderCallback(iface);
+    DWORD size, capacity;
     BYTE *data, *data2;
     HRESULT hr;
-    DWORD size;
 
     if (winetest_debug > 1)
         trace("%u: %04x: IWMReaderCallback::OnSample(output %u, time %I64u, duration %I64u, flags %#x)\n",
@@ -1210,6 +1218,10 @@ static HRESULT WINAPI callback_OnSample(IWMReaderCallback *iface, DWORD output,
     ok(hr == S_OK, "Got hr %#x.\n", hr);
     ok(data2 == data, "Data pointers didn't match.\n");
 
+    hr = INSSBuffer_GetMaxLength(sample, &capacity);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
+    ok(size <= capacity, "Size %u exceeds capacity %u.\n", size, capacity);
+
     ok(callback->got_started > 0, "Got %u WMT_STARTED callbacks.\n", callback->got_started);
     ok(!callback->got_eof, "Got %u WMT_EOF callbacks.\n", callback->got_eof);
     ++callback->got_sample;
-- 
2.33.0




More information about the wine-devel mailing list