Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
b8b4c041
Commit
b8b4c041
authored
Nov 03, 2018
by
Sven Baars
Committed by
Alexandre Julliard
Nov 06, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mfplat: Add IMFAttributes interface to IMFByteStream.
Signed-off-by:
Sven Baars
<
sven.wine@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
ae220de0
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
124 additions
and
9 deletions
+124
-9
main.c
dlls/mfplat/main.c
+73
-7
mfplat.c
dlls/mfplat/tests/mfplat.c
+51
-2
No files found.
dlls/mfplat/main.c
View file @
b8b4c041
...
...
@@ -847,8 +847,8 @@ HRESULT WINAPI MFCreateAttributes(IMFAttributes **attributes, UINT32 size)
typedef
struct
_mfbytestream
{
mfattributes
attributes
;
IMFByteStream
IMFByteStream_iface
;
LONG
ref
;
}
mfbytestream
;
static
inline
mfbytestream
*
impl_from_IMFByteStream
(
IMFByteStream
*
iface
)
...
...
@@ -867,6 +867,10 @@ static HRESULT WINAPI mfbytestream_QueryInterface(IMFByteStream *iface, REFIID r
{
*
out
=
&
This
->
IMFByteStream_iface
;
}
else
if
(
IsEqualGUID
(
riid
,
&
IID_IMFAttributes
))
{
*
out
=
&
This
->
attributes
.
IMFAttributes_iface
;
}
else
{
FIXME
(
"(%s, %p)
\n
"
,
debugstr_guid
(
riid
),
out
);
...
...
@@ -881,17 +885,17 @@ static HRESULT WINAPI mfbytestream_QueryInterface(IMFByteStream *iface, REFIID r
static
ULONG
WINAPI
mfbytestream_AddRef
(
IMFByteStream
*
iface
)
{
mfbytestream
*
This
=
impl_from_IMFByteStream
(
iface
);
ULONG
ref
=
InterlockedIncrement
(
&
This
->
ref
);
ULONG
ref
=
InterlockedIncrement
(
&
This
->
attributes
.
ref
);
TRACE
(
"(%p) ref=%u
\n
"
,
This
,
ref
);
return
ref
;
}
static
ULONG
WINAPI
mfbytestream_Release
(
IMFByteStream
*
iface
)
static
ULONG
WINAPI
mfbytestream_Release
(
IMFByteStream
*
iface
)
{
mfbytestream
*
This
=
impl_from_IMFByteStream
(
iface
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
ref
);
ULONG
ref
=
InterlockedDecrement
(
&
This
->
attributes
.
ref
);
TRACE
(
"(%p) ref=%u
\n
"
,
This
,
ref
);
...
...
@@ -1044,7 +1048,7 @@ static HRESULT WINAPI mfbytestream_Close(IMFByteStream *iface)
return
E_NOTIMPL
;
}
static
const
IMFByteStreamVtbl
mfbytesteam_vtbl
=
static
const
IMFByteStreamVtbl
mfbytest
r
eam_vtbl
=
{
mfbytestream_QueryInterface
,
mfbytestream_AddRef
,
...
...
@@ -1066,6 +1070,67 @@ static const IMFByteStreamVtbl mfbytesteam_vtbl =
mfbytestream_Close
};
static
inline
mfbytestream
*
impl_from_IMFByteStream_IMFAttributes
(
IMFAttributes
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
mfbytestream
,
attributes
.
IMFAttributes_iface
);
}
static
HRESULT
WINAPI
mfbytestream_attributes_QueryInterface
(
IMFAttributes
*
iface
,
REFIID
riid
,
void
**
out
)
{
mfbytestream
*
This
=
impl_from_IMFByteStream_IMFAttributes
(
iface
);
return
IMFByteStream_QueryInterface
(
&
This
->
IMFByteStream_iface
,
riid
,
out
);
}
static
ULONG
WINAPI
mfbytestream_attributes_AddRef
(
IMFAttributes
*
iface
)
{
mfbytestream
*
This
=
impl_from_IMFByteStream_IMFAttributes
(
iface
);
return
IMFByteStream_AddRef
(
&
This
->
IMFByteStream_iface
);
}
static
ULONG
WINAPI
mfbytestream_attributes_Release
(
IMFAttributes
*
iface
)
{
mfbytestream
*
This
=
impl_from_IMFByteStream_IMFAttributes
(
iface
);
return
IMFByteStream_Release
(
&
This
->
IMFByteStream_iface
);
}
static
const
IMFAttributesVtbl
mfbytestream_attributes_vtbl
=
{
mfbytestream_attributes_QueryInterface
,
mfbytestream_attributes_AddRef
,
mfbytestream_attributes_Release
,
mfattributes_GetItem
,
mfattributes_GetItemType
,
mfattributes_CompareItem
,
mfattributes_Compare
,
mfattributes_GetUINT32
,
mfattributes_GetUINT64
,
mfattributes_GetDouble
,
mfattributes_GetGUID
,
mfattributes_GetStringLength
,
mfattributes_GetString
,
mfattributes_GetAllocatedString
,
mfattributes_GetBlobSize
,
mfattributes_GetBlob
,
mfattributes_GetAllocatedBlob
,
mfattributes_GetUnknown
,
mfattributes_SetItem
,
mfattributes_DeleteItem
,
mfattributes_DeleteAllItems
,
mfattributes_SetUINT32
,
mfattributes_SetUINT64
,
mfattributes_SetDouble
,
mfattributes_SetGUID
,
mfattributes_SetString
,
mfattributes_SetBlob
,
mfattributes_SetUnknown
,
mfattributes_LockStore
,
mfattributes_UnlockStore
,
mfattributes_GetCount
,
mfattributes_GetItemByIndex
,
mfattributes_CopyAllItems
};
HRESULT
WINAPI
MFCreateMFByteStreamOnStream
(
IStream
*
stream
,
IMFByteStream
**
bytestream
)
{
mfbytestream
*
object
;
...
...
@@ -1076,8 +1141,9 @@ HRESULT WINAPI MFCreateMFByteStreamOnStream(IStream *stream, IMFByteStream **byt
if
(
!
object
)
return
E_OUTOFMEMORY
;
object
->
ref
=
1
;
object
->
IMFByteStream_iface
.
lpVtbl
=
&
mfbytesteam_vtbl
;
init_attribute_object
(
&
object
->
attributes
,
0
);
object
->
IMFByteStream_iface
.
lpVtbl
=
&
mfbytestream_vtbl
;
object
->
attributes
.
IMFAttributes_iface
.
lpVtbl
=
&
mfbytestream_attributes_vtbl
;
*
bytestream
=
&
object
->
IMFByteStream_iface
;
...
...
dlls/mfplat/tests/mfplat.c
View file @
b8b4c041
...
...
@@ -258,8 +258,12 @@ static void test_MFCreateAttributes(void)
static
void
test_MFCreateMFByteStreamOnStream
(
void
)
{
IMFByteStream
*
bytestream
;
IMFByteStream
*
bytestream2
;
IStream
*
stream
;
IMFAttributes
*
attributes
=
NULL
;
IUnknown
*
unknown
;
HRESULT
hr
;
ULONG
ref
;
if
(
!
pMFCreateMFByteStreamOnStream
)
{
...
...
@@ -270,11 +274,56 @@ static void test_MFCreateMFByteStreamOnStream(void)
hr
=
CreateStreamOnHGlobal
(
NULL
,
TRUE
,
&
stream
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
hr
=
pMFCreateMFByteStreamOnStream
(
stream
,
&
bytestream
);
hr
=
pMFCreateMFByteStreamOnStream
(
stream
,
&
bytestream
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
IStream_Release
(
stream
);
hr
=
IUnknown_QueryInterface
(
bytestream
,
&
IID_IUnknown
,
(
void
**
)
&
unknown
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
ok
((
void
*
)
unknown
==
(
void
*
)
bytestream
,
"got %p
\n
"
,
unknown
);
ref
=
IUnknown_Release
(
unknown
);
ok
(
ref
==
1
,
"got %u
\n
"
,
ref
);
hr
=
IUnknown_QueryInterface
(
unknown
,
&
IID_IMFByteStream
,
(
void
**
)
&
bytestream2
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
ok
(
bytestream2
==
bytestream
,
"got %p
\n
"
,
bytestream2
);
ref
=
IMFByteStream_Release
(
bytestream2
);
ok
(
ref
==
1
,
"got %u
\n
"
,
ref
);
hr
=
IUnknown_QueryInterface
(
bytestream
,
&
IID_IMFAttributes
,
(
void
**
)
&
attributes
);
ok
(
hr
==
S_OK
||
/* w7pro64 */
broken
(
hr
==
E_NOINTERFACE
),
"got 0x%08x
\n
"
,
hr
);
if
(
hr
!=
S_OK
)
{
win_skip
(
"Can not retrieve IMFAttributes interface from IMFByteStream
\n
"
);
IStream_Release
(
stream
);
IMFByteStream_Release
(
bytestream
);
return
;
}
ok
(
attributes
!=
NULL
,
"got NULL
\n
"
);
hr
=
IUnknown_QueryInterface
(
attributes
,
&
IID_IUnknown
,
(
void
**
)
&
unknown
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
ok
((
void
*
)
unknown
==
(
void
*
)
bytestream
,
"got %p
\n
"
,
unknown
);
ref
=
IUnknown_Release
(
unknown
);
ok
(
ref
==
2
,
"got %u
\n
"
,
ref
);
hr
=
IUnknown_QueryInterface
(
attributes
,
&
IID_IMFByteStream
,
(
void
**
)
&
bytestream2
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
ok
(
bytestream2
==
bytestream
,
"got %p
\n
"
,
bytestream2
);
ref
=
IMFByteStream_Release
(
bytestream2
);
ok
(
ref
==
2
,
"got %u
\n
"
,
ref
);
IMFAttributes_Release
(
attributes
);
IMFByteStream_Release
(
bytestream
);
IStream_Release
(
stream
);
}
static
void
test_MFCreateMemoryBuffer
(
void
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment