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
b7047b5a
Commit
b7047b5a
authored
Feb 13, 2020
by
Derek Lesho
Committed by
Alexandre Julliard
Feb 13, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mfplat/tests: Add more comprehensive media source tests.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
a832b2b7
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
130 additions
and
5 deletions
+130
-5
mfplat.c
dlls/mfplat/tests/mfplat.c
+130
-5
No files found.
dlls/mfplat/tests/mfplat.c
View file @
b7047b5a
...
...
@@ -350,25 +350,62 @@ static const IMFAsyncCallbackVtbl test_create_from_file_handler_callback_vtbl =
test_create_from_file_handler_callback_Invoke
,
};
static
BOOL
get_event
(
IMFMediaEventGenerator
*
generator
,
MediaEventType
expected_event_type
,
PROPVARIANT
*
value
)
{
MediaEventType
event_type
;
HRESULT
hr
,
event_status
;
IMFMediaEvent
*
event
;
hr
=
IMFMediaEventGenerator_GetEvent
(
generator
,
0
,
&
event
);
ok
(
hr
==
S_OK
,
"Failed to get event, hr %#x.
\n
"
,
hr
);
hr
=
IMFMediaEvent_GetStatus
(
event
,
&
event_status
);
ok
(
hr
==
S_OK
,
"Failed to get status code, hr %#x.
\n
"
,
hr
);
ok
(
event_status
==
S_OK
,
"Unexpected event status code %#x.
\n
"
,
event_status
);
hr
=
IMFMediaEvent_GetType
(
event
,
&
event_type
);
ok
(
hr
==
S_OK
,
"Failed to event type, hr %#x.
\n
"
,
hr
);
ok
(
event_type
==
expected_event_type
,
"Unexpected event type %u, expected %u.
\n
"
,
event_type
,
expected_event_type
);
if
(
event_type
!=
expected_event_type
)
{
IMFMediaEvent_Release
(
event
);
return
FALSE
;
}
if
(
value
)
{
hr
=
IMFMediaEvent_GetValue
(
event
,
value
);
ok
(
hr
==
S_OK
,
"Failed to get value of event, hr %#x.
\n
"
,
hr
);
}
IMFMediaEvent_Release
(
event
);
return
TRUE
;
}
static
void
test_source_resolver
(
void
)
{
static
const
WCHAR
file_type
[]
=
{
'v'
,
'i'
,
'd'
,
'e'
,
'o'
,
'/'
,
'm'
,
'p'
,
'4'
,
0
};
struct
test_callback
callback
=
{
{
&
test_create_from_url_callback_vtbl
}
};
struct
test_callback
callback2
=
{
{
&
test_create_from_file_handler_callback_vtbl
}
};
IMFSourceResolver
*
resolver
,
*
resolver2
;
IMFPresentationDescriptor
*
descriptor
;
IMFSchemeHandler
*
scheme_handler
;
IMFMediaStream
*
video_stream
;
IMFAttributes
*
attributes
;
IMFMediaSource
*
mediasource
;
IMFPresentationDescriptor
*
descriptor
;
IMFMediaTypeHandler
*
handler
;
IMFMediaType
*
media_type
;
BOOL
selected
,
do_uninit
;
MF_OBJECT_TYPE
obj_type
;
IMFStreamDescriptor
*
sd
;
IUnknown
*
cancel_cookie
;
IMFByteStream
*
stream
;
WCHAR
pathW
[
MAX_PATH
];
HRESULT
hr
;
int
i
,
sample_count
;
WCHAR
*
filename
;
PROPVARIANT
var
;
HRESULT
hr
;
GUID
guid
;
if
(
!
pMFCreateSourceResolver
)
...
...
@@ -428,7 +465,7 @@ static void test_source_resolver(void)
hr
=
IMFByteStream_QueryInterface
(
stream
,
&
IID_IMFAttributes
,
(
void
**
)
&
attributes
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
hr
=
IMFAttributes_SetString
(
attributes
,
&
MF_BYTESTREAM_CONTENT_TYPE
,
file_type
);
hr
=
IMFAttributes_SetString
(
attributes
,
&
MF_BYTESTREAM_CONTENT_TYPE
,
L"video/mp4"
);
ok
(
hr
==
S_OK
,
"Failed to set string value, hr %#x.
\n
"
,
hr
);
IMFAttributes_Release
(
attributes
);
...
...
@@ -447,13 +484,101 @@ static void test_source_resolver(void)
hr
=
IMFStreamDescriptor_GetMediaTypeHandler
(
sd
,
&
handler
);
ok
(
hr
==
S_OK
,
"Failed to get type handler, hr %#x.
\n
"
,
hr
);
IMFStreamDescriptor_Release
(
sd
);
hr
=
IMFMediaTypeHandler_GetMajorType
(
handler
,
&
guid
);
todo_wine
ok
(
hr
==
S_OK
,
"Failed to get stream major type, hr %#x.
\n
"
,
hr
);
if
(
FAILED
(
hr
))
goto
skip_source_tests
;
/* Check major/minor type for the test media. */
ok
(
IsEqualGUID
(
&
guid
,
&
MFMediaType_Video
),
"Unexpected major type %s.
\n
"
,
debugstr_guid
(
&
guid
));
hr
=
IMFMediaTypeHandler_GetCurrentMediaType
(
handler
,
&
media_type
);
ok
(
hr
==
S_OK
,
"Failed to get current media type, hr %#x.
\n
"
,
hr
);
hr
=
IMFMediaType_GetGUID
(
media_type
,
&
MF_MT_SUBTYPE
,
&
guid
);
ok
(
hr
==
S_OK
,
"Failed to get media sub type, hr %#x.
\n
"
,
hr
);
ok
(
IsEqualGUID
(
&
guid
,
&
MFVideoFormat_M4S2
),
"Unexpected sub type %s.
\n
"
,
debugstr_guid
(
&
guid
));
IMFMediaType_Release
(
media_type
);
hr
=
IMFPresentationDescriptor_SelectStream
(
descriptor
,
0
);
ok
(
hr
==
S_OK
,
"Failed to select video stream, hr %#x.
\n
"
,
hr
);
var
.
vt
=
VT_EMPTY
;
hr
=
IMFMediaSource_Start
(
mediasource
,
descriptor
,
&
GUID_NULL
,
&
var
);
ok
(
hr
==
S_OK
,
"Failed to start media source, hr %#x.
\n
"
,
hr
);
get_event
((
IMFMediaEventGenerator
*
)
mediasource
,
MENewStream
,
&
var
);
ok
(
var
.
vt
==
VT_UNKNOWN
,
"Unexpected value type %u from MENewStream event.
\n
"
,
var
.
vt
);
video_stream
=
(
IMFMediaStream
*
)
var
.
punkVal
;
get_event
((
IMFMediaEventGenerator
*
)
mediasource
,
MESourceStarted
,
NULL
);
/* Request samples, our file is 10 frames at 25fps */
get_event
((
IMFMediaEventGenerator
*
)
video_stream
,
MEStreamStarted
,
NULL
);
sample_count
=
10
;
/* Request one beyond EOS, otherwise EndOfStream isn't queued. */
for
(
i
=
0
;
i
<=
sample_count
;
++
i
)
{
hr
=
IMFMediaStream_RequestSample
(
video_stream
,
NULL
);
if
(
i
==
sample_count
)
break
;
ok
(
hr
==
S_OK
,
"Failed to request sample %u, hr %#x.
\n
"
,
i
+
1
,
hr
);
if
(
hr
!=
S_OK
)
break
;
}
for
(
i
=
0
;
i
<
sample_count
;
++
i
)
{
static
const
LONGLONG
MILLI_TO_100_NANO
=
10000
;
LONGLONG
duration
,
time
;
DWORD
buffer_count
;
IMFSample
*
sample
;
BOOL
ret
;
ret
=
get_event
((
IMFMediaEventGenerator
*
)
video_stream
,
MEMediaSample
,
&
var
);
ok
(
ret
,
"Sample %u not received.
\n
"
,
i
+
1
);
if
(
!
ret
)
break
;
ok
(
var
.
vt
==
VT_UNKNOWN
,
"Unexpected value type %u from MEMediaSample event.
\n
"
,
var
.
vt
);
sample
=
(
IMFSample
*
)
var
.
punkVal
;
hr
=
IMFSample_GetBufferCount
(
sample
,
&
buffer_count
);
ok
(
hr
==
S_OK
,
"Failed to get buffer count, hr %#x.
\n
"
,
hr
);
ok
(
buffer_count
==
1
,
"Unexpected buffer count %u.
\n
"
,
buffer_count
);
hr
=
IMFSample_GetSampleDuration
(
sample
,
&
duration
);
ok
(
hr
==
S_OK
,
"Failed to get sample duration, hr %#x.
\n
"
,
hr
);
ok
(
duration
==
40
*
MILLI_TO_100_NANO
,
"Unexpected duration %s.
\n
"
,
wine_dbgstr_longlong
(
duration
));
hr
=
IMFSample_GetSampleTime
(
sample
,
&
time
);
ok
(
hr
==
S_OK
,
"Failed to get sample time, hr %#x.
\n
"
,
hr
);
ok
(
time
==
i
*
40
*
MILLI_TO_100_NANO
,
"Unexpected time %s.
\n
"
,
wine_dbgstr_longlong
(
time
));
IMFSample_Release
(
sample
);
}
if
(
i
==
sample_count
)
get_event
((
IMFMediaEventGenerator
*
)
video_stream
,
MEEndOfStream
,
NULL
);
hr
=
IMFMediaStream_RequestSample
(
video_stream
,
NULL
);
ok
(
hr
==
MF_E_END_OF_STREAM
,
"Unexpected hr %#x.
\n
"
,
hr
);
IMFMediaStream_Release
(
video_stream
);
get_event
((
IMFMediaEventGenerator
*
)
mediasource
,
MEEndOfPresentation
,
NULL
);
IMFMediaTypeHandler_Release
(
handler
);
IMFStreamDescriptor_Release
(
sd
);
hr
=
IMFMediaSource_Shutdown
(
mediasource
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#x.
\n
"
,
hr
);
hr
=
IMFMediaSource_CreatePresentationDescriptor
(
mediasource
,
NULL
);
ok
(
hr
==
MF_E_SHUTDOWN
,
"Unexpected hr %#x.
\n
"
,
hr
);
skip_source_tests:
IMFPresentationDescriptor_Release
(
descriptor
);
IMFMediaSource_Release
(
mediasource
);
...
...
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