axmol/core/media/MFUtils.cpp

176 lines
5.1 KiB
C++

#if defined(_WIN32)
#include "MFUtils.h"
#include <windows.h>
#include <mfapi.h>
#include <mfobjects.h>
#include <mfidl.h>
#pragma comment(lib, "mf")
#pragma comment(lib, "Mfplat")
#pragma comment(lib, "mfplay")
#pragma comment(lib, "mfuuid")
#pragma comment(lib, "shlwapi")
# define __TEXTSV(quote) quote##sv
# define TEXTSV(str) __TEXTSV(str)
namespace MFUtils
{
struct MFMedia
{
MFMedia() : _hr(MFStartup(MF_VERSION)) {}
~MFMedia() { MFShutdown(); }
HRESULT _hr;
};
HRESULT InitializeMFOnce()
{
static MFMedia s_mfMedia;
return s_mfMedia._hr;
}
std::string_view GetVideoTypeName(const GUID& SubType)
{
using namespace std::string_view_literals;
if (SubType == GUID_NULL)
return TEXTSV("Null");
// image formats
if (SubType == MFImageFormat_JPEG)
return TEXTSV("Jpeg");
if (SubType == MFImageFormat_RGB32)
return TEXTSV("RGB32");
// stream formats
if (SubType == MFStreamFormat_MPEG2Transport)
return TEXTSV("MPEG-2 Transport");
if (SubType == MFStreamFormat_MPEG2Program)
return TEXTSV("MPEG-2 Program");
// video formats
if (SubType == MFVideoFormat_RGB32)
return TEXTSV("RGB32");
if (SubType == MFVideoFormat_ARGB32)
return TEXTSV("ARGB32");
if (SubType == MFVideoFormat_RGB24)
return TEXTSV("RGB24");
if (SubType == MFVideoFormat_RGB555)
return TEXTSV("RGB525");
if (SubType == MFVideoFormat_RGB565)
return TEXTSV("RGB565");
if (SubType == MFVideoFormat_RGB8)
return TEXTSV("RGB8");
if (SubType == MFVideoFormat_AI44)
return TEXTSV("AI44");
if (SubType == MFVideoFormat_AYUV)
return TEXTSV("AYUV");
if (SubType == MFVideoFormat_YUY2)
return TEXTSV("YUY2");
if (SubType == MFVideoFormat_YVYU)
return TEXTSV("YVYU");
if (SubType == MFVideoFormat_YVU9)
return TEXTSV("YVU9");
if (SubType == MFVideoFormat_UYVY)
return TEXTSV("UYVY");
if (SubType == MFVideoFormat_NV11)
return TEXTSV("NV11");
if (SubType == MFVideoFormat_NV12)
return TEXTSV("NV12");
if (SubType == MFVideoFormat_YV12)
return TEXTSV("YV12");
if (SubType == MFVideoFormat_I420)
return TEXTSV("I420");
if (SubType == MFVideoFormat_IYUV)
return TEXTSV("IYUV");
if (SubType == MFVideoFormat_Y210)
return TEXTSV("Y210");
if (SubType == MFVideoFormat_Y216)
return TEXTSV("Y216");
if (SubType == MFVideoFormat_Y410)
return TEXTSV("Y410");
if (SubType == MFVideoFormat_Y416)
return TEXTSV("Y416");
if (SubType == MFVideoFormat_Y41P)
return TEXTSV("Y41P");
if (SubType == MFVideoFormat_Y41T)
return TEXTSV("Y41T");
if (SubType == MFVideoFormat_Y42T)
return TEXTSV("Y42T");
if (SubType == MFVideoFormat_P210)
return TEXTSV("P210");
if (SubType == MFVideoFormat_P216)
return TEXTSV("P216");
if (SubType == MFVideoFormat_P010)
return TEXTSV("P010");
if (SubType == MFVideoFormat_P016)
return TEXTSV("P016");
if (SubType == MFVideoFormat_v210)
return TEXTSV("v210");
if (SubType == MFVideoFormat_v216)
return TEXTSV("v216");
if (SubType == MFVideoFormat_v410)
return TEXTSV("v410");
if (SubType == MFVideoFormat_MP43)
return TEXTSV("MP43");
if (SubType == MFVideoFormat_MP4S)
return TEXTSV("MP4S");
if (SubType == MFVideoFormat_M4S2)
return TEXTSV("M4S2");
if (SubType == MFVideoFormat_MP4V)
return TEXTSV("MP4V");
if (SubType == MFVideoFormat_WMV1)
return TEXTSV("WMV1");
if (SubType == MFVideoFormat_WMV2)
return TEXTSV("WMV2");
if (SubType == MFVideoFormat_WMV3)
return TEXTSV("WMV3");
if (SubType == MFVideoFormat_WVC1)
return TEXTSV("WVC1");
if (SubType == MFVideoFormat_MSS1)
return TEXTSV("MSS1");
if (SubType == MFVideoFormat_MSS2)
return TEXTSV("MSS2");
if (SubType == MFVideoFormat_MPG1)
return TEXTSV("MPG1");
if (SubType == MFVideoFormat_DVSL)
return TEXTSV("DVSL");
if (SubType == MFVideoFormat_DVSD)
return TEXTSV("DVSD");
if (SubType == MFVideoFormat_DVHD)
return TEXTSV("DVHD");
if (SubType == MFVideoFormat_DV25)
return TEXTSV("DV25");
if (SubType == MFVideoFormat_DV50)
return TEXTSV("DV50");
if (SubType == MFVideoFormat_DVH1)
return TEXTSV("DVH1");
if (SubType == MFVideoFormat_DVC)
return TEXTSV("DVC");
if (SubType == MFVideoFormat_H264)
return TEXTSV("H264");
if (SubType == MFVideoFormat_MJPG)
return TEXTSV("MJPG");
if (SubType == MFVideoFormat_420O)
return TEXTSV("420O");
if (SubType == MFVideoFormat_HEVC)
return TEXTSV("HEVC");
if (SubType == MFVideoFormat_HEVC_ES)
return TEXTSV("HEVC ES");
# if (WINVER >= _WIN32_WINNT_WIN8)
if (SubType == MFVideoFormat_H263)
return TEXTSV("H263");
# endif
if (SubType == MFVideoFormat_H264_ES)
return TEXTSV("H264 ES");
if (SubType == MFVideoFormat_MPEG2)
return TEXTSV("MPEG-2");
return "UNKNOWN"sv;
}
} // namespace MFUtils
#endif