@@ -28,15 +28,12 @@
// of including it though, through strmif.h via dshow.h. And on mingw, the
// mf*.h headers below indirectly include strmif.h.)
#include <icodecapi.h>
-// Clang in MSVC mode fails on codecapi.h if we haven't included uuids.h
-// before, while it seems to work fine with MSVC itself.
-#include <uuids.h>
#else
#include <dshow.h>
-#endif
// Older versions of mingw-w64 need codecapi.h explicitly included, while newer
// ones include it implicitly from dshow.h (via uuids.h).
#include <codecapi.h>
+#endif
#include <mfapi.h>
#include <mferror.h>
#include <mfobjects.h>
@@ -134,6 +131,16 @@ enum {
ff_METransformMarker,
};
+// These do exist in all supported headers, but are manually defined here
+// to avoid having to include codecapi.h, as there's problems including that
+// header when targeting UWP (where including it with MSVC seems to work,
+// but fails when built with clang in MSVC mode).
+enum ff_eAVEncH264VProfile {
+ ff_eAVEncH264VProfile_Base = 66,
+ ff_eAVEncH264VProfile_Main = 77,
+ ff_eAVEncH264VProfile_High = 100,
+};
+
char *ff_hr_str_buf(char *buf, size_t size, HRESULT hr);
#define ff_hr_str(hr) ff_hr_str_buf((char[80]){0}, 80, hr)
@@ -651,13 +651,13 @@ static int mf_encv_output_adjust(AVCodecContext *avctx, IMFMediaType *type)
// (MS HEVC supports eAVEncH265VProfile_Main_420_8 only.)
if (avctx->codec_id == AV_CODEC_ID_H264) {
- UINT32 profile = eAVEncH264VProfile_Base;
+ UINT32 profile = ff_eAVEncH264VProfile_Base;
switch (avctx->profile) {
case FF_PROFILE_H264_MAIN:
- profile = eAVEncH264VProfile_Main;
+ profile = ff_eAVEncH264VProfile_Main;
break;
case FF_PROFILE_H264_HIGH:
- profile = eAVEncH264VProfile_High;
+ profile = ff_eAVEncH264VProfile_High;
break;
}
IMFAttributes_SetUINT32(type, &MF_MT_MPEG2_PROFILE, profile);