Commit 63fb4d82 authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

winegstreamer: Implement INSSBuffer::SetLength().

parent 25adac6e
...@@ -172,7 +172,7 @@ struct buffer ...@@ -172,7 +172,7 @@ struct buffer
INSSBuffer INSSBuffer_iface; INSSBuffer INSSBuffer_iface;
LONG refcount; LONG refcount;
DWORD size; DWORD size, capacity;
BYTE data[1]; BYTE data[1];
}; };
...@@ -231,8 +231,15 @@ static HRESULT WINAPI buffer_GetLength(INSSBuffer *iface, DWORD *size) ...@@ -231,8 +231,15 @@ static HRESULT WINAPI buffer_GetLength(INSSBuffer *iface, DWORD *size)
static HRESULT WINAPI buffer_SetLength(INSSBuffer *iface, DWORD size) static HRESULT WINAPI buffer_SetLength(INSSBuffer *iface, DWORD size)
{ {
FIXME("iface %p, size %u, stub!\n", iface, size); struct buffer *buffer = impl_from_INSSBuffer(iface);
return E_NOTIMPL;
TRACE("iface %p, size %u.\n", buffer, size);
if (size > buffer->capacity)
return E_INVALIDARG;
buffer->size = size;
return S_OK;
} }
static HRESULT WINAPI buffer_GetMaxLength(INSSBuffer *iface, DWORD *size) static HRESULT WINAPI buffer_GetMaxLength(INSSBuffer *iface, DWORD *size)
...@@ -241,7 +248,7 @@ static HRESULT WINAPI buffer_GetMaxLength(INSSBuffer *iface, DWORD *size) ...@@ -241,7 +248,7 @@ static HRESULT WINAPI buffer_GetMaxLength(INSSBuffer *iface, DWORD *size)
TRACE("buffer %p, size %p.\n", buffer, size); TRACE("buffer %p, size %p.\n", buffer, size);
*size = buffer->size; *size = buffer->capacity;
return S_OK; return S_OK;
} }
...@@ -1754,7 +1761,7 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream, ...@@ -1754,7 +1761,7 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
object->INSSBuffer_iface.lpVtbl = &buffer_vtbl; object->INSSBuffer_iface.lpVtbl = &buffer_vtbl;
object->refcount = 1; object->refcount = 1;
object->size = event.u.buffer.size; object->capacity = object->size = event.u.buffer.size;
if (!wg_parser_stream_copy_buffer(wg_stream, object->data, 0, object->size)) if (!wg_parser_stream_copy_buffer(wg_stream, object->data, 0, object->size))
{ {
......
...@@ -686,6 +686,17 @@ static void test_sync_reader_streaming(void) ...@@ -686,6 +686,17 @@ static void test_sync_reader_streaming(void)
ok(hr == S_OK, "Got hr %#x.\n", hr); ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(size <= capacity, "Size %u exceeds capacity %u.\n", size, capacity); ok(size <= capacity, "Size %u exceeds capacity %u.\n", size, capacity);
hr = INSSBuffer_SetLength(sample, capacity + 1);
ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
hr = INSSBuffer_SetLength(sample, capacity - 1);
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = INSSBuffer_GetBufferAndLength(sample, &data2, &size);
ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(data2 == data, "Data pointers didn't match.\n");
ok(size == capacity - 1, "Expected size %u, got %u.\n", capacity - 1, size);
ref = INSSBuffer_Release(sample); ref = INSSBuffer_Release(sample);
ok(!ref, "Got outstanding refcount %d.\n", ref); ok(!ref, "Got outstanding refcount %d.\n", ref);
...@@ -1222,6 +1233,17 @@ static HRESULT WINAPI callback_OnSample(IWMReaderCallback *iface, DWORD output, ...@@ -1222,6 +1233,17 @@ static HRESULT WINAPI callback_OnSample(IWMReaderCallback *iface, DWORD output,
ok(hr == S_OK, "Got hr %#x.\n", hr); ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(size <= capacity, "Size %u exceeds capacity %u.\n", size, capacity); ok(size <= capacity, "Size %u exceeds capacity %u.\n", size, capacity);
hr = INSSBuffer_SetLength(sample, capacity + 1);
ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
hr = INSSBuffer_SetLength(sample, capacity - 1);
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = INSSBuffer_GetBufferAndLength(sample, &data2, &size);
ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(data2 == data, "Data pointers didn't match.\n");
ok(size == capacity - 1, "Expected size %u, got %u.\n", capacity - 1, size);
ok(callback->got_started > 0, "Got %u WMT_STARTED callbacks.\n", callback->got_started); 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); ok(!callback->got_eof, "Got %u WMT_EOF callbacks.\n", callback->got_eof);
++callback->got_sample; ++callback->got_sample;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment