Module: wine Branch: master Commit: 4319ada73674ca0403b06e1655f4a2757139f87a URL: https://gitlab.winehq.org/wine/wine/-/commit/4319ada73674ca0403b06e1655f4a27...
Author: Rémi Bernon rbernon@codeweavers.com Date: Sat Feb 17 12:30:53 2024 +0100
mfplat/mediatype: Implement MFInitMediaTypeFromVideoInfoHeader2.
---
dlls/mfplat/mediatype.c | 26 ++++++++++++++++++++++++-- dlls/mfplat/mfplat.spec | 2 +- include/mfapi.h | 4 ++++ 3 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index afe611000a5..a85eaaa411b 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -25,6 +25,7 @@ #include "uuids.h" #include "strmif.h" #include "initguid.h" +#include "dvdmedia.h" #include "ks.h" #include "ksmedia.h" #include "amvideo.h" @@ -3747,9 +3748,9 @@ HRESULT WINAPI MFCreateVideoMediaTypeFromVideoInfoHeader(const KS_VIDEOINFOHEADE }
/*********************************************************************** - * MFInitMediaTypeFromVideoInfoHeader (mfplat.@) + * MFInitMediaTypeFromVideoInfoHeader2 (mfplat.@) */ -HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *media_type, const VIDEOINFOHEADER *vih, UINT32 size, +HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader2(IMFMediaType *media_type, const VIDEOINFOHEADER2 *vih, UINT32 size, const GUID *subtype) { HRESULT hr = S_OK; @@ -3793,6 +3794,27 @@ HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *media_type, cons return hr; }
+/*********************************************************************** + * MFInitMediaTypeFromVideoInfoHeader (mfplat.@) + */ +HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *media_type, const VIDEOINFOHEADER *vih, UINT32 size, + const GUID *subtype) +{ + VIDEOINFOHEADER2 vih2 = + { + .rcSource = vih->rcSource, + .rcTarget = vih->rcTarget, + .dwBitRate = vih->dwBitRate, + .dwBitErrorRate = vih->dwBitErrorRate, + .AvgTimePerFrame = vih->AvgTimePerFrame, + .bmiHeader = vih->bmiHeader, + }; + + TRACE("%p, %p, %u, %s.\n", media_type, vih, size, debugstr_guid(subtype)); + + return MFInitMediaTypeFromVideoInfoHeader2(media_type, &vih2, sizeof(vih2), subtype); +} + static HRESULT init_am_media_type_audio_format(AM_MEDIA_TYPE *am_type, UINT32 user_size, IMFMediaType *media_type) { UINT32 num_channels, value; diff --git a/dlls/mfplat/mfplat.spec b/dlls/mfplat/mfplat.spec index d7f75351960..44d1b89fff5 100644 --- a/dlls/mfplat/mfplat.spec +++ b/dlls/mfplat/mfplat.spec @@ -123,7 +123,7 @@ @ stub MFInitMediaTypeFromMFVideoFormat @ stub MFInitMediaTypeFromMPEG1VideoInfo @ stub MFInitMediaTypeFromMPEG2VideoInfo -@ stub MFInitMediaTypeFromVideoInfoHeader2 +@ stdcall MFInitMediaTypeFromVideoInfoHeader2(ptr ptr long ptr) @ stdcall MFInitMediaTypeFromVideoInfoHeader(ptr ptr long ptr) @ stdcall MFInitMediaTypeFromWaveFormatEx(ptr ptr long) @ stub MFInitVideoFormat diff --git a/include/mfapi.h b/include/mfapi.h index ef5bec16369..27b0f4fd841 100644 --- a/include/mfapi.h +++ b/include/mfapi.h @@ -507,6 +507,8 @@ typedef enum
struct tagVIDEOINFOHEADER; typedef struct tagVIDEOINFOHEADER VIDEOINFOHEADER; +struct tagVIDEOINFOHEADER2; +typedef struct tagVIDEOINFOHEADER2 VIDEOINFOHEADER2; typedef struct _AMMediaType AM_MEDIA_TYPE;
HRESULT WINAPI MFAddPeriodicCallback(MFPERIODICCALLBACK callback, IUnknown *context, DWORD *key); @@ -593,6 +595,8 @@ HRESULT WINAPI MFInitAMMediaTypeFromMFMediaType(IMFMediaType *media_type, GUID f HRESULT WINAPI MFInitMediaTypeFromAMMediaType(IMFMediaType *mediatype, const AM_MEDIA_TYPE *am_type); HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *media_type, const VIDEOINFOHEADER *vih, UINT32 size, const GUID *subtype); +HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader2(IMFMediaType *media_type, const VIDEOINFOHEADER2 *vih, + UINT32 size, const GUID *subtype); HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WAVEFORMATEX *format, UINT32 size); HRESULT WINAPI MFInitVideoFormat_RGB(MFVIDEOFORMAT *format, DWORD width, DWORD height, DWORD d3dformat); HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result);