mfplay: Implement HasVideo()/HasAudio().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
baa9738910
commit
7ce6ff3cb4
|
@ -435,18 +435,62 @@ static HRESULT WINAPI media_item_SetStartStopPosition(IMFPMediaItem *iface, cons
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT media_item_get_stream_type(IMFStreamDescriptor *sd, GUID *major)
|
||||||
|
{
|
||||||
|
IMFMediaTypeHandler *handler;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (SUCCEEDED(hr = IMFStreamDescriptor_GetMediaTypeHandler(sd, &handler)))
|
||||||
|
{
|
||||||
|
hr = IMFMediaTypeHandler_GetMajorType(handler, major);
|
||||||
|
IMFMediaTypeHandler_Release(handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT media_item_has_stream(struct media_item *item, const GUID *major, BOOL *has_stream, BOOL *is_selected)
|
||||||
|
{
|
||||||
|
IMFStreamDescriptor *sd;
|
||||||
|
unsigned int idx = 0;
|
||||||
|
BOOL selected;
|
||||||
|
GUID guid;
|
||||||
|
|
||||||
|
*has_stream = *is_selected = FALSE;
|
||||||
|
|
||||||
|
while (SUCCEEDED(IMFPresentationDescriptor_GetStreamDescriptorByIndex(item->pd, idx++, &selected, &sd)))
|
||||||
|
{
|
||||||
|
if (SUCCEEDED(media_item_get_stream_type(sd, &guid)) && IsEqualGUID(&guid, major))
|
||||||
|
{
|
||||||
|
*has_stream = TRUE;
|
||||||
|
*is_selected = selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
IMFStreamDescriptor_Release(sd);
|
||||||
|
|
||||||
|
if (*has_stream && *is_selected)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI media_item_HasVideo(IMFPMediaItem *iface, BOOL *has_video, BOOL *selected)
|
static HRESULT WINAPI media_item_HasVideo(IMFPMediaItem *iface, BOOL *has_video, BOOL *selected)
|
||||||
{
|
{
|
||||||
FIXME("%p, %p, %p.\n", iface, has_video, selected);
|
struct media_item *item = impl_from_IMFPMediaItem(iface);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %p, %p.\n", iface, has_video, selected);
|
||||||
|
|
||||||
|
return media_item_has_stream(item, &MFMediaType_Video, has_video, selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI media_item_HasAudio(IMFPMediaItem *iface, BOOL *has_audio, BOOL *selected)
|
static HRESULT WINAPI media_item_HasAudio(IMFPMediaItem *iface, BOOL *has_audio, BOOL *selected)
|
||||||
{
|
{
|
||||||
FIXME("%p, %p, %p.\n", iface, has_audio, selected);
|
struct media_item *item = impl_from_IMFPMediaItem(iface);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %p, %p.\n", iface, has_audio, selected);
|
||||||
|
|
||||||
|
return media_item_has_stream(item, &MFMediaType_Audio, has_audio, selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI media_item_IsProtected(IMFPMediaItem *iface, BOOL *protected)
|
static HRESULT WINAPI media_item_IsProtected(IMFPMediaItem *iface, BOOL *protected)
|
||||||
|
@ -1001,20 +1045,6 @@ static HRESULT WINAPI media_player_CreateMediaItemFromObject(IMFPMediaPlayer *if
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT media_item_get_stream_type(IMFStreamDescriptor *sd, GUID *major)
|
|
||||||
{
|
|
||||||
IMFMediaTypeHandler *handler;
|
|
||||||
HRESULT hr;
|
|
||||||
|
|
||||||
if (SUCCEEDED(hr = IMFStreamDescriptor_GetMediaTypeHandler(sd, &handler)))
|
|
||||||
{
|
|
||||||
hr = IMFMediaTypeHandler_GetMajorType(handler, major);
|
|
||||||
IMFMediaTypeHandler_Release(handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
return hr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static HRESULT media_item_create_source_node(struct media_item *item, IMFStreamDescriptor *sd,
|
static HRESULT media_item_create_source_node(struct media_item *item, IMFStreamDescriptor *sd,
|
||||||
IMFTopologyNode **node)
|
IMFTopologyNode **node)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue