mfplat: Implement IMFByteStream::SetCurrentPosition() for file streams.
Signed-off-by: Derek Lesho <dlesho@codeweavers.com> Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
107c616bc4
commit
37d977da22
|
@ -3287,22 +3287,18 @@ static HRESULT WINAPI mfbytestream_SetLength(IMFByteStream *iface, QWORD length)
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI mfbytestream_GetCurrentPosition(IMFByteStream *iface, QWORD *position)
|
||||
static HRESULT WINAPI bytestream_file_GetCurrentPosition(IMFByteStream *iface, QWORD *position)
|
||||
{
|
||||
mfbytestream *This = impl_from_IMFByteStream(iface);
|
||||
struct bytestream *stream = impl_from_IMFByteStream(iface);
|
||||
|
||||
FIXME("%p, %p\n", This, position);
|
||||
TRACE("%p, %p.\n", iface, position);
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
if (!position)
|
||||
return E_INVALIDARG;
|
||||
|
||||
static HRESULT WINAPI mfbytestream_SetCurrentPosition(IMFByteStream *iface, QWORD position)
|
||||
{
|
||||
mfbytestream *This = impl_from_IMFByteStream(iface);
|
||||
*position = stream->position;
|
||||
|
||||
FIXME("%p, %s\n", This, wine_dbgstr_longlong(position));
|
||||
|
||||
return E_NOTIMPL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI bytestream_file_GetLength(IMFByteStream *iface, QWORD *length)
|
||||
|
@ -3445,6 +3441,19 @@ static HRESULT WINAPI mfbytestream_Close(IMFByteStream *iface)
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI bytestream_SetCurrentPosition(IMFByteStream *iface, QWORD position)
|
||||
{
|
||||
struct bytestream *stream = impl_from_IMFByteStream(iface);
|
||||
|
||||
TRACE("%p, %s.\n", iface, wine_dbgstr_longlong(position));
|
||||
|
||||
EnterCriticalSection(&stream->cs);
|
||||
stream->position = position;
|
||||
LeaveCriticalSection(&stream->cs);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static const IMFByteStreamVtbl bytestream_file_vtbl =
|
||||
{
|
||||
bytestream_QueryInterface,
|
||||
|
@ -3453,8 +3462,8 @@ static const IMFByteStreamVtbl bytestream_file_vtbl =
|
|||
bytestream_GetCapabilities,
|
||||
bytestream_file_GetLength,
|
||||
mfbytestream_SetLength,
|
||||
mfbytestream_GetCurrentPosition,
|
||||
mfbytestream_SetCurrentPosition,
|
||||
bytestream_file_GetCurrentPosition,
|
||||
bytestream_SetCurrentPosition,
|
||||
bytestream_file_IsEndOfStream,
|
||||
bytestream_file_Read,
|
||||
bytestream_BeginRead,
|
||||
|
@ -3512,19 +3521,6 @@ static HRESULT WINAPI bytestream_stream_GetCurrentPosition(IMFByteStream *iface,
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI bytestream_stream_SetCurrentPosition(IMFByteStream *iface, QWORD position)
|
||||
{
|
||||
struct bytestream *stream = impl_from_IMFByteStream(iface);
|
||||
|
||||
TRACE("%p, %s.\n", iface, wine_dbgstr_longlong(position));
|
||||
|
||||
EnterCriticalSection(&stream->cs);
|
||||
stream->position = position;
|
||||
LeaveCriticalSection(&stream->cs);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI bytestream_stream_IsEndOfStream(IMFByteStream *iface, BOOL *ret)
|
||||
{
|
||||
struct bytestream *stream = impl_from_IMFByteStream(iface);
|
||||
|
@ -3642,7 +3638,7 @@ static const IMFByteStreamVtbl bytestream_stream_vtbl =
|
|||
bytestream_stream_GetLength,
|
||||
bytestream_stream_SetLength,
|
||||
bytestream_stream_GetCurrentPosition,
|
||||
bytestream_stream_SetCurrentPosition,
|
||||
bytestream_SetCurrentPosition,
|
||||
bytestream_stream_IsEndOfStream,
|
||||
bytestream_stream_Read,
|
||||
bytestream_BeginRead,
|
||||
|
|
|
@ -1340,15 +1340,16 @@ static void test_MFCreateMFByteStreamOnStream(void)
|
|||
static void test_file_stream(void)
|
||||
{
|
||||
IMFByteStream *bytestream, *bytestream2;
|
||||
QWORD bytestream_length, position;
|
||||
IMFAttributes *attributes = NULL;
|
||||
MF_ATTRIBUTE_TYPE item_type;
|
||||
QWORD bytestream_length;
|
||||
WCHAR pathW[MAX_PATH];
|
||||
DWORD caps, count;
|
||||
WCHAR *filename;
|
||||
IUnknown *unk;
|
||||
HRESULT hr;
|
||||
WCHAR *str;
|
||||
BOOL eos;
|
||||
|
||||
static const WCHAR newfilename[] = {'n','e','w','.','m','p','4',0};
|
||||
|
||||
|
@ -1415,6 +1416,23 @@ static void test_file_stream(void)
|
|||
ok(hr == S_OK, "Failed to get bytestream length, hr %#x.\n", hr);
|
||||
ok(bytestream_length > 0, "Unexpected bytestream length %s.\n", wine_dbgstr_longlong(bytestream_length));
|
||||
|
||||
hr = IMFByteStream_SetCurrentPosition(bytestream, bytestream_length);
|
||||
ok(hr == S_OK, "Failed to set bytestream position, hr %#x.\n", hr);
|
||||
|
||||
hr = IMFByteStream_IsEndOfStream(bytestream, &eos);
|
||||
ok(hr == S_OK, "Failed query end of stream, hr %#x.\n", hr);
|
||||
ok(eos == TRUE, "Unexpected IsEndOfStream result, %u.\n", eos);
|
||||
|
||||
hr = IMFByteStream_SetCurrentPosition(bytestream, 2 * bytestream_length);
|
||||
ok(hr == S_OK, "Failed to set bytestream position, hr %#x.\n", hr);
|
||||
|
||||
hr = IMFByteStream_GetCurrentPosition(bytestream, NULL);
|
||||
ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IMFByteStream_GetCurrentPosition(bytestream, &position);
|
||||
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||
ok(position == 2 * bytestream_length, "Unexpected position.\n");
|
||||
|
||||
hr = MFCreateFile(MF_ACCESSMODE_READ, MF_OPENMODE_FAIL_IF_NOT_EXIST,
|
||||
MF_FILEFLAGS_NONE, filename, &bytestream2);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
|
|
Loading…
Reference in New Issue