Commit 6c33a230 authored by Martin Storsjö's avatar Martin Storsjö

mfenc: Avoid including codecapi.h, fix building in UWP mode with clang

Including codecapi.h and uuids.h in UWP mode doesn't define all defines
properly, ending up with constructs that MSVC silently tolerates, but
that clang errors out on, like this:
    DEFINE_GUIDEX(CODECAPI_AVEncCommonFormatConstraint);

Just avoid including codecapi.h completely and hardcode the last few
enum values we use from there. We already use local versions of most
enums from there, due to older mingw-w64 headers being incomplete.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 869f655e
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment