From c5660a2fe355ae2419210b7cf1a0019ce5f5c195 Mon Sep 17 00:00:00 2001 From: Daniel Stankewitz Date: Sun, 25 Sep 2022 16:40:32 +0200 Subject: [PATCH] updating mfx --- .../actions/libmfx/include/mfx/mfxadapter.h | 78 +- .../libmfx/include/mfx/mfxastructures.h | 340 +- .../actions/libmfx/include/mfx/mfxaudio++.h | 200 +- .github/actions/libmfx/include/mfx/mfxaudio.h | 120 +- .github/actions/libmfx/include/mfx/mfxbrc.h | 258 +- .../actions/libmfx/include/mfx/mfxcamera.h | 542 +- .../actions/libmfx/include/mfx/mfxcommon.h | 426 +- .github/actions/libmfx/include/mfx/mfxdefs.h | 470 +- .../mfx/mfxdispatcherprefixedfunctions.h | 288 +- .github/actions/libmfx/include/mfx/mfxenc.h | 148 +- .github/actions/libmfx/include/mfx/mfxfei.h | 1197 ++-- .../actions/libmfx/include/mfx/mfxfeihevc.h | 593 +- .github/actions/libmfx/include/mfx/mfxjpeg.h | 210 +- .github/actions/libmfx/include/mfx/mfxla.h | 201 +- .github/actions/libmfx/include/mfx/mfxmvc.h | 212 +- .github/actions/libmfx/include/mfx/mfxpak.h | 156 +- .github/actions/libmfx/include/mfx/mfxpcp.h | 56 - .../actions/libmfx/include/mfx/mfxplugin++.h | 1434 ++--- .../actions/libmfx/include/mfx/mfxplugin.h | 443 +- .github/actions/libmfx/include/mfx/mfxsc.h | 108 +- .github/actions/libmfx/include/mfx/mfxscd.h | 61 - .../actions/libmfx/include/mfx/mfxsession.h | 100 +- .../libmfx/include/mfx/mfxstructures.h | 5030 +++++++++-------- .../actions/libmfx/include/mfx/mfxvideo++.h | 376 +- .github/actions/libmfx/include/mfx/mfxvideo.h | 208 +- .github/actions/libmfx/include/mfx/mfxvp8.h | 142 +- .github/actions/libmfx/include/mfx/mfxvp9.h | 106 +- .../libmfx/include/mfx/mfxvstructures.h | 44 +- .github/actions/libmfx/lib/mfx.lib | Bin 359450 -> 1039862 bytes .github/actions/libmfx/lib/mfxd.lib | Bin 361902 -> 0 bytes 30 files changed, 6774 insertions(+), 6773 deletions(-) delete mode 100644 .github/actions/libmfx/include/mfx/mfxpcp.h delete mode 100644 .github/actions/libmfx/include/mfx/mfxscd.h delete mode 100644 .github/actions/libmfx/lib/mfxd.lib diff --git a/.github/actions/libmfx/include/mfx/mfxadapter.h b/.github/actions/libmfx/include/mfx/mfxadapter.h index 30c4fb3..6e97565 100644 --- a/.github/actions/libmfx/include/mfx/mfxadapter.h +++ b/.github/actions/libmfx/include/mfx/mfxadapter.h @@ -1,40 +1,40 @@ -// Copyright (c) 2019-2020 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#include "mfxdefs.h" -#if (MFX_VERSION >= 1031) -#ifndef __MFXADAPTER_H__ -#define __MFXADAPTER_H__ - -#include "mfxstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif -mfxStatus MFX_CDECL MFXQueryAdapters(mfxComponentInfo* input_info, mfxAdaptersInfo* adapters); -mfxStatus MFX_CDECL MFXQueryAdaptersDecode(mfxBitstream* bitstream, mfxU32 codec_id, mfxAdaptersInfo* adapters); -mfxStatus MFX_CDECL MFXQueryAdaptersNumber(mfxU32* num_adapters); -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // __MFXADAPTER_H__ +// Copyright (c) 2019-2020 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include "mfxdefs.h" +#if (MFX_VERSION >= 1031) +#ifndef __MFXADAPTER_H__ +#define __MFXADAPTER_H__ + +#include "mfxstructures.h" + +#ifdef __cplusplus +extern "C" +{ +#endif +mfxStatus MFX_CDECL MFXQueryAdapters(mfxComponentInfo* input_info, mfxAdaptersInfo* adapters); +mfxStatus MFX_CDECL MFXQueryAdaptersDecode(mfxBitstream* bitstream, mfxU32 codec_id, mfxAdaptersInfo* adapters); +mfxStatus MFX_CDECL MFXQueryAdaptersNumber(mfxU32* num_adapters); +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // __MFXADAPTER_H__ #endif \ No newline at end of file diff --git a/.github/actions/libmfx/include/mfx/mfxastructures.h b/.github/actions/libmfx/include/mfx/mfxastructures.h index 679132f..69bc560 100644 --- a/.github/actions/libmfx/include/mfx/mfxastructures.h +++ b/.github/actions/libmfx/include/mfx/mfxastructures.h @@ -1,170 +1,170 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXASTRUCTURES_H__ -#define __MFXASTRUCTURES_H__ -#include "mfxcommon.h" - -#if !defined (__GNUC__) -#pragma warning(disable: 4201) -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* CodecId */ -enum { - MFX_CODEC_AAC =MFX_MAKEFOURCC('A','A','C',' '), - MFX_CODEC_MP3 =MFX_MAKEFOURCC('M','P','3',' ') -}; - -enum { - /* AAC Profiles & Levels */ - MFX_PROFILE_AAC_LC =2, - MFX_PROFILE_AAC_LTP =4, - MFX_PROFILE_AAC_MAIN =1, - MFX_PROFILE_AAC_SSR =3, - MFX_PROFILE_AAC_HE =5, - MFX_PROFILE_AAC_ALS =0x20, - MFX_PROFILE_AAC_BSAC =22, - MFX_PROFILE_AAC_PS =29, - - /*MPEG AUDIO*/ - MFX_AUDIO_MPEG1_LAYER1 =0x00000110, - MFX_AUDIO_MPEG1_LAYER2 =0x00000120, - MFX_AUDIO_MPEG1_LAYER3 =0x00000140, - MFX_AUDIO_MPEG2_LAYER1 =0x00000210, - MFX_AUDIO_MPEG2_LAYER2 =0x00000220, - MFX_AUDIO_MPEG2_LAYER3 =0x00000240 -}; - -/*AAC HE decoder down sampling*/ -enum { - MFX_AUDIO_AAC_HE_DWNSMPL_OFF=0, - MFX_AUDIO_AAC_HE_DWNSMPL_ON= 1 -}; - -/* AAC decoder support of PS */ -enum { - MFX_AUDIO_AAC_PS_DISABLE= 0, - MFX_AUDIO_AAC_PS_PARSER= 1, - MFX_AUDIO_AAC_PS_ENABLE_BL= 111, - MFX_AUDIO_AAC_PS_ENABLE_UR= 411 -}; - -/*AAC decoder SBR support*/ -enum { - MFX_AUDIO_AAC_SBR_DISABLE = 0, - MFX_AUDIO_AAC_SBR_ENABLE= 1, - MFX_AUDIO_AAC_SBR_UNDEF= 2 -}; - -/*AAC header type*/ -enum{ - MFX_AUDIO_AAC_ADTS= 1, - MFX_AUDIO_AAC_ADIF= 2, - MFX_AUDIO_AAC_RAW= 3, -}; - -/*AAC encoder stereo mode*/ -enum -{ - MFX_AUDIO_AAC_MONO= 0, - MFX_AUDIO_AAC_LR_STEREO= 1, - MFX_AUDIO_AAC_MS_STEREO= 2, - MFX_AUDIO_AAC_JOINT_STEREO= 3 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 CodecId; - mfxU16 CodecProfile; - mfxU16 CodecLevel; - - mfxU32 Bitrate; - mfxU32 SampleFrequency; - mfxU16 NumChannel; - mfxU16 BitPerSample; - - mfxU16 reserved1[22]; - - union { - struct { /* AAC Decoding Options */ - mfxU16 FlagPSSupportLev; - mfxU16 Layer; - mfxU16 AACHeaderDataSize; - mfxU8 AACHeaderData[64]; - }; - struct { /* AAC Encoding Options */ - mfxU16 OutputFormat; - mfxU16 StereoMode; - mfxU16 reserved2[61]; - }; - }; -} mfxAudioInfoMFX; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU16 AsyncDepth; - mfxU16 Protected; - mfxU16 reserved[14]; - - mfxAudioInfoMFX mfx; - mfxExtBuffer** ExtParam; - mfxU16 NumExtParam; -} mfxAudioParam; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 SuggestedInputSize; - mfxU32 SuggestedOutputSize; - mfxU32 reserved[6]; -} mfxAudioAllocRequest; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxU64 TimeStamp; /* 1/90KHz */ - mfxU16 Locked; - mfxU16 NumChannels; - mfxU32 SampleFrequency; - mfxU16 BitPerSample; - mfxU16 reserved1[7]; - - mfxU8* Data; - mfxU32 reserved2; - mfxU32 DataLength; - mfxU32 MaxLength; - - mfxU32 NumExtParam; - mfxExtBuffer **ExtParam; -} mfxAudioFrame; -MFX_PACK_END() - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - - +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXASTRUCTURES_H__ +#define __MFXASTRUCTURES_H__ +#include "mfxcommon.h" + +#if !defined (__GNUC__) +#pragma warning(disable: 4201) +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* CodecId */ +enum { + MFX_CODEC_AAC =MFX_MAKEFOURCC('A','A','C',' '), + MFX_CODEC_MP3 =MFX_MAKEFOURCC('M','P','3',' ') +}; + +enum { + /* AAC Profiles & Levels */ + MFX_PROFILE_AAC_LC =2, + MFX_PROFILE_AAC_LTP =4, + MFX_PROFILE_AAC_MAIN =1, + MFX_PROFILE_AAC_SSR =3, + MFX_PROFILE_AAC_HE =5, + MFX_PROFILE_AAC_ALS =0x20, + MFX_PROFILE_AAC_BSAC =22, + MFX_PROFILE_AAC_PS =29, + + /*MPEG AUDIO*/ + MFX_AUDIO_MPEG1_LAYER1 =0x00000110, + MFX_AUDIO_MPEG1_LAYER2 =0x00000120, + MFX_AUDIO_MPEG1_LAYER3 =0x00000140, + MFX_AUDIO_MPEG2_LAYER1 =0x00000210, + MFX_AUDIO_MPEG2_LAYER2 =0x00000220, + MFX_AUDIO_MPEG2_LAYER3 =0x00000240 +}; + +/*AAC HE decoder down sampling*/ +enum { + MFX_AUDIO_AAC_HE_DWNSMPL_OFF=0, + MFX_AUDIO_AAC_HE_DWNSMPL_ON= 1 +}; + +/* AAC decoder support of PS */ +enum { + MFX_AUDIO_AAC_PS_DISABLE= 0, + MFX_AUDIO_AAC_PS_PARSER= 1, + MFX_AUDIO_AAC_PS_ENABLE_BL= 111, + MFX_AUDIO_AAC_PS_ENABLE_UR= 411 +}; + +/*AAC decoder SBR support*/ +enum { + MFX_AUDIO_AAC_SBR_DISABLE = 0, + MFX_AUDIO_AAC_SBR_ENABLE= 1, + MFX_AUDIO_AAC_SBR_UNDEF= 2 +}; + +/*AAC header type*/ +enum{ + MFX_AUDIO_AAC_ADTS= 1, + MFX_AUDIO_AAC_ADIF= 2, + MFX_AUDIO_AAC_RAW= 3, +}; + +/*AAC encoder stereo mode*/ +enum +{ + MFX_AUDIO_AAC_MONO= 0, + MFX_AUDIO_AAC_LR_STEREO= 1, + MFX_AUDIO_AAC_MS_STEREO= 2, + MFX_AUDIO_AAC_JOINT_STEREO= 3 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU32 CodecId; + mfxU16 CodecProfile; + mfxU16 CodecLevel; + + mfxU32 Bitrate; + mfxU32 SampleFrequency; + mfxU16 NumChannel; + mfxU16 BitPerSample; + + mfxU16 reserved1[22]; + + union { + struct { /* AAC Decoding Options */ + mfxU16 FlagPSSupportLev; + mfxU16 Layer; + mfxU16 AACHeaderDataSize; + mfxU8 AACHeaderData[64]; + }; + struct { /* AAC Encoding Options */ + mfxU16 OutputFormat; + mfxU16 StereoMode; + mfxU16 reserved2[61]; + }; + }; +} mfxAudioInfoMFX; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU16 AsyncDepth; + mfxU16 Protected; + mfxU16 reserved[14]; + + mfxAudioInfoMFX mfx; + mfxExtBuffer** ExtParam; + mfxU16 NumExtParam; +} mfxAudioParam; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU32 SuggestedInputSize; + mfxU32 SuggestedOutputSize; + mfxU32 reserved[6]; +} mfxAudioAllocRequest; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxU64 TimeStamp; /* 1/90KHz */ + mfxU16 Locked; + mfxU16 NumChannels; + mfxU32 SampleFrequency; + mfxU16 BitPerSample; + mfxU16 reserved1[7]; + + mfxU8* Data; + mfxU32 reserved2; + mfxU32 DataLength; + mfxU32 MaxLength; + + mfxU32 NumExtParam; + mfxExtBuffer **ExtParam; +} mfxAudioFrame; +MFX_PACK_END() + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif + + diff --git a/.github/actions/libmfx/include/mfx/mfxaudio++.h b/.github/actions/libmfx/include/mfx/mfxaudio++.h index 1abbf11..7b8e36f 100644 --- a/.github/actions/libmfx/include/mfx/mfxaudio++.h +++ b/.github/actions/libmfx/include/mfx/mfxaudio++.h @@ -1,101 +1,101 @@ -// Copyright (c) 2017 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXAUDIOPLUSPLUS_H -#define __MFXAUDIOPLUSPLUS_H - -#include "mfxaudio.h" - -class MFXAudioSession -{ -public: - MFXAudioSession(void) { m_session = (mfxSession) 0; } - virtual ~MFXAudioSession(void) { Close(); } - - virtual mfxStatus Init(mfxIMPL impl, mfxVersion *ver) { return MFXInit(impl, ver, &m_session); } - virtual mfxStatus Close(void) - { - mfxStatus mfxRes; - mfxRes = MFXClose(m_session); m_session = (mfxSession) 0; - return mfxRes; - } - - virtual mfxStatus QueryIMPL(mfxIMPL *impl) { return MFXQueryIMPL(m_session, impl); } - virtual mfxStatus QueryVersion(mfxVersion *version) { return MFXQueryVersion(m_session, version); } - - virtual mfxStatus JoinSession(mfxSession child_session) { return MFXJoinSession(m_session, child_session);} - virtual mfxStatus DisjoinSession( ) { return MFXDisjoinSession(m_session);} - virtual mfxStatus CloneSession( mfxSession *clone) { return MFXCloneSession(m_session, clone);} - virtual mfxStatus SetPriority( mfxPriority priority) { return MFXSetPriority(m_session, priority);} - virtual mfxStatus GetPriority( mfxPriority *priority) { return MFXGetPriority(m_session, priority);} - - virtual mfxStatus SyncOperation(mfxSyncPoint syncp, mfxU32 wait) { return MFXAudioCORE_SyncOperation(m_session, syncp, wait); } - - virtual operator mfxSession (void) { return m_session; } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - - -class MFXAudioDECODE -{ -public: - - MFXAudioDECODE(mfxSession session) { m_session = session; } - virtual ~MFXAudioDECODE(void) { Close(); } - - virtual mfxStatus Query(mfxAudioParam *in, mfxAudioParam *out) { return MFXAudioDECODE_Query(m_session, in, out); } - virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxAudioParam *par) { return MFXAudioDECODE_DecodeHeader(m_session, bs, par); } - virtual mfxStatus QueryIOSize(mfxAudioParam *par, mfxAudioAllocRequest *request) { return MFXAudioDECODE_QueryIOSize(m_session, par, request); } - virtual mfxStatus Init(mfxAudioParam *par) { return MFXAudioDECODE_Init(m_session, par); } - virtual mfxStatus Reset(mfxAudioParam *par) { return MFXAudioDECODE_Reset(m_session, par); } - virtual mfxStatus Close(void) { return MFXAudioDECODE_Close(m_session); } - virtual mfxStatus GetAudioParam(mfxAudioParam *par) { return MFXAudioDECODE_GetAudioParam(m_session, par); } - virtual mfxStatus DecodeFrameAsync(mfxBitstream *bs, mfxAudioFrame *frame, mfxSyncPoint *syncp) { return MFXAudioDECODE_DecodeFrameAsync(m_session, bs, frame, syncp); } - - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - - -class MFXAudioENCODE -{ -public: - - MFXAudioENCODE(mfxSession session) { m_session = session; } - virtual ~MFXAudioENCODE(void) { Close(); } - - virtual mfxStatus Query(mfxAudioParam *in, mfxAudioParam *out) { return MFXAudioENCODE_Query(m_session, in, out); } - virtual mfxStatus QueryIOSize(mfxAudioParam *par, mfxAudioAllocRequest *request) { return MFXAudioENCODE_QueryIOSize(m_session, par, request); } - virtual mfxStatus Init(mfxAudioParam *par) { return MFXAudioENCODE_Init(m_session, par); } - virtual mfxStatus Reset(mfxAudioParam *par) { return MFXAudioENCODE_Reset(m_session, par); } - virtual mfxStatus Close(void) { return MFXAudioENCODE_Close(m_session); } - virtual mfxStatus GetAudioParam(mfxAudioParam *par) { return MFXAudioENCODE_GetAudioParam(m_session, par); } - virtual mfxStatus EncodeFrameAsync(mfxAudioFrame *frame, mfxBitstream *buffer_out, mfxSyncPoint *syncp) { return MFXAudioENCODE_EncodeFrameAsync(m_session, frame, buffer_out, syncp); } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - +// Copyright (c) 2017 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXAUDIOPLUSPLUS_H +#define __MFXAUDIOPLUSPLUS_H + +#include "mfxaudio.h" + +class MFXAudioSession +{ +public: + MFXAudioSession(void) { m_session = (mfxSession) 0; } + virtual ~MFXAudioSession(void) { Close(); } + + virtual mfxStatus Init(mfxIMPL impl, mfxVersion *ver) { return MFXInit(impl, ver, &m_session); } + virtual mfxStatus Close(void) + { + mfxStatus mfxRes; + mfxRes = MFXClose(m_session); m_session = (mfxSession) 0; + return mfxRes; + } + + virtual mfxStatus QueryIMPL(mfxIMPL *impl) { return MFXQueryIMPL(m_session, impl); } + virtual mfxStatus QueryVersion(mfxVersion *version) { return MFXQueryVersion(m_session, version); } + + virtual mfxStatus JoinSession(mfxSession child_session) { return MFXJoinSession(m_session, child_session);} + virtual mfxStatus DisjoinSession( ) { return MFXDisjoinSession(m_session);} + virtual mfxStatus CloneSession( mfxSession *clone) { return MFXCloneSession(m_session, clone);} + virtual mfxStatus SetPriority( mfxPriority priority) { return MFXSetPriority(m_session, priority);} + virtual mfxStatus GetPriority( mfxPriority *priority) { return MFXGetPriority(m_session, priority);} + + virtual mfxStatus SyncOperation(mfxSyncPoint syncp, mfxU32 wait) { return MFXAudioCORE_SyncOperation(m_session, syncp, wait); } + + virtual operator mfxSession (void) { return m_session; } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + + +class MFXAudioDECODE +{ +public: + + MFXAudioDECODE(mfxSession session) { m_session = session; } + virtual ~MFXAudioDECODE(void) { Close(); } + + virtual mfxStatus Query(mfxAudioParam *in, mfxAudioParam *out) { return MFXAudioDECODE_Query(m_session, in, out); } + virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxAudioParam *par) { return MFXAudioDECODE_DecodeHeader(m_session, bs, par); } + virtual mfxStatus QueryIOSize(mfxAudioParam *par, mfxAudioAllocRequest *request) { return MFXAudioDECODE_QueryIOSize(m_session, par, request); } + virtual mfxStatus Init(mfxAudioParam *par) { return MFXAudioDECODE_Init(m_session, par); } + virtual mfxStatus Reset(mfxAudioParam *par) { return MFXAudioDECODE_Reset(m_session, par); } + virtual mfxStatus Close(void) { return MFXAudioDECODE_Close(m_session); } + virtual mfxStatus GetAudioParam(mfxAudioParam *par) { return MFXAudioDECODE_GetAudioParam(m_session, par); } + virtual mfxStatus DecodeFrameAsync(mfxBitstream *bs, mfxAudioFrame *frame, mfxSyncPoint *syncp) { return MFXAudioDECODE_DecodeFrameAsync(m_session, bs, frame, syncp); } + + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + + +class MFXAudioENCODE +{ +public: + + MFXAudioENCODE(mfxSession session) { m_session = session; } + virtual ~MFXAudioENCODE(void) { Close(); } + + virtual mfxStatus Query(mfxAudioParam *in, mfxAudioParam *out) { return MFXAudioENCODE_Query(m_session, in, out); } + virtual mfxStatus QueryIOSize(mfxAudioParam *par, mfxAudioAllocRequest *request) { return MFXAudioENCODE_QueryIOSize(m_session, par, request); } + virtual mfxStatus Init(mfxAudioParam *par) { return MFXAudioENCODE_Init(m_session, par); } + virtual mfxStatus Reset(mfxAudioParam *par) { return MFXAudioENCODE_Reset(m_session, par); } + virtual mfxStatus Close(void) { return MFXAudioENCODE_Close(m_session); } + virtual mfxStatus GetAudioParam(mfxAudioParam *par) { return MFXAudioENCODE_GetAudioParam(m_session, par); } + virtual mfxStatus EncodeFrameAsync(mfxAudioFrame *frame, mfxBitstream *buffer_out, mfxSyncPoint *syncp) { return MFXAudioENCODE_EncodeFrameAsync(m_session, frame, buffer_out, syncp); } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + #endif \ No newline at end of file diff --git a/.github/actions/libmfx/include/mfx/mfxaudio.h b/.github/actions/libmfx/include/mfx/mfxaudio.h index fd5872f..45478bd 100644 --- a/.github/actions/libmfx/include/mfx/mfxaudio.h +++ b/.github/actions/libmfx/include/mfx/mfxaudio.h @@ -1,60 +1,60 @@ -// Copyright (c) 2017 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#ifndef __MFXAUDIO_H__ -#define __MFXAUDIO_H__ -#include "mfxsession.h" -#include "mfxastructures.h" - -#define MFX_AUDIO_VERSION_MAJOR 1 -#define MFX_AUDIO_VERSION_MINOR 15 - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* AudioCORE */ -mfxStatus MFX_CDECL MFXAudioCORE_SyncOperation(mfxSession session, mfxSyncPoint syncp, mfxU32 wait); - -/* AudioENCODE */ -mfxStatus MFX_CDECL MFXAudioENCODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out); -mfxStatus MFX_CDECL MFXAudioENCODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request); -mfxStatus MFX_CDECL MFXAudioENCODE_Init(mfxSession session, mfxAudioParam *par); -mfxStatus MFX_CDECL MFXAudioENCODE_Reset(mfxSession session, mfxAudioParam *par); -mfxStatus MFX_CDECL MFXAudioENCODE_Close(mfxSession session); -mfxStatus MFX_CDECL MFXAudioENCODE_GetAudioParam(mfxSession session, mfxAudioParam *par); -mfxStatus MFX_CDECL MFXAudioENCODE_EncodeFrameAsync(mfxSession session, mfxAudioFrame *frame, mfxBitstream *bs, mfxSyncPoint *syncp); - -/* AudioDECODE */ -mfxStatus MFX_CDECL MFXAudioDECODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out); -mfxStatus MFX_CDECL MFXAudioDECODE_DecodeHeader(mfxSession session, mfxBitstream *bs, mfxAudioParam* par); -mfxStatus MFX_CDECL MFXAudioDECODE_Init(mfxSession session, mfxAudioParam *par); -mfxStatus MFX_CDECL MFXAudioDECODE_Reset(mfxSession session, mfxAudioParam *par); -mfxStatus MFX_CDECL MFXAudioDECODE_Close(mfxSession session); -mfxStatus MFX_CDECL MFXAudioDECODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request); -mfxStatus MFX_CDECL MFXAudioDECODE_GetAudioParam(mfxSession session, mfxAudioParam *par); -mfxStatus MFX_CDECL MFXAudioDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream *bs, mfxAudioFrame *frame, mfxSyncPoint *syncp); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif +// Copyright (c) 2017 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#ifndef __MFXAUDIO_H__ +#define __MFXAUDIO_H__ +#include "mfxsession.h" +#include "mfxastructures.h" + +#define MFX_AUDIO_VERSION_MAJOR 1 +#define MFX_AUDIO_VERSION_MINOR 15 + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* AudioCORE */ +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioCORE_SyncOperation(mfxSession session, mfxSyncPoint syncp, mfxU32 wait); + +/* AudioENCODE */ +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Init(mfxSession session, mfxAudioParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Reset(mfxSession session, mfxAudioParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Close(mfxSession session); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_GetAudioParam(mfxSession session, mfxAudioParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_EncodeFrameAsync(mfxSession session, mfxAudioFrame *frame, mfxBitstream *bs, mfxSyncPoint *syncp); + +/* AudioDECODE */ +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_DecodeHeader(mfxSession session, mfxBitstream *bs, mfxAudioParam* par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Init(mfxSession session, mfxAudioParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Reset(mfxSession session, mfxAudioParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Close(mfxSession session); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_GetAudioParam(mfxSession session, mfxAudioParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream *bs, mfxAudioFrame *frame, mfxSyncPoint *syncp); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/.github/actions/libmfx/include/mfx/mfxbrc.h b/.github/actions/libmfx/include/mfx/mfxbrc.h index 80516c3..0227579 100644 --- a/.github/actions/libmfx/include/mfx/mfxbrc.h +++ b/.github/actions/libmfx/include/mfx/mfxbrc.h @@ -1,129 +1,129 @@ -// Copyright (c) 2019-2020 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXBRC_H__ -#define __MFXBRC_H__ - -#include "mfxvstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Extended Buffer Ids */ -enum { - MFX_EXTBUFF_BRC = MFX_MAKEFOURCC('E','B','R','C') -}; - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { -#if (MFX_VERSION >= 1026) - mfxU32 reserved[23]; - mfxU16 SceneChange; // Frame is Scene Chg frame - mfxU16 LongTerm; // Frame is long term refrence - mfxU32 FrameCmplx; // Frame Complexity -#else - mfxU32 reserved[25]; -#endif - mfxU32 EncodedOrder; // Frame number in a sequence of reordered frames starting from encoder Init() - mfxU32 DisplayOrder; // Frame number in a sequence of frames in display order starting from last IDR - mfxU32 CodedFrameSize; // Size of frame in bytes after encoding - mfxU16 FrameType; // See FrameType enumerator - mfxU16 PyramidLayer; // B-pyramid or P-pyramid layer, frame belongs to - mfxU16 NumRecode; // Number of recodings performed for this frame - mfxU16 NumExtParam; - mfxExtBuffer** ExtParam; -} mfxBRCFrameParam; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxI32 QpY; // Frame-level Luma QP -#if (MFX_VERSION >= 1029) - mfxU32 InitialCpbRemovalDelay; - mfxU32 InitialCpbRemovalOffset; - mfxU32 reserved1[7]; - mfxU32 MaxFrameSize; // Max frame size in bytes (used for rePak) - mfxU8 DeltaQP[8]; // deltaQP[i] is adding to QP value while i-rePak - mfxU16 MaxNumRepak; // Max number of rePak to provide MaxFrameSize (from 0 to 8) - mfxU16 NumExtParam; - mfxExtBuffer** ExtParam; // extension buffer list -#else - mfxU32 reserved1[13]; - mfxHDL reserved2; -#endif -} mfxBRCFrameCtrl; -MFX_PACK_END() - -/* BRCStatus */ -enum { - MFX_BRC_OK = 0, // CodedFrameSize is acceptable, no further recoding/padding/skip required - MFX_BRC_BIG_FRAME = 1, // Coded frame is too big, recoding required - MFX_BRC_SMALL_FRAME = 2, // Coded frame is too small, recoding required - MFX_BRC_PANIC_BIG_FRAME = 3, // Coded frame is too big, no further recoding possible - skip frame - MFX_BRC_PANIC_SMALL_FRAME = 4 // Coded frame is too small, no further recoding possible - required padding to MinFrameSize -}; - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU32 MinFrameSize; // Size in bytes, coded frame must be padded to when Status = MFX_BRC_PANIC_SMALL_FRAME - mfxU16 BRCStatus; // See BRCStatus enumerator - mfxU16 reserved[25]; - mfxHDL reserved1; -} mfxBRCFrameStatus; -MFX_PACK_END() - -/* Structure contains set of callbacks to perform external bit-rate control. -Can be attached to mfxVideoParam structure during encoder initialization. -Turn mfxExtCodingOption2::ExtBRC option ON to make encoder use external BRC instead of native one. */ -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - - mfxU32 reserved[14]; - mfxHDL pthis; // Pointer to user-defined BRC instance. Will be passed to each mfxExtBRC callback. - - // Initialize BRC. Will be invoked during encoder Init(). In - pthis, par. - mfxStatus (MFX_CDECL *Init) (mfxHDL pthis, mfxVideoParam* par); - - // Reset BRC. Will be invoked during encoder Reset(). In - pthis, par. - mfxStatus (MFX_CDECL *Reset) (mfxHDL pthis, mfxVideoParam* par); - - // Close BRC. Will be invoked during encoder Close(). In - pthis. - mfxStatus (MFX_CDECL *Close) (mfxHDL pthis); - - // Obtain from BRC controls required for frame encoding. - // Will be invoked BEFORE encoding of each frame. In - pthis, par; Out - ctrl. - mfxStatus (MFX_CDECL *GetFrameCtrl) (mfxHDL pthis, mfxBRCFrameParam* par, mfxBRCFrameCtrl* ctrl); - - // Update BRC state and return command to continue/recode frame/do padding/skip frame. - // Will be invoked AFTER encoding of each frame. In - pthis, par, ctrl; Out - status. - mfxStatus (MFX_CDECL *Update) (mfxHDL pthis, mfxBRCFrameParam* par, mfxBRCFrameCtrl* ctrl, mfxBRCFrameStatus* status); - - mfxHDL reserved1[10]; -} mfxExtBRC; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - -#endif - +// Copyright (c) 2019-2020 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXBRC_H__ +#define __MFXBRC_H__ + +#include "mfxvstructures.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* Extended Buffer Ids */ +enum { + MFX_EXTBUFF_BRC = MFX_MAKEFOURCC('E','B','R','C') +}; + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { +#if (MFX_VERSION >= 1026) + mfxU32 reserved[23]; + mfxU16 SceneChange; // Frame is Scene Chg frame + mfxU16 LongTerm; // Frame is long term refrence + mfxU32 FrameCmplx; // Frame Complexity +#else + mfxU32 reserved[25]; +#endif + mfxU32 EncodedOrder; // Frame number in a sequence of reordered frames starting from encoder Init() + mfxU32 DisplayOrder; // Frame number in a sequence of frames in display order starting from last IDR + mfxU32 CodedFrameSize; // Size of frame in bytes after encoding + mfxU16 FrameType; // See FrameType enumerator + mfxU16 PyramidLayer; // B-pyramid or P-pyramid layer, frame belongs to + mfxU16 NumRecode; // Number of recodings performed for this frame + mfxU16 NumExtParam; + mfxExtBuffer** ExtParam; +} mfxBRCFrameParam; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxI32 QpY; // Frame-level Luma QP +#if (MFX_VERSION >= 1029) + mfxU32 InitialCpbRemovalDelay; + mfxU32 InitialCpbRemovalOffset; + mfxU32 reserved1[7]; + mfxU32 MaxFrameSize; // Max frame size in bytes (used for rePak) + mfxU8 DeltaQP[8]; // deltaQP[i] is adding to QP value while i-rePak + mfxU16 MaxNumRepak; // Max number of rePak to provide MaxFrameSize (from 0 to 8) + mfxU16 NumExtParam; + mfxExtBuffer** ExtParam; // extension buffer list +#else + mfxU32 reserved1[13]; + mfxHDL reserved2; +#endif +} mfxBRCFrameCtrl; +MFX_PACK_END() + +/* BRCStatus */ +enum { + MFX_BRC_OK = 0, // CodedFrameSize is acceptable, no further recoding/padding/skip required + MFX_BRC_BIG_FRAME = 1, // Coded frame is too big, recoding required + MFX_BRC_SMALL_FRAME = 2, // Coded frame is too small, recoding required + MFX_BRC_PANIC_BIG_FRAME = 3, // Coded frame is too big, no further recoding possible - skip frame + MFX_BRC_PANIC_SMALL_FRAME = 4 // Coded frame is too small, no further recoding possible - required padding to MinFrameSize +}; + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU32 MinFrameSize; // Size in bytes, coded frame must be padded to when Status = MFX_BRC_PANIC_SMALL_FRAME + mfxU16 BRCStatus; // See BRCStatus enumerator + mfxU16 reserved[25]; + mfxHDL reserved1; +} mfxBRCFrameStatus; +MFX_PACK_END() + +/* Structure contains set of callbacks to perform external bit-rate control. +Can be attached to mfxVideoParam structure during encoder initialization. +Turn mfxExtCodingOption2::ExtBRC option ON to make encoder use external BRC instead of native one. */ +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; + + mfxU32 reserved[14]; + mfxHDL pthis; // Pointer to user-defined BRC instance. Will be passed to each mfxExtBRC callback. + + // Initialize BRC. Will be invoked during encoder Init(). In - pthis, par. + mfxStatus (MFX_CDECL *Init) (mfxHDL pthis, mfxVideoParam* par); + + // Reset BRC. Will be invoked during encoder Reset(). In - pthis, par. + mfxStatus (MFX_CDECL *Reset) (mfxHDL pthis, mfxVideoParam* par); + + // Close BRC. Will be invoked during encoder Close(). In - pthis. + mfxStatus (MFX_CDECL *Close) (mfxHDL pthis); + + // Obtain from BRC controls required for frame encoding. + // Will be invoked BEFORE encoding of each frame. In - pthis, par; Out - ctrl. + mfxStatus (MFX_CDECL *GetFrameCtrl) (mfxHDL pthis, mfxBRCFrameParam* par, mfxBRCFrameCtrl* ctrl); + + // Update BRC state and return command to continue/recode frame/do padding/skip frame. + // Will be invoked AFTER encoding of each frame. In - pthis, par, ctrl; Out - status. + mfxStatus (MFX_CDECL *Update) (mfxHDL pthis, mfxBRCFrameParam* par, mfxBRCFrameCtrl* ctrl, mfxBRCFrameStatus* status); + + mfxHDL reserved1[10]; +} mfxExtBRC; +MFX_PACK_END() + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxcamera.h b/.github/actions/libmfx/include/mfx/mfxcamera.h index 9af8021..085e9fe 100644 --- a/.github/actions/libmfx/include/mfx/mfxcamera.h +++ b/.github/actions/libmfx/include/mfx/mfxcamera.h @@ -1,271 +1,271 @@ -// Copyright (c) 2018-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXCAMERA_H__ -#define __MFXCAMERA_H__ -#include "mfxcommon.h" - -#if !defined (__GNUC__) -#pragma warning(disable: 4201) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Camera Extended Buffer Ids */ -enum { - MFX_EXTBUF_CAM_GAMMA_CORRECTION = MFX_MAKEFOURCC('C','G','A','M'), - MFX_EXTBUF_CAM_WHITE_BALANCE = MFX_MAKEFOURCC('C','W','B','L'), - MFX_EXTBUF_CAM_HOT_PIXEL_REMOVAL = MFX_MAKEFOURCC('C','H','P','R'), - MFX_EXTBUF_CAM_BLACK_LEVEL_CORRECTION = MFX_MAKEFOURCC('C','B','L','C'), - MFX_EXTBUF_CAM_VIGNETTE_CORRECTION = MFX_MAKEFOURCC('C','V','G','T'), - MFX_EXTBUF_CAM_BAYER_DENOISE = MFX_MAKEFOURCC('C','D','N','S'), - MFX_EXTBUF_CAM_COLOR_CORRECTION_3X3 = MFX_MAKEFOURCC('C','C','3','3'), - MFX_EXTBUF_CAM_PADDING = MFX_MAKEFOURCC('C','P','A','D'), - MFX_EXTBUF_CAM_PIPECONTROL = MFX_MAKEFOURCC('C','P','P','C'), - MFX_EXTBUF_CAM_FORWARD_GAMMA_CORRECTION = MFX_MAKEFOURCC('C','F','G','C'), - MFX_EXTBUF_CAM_LENS_GEOM_DIST_CORRECTION = MFX_MAKEFOURCC('C','L','G','D'), - MFX_EXTBUF_CAM_3DLUT = MFX_MAKEFOURCC('C','L','U','T'), - MFX_EXTBUF_CAM_TOTAL_COLOR_CONTROL = MFX_MAKEFOURCC('C','T','C','C'), - MFX_EXTBUF_CAM_CSC_YUV_RGB = MFX_MAKEFOURCC('C','C','Y','R') -}; - -typedef enum { - MFX_CAM_GAMMA_VALUE = 0x0001, - MFX_CAM_GAMMA_LUT = 0x0002, -} mfxCamGammaParam; - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - mfxU16 Mode; - mfxU16 reserved1; - mfxF64 GammaValue; - - mfxU16 reserved2[3]; - mfxU16 NumPoints; - mfxU16 GammaPoint[1024]; - mfxU16 GammaCorrected[1024]; - mfxU32 reserved3[4]; -} mfxExtCamGammaCorrection; -MFX_PACK_END() - -typedef enum { - MFX_CAM_WHITE_BALANCE_MANUAL = 0x0001, - MFX_CAM_WHITE_BALANCE_AUTO = 0x0002 -} mfxCamWhiteBalanceMode; - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - mfxU32 Mode; - mfxF64 R; - mfxF64 G0; - mfxF64 B; - mfxF64 G1; - mfxU32 reserved[8]; -} mfxExtCamWhiteBalance; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 R; - mfxU16 G; - mfxU16 B; - mfxU16 C; - mfxU16 M; - mfxU16 Y; - mfxU16 reserved[6]; -} mfxExtCamTotalColorControl; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxF32 PreOffset[3]; - mfxF32 Matrix[3][3]; - mfxF32 PostOffset[3]; - mfxU16 reserved[30]; -} mfxExtCamCscYuvRgb; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 PixelThresholdDifference; - mfxU16 PixelCountThreshold; -} mfxExtCamHotPixelRemoval; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 R; - mfxU16 G0; - mfxU16 B; - mfxU16 G1; - mfxU32 reserved[4]; -} mfxExtCamBlackLevelCorrection; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU8 integer; - mfxU8 mantissa; -} mfxCamVignetteCorrectionElement; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxCamVignetteCorrectionElement R; - mfxCamVignetteCorrectionElement G0; - mfxCamVignetteCorrectionElement B; - mfxCamVignetteCorrectionElement G1; -} mfxCamVignetteCorrectionParam; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - - mfxU32 Width; - mfxU32 Height; - mfxU32 Pitch; - mfxU32 reserved[7]; - - mfxCamVignetteCorrectionParam *CorrectionMap; - -} mfxExtCamVignetteCorrection; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 Threshold; - mfxU16 reserved[27]; -} mfxExtCamBayerDenoise; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - mfxF64 CCM[3][3]; - mfxU32 reserved[4]; -} mfxExtCamColorCorrection3x3; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 Top; - mfxU16 Bottom; - mfxU16 Left; - mfxU16 Right; - mfxU32 reserved[4]; -} mfxExtCamPadding; -MFX_PACK_END() - -typedef enum { - MFX_CAM_BAYER_BGGR = 0x0000, - MFX_CAM_BAYER_RGGB = 0x0001, - MFX_CAM_BAYER_GBRG = 0x0002, - MFX_CAM_BAYER_GRBG = 0x0003 -} mfxCamBayerFormat; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 RawFormat; - mfxU16 reserved1; - mfxU32 reserved[5]; -} mfxExtCamPipeControl; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct{ - mfxU16 Pixel; - mfxU16 Red; - mfxU16 Green; - mfxU16 Blue; -} mfxCamFwdGammaSegment; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved[19]; - mfxU16 NumSegments; - union { - mfxCamFwdGammaSegment* Segment; - mfxU64 reserved1; - }; -} mfxExtCamFwdGamma; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxF32 a[3]; // [R, G, B] - mfxF32 b[3]; // [R, G, B] - mfxF32 c[3]; // [R, G, B] - mfxF32 d[3]; // [R, G, B] - mfxU16 reserved[36]; -} mfxExtCamLensGeomDistCorrection; -MFX_PACK_END() - -/* LUTSize */ -enum { - MFX_CAM_3DLUT17_SIZE = (17 * 17 * 17), - MFX_CAM_3DLUT33_SIZE = (33 * 33 * 33), - MFX_CAM_3DLUT65_SIZE = (65 * 65 * 65) -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU16 R; - mfxU16 G; - mfxU16 B; - mfxU16 Reserved; -} mfxCam3DLutEntry; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved[10]; - mfxU32 Size; - union - { - mfxCam3DLutEntry* Table; - mfxU64 reserved1; - }; -} mfxExtCam3DLut; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // __MFXCAMERA_H__ +// Copyright (c) 2018-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXCAMERA_H__ +#define __MFXCAMERA_H__ +#include "mfxcommon.h" + +#if !defined (__GNUC__) +#pragma warning(disable: 4201) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Camera Extended Buffer Ids */ +enum { + MFX_EXTBUF_CAM_GAMMA_CORRECTION = MFX_MAKEFOURCC('C','G','A','M'), + MFX_EXTBUF_CAM_WHITE_BALANCE = MFX_MAKEFOURCC('C','W','B','L'), + MFX_EXTBUF_CAM_HOT_PIXEL_REMOVAL = MFX_MAKEFOURCC('C','H','P','R'), + MFX_EXTBUF_CAM_BLACK_LEVEL_CORRECTION = MFX_MAKEFOURCC('C','B','L','C'), + MFX_EXTBUF_CAM_VIGNETTE_CORRECTION = MFX_MAKEFOURCC('C','V','G','T'), + MFX_EXTBUF_CAM_BAYER_DENOISE = MFX_MAKEFOURCC('C','D','N','S'), + MFX_EXTBUF_CAM_COLOR_CORRECTION_3X3 = MFX_MAKEFOURCC('C','C','3','3'), + MFX_EXTBUF_CAM_PADDING = MFX_MAKEFOURCC('C','P','A','D'), + MFX_EXTBUF_CAM_PIPECONTROL = MFX_MAKEFOURCC('C','P','P','C'), + MFX_EXTBUF_CAM_FORWARD_GAMMA_CORRECTION = MFX_MAKEFOURCC('C','F','G','C'), + MFX_EXTBUF_CAM_LENS_GEOM_DIST_CORRECTION = MFX_MAKEFOURCC('C','L','G','D'), + MFX_EXTBUF_CAM_3DLUT = MFX_MAKEFOURCC('C','L','U','T'), + MFX_EXTBUF_CAM_TOTAL_COLOR_CONTROL = MFX_MAKEFOURCC('C','T','C','C'), + MFX_EXTBUF_CAM_CSC_YUV_RGB = MFX_MAKEFOURCC('C','C','Y','R') +}; + +typedef enum { + MFX_CAM_GAMMA_VALUE = 0x0001, + MFX_CAM_GAMMA_LUT = 0x0002, +} mfxCamGammaParam; + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + mfxU16 Mode; + mfxU16 reserved1; + mfxF64 GammaValue; + + mfxU16 reserved2[3]; + mfxU16 NumPoints; + mfxU16 GammaPoint[1024]; + mfxU16 GammaCorrected[1024]; + mfxU32 reserved3[4]; +} mfxExtCamGammaCorrection; +MFX_PACK_END() + +typedef enum { + MFX_CAM_WHITE_BALANCE_MANUAL = 0x0001, + MFX_CAM_WHITE_BALANCE_AUTO = 0x0002 +} mfxCamWhiteBalanceMode; + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + mfxU32 Mode; + mfxF64 R; + mfxF64 G0; + mfxF64 B; + mfxF64 G1; + mfxU32 reserved[8]; +} mfxExtCamWhiteBalance; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 R; + mfxU16 G; + mfxU16 B; + mfxU16 C; + mfxU16 M; + mfxU16 Y; + mfxU16 reserved[6]; +} mfxExtCamTotalColorControl; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxF32 PreOffset[3]; + mfxF32 Matrix[3][3]; + mfxF32 PostOffset[3]; + mfxU16 reserved[30]; +} mfxExtCamCscYuvRgb; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 PixelThresholdDifference; + mfxU16 PixelCountThreshold; +} mfxExtCamHotPixelRemoval; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 R; + mfxU16 G0; + mfxU16 B; + mfxU16 G1; + mfxU32 reserved[4]; +} mfxExtCamBlackLevelCorrection; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU8 integer; + mfxU8 mantissa; +} mfxCamVignetteCorrectionElement; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxCamVignetteCorrectionElement R; + mfxCamVignetteCorrectionElement G0; + mfxCamVignetteCorrectionElement B; + mfxCamVignetteCorrectionElement G1; +} mfxCamVignetteCorrectionParam; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; + + mfxU32 Width; + mfxU32 Height; + mfxU32 Pitch; + mfxU32 reserved[7]; + + mfxCamVignetteCorrectionParam *CorrectionMap; + +} mfxExtCamVignetteCorrection; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 Threshold; + mfxU16 reserved[27]; +} mfxExtCamBayerDenoise; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + mfxF64 CCM[3][3]; + mfxU32 reserved[4]; +} mfxExtCamColorCorrection3x3; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 Top; + mfxU16 Bottom; + mfxU16 Left; + mfxU16 Right; + mfxU32 reserved[4]; +} mfxExtCamPadding; +MFX_PACK_END() + +typedef enum { + MFX_CAM_BAYER_BGGR = 0x0000, + MFX_CAM_BAYER_RGGB = 0x0001, + MFX_CAM_BAYER_GBRG = 0x0002, + MFX_CAM_BAYER_GRBG = 0x0003 +} mfxCamBayerFormat; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 RawFormat; + mfxU16 reserved1; + mfxU32 reserved[5]; +} mfxExtCamPipeControl; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct{ + mfxU16 Pixel; + mfxU16 Red; + mfxU16 Green; + mfxU16 Blue; +} mfxCamFwdGammaSegment; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved[19]; + mfxU16 NumSegments; + union { + mfxCamFwdGammaSegment* Segment; + mfxU64 reserved1; + }; +} mfxExtCamFwdGamma; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxF32 a[3]; // [R, G, B] + mfxF32 b[3]; // [R, G, B] + mfxF32 c[3]; // [R, G, B] + mfxF32 d[3]; // [R, G, B] + mfxU16 reserved[36]; +} mfxExtCamLensGeomDistCorrection; +MFX_PACK_END() + +/* LUTSize */ +enum { + MFX_CAM_3DLUT17_SIZE = (17 * 17 * 17), + MFX_CAM_3DLUT33_SIZE = (33 * 33 * 33), + MFX_CAM_3DLUT65_SIZE = (65 * 65 * 65) +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU16 R; + mfxU16 G; + mfxU16 B; + mfxU16 Reserved; +} mfxCam3DLutEntry; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved[10]; + mfxU32 Size; + union + { + mfxCam3DLutEntry* Table; + mfxU64 reserved1; + }; +} mfxExtCam3DLut; +MFX_PACK_END() + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // __MFXCAMERA_H__ diff --git a/.github/actions/libmfx/include/mfx/mfxcommon.h b/.github/actions/libmfx/include/mfx/mfxcommon.h index 875b47f..d65ca08 100644 --- a/.github/actions/libmfx/include/mfx/mfxcommon.h +++ b/.github/actions/libmfx/include/mfx/mfxcommon.h @@ -1,212 +1,214 @@ -// Copyright (c) 2018-2020 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXCOMMON_H__ -#define __MFXCOMMON_H__ -#include "mfxdefs.h" - -#if !defined (__GNUC__) -#pragma warning(disable: 4201) -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#define MFX_MAKEFOURCC(A,B,C,D) ((((int)A))+(((int)B)<<8)+(((int)C)<<16)+(((int)D)<<24)) - -/* Extended Configuration Header Structure */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 BufferId; - mfxU32 BufferSz; -} mfxExtBuffer; -MFX_PACK_END() - -/* Library initialization and deinitialization */ -typedef mfxI32 mfxIMPL; -#define MFX_IMPL_BASETYPE(x) (0x00ff & (x)) - -enum { - MFX_IMPL_AUTO = 0x0000, /* Auto Selection/In or Not Supported/Out */ - MFX_IMPL_SOFTWARE = 0x0001, /* Pure Software Implementation */ - MFX_IMPL_HARDWARE = 0x0002, /* Hardware Accelerated Implementation (default device) */ - MFX_IMPL_AUTO_ANY = 0x0003, /* Auto selection of any hardware/software implementation */ - MFX_IMPL_HARDWARE_ANY = 0x0004, /* Auto selection of any hardware implementation */ - MFX_IMPL_HARDWARE2 = 0x0005, /* Hardware accelerated implementation (2nd device) */ - MFX_IMPL_HARDWARE3 = 0x0006, /* Hardware accelerated implementation (3rd device) */ - MFX_IMPL_HARDWARE4 = 0x0007, /* Hardware accelerated implementation (4th device) */ - MFX_IMPL_RUNTIME = 0x0008, -#if (MFX_VERSION >= MFX_VERSION_NEXT) - MFX_IMPL_SINGLE_THREAD= 0x0009, -#endif - MFX_IMPL_VIA_ANY = 0x0100, - MFX_IMPL_VIA_D3D9 = 0x0200, - MFX_IMPL_VIA_D3D11 = 0x0300, - MFX_IMPL_VIA_VAAPI = 0x0400, - - MFX_IMPL_AUDIO = 0x8000, -#if (MFX_VERSION >= MFX_VERSION_NEXT) - MFX_IMPL_EXTERNAL_THREADING = 0x10000, -#endif - - MFX_IMPL_UNSUPPORTED = 0x0000 /* One of the MFXQueryIMPL returns */ -}; - -/* Version Info */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef union { - struct { - mfxU16 Minor; - mfxU16 Major; - }; - mfxU32 Version; -} mfxVersion; -MFX_PACK_END() - -/* session priority */ -typedef enum -{ - MFX_PRIORITY_LOW = 0, - MFX_PRIORITY_NORMAL = 1, - MFX_PRIORITY_HIGH = 2 - -} mfxPriority; - -typedef struct _mfxEncryptedData mfxEncryptedData; -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - union { - struct { - mfxEncryptedData* EncryptedData; - mfxExtBuffer **ExtParam; - mfxU16 NumExtParam; - }; - mfxU32 reserved[6]; - }; - mfxI64 DecodeTimeStamp; - mfxU64 TimeStamp; - mfxU8* Data; - mfxU32 DataOffset; - mfxU32 DataLength; - mfxU32 MaxLength; - - mfxU16 PicStruct; - mfxU16 FrameType; - mfxU16 DataFlag; - mfxU16 reserved2; -} mfxBitstream; -MFX_PACK_END() - -typedef struct _mfxSyncPoint *mfxSyncPoint; - -/* GPUCopy */ -enum { - MFX_GPUCOPY_DEFAULT = 0, - MFX_GPUCOPY_ON = 1, - MFX_GPUCOPY_OFF = 2 -}; - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxIMPL Implementation; - mfxVersion Version; - mfxU16 ExternalThreads; - union { - struct { - mfxExtBuffer **ExtParam; - mfxU16 NumExtParam; - }; - mfxU16 reserved2[5]; - }; - mfxU16 GPUCopy; - mfxU16 reserved[21]; -} mfxInitParam; -MFX_PACK_END() - -enum { - MFX_EXTBUFF_THREADS_PARAM = MFX_MAKEFOURCC('T','H','D','P') -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 NumThread; - mfxI32 SchedulingType; - mfxI32 Priority; - mfxU16 reserved[55]; -} mfxExtThreadsParam; -MFX_PACK_END() - -/* PlatformCodeName */ -enum { - MFX_PLATFORM_UNKNOWN = 0, - MFX_PLATFORM_SANDYBRIDGE = 1, - MFX_PLATFORM_IVYBRIDGE = 2, - MFX_PLATFORM_HASWELL = 3, - MFX_PLATFORM_BAYTRAIL = 4, - MFX_PLATFORM_BROADWELL = 5, - MFX_PLATFORM_CHERRYTRAIL = 6, - MFX_PLATFORM_SKYLAKE = 7, - MFX_PLATFORM_APOLLOLAKE = 8, - MFX_PLATFORM_KABYLAKE = 9, -#if (MFX_VERSION >= 1025) - MFX_PLATFORM_GEMINILAKE = 10, - MFX_PLATFORM_COFFEELAKE = 11, - MFX_PLATFORM_CANNONLAKE = 20, -#endif -#if (MFX_VERSION >= 1027) - MFX_PLATFORM_ICELAKE = 30, -#endif - MFX_PLATFORM_JASPERLAKE = 32, - MFX_PLATFORM_ELKHARTLAKE = 33, - MFX_PLATFORM_TIGERLAKE = 40, - MFX_PLATFORM_KEEMBAY = 50, -}; - -#if (MFX_VERSION >= 1031) -typedef enum -{ - MFX_MEDIA_UNKNOWN = 0xffff, - MFX_MEDIA_INTEGRATED = 0, - MFX_MEDIA_DISCRETE = 1 -} mfxMediaAdapterType; -#endif - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU16 CodeName; - mfxU16 DeviceId; -#if (MFX_VERSION >= 1031) - mfxU16 MediaAdapterType; - mfxU16 reserved[13]; -#else - mfxU16 reserved[14]; -#endif -} mfxPlatform; -MFX_PACK_END() - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - +// Copyright (c) 2018-2020 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXCOMMON_H__ +#define __MFXCOMMON_H__ +#include "mfxdefs.h" + +#if !defined (__GNUC__) +#pragma warning(disable: 4201) +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +#define MFX_MAKEFOURCC(A,B,C,D) ((((int)A))+(((int)B)<<8)+(((int)C)<<16)+(((int)D)<<24)) + +/* Extended Configuration Header Structure */ +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU32 BufferId; + mfxU32 BufferSz; +} mfxExtBuffer; +MFX_PACK_END() + +/* Library initialization and deinitialization */ +typedef mfxI32 mfxIMPL; +#define MFX_IMPL_BASETYPE(x) (0x00ff & (x)) + +enum { + MFX_IMPL_AUTO = 0x0000, /* Auto Selection/In or Not Supported/Out */ + MFX_IMPL_SOFTWARE = 0x0001, /* Pure Software Implementation */ + MFX_IMPL_HARDWARE = 0x0002, /* Hardware Accelerated Implementation (default device) */ + MFX_IMPL_AUTO_ANY = 0x0003, /* Auto selection of any hardware/software implementation */ + MFX_IMPL_HARDWARE_ANY = 0x0004, /* Auto selection of any hardware implementation */ + MFX_IMPL_HARDWARE2 = 0x0005, /* Hardware accelerated implementation (2nd device) */ + MFX_IMPL_HARDWARE3 = 0x0006, /* Hardware accelerated implementation (3rd device) */ + MFX_IMPL_HARDWARE4 = 0x0007, /* Hardware accelerated implementation (4th device) */ + MFX_IMPL_RUNTIME = 0x0008, +#if (MFX_VERSION >= MFX_VERSION_NEXT) + MFX_IMPL_SINGLE_THREAD= 0x0009, +#endif + MFX_IMPL_VIA_ANY = 0x0100, + MFX_IMPL_VIA_D3D9 = 0x0200, + MFX_IMPL_VIA_D3D11 = 0x0300, + MFX_IMPL_VIA_VAAPI = 0x0400, + + MFX_IMPL_AUDIO = 0x8000, +#if (MFX_VERSION >= MFX_VERSION_NEXT) + MFX_IMPL_EXTERNAL_THREADING = 0x10000, +#endif + + MFX_IMPL_UNSUPPORTED = 0x0000 /* One of the MFXQueryIMPL returns */ +}; + +/* Version Info */ +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef union { + struct { + mfxU16 Minor; + mfxU16 Major; + }; + mfxU32 Version; +} mfxVersion; +MFX_PACK_END() + +/* session priority */ +typedef enum +{ + MFX_PRIORITY_LOW = 0, + MFX_PRIORITY_NORMAL = 1, + MFX_PRIORITY_HIGH = 2 + +} mfxPriority; + +typedef struct _mfxEncryptedData mfxEncryptedData; +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + union { + struct { + mfxEncryptedData* EncryptedData; + mfxExtBuffer **ExtParam; + mfxU16 NumExtParam; + }; + mfxU32 reserved[6]; + }; + mfxI64 DecodeTimeStamp; + mfxU64 TimeStamp; + mfxU8* Data; + mfxU32 DataOffset; + mfxU32 DataLength; + mfxU32 MaxLength; + + mfxU16 PicStruct; + mfxU16 FrameType; + mfxU16 DataFlag; + mfxU16 reserved2; +} mfxBitstream; +MFX_PACK_END() + +typedef struct _mfxSyncPoint *mfxSyncPoint; + +/* GPUCopy */ +enum { + MFX_GPUCOPY_DEFAULT = 0, + MFX_GPUCOPY_ON = 1, + MFX_GPUCOPY_OFF = 2 +}; + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxIMPL Implementation; + mfxVersion Version; + mfxU16 ExternalThreads; + union { + struct { + mfxExtBuffer **ExtParam; + mfxU16 NumExtParam; + }; + mfxU16 reserved2[5]; + }; + mfxU16 GPUCopy; + mfxU16 reserved[21]; +} mfxInitParam; +MFX_PACK_END() + +enum { + MFX_EXTBUFF_THREADS_PARAM = MFX_MAKEFOURCC('T','H','D','P') +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 NumThread; + mfxI32 SchedulingType; + mfxI32 Priority; + mfxU16 reserved[55]; +} mfxExtThreadsParam; +MFX_PACK_END() + +/* PlatformCodeName */ +enum { + MFX_PLATFORM_UNKNOWN = 0, + MFX_PLATFORM_SANDYBRIDGE = 1, + MFX_PLATFORM_IVYBRIDGE = 2, + MFX_PLATFORM_HASWELL = 3, + MFX_PLATFORM_BAYTRAIL = 4, + MFX_PLATFORM_BROADWELL = 5, + MFX_PLATFORM_CHERRYTRAIL = 6, + MFX_PLATFORM_SKYLAKE = 7, + MFX_PLATFORM_APOLLOLAKE = 8, + MFX_PLATFORM_KABYLAKE = 9, +#if (MFX_VERSION >= 1025) + MFX_PLATFORM_GEMINILAKE = 10, + MFX_PLATFORM_COFFEELAKE = 11, + MFX_PLATFORM_CANNONLAKE = 20, +#endif +#if (MFX_VERSION >= 1027) + MFX_PLATFORM_ICELAKE = 30, +#endif + MFX_PLATFORM_JASPERLAKE = 32, + MFX_PLATFORM_ELKHARTLAKE = 33, + MFX_PLATFORM_TIGERLAKE = 40, + MFX_PLATFORM_ROCKETLAKE = 42, + MFX_PLATFORM_ALDERLAKE_S = 43, + MFX_PLATFORM_KEEMBAY = 50, +}; + +#if (MFX_VERSION >= 1031) +typedef enum +{ + MFX_MEDIA_UNKNOWN = 0xffff, + MFX_MEDIA_INTEGRATED = 0, + MFX_MEDIA_DISCRETE = 1 +} mfxMediaAdapterType; +#endif + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU16 CodeName; + mfxU16 DeviceId; +#if (MFX_VERSION >= 1031) + mfxU16 MediaAdapterType; + mfxU16 reserved[13]; +#else + mfxU16 reserved[14]; +#endif +} mfxPlatform; +MFX_PACK_END() + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxdefs.h b/.github/actions/libmfx/include/mfx/mfxdefs.h index 07acf55..ac76aa9 100644 --- a/.github/actions/libmfx/include/mfx/mfxdefs.h +++ b/.github/actions/libmfx/include/mfx/mfxdefs.h @@ -1,212 +1,258 @@ -// Copyright (c) 2019-2020 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXDEFS_H__ -#define __MFXDEFS_H__ - -#define MFX_VERSION_MAJOR 1 -#define MFX_VERSION_MINOR 34 - -// MFX_VERSION_NEXT is always +1 from last public release -// may be enforced by MFX_VERSION_USE_LATEST define -// if MFX_VERSION_USE_LATEST is defined MFX_VERSION is ignored - -#define MFX_VERSION_NEXT (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR + 1) - -// MFX_VERSION - version of API that 'assumed' by build may be provided externally -// if it omitted then latest stable API derived from Major.Minor is assumed - - -#if !defined(MFX_VERSION) - #if defined(MFX_VERSION_USE_LATEST) - #define MFX_VERSION MFX_VERSION_NEXT - #else - #define MFX_VERSION (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR) - #endif -#else - #undef MFX_VERSION_MINOR - #define MFX_VERSION_MINOR ((MFX_VERSION) % 1000) -#endif - - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* In preprocessor syntax # symbol has stringize meaning, - so to expand some macro to preprocessor pragma we need to use - special compiler dependent construction */ - -#if defined(_MSC_VER) - #define MFX_PRAGMA_IMPL(x) __pragma(x) -#else - #define MFX_PRAGMA_IMPL(x) _Pragma(#x) -#endif - -#define MFX_PACK_BEGIN_X(x) MFX_PRAGMA_IMPL(pack(push, x)) -#define MFX_PACK_END() MFX_PRAGMA_IMPL(pack(pop)) - -/* The general rule for alignment is following: - - structures with pointers have 4/8 bytes alignment on 32/64 bit systems - - structures with fields of type mfxU64/mfxF64 (unsigned long long / double) - have alignment 8 bytes on 64 bit and 32 bit Windows, on Linux alignment is 4 bytes - - all the rest structures are 4 bytes aligned - - there are several exceptions: some structs which had 4-byte alignment were extended - with pointer / long type fields; such structs have 4-byte alignment to keep binary - compatibility with previously release API */ - -#define MFX_PACK_BEGIN_USUAL_STRUCT() MFX_PACK_BEGIN_X(4) - -/* 64-bit LP64 data model */ -#if defined(_WIN64) || defined(__LP64__) - #define MFX_PACK_BEGIN_STRUCT_W_PTR() MFX_PACK_BEGIN_X(8) - #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8) -/* 32-bit ILP32 data model Windows (Intel architecture) */ -#elif defined(_WIN32) || defined(_M_IX86) && !defined(__linux__) - #define MFX_PACK_BEGIN_STRUCT_W_PTR() MFX_PACK_BEGIN_X(4) - #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8) -/* 32-bit ILP32 data model Linux */ -#elif defined(__ILP32__) - #define MFX_PACK_BEGIN_STRUCT_W_PTR() MFX_PACK_BEGIN_X(4) - #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(4) -#else - #error Unknown packing -#endif - - #define __INT64 long long - #define __UINT64 unsigned long long - -#ifdef _WIN32 - #define MFX_CDECL __cdecl - #define MFX_STDCALL __stdcall -#else - #define MFX_CDECL - #define MFX_STDCALL -#endif /* _WIN32 */ - -#define MFX_INFINITE 0xFFFFFFFF - -typedef unsigned char mfxU8; -typedef char mfxI8; -typedef short mfxI16; -typedef unsigned short mfxU16; -typedef unsigned int mfxU32; -typedef int mfxI32; -#if defined( _WIN32 ) || defined ( _WIN64 ) -typedef unsigned long mfxUL32; -typedef long mfxL32; -#else -typedef unsigned int mfxUL32; -typedef int mfxL32; -#endif -typedef float mfxF32; -typedef double mfxF64; -typedef __UINT64 mfxU64; -typedef __INT64 mfxI64; -typedef void* mfxHDL; -typedef mfxHDL mfxMemId; -typedef void* mfxThreadTask; -typedef char mfxChar; - -typedef struct { - mfxI16 x; - mfxI16 y; -} mfxI16Pair; - -typedef struct { - mfxHDL first; - mfxHDL second; -} mfxHDLPair; - - -/*********************************************************************************\ -Error message -\*********************************************************************************/ -typedef enum -{ - /* no error */ - MFX_ERR_NONE = 0, /* no error */ - - /* reserved for unexpected errors */ - MFX_ERR_UNKNOWN = -1, /* unknown error. */ - - /* error codes <0 */ - MFX_ERR_NULL_PTR = -2, /* null pointer */ - MFX_ERR_UNSUPPORTED = -3, /* undeveloped feature */ - MFX_ERR_MEMORY_ALLOC = -4, /* failed to allocate memory */ - MFX_ERR_NOT_ENOUGH_BUFFER = -5, /* insufficient buffer at input/output */ - MFX_ERR_INVALID_HANDLE = -6, /* invalid handle */ - MFX_ERR_LOCK_MEMORY = -7, /* failed to lock the memory block */ - MFX_ERR_NOT_INITIALIZED = -8, /* member function called before initialization */ - MFX_ERR_NOT_FOUND = -9, /* the specified object is not found */ - MFX_ERR_MORE_DATA = -10, /* expect more data at input */ - MFX_ERR_MORE_SURFACE = -11, /* expect more surface at output */ - MFX_ERR_ABORTED = -12, /* operation aborted */ - MFX_ERR_DEVICE_LOST = -13, /* lose the HW acceleration device */ - MFX_ERR_INCOMPATIBLE_VIDEO_PARAM = -14, /* incompatible video parameters */ - MFX_ERR_INVALID_VIDEO_PARAM = -15, /* invalid video parameters */ - MFX_ERR_UNDEFINED_BEHAVIOR = -16, /* undefined behavior */ - MFX_ERR_DEVICE_FAILED = -17, /* device operation failure */ - MFX_ERR_MORE_BITSTREAM = -18, /* expect more bitstream buffers at output */ - MFX_ERR_INCOMPATIBLE_AUDIO_PARAM = -19, /* incompatible audio parameters */ - MFX_ERR_INVALID_AUDIO_PARAM = -20, /* invalid audio parameters */ - MFX_ERR_GPU_HANG = -21, /* device operation failure caused by GPU hang */ - MFX_ERR_REALLOC_SURFACE = -22, /* bigger output surface required */ - - /* warnings >0 */ - MFX_WRN_IN_EXECUTION = 1, /* the previous asynchronous operation is in execution */ - MFX_WRN_DEVICE_BUSY = 2, /* the HW acceleration device is busy */ - MFX_WRN_VIDEO_PARAM_CHANGED = 3, /* the video parameters are changed during decoding */ - MFX_WRN_PARTIAL_ACCELERATION = 4, /* SW is used */ - MFX_WRN_INCOMPATIBLE_VIDEO_PARAM = 5, /* incompatible video parameters */ - MFX_WRN_VALUE_NOT_CHANGED = 6, /* the value is saturated based on its valid range */ - MFX_WRN_OUT_OF_RANGE = 7, /* the value is out of valid range */ - MFX_WRN_FILTER_SKIPPED = 10, /* one of requested filters has been skipped */ - MFX_WRN_INCOMPATIBLE_AUDIO_PARAM = 11, /* incompatible audio parameters */ - -#if MFX_VERSION >= 1031 - /* low-delay partial output */ - MFX_ERR_NONE_PARTIAL_OUTPUT = 12, /* frame is not ready, but bitstream contains partial output */ -#endif - - /* threading statuses */ - MFX_TASK_DONE = MFX_ERR_NONE, /* task has been completed */ - MFX_TASK_WORKING = 8, /* there is some more work to do */ - MFX_TASK_BUSY = 9, /* task is waiting for resources */ - - /* plug-in statuses */ - MFX_ERR_MORE_DATA_SUBMIT_TASK = -10000, /* return MFX_ERR_MORE_DATA but submit internal asynchronous task */ - -} mfxStatus; - - -// Application -#if defined(MFX_DISPATCHER_EXPOSED_PREFIX) - -#include "mfxdispatcherprefixedfunctions.h" - -#endif // MFX_DISPATCHER_EXPOSED_PREFIX - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __MFXDEFS_H__ */ +// Copyright (c) 2019-2020 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXDEFS_H__ +#define __MFXDEFS_H__ + +#define MFX_VERSION_MAJOR 1 +#define MFX_VERSION_MINOR 35 + +// MFX_VERSION_NEXT is always +1 from last public release +// may be enforced by MFX_VERSION_USE_LATEST define +// if MFX_VERSION_USE_LATEST is defined MFX_VERSION is ignored + +#define MFX_VERSION_NEXT (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR + 1) + +// MFX_VERSION - version of API that 'assumed' by build may be provided externally +// if it omitted then latest stable API derived from Major.Minor is assumed + + +#if !defined(MFX_VERSION) + #if defined(MFX_VERSION_USE_LATEST) + #define MFX_VERSION MFX_VERSION_NEXT + #else + #define MFX_VERSION (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR) + #endif +#else + #undef MFX_VERSION_MINOR + #define MFX_VERSION_MINOR ((MFX_VERSION) % 1000) +#endif + + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* In preprocessor syntax # symbol has stringize meaning, + so to expand some macro to preprocessor pragma we need to use + special compiler dependent construction */ + +#if defined(_MSC_VER) + #define MFX_PRAGMA_IMPL(x) __pragma(x) +#else + #define MFX_PRAGMA_IMPL(x) _Pragma(#x) +#endif + +#define MFX_PACK_BEGIN_X(x) MFX_PRAGMA_IMPL(pack(push, x)) +#define MFX_PACK_END() MFX_PRAGMA_IMPL(pack(pop)) + +/* The general rule for alignment is following: + - structures with pointers have 4/8 bytes alignment on 32/64 bit systems + - structures with fields of type mfxU64/mfxF64 (unsigned long long / double) + have alignment 8 bytes on 64 bit and 32 bit Windows, on Linux alignment is 4 bytes + - all the rest structures are 4 bytes aligned + - there are several exceptions: some structs which had 4-byte alignment were extended + with pointer / long type fields; such structs have 4-byte alignment to keep binary + compatibility with previously release API */ + +#define MFX_PACK_BEGIN_USUAL_STRUCT() MFX_PACK_BEGIN_X(4) + +/* 64-bit LP64 data model */ +#if defined(_WIN64) || defined(__LP64__) + #define MFX_PACK_BEGIN_STRUCT_W_PTR() MFX_PACK_BEGIN_X(8) + #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8) +/* 32-bit ILP32 data model Windows (Intel architecture) */ +#elif defined(_WIN32) || defined(_M_IX86) && !defined(__linux__) + #define MFX_PACK_BEGIN_STRUCT_W_PTR() MFX_PACK_BEGIN_X(4) + #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8) +/* 32-bit ILP32 data model Linux */ +#elif defined(__ILP32__) + #define MFX_PACK_BEGIN_STRUCT_W_PTR() MFX_PACK_BEGIN_X(4) + #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(4) +#else + #error Unknown packing +#endif + + #define __INT64 long long + #define __UINT64 unsigned long long + +#ifdef _WIN32 + #define MFX_CDECL __cdecl + #define MFX_STDCALL __stdcall +#else + #define MFX_CDECL + #define MFX_STDCALL +#endif /* _WIN32 */ + +#define MFX_INFINITE 0xFFFFFFFF + +#if !defined(MFX_DEPRECATED_OFF) && (MFX_VERSION >= 1034) +#define MFX_DEPRECATED_OFF +#endif + +#ifndef MFX_DEPRECATED_OFF + #if defined(__cplusplus) && __cplusplus >= 201402L + #define MFX_DEPRECATED [[deprecated]] + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg [[deprecated]] + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) + #elif defined(__clang__) + #define MFX_DEPRECATED __attribute__((deprecated)) + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg __attribute__((deprecated)) + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) + #elif defined(__INTEL_COMPILER) + #if (defined(_WIN32) || defined(_WIN64)) + #define MFX_DEPRECATED __declspec(deprecated) + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) __pragma(deprecated(arg)) + #elif defined(__linux__) + #define MFX_DEPRECATED __attribute__((deprecated)) + #if defined(__cplusplus) + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg __attribute__((deprecated)) + #else + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg + #endif + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) + #endif + #elif defined(_MSC_VER) && _MSC_VER > 1200 // VS 6 doesn't support deprecation + #define MFX_DEPRECATED __declspec(deprecated) + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) __pragma(deprecated(arg)) + #elif defined(__GNUC__) + #define MFX_DEPRECATED __attribute__((deprecated)) + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg __attribute__((deprecated)) + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) + #else + #define MFX_DEPRECATED + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) + #endif +#else + #define MFX_DEPRECATED + #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg + #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) +#endif + +typedef unsigned char mfxU8; +typedef char mfxI8; +typedef short mfxI16; +typedef unsigned short mfxU16; +typedef unsigned int mfxU32; +typedef int mfxI32; +#if defined( _WIN32 ) || defined ( _WIN64 ) +typedef unsigned long mfxUL32; +typedef long mfxL32; +#else +typedef unsigned int mfxUL32; +typedef int mfxL32; +#endif +typedef float mfxF32; +typedef double mfxF64; +typedef __UINT64 mfxU64; +typedef __INT64 mfxI64; +typedef void* mfxHDL; +typedef mfxHDL mfxMemId; +typedef void* mfxThreadTask; +typedef char mfxChar; + +typedef struct { + mfxI16 x; + mfxI16 y; +} mfxI16Pair; + +typedef struct { + mfxHDL first; + mfxHDL second; +} mfxHDLPair; + + +/*********************************************************************************\ +Error message +\*********************************************************************************/ +typedef enum +{ + /* no error */ + MFX_ERR_NONE = 0, /* no error */ + + /* reserved for unexpected errors */ + MFX_ERR_UNKNOWN = -1, /* unknown error. */ + + /* error codes <0 */ + MFX_ERR_NULL_PTR = -2, /* null pointer */ + MFX_ERR_UNSUPPORTED = -3, /* undeveloped feature */ + MFX_ERR_MEMORY_ALLOC = -4, /* failed to allocate memory */ + MFX_ERR_NOT_ENOUGH_BUFFER = -5, /* insufficient buffer at input/output */ + MFX_ERR_INVALID_HANDLE = -6, /* invalid handle */ + MFX_ERR_LOCK_MEMORY = -7, /* failed to lock the memory block */ + MFX_ERR_NOT_INITIALIZED = -8, /* member function called before initialization */ + MFX_ERR_NOT_FOUND = -9, /* the specified object is not found */ + MFX_ERR_MORE_DATA = -10, /* expect more data at input */ + MFX_ERR_MORE_SURFACE = -11, /* expect more surface at output */ + MFX_ERR_ABORTED = -12, /* operation aborted */ + MFX_ERR_DEVICE_LOST = -13, /* lose the HW acceleration device */ + MFX_ERR_INCOMPATIBLE_VIDEO_PARAM = -14, /* incompatible video parameters */ + MFX_ERR_INVALID_VIDEO_PARAM = -15, /* invalid video parameters */ + MFX_ERR_UNDEFINED_BEHAVIOR = -16, /* undefined behavior */ + MFX_ERR_DEVICE_FAILED = -17, /* device operation failure */ + MFX_ERR_MORE_BITSTREAM = -18, /* expect more bitstream buffers at output */ + MFX_ERR_INCOMPATIBLE_AUDIO_PARAM = -19, /* incompatible audio parameters */ + MFX_ERR_INVALID_AUDIO_PARAM = -20, /* invalid audio parameters */ + MFX_ERR_GPU_HANG = -21, /* device operation failure caused by GPU hang */ + MFX_ERR_REALLOC_SURFACE = -22, /* bigger output surface required */ + + /* warnings >0 */ + MFX_WRN_IN_EXECUTION = 1, /* the previous asynchronous operation is in execution */ + MFX_WRN_DEVICE_BUSY = 2, /* the HW acceleration device is busy */ + MFX_WRN_VIDEO_PARAM_CHANGED = 3, /* the video parameters are changed during decoding */ + MFX_WRN_PARTIAL_ACCELERATION = 4, /* SW is used */ + MFX_WRN_INCOMPATIBLE_VIDEO_PARAM = 5, /* incompatible video parameters */ + MFX_WRN_VALUE_NOT_CHANGED = 6, /* the value is saturated based on its valid range */ + MFX_WRN_OUT_OF_RANGE = 7, /* the value is out of valid range */ + MFX_WRN_FILTER_SKIPPED = 10, /* one of requested filters has been skipped */ + MFX_WRN_INCOMPATIBLE_AUDIO_PARAM = 11, /* incompatible audio parameters */ + +#if MFX_VERSION >= 1031 + /* low-delay partial output */ + MFX_ERR_NONE_PARTIAL_OUTPUT = 12, /* frame is not ready, but bitstream contains partial output */ +#endif + + /* threading statuses */ + MFX_TASK_DONE = MFX_ERR_NONE, /* task has been completed */ + MFX_TASK_WORKING = 8, /* there is some more work to do */ + MFX_TASK_BUSY = 9, /* task is waiting for resources */ + + /* plug-in statuses */ + MFX_ERR_MORE_DATA_SUBMIT_TASK = -10000, /* return MFX_ERR_MORE_DATA but submit internal asynchronous task */ + +} mfxStatus; + + +// Application +#if defined(MFX_DISPATCHER_EXPOSED_PREFIX) + +#include "mfxdispatcherprefixedfunctions.h" + +#endif // MFX_DISPATCHER_EXPOSED_PREFIX + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __MFXDEFS_H__ */ diff --git a/.github/actions/libmfx/include/mfx/mfxdispatcherprefixedfunctions.h b/.github/actions/libmfx/include/mfx/mfxdispatcherprefixedfunctions.h index f823793..8cefabd 100644 --- a/.github/actions/libmfx/include/mfx/mfxdispatcherprefixedfunctions.h +++ b/.github/actions/libmfx/include/mfx/mfxdispatcherprefixedfunctions.h @@ -1,145 +1,145 @@ -// Copyright (c) 2017 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - - -#ifndef __MFXDISPATCHERPREFIXEDFUNCTIONS_H__ -#define __MFXDISPATCHERPREFIXEDFUNCTIONS_H__ - -// API 1.0 functions -#define MFXInit disp_MFXInit -#define MFXClose disp_MFXClose -#define MFXQueryIMPL disp_MFXQueryIMPL -#define MFXQueryVersion disp_MFXQueryVersion - -#define MFXJoinSession disp_MFXJoinSession -#define MFXDisjoinSession disp_MFXDisjoinSession -#define MFXCloneSession disp_MFXCloneSession -#define MFXSetPriority disp_MFXSetPriority -#define MFXGetPriority disp_MFXGetPriority - -#define MFXVideoCORE_SetBufferAllocator disp_MFXVideoCORE_SetBufferAllocator -#define MFXVideoCORE_SetFrameAllocator disp_MFXVideoCORE_SetFrameAllocator -#define MFXVideoCORE_SetHandle disp_MFXVideoCORE_SetHandle -#define MFXVideoCORE_GetHandle disp_MFXVideoCORE_GetHandle -#define MFXVideoCORE_SyncOperation disp_MFXVideoCORE_SyncOperation - -#define MFXVideoENCODE_Query disp_MFXVideoENCODE_Query -#define MFXVideoENCODE_QueryIOSurf disp_MFXVideoENCODE_QueryIOSurf -#define MFXVideoENCODE_Init disp_MFXVideoENCODE_Init -#define MFXVideoENCODE_Reset disp_MFXVideoENCODE_Reset -#define MFXVideoENCODE_Close disp_MFXVideoENCODE_Close -#define MFXVideoENCODE_GetVideoParam disp_MFXVideoENCODE_GetVideoParam -#define MFXVideoENCODE_GetEncodeStat disp_MFXVideoENCODE_GetEncodeStat -#define MFXVideoENCODE_EncodeFrameAsync disp_MFXVideoENCODE_EncodeFrameAsync - -#define MFXVideoDECODE_Query disp_MFXVideoDECODE_Query -#define MFXVideoDECODE_DecodeHeader disp_MFXVideoDECODE_DecodeHeader -#define MFXVideoDECODE_QueryIOSurf disp_MFXVideoDECODE_QueryIOSurf -#define MFXVideoDECODE_Init disp_MFXVideoDECODE_Init -#define MFXVideoDECODE_Reset disp_MFXVideoDECODE_Reset -#define MFXVideoDECODE_Close disp_MFXVideoDECODE_Close -#define MFXVideoDECODE_GetVideoParam disp_MFXVideoDECODE_GetVideoParam -#define MFXVideoDECODE_GetDecodeStat disp_MFXVideoDECODE_GetDecodeStat -#define MFXVideoDECODE_SetSkipMode disp_MFXVideoDECODE_SetSkipMode -#define MFXVideoDECODE_GetPayload disp_MFXVideoDECODE_GetPayload -#define MFXVideoDECODE_DecodeFrameAsync disp_MFXVideoDECODE_DecodeFrameAsync - -#define MFXVideoVPP_Query disp_MFXVideoVPP_Query -#define MFXVideoVPP_QueryIOSurf disp_MFXVideoVPP_QueryIOSurf -#define MFXVideoVPP_Init disp_MFXVideoVPP_Init -#define MFXVideoVPP_Reset disp_MFXVideoVPP_Reset -#define MFXVideoVPP_Close disp_MFXVideoVPP_Close - -#define MFXVideoVPP_GetVideoParam disp_MFXVideoVPP_GetVideoParam -#define MFXVideoVPP_GetVPPStat disp_MFXVideoVPP_GetVPPStat -#define MFXVideoVPP_RunFrameVPPAsync disp_MFXVideoVPP_RunFrameVPPAsync - -// API 1.1 functions -#define MFXVideoUSER_Register disp_MFXVideoUSER_Register -#define MFXVideoUSER_Unregister disp_MFXVideoUSER_Unregister -#define MFXVideoUSER_ProcessFrameAsync disp_MFXVideoUSER_ProcessFrameAsync - -// API 1.10 functions - -#define MFXVideoENC_Query disp_MFXVideoENC_Query -#define MFXVideoENC_QueryIOSurf disp_MFXVideoENC_QueryIOSurf -#define MFXVideoENC_Init disp_MFXVideoENC_Init -#define MFXVideoENC_Reset disp_MFXVideoENC_Reset -#define MFXVideoENC_Close disp_MFXVideoENC_Close -#define MFXVideoENC_ProcessFrameAsync disp_MFXVideoENC_ProcessFrameAsync -#define MFXVideoVPP_RunFrameVPPAsyncEx disp_MFXVideoVPP_RunFrameVPPAsyncEx -#define MFXVideoUSER_Load disp_MFXVideoUSER_Load -#define MFXVideoUSER_UnLoad disp_MFXVideoUSER_UnLoad - -// API 1.11 functions - -#define MFXVideoPAK_Query disp_MFXVideoPAK_Query -#define MFXVideoPAK_QueryIOSurf disp_MFXVideoPAK_QueryIOSurf -#define MFXVideoPAK_Init disp_MFXVideoPAK_Init -#define MFXVideoPAK_Reset disp_MFXVideoPAK_Reset -#define MFXVideoPAK_Close disp_MFXVideoPAK_Close -#define MFXVideoPAK_ProcessFrameAsync disp_MFXVideoPAK_ProcessFrameAsync - -// API 1.13 functions - -#define MFXVideoUSER_LoadByPath disp_MFXVideoUSER_LoadByPath - -// API 1.14 functions -#define MFXInitEx disp_MFXInitEx -#define MFXDoWork disp_MFXDoWork - -// Audio library functions - -// API 1.8 functions - -#define MFXAudioCORE_SyncOperation disp_MFXAudioCORE_SyncOperation -#define MFXAudioENCODE_Query disp_MFXAudioENCODE_Query -#define MFXAudioENCODE_QueryIOSize disp_MFXAudioENCODE_QueryIOSize -#define MFXAudioENCODE_Init disp_MFXAudioENCODE_Init -#define MFXAudioENCODE_Reset disp_MFXAudioENCODE_Reset -#define MFXAudioENCODE_Close disp_MFXAudioENCODE_Close -#define MFXAudioENCODE_GetAudioParam disp_MFXAudioENCODE_GetAudioParam -#define MFXAudioENCODE_EncodeFrameAsync disp_MFXAudioENCODE_EncodeFrameAsync - -#define MFXAudioDECODE_Query disp_MFXAudioDECODE_Query -#define MFXAudioDECODE_DecodeHeader disp_MFXAudioDECODE_DecodeHeader -#define MFXAudioDECODE_Init disp_MFXAudioDECODE_Init -#define MFXAudioDECODE_Reset disp_MFXAudioDECODE_Reset -#define MFXAudioDECODE_Close disp_MFXAudioDECODE_Close -#define MFXAudioDECODE_QueryIOSize disp_MFXAudioDECODE_QueryIOSize -#define MFXAudioDECODE_GetAudioParam disp_MFXAudioDECODE_GetAudioParam -#define MFXAudioDECODE_DecodeFrameAsync disp_MFXAudioDECODE_DecodeFrameAsync - -// API 1.9 functions - -#define MFXAudioUSER_Register disp_MFXAudioUSER_Register -#define MFXAudioUSER_Unregister disp_MFXAudioUSER_Unregister -#define MFXAudioUSER_ProcessFrameAsync disp_MFXAudioUSER_ProcessFrameAsync -#define MFXAudioUSER_Load disp_MFXAudioUSER_Load -#define MFXAudioUSER_UnLoad disp_MFXAudioUSER_UnLoad - -// API 1.19 functions - -#define MFXVideoENC_GetVideoParam disp_MFXVideoENC_GetVideoParam -#define MFXVideoPAK_GetVideoParam disp_MFXVideoPAK_GetVideoParam -#define MFXVideoCORE_QueryPlatform disp_MFXVideoCORE_QueryPlatform -#define MFXVideoUSER_GetPlugin disp_MFXVideoUSER_GetPlugin - +// Copyright (c) 2017 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + + +#ifndef __MFXDISPATCHERPREFIXEDFUNCTIONS_H__ +#define __MFXDISPATCHERPREFIXEDFUNCTIONS_H__ + +// API 1.0 functions +#define MFXInit disp_MFXInit +#define MFXClose disp_MFXClose +#define MFXQueryIMPL disp_MFXQueryIMPL +#define MFXQueryVersion disp_MFXQueryVersion + +#define MFXJoinSession disp_MFXJoinSession +#define MFXDisjoinSession disp_MFXDisjoinSession +#define MFXCloneSession disp_MFXCloneSession +#define MFXSetPriority disp_MFXSetPriority +#define MFXGetPriority disp_MFXGetPriority + +#define MFXVideoCORE_SetBufferAllocator disp_MFXVideoCORE_SetBufferAllocator +#define MFXVideoCORE_SetFrameAllocator disp_MFXVideoCORE_SetFrameAllocator +#define MFXVideoCORE_SetHandle disp_MFXVideoCORE_SetHandle +#define MFXVideoCORE_GetHandle disp_MFXVideoCORE_GetHandle +#define MFXVideoCORE_SyncOperation disp_MFXVideoCORE_SyncOperation + +#define MFXVideoENCODE_Query disp_MFXVideoENCODE_Query +#define MFXVideoENCODE_QueryIOSurf disp_MFXVideoENCODE_QueryIOSurf +#define MFXVideoENCODE_Init disp_MFXVideoENCODE_Init +#define MFXVideoENCODE_Reset disp_MFXVideoENCODE_Reset +#define MFXVideoENCODE_Close disp_MFXVideoENCODE_Close +#define MFXVideoENCODE_GetVideoParam disp_MFXVideoENCODE_GetVideoParam +#define MFXVideoENCODE_GetEncodeStat disp_MFXVideoENCODE_GetEncodeStat +#define MFXVideoENCODE_EncodeFrameAsync disp_MFXVideoENCODE_EncodeFrameAsync + +#define MFXVideoDECODE_Query disp_MFXVideoDECODE_Query +#define MFXVideoDECODE_DecodeHeader disp_MFXVideoDECODE_DecodeHeader +#define MFXVideoDECODE_QueryIOSurf disp_MFXVideoDECODE_QueryIOSurf +#define MFXVideoDECODE_Init disp_MFXVideoDECODE_Init +#define MFXVideoDECODE_Reset disp_MFXVideoDECODE_Reset +#define MFXVideoDECODE_Close disp_MFXVideoDECODE_Close +#define MFXVideoDECODE_GetVideoParam disp_MFXVideoDECODE_GetVideoParam +#define MFXVideoDECODE_GetDecodeStat disp_MFXVideoDECODE_GetDecodeStat +#define MFXVideoDECODE_SetSkipMode disp_MFXVideoDECODE_SetSkipMode +#define MFXVideoDECODE_GetPayload disp_MFXVideoDECODE_GetPayload +#define MFXVideoDECODE_DecodeFrameAsync disp_MFXVideoDECODE_DecodeFrameAsync + +#define MFXVideoVPP_Query disp_MFXVideoVPP_Query +#define MFXVideoVPP_QueryIOSurf disp_MFXVideoVPP_QueryIOSurf +#define MFXVideoVPP_Init disp_MFXVideoVPP_Init +#define MFXVideoVPP_Reset disp_MFXVideoVPP_Reset +#define MFXVideoVPP_Close disp_MFXVideoVPP_Close + +#define MFXVideoVPP_GetVideoParam disp_MFXVideoVPP_GetVideoParam +#define MFXVideoVPP_GetVPPStat disp_MFXVideoVPP_GetVPPStat +#define MFXVideoVPP_RunFrameVPPAsync disp_MFXVideoVPP_RunFrameVPPAsync + +// API 1.1 functions +#define MFXVideoUSER_Register disp_MFXVideoUSER_Register +#define MFXVideoUSER_Unregister disp_MFXVideoUSER_Unregister +#define MFXVideoUSER_ProcessFrameAsync disp_MFXVideoUSER_ProcessFrameAsync + +// API 1.10 functions + +#define MFXVideoENC_Query disp_MFXVideoENC_Query +#define MFXVideoENC_QueryIOSurf disp_MFXVideoENC_QueryIOSurf +#define MFXVideoENC_Init disp_MFXVideoENC_Init +#define MFXVideoENC_Reset disp_MFXVideoENC_Reset +#define MFXVideoENC_Close disp_MFXVideoENC_Close +#define MFXVideoENC_ProcessFrameAsync disp_MFXVideoENC_ProcessFrameAsync +#define MFXVideoVPP_RunFrameVPPAsyncEx disp_MFXVideoVPP_RunFrameVPPAsyncEx +#define MFXVideoUSER_Load disp_MFXVideoUSER_Load +#define MFXVideoUSER_UnLoad disp_MFXVideoUSER_UnLoad + +// API 1.11 functions + +#define MFXVideoPAK_Query disp_MFXVideoPAK_Query +#define MFXVideoPAK_QueryIOSurf disp_MFXVideoPAK_QueryIOSurf +#define MFXVideoPAK_Init disp_MFXVideoPAK_Init +#define MFXVideoPAK_Reset disp_MFXVideoPAK_Reset +#define MFXVideoPAK_Close disp_MFXVideoPAK_Close +#define MFXVideoPAK_ProcessFrameAsync disp_MFXVideoPAK_ProcessFrameAsync + +// API 1.13 functions + +#define MFXVideoUSER_LoadByPath disp_MFXVideoUSER_LoadByPath + +// API 1.14 functions +#define MFXInitEx disp_MFXInitEx +#define MFXDoWork disp_MFXDoWork + +// Audio library functions + +// API 1.8 functions + +#define MFXAudioCORE_SyncOperation disp_MFXAudioCORE_SyncOperation +#define MFXAudioENCODE_Query disp_MFXAudioENCODE_Query +#define MFXAudioENCODE_QueryIOSize disp_MFXAudioENCODE_QueryIOSize +#define MFXAudioENCODE_Init disp_MFXAudioENCODE_Init +#define MFXAudioENCODE_Reset disp_MFXAudioENCODE_Reset +#define MFXAudioENCODE_Close disp_MFXAudioENCODE_Close +#define MFXAudioENCODE_GetAudioParam disp_MFXAudioENCODE_GetAudioParam +#define MFXAudioENCODE_EncodeFrameAsync disp_MFXAudioENCODE_EncodeFrameAsync + +#define MFXAudioDECODE_Query disp_MFXAudioDECODE_Query +#define MFXAudioDECODE_DecodeHeader disp_MFXAudioDECODE_DecodeHeader +#define MFXAudioDECODE_Init disp_MFXAudioDECODE_Init +#define MFXAudioDECODE_Reset disp_MFXAudioDECODE_Reset +#define MFXAudioDECODE_Close disp_MFXAudioDECODE_Close +#define MFXAudioDECODE_QueryIOSize disp_MFXAudioDECODE_QueryIOSize +#define MFXAudioDECODE_GetAudioParam disp_MFXAudioDECODE_GetAudioParam +#define MFXAudioDECODE_DecodeFrameAsync disp_MFXAudioDECODE_DecodeFrameAsync + +// API 1.9 functions + +#define MFXAudioUSER_Register disp_MFXAudioUSER_Register +#define MFXAudioUSER_Unregister disp_MFXAudioUSER_Unregister +#define MFXAudioUSER_ProcessFrameAsync disp_MFXAudioUSER_ProcessFrameAsync +#define MFXAudioUSER_Load disp_MFXAudioUSER_Load +#define MFXAudioUSER_UnLoad disp_MFXAudioUSER_UnLoad + +// API 1.19 functions + +#define MFXVideoENC_GetVideoParam disp_MFXVideoENC_GetVideoParam +#define MFXVideoPAK_GetVideoParam disp_MFXVideoPAK_GetVideoParam +#define MFXVideoCORE_QueryPlatform disp_MFXVideoCORE_QueryPlatform +#define MFXVideoUSER_GetPlugin disp_MFXVideoUSER_GetPlugin + #endif \ No newline at end of file diff --git a/.github/actions/libmfx/include/mfx/mfxenc.h b/.github/actions/libmfx/include/mfx/mfxenc.h index 4a3296b..0971601 100644 --- a/.github/actions/libmfx/include/mfx/mfxenc.h +++ b/.github/actions/libmfx/include/mfx/mfxenc.h @@ -1,74 +1,74 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXENC_H__ -#define __MFXENC_H__ -#include "mfxdefs.h" -#include "mfxvstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct _mfxENCInput{ - mfxU32 reserved[32]; - - mfxFrameSurface1 *InSurface; - - mfxU16 NumFrameL0; - mfxFrameSurface1 **L0Surface; - mfxU16 NumFrameL1; - mfxFrameSurface1 **L1Surface; - - mfxU16 NumExtParam; - mfxExtBuffer **ExtParam; -} mfxENCInput; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct _mfxENCOutput{ - mfxU32 reserved[32]; - - mfxFrameSurface1 *OutSurface; - - mfxU16 NumExtParam; - mfxExtBuffer **ExtParam; -} mfxENCOutput; -MFX_PACK_END() - - -mfxStatus MFX_CDECL MFXVideoENC_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); -mfxStatus MFX_CDECL MFXVideoENC_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request); -mfxStatus MFX_CDECL MFXVideoENC_Init(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoENC_Reset(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoENC_Close(mfxSession session); - -mfxStatus MFX_CDECL MFXVideoENC_ProcessFrameAsync(mfxSession session, mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp); - -mfxStatus MFX_CDECL MFXVideoENC_GetVideoParam(mfxSession session, mfxVideoParam *par); - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - - -#endif - +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXENC_H__ +#define __MFXENC_H__ +#include "mfxdefs.h" +#include "mfxvstructures.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct _mfxENCInput{ + mfxU32 reserved[32]; + + mfxFrameSurface1 *InSurface; + + mfxU16 NumFrameL0; + mfxFrameSurface1 **L0Surface; + mfxU16 NumFrameL1; + mfxFrameSurface1 **L1Surface; + + mfxU16 NumExtParam; + mfxExtBuffer **ExtParam; +} mfxENCInput; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct _mfxENCOutput{ + mfxU32 reserved[32]; + + mfxFrameSurface1 *OutSurface; + + mfxU16 NumExtParam; + mfxExtBuffer **ExtParam; +} mfxENCOutput; +MFX_PACK_END() + + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Init(mfxSession session, mfxVideoParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Reset(mfxSession session, mfxVideoParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Close(mfxSession session); + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_ProcessFrameAsync(mfxSession session, mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp); + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_GetVideoParam(mfxSession session, mfxVideoParam *par); + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxfei.h b/.github/actions/libmfx/include/mfx/mfxfei.h index 55e61ca..c2be301 100644 --- a/.github/actions/libmfx/include/mfx/mfxfei.h +++ b/.github/actions/libmfx/include/mfx/mfxfei.h @@ -1,583 +1,614 @@ -// Copyright (c) 2018-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXFEI_H__ -#define __MFXFEI_H__ -#include "mfxdefs.h" -#include "mfxvstructures.h" -#include "mfxpak.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Qp; - mfxU16 LenSP; - mfxU16 SearchPath; - mfxU16 SubMBPartMask; - mfxU16 SubPelMode; - mfxU16 InterSAD; - mfxU16 IntraSAD; - mfxU16 AdaptiveSearch; - mfxU16 MVPredictor; - mfxU16 MBQp; - mfxU16 FTEnable; - mfxU16 IntraPartMask; - mfxU16 RefWidth; - mfxU16 RefHeight; - mfxU16 SearchWindow; - mfxU16 DisableMVOutput; - mfxU16 DisableStatisticsOutput; - mfxU16 Enable8x8Stat; - mfxU16 PictureType; /* Input picture type*/ - mfxU16 DownsampleInput; - - mfxU16 RefPictureType[2]; /* reference picture type, 0 -L0, 1 - L1 */ - mfxU16 DownsampleReference[2]; - mfxFrameSurface1 *RefFrame[2]; - mfxU16 reserved[28]; -} mfxExtFeiPreEncCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; /* size of allocated memory in number of macroblocks */ - mfxU16 reserved2[20]; - - struct mfxExtFeiPreEncMVPredictorsMB { - mfxI16Pair MV[2]; /* 0 for L0 and 1 for L1 */ - } *MB; -} mfxExtFeiPreEncMVPredictors; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - mfxU8 *MB; -} mfxExtFeiEncQP; -MFX_PACK_END() - -/* PreENC output */ -/* Layout is exactly the same as mfxExtFeiEncMVs, this buffer may be removed in future */ -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - struct mfxExtFeiPreEncMVMB { - mfxI16Pair MV[16][2]; - } *MB; -} mfxExtFeiPreEncMV; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - struct mfxExtFeiPreEncMBStatMB { - struct mfxExtFeiPreEncMBStatMBInter { - mfxU16 BestDistortion; - mfxU16 Mode ; - } Inter[2]; /*0 -L0, 1 - L1*/ - - mfxU16 BestIntraDistortion; - mfxU16 IntraMode ; - - mfxU16 NumOfNonZeroCoef; - mfxU16 reserved1; - mfxU32 SumOfCoef; - - mfxU32 reserved2; - - mfxU32 Variance16x16; - mfxU32 Variance8x8[4]; - mfxU32 PixelAverage16x16; - mfxU32 PixelAverage8x8[4]; - } *MB; -} mfxExtFeiPreEncMBStat; -MFX_PACK_END() - -/* 1 ENC_PAK input */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 SearchPath; - mfxU16 LenSP; - mfxU16 SubMBPartMask; - mfxU16 IntraPartMask; - mfxU16 MultiPredL0; - mfxU16 MultiPredL1; - mfxU16 SubPelMode; - mfxU16 InterSAD; - mfxU16 IntraSAD; - mfxU16 DistortionType; - mfxU16 RepartitionCheckEnable; - mfxU16 AdaptiveSearch; - mfxU16 MVPredictor; - mfxU16 NumMVPredictors[2]; - mfxU16 PerMBQp; - mfxU16 PerMBInput; - mfxU16 MBSizeCtrl; - mfxU16 RefWidth; - mfxU16 RefHeight; - mfxU16 SearchWindow; - mfxU16 ColocatedMbDistortion; - mfxU16 reserved[38]; -} mfxExtFeiEncFrameCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - struct mfxExtFeiEncMVPredictorsMB { - struct mfxExtFeiEncMVPredictorsMBRefIdx{ - mfxU8 RefL0: 4; - mfxU8 RefL1: 4; - } RefIdx[4]; /* index is predictor number */ - mfxU32 reserved; - mfxI16Pair MV[4][2]; /* first index is predictor number, second is 0 for L0 and 1 for L1 */ - } *MB; -} mfxExtFeiEncMVPredictors; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - struct mfxExtFeiEncMBCtrlMB { - mfxU32 ForceToIntra : 1; - mfxU32 ForceToSkip : 1; - mfxU32 ForceToNoneSkip : 1; -#if (MFX_VERSION >= 1025) - mfxU32 DirectBiasAdjustment : 1; - mfxU32 GlobalMotionBiasAdjustment : 1; - mfxU32 MVCostScalingFactor : 3; - - mfxU32 reserved1 : 24; -#else - mfxU32 reserved1 : 29; -#endif - mfxU32 reserved2; - mfxU32 reserved3; - - mfxU32 reserved4 : 16; - mfxU32 TargetSizeInWord : 8; - mfxU32 MaxSizeInWord : 8; - } *MB; -} mfxExtFeiEncMBCtrl; -MFX_PACK_END() - -/* 1 ENC_PAK output */ -/* Buffer holds 32 MVs per MB. MVs are located in zigzag scan order. -Number in diagram below shows location of MV in memory. -For example, MV for right top 4x4 sub block is stored in 5-th element of the array. -======================== -|| 00 | 01 || 04 | 05 || ------------------------- -|| 02 | 03 || 06 | 07 || -======================== -|| 08 | 09 || 12 | 13 || ------------------------- -|| 10 | 11 || 14 | 15 || -======================== -*/ -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - struct mfxExtFeiEncMVMB { - mfxI16Pair MV[16][2]; /* first index is block (4x4 pixels) number, second is 0 for L0 and 1 for L1 */ - } *MB; -} mfxExtFeiEncMV; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - struct mfxExtFeiEncMBStatMB { - mfxU16 InterDistortion[16]; - mfxU16 BestInterDistortion; - mfxU16 BestIntraDistortion; - mfxU16 ColocatedMbDistortion; - mfxU16 reserved; - mfxU32 reserved1[2]; - } *MB; -} mfxExtFeiEncMBStat; -MFX_PACK_END() - -enum { - MFX_PAK_OBJECT_HEADER = 0x7149000A -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - /* dword 0-2 */ - mfxU32 Header; /* MFX_PAK_OBJECT_HEADER */ - mfxU32 MVDataLength; - mfxU32 MVDataOffset; - - /* dword 3 */ - mfxU32 InterMbMode : 2; - mfxU32 MBSkipFlag : 1; - mfxU32 Reserved00 : 1; - mfxU32 IntraMbMode : 2; - mfxU32 Reserved01 : 1; - mfxU32 FieldMbPolarityFlag : 1; - mfxU32 MbType : 5; - mfxU32 IntraMbFlag : 1; - mfxU32 FieldMbFlag : 1; - mfxU32 Transform8x8Flag : 1; - mfxU32 Reserved02 : 1; - mfxU32 DcBlockCodedCrFlag : 1; - mfxU32 DcBlockCodedCbFlag : 1; - mfxU32 DcBlockCodedYFlag : 1; - mfxU32 MVFormat : 3; /* layout and number of MVs, 0 - no MVs, 6 - 32 MVs, the rest are reserved */ - mfxU32 Reserved03 : 8; - mfxU32 ExtendedFormat : 1; /* should be 1, specifies that LumaIntraPredModes and RefIdx are replicated for 8x8 and 4x4 block/subblock */ - - /* dword 4 */ - mfxU8 HorzOrigin; - mfxU8 VertOrigin; - mfxU16 CbpY; - - /* dword 5 */ - mfxU16 CbpCb; - mfxU16 CbpCr; - - /* dword 6 */ - mfxU32 QpPrimeY : 8; - mfxU32 Reserved30 :17; - mfxU32 MbSkipConvDisable : 1; - mfxU32 IsLastMB : 1; - mfxU32 EnableCoefficientClamp : 1; - mfxU32 Direct8x8Pattern : 4; - - union { - struct {/* Intra MBs */ - /* dword 7-8 */ - mfxU16 LumaIntraPredModes[4]; - - /* dword 9 */ - mfxU32 ChromaIntraPredMode : 2; - mfxU32 IntraPredAvailFlags : 6; - mfxU32 Reserved60 : 24; - } IntraMB; - struct {/* Inter MBs */ - /*dword 7 */ - mfxU8 SubMbShapes; - mfxU8 SubMbPredModes; - mfxU16 Reserved40; - - /* dword 8-9 */ - mfxU8 RefIdx[2][4]; /* first index is 0 for L0 and 1 for L1 */ - } InterMB; - }; - - /* dword 10 */ - mfxU16 Reserved70; - mfxU8 TargetSizeInWord; - mfxU8 MaxSizeInWord; - - mfxU32 reserved2[5]; -}mfxFeiPakMBCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 reserved2[20]; - - mfxFeiPakMBCtrl *MB; -} mfxExtFeiPakMBCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU32 MaxFrameSize; /* in bytes */ - mfxU32 NumPasses; /* up to 8 */ - mfxU16 reserved[8]; - mfxU8 DeltaQP[8]; /* list of delta QPs, only positive values */ -} mfxExtFeiRepackCtrl; -MFX_PACK_END() - -#if (MFX_VERSION >= 1025) -/* FEI repack status */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU32 NumPasses; - mfxU16 reserved[58]; -} mfxExtFeiRepackStat; -MFX_PACK_END() -#endif - -/* 1 decode stream out */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - /* dword 0 */ - mfxU32 InterMbMode : 2; - mfxU32 MBSkipFlag : 1; - mfxU32 Reserved00 : 1; - mfxU32 IntraMbMode : 2; - mfxU32 Reserved01 : 1; - mfxU32 FieldMbPolarityFlag : 1; - mfxU32 MbType : 5; - mfxU32 IntraMbFlag : 1; - mfxU32 FieldMbFlag : 1; - mfxU32 Transform8x8Flag : 1; - mfxU32 Reserved02 : 1; - mfxU32 DcBlockCodedCrFlag : 1; - mfxU32 DcBlockCodedCbFlag : 1; - mfxU32 DcBlockCodedYFlag : 1; - mfxU32 Reserved03 :12; - - /* dword 1 */ - mfxU16 HorzOrigin; - mfxU16 VertOrigin; - - /* dword 2 */ - mfxU32 CbpY :16; - mfxU32 CbpCb : 4; - mfxU32 CbpCr : 4; - mfxU32 Reserved20 : 6; - mfxU32 IsLastMB : 1; - mfxU32 ConcealMB : 1; - - /* dword 3 */ - mfxU32 QpPrimeY : 7; - mfxU32 Reserved30 : 1; - mfxU32 Reserved31 : 8; - mfxU32 NzCoeffCount : 9; - mfxU32 Reserved32 : 3; - mfxU32 Direct8x8Pattern : 4; - - /* dword 4-6 */ - union { - struct {/* Intra MBs */ - /* dword 4-5 */ - mfxU16 LumaIntraPredModes[4]; - - /* dword 6 */ - mfxU32 ChromaIntraPredMode : 2; - mfxU32 IntraPredAvailFlags : 6; - mfxU32 Reserved60 : 24; - } IntraMB; - - struct {/* Inter MBs */ - /* dword 4 */ - mfxU8 SubMbShapes; - mfxU8 SubMbPredModes; - mfxU16 Reserved40; - - /* dword 5-6 */ - mfxU8 RefIdx[2][4]; /* first index is 0 for L0 and 1 for L1 */ - } InterMB; - }; - - /* dword 7 */ - mfxU32 Reserved70; - - /* dword 8-15 */ - mfxI16Pair MV[4][2]; /* L0 - 0, L1 - 1 */ -}mfxFeiDecStreamOutMBCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[3]; - mfxU32 NumMBAlloc; - mfxU16 RemapRefIdx; /* tri-state option, default is OFF */ - mfxU16 PicStruct; - mfxU16 reserved2[18]; - - mfxFeiDecStreamOutMBCtrl *MB; -} mfxExtFeiDecStreamOut; -MFX_PACK_END() - -/* SPS, PPS, Slice Header */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 SPSId; - - mfxU16 PicOrderCntType; - mfxU16 Log2MaxPicOrderCntLsb; - mfxU16 reserved[121]; -} mfxExtFeiSPS; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 SPSId; - mfxU16 PPSId; - - mfxU16 PictureType; - mfxU16 FrameType; - mfxU16 PicInitQP; - mfxU16 NumRefIdxL0Active; - mfxU16 NumRefIdxL1Active; - mfxI16 ChromaQPIndexOffset; - mfxI16 SecondChromaQPIndexOffset; - mfxU16 Transform8x8ModeFlag; - mfxU16 reserved[114]; - - struct mfxExtFeiPpsDPB { - mfxU16 Index; /* index in mfxPAKInput::L0Surface array */ - mfxU16 PicType; - mfxI32 FrameNumWrap; - mfxU16 LongTermFrameIdx; - mfxU16 reserved[3]; - } DpbBefore[16], DpbAfter[16]; -} mfxExtFeiPPS; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - - mfxU16 NumSlice; /* actual number of slices in the picture */ - mfxU16 reserved[11]; - - struct mfxSlice{ - mfxU16 MBAddress; - mfxU16 NumMBs; - mfxU16 SliceType; - mfxU16 PPSId; - mfxU16 IdrPicId; - - mfxU16 CabacInitIdc; - - mfxU16 NumRefIdxL0Active; - mfxU16 NumRefIdxL1Active; - - mfxI16 SliceQPDelta; - mfxU16 DisableDeblockingFilterIdc; - mfxI16 SliceAlphaC0OffsetDiv2; - mfxI16 SliceBetaOffsetDiv2; - mfxU16 reserved[20]; - - struct mfxSliceRef{ - mfxU16 PictureType; - mfxU16 Index; - mfxU16 reserved[2]; - } RefL0[32], RefL1[32]; /* index in mfxPAKInput::L0Surface array */ - - } *Slice; -}mfxExtFeiSliceHeader; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 DisableHME; /* 0 - enable, any other value means disable */ - mfxU16 DisableSuperHME; - mfxU16 DisableUltraHME; - - mfxU16 reserved[57]; -} mfxExtFeiCodingOption; -MFX_PACK_END() - -/* 1 functions */ -typedef enum { - MFX_FEI_FUNCTION_PREENC =1, - MFX_FEI_FUNCTION_ENCODE =2, - MFX_FEI_FUNCTION_ENC =3, - MFX_FEI_FUNCTION_PAK =4, - MFX_FEI_FUNCTION_DEC =5, -} mfxFeiFunction; - -enum { - MFX_EXTBUFF_FEI_PARAM = MFX_MAKEFOURCC('F','E','P','R'), - MFX_EXTBUFF_FEI_PREENC_CTRL = MFX_MAKEFOURCC('F','P','C','T'), - MFX_EXTBUFF_FEI_PREENC_MV_PRED = MFX_MAKEFOURCC('F','P','M','P'), - MFX_EXTBUFF_FEI_PREENC_MV = MFX_MAKEFOURCC('F','P','M','V'), - MFX_EXTBUFF_FEI_PREENC_MB = MFX_MAKEFOURCC('F','P','M','B'), - MFX_EXTBUFF_FEI_ENC_CTRL = MFX_MAKEFOURCC('F','E','C','T'), - MFX_EXTBUFF_FEI_ENC_MV_PRED = MFX_MAKEFOURCC('F','E','M','P'), - MFX_EXTBUFF_FEI_ENC_QP = MFX_MAKEFOURCC('F','E','Q','P'), - MFX_EXTBUFF_FEI_ENC_MV = MFX_MAKEFOURCC('F','E','M','V'), - MFX_EXTBUFF_FEI_ENC_MB = MFX_MAKEFOURCC('F','E','M','B'), - MFX_EXTBUFF_FEI_ENC_MB_STAT = MFX_MAKEFOURCC('F','E','S','T'), - MFX_EXTBUFF_FEI_PAK_CTRL = MFX_MAKEFOURCC('F','K','C','T'), - MFX_EXTBUFF_FEI_SPS = MFX_MAKEFOURCC('F','S','P','S'), - MFX_EXTBUFF_FEI_PPS = MFX_MAKEFOURCC('F','P','P','S'), - MFX_EXTBUFF_FEI_SLICE = MFX_MAKEFOURCC('F','S','L','C'), - MFX_EXTBUFF_FEI_CODING_OPTION = MFX_MAKEFOURCC('F','C','D','O'), - MFX_EXTBUFF_FEI_DEC_STREAM_OUT = MFX_MAKEFOURCC('F','D','S','O'), - MFX_EXTBUFF_FEI_REPACK_CTRL = MFX_MAKEFOURCC('F','E','R','P'), -#if (MFX_VERSION >= 1025) - MFX_EXTBUFF_FEI_REPACK_STAT = MFX_MAKEFOURCC('F','E','R','S') -#endif -}; - -/* should be attached to mfxVideoParam during initialization to indicate FEI function */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxFeiFunction Func; - mfxU16 SingleFieldProcessing; - mfxU16 reserved[57]; -} mfxExtFeiParam; -MFX_PACK_END() - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* __cplusplus */ - - -#endif +// Copyright (c) 2018-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXFEI_H__ +#define __MFXFEI_H__ +#include "mfxdefs.h" +#include "mfxvstructures.h" +#include "mfxpak.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 Qp; + mfxU16 LenSP; + mfxU16 SearchPath; + mfxU16 SubMBPartMask; + mfxU16 SubPelMode; + mfxU16 InterSAD; + mfxU16 IntraSAD; + mfxU16 AdaptiveSearch; + mfxU16 MVPredictor; + mfxU16 MBQp; + mfxU16 FTEnable; + mfxU16 IntraPartMask; + mfxU16 RefWidth; + mfxU16 RefHeight; + mfxU16 SearchWindow; + mfxU16 DisableMVOutput; + mfxU16 DisableStatisticsOutput; + mfxU16 Enable8x8Stat; + mfxU16 PictureType; /* Input picture type*/ + mfxU16 DownsampleInput; + + mfxU16 RefPictureType[2]; /* reference picture type, 0 -L0, 1 - L1 */ + mfxU16 DownsampleReference[2]; + mfxFrameSurface1 *RefFrame[2]; + mfxU16 reserved[28]; +} mfxExtFeiPreEncCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; /* size of allocated memory in number of macroblocks */ + mfxU16 reserved2[20]; + + struct mfxExtFeiPreEncMVPredictorsMB { + mfxI16Pair MV[2]; /* 0 for L0 and 1 for L1 */ + } *MB; +} mfxExtFeiPreEncMVPredictors; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + mfxU8 *MB; +} mfxExtFeiEncQP; +MFX_PACK_END() + +/* PreENC output */ +/* Layout is exactly the same as mfxExtFeiEncMVs, this buffer may be removed in future */ +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + struct mfxExtFeiPreEncMVMB { + mfxI16Pair MV[16][2]; + } *MB; +} mfxExtFeiPreEncMV; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + struct mfxExtFeiPreEncMBStatMB { + struct mfxExtFeiPreEncMBStatMBInter { + mfxU16 BestDistortion; + mfxU16 Mode ; + } Inter[2]; /*0 -L0, 1 - L1*/ + + mfxU16 BestIntraDistortion; + mfxU16 IntraMode ; + + mfxU16 NumOfNonZeroCoef; + mfxU16 reserved1; + mfxU32 SumOfCoef; + + mfxU32 reserved2; + + mfxU32 Variance16x16; + mfxU32 Variance8x8[4]; + mfxU32 PixelAverage16x16; + mfxU32 PixelAverage8x8[4]; + } *MB; +} mfxExtFeiPreEncMBStat; +MFX_PACK_END() + +/* 1 ENC_PAK input */ +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 SearchPath; + mfxU16 LenSP; + mfxU16 SubMBPartMask; + mfxU16 IntraPartMask; + mfxU16 MultiPredL0; + mfxU16 MultiPredL1; + mfxU16 SubPelMode; + mfxU16 InterSAD; + mfxU16 IntraSAD; + mfxU16 DistortionType; + mfxU16 RepartitionCheckEnable; + mfxU16 AdaptiveSearch; + mfxU16 MVPredictor; + mfxU16 NumMVPredictors[2]; + mfxU16 PerMBQp; + mfxU16 PerMBInput; + mfxU16 MBSizeCtrl; + mfxU16 RefWidth; + mfxU16 RefHeight; + mfxU16 SearchWindow; + mfxU16 ColocatedMbDistortion; + mfxU16 reserved[38]; +} mfxExtFeiEncFrameCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + struct mfxExtFeiEncMVPredictorsMB { + struct mfxExtFeiEncMVPredictorsMBRefIdx{ + mfxU8 RefL0: 4; + mfxU8 RefL1: 4; + } RefIdx[4]; /* index is predictor number */ + mfxU32 reserved; + mfxI16Pair MV[4][2]; /* first index is predictor number, second is 0 for L0 and 1 for L1 */ + } *MB; +} mfxExtFeiEncMVPredictors; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + struct mfxExtFeiEncMBCtrlMB { + mfxU32 ForceToIntra : 1; + mfxU32 ForceToSkip : 1; + mfxU32 ForceToNoneSkip : 1; +#if (MFX_VERSION >= 1025) + mfxU32 DirectBiasAdjustment : 1; + mfxU32 GlobalMotionBiasAdjustment : 1; + mfxU32 MVCostScalingFactor : 3; + + mfxU32 reserved1 : 24; +#else + mfxU32 reserved1 : 29; +#endif + mfxU32 reserved2; + mfxU32 reserved3; + + mfxU32 reserved4 : 16; + mfxU32 TargetSizeInWord : 8; + mfxU32 MaxSizeInWord : 8; + } *MB; +} mfxExtFeiEncMBCtrl; +MFX_PACK_END() + +/* 1 ENC_PAK output */ +/* Buffer holds 32 MVs per MB. MVs are located in zigzag scan order. +Number in diagram below shows location of MV in memory. +For example, MV for right top 4x4 sub block is stored in 5-th element of the array. +======================== +|| 00 | 01 || 04 | 05 || +------------------------ +|| 02 | 03 || 06 | 07 || +======================== +|| 08 | 09 || 12 | 13 || +------------------------ +|| 10 | 11 || 14 | 15 || +======================== +*/ +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + struct mfxExtFeiEncMVMB { + mfxI16Pair MV[16][2]; /* first index is block (4x4 pixels) number, second is 0 for L0 and 1 for L1 */ + } *MB; +} mfxExtFeiEncMV; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + struct mfxExtFeiEncMBStatMB { + mfxU16 InterDistortion[16]; + mfxU16 BestInterDistortion; + mfxU16 BestIntraDistortion; + mfxU16 ColocatedMbDistortion; + mfxU16 reserved; + mfxU32 reserved1[2]; + } *MB; +} mfxExtFeiEncMBStat; +MFX_PACK_END() + +enum { + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PAK_OBJECT_HEADER) = 0x7149000A +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PAK_OBJECT_HEADER); + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + /* dword 0-2 */ + mfxU32 Header; /* MFX_PAK_OBJECT_HEADER */ + mfxU32 MVDataLength; + mfxU32 MVDataOffset; + + /* dword 3 */ + mfxU32 InterMbMode : 2; + mfxU32 MBSkipFlag : 1; + mfxU32 Reserved00 : 1; + mfxU32 IntraMbMode : 2; + mfxU32 Reserved01 : 1; + mfxU32 FieldMbPolarityFlag : 1; + mfxU32 MbType : 5; + mfxU32 IntraMbFlag : 1; + mfxU32 FieldMbFlag : 1; + mfxU32 Transform8x8Flag : 1; + mfxU32 Reserved02 : 1; + mfxU32 DcBlockCodedCrFlag : 1; + mfxU32 DcBlockCodedCbFlag : 1; + mfxU32 DcBlockCodedYFlag : 1; + mfxU32 MVFormat : 3; /* layout and number of MVs, 0 - no MVs, 6 - 32 MVs, the rest are reserved */ + mfxU32 Reserved03 : 8; + mfxU32 ExtendedFormat : 1; /* should be 1, specifies that LumaIntraPredModes and RefIdx are replicated for 8x8 and 4x4 block/subblock */ + + /* dword 4 */ + mfxU8 HorzOrigin; + mfxU8 VertOrigin; + mfxU16 CbpY; + + /* dword 5 */ + mfxU16 CbpCb; + mfxU16 CbpCr; + + /* dword 6 */ + mfxU32 QpPrimeY : 8; + mfxU32 Reserved30 :17; + mfxU32 MbSkipConvDisable : 1; + mfxU32 IsLastMB : 1; + mfxU32 EnableCoefficientClamp : 1; + mfxU32 Direct8x8Pattern : 4; + + union { + struct {/* Intra MBs */ + /* dword 7-8 */ + mfxU16 LumaIntraPredModes[4]; + + /* dword 9 */ + mfxU32 ChromaIntraPredMode : 2; + mfxU32 IntraPredAvailFlags : 6; + mfxU32 Reserved60 : 24; + } IntraMB; + struct {/* Inter MBs */ + /*dword 7 */ + mfxU8 SubMbShapes; + mfxU8 SubMbPredModes; + mfxU16 Reserved40; + + /* dword 8-9 */ + mfxU8 RefIdx[2][4]; /* first index is 0 for L0 and 1 for L1 */ + } InterMB; + }; + + /* dword 10 */ + mfxU16 Reserved70; + mfxU8 TargetSizeInWord; + mfxU8 MaxSizeInWord; + + mfxU32 reserved2[5]; +}mfxFeiPakMBCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 reserved2[20]; + + mfxFeiPakMBCtrl *MB; +} mfxExtFeiPakMBCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 MaxFrameSize; /* in bytes */ + mfxU32 NumPasses; /* up to 8 */ + mfxU16 reserved[8]; + mfxU8 DeltaQP[8]; /* list of delta QPs, only positive values */ +} mfxExtFeiRepackCtrl; +MFX_PACK_END() + +#if (MFX_VERSION >= 1025) +/* FEI repack status */ +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 NumPasses; + mfxU16 reserved[58]; +} mfxExtFeiRepackStat; +MFX_PACK_END() +#endif + +/* 1 decode stream out */ +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + /* dword 0 */ + mfxU32 InterMbMode : 2; + mfxU32 MBSkipFlag : 1; + mfxU32 Reserved00 : 1; + mfxU32 IntraMbMode : 2; + mfxU32 Reserved01 : 1; + mfxU32 FieldMbPolarityFlag : 1; + mfxU32 MbType : 5; + mfxU32 IntraMbFlag : 1; + mfxU32 FieldMbFlag : 1; + mfxU32 Transform8x8Flag : 1; + mfxU32 Reserved02 : 1; + mfxU32 DcBlockCodedCrFlag : 1; + mfxU32 DcBlockCodedCbFlag : 1; + mfxU32 DcBlockCodedYFlag : 1; + mfxU32 Reserved03 :12; + + /* dword 1 */ + mfxU16 HorzOrigin; + mfxU16 VertOrigin; + + /* dword 2 */ + mfxU32 CbpY :16; + mfxU32 CbpCb : 4; + mfxU32 CbpCr : 4; + mfxU32 Reserved20 : 6; + mfxU32 IsLastMB : 1; + mfxU32 ConcealMB : 1; + + /* dword 3 */ + mfxU32 QpPrimeY : 7; + mfxU32 Reserved30 : 1; + mfxU32 Reserved31 : 8; + mfxU32 NzCoeffCount : 9; + mfxU32 Reserved32 : 3; + mfxU32 Direct8x8Pattern : 4; + + /* dword 4-6 */ + union { + struct {/* Intra MBs */ + /* dword 4-5 */ + mfxU16 LumaIntraPredModes[4]; + + /* dword 6 */ + mfxU32 ChromaIntraPredMode : 2; + mfxU32 IntraPredAvailFlags : 6; + mfxU32 Reserved60 : 24; + } IntraMB; + + struct {/* Inter MBs */ + /* dword 4 */ + mfxU8 SubMbShapes; + mfxU8 SubMbPredModes; + mfxU16 Reserved40; + + /* dword 5-6 */ + mfxU8 RefIdx[2][4]; /* first index is 0 for L0 and 1 for L1 */ + } InterMB; + }; + + /* dword 7 */ + mfxU32 Reserved70; + + /* dword 8-15 */ + mfxI16Pair MV[4][2]; /* L0 - 0, L1 - 1 */ +}mfxFeiDecStreamOutMBCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[3]; + mfxU32 NumMBAlloc; + mfxU16 RemapRefIdx; /* tri-state option, default is OFF */ + mfxU16 PicStruct; + mfxU16 reserved2[18]; + + mfxFeiDecStreamOutMBCtrl *MB; +} mfxExtFeiDecStreamOut; +MFX_PACK_END() + +/* SPS, PPS, Slice Header */ +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 SPSId; + + mfxU16 PicOrderCntType; + mfxU16 Log2MaxPicOrderCntLsb; + mfxU16 reserved[121]; +} mfxExtFeiSPS; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 SPSId; + mfxU16 PPSId; + + mfxU16 PictureType; + mfxU16 FrameType; + mfxU16 PicInitQP; + mfxU16 NumRefIdxL0Active; + mfxU16 NumRefIdxL1Active; + mfxI16 ChromaQPIndexOffset; + mfxI16 SecondChromaQPIndexOffset; + mfxU16 Transform8x8ModeFlag; + mfxU16 reserved[114]; + + struct mfxExtFeiPpsDPB { + mfxU16 Index; /* index in mfxPAKInput::L0Surface array */ + mfxU16 PicType; + mfxI32 FrameNumWrap; + mfxU16 LongTermFrameIdx; + mfxU16 reserved[3]; + } DpbBefore[16], DpbAfter[16]; +} mfxExtFeiPPS; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 NumSlice; /* actual number of slices in the picture */ + mfxU16 reserved[11]; + + struct mfxSlice{ + mfxU16 MBAddress; + mfxU16 NumMBs; + mfxU16 SliceType; + mfxU16 PPSId; + mfxU16 IdrPicId; + + mfxU16 CabacInitIdc; + + mfxU16 NumRefIdxL0Active; + mfxU16 NumRefIdxL1Active; + + mfxI16 SliceQPDelta; + mfxU16 DisableDeblockingFilterIdc; + mfxI16 SliceAlphaC0OffsetDiv2; + mfxI16 SliceBetaOffsetDiv2; + mfxU16 reserved[20]; + + struct mfxSliceRef{ + mfxU16 PictureType; + mfxU16 Index; + mfxU16 reserved[2]; + } RefL0[32], RefL1[32]; /* index in mfxPAKInput::L0Surface array */ + + } *Slice; +}mfxExtFeiSliceHeader; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 DisableHME; /* 0 - enable, any other value means disable */ + mfxU16 DisableSuperHME; + mfxU16 DisableUltraHME; + + mfxU16 reserved[57]; +} mfxExtFeiCodingOption; +MFX_PACK_END() + +/* 1 functions */ +typedef enum { + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_FEI_FUNCTION_PREENC) =1, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_FEI_FUNCTION_ENCODE) =2, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_FEI_FUNCTION_ENC) =3, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_FEI_FUNCTION_PAK) =4, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_FEI_FUNCTION_DEC) =5, +} mfxFeiFunction; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_FEI_FUNCTION_PREENC); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_FEI_FUNCTION_ENCODE); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_FEI_FUNCTION_ENC); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_FEI_FUNCTION_PAK); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_FEI_FUNCTION_DEC); + +enum { + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_PARAM) = MFX_MAKEFOURCC('F','E','P','R'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_PREENC_CTRL) = MFX_MAKEFOURCC('F','P','C','T'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_PREENC_MV_PRED) = MFX_MAKEFOURCC('F','P','M','P'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_PREENC_MV) = MFX_MAKEFOURCC('F','P','M','V'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_PREENC_MB) = MFX_MAKEFOURCC('F','P','M','B'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_ENC_CTRL) = MFX_MAKEFOURCC('F','E','C','T'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_ENC_MV_PRED) = MFX_MAKEFOURCC('F','E','M','P'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_ENC_QP) = MFX_MAKEFOURCC('F','E','Q','P'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_ENC_MV) = MFX_MAKEFOURCC('F','E','M','V'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_ENC_MB) = MFX_MAKEFOURCC('F','E','M','B'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_ENC_MB_STAT) = MFX_MAKEFOURCC('F','E','S','T'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_PAK_CTRL) = MFX_MAKEFOURCC('F','K','C','T'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_SPS) = MFX_MAKEFOURCC('F','S','P','S'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_PPS) = MFX_MAKEFOURCC('F','P','P','S'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_SLICE) = MFX_MAKEFOURCC('F','S','L','C'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_CODING_OPTION) = MFX_MAKEFOURCC('F','C','D','O'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_DEC_STREAM_OUT) = MFX_MAKEFOURCC('F','D','S','O'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_REPACK_CTRL) = MFX_MAKEFOURCC('F','E','R','P'), +#if (MFX_VERSION >= 1025) + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_FEI_REPACK_STAT) = MFX_MAKEFOURCC('F','E','R','S') +#endif +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_PARAM); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_PREENC_CTRL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_PREENC_MV_PRED); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_PREENC_MV); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_PREENC_MB); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_ENC_CTRL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_ENC_MV_PRED); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_ENC_QP); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_ENC_MV); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_ENC_MB); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_ENC_MB_STAT); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_PAK_CTRL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_SPS); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_PPS); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_SLICE); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_CODING_OPTION); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_DEC_STREAM_OUT); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_REPACK_CTRL); + +#if (MFX_VERSION >= 1025) + MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_FEI_REPACK_STAT); +#endif + +/* should be attached to mfxVideoParam during initialization to indicate FEI function */ +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxFeiFunction Func; + mfxU16 SingleFieldProcessing; + mfxU16 reserved[57]; +} mfxExtFeiParam; +MFX_PACK_END() + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + + +#endif diff --git a/.github/actions/libmfx/include/mfx/mfxfeihevc.h b/.github/actions/libmfx/include/mfx/mfxfeihevc.h index 8827892..6c86ded 100644 --- a/.github/actions/libmfx/include/mfx/mfxfeihevc.h +++ b/.github/actions/libmfx/include/mfx/mfxfeihevc.h @@ -1,290 +1,303 @@ -// Copyright (c) 2018-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXFEIHEVC_H__ -#define __MFXFEIHEVC_H__ -#include "mfxcommon.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if (MFX_VERSION >= 1027) - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 SearchPath; - mfxU16 LenSP; - mfxU16 RefWidth; - mfxU16 RefHeight; - mfxU16 SearchWindow; - - mfxU16 NumMvPredictors[2]; /* 0 for L0 and 1 for L1 */ - mfxU16 MultiPred[2]; /* 0 for L0 and 1 for L1 */ - - mfxU16 SubPelMode; - mfxU16 AdaptiveSearch; - mfxU16 MVPredictor; - - mfxU16 PerCuQp; - mfxU16 PerCtuInput; - mfxU16 ForceCtuSplit; - mfxU16 NumFramePartitions; - mfxU16 FastIntraMode; - - mfxU16 reserved0[107]; -} mfxExtFeiHevcEncFrameCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - struct { - mfxU8 RefL0 : 4; - mfxU8 RefL1 : 4; - } RefIdx[4]; /* index is predictor number */ - - mfxU32 BlockSize : 2; - mfxU32 reserved0 : 30; - - mfxI16Pair MV[4][2]; /* first index is predictor number, second is 0 for L0 and 1 for L1 */ -} mfxFeiHevcEncMVPredictors; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 VaBufferID; - mfxU32 Pitch; - mfxU32 Height; - mfxU16 reserved0[54]; - - mfxFeiHevcEncMVPredictors *Data; -} mfxExtFeiHevcEncMVPredictors; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 VaBufferID; - mfxU32 Pitch; - mfxU32 Height; - mfxU16 reserved[6]; - - mfxU8 *Data; -} mfxExtFeiHevcEncQP; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 ForceToIntra : 1; - mfxU32 ForceToInter : 1; - mfxU32 reserved0 : 30; - - mfxU32 reserved1[3]; -} mfxFeiHevcEncCtuCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 VaBufferID; - mfxU32 Pitch; - mfxU32 Height; - mfxU16 reserved0[54]; - - mfxFeiHevcEncCtuCtrl *Data; -} mfxExtFeiHevcEncCtuCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU32 MaxFrameSize; /* in bytes */ - mfxU32 NumPasses; /* up to 8 */ - mfxU16 reserved[8]; - mfxU8 DeltaQP[8]; /* list of delta QPs, only positive values */ -} mfxExtFeiHevcRepackCtrl; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU32 NumPasses; - mfxU16 reserved[58]; -} mfxExtFeiHevcRepackStat; -MFX_PACK_END() - -#if MFX_VERSION >= MFX_VERSION_NEXT -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - /* DWORD 0 */ - mfxU32 reserved0; - - /* DWORD 1 */ - mfxU32 SplitLevel2Part0 : 4; - mfxU32 SplitLevel2Part1 : 4; - mfxU32 SplitLevel2Part2 : 4; - mfxU32 SplitLevel2Part3 : 4; - mfxU32 SplitLevel1 : 4; - mfxU32 SplitLevel0 : 1; - mfxU32 reserved10 : 3; - mfxU32 CuCountMinus1 : 6; - mfxU32 LastCtuOfTileFlag : 1; - mfxU32 LastCtuOfSliceFlag : 1; - - - /* DWORD 2 */ - mfxU32 CtuAddrX : 16; - mfxU32 CtuAddrY : 16; - - /* DWORD 3 */ - mfxU32 reserved3; -} mfxFeiHevcPakCtuRecordV0; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 VaBufferID; - mfxU32 Pitch; - mfxU32 Height; - mfxU16 reserved0[54]; - - mfxFeiHevcPakCtuRecordV0 *Data; -} mfxExtFeiHevcPakCtuRecordV0; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - /* DWORD 0 */ - mfxU32 CuSize : 2; - mfxU32 PredMode : 1; - mfxU32 TransquantBypass : 1; - mfxU32 PartMode : 3; - mfxU32 IpcmEnable : 1; - mfxU32 IntraChromaMode : 3; - mfxU32 ZeroOutCoeffs : 1; - mfxU32 reserved00 : 4; - mfxU32 Qp : 7; - mfxU32 QpSign : 1; - mfxU32 InterpredIdc : 8; - - - /* DWORD 1 */ - mfxU32 IntraMode0 : 6; - mfxU32 reserved10 : 2; - mfxU32 IntraMode1 : 6; - mfxU32 reserved11 : 2; - mfxU32 IntraMode2 : 6; - mfxU32 reserved12 : 2; - mfxU32 IntraMode3 : 6; - mfxU32 reserved13 : 2; - - - /* DWORD 2-9 */ - struct { - mfxI16 x[4]; - mfxI16 y[4]; - } MVs[2]; /* 0-L0, 1-L1 */ - - - /* DWORD 10 */ - struct{ - mfxU16 Ref0 : 4; - mfxU16 Ref1 : 4; - mfxU16 Ref2 : 4; - mfxU16 Ref3 : 4; - } RefIdx[2]; /* 0-L0, 1-L1 */ - - - /* DWORD 11 */ - mfxU32 TuSize; - - - /* DWORD 12 */ - mfxU32 TransformSkipY : 16; - mfxU32 reserved120 : 12; - mfxU32 TuCountM1 : 4; - - - /* DWORD 13 */ - mfxU32 TransformSkipU : 16; - mfxU32 TransformSkipV : 16; -} mfxFeiHevcPakCuRecordV0; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 VaBufferID; - mfxU32 Pitch; - mfxU32 Height; - mfxU16 reserved0[54]; - - mfxFeiHevcPakCuRecordV0 *Data; -} mfxExtFeiHevcPakCuRecordV0; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 BestDistortion; - mfxU32 ColocatedCtuDistortion; -} mfxFeiHevcDistortionCtu; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 VaBufferID; - mfxU32 Pitch; - mfxU32 Height; - mfxU16 reserved[6]; - - mfxFeiHevcDistortionCtu *Data; -} mfxExtFeiHevcDistortion; -MFX_PACK_END() -#endif - - -enum { - MFX_EXTBUFF_HEVCFEI_ENC_CTRL = MFX_MAKEFOURCC('F','H','C','T'), - MFX_EXTBUFF_HEVCFEI_ENC_MV_PRED = MFX_MAKEFOURCC('F','H','P','D'), - MFX_EXTBUFF_HEVCFEI_ENC_QP = MFX_MAKEFOURCC('F','H','Q','P'), - MFX_EXTBUFF_HEVCFEI_ENC_CTU_CTRL = MFX_MAKEFOURCC('F','H','E','C'), - MFX_EXTBUFF_HEVCFEI_REPACK_CTRL = MFX_MAKEFOURCC('F','H','R','P'), - MFX_EXTBUFF_HEVCFEI_REPACK_STAT = MFX_MAKEFOURCC('F','H','R','S'), - -#if MFX_VERSION >= MFX_VERSION_NEXT - MFX_EXTBUFF_HEVCFEI_PAK_CTU_REC = MFX_MAKEFOURCC('F','H','T','B'), - MFX_EXTBUFF_HEVCFEI_PAK_CU_REC = MFX_MAKEFOURCC('F','H','C','U'), - MFX_EXTBUFF_HEVCFEI_ENC_DIST = MFX_MAKEFOURCC('F','H','D','S') -#endif -}; - -#endif // MFX_VERSION - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* __cplusplus */ - - -#endif // __MFXFEIHEVC_H__ +// Copyright (c) 2018-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXFEIHEVC_H__ +#define __MFXFEIHEVC_H__ +#include "mfxcommon.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if (MFX_VERSION >= 1027) + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 SearchPath; + mfxU16 LenSP; + mfxU16 RefWidth; + mfxU16 RefHeight; + mfxU16 SearchWindow; + + mfxU16 NumMvPredictors[2]; /* 0 for L0 and 1 for L1 */ + mfxU16 MultiPred[2]; /* 0 for L0 and 1 for L1 */ + + mfxU16 SubPelMode; + mfxU16 AdaptiveSearch; + mfxU16 MVPredictor; + + mfxU16 PerCuQp; + mfxU16 PerCtuInput; + mfxU16 ForceCtuSplit; + mfxU16 NumFramePartitions; + mfxU16 FastIntraMode; + + mfxU16 reserved0[107]; +} mfxExtFeiHevcEncFrameCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + struct { + mfxU8 RefL0 : 4; + mfxU8 RefL1 : 4; + } RefIdx[4]; /* index is predictor number */ + + mfxU32 BlockSize : 2; + mfxU32 reserved0 : 30; + + mfxI16Pair MV[4][2]; /* first index is predictor number, second is 0 for L0 and 1 for L1 */ +} mfxFeiHevcEncMVPredictors; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 VaBufferID; + mfxU32 Pitch; + mfxU32 Height; + mfxU16 reserved0[54]; + + mfxFeiHevcEncMVPredictors *Data; +} mfxExtFeiHevcEncMVPredictors; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 VaBufferID; + mfxU32 Pitch; + mfxU32 Height; + mfxU16 reserved[6]; + + mfxU8 *Data; +} mfxExtFeiHevcEncQP; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxU32 ForceToIntra : 1; + mfxU32 ForceToInter : 1; + mfxU32 reserved0 : 30; + + mfxU32 reserved1[3]; +} mfxFeiHevcEncCtuCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 VaBufferID; + mfxU32 Pitch; + mfxU32 Height; + mfxU16 reserved0[54]; + + mfxFeiHevcEncCtuCtrl *Data; +} mfxExtFeiHevcEncCtuCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 MaxFrameSize; /* in bytes */ + mfxU32 NumPasses; /* up to 8 */ + mfxU16 reserved[8]; + mfxU8 DeltaQP[8]; /* list of delta QPs, only positive values */ +} mfxExtFeiHevcRepackCtrl; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 NumPasses; + mfxU16 reserved[58]; +} mfxExtFeiHevcRepackStat; +MFX_PACK_END() + +#if MFX_VERSION >= MFX_VERSION_NEXT +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + /* DWORD 0 */ + mfxU32 reserved0; + + /* DWORD 1 */ + mfxU32 SplitLevel2Part0 : 4; + mfxU32 SplitLevel2Part1 : 4; + mfxU32 SplitLevel2Part2 : 4; + mfxU32 SplitLevel2Part3 : 4; + mfxU32 SplitLevel1 : 4; + mfxU32 SplitLevel0 : 1; + mfxU32 reserved10 : 3; + mfxU32 CuCountMinus1 : 6; + mfxU32 LastCtuOfTileFlag : 1; + mfxU32 LastCtuOfSliceFlag : 1; + + + /* DWORD 2 */ + mfxU32 CtuAddrX : 16; + mfxU32 CtuAddrY : 16; + + /* DWORD 3 */ + mfxU32 reserved3; +} mfxFeiHevcPakCtuRecordV0; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 VaBufferID; + mfxU32 Pitch; + mfxU32 Height; + mfxU16 reserved0[54]; + + mfxFeiHevcPakCtuRecordV0 *Data; +} mfxExtFeiHevcPakCtuRecordV0; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + /* DWORD 0 */ + mfxU32 CuSize : 2; + mfxU32 PredMode : 1; + mfxU32 TransquantBypass : 1; + mfxU32 PartMode : 3; + mfxU32 IpcmEnable : 1; + mfxU32 IntraChromaMode : 3; + mfxU32 ZeroOutCoeffs : 1; + mfxU32 reserved00 : 4; + mfxU32 Qp : 7; + mfxU32 QpSign : 1; + mfxU32 InterpredIdc : 8; + + + /* DWORD 1 */ + mfxU32 IntraMode0 : 6; + mfxU32 reserved10 : 2; + mfxU32 IntraMode1 : 6; + mfxU32 reserved11 : 2; + mfxU32 IntraMode2 : 6; + mfxU32 reserved12 : 2; + mfxU32 IntraMode3 : 6; + mfxU32 reserved13 : 2; + + + /* DWORD 2-9 */ + struct { + mfxI16 x[4]; + mfxI16 y[4]; + } MVs[2]; /* 0-L0, 1-L1 */ + + + /* DWORD 10 */ + struct{ + mfxU16 Ref0 : 4; + mfxU16 Ref1 : 4; + mfxU16 Ref2 : 4; + mfxU16 Ref3 : 4; + } RefIdx[2]; /* 0-L0, 1-L1 */ + + + /* DWORD 11 */ + mfxU32 TuSize; + + + /* DWORD 12 */ + mfxU32 TransformSkipY : 16; + mfxU32 reserved120 : 12; + mfxU32 TuCountM1 : 4; + + + /* DWORD 13 */ + mfxU32 TransformSkipU : 16; + mfxU32 TransformSkipV : 16; +} mfxFeiHevcPakCuRecordV0; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 VaBufferID; + mfxU32 Pitch; + mfxU32 Height; + mfxU16 reserved0[54]; + + mfxFeiHevcPakCuRecordV0 *Data; +} mfxExtFeiHevcPakCuRecordV0; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxU32 BestDistortion; + mfxU32 ColocatedCtuDistortion; +} mfxFeiHevcDistortionCtu; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 VaBufferID; + mfxU32 Pitch; + mfxU32 Height; + mfxU16 reserved[6]; + + mfxFeiHevcDistortionCtu *Data; +} mfxExtFeiHevcDistortion; +MFX_PACK_END() +#endif + + +enum { + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_ENC_CTRL) = MFX_MAKEFOURCC('F','H','C','T'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_ENC_MV_PRED) = MFX_MAKEFOURCC('F','H','P','D'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_ENC_QP) = MFX_MAKEFOURCC('F','H','Q','P'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_ENC_CTU_CTRL) = MFX_MAKEFOURCC('F','H','E','C'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_REPACK_CTRL) = MFX_MAKEFOURCC('F','H','R','P'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_REPACK_STAT) = MFX_MAKEFOURCC('F','H','R','S'), + +#if MFX_VERSION >= MFX_VERSION_NEXT + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_PAK_CTU_REC) = MFX_MAKEFOURCC('F','H','T','B'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_PAK_CU_REC) = MFX_MAKEFOURCC('F','H','C','U'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_HEVCFEI_ENC_DIST) = MFX_MAKEFOURCC('F','H','D','S') +#endif +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_ENC_CTRL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_ENC_MV_PRED); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_ENC_QP); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_ENC_CTU_CTRL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_REPACK_CTRL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_REPACK_STAT); + +#if MFX_VERSION >= MFX_VERSION_NEXT + MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_PAK_CTU_REC); + MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_PAK_CU_REC); + MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_HEVCFEI_ENC_DIST); +#endif + +#endif // MFX_VERSION + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + + +#endif // __MFXFEIHEVC_H__ diff --git a/.github/actions/libmfx/include/mfx/mfxjpeg.h b/.github/actions/libmfx/include/mfx/mfxjpeg.h index 7f00b67..b1934e7 100644 --- a/.github/actions/libmfx/include/mfx/mfxjpeg.h +++ b/.github/actions/libmfx/include/mfx/mfxjpeg.h @@ -1,105 +1,105 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFX_JPEG_H__ -#define __MFX_JPEG_H__ - -#include "mfxdefs.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* CodecId */ -enum { - MFX_CODEC_JPEG = MFX_MAKEFOURCC('J','P','E','G') -}; - -/* CodecProfile, CodecLevel */ -enum -{ - MFX_PROFILE_JPEG_BASELINE = 1 -}; - -enum -{ - MFX_ROTATION_0 = 0, - MFX_ROTATION_90 = 1, - MFX_ROTATION_180 = 2, - MFX_ROTATION_270 = 3 -}; - -enum { - MFX_EXTBUFF_JPEG_QT = MFX_MAKEFOURCC('J','P','G','Q'), - MFX_EXTBUFF_JPEG_HUFFMAN = MFX_MAKEFOURCC('J','P','G','H') -}; - -enum { - MFX_JPEG_COLORFORMAT_UNKNOWN = 0, - MFX_JPEG_COLORFORMAT_YCbCr = 1, - MFX_JPEG_COLORFORMAT_RGB = 2 -}; - -enum { - MFX_SCANTYPE_UNKNOWN = 0, - MFX_SCANTYPE_INTERLEAVED = 1, - MFX_SCANTYPE_NONINTERLEAVED = 2 -}; - -enum { - MFX_CHROMAFORMAT_JPEG_SAMPLING = 6 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved[7]; - mfxU16 NumTable; - - mfxU16 Qm[4][64]; -} mfxExtJPEGQuantTables; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved[2]; - mfxU16 NumDCTable; - mfxU16 NumACTable; - - struct { - mfxU8 Bits[16]; - mfxU8 Values[12]; - } DCTables[4]; - - struct { - mfxU8 Bits[16]; - mfxU8 Values[162]; - } ACTables[4]; -} mfxExtJPEGHuffmanTables; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - -#endif // __MFX_JPEG_H__ +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFX_JPEG_H__ +#define __MFX_JPEG_H__ + +#include "mfxdefs.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* CodecId */ +enum { + MFX_CODEC_JPEG = MFX_MAKEFOURCC('J','P','E','G') +}; + +/* CodecProfile, CodecLevel */ +enum +{ + MFX_PROFILE_JPEG_BASELINE = 1 +}; + +enum +{ + MFX_ROTATION_0 = 0, + MFX_ROTATION_90 = 1, + MFX_ROTATION_180 = 2, + MFX_ROTATION_270 = 3 +}; + +enum { + MFX_EXTBUFF_JPEG_QT = MFX_MAKEFOURCC('J','P','G','Q'), + MFX_EXTBUFF_JPEG_HUFFMAN = MFX_MAKEFOURCC('J','P','G','H') +}; + +enum { + MFX_JPEG_COLORFORMAT_UNKNOWN = 0, + MFX_JPEG_COLORFORMAT_YCbCr = 1, + MFX_JPEG_COLORFORMAT_RGB = 2 +}; + +enum { + MFX_SCANTYPE_UNKNOWN = 0, + MFX_SCANTYPE_INTERLEAVED = 1, + MFX_SCANTYPE_NONINTERLEAVED = 2 +}; + +enum { + MFX_CHROMAFORMAT_JPEG_SAMPLING = 6 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved[7]; + mfxU16 NumTable; + + mfxU16 Qm[4][64]; +} mfxExtJPEGQuantTables; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved[2]; + mfxU16 NumDCTable; + mfxU16 NumACTable; + + struct { + mfxU8 Bits[16]; + mfxU8 Values[12]; + } DCTables[4]; + + struct { + mfxU8 Bits[16]; + mfxU8 Values[162]; + } ACTables[4]; +} mfxExtJPEGHuffmanTables; +MFX_PACK_END() + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + +#endif // __MFX_JPEG_H__ diff --git a/.github/actions/libmfx/include/mfx/mfxla.h b/.github/actions/libmfx/include/mfx/mfxla.h index d90f460..264c72f 100644 --- a/.github/actions/libmfx/include/mfx/mfxla.h +++ b/.github/actions/libmfx/include/mfx/mfxla.h @@ -1,99 +1,102 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXLA_H__ -#define __MFXLA_H__ -#include "mfxdefs.h" -#include "mfxvstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -enum -{ - MFX_EXTBUFF_LOOKAHEAD_CTRL = MFX_MAKEFOURCC('L','A','C','T'), - MFX_EXTBUFF_LOOKAHEAD_STAT = MFX_MAKEFOURCC('L','A','S','T'), -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct -{ - mfxExtBuffer Header; - mfxU16 LookAheadDepth; - mfxU16 DependencyDepth; - mfxU16 DownScaleFactor; - mfxU16 BPyramid; - - mfxU16 reserved1[23]; - - mfxU16 NumOutStream; - struct mfxStream{ - mfxU16 Width; - mfxU16 Height; - mfxU16 reserved2[14]; - } OutStream[16]; -}mfxExtLAControl; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct -{ - mfxU16 Width; - mfxU16 Height; - - mfxU32 FrameType; - mfxU32 FrameDisplayOrder; - mfxU32 FrameEncodeOrder; - - mfxU32 IntraCost; - mfxU32 InterCost; - mfxU32 DependencyCost; //aggregated cost, how this frame influences subsequent frames - mfxU16 Layer; - mfxU16 reserved[23]; - - mfxU64 EstimatedRate[52]; -}mfxLAFrameInfo; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved[20]; - - mfxU16 NumAlloc; //number of allocated mfxLAFrameInfo structures - mfxU16 NumStream; //number of resolutions - mfxU16 NumFrame; //number of frames for each resolution - mfxLAFrameInfo *FrameStat; //frame statistics - - mfxFrameSurface1 *OutSurface; //reordered surface - -} mfxExtLAFrameStatistics; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - - -#endif - +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXLA_H__ +#define __MFXLA_H__ +#include "mfxdefs.h" +#include "mfxvstructures.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + +enum +{ + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_LOOKAHEAD_CTRL) = MFX_MAKEFOURCC('L','A','C','T'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_LOOKAHEAD_STAT) = MFX_MAKEFOURCC('L','A','S','T'), +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_LOOKAHEAD_CTRL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_LOOKAHEAD_STAT); + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct +{ + mfxExtBuffer Header; + mfxU16 LookAheadDepth; + mfxU16 DependencyDepth; + mfxU16 DownScaleFactor; + mfxU16 BPyramid; + + mfxU16 reserved1[23]; + + mfxU16 NumOutStream; + struct mfxStream{ + mfxU16 Width; + mfxU16 Height; + mfxU16 reserved2[14]; + } OutStream[16]; +}mfxExtLAControl; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +MFX_DEPRECATED typedef struct +{ + mfxU16 Width; + mfxU16 Height; + + mfxU32 FrameType; + mfxU32 FrameDisplayOrder; + mfxU32 FrameEncodeOrder; + + mfxU32 IntraCost; + mfxU32 InterCost; + mfxU32 DependencyCost; //aggregated cost, how this frame influences subsequent frames + mfxU16 Layer; + mfxU16 reserved[23]; + + mfxU64 EstimatedRate[52]; +}mfxLAFrameInfo; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved[20]; + + mfxU16 NumAlloc; //number of allocated mfxLAFrameInfo structures + mfxU16 NumStream; //number of resolutions + mfxU16 NumFrame; //number of frames for each resolution + mfxLAFrameInfo *FrameStat; //frame statistics + + mfxFrameSurface1 *OutSurface; //reordered surface + +} mfxExtLAFrameStatistics; +MFX_PACK_END() + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxmvc.h b/.github/actions/libmfx/include/mfx/mfxmvc.h index 4ec71dc..8e0c21b 100644 --- a/.github/actions/libmfx/include/mfx/mfxmvc.h +++ b/.github/actions/libmfx/include/mfx/mfxmvc.h @@ -1,106 +1,106 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXMVC_H__ -#define __MFXMVC_H__ - -#include "mfxdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* CodecProfile, CodecLevel */ -enum { - /* MVC profiles */ - MFX_PROFILE_AVC_MULTIVIEW_HIGH =118, - MFX_PROFILE_AVC_STEREO_HIGH =128 -}; - -/* Extended Buffer Ids */ -enum { - MFX_EXTBUFF_MVC_SEQ_DESC = MFX_MAKEFOURCC('M','V','C','D'), - MFX_EXTBUFF_MVC_TARGET_VIEWS = MFX_MAKEFOURCC('M','V','C','T') -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU16 ViewId; - - mfxU16 NumAnchorRefsL0; - mfxU16 NumAnchorRefsL1; - mfxU16 AnchorRefL0[16]; - mfxU16 AnchorRefL1[16]; - - mfxU16 NumNonAnchorRefsL0; - mfxU16 NumNonAnchorRefsL1; - mfxU16 NonAnchorRefL0[16]; - mfxU16 NonAnchorRefL1[16]; -} mfxMVCViewDependency; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU16 TemporalId; - mfxU16 LevelIdc; - - mfxU16 NumViews; - mfxU16 NumTargetViews; - mfxU16 *TargetViewId; -} mfxMVCOperationPoint; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - - mfxU32 NumView; - mfxU32 NumViewAlloc; - mfxMVCViewDependency *View; - - mfxU32 NumViewId; - mfxU32 NumViewIdAlloc; - mfxU16 *ViewId; - - mfxU32 NumOP; - mfxU32 NumOPAlloc; - mfxMVCOperationPoint *OP; - - mfxU16 NumRefsTotal; - mfxU32 Reserved[16]; - -} mfxExtMVCSeqDesc; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 TemporalId; - mfxU32 NumView; - mfxU16 ViewId[1024]; -} mfxExtMVCTargetViews ; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif - +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXMVC_H__ +#define __MFXMVC_H__ + +#include "mfxdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* CodecProfile, CodecLevel */ +enum { + /* MVC profiles */ + MFX_PROFILE_AVC_MULTIVIEW_HIGH =118, + MFX_PROFILE_AVC_STEREO_HIGH =128 +}; + +/* Extended Buffer Ids */ +enum { + MFX_EXTBUFF_MVC_SEQ_DESC = MFX_MAKEFOURCC('M','V','C','D'), + MFX_EXTBUFF_MVC_TARGET_VIEWS = MFX_MAKEFOURCC('M','V','C','T') +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU16 ViewId; + + mfxU16 NumAnchorRefsL0; + mfxU16 NumAnchorRefsL1; + mfxU16 AnchorRefL0[16]; + mfxU16 AnchorRefL1[16]; + + mfxU16 NumNonAnchorRefsL0; + mfxU16 NumNonAnchorRefsL1; + mfxU16 NonAnchorRefL0[16]; + mfxU16 NonAnchorRefL1[16]; +} mfxMVCViewDependency; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU16 TemporalId; + mfxU16 LevelIdc; + + mfxU16 NumViews; + mfxU16 NumTargetViews; + mfxU16 *TargetViewId; +} mfxMVCOperationPoint; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; + + mfxU32 NumView; + mfxU32 NumViewAlloc; + mfxMVCViewDependency *View; + + mfxU32 NumViewId; + mfxU32 NumViewIdAlloc; + mfxU16 *ViewId; + + mfxU32 NumOP; + mfxU32 NumOPAlloc; + mfxMVCOperationPoint *OP; + + mfxU16 NumRefsTotal; + mfxU32 Reserved[16]; + +} mfxExtMVCSeqDesc; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 TemporalId; + mfxU32 NumView; + mfxU16 ViewId[1024]; +} mfxExtMVCTargetViews ; +MFX_PACK_END() + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxpak.h b/.github/actions/libmfx/include/mfx/mfxpak.h index b0d7db5..4810b9a 100644 --- a/.github/actions/libmfx/include/mfx/mfxpak.h +++ b/.github/actions/libmfx/include/mfx/mfxpak.h @@ -1,78 +1,78 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXPAK_H__ -#define __MFXPAK_H__ -#include "mfxdefs.h" -#include "mfxvstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU16 reserved[32]; - - mfxFrameSurface1 *InSurface; - - mfxU16 NumFrameL0; - mfxFrameSurface1 **L0Surface; - mfxU16 NumFrameL1; - mfxFrameSurface1 **L1Surface; - - mfxU16 NumExtParam; - mfxExtBuffer **ExtParam; - - mfxU16 NumPayload; - mfxPayload **Payload; -} mfxPAKInput; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU16 reserved[32]; - - mfxBitstream *Bs; - - mfxFrameSurface1 *OutSurface; - - mfxU16 NumExtParam; - mfxExtBuffer **ExtParam; -} mfxPAKOutput; -MFX_PACK_END() - -typedef struct _mfxSession *mfxSession; -mfxStatus MFX_CDECL MFXVideoPAK_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); -mfxStatus MFX_CDECL MFXVideoPAK_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest request[2]); -mfxStatus MFX_CDECL MFXVideoPAK_Init(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoPAK_Reset(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoPAK_Close(mfxSession session); - -mfxStatus MFX_CDECL MFXVideoPAK_ProcessFrameAsync(mfxSession session, mfxPAKInput *in, mfxPAKOutput *out, mfxSyncPoint *syncp); - -mfxStatus MFX_CDECL MFXVideoPAK_GetVideoParam(mfxSession session, mfxVideoParam *par); - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - - -#endif +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXPAK_H__ +#define __MFXPAK_H__ +#include "mfxdefs.h" +#include "mfxvstructures.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxU16 reserved[32]; + + mfxFrameSurface1 *InSurface; + + mfxU16 NumFrameL0; + mfxFrameSurface1 **L0Surface; + mfxU16 NumFrameL1; + mfxFrameSurface1 **L1Surface; + + mfxU16 NumExtParam; + mfxExtBuffer **ExtParam; + + mfxU16 NumPayload; + mfxPayload **Payload; +} mfxPAKInput; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxU16 reserved[32]; + + mfxBitstream *Bs; + + mfxFrameSurface1 *OutSurface; + + mfxU16 NumExtParam; + mfxExtBuffer **ExtParam; +} mfxPAKOutput; +MFX_PACK_END() + +typedef struct _mfxSession *mfxSession; +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest request[2]); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Init(mfxSession session, mfxVideoParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Reset(mfxSession session, mfxVideoParam *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Close(mfxSession session); + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_ProcessFrameAsync(mfxSession session, mfxPAKInput *in, mfxPAKOutput *out, mfxSyncPoint *syncp); + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_GetVideoParam(mfxSession session, mfxVideoParam *par); + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + + +#endif diff --git a/.github/actions/libmfx/include/mfx/mfxpcp.h b/.github/actions/libmfx/include/mfx/mfxpcp.h deleted file mode 100644 index d3a10b7..0000000 --- a/.github/actions/libmfx/include/mfx/mfxpcp.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXPCP_H__ -#define __MFXPCP_H__ -#include "mfxstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#if MFX_VERSION >= 1030 -/* Protected in mfxVideoParam */ -enum { - MFX_PROTECTION_CENC_WV_CLASSIC = 0x0004, - MFX_PROTECTION_CENC_WV_GOOGLE_DASH = 0x0005, -}; - -/* Extended Buffer Ids */ -enum { - MFX_EXTBUFF_CENC_PARAM = MFX_MAKEFOURCC('C','E','N','P') -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct _mfxExtCencParam{ - mfxExtBuffer Header; - - mfxU32 StatusReportIndex; - mfxU32 reserved[15]; -} mfxExtCencParam; -MFX_PACK_END() -#endif - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - -#endif - diff --git a/.github/actions/libmfx/include/mfx/mfxplugin++.h b/.github/actions/libmfx/include/mfx/mfxplugin++.h index 9fe7ce5..43ddd56 100644 --- a/.github/actions/libmfx/include/mfx/mfxplugin++.h +++ b/.github/actions/libmfx/include/mfx/mfxplugin++.h @@ -1,717 +1,717 @@ -// Copyright (c) 2017-2020 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#ifndef __MFXPLUGINPLUSPLUS_H -#define __MFXPLUGINPLUSPLUS_H - -#include "mfxplugin.h" - -// base class for MFXVideoUSER/MFXAudioUSER API - -class MFXBaseUSER { -public: - explicit MFXBaseUSER(mfxSession session = NULL) - : m_session(session){} - - virtual ~MFXBaseUSER() {} - - virtual mfxStatus Register(mfxU32 type, const mfxPlugin *par) = 0; - virtual mfxStatus Unregister(mfxU32 type) = 0; - virtual mfxStatus ProcessFrameAsync(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp) = 0; - -protected: - mfxSession m_session; -}; - -//c++ wrapper over only 3 exposed functions from MFXVideoUSER module -class MFXVideoUSER: public MFXBaseUSER { -public: - explicit MFXVideoUSER(mfxSession session = NULL) - : MFXBaseUSER(session){} - - virtual mfxStatus Register(mfxU32 type, const mfxPlugin *par) { - return MFXVideoUSER_Register(m_session, type, par); - } - virtual mfxStatus Unregister(mfxU32 type) { - return MFXVideoUSER_Unregister(m_session, type); - } - virtual mfxStatus ProcessFrameAsync(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp) { - return MFXVideoUSER_ProcessFrameAsync(m_session, in, in_num, out, out_num, syncp); - } -}; - -//c++ wrapper over only 3 exposed functions from MFXAudioUSER module -class MFXAudioUSER: public MFXBaseUSER { -public: - explicit MFXAudioUSER(mfxSession session = NULL) - : MFXBaseUSER(session){} - - virtual mfxStatus Register(mfxU32 type, const mfxPlugin *par) { - return MFXAudioUSER_Register(m_session, type, par); - } - virtual mfxStatus Unregister(mfxU32 type) { - return MFXAudioUSER_Unregister(m_session, type); - } - virtual mfxStatus ProcessFrameAsync(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp) { - return MFXAudioUSER_ProcessFrameAsync(m_session, in, in_num, out, out_num, syncp); - } -}; - - -//initialize mfxPlugin struct -class MFXPluginParam { - mfxPluginParam m_param; - -public: - MFXPluginParam(mfxU32 CodecId, mfxU32 Type, mfxPluginUID uid, mfxThreadPolicy ThreadPolicy = MFX_THREADPOLICY_SERIAL, mfxU32 MaxThreadNum = 1) - : m_param() { - m_param.PluginUID = uid; - m_param.Type = Type; - m_param.CodecId = CodecId; - m_param.MaxThreadNum = MaxThreadNum; - m_param.ThreadPolicy = ThreadPolicy; - } - operator const mfxPluginParam& () const { - return m_param; - } - operator mfxPluginParam& () { - return m_param; - } -}; - -//common interface part for every plugin: decoder/encoder and generic -struct MFXPlugin -{ - virtual ~MFXPlugin() {}; - //init function always required for any transform or codec plugins, for codec plugins it maps to callback from MediaSDK - //for generic plugin application should call it - //MediaSDK mfxPlugin API mapping - virtual mfxStatus PluginInit(mfxCoreInterface *core) = 0; - //release CoreInterface, and destroy plugin state, not destroy plugin instance - virtual mfxStatus PluginClose() = 0; - virtual mfxStatus GetPluginParam(mfxPluginParam *par) = 0; - virtual mfxStatus Execute(mfxThreadTask task, mfxU32 uid_p, mfxU32 uid_a) = 0; - virtual mfxStatus FreeResources(mfxThreadTask task, mfxStatus sts) = 0; - //destroy plugin due to shared module distribution model plugin wont support virtual destructor - virtual void Release() = 0; - //release resources associated with current instance of plugin, but do not release CoreInterface related resource set in pluginInit - virtual mfxStatus Close() = 0; - //communication protocol between particular version of plugin and application - virtual mfxStatus SetAuxParams(void* auxParam, int auxParamSize) = 0; -}; - -//common extension interface that codec plugins should expose additionally to MFXPlugin -struct MFXCodecPlugin : MFXPlugin -{ - virtual mfxStatus Init(mfxVideoParam *par) = 0; - virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out) = 0; - virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) =0; - virtual mfxStatus Reset(mfxVideoParam *par) = 0; - virtual mfxStatus GetVideoParam(mfxVideoParam *par) = 0; -}; - -//common extension interface that audio codec plugins should expose additionally to MFXPlugin -struct MFXAudioCodecPlugin : MFXPlugin -{ - virtual mfxStatus Init(mfxAudioParam *par) = 0; - virtual mfxStatus Query(mfxAudioParam *in, mfxAudioParam *out) =0; - virtual mfxStatus QueryIOSize(mfxAudioParam *par, mfxAudioAllocRequest *request) = 0; - virtual mfxStatus Reset(mfxAudioParam *par) = 0; - virtual mfxStatus GetAudioParam(mfxAudioParam *par) = 0; -}; - -//general purpose transform plugin interface, not a codec plugin -struct MFXGenericPlugin : MFXPlugin -{ - virtual mfxStatus Init(mfxVideoParam *par) = 0; - virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out) = 0; - virtual mfxStatus Submit(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task) = 0; -}; - -//decoder plugins may only support this interface -struct MFXDecoderPlugin : MFXCodecPlugin -{ - virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxVideoParam *par) = 0; - virtual mfxStatus GetPayload(mfxU64 *ts, mfxPayload *payload) = 0; - virtual mfxStatus DecodeFrameSubmit(mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) = 0; -}; - -//audio decoder plugins may only support this interface -struct MFXAudioDecoderPlugin : MFXAudioCodecPlugin -{ - virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxAudioParam *par) = 0; -// virtual mfxStatus GetPayload(mfxU64 *ts, mfxPayload *payload) = 0; - virtual mfxStatus DecodeFrameSubmit(mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task) = 0; -}; - -//encoder plugins may only support this interface -struct MFXEncoderPlugin : MFXCodecPlugin -{ - virtual mfxStatus EncodeFrameSubmit(mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task) = 0; -}; - -//audio encoder plugins may only support this interface -struct MFXAudioEncoderPlugin : MFXAudioCodecPlugin -{ - virtual mfxStatus EncodeFrameSubmit(mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task) = 0; -}; - -//vpp plugins may only support this interface -struct MFXVPPPlugin : MFXCodecPlugin -{ - virtual mfxStatus VPPFrameSubmit(mfxFrameSurface1 *surface_in, mfxFrameSurface1 *surface_out, mfxExtVppAuxData *aux, mfxThreadTask *task) = 0; - virtual mfxStatus VPPFrameSubmitEx(mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) = 0; -}; - -struct MFXEncPlugin : MFXCodecPlugin -{ - virtual mfxStatus EncFrameSubmit(mfxENCInput *in, mfxENCOutput *out, mfxThreadTask *task) = 0; -}; - - - - -class MFXCoreInterface -{ -protected: - mfxCoreInterface m_core; -public: - - MFXCoreInterface() - : m_core() { - } - MFXCoreInterface(const mfxCoreInterface & pCore) - : m_core(pCore) { - } - - MFXCoreInterface(const MFXCoreInterface & that) - : m_core(that.m_core) { - } - MFXCoreInterface &operator = (const MFXCoreInterface & that) - { - m_core = that.m_core; - return *this; - } - bool IsCoreSet() { - return m_core.pthis != 0; - } - mfxStatus GetCoreParam(mfxCoreParam *par) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.GetCoreParam(m_core.pthis, par); - } - mfxStatus GetHandle (mfxHandleType type, mfxHDL *handle) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.GetHandle(m_core.pthis, type, handle); - } - mfxStatus IncreaseReference (mfxFrameData *fd) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.IncreaseReference(m_core.pthis, fd); - } - mfxStatus DecreaseReference (mfxFrameData *fd) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.DecreaseReference(m_core.pthis, fd); - } - mfxStatus CopyFrame (mfxFrameSurface1 *dst, mfxFrameSurface1 *src) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.CopyFrame(m_core.pthis, dst, src); - } - mfxStatus CopyBuffer(mfxU8 *dst, mfxU32 size, mfxFrameSurface1 *src) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.CopyBuffer(m_core.pthis, dst, size, src); - } - mfxStatus MapOpaqueSurface(mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.MapOpaqueSurface(m_core.pthis, num, type, op_surf); - } - mfxStatus UnmapOpaqueSurface(mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.UnmapOpaqueSurface(m_core.pthis, num, type, op_surf); - } - mfxStatus GetRealSurface(mfxFrameSurface1 *op_surf, mfxFrameSurface1 **surf) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.GetRealSurface(m_core.pthis, op_surf, surf); - } - mfxStatus GetOpaqueSurface(mfxFrameSurface1 *surf, mfxFrameSurface1 **op_surf) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.GetOpaqueSurface(m_core.pthis, surf, op_surf); - } - mfxStatus CreateAccelerationDevice(mfxHandleType type, mfxHDL *handle) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.CreateAccelerationDevice(m_core.pthis, type, handle); - } - mfxFrameAllocator & FrameAllocator() { - return m_core.FrameAllocator; - } - mfxStatus GetFrameHandle(mfxFrameData *fd, mfxHDL *handle) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.GetFrameHandle(m_core.pthis, fd, handle); - } - mfxStatus QueryPlatform(mfxPlatform *platform) { - if (!IsCoreSet()) { - return MFX_ERR_NULL_PTR; - } - return m_core.QueryPlatform(m_core.pthis, platform); - } -} ; - -/* Class adapter between "C" structure mfxPlugin and C++ interface MFXPlugin */ - -namespace detail -{ - template - class MFXPluginAdapterBase - { - protected: - mfxPlugin m_mfxAPI; - public: - MFXPluginAdapterBase( T *plugin, mfxVideoCodecPlugin *pCodec = NULL) - : m_mfxAPI() - { - SetupCallbacks(plugin, pCodec); - } - - MFXPluginAdapterBase( T *plugin, mfxAudioCodecPlugin *pCodec) - : m_mfxAPI() - { - SetupCallbacks(plugin, pCodec); - } - - operator mfxPlugin () const { - return m_mfxAPI; - } - void SetupCallbacks(T *plugin) { - m_mfxAPI.pthis = plugin; - m_mfxAPI.PluginInit = _PluginInit; - m_mfxAPI.PluginClose = _PluginClose; - m_mfxAPI.GetPluginParam = _GetPluginParam; - m_mfxAPI.Submit = 0; - m_mfxAPI.Execute = _Execute; - m_mfxAPI.FreeResources = _FreeResources; - } - - void SetupCallbacks( T *plugin, mfxVideoCodecPlugin *pCodec) { - SetupCallbacks(plugin); - m_mfxAPI.Video = pCodec; - } - - void SetupCallbacks( T *plugin, mfxAudioCodecPlugin *pCodec) { - SetupCallbacks(plugin); - m_mfxAPI.Audio = pCodec; - } - private: - - static mfxStatus _PluginInit(mfxHDL pthis, mfxCoreInterface *core) { - return reinterpret_cast(pthis)->PluginInit(core); - } - static mfxStatus _PluginClose(mfxHDL pthis) { - return reinterpret_cast(pthis)->PluginClose(); - } - static mfxStatus _GetPluginParam(mfxHDL pthis, mfxPluginParam *par) { - return reinterpret_cast(pthis)->GetPluginParam(par); - } - static mfxStatus _Execute(mfxHDL pthis, mfxThreadTask task, mfxU32 thread_id, mfxU32 call_count) { - return reinterpret_cast(pthis)->Execute(task, thread_id, call_count); - } - static mfxStatus _FreeResources(mfxHDL pthis, mfxThreadTask task, mfxStatus sts) { - return reinterpret_cast(pthis)->FreeResources(task, sts); - } - }; - - template - class MFXCodecPluginAdapterBase : public MFXPluginAdapterBase - { - protected: - //stub to feed mediasdk plugin API - mfxVideoCodecPlugin m_codecPlg; - public: - MFXCodecPluginAdapterBase(T * pCodecPlg) - : MFXPluginAdapterBase(pCodecPlg, &m_codecPlg) - , m_codecPlg() - { - m_codecPlg.Query = _Query; - m_codecPlg.QueryIOSurf = _QueryIOSurf ; - m_codecPlg.Init = _Init; - m_codecPlg.Reset = _Reset; - m_codecPlg.Close = _Close; - m_codecPlg.GetVideoParam = _GetVideoParam; - } - MFXCodecPluginAdapterBase(const MFXCodecPluginAdapterBase & that) - : MFXPluginAdapterBase(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg) - , m_codecPlg() { - SetupCallbacks(); - } - MFXCodecPluginAdapterBase& operator = (const MFXCodecPluginAdapterBase & that) { - MFXPluginAdapterBase :: SetupCallbacks(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg); - SetupCallbacks(); - return *this; - } - - private: - void SetupCallbacks() { - m_codecPlg.Query = _Query; - m_codecPlg.QueryIOSurf = _QueryIOSurf ; - m_codecPlg.Init = _Init; - m_codecPlg.Reset = _Reset; - m_codecPlg.Close = _Close; - m_codecPlg.GetVideoParam = _GetVideoParam; - } - static mfxStatus _Query(mfxHDL pthis, mfxVideoParam *in, mfxVideoParam *out) { - return reinterpret_cast(pthis)->Query(in, out); - } - static mfxStatus _QueryIOSurf(mfxHDL pthis, mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out){ - return reinterpret_cast(pthis)->QueryIOSurf(par, in, out); - } - static mfxStatus _Init(mfxHDL pthis, mfxVideoParam *par){ - return reinterpret_cast(pthis)->Init(par); - } - static mfxStatus _Reset(mfxHDL pthis, mfxVideoParam *par){ - return reinterpret_cast(pthis)->Reset(par); - } - static mfxStatus _Close(mfxHDL pthis) { - return reinterpret_cast(pthis)->Close(); - } - static mfxStatus _GetVideoParam(mfxHDL pthis, mfxVideoParam *par) { - return reinterpret_cast(pthis)->GetVideoParam(par); - } - }; - - template - class MFXAudioCodecPluginAdapterBase : public MFXPluginAdapterBase - { - protected: - //stub to feed mediasdk plugin API - mfxAudioCodecPlugin m_codecPlg; - public: - MFXAudioCodecPluginAdapterBase(T * pCodecPlg) - : MFXPluginAdapterBase(pCodecPlg, &m_codecPlg) - , m_codecPlg() - { - m_codecPlg.Query = _Query; - m_codecPlg.QueryIOSize = _QueryIOSize ; - m_codecPlg.Init = _Init; - m_codecPlg.Reset = _Reset; - m_codecPlg.Close = _Close; - m_codecPlg.GetAudioParam = _GetAudioParam; - } - MFXAudioCodecPluginAdapterBase(const MFXCodecPluginAdapterBase & that) - : MFXPluginAdapterBase(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg) - , m_codecPlg() { - SetupCallbacks(); - } - MFXAudioCodecPluginAdapterBase& operator = (const MFXAudioCodecPluginAdapterBase & that) { - MFXPluginAdapterBase :: SetupCallbacks(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg); - SetupCallbacks(); - return *this; - } - - private: - void SetupCallbacks() { - m_codecPlg.Query = _Query; - m_codecPlg.QueryIOSize = _QueryIOSize; - m_codecPlg.Init = _Init; - m_codecPlg.Reset = _Reset; - m_codecPlg.Close = _Close; - m_codecPlg.GetAudioParam = _GetAudioParam; - } - static mfxStatus _Query(mfxHDL pthis, mfxAudioParam *in, mfxAudioParam *out) { - return reinterpret_cast(pthis)->Query(in, out); - } - static mfxStatus _QueryIOSize(mfxHDL pthis, mfxAudioParam *par, mfxAudioAllocRequest *request){ - return reinterpret_cast(pthis)->QueryIOSize(par, request); - } - static mfxStatus _Init(mfxHDL pthis, mfxAudioParam *par){ - return reinterpret_cast(pthis)->Init(par); - } - static mfxStatus _Reset(mfxHDL pthis, mfxAudioParam *par){ - return reinterpret_cast(pthis)->Reset(par); - } - static mfxStatus _Close(mfxHDL pthis) { - return reinterpret_cast(pthis)->Close(); - } - static mfxStatus _GetAudioParam(mfxHDL pthis, mfxAudioParam *par) { - return reinterpret_cast(pthis)->GetAudioParam(par); - } - }; - - template - struct MFXPluginAdapterInternal{}; - template<> - class MFXPluginAdapterInternal : public MFXPluginAdapterBase - { - public: - MFXPluginAdapterInternal(MFXGenericPlugin *pPlugin) - : MFXPluginAdapterBase(pPlugin) - { - m_mfxAPI.Submit = _Submit; - } - MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that ) - : MFXPluginAdapterBase(that) { - m_mfxAPI.Submit = that._Submit; - } - MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { - MFXPluginAdapterBase::operator=(that); - m_mfxAPI.Submit = that._Submit; - return *this; - } - - private: - static mfxStatus _Submit(mfxHDL pthis, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task) { - return reinterpret_cast(pthis)->Submit(in, in_num, out, out_num, task); - } - }; - - template<> - class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase - { - public: - MFXPluginAdapterInternal(MFXDecoderPlugin *pPlugin) - : MFXCodecPluginAdapterBase(pPlugin) - { - SetupCallbacks(); - } - - MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) - : MFXCodecPluginAdapterBase(that) { - SetupCallbacks(); - } - - MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { - MFXCodecPluginAdapterBase::operator=(that); - SetupCallbacks(); - return *this; - } - - private: - void SetupCallbacks() { - m_codecPlg.DecodeHeader = _DecodeHeader; - m_codecPlg.GetPayload = _GetPayload; - m_codecPlg.DecodeFrameSubmit = _DecodeFrameSubmit; - } - static mfxStatus _DecodeHeader(mfxHDL pthis, mfxBitstream *bs, mfxVideoParam *par) { - return reinterpret_cast(pthis)->DecodeHeader(bs, par); - } - static mfxStatus _GetPayload(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload) { - return reinterpret_cast(pthis)->GetPayload(ts, payload); - } - static mfxStatus _DecodeFrameSubmit(mfxHDL pthis, mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) { - return reinterpret_cast(pthis)->DecodeFrameSubmit(bs, surface_work, surface_out, task); - } - }; - - template<> - class MFXPluginAdapterInternal : public MFXAudioCodecPluginAdapterBase - { - public: - MFXPluginAdapterInternal(MFXAudioDecoderPlugin *pPlugin) - : MFXAudioCodecPluginAdapterBase(pPlugin) - { - SetupCallbacks(); - } - - MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) - : MFXAudioCodecPluginAdapterBase(that) { - SetupCallbacks(); - } - - MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { - MFXAudioCodecPluginAdapterBase::operator=(that); - SetupCallbacks(); - return *this; - } - - private: - void SetupCallbacks() { - m_codecPlg.DecodeHeader = _DecodeHeader; - m_codecPlg.DecodeFrameSubmit = _DecodeFrameSubmit; - } - static mfxStatus _DecodeHeader(mfxHDL pthis, mfxBitstream *bs, mfxAudioParam *par) { - return reinterpret_cast(pthis)->DecodeHeader(bs, par); - } - static mfxStatus _DecodeFrameSubmit(mfxHDL pthis, mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task) { - return reinterpret_cast(pthis)->DecodeFrameSubmit(in, out, task); - } - }; - - template<> - class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase - { - public: - MFXPluginAdapterInternal(MFXEncoderPlugin *pPlugin) - : MFXCodecPluginAdapterBase(pPlugin) - { - m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; - } - MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) - : MFXCodecPluginAdapterBase(that) { - m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; - } - - MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { - MFXCodecPluginAdapterBase::operator = (that); - m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; - return *this; - } - - private: - static mfxStatus _EncodeFrameSubmit(mfxHDL pthis, mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task) { - return reinterpret_cast(pthis)->EncodeFrameSubmit(ctrl, surface, bs, task); - } - }; - - template<> - class MFXPluginAdapterInternal : public MFXAudioCodecPluginAdapterBase - { - public: - MFXPluginAdapterInternal(MFXAudioEncoderPlugin *pPlugin) - : MFXAudioCodecPluginAdapterBase(pPlugin) - { - SetupCallbacks(); - } - - MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) - : MFXAudioCodecPluginAdapterBase(that) { - SetupCallbacks(); - } - - MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { - MFXAudioCodecPluginAdapterBase::operator=(that); - SetupCallbacks(); - return *this; - } - - private: - void SetupCallbacks() { - m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; - } - static mfxStatus _EncodeFrameSubmit(mfxHDL pthis, mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task) { - return reinterpret_cast(pthis)->EncodeFrameSubmit(aFrame, out, task); - } - }; - - template<> - class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase - { - public: - MFXPluginAdapterInternal(MFXEncPlugin *pPlugin) - : MFXCodecPluginAdapterBase(pPlugin) - { - m_codecPlg.ENCFrameSubmit = _ENCFrameSubmit; - } - MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) - : MFXCodecPluginAdapterBase(that) { - m_codecPlg.ENCFrameSubmit = _ENCFrameSubmit; - } - - MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { - MFXCodecPluginAdapterBase::operator = (that); - m_codecPlg.ENCFrameSubmit = _ENCFrameSubmit; - return *this; - } - - private: - static mfxStatus _ENCFrameSubmit(mfxHDL pthis,mfxENCInput *in, mfxENCOutput *out, mfxThreadTask *task) { - return reinterpret_cast(pthis)->EncFrameSubmit(in, out, task); - } - }; - - - template<> - class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase - { - public: - MFXPluginAdapterInternal(MFXVPPPlugin *pPlugin) - : MFXCodecPluginAdapterBase(pPlugin) - { - SetupCallbacks(); - } - MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) - : MFXCodecPluginAdapterBase(that) { - SetupCallbacks(); - } - - MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { - MFXCodecPluginAdapterBase::operator = (that); - SetupCallbacks(); - return *this; - } - - private: - void SetupCallbacks() { - m_codecPlg.VPPFrameSubmit = _VPPFrameSubmit; - m_codecPlg.VPPFrameSubmitEx = _VPPFrameSubmitEx; - } - static mfxStatus _VPPFrameSubmit(mfxHDL pthis, mfxFrameSurface1 *surface_in, mfxFrameSurface1 *surface_out, mfxExtVppAuxData *aux, mfxThreadTask *task) { - return reinterpret_cast(pthis)->VPPFrameSubmit(surface_in, surface_out, aux, task); - } - static mfxStatus _VPPFrameSubmitEx(mfxHDL pthis, mfxFrameSurface1 *surface_in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) { - return reinterpret_cast(pthis)->VPPFrameSubmitEx(surface_in, surface_work, surface_out, task); - } - }; -} - -/* adapter for particular plugin type*/ -template -class MFXPluginAdapter -{ -public: - detail::MFXPluginAdapterInternal m_Adapter; - - operator mfxPlugin () const { - return m_Adapter.operator mfxPlugin(); - } - - MFXPluginAdapter(T* pPlugin = NULL) - : m_Adapter(pPlugin) - { - } -}; - -template -inline MFXPluginAdapter make_mfx_plugin_adapter(T* pPlugin) { - - MFXPluginAdapter adapt(pPlugin); - return adapt; -} - -#endif // __MFXPLUGINPLUSPLUS_H +// Copyright (c) 2017-2020 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#ifndef __MFXPLUGINPLUSPLUS_H +#define __MFXPLUGINPLUSPLUS_H + +#include "mfxplugin.h" + +// base class for MFXVideoUSER/MFXAudioUSER API + +class MFXBaseUSER { +public: + explicit MFXBaseUSER(mfxSession session = NULL) + : m_session(session){} + + virtual ~MFXBaseUSER() {} + + virtual mfxStatus Register(mfxU32 type, const mfxPlugin *par) = 0; + virtual mfxStatus Unregister(mfxU32 type) = 0; + virtual mfxStatus ProcessFrameAsync(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp) = 0; + +protected: + mfxSession m_session; +}; + +//c++ wrapper over only 3 exposed functions from MFXVideoUSER module +class MFXVideoUSER: public MFXBaseUSER { +public: + explicit MFXVideoUSER(mfxSession session = NULL) + : MFXBaseUSER(session){} + + virtual mfxStatus Register(mfxU32 type, const mfxPlugin *par) { + return MFXVideoUSER_Register(m_session, type, par); + } + virtual mfxStatus Unregister(mfxU32 type) { + return MFXVideoUSER_Unregister(m_session, type); + } + virtual mfxStatus ProcessFrameAsync(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp) { + return MFXVideoUSER_ProcessFrameAsync(m_session, in, in_num, out, out_num, syncp); + } +}; + +//c++ wrapper over only 3 exposed functions from MFXAudioUSER module +class MFXAudioUSER: public MFXBaseUSER { +public: + explicit MFXAudioUSER(mfxSession session = NULL) + : MFXBaseUSER(session){} + + virtual mfxStatus Register(mfxU32 type, const mfxPlugin *par) { + return MFXAudioUSER_Register(m_session, type, par); + } + virtual mfxStatus Unregister(mfxU32 type) { + return MFXAudioUSER_Unregister(m_session, type); + } + virtual mfxStatus ProcessFrameAsync(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp) { + return MFXAudioUSER_ProcessFrameAsync(m_session, in, in_num, out, out_num, syncp); + } +}; + + +//initialize mfxPlugin struct +class MFXPluginParam { + mfxPluginParam m_param; + +public: + MFXPluginParam(mfxU32 CodecId, mfxU32 Type, mfxPluginUID uid, mfxThreadPolicy ThreadPolicy = MFX_THREADPOLICY_SERIAL, mfxU32 MaxThreadNum = 1) + : m_param() { + m_param.PluginUID = uid; + m_param.Type = Type; + m_param.CodecId = CodecId; + m_param.MaxThreadNum = MaxThreadNum; + m_param.ThreadPolicy = ThreadPolicy; + } + operator const mfxPluginParam& () const { + return m_param; + } + operator mfxPluginParam& () { + return m_param; + } +}; + +//common interface part for every plugin: decoder/encoder and generic +struct MFXPlugin +{ + virtual ~MFXPlugin() {}; + //init function always required for any transform or codec plugins, for codec plugins it maps to callback from MediaSDK + //for generic plugin application should call it + //MediaSDK mfxPlugin API mapping + virtual mfxStatus PluginInit(mfxCoreInterface *core) = 0; + //release CoreInterface, and destroy plugin state, not destroy plugin instance + virtual mfxStatus PluginClose() = 0; + virtual mfxStatus GetPluginParam(mfxPluginParam *par) = 0; + virtual mfxStatus Execute(mfxThreadTask task, mfxU32 uid_p, mfxU32 uid_a) = 0; + virtual mfxStatus FreeResources(mfxThreadTask task, mfxStatus sts) = 0; + //destroy plugin due to shared module distribution model plugin wont support virtual destructor + virtual void Release() = 0; + //release resources associated with current instance of plugin, but do not release CoreInterface related resource set in pluginInit + virtual mfxStatus Close() = 0; + //communication protocol between particular version of plugin and application + virtual mfxStatus SetAuxParams(void* auxParam, int auxParamSize) = 0; +}; + +//common extension interface that codec plugins should expose additionally to MFXPlugin +struct MFXCodecPlugin : MFXPlugin +{ + virtual mfxStatus Init(mfxVideoParam *par) = 0; + virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out) = 0; + virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) =0; + virtual mfxStatus Reset(mfxVideoParam *par) = 0; + virtual mfxStatus GetVideoParam(mfxVideoParam *par) = 0; +}; + +//common extension interface that audio codec plugins should expose additionally to MFXPlugin +struct MFXAudioCodecPlugin : MFXPlugin +{ + virtual mfxStatus Init(mfxAudioParam *par) = 0; + virtual mfxStatus Query(mfxAudioParam *in, mfxAudioParam *out) =0; + virtual mfxStatus QueryIOSize(mfxAudioParam *par, mfxAudioAllocRequest *request) = 0; + virtual mfxStatus Reset(mfxAudioParam *par) = 0; + virtual mfxStatus GetAudioParam(mfxAudioParam *par) = 0; +}; + +//general purpose transform plugin interface, not a codec plugin +struct MFXGenericPlugin : MFXPlugin +{ + virtual mfxStatus Init(mfxVideoParam *par) = 0; + virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out) = 0; + virtual mfxStatus Submit(const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task) = 0; +}; + +//decoder plugins may only support this interface +struct MFXDecoderPlugin : MFXCodecPlugin +{ + virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxVideoParam *par) = 0; + virtual mfxStatus GetPayload(mfxU64 *ts, mfxPayload *payload) = 0; + virtual mfxStatus DecodeFrameSubmit(mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) = 0; +}; + +//audio decoder plugins may only support this interface +struct MFXAudioDecoderPlugin : MFXAudioCodecPlugin +{ + virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxAudioParam *par) = 0; +// virtual mfxStatus GetPayload(mfxU64 *ts, mfxPayload *payload) = 0; + virtual mfxStatus DecodeFrameSubmit(mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task) = 0; +}; + +//encoder plugins may only support this interface +struct MFXEncoderPlugin : MFXCodecPlugin +{ + virtual mfxStatus EncodeFrameSubmit(mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task) = 0; +}; + +//audio encoder plugins may only support this interface +struct MFXAudioEncoderPlugin : MFXAudioCodecPlugin +{ + virtual mfxStatus EncodeFrameSubmit(mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task) = 0; +}; + +//vpp plugins may only support this interface +struct MFXVPPPlugin : MFXCodecPlugin +{ + virtual mfxStatus VPPFrameSubmit(mfxFrameSurface1 *surface_in, mfxFrameSurface1 *surface_out, mfxExtVppAuxData *aux, mfxThreadTask *task) = 0; + virtual mfxStatus VPPFrameSubmitEx(mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) = 0; +}; + +struct MFXEncPlugin : MFXCodecPlugin +{ + virtual mfxStatus EncFrameSubmit(mfxENCInput *in, mfxENCOutput *out, mfxThreadTask *task) = 0; +}; + + + + +class MFXCoreInterface +{ +protected: + mfxCoreInterface m_core; +public: + + MFXCoreInterface() + : m_core() { + } + MFXCoreInterface(const mfxCoreInterface & pCore) + : m_core(pCore) { + } + + MFXCoreInterface(const MFXCoreInterface & that) + : m_core(that.m_core) { + } + MFXCoreInterface &operator = (const MFXCoreInterface & that) + { + m_core = that.m_core; + return *this; + } + bool IsCoreSet() { + return m_core.pthis != 0; + } + mfxStatus GetCoreParam(mfxCoreParam *par) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.GetCoreParam(m_core.pthis, par); + } + mfxStatus GetHandle (mfxHandleType type, mfxHDL *handle) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.GetHandle(m_core.pthis, type, handle); + } + mfxStatus IncreaseReference (mfxFrameData *fd) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.IncreaseReference(m_core.pthis, fd); + } + mfxStatus DecreaseReference (mfxFrameData *fd) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.DecreaseReference(m_core.pthis, fd); + } + mfxStatus CopyFrame (mfxFrameSurface1 *dst, mfxFrameSurface1 *src) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.CopyFrame(m_core.pthis, dst, src); + } + mfxStatus CopyBuffer(mfxU8 *dst, mfxU32 size, mfxFrameSurface1 *src) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.CopyBuffer(m_core.pthis, dst, size, src); + } + mfxStatus MapOpaqueSurface(mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.MapOpaqueSurface(m_core.pthis, num, type, op_surf); + } + mfxStatus UnmapOpaqueSurface(mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.UnmapOpaqueSurface(m_core.pthis, num, type, op_surf); + } + mfxStatus GetRealSurface(mfxFrameSurface1 *op_surf, mfxFrameSurface1 **surf) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.GetRealSurface(m_core.pthis, op_surf, surf); + } + mfxStatus GetOpaqueSurface(mfxFrameSurface1 *surf, mfxFrameSurface1 **op_surf) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.GetOpaqueSurface(m_core.pthis, surf, op_surf); + } + mfxStatus CreateAccelerationDevice(mfxHandleType type, mfxHDL *handle) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.CreateAccelerationDevice(m_core.pthis, type, handle); + } + mfxFrameAllocator & FrameAllocator() { + return m_core.FrameAllocator; + } + mfxStatus GetFrameHandle(mfxFrameData *fd, mfxHDL *handle) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.GetFrameHandle(m_core.pthis, fd, handle); + } + mfxStatus QueryPlatform(mfxPlatform *platform) { + if (!IsCoreSet()) { + return MFX_ERR_NULL_PTR; + } + return m_core.QueryPlatform(m_core.pthis, platform); + } +} ; + +/* Class adapter between "C" structure mfxPlugin and C++ interface MFXPlugin */ + +namespace detail +{ + template + class MFXPluginAdapterBase + { + protected: + mfxPlugin m_mfxAPI; + public: + MFXPluginAdapterBase( T *plugin, mfxVideoCodecPlugin *pCodec = NULL) + : m_mfxAPI() + { + SetupCallbacks(plugin, pCodec); + } + + MFXPluginAdapterBase( T *plugin, mfxAudioCodecPlugin *pCodec) + : m_mfxAPI() + { + SetupCallbacks(plugin, pCodec); + } + + operator mfxPlugin () const { + return m_mfxAPI; + } + void SetupCallbacks(T *plugin) { + m_mfxAPI.pthis = plugin; + m_mfxAPI.PluginInit = _PluginInit; + m_mfxAPI.PluginClose = _PluginClose; + m_mfxAPI.GetPluginParam = _GetPluginParam; + m_mfxAPI.Submit = 0; + m_mfxAPI.Execute = _Execute; + m_mfxAPI.FreeResources = _FreeResources; + } + + void SetupCallbacks( T *plugin, mfxVideoCodecPlugin *pCodec) { + SetupCallbacks(plugin); + m_mfxAPI.Video = pCodec; + } + + void SetupCallbacks( T *plugin, mfxAudioCodecPlugin *pCodec) { + SetupCallbacks(plugin); + m_mfxAPI.Audio = pCodec; + } + private: + + static mfxStatus _PluginInit(mfxHDL pthis, mfxCoreInterface *core) { + return reinterpret_cast(pthis)->PluginInit(core); + } + static mfxStatus _PluginClose(mfxHDL pthis) { + return reinterpret_cast(pthis)->PluginClose(); + } + static mfxStatus _GetPluginParam(mfxHDL pthis, mfxPluginParam *par) { + return reinterpret_cast(pthis)->GetPluginParam(par); + } + static mfxStatus _Execute(mfxHDL pthis, mfxThreadTask task, mfxU32 thread_id, mfxU32 call_count) { + return reinterpret_cast(pthis)->Execute(task, thread_id, call_count); + } + static mfxStatus _FreeResources(mfxHDL pthis, mfxThreadTask task, mfxStatus sts) { + return reinterpret_cast(pthis)->FreeResources(task, sts); + } + }; + + template + class MFXCodecPluginAdapterBase : public MFXPluginAdapterBase + { + protected: + //stub to feed mediasdk plugin API + mfxVideoCodecPlugin m_codecPlg; + public: + MFXCodecPluginAdapterBase(T * pCodecPlg) + : MFXPluginAdapterBase(pCodecPlg, &m_codecPlg) + , m_codecPlg() + { + m_codecPlg.Query = _Query; + m_codecPlg.QueryIOSurf = _QueryIOSurf ; + m_codecPlg.Init = _Init; + m_codecPlg.Reset = _Reset; + m_codecPlg.Close = _Close; + m_codecPlg.GetVideoParam = _GetVideoParam; + } + MFXCodecPluginAdapterBase(const MFXCodecPluginAdapterBase & that) + : MFXPluginAdapterBase(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg) + , m_codecPlg() { + SetupCallbacks(); + } + MFXCodecPluginAdapterBase& operator = (const MFXCodecPluginAdapterBase & that) { + MFXPluginAdapterBase :: SetupCallbacks(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg); + SetupCallbacks(); + return *this; + } + + private: + void SetupCallbacks() { + m_codecPlg.Query = _Query; + m_codecPlg.QueryIOSurf = _QueryIOSurf ; + m_codecPlg.Init = _Init; + m_codecPlg.Reset = _Reset; + m_codecPlg.Close = _Close; + m_codecPlg.GetVideoParam = _GetVideoParam; + } + static mfxStatus _Query(mfxHDL pthis, mfxVideoParam *in, mfxVideoParam *out) { + return reinterpret_cast(pthis)->Query(in, out); + } + static mfxStatus _QueryIOSurf(mfxHDL pthis, mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out){ + return reinterpret_cast(pthis)->QueryIOSurf(par, in, out); + } + static mfxStatus _Init(mfxHDL pthis, mfxVideoParam *par){ + return reinterpret_cast(pthis)->Init(par); + } + static mfxStatus _Reset(mfxHDL pthis, mfxVideoParam *par){ + return reinterpret_cast(pthis)->Reset(par); + } + static mfxStatus _Close(mfxHDL pthis) { + return reinterpret_cast(pthis)->Close(); + } + static mfxStatus _GetVideoParam(mfxHDL pthis, mfxVideoParam *par) { + return reinterpret_cast(pthis)->GetVideoParam(par); + } + }; + + template + class MFXAudioCodecPluginAdapterBase : public MFXPluginAdapterBase + { + protected: + //stub to feed mediasdk plugin API + mfxAudioCodecPlugin m_codecPlg; + public: + MFXAudioCodecPluginAdapterBase(T * pCodecPlg) + : MFXPluginAdapterBase(pCodecPlg, &m_codecPlg) + , m_codecPlg() + { + m_codecPlg.Query = _Query; + m_codecPlg.QueryIOSize = _QueryIOSize ; + m_codecPlg.Init = _Init; + m_codecPlg.Reset = _Reset; + m_codecPlg.Close = _Close; + m_codecPlg.GetAudioParam = _GetAudioParam; + } + MFXAudioCodecPluginAdapterBase(const MFXCodecPluginAdapterBase & that) + : MFXPluginAdapterBase(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg) + , m_codecPlg() { + SetupCallbacks(); + } + MFXAudioCodecPluginAdapterBase& operator = (const MFXAudioCodecPluginAdapterBase & that) { + MFXPluginAdapterBase :: SetupCallbacks(reinterpret_cast(that.m_mfxAPI.pthis), &m_codecPlg); + SetupCallbacks(); + return *this; + } + + private: + void SetupCallbacks() { + m_codecPlg.Query = _Query; + m_codecPlg.QueryIOSize = _QueryIOSize; + m_codecPlg.Init = _Init; + m_codecPlg.Reset = _Reset; + m_codecPlg.Close = _Close; + m_codecPlg.GetAudioParam = _GetAudioParam; + } + static mfxStatus _Query(mfxHDL pthis, mfxAudioParam *in, mfxAudioParam *out) { + return reinterpret_cast(pthis)->Query(in, out); + } + static mfxStatus _QueryIOSize(mfxHDL pthis, mfxAudioParam *par, mfxAudioAllocRequest *request){ + return reinterpret_cast(pthis)->QueryIOSize(par, request); + } + static mfxStatus _Init(mfxHDL pthis, mfxAudioParam *par){ + return reinterpret_cast(pthis)->Init(par); + } + static mfxStatus _Reset(mfxHDL pthis, mfxAudioParam *par){ + return reinterpret_cast(pthis)->Reset(par); + } + static mfxStatus _Close(mfxHDL pthis) { + return reinterpret_cast(pthis)->Close(); + } + static mfxStatus _GetAudioParam(mfxHDL pthis, mfxAudioParam *par) { + return reinterpret_cast(pthis)->GetAudioParam(par); + } + }; + + template + struct MFXPluginAdapterInternal{}; + template<> + class MFXPluginAdapterInternal : public MFXPluginAdapterBase + { + public: + MFXPluginAdapterInternal(MFXGenericPlugin *pPlugin) + : MFXPluginAdapterBase(pPlugin) + { + m_mfxAPI.Submit = _Submit; + } + MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that ) + : MFXPluginAdapterBase(that) { + m_mfxAPI.Submit = that._Submit; + } + MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { + MFXPluginAdapterBase::operator=(that); + m_mfxAPI.Submit = that._Submit; + return *this; + } + + private: + static mfxStatus _Submit(mfxHDL pthis, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task) { + return reinterpret_cast(pthis)->Submit(in, in_num, out, out_num, task); + } + }; + + template<> + class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase + { + public: + MFXPluginAdapterInternal(MFXDecoderPlugin *pPlugin) + : MFXCodecPluginAdapterBase(pPlugin) + { + SetupCallbacks(); + } + + MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) + : MFXCodecPluginAdapterBase(that) { + SetupCallbacks(); + } + + MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { + MFXCodecPluginAdapterBase::operator=(that); + SetupCallbacks(); + return *this; + } + + private: + void SetupCallbacks() { + m_codecPlg.DecodeHeader = _DecodeHeader; + m_codecPlg.GetPayload = _GetPayload; + m_codecPlg.DecodeFrameSubmit = _DecodeFrameSubmit; + } + static mfxStatus _DecodeHeader(mfxHDL pthis, mfxBitstream *bs, mfxVideoParam *par) { + return reinterpret_cast(pthis)->DecodeHeader(bs, par); + } + static mfxStatus _GetPayload(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload) { + return reinterpret_cast(pthis)->GetPayload(ts, payload); + } + static mfxStatus _DecodeFrameSubmit(mfxHDL pthis, mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) { + return reinterpret_cast(pthis)->DecodeFrameSubmit(bs, surface_work, surface_out, task); + } + }; + + template<> + class MFXPluginAdapterInternal : public MFXAudioCodecPluginAdapterBase + { + public: + MFXPluginAdapterInternal(MFXAudioDecoderPlugin *pPlugin) + : MFXAudioCodecPluginAdapterBase(pPlugin) + { + SetupCallbacks(); + } + + MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) + : MFXAudioCodecPluginAdapterBase(that) { + SetupCallbacks(); + } + + MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { + MFXAudioCodecPluginAdapterBase::operator=(that); + SetupCallbacks(); + return *this; + } + + private: + void SetupCallbacks() { + m_codecPlg.DecodeHeader = _DecodeHeader; + m_codecPlg.DecodeFrameSubmit = _DecodeFrameSubmit; + } + static mfxStatus _DecodeHeader(mfxHDL pthis, mfxBitstream *bs, mfxAudioParam *par) { + return reinterpret_cast(pthis)->DecodeHeader(bs, par); + } + static mfxStatus _DecodeFrameSubmit(mfxHDL pthis, mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task) { + return reinterpret_cast(pthis)->DecodeFrameSubmit(in, out, task); + } + }; + + template<> + class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase + { + public: + MFXPluginAdapterInternal(MFXEncoderPlugin *pPlugin) + : MFXCodecPluginAdapterBase(pPlugin) + { + m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; + } + MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) + : MFXCodecPluginAdapterBase(that) { + m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; + } + + MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { + MFXCodecPluginAdapterBase::operator = (that); + m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; + return *this; + } + + private: + static mfxStatus _EncodeFrameSubmit(mfxHDL pthis, mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task) { + return reinterpret_cast(pthis)->EncodeFrameSubmit(ctrl, surface, bs, task); + } + }; + + template<> + class MFXPluginAdapterInternal : public MFXAudioCodecPluginAdapterBase + { + public: + MFXPluginAdapterInternal(MFXAudioEncoderPlugin *pPlugin) + : MFXAudioCodecPluginAdapterBase(pPlugin) + { + SetupCallbacks(); + } + + MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) + : MFXAudioCodecPluginAdapterBase(that) { + SetupCallbacks(); + } + + MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { + MFXAudioCodecPluginAdapterBase::operator=(that); + SetupCallbacks(); + return *this; + } + + private: + void SetupCallbacks() { + m_codecPlg.EncodeFrameSubmit = _EncodeFrameSubmit; + } + static mfxStatus _EncodeFrameSubmit(mfxHDL pthis, mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task) { + return reinterpret_cast(pthis)->EncodeFrameSubmit(aFrame, out, task); + } + }; + + template<> + class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase + { + public: + MFXPluginAdapterInternal(MFXEncPlugin *pPlugin) + : MFXCodecPluginAdapterBase(pPlugin) + { + m_codecPlg.ENCFrameSubmit = _ENCFrameSubmit; + } + MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) + : MFXCodecPluginAdapterBase(that) { + m_codecPlg.ENCFrameSubmit = _ENCFrameSubmit; + } + + MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { + MFXCodecPluginAdapterBase::operator = (that); + m_codecPlg.ENCFrameSubmit = _ENCFrameSubmit; + return *this; + } + + private: + static mfxStatus _ENCFrameSubmit(mfxHDL pthis,mfxENCInput *in, mfxENCOutput *out, mfxThreadTask *task) { + return reinterpret_cast(pthis)->EncFrameSubmit(in, out, task); + } + }; + + + template<> + class MFXPluginAdapterInternal : public MFXCodecPluginAdapterBase + { + public: + MFXPluginAdapterInternal(MFXVPPPlugin *pPlugin) + : MFXCodecPluginAdapterBase(pPlugin) + { + SetupCallbacks(); + } + MFXPluginAdapterInternal(const MFXPluginAdapterInternal & that) + : MFXCodecPluginAdapterBase(that) { + SetupCallbacks(); + } + + MFXPluginAdapterInternal& operator = (const MFXPluginAdapterInternal & that) { + MFXCodecPluginAdapterBase::operator = (that); + SetupCallbacks(); + return *this; + } + + private: + void SetupCallbacks() { + m_codecPlg.VPPFrameSubmit = _VPPFrameSubmit; + m_codecPlg.VPPFrameSubmitEx = _VPPFrameSubmitEx; + } + static mfxStatus _VPPFrameSubmit(mfxHDL pthis, mfxFrameSurface1 *surface_in, mfxFrameSurface1 *surface_out, mfxExtVppAuxData *aux, mfxThreadTask *task) { + return reinterpret_cast(pthis)->VPPFrameSubmit(surface_in, surface_out, aux, task); + } + static mfxStatus _VPPFrameSubmitEx(mfxHDL pthis, mfxFrameSurface1 *surface_in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task) { + return reinterpret_cast(pthis)->VPPFrameSubmitEx(surface_in, surface_work, surface_out, task); + } + }; +} + +/* adapter for particular plugin type*/ +template +class MFXPluginAdapter +{ +public: + detail::MFXPluginAdapterInternal m_Adapter; + + operator mfxPlugin () const { + return m_Adapter.operator mfxPlugin(); + } + + MFXPluginAdapter(T* pPlugin = NULL) + : m_Adapter(pPlugin) + { + } +}; + +template +inline MFXPluginAdapter make_mfx_plugin_adapter(T* pPlugin) { + + MFXPluginAdapter adapt(pPlugin); + return adapt; +} + +#endif // __MFXPLUGINPLUSPLUS_H diff --git a/.github/actions/libmfx/include/mfx/mfxplugin.h b/.github/actions/libmfx/include/mfx/mfxplugin.h index 58ddd6f..085cda7 100644 --- a/.github/actions/libmfx/include/mfx/mfxplugin.h +++ b/.github/actions/libmfx/include/mfx/mfxplugin.h @@ -1,216 +1,227 @@ -// Copyright (c) 2018-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXPLUGIN_H__ -#define __MFXPLUGIN_H__ -#include "mfxvideo.h" -#include "mfxaudio.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU8 Data[16]; -} mfxPluginUID; -MFX_PACK_END() - -static const mfxPluginUID MFX_PLUGINID_HEVCD_SW = {{0x15, 0xdd, 0x93, 0x68, 0x25, 0xad, 0x47, 0x5e, 0xa3, 0x4e, 0x35, 0xf3, 0xf5, 0x42, 0x17, 0xa6}}; -static const mfxPluginUID MFX_PLUGINID_HEVCD_HW = {{0x33, 0xa6, 0x1c, 0x0b, 0x4c, 0x27, 0x45, 0x4c, 0xa8, 0xd8, 0x5d, 0xde, 0x75, 0x7c, 0x6f, 0x8e}}; -static const mfxPluginUID MFX_PLUGINID_HEVCE_SW = {{0x2f, 0xca, 0x99, 0x74, 0x9f, 0xdb, 0x49, 0xae, 0xb1, 0x21, 0xa5, 0xb6, 0x3e, 0xf5, 0x68, 0xf7}}; -static const mfxPluginUID MFX_PLUGINID_HEVCE_GACC = {{0xe5, 0x40, 0x0a, 0x06, 0xc7, 0x4d, 0x41, 0xf5, 0xb1, 0x2d, 0x43, 0x0b, 0xba, 0xa2, 0x3d, 0x0b}}; -static const mfxPluginUID MFX_PLUGINID_HEVCE_DP_GACC = {{0x2b, 0xad, 0x6f, 0x9d, 0x77, 0x54, 0x41, 0x2d, 0xbf, 0x63, 0x03, 0xed, 0x4b, 0xb5, 0x09, 0x68}}; -static const mfxPluginUID MFX_PLUGINID_HEVCE_HW = {{0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47}}; -static const mfxPluginUID MFX_PLUGINID_VP8D_HW = {{0xf6, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}}; -static const mfxPluginUID MFX_PLUGINID_VP8E_HW = {{0xbf, 0xfc, 0x51, 0x8c, 0xde, 0x13, 0x4d, 0xf9, 0x8a, 0x96, 0xf4, 0xcf, 0x81, 0x6c, 0x0f, 0xac}}; -static const mfxPluginUID MFX_PLUGINID_VP9E_HW = {{0xce, 0x44, 0xef, 0x6f, 0x1a, 0x6d, 0x22, 0x46, 0xb4, 0x12, 0xbb, 0x38, 0xd6, 0xe4, 0x51, 0x82}}; -static const mfxPluginUID MFX_PLUGINID_VP9D_HW = {{0xa9, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}}; -static const mfxPluginUID MFX_PLUGINID_CAMERA_HW = {{0x54, 0x54, 0x26, 0x16, 0x24, 0x33, 0x41, 0xe6, 0x93, 0xae, 0x89, 0x99, 0x42, 0xce, 0x73, 0x55}}; -static const mfxPluginUID MFX_PLUGINID_CAPTURE_HW = {{0x22, 0xd6, 0x2c, 0x07, 0xe6, 0x72, 0x40, 0x8f, 0xbb, 0x4c, 0xc2, 0x0e, 0xd7, 0xa0, 0x53, 0xe4}}; -static const mfxPluginUID MFX_PLUGINID_ITELECINE_HW = {{0xe7, 0x44, 0x75, 0x3a, 0xcd, 0x74, 0x40, 0x2e, 0x89, 0xa2, 0xee, 0x06, 0x35, 0x49, 0x61, 0x79}}; -static const mfxPluginUID MFX_PLUGINID_H264LA_HW = {{0x58, 0x8f, 0x11, 0x85, 0xd4, 0x7b, 0x42, 0x96, 0x8d, 0xea, 0x37, 0x7b, 0xb5, 0xd0, 0xdc, 0xb4}}; -static const mfxPluginUID MFX_PLUGINID_AACD = {{0xe9, 0x34, 0x67, 0x25, 0xac, 0x2f, 0x4c, 0x93, 0xaa, 0x58, 0x5c, 0x11, 0xc7, 0x08, 0x7c, 0xf4}}; -static const mfxPluginUID MFX_PLUGINID_AACE = {{0xb2, 0xa2, 0xa0, 0x5a, 0x4e, 0xac, 0x46, 0xbf, 0xa9, 0xde, 0x7e, 0x80, 0xc9, 0x8d, 0x2e, 0x18}}; -static const mfxPluginUID MFX_PLUGINID_HEVCE_FEI_HW = {{0x87, 0xe0, 0xe8, 0x02, 0x07, 0x37, 0x52, 0x40, 0x85, 0x25, 0x15, 0xcf, 0x4a, 0x5e, 0xdd, 0xe6}}; -#if (MFX_VERSION >= 1027) -static const mfxPluginUID MFX_PLUGINID_HEVC_FEI_ENCODE = {{0x54, 0x18, 0xa7, 0x06, 0x66, 0xf9, 0x4d, 0x5c, 0xb4, 0xf7, 0xb1, 0xca, 0xee, 0x86, 0x33, 0x9b}}; -#endif - - -typedef enum { - MFX_PLUGINTYPE_VIDEO_GENERAL = 0, - MFX_PLUGINTYPE_VIDEO_DECODE = 1, - MFX_PLUGINTYPE_VIDEO_ENCODE = 2, - MFX_PLUGINTYPE_VIDEO_VPP = 3, - MFX_PLUGINTYPE_VIDEO_ENC = 4, - MFX_PLUGINTYPE_AUDIO_DECODE = 5, - MFX_PLUGINTYPE_AUDIO_ENCODE = 6 -} mfxPluginType; - -typedef enum { - MFX_THREADPOLICY_SERIAL = 0, - MFX_THREADPOLICY_PARALLEL = 1 -} mfxThreadPolicy; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct mfxPluginParam { - mfxU32 reserved[6]; - mfxU16 reserved1; - mfxU16 PluginVersion; - mfxVersion APIVersion; - mfxPluginUID PluginUID; - mfxU32 Type; - mfxU32 CodecId; - mfxThreadPolicy ThreadPolicy; - mfxU32 MaxThreadNum; -} mfxPluginParam; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct mfxCoreParam{ - mfxU32 reserved[13]; - mfxIMPL Impl; - mfxVersion Version; - mfxU32 NumWorkingThread; -} mfxCoreParam; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct mfxCoreInterface { - mfxHDL pthis; - - mfxHDL reserved1[2]; - mfxFrameAllocator FrameAllocator; - mfxBufferAllocator reserved3; - - mfxStatus (MFX_CDECL *GetCoreParam)(mfxHDL pthis, mfxCoreParam *par); - mfxStatus (MFX_CDECL *GetHandle) (mfxHDL pthis, mfxHandleType type, mfxHDL *handle); - mfxStatus (MFX_CDECL *IncreaseReference) (mfxHDL pthis, mfxFrameData *fd); - mfxStatus (MFX_CDECL *DecreaseReference) (mfxHDL pthis, mfxFrameData *fd); - mfxStatus (MFX_CDECL *CopyFrame) (mfxHDL pthis, mfxFrameSurface1 *dst, mfxFrameSurface1 *src); - mfxStatus (MFX_CDECL *CopyBuffer)(mfxHDL pthis, mfxU8 *dst, mfxU32 size, mfxFrameSurface1 *src); - - mfxStatus (MFX_CDECL *MapOpaqueSurface)(mfxHDL pthis, mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf); - mfxStatus (MFX_CDECL *UnmapOpaqueSurface)(mfxHDL pthis, mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf); - - mfxStatus (MFX_CDECL *GetRealSurface)(mfxHDL pthis, mfxFrameSurface1 *op_surf, mfxFrameSurface1 **surf); - mfxStatus (MFX_CDECL *GetOpaqueSurface)(mfxHDL pthis, mfxFrameSurface1 *surf, mfxFrameSurface1 **op_surf); - - mfxStatus (MFX_CDECL *CreateAccelerationDevice)(mfxHDL pthis, mfxHandleType type, mfxHDL *handle); - mfxStatus (MFX_CDECL *GetFrameHandle) (mfxHDL pthis, mfxFrameData *fd, mfxHDL *handle); - mfxStatus (MFX_CDECL *QueryPlatform) (mfxHDL pthis, mfxPlatform *platform); - - mfxHDL reserved4[1]; -} mfxCoreInterface; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -/* video codec plugin extension */ -typedef struct _mfxENCInput mfxENCInput; -typedef struct _mfxENCOutput mfxENCOutput; -typedef struct mfxVideoCodecPlugin{ - mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxVideoParam *in, mfxVideoParam *out); - mfxStatus (MFX_CDECL *QueryIOSurf)(mfxHDL pthis, mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out); - mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxVideoParam *par); - mfxStatus (MFX_CDECL *Reset)(mfxHDL pthis, mfxVideoParam *par); - mfxStatus (MFX_CDECL *Close)(mfxHDL pthis); - mfxStatus (MFX_CDECL *GetVideoParam)(mfxHDL pthis, mfxVideoParam *par); - - mfxStatus (MFX_CDECL *EncodeFrameSubmit)(mfxHDL pthis, mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task); - - mfxStatus (MFX_CDECL *DecodeHeader)(mfxHDL pthis, mfxBitstream *bs, mfxVideoParam *par); - mfxStatus (MFX_CDECL *GetPayload)(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload); - mfxStatus (MFX_CDECL *DecodeFrameSubmit)(mfxHDL pthis, mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task); - - mfxStatus (MFX_CDECL *VPPFrameSubmit)(mfxHDL pthis, mfxFrameSurface1 *in, mfxFrameSurface1 *out, mfxExtVppAuxData *aux, mfxThreadTask *task); - mfxStatus (MFX_CDECL *VPPFrameSubmitEx)(mfxHDL pthis, mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task); - - mfxStatus (MFX_CDECL *ENCFrameSubmit)(mfxHDL pthis, mfxENCInput *in, mfxENCOutput *out, mfxThreadTask *task); - - mfxHDL reserved1[3]; - mfxU32 reserved2[8]; -} mfxVideoCodecPlugin; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct mfxAudioCodecPlugin{ - mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxAudioParam *in, mfxAudioParam *out); - mfxStatus (MFX_CDECL *QueryIOSize)(mfxHDL pthis, mfxAudioParam *par, mfxAudioAllocRequest *request); - mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxAudioParam *par); - mfxStatus (MFX_CDECL *Reset)(mfxHDL pthis, mfxAudioParam *par); - mfxStatus (MFX_CDECL *Close)(mfxHDL pthis); - mfxStatus (MFX_CDECL *GetAudioParam)(mfxHDL pthis, mfxAudioParam *par); - - mfxStatus (MFX_CDECL *EncodeFrameSubmit)(mfxHDL pthis, mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task); - - mfxStatus (MFX_CDECL *DecodeHeader)(mfxHDL pthis, mfxBitstream *bs, mfxAudioParam *par); -// mfxStatus (MFX_CDECL *GetPayload)(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload); - mfxStatus (MFX_CDECL *DecodeFrameSubmit)(mfxHDL pthis, mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task); - - mfxHDL reserved1[6]; - mfxU32 reserved2[8]; -} mfxAudioCodecPlugin; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct mfxPlugin{ - mfxHDL pthis; - - mfxStatus (MFX_CDECL *PluginInit) (mfxHDL pthis, mfxCoreInterface *core); - mfxStatus (MFX_CDECL *PluginClose) (mfxHDL pthis); - - mfxStatus (MFX_CDECL *GetPluginParam)(mfxHDL pthis, mfxPluginParam *par); - - mfxStatus (MFX_CDECL *Submit)(mfxHDL pthis, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task); - mfxStatus (MFX_CDECL *Execute)(mfxHDL pthis, mfxThreadTask task, mfxU32 uid_p, mfxU32 uid_a); - mfxStatus (MFX_CDECL *FreeResources)(mfxHDL pthis, mfxThreadTask task, mfxStatus sts); - - union { - mfxVideoCodecPlugin *Video; - mfxAudioCodecPlugin *Audio; - }; - - mfxHDL reserved[8]; -} mfxPlugin; -MFX_PACK_END() - - -mfxStatus MFX_CDECL MFXVideoUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par); -mfxStatus MFX_CDECL MFXVideoUSER_Unregister(mfxSession session, mfxU32 type); -mfxStatus MFX_CDECL MFXVideoUSER_GetPlugin(mfxSession session, mfxU32 type, mfxPlugin *par); -mfxStatus MFX_CDECL MFXVideoUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp); - -mfxStatus MFX_CDECL MFXVideoUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version); -mfxStatus MFX_CDECL MFXVideoUSER_LoadByPath(mfxSession session, const mfxPluginUID *uid, mfxU32 version, const mfxChar *path, mfxU32 len); -mfxStatus MFX_CDECL MFXVideoUSER_UnLoad(mfxSession session, const mfxPluginUID *uid); - -mfxStatus MFX_CDECL MFXAudioUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par); -mfxStatus MFX_CDECL MFXAudioUSER_Unregister(mfxSession session, mfxU32 type); -mfxStatus MFX_CDECL MFXAudioUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp); - -mfxStatus MFX_CDECL MFXAudioUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version); -mfxStatus MFX_CDECL MFXAudioUSER_UnLoad(mfxSession session, const mfxPluginUID *uid); - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - -#endif /* __MFXPLUGIN_H__ */ +// Copyright (c) 2018-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXPLUGIN_H__ +#define __MFXPLUGIN_H__ +#include "mfxvideo.h" +#include "mfxaudio.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU8 Data[16]; +} mfxPluginUID; +MFX_PACK_END() + +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVCD_SW = {{0x15, 0xdd, 0x93, 0x68, 0x25, 0xad, 0x47, 0x5e, 0xa3, 0x4e, 0x35, 0xf3, 0xf5, 0x42, 0x17, 0xa6}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVCD_HW = {{0x33, 0xa6, 0x1c, 0x0b, 0x4c, 0x27, 0x45, 0x4c, 0xa8, 0xd8, 0x5d, 0xde, 0x75, 0x7c, 0x6f, 0x8e}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVCE_SW = {{0x2f, 0xca, 0x99, 0x74, 0x9f, 0xdb, 0x49, 0xae, 0xb1, 0x21, 0xa5, 0xb6, 0x3e, 0xf5, 0x68, 0xf7}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVCE_GACC = {{0xe5, 0x40, 0x0a, 0x06, 0xc7, 0x4d, 0x41, 0xf5, 0xb1, 0x2d, 0x43, 0x0b, 0xba, 0xa2, 0x3d, 0x0b}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVCE_DP_GACC = {{0x2b, 0xad, 0x6f, 0x9d, 0x77, 0x54, 0x41, 0x2d, 0xbf, 0x63, 0x03, 0xed, 0x4b, 0xb5, 0x09, 0x68}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVCE_HW = {{0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_VP8D_HW = {{0xf6, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_VP8E_HW = {{0xbf, 0xfc, 0x51, 0x8c, 0xde, 0x13, 0x4d, 0xf9, 0x8a, 0x96, 0xf4, 0xcf, 0x81, 0x6c, 0x0f, 0xac}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_VP9E_HW = {{0xce, 0x44, 0xef, 0x6f, 0x1a, 0x6d, 0x22, 0x46, 0xb4, 0x12, 0xbb, 0x38, 0xd6, 0xe4, 0x51, 0x82}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_VP9D_HW = {{0xa9, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_CAMERA_HW = {{0x54, 0x54, 0x26, 0x16, 0x24, 0x33, 0x41, 0xe6, 0x93, 0xae, 0x89, 0x99, 0x42, 0xce, 0x73, 0x55}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_CAPTURE_HW = {{0x22, 0xd6, 0x2c, 0x07, 0xe6, 0x72, 0x40, 0x8f, 0xbb, 0x4c, 0xc2, 0x0e, 0xd7, 0xa0, 0x53, 0xe4}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_ITELECINE_HW = {{0xe7, 0x44, 0x75, 0x3a, 0xcd, 0x74, 0x40, 0x2e, 0x89, 0xa2, 0xee, 0x06, 0x35, 0x49, 0x61, 0x79}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_H264LA_HW = {{0x58, 0x8f, 0x11, 0x85, 0xd4, 0x7b, 0x42, 0x96, 0x8d, 0xea, 0x37, 0x7b, 0xb5, 0xd0, 0xdc, 0xb4}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_AACD = {{0xe9, 0x34, 0x67, 0x25, 0xac, 0x2f, 0x4c, 0x93, 0xaa, 0x58, 0x5c, 0x11, 0xc7, 0x08, 0x7c, 0xf4}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_AACE = {{0xb2, 0xa2, 0xa0, 0x5a, 0x4e, 0xac, 0x46, 0xbf, 0xa9, 0xde, 0x7e, 0x80, 0xc9, 0x8d, 0x2e, 0x18}}; +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVCE_FEI_HW = {{0x87, 0xe0, 0xe8, 0x02, 0x07, 0x37, 0x52, 0x40, 0x85, 0x25, 0x15, 0xcf, 0x4a, 0x5e, 0xdd, 0xe6}}; +#if (MFX_VERSION >= 1027) +MFX_DEPRECATED static const mfxPluginUID MFX_PLUGINID_HEVC_FEI_ENCODE = {{0x54, 0x18, 0xa7, 0x06, 0x66, 0xf9, 0x4d, 0x5c, 0xb4, 0xf7, 0xb1, 0xca, 0xee, 0x86, 0x33, 0x9b}}; +#endif + + +typedef enum { + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_GENERAL) = 0, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_DECODE) = 1, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_ENCODE) = 2, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_VPP) = 3, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_ENC) = 4, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_AUDIO_DECODE) = 5, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_AUDIO_ENCODE) = 6 +} mfxPluginType; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_GENERAL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_DECODE); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_ENCODE); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_VPP); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_ENC); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_AUDIO_DECODE); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_AUDIO_ENCODE); + +typedef enum { + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_THREADPOLICY_SERIAL) = 0, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_THREADPOLICY_PARALLEL) = 1 +} mfxThreadPolicy; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_THREADPOLICY_SERIAL); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_THREADPOLICY_PARALLEL); + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct mfxPluginParam { + mfxU32 reserved[6]; + mfxU16 reserved1; + mfxU16 PluginVersion; + mfxVersion APIVersion; + mfxPluginUID PluginUID; + mfxU32 Type; + mfxU32 CodecId; + mfxThreadPolicy ThreadPolicy; + mfxU32 MaxThreadNum; +} mfxPluginParam; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct mfxCoreParam{ + mfxU32 reserved[13]; + mfxIMPL Impl; + mfxVersion Version; + mfxU32 NumWorkingThread; +} mfxCoreParam; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct mfxCoreInterface { + mfxHDL pthis; + + mfxHDL reserved1[2]; + mfxFrameAllocator FrameAllocator; + mfxBufferAllocator reserved3; + + mfxStatus (MFX_CDECL *GetCoreParam)(mfxHDL pthis, mfxCoreParam *par); + mfxStatus (MFX_CDECL *GetHandle) (mfxHDL pthis, mfxHandleType type, mfxHDL *handle); + mfxStatus (MFX_CDECL *IncreaseReference) (mfxHDL pthis, mfxFrameData *fd); + mfxStatus (MFX_CDECL *DecreaseReference) (mfxHDL pthis, mfxFrameData *fd); + mfxStatus (MFX_CDECL *CopyFrame) (mfxHDL pthis, mfxFrameSurface1 *dst, mfxFrameSurface1 *src); + mfxStatus (MFX_CDECL *CopyBuffer)(mfxHDL pthis, mfxU8 *dst, mfxU32 size, mfxFrameSurface1 *src); + + mfxStatus (MFX_CDECL *MapOpaqueSurface)(mfxHDL pthis, mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf); + mfxStatus (MFX_CDECL *UnmapOpaqueSurface)(mfxHDL pthis, mfxU32 num, mfxU32 type, mfxFrameSurface1 **op_surf); + + mfxStatus (MFX_CDECL *GetRealSurface)(mfxHDL pthis, mfxFrameSurface1 *op_surf, mfxFrameSurface1 **surf); + mfxStatus (MFX_CDECL *GetOpaqueSurface)(mfxHDL pthis, mfxFrameSurface1 *surf, mfxFrameSurface1 **op_surf); + + mfxStatus (MFX_CDECL *CreateAccelerationDevice)(mfxHDL pthis, mfxHandleType type, mfxHDL *handle); + mfxStatus (MFX_CDECL *GetFrameHandle) (mfxHDL pthis, mfxFrameData *fd, mfxHDL *handle); + mfxStatus (MFX_CDECL *QueryPlatform) (mfxHDL pthis, mfxPlatform *platform); + + mfxHDL reserved4[1]; +} mfxCoreInterface; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +/* video codec plugin extension */ +MFX_DEPRECATED typedef struct _mfxENCInput mfxENCInput; +MFX_DEPRECATED typedef struct _mfxENCOutput mfxENCOutput; +MFX_DEPRECATED typedef struct mfxVideoCodecPlugin{ + mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxVideoParam *in, mfxVideoParam *out); + mfxStatus (MFX_CDECL *QueryIOSurf)(mfxHDL pthis, mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out); + mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxVideoParam *par); + mfxStatus (MFX_CDECL *Reset)(mfxHDL pthis, mfxVideoParam *par); + mfxStatus (MFX_CDECL *Close)(mfxHDL pthis); + mfxStatus (MFX_CDECL *GetVideoParam)(mfxHDL pthis, mfxVideoParam *par); + + mfxStatus (MFX_CDECL *EncodeFrameSubmit)(mfxHDL pthis, mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxThreadTask *task); + + mfxStatus (MFX_CDECL *DecodeHeader)(mfxHDL pthis, mfxBitstream *bs, mfxVideoParam *par); + mfxStatus (MFX_CDECL *GetPayload)(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload); + mfxStatus (MFX_CDECL *DecodeFrameSubmit)(mfxHDL pthis, mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task); + + mfxStatus (MFX_CDECL *VPPFrameSubmit)(mfxHDL pthis, mfxFrameSurface1 *in, mfxFrameSurface1 *out, mfxExtVppAuxData *aux, mfxThreadTask *task); + mfxStatus (MFX_CDECL *VPPFrameSubmitEx)(mfxHDL pthis, mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxThreadTask *task); + + mfxStatus (MFX_CDECL *ENCFrameSubmit)(mfxHDL pthis, mfxENCInput *in, mfxENCOutput *out, mfxThreadTask *task); + + mfxHDL reserved1[3]; + mfxU32 reserved2[8]; +} mfxVideoCodecPlugin; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct mfxAudioCodecPlugin{ + mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxAudioParam *in, mfxAudioParam *out); + mfxStatus (MFX_CDECL *QueryIOSize)(mfxHDL pthis, mfxAudioParam *par, mfxAudioAllocRequest *request); + mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxAudioParam *par); + mfxStatus (MFX_CDECL *Reset)(mfxHDL pthis, mfxAudioParam *par); + mfxStatus (MFX_CDECL *Close)(mfxHDL pthis); + mfxStatus (MFX_CDECL *GetAudioParam)(mfxHDL pthis, mfxAudioParam *par); + + mfxStatus (MFX_CDECL *EncodeFrameSubmit)(mfxHDL pthis, mfxAudioFrame *aFrame, mfxBitstream *out, mfxThreadTask *task); + + mfxStatus (MFX_CDECL *DecodeHeader)(mfxHDL pthis, mfxBitstream *bs, mfxAudioParam *par); +// mfxStatus (MFX_CDECL *GetPayload)(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload); + mfxStatus (MFX_CDECL *DecodeFrameSubmit)(mfxHDL pthis, mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task); + + mfxHDL reserved1[6]; + mfxU32 reserved2[8]; +} mfxAudioCodecPlugin; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct mfxPlugin{ + mfxHDL pthis; + + mfxStatus (MFX_CDECL *PluginInit) (mfxHDL pthis, mfxCoreInterface *core); + mfxStatus (MFX_CDECL *PluginClose) (mfxHDL pthis); + + mfxStatus (MFX_CDECL *GetPluginParam)(mfxHDL pthis, mfxPluginParam *par); + + mfxStatus (MFX_CDECL *Submit)(mfxHDL pthis, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxThreadTask *task); + mfxStatus (MFX_CDECL *Execute)(mfxHDL pthis, mfxThreadTask task, mfxU32 uid_p, mfxU32 uid_a); + mfxStatus (MFX_CDECL *FreeResources)(mfxHDL pthis, mfxThreadTask task, mfxStatus sts); + + union { + mfxVideoCodecPlugin *Video; + mfxAudioCodecPlugin *Audio; + }; + + mfxHDL reserved[8]; +} mfxPlugin; +MFX_PACK_END() + + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_Unregister(mfxSession session, mfxU32 type); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_GetPlugin(mfxSession session, mfxU32 type, mfxPlugin *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp); + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_LoadByPath(mfxSession session, const mfxPluginUID *uid, mfxU32 version, const mfxChar *path, mfxU32 len); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_UnLoad(mfxSession session, const mfxPluginUID *uid); + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_Unregister(mfxSession session, mfxU32 type); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp); + +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_UnLoad(mfxSession session, const mfxPluginUID *uid); + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + +#endif /* __MFXPLUGIN_H__ */ diff --git a/.github/actions/libmfx/include/mfx/mfxsc.h b/.github/actions/libmfx/include/mfx/mfxsc.h index d6bc063..a4e7dc5 100644 --- a/.github/actions/libmfx/include/mfx/mfxsc.h +++ b/.github/actions/libmfx/include/mfx/mfxsc.h @@ -1,54 +1,54 @@ -// Copyright (c) 2018-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXSC_H__ -#define __MFXSC_H__ -#include "mfxdefs.h" -#include "mfxvstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Extended Buffer Ids */ -enum -{ - MFX_EXTBUFF_SCREEN_CAPTURE_PARAM = MFX_MAKEFOURCC('S','C','P','A') -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct -{ - mfxExtBuffer Header; - - mfxU32 DisplayIndex; - mfxU16 EnableDirtyRect; - mfxU16 EnableCursorCapture; - mfxU16 reserved[24]; -} mfxExtScreenCaptureParam; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif /* __cplusplus */ - - -#endif - +// Copyright (c) 2018-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXSC_H__ +#define __MFXSC_H__ +#include "mfxdefs.h" +#include "mfxvstructures.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* Extended Buffer Ids */ +enum +{ + MFX_EXTBUFF_SCREEN_CAPTURE_PARAM = MFX_MAKEFOURCC('S','C','P','A') +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct +{ + mfxExtBuffer Header; + + mfxU32 DisplayIndex; + mfxU16 EnableDirtyRect; + mfxU16 EnableCursorCapture; + mfxU16 reserved[24]; +} mfxExtScreenCaptureParam; +MFX_PACK_END() + +#ifdef __cplusplus +} // extern "C" +#endif /* __cplusplus */ + + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxscd.h b/.github/actions/libmfx/include/mfx/mfxscd.h deleted file mode 100644 index 117ddd6..0000000 --- a/.github/actions/libmfx/include/mfx/mfxscd.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2018-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXSCD_H__ -#define __MFXSCD_H__ - -#include "mfxenc.h" -#include "mfxplugin.h" - -#define MFX_ENC_SCD_PLUGIN_VERSION 1 - -#ifdef __cplusplus -extern "C" { -#endif - -static const mfxPluginUID MFX_PLUGINID_ENC_SCD = {{ 0xdf, 0xc2, 0x15, 0xb3, 0xe3, 0xd3, 0x90, 0x4d, 0x7f, 0xa5, 0x04, 0x12, 0x7e, 0xf5, 0x64, 0xd5 }}; - -/* SCD Extended Buffer Ids */ -enum { - MFX_EXTBUFF_SCD = MFX_MAKEFOURCC('S','C','D',' ') -}; - -/* SceneType */ -enum { - MFX_SCD_SCENE_SAME = 0x00, - MFX_SCD_SCENE_NEW_FIELD_1 = 0x01, - MFX_SCD_SCENE_NEW_FIELD_2 = 0x02, - MFX_SCD_SCENE_NEW_PICTURE = MFX_SCD_SCENE_NEW_FIELD_1 | MFX_SCD_SCENE_NEW_FIELD_2 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 SceneType; - mfxU16 reserved[27]; -} mfxExtSCD; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif - diff --git a/.github/actions/libmfx/include/mfx/mfxsession.h b/.github/actions/libmfx/include/mfx/mfxsession.h index 60cc6d6..536dc47 100644 --- a/.github/actions/libmfx/include/mfx/mfxsession.h +++ b/.github/actions/libmfx/include/mfx/mfxsession.h @@ -1,50 +1,50 @@ -// Copyright (c) 2017 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXSESSION_H__ -#define __MFXSESSION_H__ -#include "mfxcommon.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -/* Global Functions */ -typedef struct _mfxSession *mfxSession; -mfxStatus MFX_CDECL MFXInit(mfxIMPL impl, mfxVersion *ver, mfxSession *session); -mfxStatus MFX_CDECL MFXInitEx(mfxInitParam par, mfxSession *session); -mfxStatus MFX_CDECL MFXClose(mfxSession session); - -mfxStatus MFX_CDECL MFXQueryIMPL(mfxSession session, mfxIMPL *impl); -mfxStatus MFX_CDECL MFXQueryVersion(mfxSession session, mfxVersion *version); - -mfxStatus MFX_CDECL MFXJoinSession(mfxSession session, mfxSession child); -mfxStatus MFX_CDECL MFXDisjoinSession(mfxSession session); -mfxStatus MFX_CDECL MFXCloneSession(mfxSession session, mfxSession *clone); -mfxStatus MFX_CDECL MFXSetPriority(mfxSession session, mfxPriority priority); -mfxStatus MFX_CDECL MFXGetPriority(mfxSession session, mfxPriority *priority); -mfxStatus MFX_CDECL MFXDoWork(mfxSession session); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - +// Copyright (c) 2017 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXSESSION_H__ +#define __MFXSESSION_H__ +#include "mfxcommon.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* Global Functions */ +typedef struct _mfxSession *mfxSession; +mfxStatus MFX_CDECL MFXInit(mfxIMPL impl, mfxVersion *ver, mfxSession *session); +mfxStatus MFX_CDECL MFXInitEx(mfxInitParam par, mfxSession *session); +mfxStatus MFX_CDECL MFXClose(mfxSession session); + +mfxStatus MFX_CDECL MFXQueryIMPL(mfxSession session, mfxIMPL *impl); +mfxStatus MFX_CDECL MFXQueryVersion(mfxSession session, mfxVersion *version); + +mfxStatus MFX_CDECL MFXJoinSession(mfxSession session, mfxSession child); +mfxStatus MFX_CDECL MFXDisjoinSession(mfxSession session); +mfxStatus MFX_CDECL MFXCloneSession(mfxSession session, mfxSession *clone); +mfxStatus MFX_CDECL MFXSetPriority(mfxSession session, mfxPriority priority); +mfxStatus MFX_CDECL MFXGetPriority(mfxSession session, mfxPriority *priority); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXDoWork(mfxSession session); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxstructures.h b/.github/actions/libmfx/include/mfx/mfxstructures.h index 65e7de9..1351585 100644 --- a/.github/actions/libmfx/include/mfx/mfxstructures.h +++ b/.github/actions/libmfx/include/mfx/mfxstructures.h @@ -1,2509 +1,2521 @@ -// Copyright (c) 2018-2020 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXSTRUCTURES_H__ -#define __MFXSTRUCTURES_H__ -#include "mfxcommon.h" - -#if !defined (__GNUC__) -#pragma warning(disable: 4201) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Frame ID for SVC and MVC */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU16 TemporalId; - mfxU16 PriorityId; - union { - struct { - mfxU16 DependencyId; - mfxU16 QualityId; - }; - struct { - mfxU16 ViewId; - }; - }; -} mfxFrameId; -MFX_PACK_END() - -/* This struct has 4-byte alignment for binary compatibility with previously released versions of API */ -MFX_PACK_BEGIN_USUAL_STRUCT() -/* Frame Info */ -typedef struct { - mfxU32 reserved[4]; - mfxU16 reserved4; - mfxU16 BitDepthLuma; - mfxU16 BitDepthChroma; - mfxU16 Shift; - - mfxFrameId FrameId; - - mfxU32 FourCC; - union { - struct { /* Frame parameters */ - mfxU16 Width; - mfxU16 Height; - - mfxU16 CropX; - mfxU16 CropY; - mfxU16 CropW; - mfxU16 CropH; - }; - struct { /* Buffer parameters (for plain formats like P8) */ - mfxU64 BufferSize; - mfxU32 reserved5; - }; - }; - - mfxU32 FrameRateExtN; - mfxU32 FrameRateExtD; - mfxU16 reserved3; - - mfxU16 AspectRatioW; - mfxU16 AspectRatioH; - - mfxU16 PicStruct; - mfxU16 ChromaFormat; - mfxU16 reserved2; -} mfxFrameInfo; -MFX_PACK_END() - -/* FourCC */ -enum { - MFX_FOURCC_NV12 = MFX_MAKEFOURCC('N','V','1','2'), /* Native Format */ - MFX_FOURCC_YV12 = MFX_MAKEFOURCC('Y','V','1','2'), - MFX_FOURCC_NV16 = MFX_MAKEFOURCC('N','V','1','6'), - MFX_FOURCC_YUY2 = MFX_MAKEFOURCC('Y','U','Y','2'), -#if (MFX_VERSION >= 1028) - MFX_FOURCC_RGB565 = MFX_MAKEFOURCC('R','G','B','2'), /* 2 bytes per pixel, uint16 in little-endian format, where 0-4 bits are blue, bits 5-10 are green and bits 11-15 are red */ - MFX_FOURCC_RGBP = MFX_MAKEFOURCC('R','G','B','P'), -#endif - MFX_FOURCC_RGB3 = MFX_MAKEFOURCC('R','G','B','3'), /* deprecated */ - MFX_FOURCC_RGB4 = MFX_MAKEFOURCC('R','G','B','4'), /* ARGB in that order, A channel is 8 MSBs */ - MFX_FOURCC_P8 = 41, /* D3DFMT_P8 */ - MFX_FOURCC_P8_TEXTURE = MFX_MAKEFOURCC('P','8','M','B'), - MFX_FOURCC_P010 = MFX_MAKEFOURCC('P','0','1','0'), -#if (MFX_VERSION >= 1031) - MFX_FOURCC_P016 = MFX_MAKEFOURCC('P','0','1','6'), -#endif - MFX_FOURCC_P210 = MFX_MAKEFOURCC('P','2','1','0'), - MFX_FOURCC_BGR4 = MFX_MAKEFOURCC('B','G','R','4'), /* ABGR in that order, A channel is 8 MSBs */ - MFX_FOURCC_A2RGB10 = MFX_MAKEFOURCC('R','G','1','0'), /* ARGB in that order, A channel is two MSBs */ - MFX_FOURCC_ARGB16 = MFX_MAKEFOURCC('R','G','1','6'), /* ARGB in that order, 64 bits, A channel is 16 MSBs */ - MFX_FOURCC_ABGR16 = MFX_MAKEFOURCC('B','G','1','6'), /* ABGR in that order, 64 bits, A channel is 16 MSBs */ - MFX_FOURCC_R16 = MFX_MAKEFOURCC('R','1','6','U'), - MFX_FOURCC_AYUV = MFX_MAKEFOURCC('A','Y','U','V'), /* YUV 4:4:4, AYUV in that order, A channel is 8 MSBs */ - MFX_FOURCC_AYUV_RGB4 = MFX_MAKEFOURCC('A','V','U','Y'), /* ARGB in that order, A channel is 8 MSBs stored in AYUV surface*/ - MFX_FOURCC_UYVY = MFX_MAKEFOURCC('U','Y','V','Y'), -#if (MFX_VERSION >= 1027) - MFX_FOURCC_Y210 = MFX_MAKEFOURCC('Y','2','1','0'), - MFX_FOURCC_Y410 = MFX_MAKEFOURCC('Y','4','1','0'), -#endif -#if (MFX_VERSION >= 1031) - MFX_FOURCC_Y216 = MFX_MAKEFOURCC('Y','2','1','6'), - MFX_FOURCC_Y416 = MFX_MAKEFOURCC('Y','4','1','6'), -#endif - MFX_FOURCC_NV21 = MFX_MAKEFOURCC('N', 'V', '2', '1'), /* Same as NV12 but with weaved V and U values. */ - MFX_FOURCC_IYUV = MFX_MAKEFOURCC('I', 'Y', 'U', 'V'), /* Same as YV12 except that the U and V plane order is reversed. */ - MFX_FOURCC_I010 = MFX_MAKEFOURCC('I', '0', '1', '0'), /* 10-bit YUV 4:2:0, each component has its own plane. */ -}; - -/* PicStruct */ -enum { - MFX_PICSTRUCT_UNKNOWN =0x00, - MFX_PICSTRUCT_PROGRESSIVE =0x01, - MFX_PICSTRUCT_FIELD_TFF =0x02, - MFX_PICSTRUCT_FIELD_BFF =0x04, - - MFX_PICSTRUCT_FIELD_REPEATED=0x10, /* first field repeated, pic_struct=5 or 6 in H.264 */ - MFX_PICSTRUCT_FRAME_DOUBLING=0x20, /* pic_struct=7 in H.264 */ - MFX_PICSTRUCT_FRAME_TRIPLING=0x40, /* pic_struct=8 in H.264 */ - - MFX_PICSTRUCT_FIELD_SINGLE =0x100, - MFX_PICSTRUCT_FIELD_TOP =MFX_PICSTRUCT_FIELD_SINGLE | MFX_PICSTRUCT_FIELD_TFF, - MFX_PICSTRUCT_FIELD_BOTTOM =MFX_PICSTRUCT_FIELD_SINGLE | MFX_PICSTRUCT_FIELD_BFF, - MFX_PICSTRUCT_FIELD_PAIRED_PREV =0x200, - MFX_PICSTRUCT_FIELD_PAIRED_NEXT =0x400, -}; - -/* ColorFormat */ -enum { - MFX_CHROMAFORMAT_MONOCHROME =0, - MFX_CHROMAFORMAT_YUV420 =1, - MFX_CHROMAFORMAT_YUV422 =2, - MFX_CHROMAFORMAT_YUV444 =3, - MFX_CHROMAFORMAT_YUV400 = MFX_CHROMAFORMAT_MONOCHROME, - MFX_CHROMAFORMAT_YUV411 = 4, - MFX_CHROMAFORMAT_YUV422H = MFX_CHROMAFORMAT_YUV422, - MFX_CHROMAFORMAT_YUV422V = 5, - MFX_CHROMAFORMAT_RESERVED1 = 6 -}; - -enum { - MFX_TIMESTAMP_UNKNOWN = -1 -}; - -enum { - MFX_FRAMEORDER_UNKNOWN = -1 -}; - -/* DataFlag in mfxFrameData */ -enum { - MFX_FRAMEDATA_ORIGINAL_TIMESTAMP = 0x0001 -}; - -/* Corrupted in mfxFrameData */ -enum { - MFX_CORRUPTION_MINOR = 0x0001, - MFX_CORRUPTION_MAJOR = 0x0002, - MFX_CORRUPTION_ABSENT_TOP_FIELD = 0x0004, - MFX_CORRUPTION_ABSENT_BOTTOM_FIELD = 0x0008, - MFX_CORRUPTION_REFERENCE_FRAME = 0x0010, - MFX_CORRUPTION_REFERENCE_LIST = 0x0020 -}; - -#if (MFX_VERSION >= 1027) -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct -{ - mfxU32 U : 10; - mfxU32 Y : 10; - mfxU32 V : 10; - mfxU32 A : 2; -} mfxY410; -MFX_PACK_END() -#endif - -#if (MFX_VERSION >= 1025) -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct -{ - mfxU32 B : 10; - mfxU32 G : 10; - mfxU32 R : 10; - mfxU32 A : 2; -} mfxA2RGB10; -MFX_PACK_END() -#endif - -/* Frame Data Info */ -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - union { - mfxExtBuffer **ExtParam; - mfxU64 reserved2; - }; - mfxU16 NumExtParam; - - mfxU16 reserved[9]; - mfxU16 MemType; - mfxU16 PitchHigh; - - mfxU64 TimeStamp; - mfxU32 FrameOrder; - mfxU16 Locked; - union{ - mfxU16 Pitch; - mfxU16 PitchLow; - }; - - /* color planes */ - union { - mfxU8 *Y; - mfxU16 *Y16; - mfxU8 *R; - }; - union { - mfxU8 *UV; /* for UV merged formats */ - mfxU8 *VU; /* for VU merged formats */ - mfxU8 *CbCr; /* for CbCr merged formats */ - mfxU8 *CrCb; /* for CrCb merged formats */ - mfxU8 *Cb; - mfxU8 *U; - mfxU16 *U16; - mfxU8 *G; -#if (MFX_VERSION >= 1027) - mfxY410 *Y410; /* for Y410 format (merged AVYU) */ -#endif - }; - union { - mfxU8 *Cr; - mfxU8 *V; - mfxU16 *V16; - mfxU8 *B; -#if (MFX_VERSION >= 1025) - mfxA2RGB10 *A2RGB10; /* for A2RGB10 format (merged ARGB) */ -#endif - }; - mfxU8 *A; - mfxMemId MemId; - - /* Additional Flags */ - mfxU16 Corrupted; - mfxU16 DataFlag; -} mfxFrameData; -MFX_PACK_END() - -/* Frame Surface */ -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxU32 reserved[4]; - mfxFrameInfo Info; - mfxFrameData Data; -} mfxFrameSurface1; -MFX_PACK_END() - -enum { - MFX_TIMESTAMPCALC_UNKNOWN = 0, - MFX_TIMESTAMPCALC_TELECINE = 1, -}; - -/* Transcoding Info */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 reserved[7]; - - mfxU16 LowPower; - mfxU16 BRCParamMultiplier; - - mfxFrameInfo FrameInfo; - mfxU32 CodecId; - mfxU16 CodecProfile; - mfxU16 CodecLevel; - mfxU16 NumThread; - - union { - struct { /* Encoding Options */ - mfxU16 TargetUsage; - - mfxU16 GopPicSize; - mfxU16 GopRefDist; - mfxU16 GopOptFlag; - mfxU16 IdrInterval; - - mfxU16 RateControlMethod; - union { - mfxU16 InitialDelayInKB; - mfxU16 QPI; - mfxU16 Accuracy; - }; - mfxU16 BufferSizeInKB; - union { - mfxU16 TargetKbps; - mfxU16 QPP; - mfxU16 ICQQuality; - }; - union { - mfxU16 MaxKbps; - mfxU16 QPB; - mfxU16 Convergence; - }; - - mfxU16 NumSlice; - mfxU16 NumRefFrame; - mfxU16 EncodedOrder; - }; - struct { /* Decoding Options */ - mfxU16 DecodedOrder; - mfxU16 ExtendedPicStruct; - mfxU16 TimeStampCalc; - mfxU16 SliceGroupsPresent; - mfxU16 MaxDecFrameBuffering; - mfxU16 EnableReallocRequest; -#if (MFX_VERSION >= 1034) - mfxU16 FilmGrain; - mfxU16 IgnoreLevelConstrain; - mfxU16 reserved2[5]; -#else - mfxU16 reserved2[7]; -#endif - }; - struct { /* JPEG Decoding Options */ - mfxU16 JPEGChromaFormat; - mfxU16 Rotation; - mfxU16 JPEGColorFormat; - mfxU16 InterleavedDec; - mfxU8 SamplingFactorH[4]; - mfxU8 SamplingFactorV[4]; - mfxU16 reserved3[5]; - }; - struct { /* JPEG Encoding Options */ - mfxU16 Interleaved; - mfxU16 Quality; - mfxU16 RestartInterval; - mfxU16 reserved5[10]; - }; - }; -} mfxInfoMFX; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 reserved[8]; - mfxFrameInfo In; - mfxFrameInfo Out; -} mfxInfoVPP; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU32 AllocId; - mfxU32 reserved[2]; - mfxU16 reserved3; - mfxU16 AsyncDepth; - - union { - mfxInfoMFX mfx; - mfxInfoVPP vpp; - }; - mfxU16 Protected; - mfxU16 IOPattern; - mfxExtBuffer** ExtParam; - mfxU16 NumExtParam; - mfxU16 reserved2; -} mfxVideoParam; -MFX_PACK_END() - -/* IOPattern */ -enum { - MFX_IOPATTERN_IN_VIDEO_MEMORY = 0x01, - MFX_IOPATTERN_IN_SYSTEM_MEMORY = 0x02, - MFX_IOPATTERN_IN_OPAQUE_MEMORY = 0x04, - MFX_IOPATTERN_OUT_VIDEO_MEMORY = 0x10, - MFX_IOPATTERN_OUT_SYSTEM_MEMORY = 0x20, - MFX_IOPATTERN_OUT_OPAQUE_MEMORY = 0x40 -}; - -/* CodecId */ -enum { - MFX_CODEC_AVC =MFX_MAKEFOURCC('A','V','C',' '), - MFX_CODEC_HEVC =MFX_MAKEFOURCC('H','E','V','C'), - MFX_CODEC_MPEG2 =MFX_MAKEFOURCC('M','P','G','2'), - MFX_CODEC_VC1 =MFX_MAKEFOURCC('V','C','1',' '), - MFX_CODEC_CAPTURE =MFX_MAKEFOURCC('C','A','P','T'), - MFX_CODEC_VP9 =MFX_MAKEFOURCC('V','P','9',' '), - MFX_CODEC_AV1 =MFX_MAKEFOURCC('A','V','1',' ') -}; - -/* CodecProfile, CodecLevel */ -enum { - MFX_PROFILE_UNKNOWN =0, - MFX_LEVEL_UNKNOWN =0, - - /* AVC Profiles & Levels */ - MFX_PROFILE_AVC_CONSTRAINT_SET0 = (0x100 << 0), - MFX_PROFILE_AVC_CONSTRAINT_SET1 = (0x100 << 1), - MFX_PROFILE_AVC_CONSTRAINT_SET2 = (0x100 << 2), - MFX_PROFILE_AVC_CONSTRAINT_SET3 = (0x100 << 3), - MFX_PROFILE_AVC_CONSTRAINT_SET4 = (0x100 << 4), - MFX_PROFILE_AVC_CONSTRAINT_SET5 = (0x100 << 5), - - MFX_PROFILE_AVC_BASELINE =66, - MFX_PROFILE_AVC_MAIN =77, - MFX_PROFILE_AVC_EXTENDED =88, - MFX_PROFILE_AVC_HIGH =100, - MFX_PROFILE_AVC_HIGH10 =110, - MFX_PROFILE_AVC_HIGH_422 =122, - MFX_PROFILE_AVC_CONSTRAINED_BASELINE =MFX_PROFILE_AVC_BASELINE + MFX_PROFILE_AVC_CONSTRAINT_SET1, - MFX_PROFILE_AVC_CONSTRAINED_HIGH =MFX_PROFILE_AVC_HIGH + MFX_PROFILE_AVC_CONSTRAINT_SET4 - + MFX_PROFILE_AVC_CONSTRAINT_SET5, - MFX_PROFILE_AVC_PROGRESSIVE_HIGH =MFX_PROFILE_AVC_HIGH + MFX_PROFILE_AVC_CONSTRAINT_SET4, - - MFX_LEVEL_AVC_1 =10, - MFX_LEVEL_AVC_1b =9, - MFX_LEVEL_AVC_11 =11, - MFX_LEVEL_AVC_12 =12, - MFX_LEVEL_AVC_13 =13, - MFX_LEVEL_AVC_2 =20, - MFX_LEVEL_AVC_21 =21, - MFX_LEVEL_AVC_22 =22, - MFX_LEVEL_AVC_3 =30, - MFX_LEVEL_AVC_31 =31, - MFX_LEVEL_AVC_32 =32, - MFX_LEVEL_AVC_4 =40, - MFX_LEVEL_AVC_41 =41, - MFX_LEVEL_AVC_42 =42, - MFX_LEVEL_AVC_5 =50, - MFX_LEVEL_AVC_51 =51, - MFX_LEVEL_AVC_52 =52, -#if (MFX_VERSION >= MFX_VERSION_NEXT) - MFX_LEVEL_AVC_6 =60, - MFX_LEVEL_AVC_61 =61, - MFX_LEVEL_AVC_62 =62, -#endif - - /* MPEG-2 Profiles & Levels */ - MFX_PROFILE_MPEG2_SIMPLE =0x50, - MFX_PROFILE_MPEG2_MAIN =0x40, - MFX_PROFILE_MPEG2_HIGH =0x10, - - MFX_LEVEL_MPEG2_LOW =0xA, - MFX_LEVEL_MPEG2_MAIN =0x8, - MFX_LEVEL_MPEG2_HIGH =0x4, - MFX_LEVEL_MPEG2_HIGH1440 =0x6, - - /* VC1 Profiles & Levels */ - MFX_PROFILE_VC1_SIMPLE =(0+1), - MFX_PROFILE_VC1_MAIN =(4+1), - MFX_PROFILE_VC1_ADVANCED =(12+1), - - /* VC1 levels for simple & main profiles */ - MFX_LEVEL_VC1_LOW =(0+1), - MFX_LEVEL_VC1_MEDIAN =(2+1), - MFX_LEVEL_VC1_HIGH =(4+1), - - /* VC1 levels for the advanced profile */ - MFX_LEVEL_VC1_0 =(0x00+1), - MFX_LEVEL_VC1_1 =(0x01+1), - MFX_LEVEL_VC1_2 =(0x02+1), - MFX_LEVEL_VC1_3 =(0x03+1), - MFX_LEVEL_VC1_4 =(0x04+1), - - /* HEVC Profiles & Levels & Tiers */ - MFX_PROFILE_HEVC_MAIN =1, - MFX_PROFILE_HEVC_MAIN10 =2, - MFX_PROFILE_HEVC_MAINSP =3, - MFX_PROFILE_HEVC_REXT =4, -#if (MFX_VERSION >= 1032) - MFX_PROFILE_HEVC_SCC =9, -#endif - - MFX_LEVEL_HEVC_1 = 10, - MFX_LEVEL_HEVC_2 = 20, - MFX_LEVEL_HEVC_21 = 21, - MFX_LEVEL_HEVC_3 = 30, - MFX_LEVEL_HEVC_31 = 31, - MFX_LEVEL_HEVC_4 = 40, - MFX_LEVEL_HEVC_41 = 41, - MFX_LEVEL_HEVC_5 = 50, - MFX_LEVEL_HEVC_51 = 51, - MFX_LEVEL_HEVC_52 = 52, - MFX_LEVEL_HEVC_6 = 60, - MFX_LEVEL_HEVC_61 = 61, - MFX_LEVEL_HEVC_62 = 62, - - MFX_TIER_HEVC_MAIN = 0, - MFX_TIER_HEVC_HIGH = 0x100, - - /* VP9 Profiles */ - MFX_PROFILE_VP9_0 = 1, - MFX_PROFILE_VP9_1 = 2, - MFX_PROFILE_VP9_2 = 3, - MFX_PROFILE_VP9_3 = 4, - -#if (MFX_VERSION >= 1034) - /* AV1 Profiles */ - MFX_PROFILE_AV1_MAIN = 1, - MFX_PROFILE_AV1_HIGH = 2, - MFX_PROFILE_AV1_PRO = 3, - - MFX_LEVEL_AV1_2 = 20, - MFX_LEVEL_AV1_21 = 21, - MFX_LEVEL_AV1_22 = 22, - MFX_LEVEL_AV1_23 = 23, - MFX_LEVEL_AV1_3 = 30, - MFX_LEVEL_AV1_31 = 31, - MFX_LEVEL_AV1_32 = 32, - MFX_LEVEL_AV1_33 = 33, - MFX_LEVEL_AV1_4 = 40, - MFX_LEVEL_AV1_41 = 41, - MFX_LEVEL_AV1_42 = 42, - MFX_LEVEL_AV1_43 = 43, - MFX_LEVEL_AV1_5 = 50, - MFX_LEVEL_AV1_51 = 51, - MFX_LEVEL_AV1_52 = 52, - MFX_LEVEL_AV1_53 = 53, - MFX_LEVEL_AV1_6 = 60, - MFX_LEVEL_AV1_61 = 61, - MFX_LEVEL_AV1_62 = 62, - MFX_LEVEL_AV1_63 = 63, -#endif -}; - -/* GopOptFlag */ -enum { - MFX_GOP_CLOSED =1, - MFX_GOP_STRICT =2 -}; - -/* TargetUsages: from 1 to 7 inclusive */ -enum { - MFX_TARGETUSAGE_1 =1, - MFX_TARGETUSAGE_2 =2, - MFX_TARGETUSAGE_3 =3, - MFX_TARGETUSAGE_4 =4, - MFX_TARGETUSAGE_5 =5, - MFX_TARGETUSAGE_6 =6, - MFX_TARGETUSAGE_7 =7, - - MFX_TARGETUSAGE_UNKNOWN =0, - MFX_TARGETUSAGE_BEST_QUALITY =MFX_TARGETUSAGE_1, - MFX_TARGETUSAGE_BALANCED =MFX_TARGETUSAGE_4, - MFX_TARGETUSAGE_BEST_SPEED =MFX_TARGETUSAGE_7 -}; - -/* RateControlMethod */ -enum { - MFX_RATECONTROL_CBR =1, - MFX_RATECONTROL_VBR =2, - MFX_RATECONTROL_CQP =3, - MFX_RATECONTROL_AVBR =4, - MFX_RATECONTROL_RESERVED1 =5, - MFX_RATECONTROL_RESERVED2 =6, - MFX_RATECONTROL_RESERVED3 =100, - MFX_RATECONTROL_RESERVED4 =7, - MFX_RATECONTROL_LA =8, - MFX_RATECONTROL_ICQ =9, - MFX_RATECONTROL_VCM =10, - MFX_RATECONTROL_LA_ICQ =11, - MFX_RATECONTROL_LA_EXT =12, - MFX_RATECONTROL_LA_HRD =13, - MFX_RATECONTROL_QVBR =14, -}; - -/* Trellis control*/ -enum { - MFX_TRELLIS_UNKNOWN =0, - MFX_TRELLIS_OFF =0x01, - MFX_TRELLIS_I =0x02, - MFX_TRELLIS_P =0x04, - MFX_TRELLIS_B =0x08 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved1; - mfxU16 RateDistortionOpt; /* tri-state option */ - mfxU16 MECostType; - mfxU16 MESearchType; - mfxI16Pair MVSearchWindow; - mfxU16 EndOfSequence; /* tri-state option */ - mfxU16 FramePicture; /* tri-state option */ - - mfxU16 CAVLC; /* tri-state option */ - mfxU16 reserved2[2]; - mfxU16 RecoveryPointSEI; /* tri-state option */ - mfxU16 ViewOutput; /* tri-state option */ - mfxU16 NalHrdConformance; /* tri-state option */ - mfxU16 SingleSeiNalUnit; /* tri-state option */ - mfxU16 VuiVclHrdParameters; /* tri-state option */ - - mfxU16 RefPicListReordering; /* tri-state option */ - mfxU16 ResetRefList; /* tri-state option */ - mfxU16 RefPicMarkRep; /* tri-state option */ - mfxU16 FieldOutput; /* tri-state option */ - - mfxU16 IntraPredBlockSize; - mfxU16 InterPredBlockSize; - mfxU16 MVPrecision; - mfxU16 MaxDecFrameBuffering; - - mfxU16 AUDelimiter; /* tri-state option */ - mfxU16 EndOfStream; /* tri-state option */ - mfxU16 PicTimingSEI; /* tri-state option */ - mfxU16 VuiNalHrdParameters; /* tri-state option */ -} mfxExtCodingOption; -MFX_PACK_END() - -enum { - MFX_B_REF_UNKNOWN = 0, - MFX_B_REF_OFF = 1, - MFX_B_REF_PYRAMID = 2 -}; - -enum { - MFX_LOOKAHEAD_DS_UNKNOWN = 0, - MFX_LOOKAHEAD_DS_OFF = 1, - MFX_LOOKAHEAD_DS_2x = 2, - MFX_LOOKAHEAD_DS_4x = 3 -}; - -enum { - MFX_BPSEI_DEFAULT = 0x00, - MFX_BPSEI_IFRAME = 0x01 -}; - -enum { - MFX_SKIPFRAME_NO_SKIP = 0, - MFX_SKIPFRAME_INSERT_DUMMY = 1, - MFX_SKIPFRAME_INSERT_NOTHING = 2, - MFX_SKIPFRAME_BRC_ONLY = 3, -}; - -/* Intra refresh types */ -enum { - MFX_REFRESH_NO = 0, - MFX_REFRESH_VERTICAL = 1, - MFX_REFRESH_HORIZONTAL = 2, - MFX_REFRESH_SLICE = 3 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 IntRefType; - mfxU16 IntRefCycleSize; - mfxI16 IntRefQPDelta; - - mfxU32 MaxFrameSize; - mfxU32 MaxSliceSize; - - mfxU16 BitrateLimit; /* tri-state option */ - mfxU16 MBBRC; /* tri-state option */ - mfxU16 ExtBRC; /* tri-state option */ - mfxU16 LookAheadDepth; - mfxU16 Trellis; - mfxU16 RepeatPPS; /* tri-state option */ - mfxU16 BRefType; - mfxU16 AdaptiveI; /* tri-state option */ - mfxU16 AdaptiveB; /* tri-state option */ - mfxU16 LookAheadDS; - mfxU16 NumMbPerSlice; - mfxU16 SkipFrame; - mfxU8 MinQPI; /* 1..51, 0 = default */ - mfxU8 MaxQPI; /* 1..51, 0 = default */ - mfxU8 MinQPP; /* 1..51, 0 = default */ - mfxU8 MaxQPP; /* 1..51, 0 = default */ - mfxU8 MinQPB; /* 1..51, 0 = default */ - mfxU8 MaxQPB; /* 1..51, 0 = default */ - mfxU16 FixedFrameRate; /* tri-state option */ - mfxU16 DisableDeblockingIdc; - mfxU16 DisableVUI; - mfxU16 BufferingPeriodSEI; - mfxU16 EnableMAD; /* tri-state option */ - mfxU16 UseRawRef; /* tri-state option */ -} mfxExtCodingOption2; -MFX_PACK_END() - -/* WeightedPred */ -enum { - MFX_WEIGHTED_PRED_UNKNOWN = 0, - MFX_WEIGHTED_PRED_DEFAULT = 1, - MFX_WEIGHTED_PRED_EXPLICIT = 2, - MFX_WEIGHTED_PRED_IMPLICIT = 3 -}; - -/* ScenarioInfo */ -enum { - MFX_SCENARIO_UNKNOWN = 0, - MFX_SCENARIO_DISPLAY_REMOTING = 1, - MFX_SCENARIO_VIDEO_CONFERENCE = 2, - MFX_SCENARIO_ARCHIVE = 3, - MFX_SCENARIO_LIVE_STREAMING = 4, - MFX_SCENARIO_CAMERA_CAPTURE = 5, - MFX_SCENARIO_VIDEO_SURVEILLANCE = 6, - MFX_SCENARIO_GAME_STREAMING = 7, - MFX_SCENARIO_REMOTE_GAMING = 8 -}; - -/* ContentInfo */ -enum { - MFX_CONTENT_UNKNOWN = 0, - MFX_CONTENT_FULL_SCREEN_VIDEO = 1, - MFX_CONTENT_NON_VIDEO_SCREEN = 2 -}; - -/* PRefType */ -enum { - MFX_P_REF_DEFAULT = 0, - MFX_P_REF_SIMPLE = 1, - MFX_P_REF_PYRAMID = 2 -}; - -#if (MFX_VERSION >= MFX_VERSION_NEXT) - -/* QuantScaleType */ -enum { - MFX_MPEG2_QUANT_SCALE_TYPE_DEFAULT = 0, - MFX_MPEG2_QUANT_SCALE_TYPE_LINEAR = 1, /* q_scale_type = 0 */ - MFX_MPEG2_QUANT_SCALE_TYPE_NONLINEAR = 2 /* q_scale_type = 1 */ -}; - -/* IntraVLCFormat */ -enum { - MFX_MPEG2_INTRA_VLC_FORMAT_DEFAULT = 0, - MFX_MPEG2_INTRA_VLC_FORMAT_B14 = 1, /* use table B.14 */ - MFX_MPEG2_INTRA_VLC_FORMAT_B15 = 2 /* use table B.15 */ -}; - -/* ScanType */ -enum { - MFX_MPEG2_SCAN_TYPE_DEFAULT = 0, - MFX_MPEG2_SCAN_TYPE_ZIGZAG = 1, /* alternate_scan = 0 */ - MFX_MPEG2_SCAN_TYPE_ALTERNATE = 2 /* alternate_scan = 1 */ -}; - -#endif - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 NumSliceI; - mfxU16 NumSliceP; - mfxU16 NumSliceB; - - mfxU16 WinBRCMaxAvgKbps; - mfxU16 WinBRCSize; - - mfxU16 QVBRQuality; - mfxU16 EnableMBQP; - mfxU16 IntRefCycleDist; - mfxU16 DirectBiasAdjustment; /* tri-state option */ - mfxU16 GlobalMotionBiasAdjustment; /* tri-state option */ - mfxU16 MVCostScalingFactor; - mfxU16 MBDisableSkipMap; /* tri-state option */ - - mfxU16 WeightedPred; - mfxU16 WeightedBiPred; - - mfxU16 AspectRatioInfoPresent; /* tri-state option */ - mfxU16 OverscanInfoPresent; /* tri-state option */ - mfxU16 OverscanAppropriate; /* tri-state option */ - mfxU16 TimingInfoPresent; /* tri-state option */ - mfxU16 BitstreamRestriction; /* tri-state option */ - mfxU16 LowDelayHrd; /* tri-state option */ - mfxU16 MotionVectorsOverPicBoundaries; /* tri-state option */ -#if (MFX_VERSION >= MFX_VERSION_NEXT) - mfxU16 Log2MaxMvLengthHorizontal; /* 0..16 */ - mfxU16 Log2MaxMvLengthVertical; /* 0..16 */ -#else - mfxU16 reserved1[2]; -#endif - - mfxU16 ScenarioInfo; - mfxU16 ContentInfo; - - mfxU16 PRefType; - mfxU16 FadeDetection; /* tri-state option */ -#if (MFX_VERSION >= MFX_VERSION_NEXT) - mfxI16 DeblockingAlphaTcOffset; /* -12..12 (slice_alpha_c0_offset_div2 << 1) */ - mfxI16 DeblockingBetaOffset; /* -12..12 (slice_beta_offset_div2 << 1) */ -#else - mfxU16 reserved2[2]; -#endif - mfxU16 GPB; /* tri-state option */ - - mfxU32 MaxFrameSizeI; - mfxU32 MaxFrameSizeP; - mfxU32 reserved3[3]; - - mfxU16 EnableQPOffset; /* tri-state option */ - mfxI16 QPOffset[8]; /* FrameQP = QPX + QPOffset[pyramid_layer]; QPX = QPB for B-pyramid, QPP for P-pyramid */ - - mfxU16 NumRefActiveP[8]; - mfxU16 NumRefActiveBL0[8]; - mfxU16 NumRefActiveBL1[8]; - -#if (MFX_VERSION >= MFX_VERSION_NEXT) - mfxU16 ConstrainedIntraPredFlag; /* tri-state option */ -#else - mfxU16 reserved6; -#endif -#if (MFX_VERSION >= 1026) - mfxU16 TransformSkip; /* tri-state option; HEVC transform_skip_enabled_flag */ -#else - mfxU16 reserved7; -#endif -#if (MFX_VERSION >= 1027) - mfxU16 TargetChromaFormatPlus1; /* Minus 1 specifies target encoding chroma format (see ColorFormat enum). May differ from input one. */ - mfxU16 TargetBitDepthLuma; /* Target encoding bit depth for luma samples. May differ from input one. */ - mfxU16 TargetBitDepthChroma; /* Target encoding bit depth for chroma samples. May differ from input one. */ -#else - mfxU16 reserved4[3]; -#endif - mfxU16 BRCPanicMode; /* tri-state option */ - - mfxU16 LowDelayBRC; /* tri-state option */ - mfxU16 EnableMBForceIntra; /* tri-state option */ - mfxU16 AdaptiveMaxFrameSize; /* tri-state option */ - - mfxU16 RepartitionCheckEnable; /* tri-state option */ -#if (MFX_VERSION >= MFX_VERSION_NEXT) - mfxU16 QuantScaleType; /* For MPEG2 specifies mapping between quantiser_scale_code and quantiser_scale (see QuantScaleType enum) */ - mfxU16 IntraVLCFormat; /* For MPEG2 specifies which table shall be used for coding of DCT coefficients of intra macroblocks (see IntraVLCFormat enum) */ - mfxU16 ScanType; /* For MPEG2 specifies transform coefficients scan pattern (see ScanType enum) */ -#else - mfxU16 reserved5[3]; -#endif -#if (MFX_VERSION >= 1025) - mfxU16 EncodedUnitsInfo; /* tri-state option */ - mfxU16 EnableNalUnitType; /* tri-state option */ -#else - mfxU16 reserved8[2]; -#endif -#if (MFX_VERSION >= 1026) - mfxU16 ExtBrcAdaptiveLTR; /* tri-state option for ExtBRC */ -#else - mfxU16 reserved9; -#endif - mfxU16 reserved[163]; -} mfxExtCodingOption3; -MFX_PACK_END() - -/* IntraPredBlockSize/InterPredBlockSize */ -enum { - MFX_BLOCKSIZE_UNKNOWN = 0, - MFX_BLOCKSIZE_MIN_16X16 = 1, /* 16x16 */ - MFX_BLOCKSIZE_MIN_8X8 = 2, /* 16x16, 8x8 */ - MFX_BLOCKSIZE_MIN_4X4 = 3 /* 16x16, 8x8, 4x4 */ -}; - -/* MVPrecision */ -enum { - MFX_MVPRECISION_UNKNOWN = 0, - MFX_MVPRECISION_INTEGER = (1 << 0), - MFX_MVPRECISION_HALFPEL = (1 << 1), - MFX_MVPRECISION_QUARTERPEL = (1 << 2) -}; - -enum { - MFX_CODINGOPTION_UNKNOWN =0, - MFX_CODINGOPTION_ON =0x10, - MFX_CODINGOPTION_OFF =0x20, - MFX_CODINGOPTION_ADAPTIVE =0x30 -}; - -/* Data Flag for mfxBitstream*/ -enum { - MFX_BITSTREAM_COMPLETE_FRAME = 0x0001, /* the bitstream contains a complete frame or field pair of data */ - MFX_BITSTREAM_EOS = 0x0002 -}; -/* Extended Buffer Ids */ -enum { - MFX_EXTBUFF_CODING_OPTION = MFX_MAKEFOURCC('C','D','O','P'), - MFX_EXTBUFF_CODING_OPTION_SPSPPS = MFX_MAKEFOURCC('C','O','S','P'), - MFX_EXTBUFF_VPP_DONOTUSE = MFX_MAKEFOURCC('N','U','S','E'), - MFX_EXTBUFF_VPP_AUXDATA = MFX_MAKEFOURCC('A','U','X','D'), - MFX_EXTBUFF_VPP_DENOISE = MFX_MAKEFOURCC('D','N','I','S'), - MFX_EXTBUFF_VPP_SCENE_ANALYSIS = MFX_MAKEFOURCC('S','C','L','Y'), - MFX_EXTBUFF_VPP_SCENE_CHANGE = MFX_EXTBUFF_VPP_SCENE_ANALYSIS, - MFX_EXTBUFF_VPP_PROCAMP = MFX_MAKEFOURCC('P','A','M','P'), - MFX_EXTBUFF_VPP_DETAIL = MFX_MAKEFOURCC('D','E','T',' '), - MFX_EXTBUFF_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','S','I','N'), - MFX_EXTBUFF_VPP_DOUSE = MFX_MAKEFOURCC('D','U','S','E'), - MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION = MFX_MAKEFOURCC('O','P','Q','S'), - MFX_EXTBUFF_AVC_REFLIST_CTRL = MFX_MAKEFOURCC('R','L','S','T'), - MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION = MFX_MAKEFOURCC('F','R','C',' '), - MFX_EXTBUFF_PICTURE_TIMING_SEI = MFX_MAKEFOURCC('P','T','S','E'), - MFX_EXTBUFF_AVC_TEMPORAL_LAYERS = MFX_MAKEFOURCC('A','T','M','L'), - MFX_EXTBUFF_CODING_OPTION2 = MFX_MAKEFOURCC('C','D','O','2'), - MFX_EXTBUFF_VPP_IMAGE_STABILIZATION = MFX_MAKEFOURCC('I','S','T','B'), - MFX_EXTBUFF_VPP_PICSTRUCT_DETECTION = MFX_MAKEFOURCC('I','D','E','T'), - MFX_EXTBUFF_ENCODER_CAPABILITY = MFX_MAKEFOURCC('E','N','C','P'), - MFX_EXTBUFF_ENCODER_RESET_OPTION = MFX_MAKEFOURCC('E','N','R','O'), - MFX_EXTBUFF_ENCODED_FRAME_INFO = MFX_MAKEFOURCC('E','N','F','I'), - MFX_EXTBUFF_VPP_COMPOSITE = MFX_MAKEFOURCC('V','C','M','P'), - MFX_EXTBUFF_VPP_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','V','S','I'), - MFX_EXTBUFF_ENCODER_ROI = MFX_MAKEFOURCC('E','R','O','I'), - MFX_EXTBUFF_VPP_DEINTERLACING = MFX_MAKEFOURCC('V','P','D','I'), - MFX_EXTBUFF_AVC_REFLISTS = MFX_MAKEFOURCC('R','L','T','S'), - MFX_EXTBUFF_DEC_VIDEO_PROCESSING = MFX_MAKEFOURCC('D','E','C','V'), - MFX_EXTBUFF_VPP_FIELD_PROCESSING = MFX_MAKEFOURCC('F','P','R','O'), - MFX_EXTBUFF_CODING_OPTION3 = MFX_MAKEFOURCC('C','D','O','3'), - MFX_EXTBUFF_CHROMA_LOC_INFO = MFX_MAKEFOURCC('C','L','I','N'), - MFX_EXTBUFF_MBQP = MFX_MAKEFOURCC('M','B','Q','P'), - MFX_EXTBUFF_MB_FORCE_INTRA = MFX_MAKEFOURCC('M','B','F','I'), - MFX_EXTBUFF_HEVC_TILES = MFX_MAKEFOURCC('2','6','5','T'), - MFX_EXTBUFF_MB_DISABLE_SKIP_MAP = MFX_MAKEFOURCC('M','D','S','M'), - MFX_EXTBUFF_HEVC_PARAM = MFX_MAKEFOURCC('2','6','5','P'), - MFX_EXTBUFF_DECODED_FRAME_INFO = MFX_MAKEFOURCC('D','E','F','I'), - MFX_EXTBUFF_TIME_CODE = MFX_MAKEFOURCC('T','M','C','D'), - MFX_EXTBUFF_HEVC_REGION = MFX_MAKEFOURCC('2','6','5','R'), - MFX_EXTBUFF_PRED_WEIGHT_TABLE = MFX_MAKEFOURCC('E','P','W','T'), - MFX_EXTBUFF_DIRTY_RECTANGLES = MFX_MAKEFOURCC('D','R','O','I'), - MFX_EXTBUFF_MOVING_RECTANGLES = MFX_MAKEFOURCC('M','R','O','I'), - MFX_EXTBUFF_CODING_OPTION_VPS = MFX_MAKEFOURCC('C','O','V','P'), - MFX_EXTBUFF_VPP_ROTATION = MFX_MAKEFOURCC('R','O','T',' '), - MFX_EXTBUFF_ENCODED_SLICES_INFO = MFX_MAKEFOURCC('E','N','S','I'), - MFX_EXTBUFF_VPP_SCALING = MFX_MAKEFOURCC('V','S','C','L'), - MFX_EXTBUFF_HEVC_REFLIST_CTRL = MFX_EXTBUFF_AVC_REFLIST_CTRL, - MFX_EXTBUFF_HEVC_REFLISTS = MFX_EXTBUFF_AVC_REFLISTS, - MFX_EXTBUFF_HEVC_TEMPORAL_LAYERS = MFX_EXTBUFF_AVC_TEMPORAL_LAYERS, - MFX_EXTBUFF_VPP_MIRRORING = MFX_MAKEFOURCC('M','I','R','R'), - MFX_EXTBUFF_MV_OVER_PIC_BOUNDARIES = MFX_MAKEFOURCC('M','V','P','B'), - MFX_EXTBUFF_VPP_COLORFILL = MFX_MAKEFOURCC('V','C','L','F'), -#if (MFX_VERSION >= 1025) - MFX_EXTBUFF_DECODE_ERROR_REPORT = MFX_MAKEFOURCC('D', 'E', 'R', 'R'), - MFX_EXTBUFF_VPP_COLOR_CONVERSION = MFX_MAKEFOURCC('V', 'C', 'S', 'C'), - MFX_EXTBUFF_CONTENT_LIGHT_LEVEL_INFO = MFX_MAKEFOURCC('L', 'L', 'I', 'S'), - MFX_EXTBUFF_MASTERING_DISPLAY_COLOUR_VOLUME = MFX_MAKEFOURCC('D', 'C', 'V', 'S'), - MFX_EXTBUFF_MULTI_FRAME_PARAM = MFX_MAKEFOURCC('M', 'F', 'R', 'P'), - MFX_EXTBUFF_MULTI_FRAME_CONTROL = MFX_MAKEFOURCC('M', 'F', 'R', 'C'), - MFX_EXTBUFF_ENCODED_UNITS_INFO = MFX_MAKEFOURCC('E', 'N', 'U', 'I'), -#endif -#if (MFX_VERSION >= 1026) - MFX_EXTBUFF_VPP_MCTF = MFX_MAKEFOURCC('M', 'C', 'T', 'F'), - MFX_EXTBUFF_VP9_SEGMENTATION = MFX_MAKEFOURCC('9', 'S', 'E', 'G'), - MFX_EXTBUFF_VP9_TEMPORAL_LAYERS = MFX_MAKEFOURCC('9', 'T', 'M', 'L'), - MFX_EXTBUFF_VP9_PARAM = MFX_MAKEFOURCC('9', 'P', 'A', 'R'), -#endif -#if (MFX_VERSION >= 1027) - MFX_EXTBUFF_AVC_ROUNDING_OFFSET = MFX_MAKEFOURCC('R','N','D','O'), -#endif -#if (MFX_VERSION >= MFX_VERSION_NEXT) - MFX_EXTBUFF_DPB = MFX_MAKEFOURCC('E','D','P','B'), - MFX_EXTBUFF_TEMPORAL_LAYERS = MFX_MAKEFOURCC('T','M','P','L'), - MFX_EXTBUFF_AVC_SCALING_MATRIX = MFX_MAKEFOURCC('A','V','S','M'), - MFX_EXTBUFF_MPEG2_QUANT_MATRIX = MFX_MAKEFOURCC('M','2','Q','M'), - MFX_EXTBUFF_TASK_DEPENDENCY = MFX_MAKEFOURCC('S','Y','N','C'), -#endif -#if (MFX_VERSION >= 1031) - MFX_EXTBUFF_PARTIAL_BITSTREAM_PARAM = MFX_MAKEFOURCC('P','B','O','P'), -#endif - MFX_EXTBUFF_ENCODER_IPCM_AREA = MFX_MAKEFOURCC('P', 'C', 'M', 'R'), - MFX_EXTBUFF_INSERT_HEADERS = MFX_MAKEFOURCC('S', 'P', 'R', 'E'), -#if (MFX_VERSION >= 1034) - MFX_EXTBUFF_AV1_FILM_GRAIN_PARAM = MFX_MAKEFOURCC('A','1','F','G'), - MFX_EXTBUFF_AV1_LST_PARAM = MFX_MAKEFOURCC('A', '1', 'L', 'S'), - MFX_EXTBUFF_AV1_SEGMENTATION = MFX_MAKEFOURCC('1', 'S', 'E', 'G'), - MFX_EXTBUFF_AV1_PARAM = MFX_MAKEFOURCC('1', 'P', 'A', 'R'), - MFX_EXTBUFF_AV1_AUXDATA = MFX_MAKEFOURCC('1', 'A', 'U', 'X'), - MFX_EXTBUFF_AV1_TEMPORAL_LAYERS = MFX_MAKEFOURCC('1', 'T', 'M', 'L') -#endif -}; - -/* VPP Conf: Do not use certain algorithms */ -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 NumAlg; - mfxU32* AlgList; -} mfxExtVPPDoNotUse; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 DenoiseFactor; -} mfxExtVPPDenoise; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 DetailFactor; -} mfxExtVPPDetail; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - mfxF64 Brightness; - mfxF64 Contrast; - mfxF64 Hue; - mfxF64 Saturation; -} mfxExtVPPProcAmp; -MFX_PACK_END() - -/* statistics collected for decode, encode and vpp */ -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxU32 reserved[16]; - mfxU32 NumFrame; - mfxU64 NumBit; - mfxU32 NumCachedFrame; -} mfxEncodeStat; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 reserved[16]; - mfxU32 NumFrame; - mfxU32 NumSkippedFrame; - mfxU32 NumError; - mfxU32 NumCachedFrame; -} mfxDecodeStat; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU32 reserved[16]; - mfxU32 NumFrame; - mfxU32 NumCachedFrame; -} mfxVPPStat; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - union{ - struct{ - mfxU32 SpatialComplexity; - mfxU32 TemporalComplexity; - }; - struct{ - mfxU16 PicStruct; - mfxU16 reserved[3]; - }; - }; - mfxU16 SceneChangeRate; - mfxU16 RepeatedFrame; -} mfxExtVppAuxData; -MFX_PACK_END() - -/* CtrlFlags */ -enum { - MFX_PAYLOAD_CTRL_SUFFIX = 0x00000001 /* HEVC suffix SEI */ -}; - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU32 CtrlFlags; - mfxU32 reserved[3]; - mfxU8 *Data; /* buffer pointer */ - mfxU32 NumBit; /* number of bits */ - mfxU16 Type; /* SEI message type in H.264 or user data start_code in MPEG-2 */ - mfxU16 BufSize; /* payload buffer size in bytes */ -} mfxPayload; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; -#if (MFX_VERSION >= 1025) - mfxU32 reserved[4]; - mfxU16 reserved1; - mfxU16 MfxNalUnitType; -#else - mfxU32 reserved[5]; -#endif - mfxU16 SkipFrame; - - mfxU16 QP; /* per frame QP */ - - mfxU16 FrameType; - mfxU16 NumExtParam; - mfxU16 NumPayload; /* MPEG-2 user data or H.264 SEI message(s) */ - mfxU16 reserved2; - - mfxExtBuffer **ExtParam; - mfxPayload **Payload; /* for field pair, first field uses even payloads and second field uses odd payloads */ -} mfxEncodeCtrl; -MFX_PACK_END() - -/* Buffer Memory Types */ -enum { - /* Buffer types */ - MFX_MEMTYPE_PERSISTENT_MEMORY =0x0002 -}; - -/* Frame Memory Types */ -#define MFX_MEMTYPE_BASE(x) (0x90ff & (x)) - -enum { - MFX_MEMTYPE_DXVA2_DECODER_TARGET =0x0010, - MFX_MEMTYPE_DXVA2_PROCESSOR_TARGET =0x0020, - MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET = MFX_MEMTYPE_DXVA2_DECODER_TARGET, - MFX_MEMTYPE_VIDEO_MEMORY_PROCESSOR_TARGET = MFX_MEMTYPE_DXVA2_PROCESSOR_TARGET, - MFX_MEMTYPE_SYSTEM_MEMORY =0x0040, - MFX_MEMTYPE_RESERVED1 =0x0080, - - MFX_MEMTYPE_FROM_ENCODE = 0x0100, - MFX_MEMTYPE_FROM_DECODE = 0x0200, - MFX_MEMTYPE_FROM_VPPIN = 0x0400, - MFX_MEMTYPE_FROM_VPPOUT = 0x0800, - MFX_MEMTYPE_FROM_ENC = 0x2000, - MFX_MEMTYPE_FROM_PAK = 0x4000, //reserved - - MFX_MEMTYPE_INTERNAL_FRAME = 0x0001, - MFX_MEMTYPE_EXTERNAL_FRAME = 0x0002, - MFX_MEMTYPE_OPAQUE_FRAME = 0x0004, - MFX_MEMTYPE_EXPORT_FRAME = 0x0008, - MFX_MEMTYPE_SHARED_RESOURCE = MFX_MEMTYPE_EXPORT_FRAME, -#if (MFX_VERSION >= 1025) - MFX_MEMTYPE_VIDEO_MEMORY_ENCODER_TARGET = 0x1000 -#else - MFX_MEMTYPE_RESERVED2 = 0x1000 -#endif -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - union { - mfxU32 AllocId; - mfxU32 reserved[1]; - }; - mfxU32 reserved3[3]; - mfxFrameInfo Info; - mfxU16 Type; /* decoder or processor render targets */ - mfxU16 NumFrameMin; - mfxU16 NumFrameSuggested; - mfxU16 reserved2; -} mfxFrameAllocRequest; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU32 AllocId; - mfxU32 reserved[3]; - mfxMemId *mids; /* the array allocated by application */ - mfxU16 NumFrameActual; -#if (MFX_VERSION >= MFX_VERSION_NEXT) - mfxU16 MemType; -#else - mfxU16 reserved2; -#endif -} mfxFrameAllocResponse; -MFX_PACK_END() - -/* FrameType */ -enum { - MFX_FRAMETYPE_UNKNOWN =0x0000, - - MFX_FRAMETYPE_I =0x0001, - MFX_FRAMETYPE_P =0x0002, - MFX_FRAMETYPE_B =0x0004, - MFX_FRAMETYPE_S =0x0008, - - MFX_FRAMETYPE_REF =0x0040, - MFX_FRAMETYPE_IDR =0x0080, - - MFX_FRAMETYPE_xI =0x0100, - MFX_FRAMETYPE_xP =0x0200, - MFX_FRAMETYPE_xB =0x0400, - MFX_FRAMETYPE_xS =0x0800, - - MFX_FRAMETYPE_xREF =0x4000, - MFX_FRAMETYPE_xIDR =0x8000 -}; - -#if (MFX_VERSION >= 1025) -enum { - MFX_HEVC_NALU_TYPE_UNKNOWN = 0, - MFX_HEVC_NALU_TYPE_TRAIL_N = ( 0+1), - MFX_HEVC_NALU_TYPE_TRAIL_R = ( 1+1), - MFX_HEVC_NALU_TYPE_RADL_N = ( 6+1), - MFX_HEVC_NALU_TYPE_RADL_R = ( 7+1), - MFX_HEVC_NALU_TYPE_RASL_N = ( 8+1), - MFX_HEVC_NALU_TYPE_RASL_R = ( 9+1), - MFX_HEVC_NALU_TYPE_IDR_W_RADL = (19+1), - MFX_HEVC_NALU_TYPE_IDR_N_LP = (20+1), - MFX_HEVC_NALU_TYPE_CRA_NUT = (21+1) -}; -#endif - -typedef enum { - MFX_HANDLE_DIRECT3D_DEVICE_MANAGER9 =1, /* IDirect3DDeviceManager9 */ - MFX_HANDLE_D3D9_DEVICE_MANAGER = MFX_HANDLE_DIRECT3D_DEVICE_MANAGER9, - MFX_HANDLE_RESERVED1 = 2, - MFX_HANDLE_D3D11_DEVICE = 3, - MFX_HANDLE_VA_DISPLAY = 4, - MFX_HANDLE_RESERVED3 = 5, -#if (MFX_VERSION >= 1030) - MFX_HANDLE_VA_CONFIG_ID = 6, - MFX_HANDLE_VA_CONTEXT_ID = 7, -#endif -#if (MFX_VERSION >= MFX_VERSION_NEXT) - MFX_HANDLE_CM_DEVICE = 8 -#endif -} mfxHandleType; - -typedef enum { - MFX_SKIPMODE_NOSKIP=0, - MFX_SKIPMODE_MORE=1, - MFX_SKIPMODE_LESS=2 -} mfxSkipMode; - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU8 *SPSBuffer; - mfxU8 *PPSBuffer; - mfxU16 SPSBufSize; - mfxU16 PPSBufSize; - mfxU16 SPSId; - mfxU16 PPSId; -} mfxExtCodingOptionSPSPPS; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - union { - mfxU8 *VPSBuffer; - mfxU64 reserved1; - }; - mfxU16 VPSBufSize; - mfxU16 VPSId; - - mfxU16 reserved[6]; -} mfxExtCodingOptionVPS; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 VideoFormat; - mfxU16 VideoFullRange; - mfxU16 ColourDescriptionPresent; - mfxU16 ColourPrimaries; - mfxU16 TransferCharacteristics; - mfxU16 MatrixCoefficients; -} mfxExtVideoSignalInfo; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 NumAlg; - mfxU32 *AlgList; -} mfxExtVPPDoUse; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[2]; - struct { - mfxFrameSurface1 **Surfaces; - mfxU32 reserved2[5]; - mfxU16 Type; - mfxU16 NumSurface; - } In, Out; -} mfxExtOpaqueSurfaceAlloc; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 NumRefIdxL0Active; - mfxU16 NumRefIdxL1Active; - - struct { - mfxU32 FrameOrder; - mfxU16 PicStruct; - mfxU16 ViewId; - mfxU16 LongTermIdx; - mfxU16 reserved[3]; - } PreferredRefList[32], RejectedRefList[16], LongTermRefList[16]; - - mfxU16 ApplyLongTermIdx; - mfxU16 reserved[15]; -} mfxExtAVCRefListCtrl; -MFX_PACK_END() - -enum { - MFX_FRCALGM_PRESERVE_TIMESTAMP = 0x0001, - MFX_FRCALGM_DISTRIBUTED_TIMESTAMP = 0x0002, - MFX_FRCALGM_FRAME_INTERPOLATION = 0x0004 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 Algorithm; - mfxU16 reserved; - mfxU32 reserved2[15]; -} mfxExtVPPFrameRateConversion; -MFX_PACK_END() - -enum { - MFX_IMAGESTAB_MODE_UPSCALE = 0x0001, - MFX_IMAGESTAB_MODE_BOXING = 0x0002 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 Mode; - mfxU16 reserved[11]; -} mfxExtVPPImageStab; -MFX_PACK_END() - -#if (MFX_VERSION >= 1025) - -enum { - MFX_PAYLOAD_OFF = 0, - MFX_PAYLOAD_IDR = 1 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 reserved[15]; - - mfxU16 InsertPayloadToggle; - mfxU16 DisplayPrimariesX[3]; - mfxU16 DisplayPrimariesY[3]; - mfxU16 WhitePointX; - mfxU16 WhitePointY; - mfxU32 MaxDisplayMasteringLuminance; - mfxU32 MinDisplayMasteringLuminance; -} mfxExtMasteringDisplayColourVolume; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 reserved[9]; - - mfxU16 InsertPayloadToggle; - mfxU16 MaxContentLightLevel; - mfxU16 MaxPicAverageLightLevel; -} mfxExtContentLightLevelInfo; -MFX_PACK_END() -#endif - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved[14]; - - struct { - mfxU16 ClockTimestampFlag; - mfxU16 CtType; - mfxU16 NuitFieldBasedFlag; - mfxU16 CountingType; - mfxU16 FullTimestampFlag; - mfxU16 DiscontinuityFlag; - mfxU16 CntDroppedFlag; - mfxU16 NFrames; - mfxU16 SecondsFlag; - mfxU16 MinutesFlag; - mfxU16 HoursFlag; - mfxU16 SecondsValue; - mfxU16 MinutesValue; - mfxU16 HoursValue; - mfxU32 TimeOffset; - } TimeStamp[3]; -} mfxExtPictureTimingSEI; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU32 reserved1[4]; - mfxU16 reserved2; - mfxU16 BaseLayerPID; - - struct { - mfxU16 Scale; - mfxU16 reserved[3]; - }Layer[8]; -} mfxExtAvcTemporalLayers; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU32 MBPerSec; - mfxU16 reserved[58]; -} mfxExtEncoderCapability; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 StartNewSequence; - mfxU16 reserved[11]; -} mfxExtEncoderResetOption; -MFX_PACK_END() - -/*LongTermIdx*/ -enum { - MFX_LONGTERM_IDX_NO_IDX = 0xFFFF -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU32 FrameOrder; - mfxU16 PicStruct; - mfxU16 LongTermIdx; - mfxU32 MAD; - mfxU16 BRCPanicMode; - mfxU16 QP; - mfxU32 SecondFieldOffset; - mfxU16 reserved[2]; - - struct { - mfxU32 FrameOrder; - mfxU16 PicStruct; - mfxU16 LongTermIdx; - mfxU16 reserved[4]; - } UsedRefListL0[32], UsedRefListL1[32]; -} mfxExtAVCEncodedFrameInfo; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct mfxVPPCompInputStream { - mfxU32 DstX; - mfxU32 DstY; - mfxU32 DstW; - mfxU32 DstH; - - mfxU16 LumaKeyEnable; - mfxU16 LumaKeyMin; - mfxU16 LumaKeyMax; - - mfxU16 GlobalAlphaEnable; - mfxU16 GlobalAlpha; - mfxU16 PixelAlphaEnable; - - mfxU16 TileId; - - mfxU16 reserved2[17]; -} mfxVPPCompInputStream; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; - - /* background color*/ - union { - mfxU16 Y; - mfxU16 R; - }; - union { - mfxU16 U; - mfxU16 G; - }; - union { - mfxU16 V; - mfxU16 B; - }; - mfxU16 NumTiles; - mfxU16 reserved1[23]; - - mfxU16 NumInputStream; - mfxVPPCompInputStream *InputStream; -} mfxExtVPPComposite; -MFX_PACK_END() - -/* TransferMatrix */ -enum { - MFX_TRANSFERMATRIX_UNKNOWN = 0, - MFX_TRANSFERMATRIX_BT709 = 1, - MFX_TRANSFERMATRIX_BT601 = 2 -}; - -/* NominalRange */ -enum { - MFX_NOMINALRANGE_UNKNOWN = 0, - MFX_NOMINALRANGE_0_255 = 1, - MFX_NOMINALRANGE_16_235 = 2 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 reserved1[4]; - - union { - struct { // Init - struct { - mfxU16 TransferMatrix; - mfxU16 NominalRange; - mfxU16 reserved2[6]; - } In, Out; - }; - struct { // Runtime - mfxU16 TransferMatrix; - mfxU16 NominalRange; - mfxU16 reserved3[14]; - }; - }; -} mfxExtVPPVideoSignalInfo; -MFX_PACK_END() - -/* ROI encoding mode */ -enum { - MFX_ROI_MODE_PRIORITY = 0, - MFX_ROI_MODE_QP_DELTA = 1, - MFX_ROI_MODE_QP_VALUE = 2 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 NumROI; - mfxU16 ROIMode; - mfxU16 reserved1[10]; - - struct { - mfxU32 Left; - mfxU32 Top; - mfxU32 Right; - mfxU32 Bottom; - union { - mfxI16 Priority; - mfxI16 DeltaQP; - }; - mfxU16 reserved2[7]; - } ROI[256]; -} mfxExtEncoderROI; -MFX_PACK_END() - -/*Deinterlacing Mode*/ -enum { - MFX_DEINTERLACING_BOB = 1, - MFX_DEINTERLACING_ADVANCED = 2, - MFX_DEINTERLACING_AUTO_DOUBLE = 3, - MFX_DEINTERLACING_AUTO_SINGLE = 4, - MFX_DEINTERLACING_FULL_FR_OUT = 5, - MFX_DEINTERLACING_HALF_FR_OUT = 6, - MFX_DEINTERLACING_24FPS_OUT = 7, - MFX_DEINTERLACING_FIXED_TELECINE_PATTERN = 8, - MFX_DEINTERLACING_30FPS_OUT = 9, - MFX_DEINTERLACING_DETECT_INTERLACE = 10, - MFX_DEINTERLACING_ADVANCED_NOREF = 11, - MFX_DEINTERLACING_ADVANCED_SCD = 12, - MFX_DEINTERLACING_FIELD_WEAVING = 13 -}; - -/*TelecinePattern*/ -enum { - MFX_TELECINE_PATTERN_32 = 0, - MFX_TELECINE_PATTERN_2332 = 1, - MFX_TELECINE_PATTERN_FRAME_REPEAT = 2, - MFX_TELECINE_PATTERN_41 = 3, - MFX_TELECINE_POSITION_PROVIDED = 4 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 Mode; - mfxU16 TelecinePattern; - mfxU16 TelecineLocation; - mfxU16 reserved[9]; -} mfxExtVPPDeinterlacing; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 NumRefIdxL0Active; - mfxU16 NumRefIdxL1Active; - mfxU16 reserved[2]; - - struct mfxRefPic{ - mfxU32 FrameOrder; - mfxU16 PicStruct; - mfxU16 reserved[5]; - } RefPicList0[32], RefPicList1[32]; - -}mfxExtAVCRefLists; -MFX_PACK_END() - -enum { - MFX_VPP_COPY_FRAME =0x01, - MFX_VPP_COPY_FIELD =0x02, - MFX_VPP_SWAP_FIELDS =0x03 -}; - -/*PicType*/ -enum { - MFX_PICTYPE_UNKNOWN =0x00, - MFX_PICTYPE_FRAME =0x01, - MFX_PICTYPE_TOPFIELD =0x02, - MFX_PICTYPE_BOTTOMFIELD =0x04 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Mode; - mfxU16 InField; - mfxU16 OutField; - mfxU16 reserved[25]; -} mfxExtVPPFieldProcessing; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - struct mfxIn{ - mfxU16 CropX; - mfxU16 CropY; - mfxU16 CropW; - mfxU16 CropH; - mfxU16 reserved[12]; - }In; - - struct mfxOut{ - mfxU32 FourCC; - mfxU16 ChromaFormat; - mfxU16 reserved1; - - mfxU16 Width; - mfxU16 Height; - - mfxU16 CropX; - mfxU16 CropY; - mfxU16 CropW; - mfxU16 CropH; - mfxU16 reserved[22]; - }Out; - - mfxU16 reserved[13]; -} mfxExtDecVideoProcessing; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 ChromaLocInfoPresentFlag; - mfxU16 ChromaSampleLocTypeTopField; - mfxU16 ChromaSampleLocTypeBottomField; - mfxU16 reserved[9]; -} mfxExtChromaLocInfo; -MFX_PACK_END() - -/* MBQPMode */ -enum { - MFX_MBQP_MODE_QP_VALUE = 0, // supported in CQP mode only - MFX_MBQP_MODE_QP_DELTA = 1, - MFX_MBQP_MODE_QP_ADAPTIVE = 2 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct{ - union { - mfxU8 QP; - mfxI8 DeltaQP; - }; - mfxU16 Mode; -} mfxQPandMode; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - mfxU32 reserved[10]; - mfxU16 Mode; // see MBQPMode enum - mfxU16 BlockSize; // QP block size, valid for HEVC only during Init and Runtime - mfxU32 NumQPAlloc; // Size of allocated by application QP or DeltaQP array - union { - mfxU8 *QP; // Block QP value. Valid when Mode = MFX_MBQP_MODE_QP_VALUE - mfxI8 *DeltaQP; // For block i: QP[i] = BrcQP[i] + DeltaQP[i]. Valid when Mode = MFX_MBQP_MODE_QP_DELTA -#if (MFX_VERSION >= 1034) - mfxQPandMode *QPmode; // Block-granularity modes when MFX_MBQP_MODE_QP_ADAPTIVE is set -#endif - mfxU64 reserved2; - }; -} mfxExtMBQP; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; /* Extension buffer header. Header.BufferId must be equal to MFX_EXTBUFF_INSERT_HEADERS. */ - mfxU16 SPS; /* tri-state option to insert SPS */ - mfxU16 PPS; /* tri-state option to insert PPS */ - mfxU16 reserved[8]; -} mfxExtInsertHeaders; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxExtBuffer Header; /* Extension buffer header. Header.BufferId must be equal to MFX_EXTBUFF_ENCODER_IPCM_AREA. */ - mfxU16 reserve1[10]; - - mfxU16 NumArea; /* Number of Area's */ - struct area { - mfxU32 Left; /* Left Area's coordinate. */ - mfxU32 Top; /* Top Area's coordinate. */ - mfxU32 Right; /* Right Area's coordinate. */ - mfxU32 Bottom; /* Bottom Area's coordinate. */ - - mfxU16 reserved2[8]; - } * Areas; /* Array of areas. */ -} mfxExtEncoderIPCMArea; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - mfxU32 reserved[11]; - mfxU32 MapSize; - union { - mfxU8 *Map; - mfxU64 reserved2; - }; -} mfxExtMBForceIntra; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 NumTileRows; - mfxU16 NumTileColumns; - mfxU16 reserved[74]; -}mfxExtHEVCTiles; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - mfxU32 reserved[11]; - mfxU32 MapSize; - union { - mfxU8 *Map; - mfxU64 reserved2; - }; -} mfxExtMBDisableSkipMap; -MFX_PACK_END() - -#if (MFX_VERSION >= MFX_VERSION_NEXT) -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 DPBSize; - mfxU16 reserved[11]; - - struct { - mfxU32 FrameOrder; - mfxU16 PicType; - mfxU16 LongTermIdx; - mfxU16 reserved[4]; - } DPB[32]; -} mfxExtDPB; -MFX_PACK_END() - -#endif - -/*GeneralConstraintFlags*/ -enum { - /* REXT Profile constraint flags*/ - MFX_HEVC_CONSTR_REXT_MAX_12BIT = (1 << 0), - MFX_HEVC_CONSTR_REXT_MAX_10BIT = (1 << 1), - MFX_HEVC_CONSTR_REXT_MAX_8BIT = (1 << 2), - MFX_HEVC_CONSTR_REXT_MAX_422CHROMA = (1 << 3), - MFX_HEVC_CONSTR_REXT_MAX_420CHROMA = (1 << 4), - MFX_HEVC_CONSTR_REXT_MAX_MONOCHROME = (1 << 5), - MFX_HEVC_CONSTR_REXT_INTRA = (1 << 6), - MFX_HEVC_CONSTR_REXT_ONE_PICTURE_ONLY = (1 << 7), - MFX_HEVC_CONSTR_REXT_LOWER_BIT_RATE = (1 << 8) -}; - -#if (MFX_VERSION >= 1026) - -/* SampleAdaptiveOffset */ -enum { - MFX_SAO_UNKNOWN = 0x00, - MFX_SAO_DISABLE = 0x01, - MFX_SAO_ENABLE_LUMA = 0x02, - MFX_SAO_ENABLE_CHROMA = 0x04 -}; - -#endif - -/* This struct has 4-byte alignment for binary compatibility with previously released versions of API */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 PicWidthInLumaSamples; - mfxU16 PicHeightInLumaSamples; - mfxU64 GeneralConstraintFlags; -#if (MFX_VERSION >= 1026) - mfxU16 SampleAdaptiveOffset; /* see enum SampleAdaptiveOffset, valid during Init and Runtime */ - mfxU16 LCUSize; - mfxU16 reserved[116]; -#else - mfxU16 reserved[118]; -#endif -} mfxExtHEVCParam; -MFX_PACK_END() - -#if (MFX_VERSION >= 1025) -/*ErrorTypes in mfxExtDecodeErrorReport*/ -enum { - MFX_ERROR_PPS = (1 << 0), - MFX_ERROR_SPS = (1 << 1), - MFX_ERROR_SLICEHEADER = (1 << 2), - MFX_ERROR_SLICEDATA = (1 << 3), - MFX_ERROR_FRAME_GAP = (1 << 4), -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU32 ErrorTypes; - mfxU16 reserved[10]; -} mfxExtDecodeErrorReport; -MFX_PACK_END() - -#endif - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 FrameType; - mfxU16 reserved[59]; -} mfxExtDecodedFrameInfo; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 DropFrameFlag; - mfxU16 TimeCodeHours; - mfxU16 TimeCodeMinutes; - mfxU16 TimeCodeSeconds; - mfxU16 TimeCodePictures; - mfxU16 reserved[7]; -} mfxExtTimeCode; -MFX_PACK_END() - -/*RegionType*/ -enum { - MFX_HEVC_REGION_SLICE = 0 -}; - -/*RegionEncoding*/ -enum { - MFX_HEVC_REGION_ENCODING_ON = 0, - MFX_HEVC_REGION_ENCODING_OFF = 1 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU32 RegionId; - mfxU16 RegionType; - mfxU16 RegionEncoding; - mfxU16 reserved[24]; -} mfxExtHEVCRegion; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 LumaLog2WeightDenom; // 0..7 - mfxU16 ChromaLog2WeightDenom; // 0..7 - mfxU16 LumaWeightFlag[2][32]; // [list] 0,1 - mfxU16 ChromaWeightFlag[2][32]; // [list] 0,1 - mfxI16 Weights[2][32][3][2]; // [list][list entry][Y, Cb, Cr][weight, offset] - mfxU16 reserved[58]; -} mfxExtPredWeightTable; -MFX_PACK_END() - -#if (MFX_VERSION >= 1027) -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 EnableRoundingIntra; // tri-state option - mfxU16 RoundingOffsetIntra; // valid value [0,7] - mfxU16 EnableRoundingInter; // tri-state option - mfxU16 RoundingOffsetInter; // valid value [0,7] - - mfxU16 reserved[24]; -} mfxExtAVCRoundingOffset; -MFX_PACK_END() -#endif - -#if (MFX_VERSION >= MFX_VERSION_NEXT) -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved[12]; - - struct { - mfxU16 Scale; - mfxU16 QPI; - mfxU16 QPP; - mfxU16 QPB; - mfxU32 TargetKbps; - mfxU32 MaxKbps; - mfxU32 BufferSizeInKB; - mfxU32 InitialDelayInKB; - mfxU16 reserved1[20]; - } Layer[8]; -} mfxExtTemporalLayers; -MFX_PACK_END() - -#endif - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 NumRect; - mfxU16 reserved1[11]; - - struct { - mfxU32 Left; - mfxU32 Top; - mfxU32 Right; - mfxU32 Bottom; - - mfxU16 reserved2[8]; - } Rect[256]; -} mfxExtDirtyRect; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 NumRect; - mfxU16 reserved1[11]; - - struct { - mfxU32 DestLeft; - mfxU32 DestTop; - mfxU32 DestRight; - mfxU32 DestBottom; - - mfxU32 SourceLeft; - mfxU32 SourceTop; - mfxU16 reserved2[4]; - } Rect[256]; -} mfxExtMoveRect; -MFX_PACK_END() - -#if (MFX_VERSION >= MFX_VERSION_NEXT) - -/* ScalingMatrixType */ -enum { - MFX_SCALING_MATRIX_SPS = 1, - MFX_SCALING_MATRIX_PPS = 2 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Type; - mfxU16 reserved[5]; - - /* [4x4_Intra_Y, 4x4_Intra_Cb, 4x4_Intra_Cr, - 4x4_Inter_Y, 4x4_Inter_Cb, 4x4_Inter_Cr, - 8x8_Intra_Y, 8x8_Inter_Y, 8x8_Intra_Cb, - 8x8_Inter_Cb, 8x8_Intra_Cr, 8x8_Inter_Cr] */ - mfxU8 ScalingListPresent[12]; - - /* [Intra_Y, Intra_Cb, Intra_Cr, - Inter_Y, Inter_Cb, Inter_Cr] */ - mfxU8 ScalingList4x4[6][16]; - - /* [Intra_Y, Inter_Y, Intra_Cb, - Inter_Cb, Intra_Cr, Inter_Cr] */ - mfxU8 ScalingList8x8[6][64]; -} mfxExtAVCScalingMatrix; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 reserved[28]; - - mfxU8 LoadMatrix[4]; // [LumaIntra, LumaInter, ChromaIntra, ChromaInter] - mfxU8 Matrix[4][64]; // [LumaIntra, LumaInter, ChromaIntra, ChromaInter] -} mfxExtMPEG2QuantMatrix; -MFX_PACK_END() - -#endif - -/* Angle */ -enum { - MFX_ANGLE_0 = 0, - MFX_ANGLE_90 = 90, - MFX_ANGLE_180 = 180, - MFX_ANGLE_270 = 270 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Angle; - mfxU16 reserved[11]; -} mfxExtVPPRotation; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - mfxU16 SliceSizeOverflow; - mfxU16 NumSliceNonCopliant; - mfxU16 NumEncodedSlice; - mfxU16 NumSliceSizeAlloc; - union { - mfxU16 *SliceSize; - mfxU64 reserved1; - }; - - mfxU16 reserved[20]; -} mfxExtEncodedSlicesInfo; -MFX_PACK_END() - -/* ScalingMode */ -enum { - MFX_SCALING_MODE_DEFAULT = 0, - MFX_SCALING_MODE_LOWPOWER = 1, - MFX_SCALING_MODE_QUALITY = 2 -}; - -#if (MFX_VERSION >= 1033) -/* Interpolation Method */ -enum { - MFX_INTERPOLATION_DEFAULT = 0, - MFX_INTERPOLATION_NEAREST_NEIGHBOR = 1, - MFX_INTERPOLATION_BILINEAR = 2, - MFX_INTERPOLATION_ADVANCED = 3 -}; -#endif - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 ScalingMode; -#if (MFX_VERSION >= 1033) - mfxU16 InterpolationMethod; - mfxU16 reserved[10]; -#else - mfxU16 reserved[11]; -#endif -} mfxExtVPPScaling; -MFX_PACK_END() - -#if (MFX_VERSION >= MFX_VERSION_NEXT) - -/* SceneChangeType */ -enum { - MFX_SCENE_NO_CHANGE = 0, - MFX_SCENE_START = 1, - MFX_SCENE_END = 2 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Type; - mfxU16 reserved[11]; -} mfxExtSceneChange; -MFX_PACK_END() - -#endif - -typedef mfxExtAVCRefListCtrl mfxExtHEVCRefListCtrl; -typedef mfxExtAVCRefLists mfxExtHEVCRefLists; -typedef mfxExtAvcTemporalLayers mfxExtHEVCTemporalLayers; - -/* MirroringType */ -enum -{ - MFX_MIRRORING_DISABLED = 0, - MFX_MIRRORING_HORIZONTAL = 1, - MFX_MIRRORING_VERTICAL = 2 -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Type; - mfxU16 reserved[11]; -} mfxExtVPPMirroring; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 StickTop; /* tri-state option */ - mfxU16 StickBottom; /* tri-state option */ - mfxU16 StickLeft; /* tri-state option */ - mfxU16 StickRight; /* tri-state option */ - mfxU16 reserved[8]; -} mfxExtMVOverPicBoundaries; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Enable; /* tri-state option */ - mfxU16 reserved[11]; -} mfxExtVPPColorFill; -MFX_PACK_END() - -#if (MFX_VERSION >= 1025) - -/* ChromaSiting */ -enum { - MFX_CHROMA_SITING_UNKNOWN = 0x0000, - MFX_CHROMA_SITING_VERTICAL_TOP = 0x0001, /* Chroma samples are co-sited vertically on the top with the luma samples. */ - MFX_CHROMA_SITING_VERTICAL_CENTER = 0x0002, /* Chroma samples are not co-sited vertically with the luma samples. */ - MFX_CHROMA_SITING_VERTICAL_BOTTOM = 0x0004, /* Chroma samples are co-sited vertically on the bottom with the luma samples. */ - MFX_CHROMA_SITING_HORIZONTAL_LEFT = 0x0010, /* Chroma samples are co-sited horizontally on the left with the luma samples. */ - MFX_CHROMA_SITING_HORIZONTAL_CENTER = 0x0020 /* Chroma samples are not co-sited horizontally with the luma samples. */ -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 ChromaSiting; - mfxU16 reserved[27]; -} mfxExtColorConversion; -MFX_PACK_END() - -#endif - -#if (MFX_VERSION >= 1026) -/* VP9ReferenceFrame */ -enum { - MFX_VP9_REF_INTRA = 0, - MFX_VP9_REF_LAST = 1, - MFX_VP9_REF_GOLDEN = 2, - MFX_VP9_REF_ALTREF = 3 -}; - -/* SegmentIdBlockSize */ -enum { - MFX_VP9_SEGMENT_ID_BLOCK_SIZE_UNKNOWN = 0, - MFX_VP9_SEGMENT_ID_BLOCK_SIZE_8x8 = 8, - MFX_VP9_SEGMENT_ID_BLOCK_SIZE_16x16 = 16, - MFX_VP9_SEGMENT_ID_BLOCK_SIZE_32x32 = 32, - MFX_VP9_SEGMENT_ID_BLOCK_SIZE_64x64 = 64, -}; - -/* SegmentFeature */ -enum { - MFX_VP9_SEGMENT_FEATURE_QINDEX = 0x0001, - MFX_VP9_SEGMENT_FEATURE_LOOP_FILTER = 0x0002, - MFX_VP9_SEGMENT_FEATURE_REFERENCE = 0x0004, - MFX_VP9_SEGMENT_FEATURE_SKIP = 0x0008 /* (0,0) MV, no residual */ -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU16 FeatureEnabled; /* see enum SegmentFeature */ - mfxI16 QIndexDelta; - mfxI16 LoopFilterLevelDelta; - mfxU16 ReferenceFrame; /* see enum VP9ReferenceFrame */ - mfxU16 reserved[12]; -} mfxVP9SegmentParam; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - mfxU16 NumSegments; /* 0..8 */ - mfxVP9SegmentParam Segment[8]; - mfxU16 SegmentIdBlockSize; /* see enum SegmentIdBlockSize */ - mfxU32 NumSegmentIdAlloc; /* >= (Ceil(Width / SegmentIdBlockSize) * Ceil(Height / SegmentIdBlockSize)) */ - union { - mfxU8 *SegmentId; /*[NumSegmentIdAlloc] = 0..7, index in Segment array, blocks of SegmentIdBlockSize map */ - mfxU64 reserved1; - }; - mfxU16 reserved[52]; -} mfxExtVP9Segmentation; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU16 FrameRateScale; /* Layer[n].FrameRateScale = Layer[n - 1].FrameRateScale * (uint)m */ - mfxU16 TargetKbps; /* affected by BRCParamMultiplier, Layer[n].TargetKbps > Layer[n - 1].TargetKbps */ - mfxU16 reserved[14]; -} mfxVP9TemporalLayer; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxVP9TemporalLayer Layer[8]; - mfxU16 reserved[60]; -} mfxExtVP9TemporalLayers; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 FrameWidth; - mfxU16 FrameHeight; - - mfxU16 WriteIVFHeaders; /* tri-state option */ - -#if (MFX_VERSION >= MFX_VERSION_NEXT) - mfxI16 LoopFilterRefDelta[4]; - mfxI16 LoopFilterModeDelta[2]; -#else // API 1.26 - mfxI16 reserved1[6]; -#endif - mfxI16 QIndexDeltaLumaDC; - mfxI16 QIndexDeltaChromaAC; - mfxI16 QIndexDeltaChromaDC; -#if (MFX_VERSION >= 1029) - mfxU16 NumTileRows; - mfxU16 NumTileColumns; - mfxU16 reserved[110]; -#else - mfxU16 reserved[112]; -#endif -} mfxExtVP9Param; -MFX_PACK_END() - -#endif // #if (MFX_VERSION >= 1026) - -#if (MFX_VERSION >= 1025) -/* Multi-Frame Mode */ -enum { - MFX_MF_DEFAULT = 0, - MFX_MF_DISABLED = 1, - MFX_MF_AUTO = 2, - MFX_MF_MANUAL = 3 -}; - -/* Multi-Frame Initialization parameters */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 MFMode; - mfxU16 MaxNumFrames; - - mfxU16 reserved[58]; -} mfxExtMultiFrameParam; -MFX_PACK_END() - -/* Multi-Frame Run-time controls */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU32 Timeout; /* timeout in millisecond */ - mfxU16 Flush; /* Flush internal frame buffer, e.g. submit all collected frames. */ - - mfxU16 reserved[57]; -} mfxExtMultiFrameControl; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU16 Type; - mfxU16 reserved1; - mfxU32 Offset; - mfxU32 Size; - mfxU32 reserved[5]; -} mfxEncodedUnitInfo; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_L_TYPE() -typedef struct { - mfxExtBuffer Header; - - union { - mfxEncodedUnitInfo *UnitInfo; - mfxU64 reserved1; - }; - mfxU16 NumUnitsAlloc; - mfxU16 NumUnitsEncoded; - - mfxU16 reserved[22]; -} mfxExtEncodedUnitsInfo; -MFX_PACK_END() - -#endif - -#if (MFX_VERSION >= 1026) -#if (MFX_VERSION >= MFX_VERSION_NEXT) -/* MCTFTemporalMode */ -enum { - MFX_MCTF_TEMPORAL_MODE_UNKNOWN = 0, - MFX_MCTF_TEMPORAL_MODE_SPATIAL = 1, - MFX_MCTF_TEMPORAL_MODE_1REF = 2, - MFX_MCTF_TEMPORAL_MODE_2REF = 3, - MFX_MCTF_TEMPORAL_MODE_4REF = 4 -}; -#endif - -/* MCTF initialization & runtime */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU16 FilterStrength; -#if (MFX_VERSION >= MFX_VERSION_NEXT) - mfxU16 Overlap; /* tri-state option */ - mfxU32 BitsPerPixelx100k; - mfxU16 Deblocking; /* tri-state option */ - mfxU16 TemporalMode; - mfxU16 MVPrecision; - mfxU16 reserved[21]; -#else - mfxU16 reserved[27]; -#endif -} mfxExtVppMctf; -MFX_PACK_END() - -#endif - -#if (MFX_VERSION >= 1031) -/* Multi-adapters Querying structs */ -typedef enum -{ - MFX_COMPONENT_ENCODE = 1, - MFX_COMPONENT_DECODE = 2, - MFX_COMPONENT_VPP = 3 -} mfxComponentType; - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct -{ - mfxComponentType Type; - mfxVideoParam Requirements; - - mfxU16 reserved[4]; -} mfxComponentInfo; -MFX_PACK_END() - -/* Adapter description */ -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct -{ - mfxPlatform Platform; - mfxU32 Number; - - mfxU16 reserved[14]; -} mfxAdapterInfo; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct -{ - mfxAdapterInfo * Adapters; - mfxU32 NumAlloc; - mfxU32 NumActual; - - mfxU16 reserved[4]; -} mfxAdaptersInfo; -MFX_PACK_END() - -#endif - -#if (MFX_VERSION >= 1034) -/* FilmGrainFlags */ -enum { - MFX_FILM_GRAIN_APPLY = (1 << 0), - MFX_FILM_GRAIN_UPDATE = (1 << 1), - MFX_FILM_GRAIN_CHROMA_SCALING_FROM_LUMA = (1 << 2), - MFX_FILM_GRAIN_OVERLAP = (1 << 3), - MFX_FILM_GRAIN_CLIP_TO_RESTRICTED_RANGE = (1 << 4) -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxU8 Value; - mfxU8 Scaling; -} mfxAV1FilmGrainPoint; -MFX_PACK_END() - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 FilmGrainFlags; /* FilmGrainFlags */ - mfxU16 GrainSeed; /* 0..65535 */ - - mfxU8 RefIdx; /* 0..6 */ - mfxU8 NumYPoints; /* 0..14 */ - mfxU8 NumCbPoints; /* 0..10 */ - mfxU8 NumCrPoints; /* 0..10 */ - - mfxAV1FilmGrainPoint PointY[14]; - mfxAV1FilmGrainPoint PointCb[10]; - mfxAV1FilmGrainPoint PointCr[10]; - - mfxU8 GrainScalingMinus8; /* 0..3 */ - mfxU8 ArCoeffLag; /* 0..3 */ - - mfxU8 ArCoeffsYPlus128[24]; /* 0..255 */ - mfxU8 ArCoeffsCbPlus128[25]; /* 0..255 */ - mfxU8 ArCoeffsCrPlus128[25]; /* 0..255 */ - - mfxU8 ArCoeffShiftMinus6; /* 0..3 */ - mfxU8 GrainScaleShift; /* 0..3 */ - - mfxU8 CbMult; /* 0..255 */ - mfxU8 CbLumaMult; /* 0..255 */ - mfxU16 CbOffset; /* 0..511 */ - - mfxU8 CrMult; /* 0..255 */ - mfxU8 CrLumaMult; /* 0..255 */ - mfxU16 CrOffset; /* 0..511 */ - - mfxU16 reserved[43]; -} mfxExtAV1FilmGrainParam; -MFX_PACK_END() - -#endif - -#if (MFX_VERSION >= 1031) -/* PartialBitstreamOutput */ -enum { - MFX_PARTIAL_BITSTREAM_NONE = 0, /* Don't use partial output */ - MFX_PARTIAL_BITSTREAM_SLICE = 1, /* Partial bitstream output will be aligned to slice granularity */ - MFX_PARTIAL_BITSTREAM_BLOCK = 2, /* Partial bitstream output will be aligned to user-defined block size granularity */ - MFX_PARTIAL_BITSTREAM_ANY = 3 /* Partial bitstream output will be return any coded data avilable at the end of SyncOperation timeout */ -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - mfxU32 BlockSize; /* output block granulatiry for Granularity = MFX_PARTIAL_BITSTREAM_BLOCK */ - mfxU16 Granularity; /* granulatiry of the partial bitstream: slice/block/any */ - mfxU16 reserved[8]; -} mfxExtPartialBitstreamParam; -MFX_PACK_END() -#endif - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif +// Copyright (c) 2018-2020 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXSTRUCTURES_H__ +#define __MFXSTRUCTURES_H__ +#include "mfxcommon.h" + +#if !defined (__GNUC__) +#pragma warning(disable: 4201) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Frame ID for SVC and MVC */ +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU16 TemporalId; + mfxU16 PriorityId; + union { + struct { + mfxU16 DependencyId; + mfxU16 QualityId; + }; + struct { + mfxU16 ViewId; + }; + }; +} mfxFrameId; +MFX_PACK_END() + +/* This struct has 4-byte alignment for binary compatibility with previously released versions of API */ +MFX_PACK_BEGIN_USUAL_STRUCT() +/* Frame Info */ +typedef struct { + mfxU32 reserved[4]; + mfxU16 reserved4; + mfxU16 BitDepthLuma; + mfxU16 BitDepthChroma; + mfxU16 Shift; + + mfxFrameId FrameId; + + mfxU32 FourCC; + union { + struct { /* Frame parameters */ + mfxU16 Width; + mfxU16 Height; + + mfxU16 CropX; + mfxU16 CropY; + mfxU16 CropW; + mfxU16 CropH; + }; + struct { /* Buffer parameters (for plain formats like P8) */ + mfxU64 BufferSize; + mfxU32 reserved5; + }; + }; + + mfxU32 FrameRateExtN; + mfxU32 FrameRateExtD; + mfxU16 reserved3; + + mfxU16 AspectRatioW; + mfxU16 AspectRatioH; + + mfxU16 PicStruct; + mfxU16 ChromaFormat; + mfxU16 reserved2; +} mfxFrameInfo; +MFX_PACK_END() + +/* FourCC */ +enum { + MFX_FOURCC_NV12 = MFX_MAKEFOURCC('N','V','1','2'), /* Native Format */ + MFX_FOURCC_YV12 = MFX_MAKEFOURCC('Y','V','1','2'), + MFX_FOURCC_NV16 = MFX_MAKEFOURCC('N','V','1','6'), + MFX_FOURCC_YUY2 = MFX_MAKEFOURCC('Y','U','Y','2'), +#if (MFX_VERSION >= 1028) + MFX_FOURCC_RGB565 = MFX_MAKEFOURCC('R','G','B','2'), /* 2 bytes per pixel, uint16 in little-endian format, where 0-4 bits are blue, bits 5-10 are green and bits 11-15 are red */ + MFX_FOURCC_RGBP = MFX_MAKEFOURCC('R','G','B','P'), +#endif + MFX_FOURCC_RGB3 = MFX_MAKEFOURCC('R','G','B','3'), /* deprecated */ + MFX_FOURCC_RGB4 = MFX_MAKEFOURCC('R','G','B','4'), /* ARGB in that order, A channel is 8 MSBs */ + MFX_FOURCC_P8 = 41, /* D3DFMT_P8 */ + MFX_FOURCC_P8_TEXTURE = MFX_MAKEFOURCC('P','8','M','B'), + MFX_FOURCC_P010 = MFX_MAKEFOURCC('P','0','1','0'), +#if (MFX_VERSION >= 1031) + MFX_FOURCC_P016 = MFX_MAKEFOURCC('P','0','1','6'), +#endif + MFX_FOURCC_P210 = MFX_MAKEFOURCC('P','2','1','0'), + MFX_FOURCC_BGR4 = MFX_MAKEFOURCC('B','G','R','4'), /* ABGR in that order, A channel is 8 MSBs */ + MFX_FOURCC_A2RGB10 = MFX_MAKEFOURCC('R','G','1','0'), /* ARGB in that order, A channel is two MSBs */ + MFX_FOURCC_ARGB16 = MFX_MAKEFOURCC('R','G','1','6'), /* ARGB in that order, 64 bits, A channel is 16 MSBs */ + MFX_FOURCC_ABGR16 = MFX_MAKEFOURCC('B','G','1','6'), /* ABGR in that order, 64 bits, A channel is 16 MSBs */ + MFX_FOURCC_R16 = MFX_MAKEFOURCC('R','1','6','U'), + MFX_FOURCC_AYUV = MFX_MAKEFOURCC('A','Y','U','V'), /* YUV 4:4:4, AYUV in that order, A channel is 8 MSBs */ + MFX_FOURCC_AYUV_RGB4 = MFX_MAKEFOURCC('A','V','U','Y'), /* ARGB in that order, A channel is 8 MSBs stored in AYUV surface*/ + MFX_FOURCC_UYVY = MFX_MAKEFOURCC('U','Y','V','Y'), +#if (MFX_VERSION >= 1027) + MFX_FOURCC_Y210 = MFX_MAKEFOURCC('Y','2','1','0'), + MFX_FOURCC_Y410 = MFX_MAKEFOURCC('Y','4','1','0'), +#endif +#if (MFX_VERSION >= 1031) + MFX_FOURCC_Y216 = MFX_MAKEFOURCC('Y','2','1','6'), + MFX_FOURCC_Y416 = MFX_MAKEFOURCC('Y','4','1','6'), +#endif + MFX_FOURCC_NV21 = MFX_MAKEFOURCC('N', 'V', '2', '1'), /* Same as NV12 but with weaved V and U values. */ + MFX_FOURCC_IYUV = MFX_MAKEFOURCC('I', 'Y', 'U', 'V'), /* Same as YV12 except that the U and V plane order is reversed. */ + MFX_FOURCC_I010 = MFX_MAKEFOURCC('I', '0', '1', '0'), /* 10-bit YUV 4:2:0, each component has its own plane. */ +}; + +/* PicStruct */ +enum { + MFX_PICSTRUCT_UNKNOWN =0x00, + MFX_PICSTRUCT_PROGRESSIVE =0x01, + MFX_PICSTRUCT_FIELD_TFF =0x02, + MFX_PICSTRUCT_FIELD_BFF =0x04, + + MFX_PICSTRUCT_FIELD_REPEATED=0x10, /* first field repeated, pic_struct=5 or 6 in H.264 */ + MFX_PICSTRUCT_FRAME_DOUBLING=0x20, /* pic_struct=7 in H.264 */ + MFX_PICSTRUCT_FRAME_TRIPLING=0x40, /* pic_struct=8 in H.264 */ + + MFX_PICSTRUCT_FIELD_SINGLE =0x100, + MFX_PICSTRUCT_FIELD_TOP =MFX_PICSTRUCT_FIELD_SINGLE | MFX_PICSTRUCT_FIELD_TFF, + MFX_PICSTRUCT_FIELD_BOTTOM =MFX_PICSTRUCT_FIELD_SINGLE | MFX_PICSTRUCT_FIELD_BFF, + MFX_PICSTRUCT_FIELD_PAIRED_PREV =0x200, + MFX_PICSTRUCT_FIELD_PAIRED_NEXT =0x400, +}; + +/* ColorFormat */ +enum { + MFX_CHROMAFORMAT_MONOCHROME =0, + MFX_CHROMAFORMAT_YUV420 =1, + MFX_CHROMAFORMAT_YUV422 =2, + MFX_CHROMAFORMAT_YUV444 =3, + MFX_CHROMAFORMAT_YUV400 = MFX_CHROMAFORMAT_MONOCHROME, + MFX_CHROMAFORMAT_YUV411 = 4, + MFX_CHROMAFORMAT_YUV422H = MFX_CHROMAFORMAT_YUV422, + MFX_CHROMAFORMAT_YUV422V = 5, + MFX_CHROMAFORMAT_RESERVED1 = 6 +}; + +enum { + MFX_TIMESTAMP_UNKNOWN = -1 +}; + +enum { + MFX_FRAMEORDER_UNKNOWN = -1 +}; + +/* DataFlag in mfxFrameData */ +enum { + MFX_FRAMEDATA_ORIGINAL_TIMESTAMP = 0x0001 +}; + +/* Corrupted in mfxFrameData */ +enum { + MFX_CORRUPTION_MINOR = 0x0001, + MFX_CORRUPTION_MAJOR = 0x0002, + MFX_CORRUPTION_ABSENT_TOP_FIELD = 0x0004, + MFX_CORRUPTION_ABSENT_BOTTOM_FIELD = 0x0008, + MFX_CORRUPTION_REFERENCE_FRAME = 0x0010, + MFX_CORRUPTION_REFERENCE_LIST = 0x0020 +}; + +#if (MFX_VERSION >= 1027) +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct +{ + mfxU32 U : 10; + mfxU32 Y : 10; + mfxU32 V : 10; + mfxU32 A : 2; +} mfxY410; +MFX_PACK_END() +#endif + +#if (MFX_VERSION >= 1025) +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct +{ + mfxU32 B : 10; + mfxU32 G : 10; + mfxU32 R : 10; + mfxU32 A : 2; +} mfxA2RGB10; +MFX_PACK_END() +#endif + +/* Frame Data Info */ +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + union { + mfxExtBuffer **ExtParam; + mfxU64 reserved2; + }; + mfxU16 NumExtParam; + + mfxU16 reserved[9]; + mfxU16 MemType; + mfxU16 PitchHigh; + + mfxU64 TimeStamp; + mfxU32 FrameOrder; + mfxU16 Locked; + union{ + mfxU16 Pitch; + mfxU16 PitchLow; + }; + + /* color planes */ + union { + mfxU8 *Y; + mfxU16 *Y16; + mfxU8 *R; + }; + union { + mfxU8 *UV; /* for UV merged formats */ + mfxU8 *VU; /* for VU merged formats */ + mfxU8 *CbCr; /* for CbCr merged formats */ + mfxU8 *CrCb; /* for CrCb merged formats */ + mfxU8 *Cb; + mfxU8 *U; + mfxU16 *U16; + mfxU8 *G; +#if (MFX_VERSION >= 1027) + mfxY410 *Y410; /* for Y410 format (merged AVYU) */ +#endif + }; + union { + mfxU8 *Cr; + mfxU8 *V; + mfxU16 *V16; + mfxU8 *B; +#if (MFX_VERSION >= 1025) + mfxA2RGB10 *A2RGB10; /* for A2RGB10 format (merged ARGB) */ +#endif + }; + mfxU8 *A; + mfxMemId MemId; + + /* Additional Flags */ + mfxU16 Corrupted; + mfxU16 DataFlag; +} mfxFrameData; +MFX_PACK_END() + +/* Frame Surface */ +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxU32 reserved[4]; + mfxFrameInfo Info; + mfxFrameData Data; +} mfxFrameSurface1; +MFX_PACK_END() + +enum { + MFX_TIMESTAMPCALC_UNKNOWN = 0, + MFX_TIMESTAMPCALC_TELECINE = 1, +}; + +/* Transcoding Info */ +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU32 reserved[7]; + + mfxU16 LowPower; + mfxU16 BRCParamMultiplier; + + mfxFrameInfo FrameInfo; + mfxU32 CodecId; + mfxU16 CodecProfile; + mfxU16 CodecLevel; + mfxU16 NumThread; + + union { + struct { /* Encoding Options */ + mfxU16 TargetUsage; + + mfxU16 GopPicSize; + mfxU16 GopRefDist; + mfxU16 GopOptFlag; + mfxU16 IdrInterval; + + mfxU16 RateControlMethod; + union { + mfxU16 InitialDelayInKB; + mfxU16 QPI; + mfxU16 Accuracy; + }; + mfxU16 BufferSizeInKB; + union { + mfxU16 TargetKbps; + mfxU16 QPP; + mfxU16 ICQQuality; + }; + union { + mfxU16 MaxKbps; + mfxU16 QPB; + mfxU16 Convergence; + }; + + mfxU16 NumSlice; + mfxU16 NumRefFrame; + mfxU16 EncodedOrder; + }; + struct { /* Decoding Options */ + mfxU16 DecodedOrder; + mfxU16 ExtendedPicStruct; + mfxU16 TimeStampCalc; + mfxU16 SliceGroupsPresent; + mfxU16 MaxDecFrameBuffering; + mfxU16 EnableReallocRequest; +#if (MFX_VERSION >= 1034) + mfxU16 FilmGrain; + mfxU16 IgnoreLevelConstrain; + mfxU16 reserved2[5]; +#else + mfxU16 reserved2[7]; +#endif + }; + struct { /* JPEG Decoding Options */ + mfxU16 JPEGChromaFormat; + mfxU16 Rotation; + mfxU16 JPEGColorFormat; + mfxU16 InterleavedDec; + mfxU8 SamplingFactorH[4]; + mfxU8 SamplingFactorV[4]; + mfxU16 reserved3[5]; + }; + struct { /* JPEG Encoding Options */ + mfxU16 Interleaved; + mfxU16 Quality; + mfxU16 RestartInterval; + mfxU16 reserved5[10]; + }; + }; +} mfxInfoMFX; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU32 reserved[8]; + mfxFrameInfo In; + mfxFrameInfo Out; +} mfxInfoVPP; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU32 AllocId; + mfxU32 reserved[2]; + mfxU16 reserved3; + mfxU16 AsyncDepth; + + union { + mfxInfoMFX mfx; + mfxInfoVPP vpp; + }; + mfxU16 Protected; + mfxU16 IOPattern; + mfxExtBuffer** ExtParam; + mfxU16 NumExtParam; + mfxU16 reserved2; +} mfxVideoParam; +MFX_PACK_END() + +/* IOPattern */ +enum { + MFX_IOPATTERN_IN_VIDEO_MEMORY = 0x01, + MFX_IOPATTERN_IN_SYSTEM_MEMORY = 0x02, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_IOPATTERN_IN_OPAQUE_MEMORY) = 0x04, + MFX_IOPATTERN_OUT_VIDEO_MEMORY = 0x10, + MFX_IOPATTERN_OUT_SYSTEM_MEMORY = 0x20, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_IOPATTERN_OUT_OPAQUE_MEMORY) = 0x40 +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_IOPATTERN_IN_OPAQUE_MEMORY); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_IOPATTERN_OUT_OPAQUE_MEMORY); + +/* CodecId */ +enum { + MFX_CODEC_AVC =MFX_MAKEFOURCC('A','V','C',' '), + MFX_CODEC_HEVC =MFX_MAKEFOURCC('H','E','V','C'), + MFX_CODEC_MPEG2 =MFX_MAKEFOURCC('M','P','G','2'), + MFX_CODEC_VC1 =MFX_MAKEFOURCC('V','C','1',' '), + MFX_CODEC_CAPTURE =MFX_MAKEFOURCC('C','A','P','T'), + MFX_CODEC_VP9 =MFX_MAKEFOURCC('V','P','9',' '), + MFX_CODEC_AV1 =MFX_MAKEFOURCC('A','V','1',' ') +}; + +/* CodecProfile, CodecLevel */ +enum { + MFX_PROFILE_UNKNOWN =0, + MFX_LEVEL_UNKNOWN =0, + + /* AVC Profiles & Levels */ + MFX_PROFILE_AVC_CONSTRAINT_SET0 = (0x100 << 0), + MFX_PROFILE_AVC_CONSTRAINT_SET1 = (0x100 << 1), + MFX_PROFILE_AVC_CONSTRAINT_SET2 = (0x100 << 2), + MFX_PROFILE_AVC_CONSTRAINT_SET3 = (0x100 << 3), + MFX_PROFILE_AVC_CONSTRAINT_SET4 = (0x100 << 4), + MFX_PROFILE_AVC_CONSTRAINT_SET5 = (0x100 << 5), + + MFX_PROFILE_AVC_BASELINE =66, + MFX_PROFILE_AVC_MAIN =77, + MFX_PROFILE_AVC_EXTENDED =88, + MFX_PROFILE_AVC_HIGH =100, + MFX_PROFILE_AVC_HIGH10 =110, + MFX_PROFILE_AVC_HIGH_422 =122, + MFX_PROFILE_AVC_CONSTRAINED_BASELINE =MFX_PROFILE_AVC_BASELINE + MFX_PROFILE_AVC_CONSTRAINT_SET1, + MFX_PROFILE_AVC_CONSTRAINED_HIGH =MFX_PROFILE_AVC_HIGH + MFX_PROFILE_AVC_CONSTRAINT_SET4 + + MFX_PROFILE_AVC_CONSTRAINT_SET5, + MFX_PROFILE_AVC_PROGRESSIVE_HIGH =MFX_PROFILE_AVC_HIGH + MFX_PROFILE_AVC_CONSTRAINT_SET4, + + MFX_LEVEL_AVC_1 =10, + MFX_LEVEL_AVC_1b =9, + MFX_LEVEL_AVC_11 =11, + MFX_LEVEL_AVC_12 =12, + MFX_LEVEL_AVC_13 =13, + MFX_LEVEL_AVC_2 =20, + MFX_LEVEL_AVC_21 =21, + MFX_LEVEL_AVC_22 =22, + MFX_LEVEL_AVC_3 =30, + MFX_LEVEL_AVC_31 =31, + MFX_LEVEL_AVC_32 =32, + MFX_LEVEL_AVC_4 =40, + MFX_LEVEL_AVC_41 =41, + MFX_LEVEL_AVC_42 =42, + MFX_LEVEL_AVC_5 =50, + MFX_LEVEL_AVC_51 =51, + MFX_LEVEL_AVC_52 =52, +#if (MFX_VERSION >= 1035) + MFX_LEVEL_AVC_6 =60, + MFX_LEVEL_AVC_61 =61, + MFX_LEVEL_AVC_62 =62, +#endif + + /* MPEG-2 Profiles & Levels */ + MFX_PROFILE_MPEG2_SIMPLE =0x50, + MFX_PROFILE_MPEG2_MAIN =0x40, + MFX_PROFILE_MPEG2_HIGH =0x10, + + MFX_LEVEL_MPEG2_LOW =0xA, + MFX_LEVEL_MPEG2_MAIN =0x8, + MFX_LEVEL_MPEG2_HIGH =0x4, + MFX_LEVEL_MPEG2_HIGH1440 =0x6, + + /* VC1 Profiles & Levels */ + MFX_PROFILE_VC1_SIMPLE =(0+1), + MFX_PROFILE_VC1_MAIN =(4+1), + MFX_PROFILE_VC1_ADVANCED =(12+1), + + /* VC1 levels for simple & main profiles */ + MFX_LEVEL_VC1_LOW =(0+1), + MFX_LEVEL_VC1_MEDIAN =(2+1), + MFX_LEVEL_VC1_HIGH =(4+1), + + /* VC1 levels for the advanced profile */ + MFX_LEVEL_VC1_0 =(0x00+1), + MFX_LEVEL_VC1_1 =(0x01+1), + MFX_LEVEL_VC1_2 =(0x02+1), + MFX_LEVEL_VC1_3 =(0x03+1), + MFX_LEVEL_VC1_4 =(0x04+1), + + /* HEVC Profiles & Levels & Tiers */ + MFX_PROFILE_HEVC_MAIN =1, + MFX_PROFILE_HEVC_MAIN10 =2, + MFX_PROFILE_HEVC_MAINSP =3, + MFX_PROFILE_HEVC_REXT =4, +#if (MFX_VERSION >= 1032) + MFX_PROFILE_HEVC_SCC =9, +#endif + + MFX_LEVEL_HEVC_1 = 10, + MFX_LEVEL_HEVC_2 = 20, + MFX_LEVEL_HEVC_21 = 21, + MFX_LEVEL_HEVC_3 = 30, + MFX_LEVEL_HEVC_31 = 31, + MFX_LEVEL_HEVC_4 = 40, + MFX_LEVEL_HEVC_41 = 41, + MFX_LEVEL_HEVC_5 = 50, + MFX_LEVEL_HEVC_51 = 51, + MFX_LEVEL_HEVC_52 = 52, + MFX_LEVEL_HEVC_6 = 60, + MFX_LEVEL_HEVC_61 = 61, + MFX_LEVEL_HEVC_62 = 62, + + MFX_TIER_HEVC_MAIN = 0, + MFX_TIER_HEVC_HIGH = 0x100, + + /* VP9 Profiles */ + MFX_PROFILE_VP9_0 = 1, + MFX_PROFILE_VP9_1 = 2, + MFX_PROFILE_VP9_2 = 3, + MFX_PROFILE_VP9_3 = 4, + +#if (MFX_VERSION >= 1034) + /* AV1 Profiles */ + MFX_PROFILE_AV1_MAIN = 1, + MFX_PROFILE_AV1_HIGH = 2, + MFX_PROFILE_AV1_PRO = 3, + + MFX_LEVEL_AV1_2 = 20, + MFX_LEVEL_AV1_21 = 21, + MFX_LEVEL_AV1_22 = 22, + MFX_LEVEL_AV1_23 = 23, + MFX_LEVEL_AV1_3 = 30, + MFX_LEVEL_AV1_31 = 31, + MFX_LEVEL_AV1_32 = 32, + MFX_LEVEL_AV1_33 = 33, + MFX_LEVEL_AV1_4 = 40, + MFX_LEVEL_AV1_41 = 41, + MFX_LEVEL_AV1_42 = 42, + MFX_LEVEL_AV1_43 = 43, + MFX_LEVEL_AV1_5 = 50, + MFX_LEVEL_AV1_51 = 51, + MFX_LEVEL_AV1_52 = 52, + MFX_LEVEL_AV1_53 = 53, + MFX_LEVEL_AV1_6 = 60, + MFX_LEVEL_AV1_61 = 61, + MFX_LEVEL_AV1_62 = 62, + MFX_LEVEL_AV1_63 = 63, +#endif +}; + +/* GopOptFlag */ +enum { + MFX_GOP_CLOSED =1, + MFX_GOP_STRICT =2 +}; + +/* TargetUsages: from 1 to 7 inclusive */ +enum { + MFX_TARGETUSAGE_1 =1, + MFX_TARGETUSAGE_2 =2, + MFX_TARGETUSAGE_3 =3, + MFX_TARGETUSAGE_4 =4, + MFX_TARGETUSAGE_5 =5, + MFX_TARGETUSAGE_6 =6, + MFX_TARGETUSAGE_7 =7, + + MFX_TARGETUSAGE_UNKNOWN =0, + MFX_TARGETUSAGE_BEST_QUALITY =MFX_TARGETUSAGE_1, + MFX_TARGETUSAGE_BALANCED =MFX_TARGETUSAGE_4, + MFX_TARGETUSAGE_BEST_SPEED =MFX_TARGETUSAGE_7 +}; + +/* RateControlMethod */ +enum { + MFX_RATECONTROL_CBR =1, + MFX_RATECONTROL_VBR =2, + MFX_RATECONTROL_CQP =3, + MFX_RATECONTROL_AVBR =4, + MFX_RATECONTROL_RESERVED1 =5, + MFX_RATECONTROL_RESERVED2 =6, + MFX_RATECONTROL_RESERVED3 =100, + MFX_RATECONTROL_RESERVED4 =7, + MFX_RATECONTROL_LA =8, + MFX_RATECONTROL_ICQ =9, + MFX_RATECONTROL_VCM =10, + MFX_RATECONTROL_LA_ICQ =11, + MFX_RATECONTROL_LA_EXT =12, + MFX_RATECONTROL_LA_HRD =13, + MFX_RATECONTROL_QVBR =14, +}; + +/* Trellis control*/ +enum { + MFX_TRELLIS_UNKNOWN =0, + MFX_TRELLIS_OFF =0x01, + MFX_TRELLIS_I =0x02, + MFX_TRELLIS_P =0x04, + MFX_TRELLIS_B =0x08 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved1; + mfxU16 RateDistortionOpt; /* tri-state option */ + mfxU16 MECostType; + mfxU16 MESearchType; + mfxI16Pair MVSearchWindow; + mfxU16 EndOfSequence; /* tri-state option */ + mfxU16 FramePicture; /* tri-state option */ + + mfxU16 CAVLC; /* tri-state option */ + mfxU16 reserved2[2]; + mfxU16 RecoveryPointSEI; /* tri-state option */ + mfxU16 ViewOutput; /* tri-state option */ + mfxU16 NalHrdConformance; /* tri-state option */ + mfxU16 SingleSeiNalUnit; /* tri-state option */ + mfxU16 VuiVclHrdParameters; /* tri-state option */ + + mfxU16 RefPicListReordering; /* tri-state option */ + mfxU16 ResetRefList; /* tri-state option */ + mfxU16 RefPicMarkRep; /* tri-state option */ + mfxU16 FieldOutput; /* tri-state option */ + + mfxU16 IntraPredBlockSize; + mfxU16 InterPredBlockSize; + mfxU16 MVPrecision; + mfxU16 MaxDecFrameBuffering; + + mfxU16 AUDelimiter; /* tri-state option */ + mfxU16 EndOfStream; /* tri-state option */ + mfxU16 PicTimingSEI; /* tri-state option */ + mfxU16 VuiNalHrdParameters; /* tri-state option */ +} mfxExtCodingOption; +MFX_PACK_END() + +enum { + MFX_B_REF_UNKNOWN = 0, + MFX_B_REF_OFF = 1, + MFX_B_REF_PYRAMID = 2 +}; + +enum { + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_UNKNOWN) = 0, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_OFF) = 1, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_2x) = 2, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_4x) = 3 +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_UNKNOWN); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_OFF); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_2x); +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_4x); + +enum { + MFX_BPSEI_DEFAULT = 0x00, + MFX_BPSEI_IFRAME = 0x01 +}; + +enum { + MFX_SKIPFRAME_NO_SKIP = 0, + MFX_SKIPFRAME_INSERT_DUMMY = 1, + MFX_SKIPFRAME_INSERT_NOTHING = 2, + MFX_SKIPFRAME_BRC_ONLY = 3, +}; + +/* Intra refresh types */ +enum { + MFX_REFRESH_NO = 0, + MFX_REFRESH_VERTICAL = 1, + MFX_REFRESH_HORIZONTAL = 2, + MFX_REFRESH_SLICE = 3 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 IntRefType; + mfxU16 IntRefCycleSize; + mfxI16 IntRefQPDelta; + + mfxU32 MaxFrameSize; + mfxU32 MaxSliceSize; + + mfxU16 BitrateLimit; /* tri-state option */ + mfxU16 MBBRC; /* tri-state option */ + mfxU16 ExtBRC; /* tri-state option */ + mfxU16 LookAheadDepth; + mfxU16 Trellis; + mfxU16 RepeatPPS; /* tri-state option */ + mfxU16 BRefType; + mfxU16 AdaptiveI; /* tri-state option */ + mfxU16 AdaptiveB; /* tri-state option */ + mfxU16 LookAheadDS; + mfxU16 NumMbPerSlice; + mfxU16 SkipFrame; + mfxU8 MinQPI; /* 1..51, 0 = default */ + mfxU8 MaxQPI; /* 1..51, 0 = default */ + mfxU8 MinQPP; /* 1..51, 0 = default */ + mfxU8 MaxQPP; /* 1..51, 0 = default */ + mfxU8 MinQPB; /* 1..51, 0 = default */ + mfxU8 MaxQPB; /* 1..51, 0 = default */ + mfxU16 FixedFrameRate; /* tri-state option */ + mfxU16 DisableDeblockingIdc; + mfxU16 DisableVUI; + mfxU16 BufferingPeriodSEI; + mfxU16 EnableMAD; /* tri-state option */ + mfxU16 UseRawRef; /* tri-state option */ +} mfxExtCodingOption2; +MFX_PACK_END() + +/* WeightedPred */ +enum { + MFX_WEIGHTED_PRED_UNKNOWN = 0, + MFX_WEIGHTED_PRED_DEFAULT = 1, + MFX_WEIGHTED_PRED_EXPLICIT = 2, + MFX_WEIGHTED_PRED_IMPLICIT = 3 +}; + +/* ScenarioInfo */ +enum { + MFX_SCENARIO_UNKNOWN = 0, + MFX_SCENARIO_DISPLAY_REMOTING = 1, + MFX_SCENARIO_VIDEO_CONFERENCE = 2, + MFX_SCENARIO_ARCHIVE = 3, + MFX_SCENARIO_LIVE_STREAMING = 4, + MFX_SCENARIO_CAMERA_CAPTURE = 5, + MFX_SCENARIO_VIDEO_SURVEILLANCE = 6, + MFX_SCENARIO_GAME_STREAMING = 7, + MFX_SCENARIO_REMOTE_GAMING = 8 +}; + +/* ContentInfo */ +enum { + MFX_CONTENT_UNKNOWN = 0, + MFX_CONTENT_FULL_SCREEN_VIDEO = 1, + MFX_CONTENT_NON_VIDEO_SCREEN = 2 +}; + +/* PRefType */ +enum { + MFX_P_REF_DEFAULT = 0, + MFX_P_REF_SIMPLE = 1, + MFX_P_REF_PYRAMID = 2 +}; + +#if (MFX_VERSION >= MFX_VERSION_NEXT) + +/* QuantScaleType */ +enum { + MFX_MPEG2_QUANT_SCALE_TYPE_DEFAULT = 0, + MFX_MPEG2_QUANT_SCALE_TYPE_LINEAR = 1, /* q_scale_type = 0 */ + MFX_MPEG2_QUANT_SCALE_TYPE_NONLINEAR = 2 /* q_scale_type = 1 */ +}; + +/* IntraVLCFormat */ +enum { + MFX_MPEG2_INTRA_VLC_FORMAT_DEFAULT = 0, + MFX_MPEG2_INTRA_VLC_FORMAT_B14 = 1, /* use table B.14 */ + MFX_MPEG2_INTRA_VLC_FORMAT_B15 = 2 /* use table B.15 */ +}; + +/* ScanType */ +enum { + MFX_MPEG2_SCAN_TYPE_DEFAULT = 0, + MFX_MPEG2_SCAN_TYPE_ZIGZAG = 1, /* alternate_scan = 0 */ + MFX_MPEG2_SCAN_TYPE_ALTERNATE = 2 /* alternate_scan = 1 */ +}; + +#endif + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 NumSliceI; + mfxU16 NumSliceP; + mfxU16 NumSliceB; + + mfxU16 WinBRCMaxAvgKbps; + mfxU16 WinBRCSize; + + mfxU16 QVBRQuality; + mfxU16 EnableMBQP; + mfxU16 IntRefCycleDist; + mfxU16 DirectBiasAdjustment; /* tri-state option */ + mfxU16 GlobalMotionBiasAdjustment; /* tri-state option */ + mfxU16 MVCostScalingFactor; + mfxU16 MBDisableSkipMap; /* tri-state option */ + + mfxU16 WeightedPred; + mfxU16 WeightedBiPred; + + mfxU16 AspectRatioInfoPresent; /* tri-state option */ + mfxU16 OverscanInfoPresent; /* tri-state option */ + mfxU16 OverscanAppropriate; /* tri-state option */ + mfxU16 TimingInfoPresent; /* tri-state option */ + mfxU16 BitstreamRestriction; /* tri-state option */ + mfxU16 LowDelayHrd; /* tri-state option */ + mfxU16 MotionVectorsOverPicBoundaries; /* tri-state option */ +#if (MFX_VERSION >= MFX_VERSION_NEXT) + mfxU16 Log2MaxMvLengthHorizontal; /* 0..16 */ + mfxU16 Log2MaxMvLengthVertical; /* 0..16 */ +#else + mfxU16 reserved1[2]; +#endif + + mfxU16 ScenarioInfo; + mfxU16 ContentInfo; + + mfxU16 PRefType; + mfxU16 FadeDetection; /* tri-state option */ +#if (MFX_VERSION >= MFX_VERSION_NEXT) + mfxI16 DeblockingAlphaTcOffset; /* -12..12 (slice_alpha_c0_offset_div2 << 1) */ + mfxI16 DeblockingBetaOffset; /* -12..12 (slice_beta_offset_div2 << 1) */ +#else + mfxU16 reserved2[2]; +#endif + mfxU16 GPB; /* tri-state option */ + + mfxU32 MaxFrameSizeI; + mfxU32 MaxFrameSizeP; + mfxU32 reserved3[3]; + + mfxU16 EnableQPOffset; /* tri-state option */ + mfxI16 QPOffset[8]; /* FrameQP = QPX + QPOffset[pyramid_layer]; QPX = QPB for B-pyramid, QPP for P-pyramid */ + + mfxU16 NumRefActiveP[8]; + mfxU16 NumRefActiveBL0[8]; + mfxU16 NumRefActiveBL1[8]; + +#if (MFX_VERSION >= MFX_VERSION_NEXT) + mfxU16 ConstrainedIntraPredFlag; /* tri-state option */ +#else + mfxU16 reserved6; +#endif +#if (MFX_VERSION >= 1026) + mfxU16 TransformSkip; /* tri-state option; HEVC transform_skip_enabled_flag */ +#else + mfxU16 reserved7; +#endif +#if (MFX_VERSION >= 1027) + mfxU16 TargetChromaFormatPlus1; /* Minus 1 specifies target encoding chroma format (see ColorFormat enum). May differ from input one. */ + mfxU16 TargetBitDepthLuma; /* Target encoding bit depth for luma samples. May differ from input one. */ + mfxU16 TargetBitDepthChroma; /* Target encoding bit depth for chroma samples. May differ from input one. */ +#else + mfxU16 reserved4[3]; +#endif + mfxU16 BRCPanicMode; /* tri-state option */ + + mfxU16 LowDelayBRC; /* tri-state option */ + mfxU16 EnableMBForceIntra; /* tri-state option */ + mfxU16 AdaptiveMaxFrameSize; /* tri-state option */ + + mfxU16 RepartitionCheckEnable; /* tri-state option */ +#if (MFX_VERSION >= MFX_VERSION_NEXT) + mfxU16 QuantScaleType; /* For MPEG2 specifies mapping between quantiser_scale_code and quantiser_scale (see QuantScaleType enum) */ + mfxU16 IntraVLCFormat; /* For MPEG2 specifies which table shall be used for coding of DCT coefficients of intra macroblocks (see IntraVLCFormat enum) */ + mfxU16 ScanType; /* For MPEG2 specifies transform coefficients scan pattern (see ScanType enum) */ +#else + mfxU16 reserved5[3]; +#endif +#if (MFX_VERSION >= 1025) + mfxU16 EncodedUnitsInfo; /* tri-state option */ + mfxU16 EnableNalUnitType; /* tri-state option */ +#else + mfxU16 reserved8[2]; +#endif +#if (MFX_VERSION >= 1026) + mfxU16 ExtBrcAdaptiveLTR; /* tri-state option for ExtBRC */ +#else + mfxU16 reserved9; +#endif + mfxU16 reserved[163]; +} mfxExtCodingOption3; +MFX_PACK_END() + +/* IntraPredBlockSize/InterPredBlockSize */ +enum { + MFX_BLOCKSIZE_UNKNOWN = 0, + MFX_BLOCKSIZE_MIN_16X16 = 1, /* 16x16 */ + MFX_BLOCKSIZE_MIN_8X8 = 2, /* 16x16, 8x8 */ + MFX_BLOCKSIZE_MIN_4X4 = 3 /* 16x16, 8x8, 4x4 */ +}; + +/* MVPrecision */ +enum { + MFX_MVPRECISION_UNKNOWN = 0, + MFX_MVPRECISION_INTEGER = (1 << 0), + MFX_MVPRECISION_HALFPEL = (1 << 1), + MFX_MVPRECISION_QUARTERPEL = (1 << 2) +}; + +enum { + MFX_CODINGOPTION_UNKNOWN =0, + MFX_CODINGOPTION_ON =0x10, + MFX_CODINGOPTION_OFF =0x20, + MFX_CODINGOPTION_ADAPTIVE =0x30 +}; + +/* Data Flag for mfxBitstream*/ +enum { + MFX_BITSTREAM_COMPLETE_FRAME = 0x0001, /* the bitstream contains a complete frame or field pair of data */ + MFX_BITSTREAM_EOS = 0x0002 +}; +/* Extended Buffer Ids */ +enum { + MFX_EXTBUFF_CODING_OPTION = MFX_MAKEFOURCC('C','D','O','P'), + MFX_EXTBUFF_CODING_OPTION_SPSPPS = MFX_MAKEFOURCC('C','O','S','P'), + MFX_EXTBUFF_VPP_DONOTUSE = MFX_MAKEFOURCC('N','U','S','E'), + MFX_EXTBUFF_VPP_AUXDATA = MFX_MAKEFOURCC('A','U','X','D'), + MFX_EXTBUFF_VPP_DENOISE = MFX_MAKEFOURCC('D','N','I','S'), + MFX_EXTBUFF_VPP_SCENE_ANALYSIS = MFX_MAKEFOURCC('S','C','L','Y'), + MFX_EXTBUFF_VPP_SCENE_CHANGE = MFX_EXTBUFF_VPP_SCENE_ANALYSIS, + MFX_EXTBUFF_VPP_PROCAMP = MFX_MAKEFOURCC('P','A','M','P'), + MFX_EXTBUFF_VPP_DETAIL = MFX_MAKEFOURCC('D','E','T',' '), + MFX_EXTBUFF_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','S','I','N'), + MFX_EXTBUFF_VPP_DOUSE = MFX_MAKEFOURCC('D','U','S','E'), + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION) = MFX_MAKEFOURCC('O','P','Q','S'), + MFX_EXTBUFF_AVC_REFLIST_CTRL = MFX_MAKEFOURCC('R','L','S','T'), + MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION = MFX_MAKEFOURCC('F','R','C',' '), + MFX_EXTBUFF_PICTURE_TIMING_SEI = MFX_MAKEFOURCC('P','T','S','E'), + MFX_EXTBUFF_AVC_TEMPORAL_LAYERS = MFX_MAKEFOURCC('A','T','M','L'), + MFX_EXTBUFF_CODING_OPTION2 = MFX_MAKEFOURCC('C','D','O','2'), + MFX_EXTBUFF_VPP_IMAGE_STABILIZATION = MFX_MAKEFOURCC('I','S','T','B'), + MFX_EXTBUFF_VPP_PICSTRUCT_DETECTION = MFX_MAKEFOURCC('I','D','E','T'), + MFX_EXTBUFF_ENCODER_CAPABILITY = MFX_MAKEFOURCC('E','N','C','P'), + MFX_EXTBUFF_ENCODER_RESET_OPTION = MFX_MAKEFOURCC('E','N','R','O'), + MFX_EXTBUFF_ENCODED_FRAME_INFO = MFX_MAKEFOURCC('E','N','F','I'), + MFX_EXTBUFF_VPP_COMPOSITE = MFX_MAKEFOURCC('V','C','M','P'), + MFX_EXTBUFF_VPP_VIDEO_SIGNAL_INFO = MFX_MAKEFOURCC('V','V','S','I'), + MFX_EXTBUFF_ENCODER_ROI = MFX_MAKEFOURCC('E','R','O','I'), + MFX_EXTBUFF_VPP_DEINTERLACING = MFX_MAKEFOURCC('V','P','D','I'), + MFX_EXTBUFF_AVC_REFLISTS = MFX_MAKEFOURCC('R','L','T','S'), + MFX_EXTBUFF_DEC_VIDEO_PROCESSING = MFX_MAKEFOURCC('D','E','C','V'), + MFX_EXTBUFF_VPP_FIELD_PROCESSING = MFX_MAKEFOURCC('F','P','R','O'), + MFX_EXTBUFF_CODING_OPTION3 = MFX_MAKEFOURCC('C','D','O','3'), + MFX_EXTBUFF_CHROMA_LOC_INFO = MFX_MAKEFOURCC('C','L','I','N'), + MFX_EXTBUFF_MBQP = MFX_MAKEFOURCC('M','B','Q','P'), + MFX_EXTBUFF_MB_FORCE_INTRA = MFX_MAKEFOURCC('M','B','F','I'), + MFX_EXTBUFF_HEVC_TILES = MFX_MAKEFOURCC('2','6','5','T'), + MFX_EXTBUFF_MB_DISABLE_SKIP_MAP = MFX_MAKEFOURCC('M','D','S','M'), + MFX_EXTBUFF_HEVC_PARAM = MFX_MAKEFOURCC('2','6','5','P'), + MFX_EXTBUFF_DECODED_FRAME_INFO = MFX_MAKEFOURCC('D','E','F','I'), + MFX_EXTBUFF_TIME_CODE = MFX_MAKEFOURCC('T','M','C','D'), + MFX_EXTBUFF_HEVC_REGION = MFX_MAKEFOURCC('2','6','5','R'), + MFX_EXTBUFF_PRED_WEIGHT_TABLE = MFX_MAKEFOURCC('E','P','W','T'), + MFX_EXTBUFF_DIRTY_RECTANGLES = MFX_MAKEFOURCC('D','R','O','I'), + MFX_EXTBUFF_MOVING_RECTANGLES = MFX_MAKEFOURCC('M','R','O','I'), + MFX_EXTBUFF_CODING_OPTION_VPS = MFX_MAKEFOURCC('C','O','V','P'), + MFX_EXTBUFF_VPP_ROTATION = MFX_MAKEFOURCC('R','O','T',' '), + MFX_EXTBUFF_ENCODED_SLICES_INFO = MFX_MAKEFOURCC('E','N','S','I'), + MFX_EXTBUFF_VPP_SCALING = MFX_MAKEFOURCC('V','S','C','L'), + MFX_EXTBUFF_HEVC_REFLIST_CTRL = MFX_EXTBUFF_AVC_REFLIST_CTRL, + MFX_EXTBUFF_HEVC_REFLISTS = MFX_EXTBUFF_AVC_REFLISTS, + MFX_EXTBUFF_HEVC_TEMPORAL_LAYERS = MFX_EXTBUFF_AVC_TEMPORAL_LAYERS, + MFX_EXTBUFF_VPP_MIRRORING = MFX_MAKEFOURCC('M','I','R','R'), + MFX_EXTBUFF_MV_OVER_PIC_BOUNDARIES = MFX_MAKEFOURCC('M','V','P','B'), + MFX_EXTBUFF_VPP_COLORFILL = MFX_MAKEFOURCC('V','C','L','F'), +#if (MFX_VERSION >= 1025) + MFX_EXTBUFF_DECODE_ERROR_REPORT = MFX_MAKEFOURCC('D', 'E', 'R', 'R'), + MFX_EXTBUFF_VPP_COLOR_CONVERSION = MFX_MAKEFOURCC('V', 'C', 'S', 'C'), + MFX_EXTBUFF_CONTENT_LIGHT_LEVEL_INFO = MFX_MAKEFOURCC('L', 'L', 'I', 'S'), + MFX_EXTBUFF_MASTERING_DISPLAY_COLOUR_VOLUME = MFX_MAKEFOURCC('D', 'C', 'V', 'S'), + MFX_EXTBUFF_MULTI_FRAME_PARAM = MFX_MAKEFOURCC('M', 'F', 'R', 'P'), + MFX_EXTBUFF_MULTI_FRAME_CONTROL = MFX_MAKEFOURCC('M', 'F', 'R', 'C'), + MFX_EXTBUFF_ENCODED_UNITS_INFO = MFX_MAKEFOURCC('E', 'N', 'U', 'I'), +#endif +#if (MFX_VERSION >= 1026) + MFX_EXTBUFF_VPP_MCTF = MFX_MAKEFOURCC('M', 'C', 'T', 'F'), + MFX_EXTBUFF_VP9_SEGMENTATION = MFX_MAKEFOURCC('9', 'S', 'E', 'G'), + MFX_EXTBUFF_VP9_TEMPORAL_LAYERS = MFX_MAKEFOURCC('9', 'T', 'M', 'L'), + MFX_EXTBUFF_VP9_PARAM = MFX_MAKEFOURCC('9', 'P', 'A', 'R'), +#endif +#if (MFX_VERSION >= 1027) + MFX_EXTBUFF_AVC_ROUNDING_OFFSET = MFX_MAKEFOURCC('R','N','D','O'), +#endif +#if (MFX_VERSION >= MFX_VERSION_NEXT) + MFX_EXTBUFF_DPB = MFX_MAKEFOURCC('E','D','P','B'), + MFX_EXTBUFF_TEMPORAL_LAYERS = MFX_MAKEFOURCC('T','M','P','L'), + MFX_EXTBUFF_AVC_SCALING_MATRIX = MFX_MAKEFOURCC('A','V','S','M'), + MFX_EXTBUFF_MPEG2_QUANT_MATRIX = MFX_MAKEFOURCC('M','2','Q','M'), + MFX_EXTBUFF_TASK_DEPENDENCY = MFX_MAKEFOURCC('S','Y','N','C'), +#endif +#if (MFX_VERSION >= 1031) + MFX_EXTBUFF_PARTIAL_BITSTREAM_PARAM = MFX_MAKEFOURCC('P','B','O','P'), +#endif + MFX_EXTBUFF_ENCODER_IPCM_AREA = MFX_MAKEFOURCC('P', 'C', 'M', 'R'), + MFX_EXTBUFF_INSERT_HEADERS = MFX_MAKEFOURCC('S', 'P', 'R', 'E'), +#if (MFX_VERSION >= 1034) + MFX_EXTBUFF_AV1_FILM_GRAIN_PARAM = MFX_MAKEFOURCC('A','1','F','G'), + MFX_EXTBUFF_AV1_LST_PARAM = MFX_MAKEFOURCC('A', '1', 'L', 'S'), + MFX_EXTBUFF_AV1_SEGMENTATION = MFX_MAKEFOURCC('1', 'S', 'E', 'G'), + MFX_EXTBUFF_AV1_PARAM = MFX_MAKEFOURCC('1', 'P', 'A', 'R'), + MFX_EXTBUFF_AV1_AUXDATA = MFX_MAKEFOURCC('1', 'A', 'U', 'X'), + MFX_EXTBUFF_AV1_TEMPORAL_LAYERS = MFX_MAKEFOURCC('1', 'T', 'M', 'L') +#endif +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION); + +/* VPP Conf: Do not use certain algorithms */ +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; + mfxU32 NumAlg; + mfxU32* AlgList; +} mfxExtVPPDoNotUse; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 DenoiseFactor; +} mfxExtVPPDenoise; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 DetailFactor; +} mfxExtVPPDetail; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + mfxF64 Brightness; + mfxF64 Contrast; + mfxF64 Hue; + mfxF64 Saturation; +} mfxExtVPPProcAmp; +MFX_PACK_END() + +/* statistics collected for decode, encode and vpp */ +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxU32 reserved[16]; + mfxU32 NumFrame; + mfxU64 NumBit; + mfxU32 NumCachedFrame; +} mfxEncodeStat; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU32 reserved[16]; + mfxU32 NumFrame; + mfxU32 NumSkippedFrame; + mfxU32 NumError; + mfxU32 NumCachedFrame; +} mfxDecodeStat; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU32 reserved[16]; + mfxU32 NumFrame; + mfxU32 NumCachedFrame; +} mfxVPPStat; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + union{ + struct{ + mfxU32 SpatialComplexity; + mfxU32 TemporalComplexity; + }; + struct{ + mfxU16 PicStruct; + mfxU16 reserved[3]; + }; + }; + mfxU16 SceneChangeRate; + mfxU16 RepeatedFrame; +} mfxExtVppAuxData; +MFX_PACK_END() + +/* CtrlFlags */ +enum { + MFX_PAYLOAD_CTRL_SUFFIX = 0x00000001 /* HEVC suffix SEI */ +}; + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU32 CtrlFlags; + mfxU32 reserved[3]; + mfxU8 *Data; /* buffer pointer */ + mfxU32 NumBit; /* number of bits */ + mfxU16 Type; /* SEI message type in H.264 or user data start_code in MPEG-2 */ + mfxU16 BufSize; /* payload buffer size in bytes */ +} mfxPayload; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; +#if (MFX_VERSION >= 1025) + mfxU32 reserved[4]; + mfxU16 reserved1; + mfxU16 MfxNalUnitType; +#else + mfxU32 reserved[5]; +#endif + mfxU16 SkipFrame; + + mfxU16 QP; /* per frame QP */ + + mfxU16 FrameType; + mfxU16 NumExtParam; + mfxU16 NumPayload; /* MPEG-2 user data or H.264 SEI message(s) */ + mfxU16 reserved2; + + mfxExtBuffer **ExtParam; + mfxPayload **Payload; /* for field pair, first field uses even payloads and second field uses odd payloads */ +} mfxEncodeCtrl; +MFX_PACK_END() + +/* Buffer Memory Types */ +enum { + /* Buffer types */ + MFX_MEMTYPE_PERSISTENT_MEMORY =0x0002 +}; + +/* Frame Memory Types */ +#define MFX_MEMTYPE_BASE(x) (0x90ff & (x)) + +enum { + MFX_MEMTYPE_DXVA2_DECODER_TARGET =0x0010, + MFX_MEMTYPE_DXVA2_PROCESSOR_TARGET =0x0020, + MFX_MEMTYPE_VIDEO_MEMORY_DECODER_TARGET = MFX_MEMTYPE_DXVA2_DECODER_TARGET, + MFX_MEMTYPE_VIDEO_MEMORY_PROCESSOR_TARGET = MFX_MEMTYPE_DXVA2_PROCESSOR_TARGET, + MFX_MEMTYPE_SYSTEM_MEMORY =0x0040, + MFX_MEMTYPE_RESERVED1 =0x0080, + + MFX_MEMTYPE_FROM_ENCODE = 0x0100, + MFX_MEMTYPE_FROM_DECODE = 0x0200, + MFX_MEMTYPE_FROM_VPPIN = 0x0400, + MFX_MEMTYPE_FROM_VPPOUT = 0x0800, + MFX_MEMTYPE_FROM_ENC = 0x2000, + MFX_MEMTYPE_FROM_PAK = 0x4000, //reserved + + MFX_MEMTYPE_INTERNAL_FRAME = 0x0001, + MFX_MEMTYPE_EXTERNAL_FRAME = 0x0002, + MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_MEMTYPE_OPAQUE_FRAME) = 0x0004, + MFX_MEMTYPE_EXPORT_FRAME = 0x0008, + MFX_MEMTYPE_SHARED_RESOURCE = MFX_MEMTYPE_EXPORT_FRAME, +#if (MFX_VERSION >= 1025) + MFX_MEMTYPE_VIDEO_MEMORY_ENCODER_TARGET = 0x1000 +#else + MFX_MEMTYPE_RESERVED2 = 0x1000 +#endif +}; + +MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_MEMTYPE_OPAQUE_FRAME); + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + union { + mfxU32 AllocId; + mfxU32 reserved[1]; + }; + mfxU32 reserved3[3]; + mfxFrameInfo Info; + mfxU16 Type; /* decoder or processor render targets */ + mfxU16 NumFrameMin; + mfxU16 NumFrameSuggested; + mfxU16 reserved2; +} mfxFrameAllocRequest; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU32 AllocId; + mfxU32 reserved[3]; + mfxMemId *mids; /* the array allocated by application */ + mfxU16 NumFrameActual; +#if (MFX_VERSION >= MFX_VERSION_NEXT) + mfxU16 MemType; +#else + mfxU16 reserved2; +#endif +} mfxFrameAllocResponse; +MFX_PACK_END() + +/* FrameType */ +enum { + MFX_FRAMETYPE_UNKNOWN =0x0000, + + MFX_FRAMETYPE_I =0x0001, + MFX_FRAMETYPE_P =0x0002, + MFX_FRAMETYPE_B =0x0004, + MFX_FRAMETYPE_S =0x0008, + + MFX_FRAMETYPE_REF =0x0040, + MFX_FRAMETYPE_IDR =0x0080, + + MFX_FRAMETYPE_xI =0x0100, + MFX_FRAMETYPE_xP =0x0200, + MFX_FRAMETYPE_xB =0x0400, + MFX_FRAMETYPE_xS =0x0800, + + MFX_FRAMETYPE_xREF =0x4000, + MFX_FRAMETYPE_xIDR =0x8000 +}; + +#if (MFX_VERSION >= 1025) +enum { + MFX_HEVC_NALU_TYPE_UNKNOWN = 0, + MFX_HEVC_NALU_TYPE_TRAIL_N = ( 0+1), + MFX_HEVC_NALU_TYPE_TRAIL_R = ( 1+1), + MFX_HEVC_NALU_TYPE_RADL_N = ( 6+1), + MFX_HEVC_NALU_TYPE_RADL_R = ( 7+1), + MFX_HEVC_NALU_TYPE_RASL_N = ( 8+1), + MFX_HEVC_NALU_TYPE_RASL_R = ( 9+1), + MFX_HEVC_NALU_TYPE_IDR_W_RADL = (19+1), + MFX_HEVC_NALU_TYPE_IDR_N_LP = (20+1), + MFX_HEVC_NALU_TYPE_CRA_NUT = (21+1) +}; +#endif + +typedef enum { + MFX_HANDLE_DIRECT3D_DEVICE_MANAGER9 =1, /* IDirect3DDeviceManager9 */ + MFX_HANDLE_D3D9_DEVICE_MANAGER = MFX_HANDLE_DIRECT3D_DEVICE_MANAGER9, + MFX_HANDLE_RESERVED1 = 2, + MFX_HANDLE_D3D11_DEVICE = 3, + MFX_HANDLE_VA_DISPLAY = 4, + MFX_HANDLE_RESERVED3 = 5, +#if (MFX_VERSION >= 1030) + MFX_HANDLE_VA_CONFIG_ID = 6, + MFX_HANDLE_VA_CONTEXT_ID = 7, +#endif +#if (MFX_VERSION >= MFX_VERSION_NEXT) + MFX_HANDLE_CM_DEVICE = 8 +#endif +} mfxHandleType; + +typedef enum { + MFX_SKIPMODE_NOSKIP=0, + MFX_SKIPMODE_MORE=1, + MFX_SKIPMODE_LESS=2 +} mfxSkipMode; + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; + mfxU8 *SPSBuffer; + mfxU8 *PPSBuffer; + mfxU16 SPSBufSize; + mfxU16 PPSBufSize; + mfxU16 SPSId; + mfxU16 PPSId; +} mfxExtCodingOptionSPSPPS; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + union { + mfxU8 *VPSBuffer; + mfxU64 reserved1; + }; + mfxU16 VPSBufSize; + mfxU16 VPSId; + + mfxU16 reserved[6]; +} mfxExtCodingOptionVPS; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 VideoFormat; + mfxU16 VideoFullRange; + mfxU16 ColourDescriptionPresent; + mfxU16 ColourPrimaries; + mfxU16 TransferCharacteristics; + mfxU16 MatrixCoefficients; +} mfxExtVideoSignalInfo; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; + mfxU32 NumAlg; + mfxU32 *AlgList; +} mfxExtVPPDoUse; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[2]; + struct { + mfxFrameSurface1 **Surfaces; + mfxU32 reserved2[5]; + mfxU16 Type; + mfxU16 NumSurface; + } In, Out; +} mfxExtOpaqueSurfaceAlloc; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 NumRefIdxL0Active; + mfxU16 NumRefIdxL1Active; + + struct { + mfxU32 FrameOrder; + mfxU16 PicStruct; + mfxU16 ViewId; + mfxU16 LongTermIdx; + mfxU16 reserved[3]; + } PreferredRefList[32], RejectedRefList[16], LongTermRefList[16]; + + mfxU16 ApplyLongTermIdx; + mfxU16 reserved[15]; +} mfxExtAVCRefListCtrl; +MFX_PACK_END() + +enum { + MFX_FRCALGM_PRESERVE_TIMESTAMP = 0x0001, + MFX_FRCALGM_DISTRIBUTED_TIMESTAMP = 0x0002, + MFX_FRCALGM_FRAME_INTERPOLATION = 0x0004 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 Algorithm; + mfxU16 reserved; + mfxU32 reserved2[15]; +} mfxExtVPPFrameRateConversion; +MFX_PACK_END() + +enum { + MFX_IMAGESTAB_MODE_UPSCALE = 0x0001, + MFX_IMAGESTAB_MODE_BOXING = 0x0002 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 Mode; + mfxU16 reserved[11]; +} mfxExtVPPImageStab; +MFX_PACK_END() + +#if (MFX_VERSION >= 1025) + +enum { + MFX_PAYLOAD_OFF = 0, + MFX_PAYLOAD_IDR = 1 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 reserved[15]; + + mfxU16 InsertPayloadToggle; + mfxU16 DisplayPrimariesX[3]; + mfxU16 DisplayPrimariesY[3]; + mfxU16 WhitePointX; + mfxU16 WhitePointY; + mfxU32 MaxDisplayMasteringLuminance; + mfxU32 MinDisplayMasteringLuminance; +} mfxExtMasteringDisplayColourVolume; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 reserved[9]; + + mfxU16 InsertPayloadToggle; + mfxU16 MaxContentLightLevel; + mfxU16 MaxPicAverageLightLevel; +} mfxExtContentLightLevelInfo; +MFX_PACK_END() +#endif + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU32 reserved[14]; + + struct { + mfxU16 ClockTimestampFlag; + mfxU16 CtType; + mfxU16 NuitFieldBasedFlag; + mfxU16 CountingType; + mfxU16 FullTimestampFlag; + mfxU16 DiscontinuityFlag; + mfxU16 CntDroppedFlag; + mfxU16 NFrames; + mfxU16 SecondsFlag; + mfxU16 MinutesFlag; + mfxU16 HoursFlag; + mfxU16 SecondsValue; + mfxU16 MinutesValue; + mfxU16 HoursValue; + mfxU32 TimeOffset; + } TimeStamp[3]; +} mfxExtPictureTimingSEI; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU32 reserved1[4]; + mfxU16 reserved2; + mfxU16 BaseLayerPID; + + struct { + mfxU16 Scale; + mfxU16 reserved[3]; + }Layer[8]; +} mfxExtAvcTemporalLayers; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU32 MBPerSec; + mfxU16 reserved[58]; +} mfxExtEncoderCapability; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 StartNewSequence; + mfxU16 reserved[11]; +} mfxExtEncoderResetOption; +MFX_PACK_END() + +/*LongTermIdx*/ +enum { + MFX_LONGTERM_IDX_NO_IDX = 0xFFFF +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU32 FrameOrder; + mfxU16 PicStruct; + mfxU16 LongTermIdx; + mfxU32 MAD; + mfxU16 BRCPanicMode; + mfxU16 QP; + mfxU32 SecondFieldOffset; + mfxU16 reserved[2]; + + struct { + mfxU32 FrameOrder; + mfxU16 PicStruct; + mfxU16 LongTermIdx; + mfxU16 reserved[4]; + } UsedRefListL0[32], UsedRefListL1[32]; +} mfxExtAVCEncodedFrameInfo; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct mfxVPPCompInputStream { + mfxU32 DstX; + mfxU32 DstY; + mfxU32 DstW; + mfxU32 DstH; + + mfxU16 LumaKeyEnable; + mfxU16 LumaKeyMin; + mfxU16 LumaKeyMax; + + mfxU16 GlobalAlphaEnable; + mfxU16 GlobalAlpha; + mfxU16 PixelAlphaEnable; + + mfxU16 TileId; + + mfxU16 reserved2[17]; +} mfxVPPCompInputStream; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; + + /* background color*/ + union { + mfxU16 Y; + mfxU16 R; + }; + union { + mfxU16 U; + mfxU16 G; + }; + union { + mfxU16 V; + mfxU16 B; + }; + mfxU16 NumTiles; + mfxU16 reserved1[23]; + + mfxU16 NumInputStream; + mfxVPPCompInputStream *InputStream; +} mfxExtVPPComposite; +MFX_PACK_END() + +/* TransferMatrix */ +enum { + MFX_TRANSFERMATRIX_UNKNOWN = 0, + MFX_TRANSFERMATRIX_BT709 = 1, + MFX_TRANSFERMATRIX_BT601 = 2 +}; + +/* NominalRange */ +enum { + MFX_NOMINALRANGE_UNKNOWN = 0, + MFX_NOMINALRANGE_0_255 = 1, + MFX_NOMINALRANGE_16_235 = 2 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 reserved1[4]; + + union { + struct { // Init + struct { + mfxU16 TransferMatrix; + mfxU16 NominalRange; + mfxU16 reserved2[6]; + } In, Out; + }; + struct { // Runtime + mfxU16 TransferMatrix; + mfxU16 NominalRange; + mfxU16 reserved3[14]; + }; + }; +} mfxExtVPPVideoSignalInfo; +MFX_PACK_END() + +/* ROI encoding mode */ +enum { + MFX_ROI_MODE_PRIORITY = 0, + MFX_ROI_MODE_QP_DELTA = 1, + MFX_ROI_MODE_QP_VALUE = 2 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 NumROI; + mfxU16 ROIMode; + mfxU16 reserved1[10]; + + struct { + mfxU32 Left; + mfxU32 Top; + mfxU32 Right; + mfxU32 Bottom; + union { + mfxI16 Priority; + mfxI16 DeltaQP; + }; + mfxU16 reserved2[7]; + } ROI[256]; +} mfxExtEncoderROI; +MFX_PACK_END() + +/*Deinterlacing Mode*/ +enum { + MFX_DEINTERLACING_BOB = 1, + MFX_DEINTERLACING_ADVANCED = 2, + MFX_DEINTERLACING_AUTO_DOUBLE = 3, + MFX_DEINTERLACING_AUTO_SINGLE = 4, + MFX_DEINTERLACING_FULL_FR_OUT = 5, + MFX_DEINTERLACING_HALF_FR_OUT = 6, + MFX_DEINTERLACING_24FPS_OUT = 7, + MFX_DEINTERLACING_FIXED_TELECINE_PATTERN = 8, + MFX_DEINTERLACING_30FPS_OUT = 9, + MFX_DEINTERLACING_DETECT_INTERLACE = 10, + MFX_DEINTERLACING_ADVANCED_NOREF = 11, + MFX_DEINTERLACING_ADVANCED_SCD = 12, + MFX_DEINTERLACING_FIELD_WEAVING = 13 +}; + +/*TelecinePattern*/ +enum { + MFX_TELECINE_PATTERN_32 = 0, + MFX_TELECINE_PATTERN_2332 = 1, + MFX_TELECINE_PATTERN_FRAME_REPEAT = 2, + MFX_TELECINE_PATTERN_41 = 3, + MFX_TELECINE_POSITION_PROVIDED = 4 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 Mode; + mfxU16 TelecinePattern; + mfxU16 TelecineLocation; + mfxU16 reserved[9]; +} mfxExtVPPDeinterlacing; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 NumRefIdxL0Active; + mfxU16 NumRefIdxL1Active; + mfxU16 reserved[2]; + + struct mfxRefPic{ + mfxU32 FrameOrder; + mfxU16 PicStruct; + mfxU16 reserved[5]; + } RefPicList0[32], RefPicList1[32]; + +}mfxExtAVCRefLists; +MFX_PACK_END() + +enum { + MFX_VPP_COPY_FRAME =0x01, + MFX_VPP_COPY_FIELD =0x02, + MFX_VPP_SWAP_FIELDS =0x03 +}; + +/*PicType*/ +enum { + MFX_PICTYPE_UNKNOWN =0x00, + MFX_PICTYPE_FRAME =0x01, + MFX_PICTYPE_TOPFIELD =0x02, + MFX_PICTYPE_BOTTOMFIELD =0x04 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 Mode; + mfxU16 InField; + mfxU16 OutField; + mfxU16 reserved[25]; +} mfxExtVPPFieldProcessing; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + struct mfxIn{ + mfxU16 CropX; + mfxU16 CropY; + mfxU16 CropW; + mfxU16 CropH; + mfxU16 reserved[12]; + }In; + + struct mfxOut{ + mfxU32 FourCC; + mfxU16 ChromaFormat; + mfxU16 reserved1; + + mfxU16 Width; + mfxU16 Height; + + mfxU16 CropX; + mfxU16 CropY; + mfxU16 CropW; + mfxU16 CropH; + mfxU16 reserved[22]; + }Out; + + mfxU16 reserved[13]; +} mfxExtDecVideoProcessing; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 ChromaLocInfoPresentFlag; + mfxU16 ChromaSampleLocTypeTopField; + mfxU16 ChromaSampleLocTypeBottomField; + mfxU16 reserved[9]; +} mfxExtChromaLocInfo; +MFX_PACK_END() + +/* MBQPMode */ +enum { + MFX_MBQP_MODE_QP_VALUE = 0, // supported in CQP mode only + MFX_MBQP_MODE_QP_DELTA = 1, + MFX_MBQP_MODE_QP_ADAPTIVE = 2 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct{ + union { + mfxU8 QP; + mfxI8 DeltaQP; + }; + mfxU16 Mode; +} mfxQPandMode; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + mfxU32 reserved[10]; + mfxU16 Mode; // see MBQPMode enum + mfxU16 BlockSize; // QP block size, valid for HEVC only during Init and Runtime + mfxU32 NumQPAlloc; // Size of allocated by application QP or DeltaQP array + union { + mfxU8 *QP; // Block QP value. Valid when Mode = MFX_MBQP_MODE_QP_VALUE + mfxI8 *DeltaQP; // For block i: QP[i] = BrcQP[i] + DeltaQP[i]. Valid when Mode = MFX_MBQP_MODE_QP_DELTA +#if (MFX_VERSION >= 1034) + mfxQPandMode *QPmode; // Block-granularity modes when MFX_MBQP_MODE_QP_ADAPTIVE is set +#endif + mfxU64 reserved2; + }; +} mfxExtMBQP; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; /* Extension buffer header. Header.BufferId must be equal to MFX_EXTBUFF_INSERT_HEADERS. */ + mfxU16 SPS; /* tri-state option to insert SPS */ + mfxU16 PPS; /* tri-state option to insert PPS */ + mfxU16 reserved[8]; +} mfxExtInsertHeaders; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxExtBuffer Header; /* Extension buffer header. Header.BufferId must be equal to MFX_EXTBUFF_ENCODER_IPCM_AREA. */ + mfxU16 reserve1[10]; + + mfxU16 NumArea; /* Number of Area's */ + struct area { + mfxU32 Left; /* Left Area's coordinate. */ + mfxU32 Top; /* Top Area's coordinate. */ + mfxU32 Right; /* Right Area's coordinate. */ + mfxU32 Bottom; /* Bottom Area's coordinate. */ + + mfxU16 reserved2[8]; + } * Areas; /* Array of areas. */ +} mfxExtEncoderIPCMArea; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + mfxU32 reserved[11]; + mfxU32 MapSize; + union { + mfxU8 *Map; + mfxU64 reserved2; + }; +} mfxExtMBForceIntra; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 NumTileRows; + mfxU16 NumTileColumns; + mfxU16 reserved[74]; +}mfxExtHEVCTiles; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + mfxU32 reserved[11]; + mfxU32 MapSize; + union { + mfxU8 *Map; + mfxU64 reserved2; + }; +} mfxExtMBDisableSkipMap; +MFX_PACK_END() + +#if (MFX_VERSION >= MFX_VERSION_NEXT) +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 DPBSize; + mfxU16 reserved[11]; + + struct { + mfxU32 FrameOrder; + mfxU16 PicType; + mfxU16 LongTermIdx; + mfxU16 reserved[4]; + } DPB[32]; +} mfxExtDPB; +MFX_PACK_END() + +#endif + +/*GeneralConstraintFlags*/ +enum { + /* REXT Profile constraint flags*/ + MFX_HEVC_CONSTR_REXT_MAX_12BIT = (1 << 0), + MFX_HEVC_CONSTR_REXT_MAX_10BIT = (1 << 1), + MFX_HEVC_CONSTR_REXT_MAX_8BIT = (1 << 2), + MFX_HEVC_CONSTR_REXT_MAX_422CHROMA = (1 << 3), + MFX_HEVC_CONSTR_REXT_MAX_420CHROMA = (1 << 4), + MFX_HEVC_CONSTR_REXT_MAX_MONOCHROME = (1 << 5), + MFX_HEVC_CONSTR_REXT_INTRA = (1 << 6), + MFX_HEVC_CONSTR_REXT_ONE_PICTURE_ONLY = (1 << 7), + MFX_HEVC_CONSTR_REXT_LOWER_BIT_RATE = (1 << 8) +}; + +#if (MFX_VERSION >= 1026) + +/* SampleAdaptiveOffset */ +enum { + MFX_SAO_UNKNOWN = 0x00, + MFX_SAO_DISABLE = 0x01, + MFX_SAO_ENABLE_LUMA = 0x02, + MFX_SAO_ENABLE_CHROMA = 0x04 +}; + +#endif + +/* This struct has 4-byte alignment for binary compatibility with previously released versions of API */ +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 PicWidthInLumaSamples; + mfxU16 PicHeightInLumaSamples; + mfxU64 GeneralConstraintFlags; +#if (MFX_VERSION >= 1026) + mfxU16 SampleAdaptiveOffset; /* see enum SampleAdaptiveOffset, valid during Init and Runtime */ + mfxU16 LCUSize; + mfxU16 reserved[116]; +#else + mfxU16 reserved[118]; +#endif +} mfxExtHEVCParam; +MFX_PACK_END() + +#if (MFX_VERSION >= 1025) +/*ErrorTypes in mfxExtDecodeErrorReport*/ +enum { + MFX_ERROR_PPS = (1 << 0), + MFX_ERROR_SPS = (1 << 1), + MFX_ERROR_SLICEHEADER = (1 << 2), + MFX_ERROR_SLICEDATA = (1 << 3), + MFX_ERROR_FRAME_GAP = (1 << 4), +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU32 ErrorTypes; + mfxU16 reserved[10]; +} mfxExtDecodeErrorReport; +MFX_PACK_END() + +#endif + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 FrameType; + mfxU16 reserved[59]; +} mfxExtDecodedFrameInfo; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 DropFrameFlag; + mfxU16 TimeCodeHours; + mfxU16 TimeCodeMinutes; + mfxU16 TimeCodeSeconds; + mfxU16 TimeCodePictures; + mfxU16 reserved[7]; +} mfxExtTimeCode; +MFX_PACK_END() + +/*RegionType*/ +enum { + MFX_HEVC_REGION_SLICE = 0 +}; + +/*RegionEncoding*/ +enum { + MFX_HEVC_REGION_ENCODING_ON = 0, + MFX_HEVC_REGION_ENCODING_OFF = 1 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU32 RegionId; + mfxU16 RegionType; + mfxU16 RegionEncoding; + mfxU16 reserved[24]; +} mfxExtHEVCRegion; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 LumaLog2WeightDenom; // 0..7 + mfxU16 ChromaLog2WeightDenom; // 0..7 + mfxU16 LumaWeightFlag[2][32]; // [list] 0,1 + mfxU16 ChromaWeightFlag[2][32]; // [list] 0,1 + mfxI16 Weights[2][32][3][2]; // [list][list entry][Y, Cb, Cr][weight, offset] + mfxU16 reserved[58]; +} mfxExtPredWeightTable; +MFX_PACK_END() + +#if (MFX_VERSION >= 1027) +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 EnableRoundingIntra; // tri-state option + mfxU16 RoundingOffsetIntra; // valid value [0,7] + mfxU16 EnableRoundingInter; // tri-state option + mfxU16 RoundingOffsetInter; // valid value [0,7] + + mfxU16 reserved[24]; +} mfxExtAVCRoundingOffset; +MFX_PACK_END() +#endif + +#if (MFX_VERSION >= MFX_VERSION_NEXT) +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved[12]; + + struct { + mfxU16 Scale; + mfxU16 QPI; + mfxU16 QPP; + mfxU16 QPB; + mfxU32 TargetKbps; + mfxU32 MaxKbps; + mfxU32 BufferSizeInKB; + mfxU32 InitialDelayInKB; + mfxU16 reserved1[20]; + } Layer[8]; +} mfxExtTemporalLayers; +MFX_PACK_END() + +#endif + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 NumRect; + mfxU16 reserved1[11]; + + struct { + mfxU32 Left; + mfxU32 Top; + mfxU32 Right; + mfxU32 Bottom; + + mfxU16 reserved2[8]; + } Rect[256]; +} mfxExtDirtyRect; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 NumRect; + mfxU16 reserved1[11]; + + struct { + mfxU32 DestLeft; + mfxU32 DestTop; + mfxU32 DestRight; + mfxU32 DestBottom; + + mfxU32 SourceLeft; + mfxU32 SourceTop; + mfxU16 reserved2[4]; + } Rect[256]; +} mfxExtMoveRect; +MFX_PACK_END() + +#if (MFX_VERSION >= MFX_VERSION_NEXT) + +/* ScalingMatrixType */ +enum { + MFX_SCALING_MATRIX_SPS = 1, + MFX_SCALING_MATRIX_PPS = 2 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 Type; + mfxU16 reserved[5]; + + /* [4x4_Intra_Y, 4x4_Intra_Cb, 4x4_Intra_Cr, + 4x4_Inter_Y, 4x4_Inter_Cb, 4x4_Inter_Cr, + 8x8_Intra_Y, 8x8_Inter_Y, 8x8_Intra_Cb, + 8x8_Inter_Cb, 8x8_Intra_Cr, 8x8_Inter_Cr] */ + mfxU8 ScalingListPresent[12]; + + /* [Intra_Y, Intra_Cb, Intra_Cr, + Inter_Y, Inter_Cb, Inter_Cr] */ + mfxU8 ScalingList4x4[6][16]; + + /* [Intra_Y, Inter_Y, Intra_Cb, + Inter_Cb, Intra_Cr, Inter_Cr] */ + mfxU8 ScalingList8x8[6][64]; +} mfxExtAVCScalingMatrix; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 reserved[28]; + + mfxU8 LoadMatrix[4]; // [LumaIntra, LumaInter, ChromaIntra, ChromaInter] + mfxU8 Matrix[4][64]; // [LumaIntra, LumaInter, ChromaIntra, ChromaInter] +} mfxExtMPEG2QuantMatrix; +MFX_PACK_END() + +#endif + +/* Angle */ +enum { + MFX_ANGLE_0 = 0, + MFX_ANGLE_90 = 90, + MFX_ANGLE_180 = 180, + MFX_ANGLE_270 = 270 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 Angle; + mfxU16 reserved[11]; +} mfxExtVPPRotation; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + mfxU16 SliceSizeOverflow; + mfxU16 NumSliceNonCopliant; + mfxU16 NumEncodedSlice; + mfxU16 NumSliceSizeAlloc; + union { + mfxU16 *SliceSize; + mfxU64 reserved1; + }; + + mfxU16 reserved[20]; +} mfxExtEncodedSlicesInfo; +MFX_PACK_END() + +/* ScalingMode */ +enum { + MFX_SCALING_MODE_DEFAULT = 0, + MFX_SCALING_MODE_LOWPOWER = 1, + MFX_SCALING_MODE_QUALITY = 2 +}; + +#if (MFX_VERSION >= 1033) +/* Interpolation Method */ +enum { + MFX_INTERPOLATION_DEFAULT = 0, + MFX_INTERPOLATION_NEAREST_NEIGHBOR = 1, + MFX_INTERPOLATION_BILINEAR = 2, + MFX_INTERPOLATION_ADVANCED = 3 +}; +#endif + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 ScalingMode; +#if (MFX_VERSION >= 1033) + mfxU16 InterpolationMethod; + mfxU16 reserved[10]; +#else + mfxU16 reserved[11]; +#endif +} mfxExtVPPScaling; +MFX_PACK_END() + +#if (MFX_VERSION >= MFX_VERSION_NEXT) + +/* SceneChangeType */ +enum { + MFX_SCENE_NO_CHANGE = 0, + MFX_SCENE_START = 1, + MFX_SCENE_END = 2 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 Type; + mfxU16 reserved[11]; +} mfxExtSceneChange; +MFX_PACK_END() + +#endif + +typedef mfxExtAVCRefListCtrl mfxExtHEVCRefListCtrl; +typedef mfxExtAVCRefLists mfxExtHEVCRefLists; +typedef mfxExtAvcTemporalLayers mfxExtHEVCTemporalLayers; + +/* MirroringType */ +enum +{ + MFX_MIRRORING_DISABLED = 0, + MFX_MIRRORING_HORIZONTAL = 1, + MFX_MIRRORING_VERTICAL = 2 +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 Type; + mfxU16 reserved[11]; +} mfxExtVPPMirroring; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 StickTop; /* tri-state option */ + mfxU16 StickBottom; /* tri-state option */ + mfxU16 StickLeft; /* tri-state option */ + mfxU16 StickRight; /* tri-state option */ + mfxU16 reserved[8]; +} mfxExtMVOverPicBoundaries; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 Enable; /* tri-state option */ + mfxU16 reserved[11]; +} mfxExtVPPColorFill; +MFX_PACK_END() + +#if (MFX_VERSION >= 1025) + +/* ChromaSiting */ +enum { + MFX_CHROMA_SITING_UNKNOWN = 0x0000, + MFX_CHROMA_SITING_VERTICAL_TOP = 0x0001, /* Chroma samples are co-sited vertically on the top with the luma samples. */ + MFX_CHROMA_SITING_VERTICAL_CENTER = 0x0002, /* Chroma samples are not co-sited vertically with the luma samples. */ + MFX_CHROMA_SITING_VERTICAL_BOTTOM = 0x0004, /* Chroma samples are co-sited vertically on the bottom with the luma samples. */ + MFX_CHROMA_SITING_HORIZONTAL_LEFT = 0x0010, /* Chroma samples are co-sited horizontally on the left with the luma samples. */ + MFX_CHROMA_SITING_HORIZONTAL_CENTER = 0x0020 /* Chroma samples are not co-sited horizontally with the luma samples. */ +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 ChromaSiting; + mfxU16 reserved[27]; +} mfxExtColorConversion; +MFX_PACK_END() + +#endif + +#if (MFX_VERSION >= 1026) +/* VP9ReferenceFrame */ +enum { + MFX_VP9_REF_INTRA = 0, + MFX_VP9_REF_LAST = 1, + MFX_VP9_REF_GOLDEN = 2, + MFX_VP9_REF_ALTREF = 3 +}; + +/* SegmentIdBlockSize */ +enum { + MFX_VP9_SEGMENT_ID_BLOCK_SIZE_UNKNOWN = 0, + MFX_VP9_SEGMENT_ID_BLOCK_SIZE_8x8 = 8, + MFX_VP9_SEGMENT_ID_BLOCK_SIZE_16x16 = 16, + MFX_VP9_SEGMENT_ID_BLOCK_SIZE_32x32 = 32, + MFX_VP9_SEGMENT_ID_BLOCK_SIZE_64x64 = 64, +}; + +/* SegmentFeature */ +enum { + MFX_VP9_SEGMENT_FEATURE_QINDEX = 0x0001, + MFX_VP9_SEGMENT_FEATURE_LOOP_FILTER = 0x0002, + MFX_VP9_SEGMENT_FEATURE_REFERENCE = 0x0004, + MFX_VP9_SEGMENT_FEATURE_SKIP = 0x0008 /* (0,0) MV, no residual */ +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU16 FeatureEnabled; /* see enum SegmentFeature */ + mfxI16 QIndexDelta; + mfxI16 LoopFilterLevelDelta; + mfxU16 ReferenceFrame; /* see enum VP9ReferenceFrame */ + mfxU16 reserved[12]; +} mfxVP9SegmentParam; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + mfxU16 NumSegments; /* 0..8 */ + mfxVP9SegmentParam Segment[8]; + mfxU16 SegmentIdBlockSize; /* see enum SegmentIdBlockSize */ + mfxU32 NumSegmentIdAlloc; /* >= (Ceil(Width / SegmentIdBlockSize) * Ceil(Height / SegmentIdBlockSize)) */ + union { + mfxU8 *SegmentId; /*[NumSegmentIdAlloc] = 0..7, index in Segment array, blocks of SegmentIdBlockSize map */ + mfxU64 reserved1; + }; + mfxU16 reserved[52]; +} mfxExtVP9Segmentation; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU16 FrameRateScale; /* Layer[n].FrameRateScale = Layer[n - 1].FrameRateScale * (uint)m */ + mfxU16 TargetKbps; /* affected by BRCParamMultiplier, Layer[n].TargetKbps > Layer[n - 1].TargetKbps */ + mfxU16 reserved[14]; +} mfxVP9TemporalLayer; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxVP9TemporalLayer Layer[8]; + mfxU16 reserved[60]; +} mfxExtVP9TemporalLayers; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 FrameWidth; + mfxU16 FrameHeight; + + mfxU16 WriteIVFHeaders; /* tri-state option */ + +#if (MFX_VERSION >= MFX_VERSION_NEXT) + mfxI16 LoopFilterRefDelta[4]; + mfxI16 LoopFilterModeDelta[2]; +#else // API 1.26 + mfxI16 reserved1[6]; +#endif + mfxI16 QIndexDeltaLumaDC; + mfxI16 QIndexDeltaChromaAC; + mfxI16 QIndexDeltaChromaDC; +#if (MFX_VERSION >= 1029) + mfxU16 NumTileRows; + mfxU16 NumTileColumns; + mfxU16 reserved[110]; +#else + mfxU16 reserved[112]; +#endif +} mfxExtVP9Param; +MFX_PACK_END() + +#endif // #if (MFX_VERSION >= 1026) + +#if (MFX_VERSION >= 1025) +/* Multi-Frame Mode */ +enum { + MFX_MF_DEFAULT = 0, + MFX_MF_DISABLED = 1, + MFX_MF_AUTO = 2, + MFX_MF_MANUAL = 3 +}; + +/* Multi-Frame Initialization parameters */ +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU16 MFMode; + mfxU16 MaxNumFrames; + + mfxU16 reserved[58]; +} mfxExtMultiFrameParam; +MFX_PACK_END() + +/* Multi-Frame Run-time controls */ +MFX_PACK_BEGIN_USUAL_STRUCT() +MFX_DEPRECATED typedef struct { + mfxExtBuffer Header; + + mfxU32 Timeout; /* timeout in millisecond */ + mfxU16 Flush; /* Flush internal frame buffer, e.g. submit all collected frames. */ + + mfxU16 reserved[57]; +} mfxExtMultiFrameControl; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU16 Type; + mfxU16 reserved1; + mfxU32 Offset; + mfxU32 Size; + mfxU32 reserved[5]; +} mfxEncodedUnitInfo; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_L_TYPE() +typedef struct { + mfxExtBuffer Header; + + union { + mfxEncodedUnitInfo *UnitInfo; + mfxU64 reserved1; + }; + mfxU16 NumUnitsAlloc; + mfxU16 NumUnitsEncoded; + + mfxU16 reserved[22]; +} mfxExtEncodedUnitsInfo; +MFX_PACK_END() + +#endif + +#if (MFX_VERSION >= 1026) +#if (MFX_VERSION >= MFX_VERSION_NEXT) +/* MCTFTemporalMode */ +enum { + MFX_MCTF_TEMPORAL_MODE_UNKNOWN = 0, + MFX_MCTF_TEMPORAL_MODE_SPATIAL = 1, + MFX_MCTF_TEMPORAL_MODE_1REF = 2, + MFX_MCTF_TEMPORAL_MODE_2REF = 3, + MFX_MCTF_TEMPORAL_MODE_4REF = 4 +}; +#endif + +/* MCTF initialization & runtime */ +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU16 FilterStrength; +#if (MFX_VERSION >= MFX_VERSION_NEXT) + mfxU16 Overlap; /* tri-state option */ + mfxU32 BitsPerPixelx100k; + mfxU16 Deblocking; /* tri-state option */ + mfxU16 TemporalMode; + mfxU16 MVPrecision; + mfxU16 reserved[21]; +#else + mfxU16 reserved[27]; +#endif +} mfxExtVppMctf; +MFX_PACK_END() + +#endif + +#if (MFX_VERSION >= 1031) +/* Multi-adapters Querying structs */ +typedef enum +{ + MFX_COMPONENT_ENCODE = 1, + MFX_COMPONENT_DECODE = 2, + MFX_COMPONENT_VPP = 3 +} mfxComponentType; + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct +{ + mfxComponentType Type; + mfxVideoParam Requirements; + + mfxU16 reserved[4]; +} mfxComponentInfo; +MFX_PACK_END() + +/* Adapter description */ +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct +{ + mfxPlatform Platform; + mfxU32 Number; + + mfxU16 reserved[14]; +} mfxAdapterInfo; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct +{ + mfxAdapterInfo * Adapters; + mfxU32 NumAlloc; + mfxU32 NumActual; + + mfxU16 reserved[4]; +} mfxAdaptersInfo; +MFX_PACK_END() + +#endif + +#if (MFX_VERSION >= 1034) +/* FilmGrainFlags */ +enum { + MFX_FILM_GRAIN_APPLY = (1 << 0), + MFX_FILM_GRAIN_UPDATE = (1 << 1), + MFX_FILM_GRAIN_CHROMA_SCALING_FROM_LUMA = (1 << 2), + MFX_FILM_GRAIN_OVERLAP = (1 << 3), + MFX_FILM_GRAIN_CLIP_TO_RESTRICTED_RANGE = (1 << 4) +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxU8 Value; + mfxU8 Scaling; +} mfxAV1FilmGrainPoint; +MFX_PACK_END() + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 FilmGrainFlags; /* FilmGrainFlags */ + mfxU16 GrainSeed; /* 0..65535 */ + + mfxU8 RefIdx; /* 0..6 */ + mfxU8 NumYPoints; /* 0..14 */ + mfxU8 NumCbPoints; /* 0..10 */ + mfxU8 NumCrPoints; /* 0..10 */ + + mfxAV1FilmGrainPoint PointY[14]; + mfxAV1FilmGrainPoint PointCb[10]; + mfxAV1FilmGrainPoint PointCr[10]; + + mfxU8 GrainScalingMinus8; /* 0..3 */ + mfxU8 ArCoeffLag; /* 0..3 */ + + mfxU8 ArCoeffsYPlus128[24]; /* 0..255 */ + mfxU8 ArCoeffsCbPlus128[25]; /* 0..255 */ + mfxU8 ArCoeffsCrPlus128[25]; /* 0..255 */ + + mfxU8 ArCoeffShiftMinus6; /* 0..3 */ + mfxU8 GrainScaleShift; /* 0..3 */ + + mfxU8 CbMult; /* 0..255 */ + mfxU8 CbLumaMult; /* 0..255 */ + mfxU16 CbOffset; /* 0..511 */ + + mfxU8 CrMult; /* 0..255 */ + mfxU8 CrLumaMult; /* 0..255 */ + mfxU16 CrOffset; /* 0..511 */ + + mfxU16 reserved[43]; +} mfxExtAV1FilmGrainParam; +MFX_PACK_END() + +#endif + +#if (MFX_VERSION >= 1031) +/* PartialBitstreamOutput */ +enum { + MFX_PARTIAL_BITSTREAM_NONE = 0, /* Don't use partial output */ + MFX_PARTIAL_BITSTREAM_SLICE = 1, /* Partial bitstream output will be aligned to slice granularity */ + MFX_PARTIAL_BITSTREAM_BLOCK = 2, /* Partial bitstream output will be aligned to user-defined block size granularity */ + MFX_PARTIAL_BITSTREAM_ANY = 3 /* Partial bitstream output will be return any coded data avilable at the end of SyncOperation timeout */ +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + mfxU32 BlockSize; /* output block granulatiry for Granularity = MFX_PARTIAL_BITSTREAM_BLOCK */ + mfxU16 Granularity; /* granulatiry of the partial bitstream: slice/block/any */ + mfxU16 reserved[8]; +} mfxExtPartialBitstreamParam; +MFX_PACK_END() +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/.github/actions/libmfx/include/mfx/mfxvideo++.h b/.github/actions/libmfx/include/mfx/mfxvideo++.h index 9256c95..6dd63a3 100644 --- a/.github/actions/libmfx/include/mfx/mfxvideo++.h +++ b/.github/actions/libmfx/include/mfx/mfxvideo++.h @@ -1,188 +1,188 @@ -// Copyright (c) 2017 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#ifndef __MFXVIDEOPLUSPLUS_H -#define __MFXVIDEOPLUSPLUS_H - -#include "mfxvideo.h" -#include "mfxenc.h" -#include "mfxpak.h" - -class MFXVideoSession -{ -public: - MFXVideoSession(void) { m_session = (mfxSession) 0; } - virtual ~MFXVideoSession(void) { Close(); } - - virtual mfxStatus Init(mfxIMPL impl, mfxVersion *ver) { return MFXInit(impl, ver, &m_session); } - virtual mfxStatus InitEx(mfxInitParam par) { return MFXInitEx(par, &m_session); } - virtual mfxStatus Close(void) - { - mfxStatus mfxRes; - mfxRes = MFXClose(m_session); m_session = (mfxSession) 0; - return mfxRes; - } - - virtual mfxStatus QueryIMPL(mfxIMPL *impl) { return MFXQueryIMPL(m_session, impl); } - virtual mfxStatus QueryVersion(mfxVersion *version) { return MFXQueryVersion(m_session, version); } - - virtual mfxStatus JoinSession(mfxSession child_session) { return MFXJoinSession(m_session, child_session);} - virtual mfxStatus DisjoinSession( ) { return MFXDisjoinSession(m_session);} - virtual mfxStatus CloneSession( mfxSession *clone) { return MFXCloneSession(m_session, clone);} - virtual mfxStatus SetPriority( mfxPriority priority) { return MFXSetPriority(m_session, priority);} - virtual mfxStatus GetPriority( mfxPriority *priority) { return MFXGetPriority(m_session, priority);} - - virtual mfxStatus SetBufferAllocator(mfxBufferAllocator *allocator) { return MFXVideoCORE_SetBufferAllocator(m_session, allocator); } - virtual mfxStatus SetFrameAllocator(mfxFrameAllocator *allocator) { return MFXVideoCORE_SetFrameAllocator(m_session, allocator); } - virtual mfxStatus SetHandle(mfxHandleType type, mfxHDL hdl) { return MFXVideoCORE_SetHandle(m_session, type, hdl); } - virtual mfxStatus GetHandle(mfxHandleType type, mfxHDL *hdl) { return MFXVideoCORE_GetHandle(m_session, type, hdl); } - virtual mfxStatus QueryPlatform(mfxPlatform* platform) { return MFXVideoCORE_QueryPlatform(m_session, platform); } - - virtual mfxStatus SyncOperation(mfxSyncPoint syncp, mfxU32 wait) { return MFXVideoCORE_SyncOperation(m_session, syncp, wait); } - - virtual mfxStatus DoWork() { return MFXDoWork(m_session); } - - virtual operator mfxSession (void) { return m_session; } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -private: - MFXVideoSession(const MFXVideoSession &); - void operator=(MFXVideoSession &); -}; - -class MFXVideoENCODE -{ -public: - - MFXVideoENCODE(mfxSession session) { m_session = session; } - virtual ~MFXVideoENCODE(void) { Close(); } - - virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoENCODE_Query(m_session, in, out); } - virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoENCODE_QueryIOSurf(m_session, par, request); } - virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoENCODE_Init(m_session, par); } - virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoENCODE_Reset(m_session, par); } - virtual mfxStatus Close(void) { return MFXVideoENCODE_Close(m_session); } - - virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoENCODE_GetVideoParam(m_session, par); } - virtual mfxStatus GetEncodeStat(mfxEncodeStat *stat) { return MFXVideoENCODE_GetEncodeStat(m_session, stat); } - - virtual mfxStatus EncodeFrameAsync(mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxSyncPoint *syncp) { return MFXVideoENCODE_EncodeFrameAsync(m_session, ctrl, surface, bs, syncp); } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - -class MFXVideoDECODE -{ -public: - - MFXVideoDECODE(mfxSession session) { m_session = session; } - virtual ~MFXVideoDECODE(void) { Close(); } - - virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoDECODE_Query(m_session, in, out); } - virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxVideoParam *par) { return MFXVideoDECODE_DecodeHeader(m_session, bs, par); } - virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoDECODE_QueryIOSurf(m_session, par, request); } - virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoDECODE_Init(m_session, par); } - virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoDECODE_Reset(m_session, par); } - virtual mfxStatus Close(void) { return MFXVideoDECODE_Close(m_session); } - - virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoDECODE_GetVideoParam(m_session, par); } - - virtual mfxStatus GetDecodeStat(mfxDecodeStat *stat) { return MFXVideoDECODE_GetDecodeStat(m_session, stat); } - virtual mfxStatus GetPayload(mfxU64 *ts, mfxPayload *payload) {return MFXVideoDECODE_GetPayload(m_session, ts, payload); } - virtual mfxStatus SetSkipMode(mfxSkipMode mode) { return MFXVideoDECODE_SetSkipMode(m_session, mode); } - virtual mfxStatus DecodeFrameAsync(mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp) { return MFXVideoDECODE_DecodeFrameAsync(m_session, bs, surface_work, surface_out, syncp); } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - -class MFXVideoVPP -{ -public: - - MFXVideoVPP(mfxSession session) { m_session = session; } - virtual ~MFXVideoVPP(void) { Close(); } - - virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoVPP_Query(m_session, in, out); } - virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest request[2]) { return MFXVideoVPP_QueryIOSurf(m_session, par, request); } - virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoVPP_Init(m_session, par); } - virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoVPP_Reset(m_session, par); } - virtual mfxStatus Close(void) { return MFXVideoVPP_Close(m_session); } - - virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoVPP_GetVideoParam(m_session, par); } - virtual mfxStatus GetVPPStat(mfxVPPStat *stat) { return MFXVideoVPP_GetVPPStat(m_session, stat); } - virtual mfxStatus RunFrameVPPAsync(mfxFrameSurface1 *in, mfxFrameSurface1 *out, mfxExtVppAuxData *aux, mfxSyncPoint *syncp) { return MFXVideoVPP_RunFrameVPPAsync(m_session, in, out, aux, syncp); } - virtual mfxStatus RunFrameVPPAsyncEx(mfxFrameSurface1 *in, mfxFrameSurface1 *work, mfxFrameSurface1 **out, mfxSyncPoint *syncp) {return MFXVideoVPP_RunFrameVPPAsyncEx(m_session, in, work, out, syncp); } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - -class MFXVideoENC -{ -public: - - MFXVideoENC(mfxSession session) { m_session = session; } - virtual ~MFXVideoENC(void) { Close(); } - - virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoENC_Query(m_session, in, out); } - virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoENC_QueryIOSurf(m_session, par, request); } - virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoENC_Init(m_session, par); } - virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoENC_Reset(m_session, par); } - virtual mfxStatus Close(void) { return MFXVideoENC_Close(m_session); } - - virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoENC_GetVideoParam(m_session, par); } - virtual mfxStatus ProcessFrameAsync(mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp) { return MFXVideoENC_ProcessFrameAsync(m_session, in, out, syncp); } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - -class MFXVideoPAK -{ -public: - - MFXVideoPAK(mfxSession session) { m_session = session; } - virtual ~MFXVideoPAK(void) { Close(); } - - virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoPAK_Query(m_session, in, out); } - virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoPAK_QueryIOSurf(m_session, par, request); } - virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoPAK_Init(m_session, par); } - virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoPAK_Reset(m_session, par); } - virtual mfxStatus Close(void) { return MFXVideoPAK_Close(m_session); } - - virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoPAK_GetVideoParam(m_session, par); } - //virtual mfxStatus GetEncodeStat(mfxEncodeStat *stat) { return MFXVideoENCODE_GetEncodeStat(m_session, stat); } - - virtual mfxStatus ProcessFrameAsync(mfxPAKInput *in, mfxPAKOutput *out, mfxSyncPoint *syncp) { return MFXVideoPAK_ProcessFrameAsync(m_session, in, out, syncp); } - -protected: - - mfxSession m_session; // (mfxSession) handle to the owning session -}; - -#endif // __MFXVIDEOPLUSPLUS_H +// Copyright (c) 2017 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#ifndef __MFXVIDEOPLUSPLUS_H +#define __MFXVIDEOPLUSPLUS_H + +#include "mfxvideo.h" +#include "mfxenc.h" +#include "mfxpak.h" + +class MFXVideoSession +{ +public: + MFXVideoSession(void) { m_session = (mfxSession) 0; } + virtual ~MFXVideoSession(void) { Close(); } + + virtual mfxStatus Init(mfxIMPL impl, mfxVersion *ver) { return MFXInit(impl, ver, &m_session); } + virtual mfxStatus InitEx(mfxInitParam par) { return MFXInitEx(par, &m_session); } + virtual mfxStatus Close(void) + { + mfxStatus mfxRes; + mfxRes = MFXClose(m_session); m_session = (mfxSession) 0; + return mfxRes; + } + + virtual mfxStatus QueryIMPL(mfxIMPL *impl) { return MFXQueryIMPL(m_session, impl); } + virtual mfxStatus QueryVersion(mfxVersion *version) { return MFXQueryVersion(m_session, version); } + + virtual mfxStatus JoinSession(mfxSession child_session) { return MFXJoinSession(m_session, child_session);} + virtual mfxStatus DisjoinSession( ) { return MFXDisjoinSession(m_session);} + virtual mfxStatus CloneSession( mfxSession *clone) { return MFXCloneSession(m_session, clone);} + virtual mfxStatus SetPriority( mfxPriority priority) { return MFXSetPriority(m_session, priority);} + virtual mfxStatus GetPriority( mfxPriority *priority) { return MFXGetPriority(m_session, priority);} + + MFX_DEPRECATED virtual mfxStatus SetBufferAllocator(mfxBufferAllocator *allocator) { return MFXVideoCORE_SetBufferAllocator(m_session, allocator); } + virtual mfxStatus SetFrameAllocator(mfxFrameAllocator *allocator) { return MFXVideoCORE_SetFrameAllocator(m_session, allocator); } + virtual mfxStatus SetHandle(mfxHandleType type, mfxHDL hdl) { return MFXVideoCORE_SetHandle(m_session, type, hdl); } + virtual mfxStatus GetHandle(mfxHandleType type, mfxHDL *hdl) { return MFXVideoCORE_GetHandle(m_session, type, hdl); } + virtual mfxStatus QueryPlatform(mfxPlatform* platform) { return MFXVideoCORE_QueryPlatform(m_session, platform); } + + virtual mfxStatus SyncOperation(mfxSyncPoint syncp, mfxU32 wait) { return MFXVideoCORE_SyncOperation(m_session, syncp, wait); } + + virtual mfxStatus DoWork() { return MFXDoWork(m_session); } + + virtual operator mfxSession (void) { return m_session; } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +private: + MFXVideoSession(const MFXVideoSession &); + void operator=(MFXVideoSession &); +}; + +class MFXVideoENCODE +{ +public: + + MFXVideoENCODE(mfxSession session) { m_session = session; } + virtual ~MFXVideoENCODE(void) { Close(); } + + virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoENCODE_Query(m_session, in, out); } + virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoENCODE_QueryIOSurf(m_session, par, request); } + virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoENCODE_Init(m_session, par); } + virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoENCODE_Reset(m_session, par); } + virtual mfxStatus Close(void) { return MFXVideoENCODE_Close(m_session); } + + virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoENCODE_GetVideoParam(m_session, par); } + virtual mfxStatus GetEncodeStat(mfxEncodeStat *stat) { return MFXVideoENCODE_GetEncodeStat(m_session, stat); } + + virtual mfxStatus EncodeFrameAsync(mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxSyncPoint *syncp) { return MFXVideoENCODE_EncodeFrameAsync(m_session, ctrl, surface, bs, syncp); } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + +class MFXVideoDECODE +{ +public: + + MFXVideoDECODE(mfxSession session) { m_session = session; } + virtual ~MFXVideoDECODE(void) { Close(); } + + virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoDECODE_Query(m_session, in, out); } + virtual mfxStatus DecodeHeader(mfxBitstream *bs, mfxVideoParam *par) { return MFXVideoDECODE_DecodeHeader(m_session, bs, par); } + virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoDECODE_QueryIOSurf(m_session, par, request); } + virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoDECODE_Init(m_session, par); } + virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoDECODE_Reset(m_session, par); } + virtual mfxStatus Close(void) { return MFXVideoDECODE_Close(m_session); } + + virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoDECODE_GetVideoParam(m_session, par); } + + virtual mfxStatus GetDecodeStat(mfxDecodeStat *stat) { return MFXVideoDECODE_GetDecodeStat(m_session, stat); } + virtual mfxStatus GetPayload(mfxU64 *ts, mfxPayload *payload) {return MFXVideoDECODE_GetPayload(m_session, ts, payload); } + virtual mfxStatus SetSkipMode(mfxSkipMode mode) { return MFXVideoDECODE_SetSkipMode(m_session, mode); } + virtual mfxStatus DecodeFrameAsync(mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp) { return MFXVideoDECODE_DecodeFrameAsync(m_session, bs, surface_work, surface_out, syncp); } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + +class MFXVideoVPP +{ +public: + + MFXVideoVPP(mfxSession session) { m_session = session; } + virtual ~MFXVideoVPP(void) { Close(); } + + virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoVPP_Query(m_session, in, out); } + virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest request[2]) { return MFXVideoVPP_QueryIOSurf(m_session, par, request); } + virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoVPP_Init(m_session, par); } + virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoVPP_Reset(m_session, par); } + virtual mfxStatus Close(void) { return MFXVideoVPP_Close(m_session); } + + virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoVPP_GetVideoParam(m_session, par); } + virtual mfxStatus GetVPPStat(mfxVPPStat *stat) { return MFXVideoVPP_GetVPPStat(m_session, stat); } + virtual mfxStatus RunFrameVPPAsync(mfxFrameSurface1 *in, mfxFrameSurface1 *out, mfxExtVppAuxData *aux, mfxSyncPoint *syncp) { return MFXVideoVPP_RunFrameVPPAsync(m_session, in, out, aux, syncp); } + virtual mfxStatus RunFrameVPPAsyncEx(mfxFrameSurface1 *in, mfxFrameSurface1 *work, mfxFrameSurface1 **out, mfxSyncPoint *syncp) {return MFXVideoVPP_RunFrameVPPAsyncEx(m_session, in, work, out, syncp); } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + +class MFXVideoENC +{ +public: + + MFXVideoENC(mfxSession session) { m_session = session; } + virtual ~MFXVideoENC(void) { Close(); } + + virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoENC_Query(m_session, in, out); } + virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoENC_QueryIOSurf(m_session, par, request); } + virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoENC_Init(m_session, par); } + virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoENC_Reset(m_session, par); } + virtual mfxStatus Close(void) { return MFXVideoENC_Close(m_session); } + + virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoENC_GetVideoParam(m_session, par); } + virtual mfxStatus ProcessFrameAsync(mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp) { return MFXVideoENC_ProcessFrameAsync(m_session, in, out, syncp); } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + +class MFXVideoPAK +{ +public: + + MFXVideoPAK(mfxSession session) { m_session = session; } + virtual ~MFXVideoPAK(void) { Close(); } + + virtual mfxStatus Query(mfxVideoParam *in, mfxVideoParam *out) { return MFXVideoPAK_Query(m_session, in, out); } + virtual mfxStatus QueryIOSurf(mfxVideoParam *par, mfxFrameAllocRequest *request) { return MFXVideoPAK_QueryIOSurf(m_session, par, request); } + virtual mfxStatus Init(mfxVideoParam *par) { return MFXVideoPAK_Init(m_session, par); } + virtual mfxStatus Reset(mfxVideoParam *par) { return MFXVideoPAK_Reset(m_session, par); } + virtual mfxStatus Close(void) { return MFXVideoPAK_Close(m_session); } + + virtual mfxStatus GetVideoParam(mfxVideoParam *par) { return MFXVideoPAK_GetVideoParam(m_session, par); } + //virtual mfxStatus GetEncodeStat(mfxEncodeStat *stat) { return MFXVideoENCODE_GetEncodeStat(m_session, stat); } + + virtual mfxStatus ProcessFrameAsync(mfxPAKInput *in, mfxPAKOutput *out, mfxSyncPoint *syncp) { return MFXVideoPAK_ProcessFrameAsync(m_session, in, out, syncp); } + +protected: + + mfxSession m_session; // (mfxSession) handle to the owning session +}; + +#endif // __MFXVIDEOPLUSPLUS_H diff --git a/.github/actions/libmfx/include/mfx/mfxvideo.h b/.github/actions/libmfx/include/mfx/mfxvideo.h index 88f388d..5e4ec00 100644 --- a/.github/actions/libmfx/include/mfx/mfxvideo.h +++ b/.github/actions/libmfx/include/mfx/mfxvideo.h @@ -1,104 +1,104 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXVIDEO_H__ -#define __MFXVIDEO_H__ -#include "mfxsession.h" -#include "mfxvstructures.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* MFXVideoCORE */ -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU32 reserved[4]; - mfxHDL pthis; - mfxStatus (MFX_CDECL *Alloc) (mfxHDL pthis, mfxU32 nbytes, mfxU16 type, mfxMemId *mid); - mfxStatus (MFX_CDECL *Lock) (mfxHDL pthis, mfxMemId mid, mfxU8 **ptr); - mfxStatus (MFX_CDECL *Unlock) (mfxHDL pthis, mfxMemId mid); - mfxStatus (MFX_CDECL *Free) (mfxHDL pthis, mfxMemId mid); -} mfxBufferAllocator; -MFX_PACK_END() - -MFX_PACK_BEGIN_STRUCT_W_PTR() -typedef struct { - mfxU32 reserved[4]; - mfxHDL pthis; - - mfxStatus (MFX_CDECL *Alloc) (mfxHDL pthis, mfxFrameAllocRequest *request, mfxFrameAllocResponse *response); - mfxStatus (MFX_CDECL *Lock) (mfxHDL pthis, mfxMemId mid, mfxFrameData *ptr); - mfxStatus (MFX_CDECL *Unlock) (mfxHDL pthis, mfxMemId mid, mfxFrameData *ptr); - mfxStatus (MFX_CDECL *GetHDL) (mfxHDL pthis, mfxMemId mid, mfxHDL *handle); - mfxStatus (MFX_CDECL *Free) (mfxHDL pthis, mfxFrameAllocResponse *response); -} mfxFrameAllocator; -MFX_PACK_END() - -/* VideoCORE */ -mfxStatus MFX_CDECL MFXVideoCORE_SetBufferAllocator(mfxSession session, mfxBufferAllocator *allocator); -mfxStatus MFX_CDECL MFXVideoCORE_SetFrameAllocator(mfxSession session, mfxFrameAllocator *allocator); -mfxStatus MFX_CDECL MFXVideoCORE_SetHandle(mfxSession session, mfxHandleType type, mfxHDL hdl); -mfxStatus MFX_CDECL MFXVideoCORE_GetHandle(mfxSession session, mfxHandleType type, mfxHDL *hdl); -mfxStatus MFX_CDECL MFXVideoCORE_QueryPlatform(mfxSession session, mfxPlatform* platform); -mfxStatus MFX_CDECL MFXVideoCORE_SyncOperation(mfxSession session, mfxSyncPoint syncp, mfxU32 wait); - -/* VideoENCODE */ -mfxStatus MFX_CDECL MFXVideoENCODE_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); -mfxStatus MFX_CDECL MFXVideoENCODE_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request); -mfxStatus MFX_CDECL MFXVideoENCODE_Init(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoENCODE_Reset(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoENCODE_Close(mfxSession session); - -mfxStatus MFX_CDECL MFXVideoENCODE_GetVideoParam(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoENCODE_GetEncodeStat(mfxSession session, mfxEncodeStat *stat); -mfxStatus MFX_CDECL MFXVideoENCODE_EncodeFrameAsync(mfxSession session, mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxSyncPoint *syncp); - -/* VideoDECODE */ -mfxStatus MFX_CDECL MFXVideoDECODE_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); -mfxStatus MFX_CDECL MFXVideoDECODE_DecodeHeader(mfxSession session, mfxBitstream *bs, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoDECODE_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request); -mfxStatus MFX_CDECL MFXVideoDECODE_Init(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoDECODE_Reset(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoDECODE_Close(mfxSession session); - -mfxStatus MFX_CDECL MFXVideoDECODE_GetVideoParam(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoDECODE_GetDecodeStat(mfxSession session, mfxDecodeStat *stat); -mfxStatus MFX_CDECL MFXVideoDECODE_SetSkipMode(mfxSession session, mfxSkipMode mode); -mfxStatus MFX_CDECL MFXVideoDECODE_GetPayload(mfxSession session, mfxU64 *ts, mfxPayload *payload); -mfxStatus MFX_CDECL MFXVideoDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp); - -/* VideoVPP */ -mfxStatus MFX_CDECL MFXVideoVPP_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); -mfxStatus MFX_CDECL MFXVideoVPP_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest request[2]); -mfxStatus MFX_CDECL MFXVideoVPP_Init(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoVPP_Reset(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoVPP_Close(mfxSession session); - -mfxStatus MFX_CDECL MFXVideoVPP_GetVideoParam(mfxSession session, mfxVideoParam *par); -mfxStatus MFX_CDECL MFXVideoVPP_GetVPPStat(mfxSession session, mfxVPPStat *stat); -mfxStatus MFX_CDECL MFXVideoVPP_RunFrameVPPAsync(mfxSession session, mfxFrameSurface1 *in, mfxFrameSurface1 *out, mfxExtVppAuxData *aux, mfxSyncPoint *syncp); -mfxStatus MFX_CDECL MFXVideoVPP_RunFrameVPPAsyncEx(mfxSession session, mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXVIDEO_H__ +#define __MFXVIDEO_H__ +#include "mfxsession.h" +#include "mfxvstructures.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* MFXVideoCORE */ +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU32 reserved[4]; + mfxHDL pthis; + mfxStatus (MFX_CDECL *Alloc) (mfxHDL pthis, mfxU32 nbytes, mfxU16 type, mfxMemId *mid); + mfxStatus (MFX_CDECL *Lock) (mfxHDL pthis, mfxMemId mid, mfxU8 **ptr); + mfxStatus (MFX_CDECL *Unlock) (mfxHDL pthis, mfxMemId mid); + mfxStatus (MFX_CDECL *Free) (mfxHDL pthis, mfxMemId mid); +} mfxBufferAllocator; +MFX_PACK_END() + +MFX_PACK_BEGIN_STRUCT_W_PTR() +typedef struct { + mfxU32 reserved[4]; + mfxHDL pthis; + + mfxStatus (MFX_CDECL *Alloc) (mfxHDL pthis, mfxFrameAllocRequest *request, mfxFrameAllocResponse *response); + mfxStatus (MFX_CDECL *Lock) (mfxHDL pthis, mfxMemId mid, mfxFrameData *ptr); + mfxStatus (MFX_CDECL *Unlock) (mfxHDL pthis, mfxMemId mid, mfxFrameData *ptr); + mfxStatus (MFX_CDECL *GetHDL) (mfxHDL pthis, mfxMemId mid, mfxHDL *handle); + mfxStatus (MFX_CDECL *Free) (mfxHDL pthis, mfxFrameAllocResponse *response); +} mfxFrameAllocator; +MFX_PACK_END() + +/* VideoCORE */ +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoCORE_SetBufferAllocator(mfxSession session, mfxBufferAllocator *allocator); +mfxStatus MFX_CDECL MFXVideoCORE_SetFrameAllocator(mfxSession session, mfxFrameAllocator *allocator); +mfxStatus MFX_CDECL MFXVideoCORE_SetHandle(mfxSession session, mfxHandleType type, mfxHDL hdl); +mfxStatus MFX_CDECL MFXVideoCORE_GetHandle(mfxSession session, mfxHandleType type, mfxHDL *hdl); +mfxStatus MFX_CDECL MFXVideoCORE_QueryPlatform(mfxSession session, mfxPlatform* platform); +mfxStatus MFX_CDECL MFXVideoCORE_SyncOperation(mfxSession session, mfxSyncPoint syncp, mfxU32 wait); + +/* VideoENCODE */ +mfxStatus MFX_CDECL MFXVideoENCODE_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); +mfxStatus MFX_CDECL MFXVideoENCODE_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request); +mfxStatus MFX_CDECL MFXVideoENCODE_Init(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoENCODE_Reset(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoENCODE_Close(mfxSession session); + +mfxStatus MFX_CDECL MFXVideoENCODE_GetVideoParam(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoENCODE_GetEncodeStat(mfxSession session, mfxEncodeStat *stat); +mfxStatus MFX_CDECL MFXVideoENCODE_EncodeFrameAsync(mfxSession session, mfxEncodeCtrl *ctrl, mfxFrameSurface1 *surface, mfxBitstream *bs, mfxSyncPoint *syncp); + +/* VideoDECODE */ +mfxStatus MFX_CDECL MFXVideoDECODE_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); +mfxStatus MFX_CDECL MFXVideoDECODE_DecodeHeader(mfxSession session, mfxBitstream *bs, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoDECODE_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request); +mfxStatus MFX_CDECL MFXVideoDECODE_Init(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoDECODE_Reset(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoDECODE_Close(mfxSession session); + +mfxStatus MFX_CDECL MFXVideoDECODE_GetVideoParam(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoDECODE_GetDecodeStat(mfxSession session, mfxDecodeStat *stat); +mfxStatus MFX_CDECL MFXVideoDECODE_SetSkipMode(mfxSession session, mfxSkipMode mode); +mfxStatus MFX_CDECL MFXVideoDECODE_GetPayload(mfxSession session, mfxU64 *ts, mfxPayload *payload); +mfxStatus MFX_CDECL MFXVideoDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream *bs, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp); + +/* VideoVPP */ +mfxStatus MFX_CDECL MFXVideoVPP_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out); +mfxStatus MFX_CDECL MFXVideoVPP_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest request[2]); +mfxStatus MFX_CDECL MFXVideoVPP_Init(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoVPP_Reset(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoVPP_Close(mfxSession session); + +mfxStatus MFX_CDECL MFXVideoVPP_GetVideoParam(mfxSession session, mfxVideoParam *par); +mfxStatus MFX_CDECL MFXVideoVPP_GetVPPStat(mfxSession session, mfxVPPStat *stat); +mfxStatus MFX_CDECL MFXVideoVPP_RunFrameVPPAsync(mfxSession session, mfxFrameSurface1 *in, mfxFrameSurface1 *out, mfxExtVppAuxData *aux, mfxSyncPoint *syncp); +MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoVPP_RunFrameVPPAsyncEx(mfxSession session, mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/.github/actions/libmfx/include/mfx/mfxvp8.h b/.github/actions/libmfx/include/mfx/mfxvp8.h index eda41f9..7281402 100644 --- a/.github/actions/libmfx/include/mfx/mfxvp8.h +++ b/.github/actions/libmfx/include/mfx/mfxvp8.h @@ -1,71 +1,71 @@ -// Copyright (c) 2017-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXVP8_H__ -#define __MFXVP8_H__ - -#include "mfxdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum { - MFX_CODEC_VP8 = MFX_MAKEFOURCC('V','P','8',' '), -}; - -/* CodecProfile*/ -enum { - MFX_PROFILE_VP8_0 = 0+1, - MFX_PROFILE_VP8_1 = 1+1, - MFX_PROFILE_VP8_2 = 2+1, - MFX_PROFILE_VP8_3 = 3+1, -}; - -/* Extended Buffer Ids */ -enum { - MFX_EXTBUFF_VP8_CODING_OPTION = MFX_MAKEFOURCC('V','P','8','E'), -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 Version; - mfxU16 EnableMultipleSegments; - mfxU16 LoopFilterType; - mfxU16 LoopFilterLevel[4]; - mfxU16 SharpnessLevel; - mfxU16 NumTokenPartitions; - mfxI16 LoopFilterRefTypeDelta[4]; - mfxI16 LoopFilterMbModeDelta[4]; - mfxI16 SegmentQPDelta[4]; - mfxI16 CoeffTypeQPDelta[5]; - mfxU16 WriteIVFHeaders; - mfxU32 NumFramesForIVFHeader; - mfxU16 reserved[223]; -} mfxExtVP8CodingOption; -MFX_PACK_END() - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif - +// Copyright (c) 2017-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXVP8_H__ +#define __MFXVP8_H__ + +#include "mfxdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + MFX_CODEC_VP8 = MFX_MAKEFOURCC('V','P','8',' '), +}; + +/* CodecProfile*/ +enum { + MFX_PROFILE_VP8_0 = 0+1, + MFX_PROFILE_VP8_1 = 1+1, + MFX_PROFILE_VP8_2 = 2+1, + MFX_PROFILE_VP8_3 = 3+1, +}; + +/* Extended Buffer Ids */ +enum { + MFX_EXTBUFF_VP8_CODING_OPTION = MFX_MAKEFOURCC('V','P','8','E'), +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 Version; + mfxU16 EnableMultipleSegments; + mfxU16 LoopFilterType; + mfxU16 LoopFilterLevel[4]; + mfxU16 SharpnessLevel; + mfxU16 NumTokenPartitions; + mfxI16 LoopFilterRefTypeDelta[4]; + mfxI16 LoopFilterMbModeDelta[4]; + mfxI16 SegmentQPDelta[4]; + mfxI16 CoeffTypeQPDelta[5]; + mfxU16 WriteIVFHeaders; + mfxU32 NumFramesForIVFHeader; + mfxU16 reserved[223]; +} mfxExtVP8CodingOption; +MFX_PACK_END() + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxvp9.h b/.github/actions/libmfx/include/mfx/mfxvp9.h index 7575f2a..05e47ee 100644 --- a/.github/actions/libmfx/include/mfx/mfxvp9.h +++ b/.github/actions/libmfx/include/mfx/mfxvp9.h @@ -1,53 +1,53 @@ -// Copyright (c) 2018-2019 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#ifndef __MFXVP9_H__ -#define __MFXVP9_H__ - -#include "mfxdefs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if (MFX_VERSION >= MFX_VERSION_NEXT) - -/* Extended Buffer Ids */ -enum { - MFX_EXTBUFF_VP9_DECODED_FRAME_INFO = MFX_MAKEFOURCC('9','D','F','I') -}; - -MFX_PACK_BEGIN_USUAL_STRUCT() -typedef struct { - mfxExtBuffer Header; - - mfxU16 DisplayWidth; - mfxU16 DisplayHeight; - mfxU16 reserved[58]; -} mfxExtVP9DecodedFrameInfo; -MFX_PACK_END() - -#endif - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif - +// Copyright (c) 2018-2019 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#ifndef __MFXVP9_H__ +#define __MFXVP9_H__ + +#include "mfxdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if (MFX_VERSION >= MFX_VERSION_NEXT) + +/* Extended Buffer Ids */ +enum { + MFX_EXTBUFF_VP9_DECODED_FRAME_INFO = MFX_MAKEFOURCC('9','D','F','I') +}; + +MFX_PACK_BEGIN_USUAL_STRUCT() +typedef struct { + mfxExtBuffer Header; + + mfxU16 DisplayWidth; + mfxU16 DisplayHeight; + mfxU16 reserved[58]; +} mfxExtVP9DecodedFrameInfo; +MFX_PACK_END() + +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif + diff --git a/.github/actions/libmfx/include/mfx/mfxvstructures.h b/.github/actions/libmfx/include/mfx/mfxvstructures.h index 5fbefec..a4dda16 100644 --- a/.github/actions/libmfx/include/mfx/mfxvstructures.h +++ b/.github/actions/libmfx/include/mfx/mfxvstructures.h @@ -1,22 +1,22 @@ -// Copyright (c) 2017 Intel Corporation -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -#include "mfxstructures.h" - - +// Copyright (c) 2017 Intel Corporation +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +#include "mfxstructures.h" + + diff --git a/.github/actions/libmfx/lib/mfx.lib b/.github/actions/libmfx/lib/mfx.lib index b39632ea72ab34d202c4cf29453d11ee1b183696..21793c87eeee3a66b2b004a1a4178794b39655b1 100644 GIT binary patch literal 1039862 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 z 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

-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

YD#yH#!b7&CPc-h zMH{-O#nX2wNr{PZjbm)#PD)ORNwtABB_<--5ZygGy-%zS+>+Q)5y{aua7$(PGbAS% z;!=_fQ7JZnK!o_HblVv5_LbOZTNExyJ|Go)m9_{i@kin?PHKuRs-s$`q{sgY*^`r^ z5~7oB(;M-o#3tFsj2GD$24Y<|BFRRJOEE;HCC8>_koIf_q27jb!!}ewYCGs48ZYp% zsk8P?%t%R%jp}E!^l<|X=}Fjkw5|B)Xv4p;oTQYPq==|~ZnhPUQy?jc3AXX3q$cAH zNYEO(jco|%@nkkOFw4zu12gxN(rh#i zs3kGtUyX~=$*~v|ZJl{YRf&904<*aZbIxZ}MRfo0|A`MH{h5~6G~nAmt* z8e1w>ntC<0t!NqsaPBC|#$f=ei%r1eaP+*b0Z+!+*wbM=DgA9!o*eW3TMOdTcN>>5 zXi3ku`WwxMEgac66Gc1Vk&FyHTbE#aEAXW++a=)s+D3j!3#t7R(`<<$pn$aGxOkgZ z5u~DN1q-H3)4>mor(}ePlnh(F0F|F&V+V>hM5fUqhz+uH?-w5(XUk*&%*N5qwxZGV zqikw4luScTKDJW8X%HQWKLB;}ZMO+Qq+YmfmrRZ0`P{y_p%cjm{jreG?=9z3frR zsRNR2iG8J}h)sxywsk4rXp;qL2=u|cXEIR4fW!eUnn4w|t;|Xl!K^YOF1C*?s-Si> z#N+wTe48V`8bA}akLxHNFVyW1jQ-XQIlt1$zs1?o9jRmtLov41TT*<#)cAkVm!t9Y zE$!;qCITvepG!dZ#qzAp2r($!X6Cfi*f=oTX1c89`G!IDzn99%Sz?h81cH8tWjeG{1wH6g? zo3)sjt8J1)C21IKY+#m(1^`6w9T6WJmtg}6njC9K5oxK3)|m?wgJNF-uHQOHer*qP zPa!G(b>xWX>)-8t{j04JR0D%YvLPWV!!{h=82Qcz@>3(Gf;Ku#^gZS?`Hs8|jc7jJ zHM5RTAY1B>_`#+fOeioV#t=slfOQe9s!;Ax&_^QmN&E667b%;s(eD}dtYW8sN_M#L zWzX^Z?@sS9d(`slt;a`ouj%!P$JD2PDW{Km*X`?GR~vt>T=KT)P)F_TFOmv3{rk|= zp1&`O`J?=A%1p;n+PI~YHY!K;a8b3Y>AkUb`4uCdW^5n*&x@ub1K)aWcWzK9dREIQ zSI1tBI|k45pHQTB{ocDyhOEwLaHREWKh3I%4Ih2BszkjVP1>JsG0nqs?$oN+8h5V| zw53eq;j#6TI!t(IKk{`$7kA~J-c4r?EgY~p;C|Wg1~n#x@BBEe|FdZC@xjGD{?haK ztQrSOwq5yM@qkq+{VE(g)?jF(6Bmc~`SBai{g)P0>Hecn)YT&AA9`&Xq1;rmtK*C% z>Ctl*udbxZp6a*yZS$x8tN(sjbKbN`i+>5x(LSGbJ6nyr z{LPkky;q-q6+CT*=PvID3G)np?C3P@c4CL5g}xJA4&{86c)|C=j-OWf{P@ayRd%5b zu~&R*E!%u#LQKpd&Av3ftM|UKD?Z*?d32F$=ltjNzHm1&v-iwB`!9A4D89&lm&e8I z7GHn&$QN(tQcmjOH)lX__^#{y1- z!So+a*ItzQWW~&9cB?gW%X&9&SpU`m?V_u-PxWZwyLHXoC4;&R8}pY(SUcx;e=656 zc(}0GbwR@Zv4^Eb=TpuX63zYwTNmrknalrBBM7^;t9Si#B^Ri_P;N z_w{e5x2(;Ke==>;(%Qq%`DT`zr))7}^!2Q2GxU2OhI+5OGC!U%_H9_Tk~df>YIzEj#HD#!SrzZcxQ*owHEm7bH!EPCQM^60HT?kl^i6Bei! z5AyBzsonQ2?l`=gwW(Hd-KtaF-HQFH+>%qI^_{x=%jst{&35j8H>-M+g+rr`?XKuK zq2Z#VI}dF2`So1y+0XPZ0=6#h>K3q*~PDTCq9DjDJa<4;OJa$#}nown! zW^LAu*4ahw-&{O+Vet*?e)ZfqAh`9q2cNt=^4IAvx4&KDKdjP?R}YRDhL^A7o0&PI zr+Tw}@)2>3L zkmhxZXC8rjuGQ+LoqoZ6&4#e%_a{7Tm-T0ZYs#!|xAyp`{&d}&pNq6PTD6vbP1RHG z>6MS{UJ?0EOpT|po;#OmQa_$^y=?`LOS^w}it-*8dTNH-VD*7ASAQt>AbOm4R^6Wl zy(qJ}hxeL=%H=Y*XZvDJy|{H-h*=|rcKkYXuC0DMvJe$3$knA-+f57cI@?L z&4Q;a{>J;j9`&em*Hxp7J}mR?@BP9&lHKIn_z z&RyeOreBv|r}(*a?WkFrG^|JZ`rj&#(9|4sd~=5XumvMhD>mFWSXsZq)kn@(17>%a zJL1f*l}^=dayjOwrH%n3$F!V!vwV-28O8P;tyC}8e_o-EvxA48{8sr%p)a&YYxwU= zU0Bw=N0$aoos0d^tjyo~Iq~-#!rVRU`EL8B)YXG6eX^=tIo!SJs1YN(UT*Y7*P*J( zpIt0DK7EW^rP8Oa-aC6)J!atSW|vQOAAUnUXyR9gOK8T7e>(8+$)w?fV%@vVyX)b< z+GqZdSA$Q#_`8q&ohB~>^y?S-k1M&jjdR;Vv&z-mQ$j!N{+aq+bB6VpGU4FtwyWy~ zY%XrMzNPCI_0JvpXl&@FpS|{6DBY}6$4wWvjc+^ktHioq>&E=P)8$TITZf zTd$?6lo=v7TH&ZsjLm!FwBYvnf`);G9$?rF0YUta8&QKq!R zFTRVTFcT?S+q&nd??`-LhUcX34{2TVhuI_UX8U^txNTRa1(8bf@H{eXGhG8rh)M zx~u+QT`c-;@6gxFH0rW#+aK`P?fj?K&?_-f{m(V+-m%%Ub{{W%aVlT=) z9B|stbK8YmFROHpe-hcR^@yccPx%ager`??ALQv@Gk?kJJVY%DOG>Jo&K$drs}hf0rQWKbX~Dl7w3H3 zzO(0$$9`K@H?VWhv8&@Sq5Q7E>%Vpw{qcz^1Alh7lb*Qvdhzww0+y8hDdb7lsXw;b zJMfq1!+LfY7LlJOj#K|pEd0LOt8DvRpG)NWTr$_^Qn@~t&h^?7&u?@OcsceC40I z`s)=+s+MU7|2%%raP?=){f;;OSmQHt;I_RlzPizTSBdLYJI<`(J=OKoE8BbD{V1X1 zhRcV#^wvyEJ-n^r&y5!qpWkVFjgi*^);Wxx-1W`6k31fDFDf_TrvJR@w|zY~Epxg3 z!ve#_Zmaw^z5C&_N;y8)zVmq%lJ%F)XVaUoQ`;K03G8!f(w?NLt(2>F?JK$a$#(yy zr-oHu+rFiGeyO2@N;UBd{kY!1MmMDYd@(C1}m6_HjW@wX^OxDp&0E{nIU{ z{Ozrq{I(^%dFsD^a^;hYTtaX3{AJ$YXJ_iG*FH?|;=1-q^VS<)m3q2hw%4r9i!=H@ z-!bR*$B$k5RA13y$AmNO6Pwms^iQBRPbBv7L_a+*kd5yU*0!;ki|LyjGtjH{ZUg>9@(JZIJ_C>b_GZS1R;6wv^|@zrR}Q z|8(@HKRIM?($?wfIi~EiX9Iq2+ImCW*vajxHuhh*=5yVU9QVTI?+tW%vN}vRCjMHO z{rJ+)Bh;7bJY00A!}JS|<60cJKkeZ@mv=QT-1D2c_4M;uFUGx?wY|j4xdVUDjPF)! z=oibpn~mHWuyWdw)ta6D*{6Sb^;6MhPM_>~wP}sl-l^Yi+^1@aO!fO;a5JH{ z+o-JGcc9(&qmwJ$KXaj?e*WQ?tJ?MY`LBz9j>T#!>dChJBIw#rIR|)w|%5) z|E&F2fBgMH{gC56QLh{R++n!OsV*(A3{d!w5)7w5Pn%Kuq9#s17w3$;6e)j99 z9VYa6FltDpiq72!oKfBKaM9+BKJ)rS#n0#LXmV)%qyDXY=3J|HPqlnt;(EJ7-KbA=nd|re)_6&S(ZAhsbXi;Ogl=zz88hz&`yaUYu+aME zM<@B@1a-|hRH*#wg)K@qy>q&RZgr8q^J?uF+xLF&F9sd0vEKXZD&Mbnt8ydu<$(Jk z1Ipj_9`82xO}O`Wy7cuW1|QFv5Tx}>*>@>es_3rD5bgjQA1t8VkW@SMJ* z!qE}06;MO~NN<-K6Ptn`!6>G{(|?LCCOlN;N{C0d>ZE*UJUIviyzxzuNhQ=mil>M1 z)^ue0vp~h4JPgJlxBu+zgG|D?1rA>IqGIda^sNu>y@Z zn-)W$xATOew}4PX%hx+x^vP4s5)>DVD#8WJR#rG{G>!qt^~_})^c`JP0zG#uUAc?{ zFXiiGz&2$v-ndgR`{)fU6Z>EWLQQA9s9Z7-DwhnCE`rp)(_k#blo^7Riwv+1FUaIF~QBR_HJ$WA0ljmu&mCmA~gOQE5 ziktOz<~EQ|3XaLILA}{A-A?>{V79d?^?K7rrLuE3s+Uw*6;hH(jkF=s7oxI6l~7O> zdEQisDxpAS>xs(ZL0m;!TPw?6L-fC~+`KBOkt(T`Dv6hTuu8ral_ZM0ES^U;%=5C9 z4x)~Okn5eRj-)iYs7K`6L#21Lsc?cV)wcF5P%p&`F)~RWym*84(vDJH3qwHOONrtQ z%JZl}d7k?L({W60+b?iO>s70PG=OkD5XIY^=TV#UJkMawi2Kf(?DLvz zt-WT{_o-#x;T;!{<*16F6`B!8oVy*a0IC8o_{JC;n6XxIe%gf7nAfGJ44S%7zU8;D$dh6D*Ejr`QJT4Q>1_LMe z_}ImSg~}w&QVn%d{#Vc(X?7Y?((DYRB+eY96e!`<0GSA$6bq3eXrkXd%_NzZASI1g z0UozZqPS)9JhDul2SPz*8?PF;lWUw)B#$%8`(J516^OY*R+7M|@ob6-`IY+x_#dY7 z(Eu`0`9HwyVnjwtW#-m+9Xqb^dPqs*pCNTZ+6XCWya`g$INlz?H13X+G~OI3X}pfm zI8j{VJdZTa^FWwsyphm2r%2-s%`^@#YL}%ff>{A30Pf2o7w%A|46-=+9#JH z{y~<;gn`P;t%en-9^JAMDXC#KQc}Yjq@;#*NJ+-^NJ$MXg&K(Bro{8elz3jYvWTdA zUZz0h&;IT;O9DBz&(O7c?r)r?wVhF_oX&mYYe{ZH|=WYAIFMPgIvEUR|C?)#Z5z2J30E zy1RIaRiD8w8uxb;AHvgTIAmp1$jZRVPX<4B~-I3BgfkKx=@d+}|nLB(i0+I#c>u#Ha@U<$o?XSF zii)WpDL!guuPEY0LAS9LL|m@PV!C~45ufLTxVY}L1JqG(7uFGYd#K$HxS!T!pWvUe zbuO;>n5D9pTFbnps)L=k4;BCv(U7T#!XH!=qk4!u(h!BF8}R3qtM!tQN8d-_FV>>t z8`t)97NP$KwV)H${HW<@T~KeA#Agrzces{{zDYLpSJQbN++k4AvY^ET zi{#Bc681#vmO_3nqz#bvMyf)JH<@L2M4F7WAJTNBWCh)!A3iz|RYGw@!8@LfKmA1EoNOK76PJVJ_neWFYfeH=o|@fwQMtK$>}a$J z1$JYQdLkW*)EntIq|{b@Q7_(BMDZTW^Cn5(^0qP+ZWe17vT9CITP3kPY043Z3^6Gp zdb;4?6mj%td5(^DijT-TrHj59!oDd5DuYoqi+)v^y0YnoFDx$N9n3gL+G&h3F2%~y zTCnAjF#^1N1$r{09B|JbMiDYi#B$4H4nnez#$9{`I*U=}cfg0z3be2Qt836`esK}( z_&mXkw@hT;Qf1{;X``q{Rd^b2Hc7d#R5@8#y5CK@hfK!EPv%jW&3idT%Hb51OOBAj z`anfl>I32;Y?@`16FH3N#iuz!518c$x^C;%y_({mX#7M5oH+FnXU^@wjZ#2CN#xDQ zpvfe;K@)`~O37V#XfP5uGk<}BJdg&CE;N3NZ5)i;`K(7^u+JI<-!aHTa1_oOZ)TLS$56lE zQWFE^l2+&q8DUya$#(qWNVMkm0l}V$2aK}Qq)NWJ<-nWPM`w>mnNS92OW2epP=A_L^anAk+9gUXwMhvo7q_x%{Hgh({X3oSWMPE6k z=>rSVM11CK9-py3R(9kY+^5N*NYuzX>Ok3%ckpqiGyc(J?Qxj|8Qz`Lj5?snevSyw zHMOoL8)BY#7wFvPuPl{AN+nHpaa|4~Kopq$3;U+tr~|2PZs6eTn(QquJ6Kibx@=_W zcwRO4`BOd_uHroB(0|w)E;P;+LNMX0p6h#yr zK=BBbOzIZP>kf*?s&V4mOiQ|Ar$rb4g z!(HTX=)2BxZ?*90+JsoX<3ak$<3f=o6s;Y}ZuE9`Z24*-XcMnf34!cNWEDlP(A!1u zUns`UGUBIX93ATcl77oVZ$}S9v8|*E$aY4yj%6p2!^5w8RF=YF`iTvJqK(GS!N}3D zgK@kBH`R}v8qEZXNcn3OicG5WdZbN|ZbFKUQN?DYNl5XY)XX7BcOxZtvf>xYI`X|zISZ^v0SuWvo8Kk$7 zdLV`MXVMR6{DHI`(uYX3NWqiohZGJw(;w+$q(MlZA?=OyIno%Uu!79KNZ%q&K?*%& z4n&HwnA4{Chj)IWN)Qf{~e$tuox{Eux)8>>tzBt74YDl-tlv1(_`5sP{ zLf!>-H`SN0jaOc{-$}TL1yZN58;#ghs*K1fa;_YkY?ttjS6ofkH*UFEvP6m_F#C~7sEt|(zgc8KPMvZ?+TS?S)=uixW%bMsdqgM-UfbTc3!@y@B?dgjQ^b7#pG- zYH4oOME!qjGRD142x{^E$rw$zavuw!v7h1u`YvA&gr!@d=K@a0a=V~{OvaqyX=vI} z18GO3wIt8uEZT@D?s<3~c^;kz!p!ru!kygnaEf|-9hPV6c}N4stA*g;6mc|Uc?Fw{ zHDUMW=YgD!MIj}0H^xEM-ked!UV{$`E;R_NlQF6{?^~RrzQrlxr@l1+f5A5QEz?H- z@Xkeji|WAp7Exj{28WnyGRAVmWK5ei=s8WuUSLAzeo=!7keB;uhY{N-3D6`;w5RHDlA996viC8fQON z=Xt(j9bQjsDP>1)C8;dtc?(!B7Wg$BiRMpb$7WG3t>|mA^sc>oPs03(&!*123+#nC zRKqq`(#rFB6x}uAu$?B$*W=zf;=$?-KZC-*xOceCqm;IqY&{lxLa=RvXoues2pkto z=SUS}#MX%WRT zP<&Fi7L-5Bqp1R))EyPyUIf*Feft|IK5csn%9rJB20WkM;UhC$OeL_}Z@y)>A9s}t zq&`SzAceJO9z%*LROUIP0Z4Bl?T8dpECsAT^EJ{QNU0NrBc-Wg1X4_)6tPGV6D~oNDAgW6!4?H2jGlJdVaLQXfUE z$y~$A(UH7{+_J390vsKI_Z8=A*pMqR=1wq|w04vx_mE3vla1kjg^Pr<2)ZV6G14+f zmrA-1fzG(@iQ+>p&!Zui=V`K!U|%ZTWYxM0P7}pAXtI*9-kk2t)~?B5;d7F9(DHQp zfvoiJveJ)drJuxybNIWa$!Wyzh}nUUck%aER;#RxB3T*0%5c!+Xm&6!Kk`6YPfb=F zd?%b?jL9)P`rOO(GnUPJ(b{>8CM(s&6@(}Lyz!@zR@8MaY!$tvw9;+a+WzbkR0ohEy(OC~8Nd#%e@mTqyG#L_)3GbtT$BwbpOr%gc9b@?2B zSEdxcF3-RH@4l}CVR(S40mXyPSWwghizp6(ssNKJqM!viP7MXc_X2PNiv=Y`6#GQp z6+r=jdHXd;b8k^b6DRW9BP~iX62C0ZoRPO@@hR&j>Bbw)QsYKJCUQ*0P8Jklsg%g*3$jq?eICM0x}1-$+RZkC2jA41>~m&m^jZ;(*9IB2gufng_!;w)RLT&>K^n?r zlrdDdmJ%+nRVh$hBQ(lzZITSUB|xwMUrhuqvJ|Q?Sq5R#^cXH)u~7O+E8QO;_Sl#evm+~JPgcwUeE1H3Cv`l&0P{+GM92|yE&Foz8Jbn{F?1xhSNgw=Q$B|rJWlBaipMFm@Xq5Dn)&eP1oIP#k|U9~ z$a97@7Ex3~kLIz<=Yql)%;RlAs?9Yk{RW&3kdN7nq8vF`ep$vTp(zGs9A0gm5Rr-> zx9A*^!MY16&+;gqv<-b%h;JI&Ax*}|;z)-g#g0%W^_#LtbC5bAC2^}Dor2U6=`5t>kS;`8 z9_cEi6_C;lw<^*WNUI~IxMm8J%)J6pC1~?e$~!JmmT}FuxRb{_Q%sKmrZ{A!RLDwkLbl~Gz!ZDWr$_BlOKY-^-G#{`2047MF#e$j z0&qBxq`(P5ddQKV5R}LFY=6`9f%Us7vF_71S3i0igH@i;t|Q z(KbwQu5ooO@@n93CjPoo$L5#C!JS_Cm7lnXWanr@9Nu-E&<6zGR-P7x6Pb0{2uq#a z@^XdOF)q)V9O7ZqdqqRsKM6JAtwfaN*mDcQ^Rb6hB^{zsw(TDf0 zY_w2FKD}!a7P+L$axW#n7Aj!(GTB#Q-HUoxInhc)S@y2NMUB0SQ`A@f!ky-kooVl) z2grGU

o{WgG?XT`$=EAJV&CGY;xq?-*t5H~667l7q0?yQuEGcX5h(7pI7yde<2I zMSW23l6UI=*WHWSjq1dE7g2of{@y(RvBGb44?ye^yl)R6f-UO5f0iuo0brJlF|w&B=QNnJfyRJpww2X}U*H2yy%r7=QJ1@XY1Uu-B+?Mt&61_wN>91Y*7`9UPXIaq^vsuS_Q2RyPai3mQAS!wvBBz0zy2 zcrd}9Ll|pP49QBfZ`yC8IG(PrG25<%6g%OWH2!W!8jW-pQra!pjr0qody$?-dJyS3 zq(_k6MS2|RJ)}P(eTeiYq%V*jMOqx?okmK!IfIn?vAyWWMDbk&o_9q0*3u`p#hu*4 za*8}`8J1@n@jwaUY9%;0MI06KIwW?4?%efN+T#^Z%#pu z{=-H%lUX*~ML>5p3l~ZC|A9;e3Sg;cQY&+ri26@uD#&D->51%( z%S6;{pd>p+NR*6O8#uMhFd4JIvP*cNzOy)Y^->1~aABE<3>*8y5;jpXwlx{G0eQtAjZR)u+6`AWFudb^rQi7~H7H zCOAlVASiu+Ql||GTzeMeV||h?23~@X56RSUP2h zk3PshJUB!dq6QCP*2EvjBud7lX@k2ZrnffOFI=Tp>eRt1bW5&0Z++*0@DQ!PS|1t$ zHik=mhT{??%3W|p|>E^1XM^BqCzj-lEhwKp`{F;pEKVggL^(rCzWiIQfJlB@e&LF}=0^vSb{m zrNALd#<9{Ta?3{DmXyb2YAvvclCdoP1|JLb0oo9KkmSSk9HX7UAWFud$f$*-9eArd zX`yaDqy*}9TJ%#cqgRmDR}&JT4i09rc?w*jWZbs+)cQkkNr$ zN}I^NjRhxOY7N2@*rsuGWHN>dOrm5=D>4QkViLI8fWXk)K9A-c+{X|lXvn8 zK3WKbd#IkYZ@@8#k}<5b0mI0{yl#FF%oC(&c)q%1V zaE!hJgD4q;My@)R_2U>^QKDj0FIuJGZAX-hL#rA!^1umE26%gg$%alCNdki?8N*8Z zhaxx*Q3rU3bD`vhBdipGMU;$XrTvY;w#jJ6^+R)KUN53#94qZ5g5}J~gn^kt#?VViFjK1Stc8k%Pen7u9hv{k0e22nDGm3nc1=M$>a1tSVjV}b(r?xj@uftlfr5_m+( zc-CYJ_15Z5K}a`a1qM+vh84T!^}>k2tdflke5}nDI7G=f)?{JhLQse*ytC2|DrWVW zATWrMF|3SJk}SNnOokSQHCbR0C1Y9XBf%WSD>Nho9^Ay?l8&YdETUvAD{~R%eIz8B zmoP&l9C`|c+aXc!#bMnwFPzx|hbS4x%9s=yjEP4;h&sqesZ!^KH&5UZCF5D?A3CkK zN~aH2hZ`$Lbz3Mfh>|g^=m;44Kr(4I2Q-<(ED<%LN8eGKLlX z7%?!0s5HtTtaR{-g}Z{A>b6SY5hdeU>9>}6I&~+tj=?d!wE~YQ8}NK|O5b1^Z-c-i zO2+%p`qE5=>if08BTB~m!1@v#!`mwGh_V5X*H_@}5O_q%cpq9{H*iyZcMCkCWV{co zFTpW9I=R97IZ-y?@%jq9g948z8Sg{uOLI@E?-7AVl#KU*^(8olcU0gJWdk0sufY33 z;1MO`S*fooINaFfu)v6AMw3vI$@incBTB}z5}R1ynfket0*fdat06w+v7TgsWsJV4 z9nJ_WqGT*9F>_#$UWKVG%}~@KA+(TcGEfoTF9MG!8P7_)%6L$iJ|qNFK4TQd+x5J_ zBTB}z(hhmxVd+=vAL(r32u__y1*mq1Mn!$ zXR(m1K*GBv@QC^VJggM@O=8_i~{eaz#~e=dvCvH?M^V^SgM!j4Q~Va}ct@0s zS1|cF9-nFPepp!G5hdfjw>{W=TbdSNr-XVo$yZF^5hdeUnG4A6%kU5uD!s7t#bx_Q zU=bx_6-+kXsf}KdWTQQ0t~;V+y!YykuPs=#ZCQawl#EA%Yt#H}nb%eAuMe?Ui=n6H zxQs-}n9YEh$69AD{o!LSP^ve*ppIh_C1bY3cWv^MQ$>qKfyy91+OjaNk6Zd4CxK6t zt@v_Z6pJ{JkL1T|pCtK-lJQ&PJC6^S-`JfPb~S-bl&#o8b~Ef60-Goq`@L;xrgz%X zr3^mzcM+IG*^G%TSQ)dfz$8k>^niZz*b|U#&P-0(K8(JZ-qgVDjwoAkg>Hq9ZX|Gt zl5zbYueQMUp!D%UgcA}LuF(c#nz9n!8nx0pNUz7HtQb-V7jL7HaEX#}-y5T_x=SVx9Kxcv%y1crlCj?3 zMrQK_0ZN!50+Xl@#T0JL470PqBud6?iSnA~*B4ox%^bZMZdZXzl#E-j_!cKC*wGIS z)=arRdk8$DWV~jOGvD}!$!Us5=UjYP8}$;HM9G-%wRwc2AwgO!Ai3i zjF$Gp0}+S8V)@)NUEmNU<5;OXTDxlj_; zP=Q61jAf;M%m`?&i_WQG>oPpgl^I6SJauNvVslWUg1Bud7# z(w+j7t+a#&&`2*3sXgZkJfdVg%kc=WDo}=oXy75}_^sL-r{*vTz~m-GEo~$cUQ8jQ zuO~{zvy?AyJaS|KY8{>RW%cbR@Q9M}ENvujJnpywie*rU$1oEFCQ&k`WxM2!sR{}U z48bNNb59cH7Xp(g8B>ezea&n+Z%lMKG_(qO4aPp7+8dwQ_#jOlRq!++M)^}kSwzWY zdE*AJe_s~U(Ew2fQF0lUbCJC36B;1bNV1XKRWqy8Kv5o1a(PzzEj6og+n5Fjn#wY{ z@pO$8YY-*lKy9#Jx0LFDq$=>r49xLl_N4pA~rLD~>;8Vjk6GMyDzM9EkM z^%*#_j01N#ogj5&(*F=)^F+y*R`%=6^iNALh|~i0K_RRS&I$R5lCcV6_nrK8p#hSO zT@*M($v9SG4s)5LHMc7QgD4rJAoifqdVAySh0(lN-F_2zM9Fwo;xjXuRC<4*qniSU zC>h7foX!jf!K^wU6i01CgTskX2Pwsx*ByaNl#FY+PM)`~G};E5fYmos*acBCUR!)` zel|F7Jf({EVzpjab_xl@Arw9(pdy%lUJHE_ zC1YEzq2$Ka;Xq%wR))qrM=zim_B(-1l#E>+`Z0f2#amBvr0@=U{KG_J{DnlliIVx9 z!C%c>znovE#<>8wZbbz@Q8K?}KZc&vow1>Wm^vsVoSj(WVlX-IZYOCRBud7y^r7ZB z{PdJupOONHC>h7nhx#j3Se7vE(@QhI5J@#mrZNJHC>hIACO%E$$LIMJ(g;L;6Yr&x z>PA$4I6;9b?88XM%ffNe2?yNey5T)m5)M%^juK_GH*c#vW8eJx0w7qOvqTw0$z@pj z(*PyL!tg*X9&$4glN^%Z-V5d`WdDO2#Z` z3@JS>U`++A?&C!nM9F1XuJz^iHCVCn(fWpBH;uL&wAe1~D#aQT1tw9pVdkE*Oc9tw z$(SvmU-M^(tjn3#oM4*3B}&Gv2HdJ<_NB#hj9PjFu0FD_Au1K$Q@gJg{6xw8mgALm zxy)x19CxO`B}&G%?1w@w{y2PaTBK1xl5d^BAxg%1fB%u&*Qx@{Mn`XZ(8vKT$HjWqZSpxFNG=ZI$ZarfweL zst^Rh)ZX(24pB0WWgKRXgZ>s6q*aF~gZO&zB7sBHdvN^JVd^fD4+{#0Na1>=I*`e; zRNxRLd?V^Zl+2%xPNmmv@bbSC{6xw8pF&@s@#LKUJ)sV5JP%u zTC$-Plc$crAxg%vj3dl&%rNQ;45DO=_sF73i!_&|p}-+Z#<7eE&1C767?&0=BXK=9 z5m-dYSeEPf=2(Vg_-C)Q-n|XULf38rizpfEJ@wNjM9War_RR$jQTgEn(vr3~5Gi>n z7GM(20@06%l5yVCW|Hsc?d~CDAxg%0k1cauOSarbU=Sr^Sg!G!*GHP+m{yC~;$l%R zqGUWvJrf>nmzYJOLO;s{4pB0Wg9kBtvpQL_DHT-ai6` zEJVrtdCNln3=e^u_%+_@91Cx?lKL7^GM439mr1>(Z9i$3+N^GPJC=k;l#FLB)-aCs zY6RzGKf$7IM9KW`8K1)kw5Wk43?{7$s zi^x!?ry3Gc;ElLk-31;|GTwXSlIqtfHrkNLo3~^-Q3^P(-5+!3=_FXefRdPmBYGSYm%gIT*H=CbdMD|NpCy9&hG3O!+l*=lY-P=SPeI+is$D9kz zW5VU#@|KB&bUueJy2qTW9CGBc=7;TmDoeOj;-Y)ZxyqYyxqQ12%ZA2!(S9#obdNa~ z`5n2evW`WL%UstaF1p8@tD+fKql`cH$y{$GF1p8@>ti#nLzfH9lDTL_o-Vq_oU0OY zWC>5MJp4-LqWGUKy2qT$2{|&C$AHT(WUe@gi|#S!s%*y9&QRXOHfXJwF1p8@s|s@D zvJ}28Cdp;d3Laf_k2x24FPW>~hB6IguAe0?y2qRgW@o~ccGY8#%=MSVMfaF zWp}#%Mw!cjoGvc9$DE7SZ)C3DWUg3=i|#S!s$s_UuHv%(GS?`Hi|#S!s%gg6@=nrNnQN}ZMfaF<)iUE+exuzI znQO1aMfaF<(cE9wM$(3dTV<{b5*OWL&PCCz%=Pw@HyEs>##KC&xab~pt~zF1uf{s7 zWiI*&aJuLob1s@K$z`1?6Ass6EbCK=i|#S!qIgv18oVv1m(0~l;-Y)Zxo8F=bKTy# z%w+rul(^^~bFR=y)~*9Qs-kP(P$M;=gNOm5q6j9TgFrT$O|r1bF4-gy1(%R45J@wIDhLRO z3W|t;6a^7Q1;yT}HbBKsL_tAOL2O__6tVEX=iIqvb~cgk^S{rNvS;4+oGE9{l)ZPZ z%!-p(d)hR@birWNf_KqH7?~9hiDm0>)~KZxtCe68MrI{Qtos)XvGuQb!6J;z>LIZl z*JhuvY^4hpVPqC2Tecit^Ve_BSgfF65k_Y9l2||YdHOGlHC?a>BeQx-tm156mBm^u zScH*T7=~>*ykp-sTV#7mum~fw`bw;uw7lb%t=)n}7@39P%4X}G?Dw}?tRsR&7@0-S z30kfEN`obzS}dOMBAqZYYk!=oElTC7(D zi!d_FA+Z*YKlrl6`b4k@BeRku)@7UBn35QM`K(|OMrJuB){4uv4YgS9>LU>sVPsY^ zBvyOPxZ}oy7OS6N5k_XYB-Xb-^hFpmayUY;2qUvnB-Y0HkJuu>WWgeg%u1D5!y8Vp z`TRYCMHrctCb7Q1{0BIKk;A72i!d_FEwS=1-hH>l`arMpU=c=UrAw?N-z>&u%2i!d^4gv3hztiuA! z*4u(b7@3tTv2HJGXR~!uum~fwu8~+DZl3VFWvf90B;q2B%(@m5tG$YUXlC<`D+P-% zGHay7IyGS2T+7x_!6J;z8YQs;{+{nytTMqOjLf=DVr@xt!efoTyi~9VBeMb$E3oUG zV;1Xm!6J;z8ZEJ|U)J@c#rj3C2qUxLcD6d4T(#cTUNH@kh>I{XYYZe-&5w<9{KvB8 z5iG*UtbB=e(>p`p2u5v`3l?EyR)NH7d~DS97Hhd+5k_Vq{MmB2{ipS-E!GafB8MMiBjZ;V7-gppZAkXYr)Z=|iU zSVIJhFfyxHV!ha6&H{@yORxwdvq~h^!U!({t&zir1dA{-t5jmeRb6I_Hg5?QVPqCU zt*u;Xr@Gjp&1u0RjLf=0V(p(nd!a@SFK&WFT!fKX7_Mx#>SWxu&0-A@EW*gF3W@c? z>z)%9YqVeyMrKt?tT`u|4YgQv1&c5;3kxS(4nJzv&0(<~7c9catcemUcEQcIxy@d| zB8<$MB(d85_*Z+&)@i{ajLe!WvBo{sc!|Yo-4uzq2qUx5sJ3$D-Mjc+iy2a{8xE!GUdB8<$MC$V-7--PLpVQYn85k_X+BC#H>`{_}O z^{QYIMrL8Sven@?&Izq7)(3(`7@2je#7bP5^oGScE?9(-S+_~7^>1(5VX+#bX6Pb} z%(@*CtCf59Tx;`rEMHrcNm&EG#SuCa`hDW_4 zScH*TizQb1;f8%I);EGh7@2jq#Col=#cYdJrx_A)5k_VqtlQeF?t{fQSgeZ$i!d_l z9*Ol+&g6C$Ymi_OMrJLQSbO3Z+s2e^!6J;zS|+hJv`A=f*(w$+!pN-U606_bYhJZj zw+a?vWEO@iTWxrzuS>L8YXplhGHZpzI{f{flNM{6U=c=Ut&~{p7CmGe9S#Z>VPw`S ziFJF#yH8lQeitml$Sh3XZRMKsY(0cA!w;LGKItNi%t9x$vHEuDm}s%O3l?Ey*8LJI zdq@-8jL0KcgppZmB-Z}yf!A5K3IvNVGHb2GdbDwCn@3F*EW*gF2PD?e!us7UTPp;M zFfwbM#CqlIpr0+)GlE4Jnf0K=YW2rqTTeMGScH*T>m}BA%SIun8|_uQ1rl))MrJ(( zi50PnTP6H%vEl@aFf!|5i8bnU(Q_8-TEQZW%-SHa&YtM^xy70xScH*Tk4UViAKrpM zYm{r5U=c=UJu0!vUP)MDu{H}9VPw{066^X-eKFu0wmuas!pN+R606H)rJF5Q!)0R)^CBi!d_lDT#G#($%{xTT29sFf!|DiFHNo=tPUP zNw5ebv!0Py^DaGZYp~;ArTj0WY!CiSRVCeuU(NAD^{=wBePzVSflpcX=4o%EW*gFmn7DS zN$YIAGE1-sBePzXSPRd6h)J$d8zq887@75o#44V@vczKDCRl`#Ss1)+wUOO*)_*M4 zdch)$%tA%mSnuwbWAnqUf<+jawN+x(-oNz=%hrCuB8<%1Cb1gF-h@SoQ5)Y17GY%8 zc8PW9x)!#$QL8l)aS=vl?SRDcjbR)2cr9C<1dA{-Yp2BW?EPZC#TqDBgppaVNvyrw z*JJu)lxw(P5k_XcF0mF)fBQ#^RVG-3ky%*G*vhr|mfmeF)*QhijLdpdVqJRV$9#)* zw_p)QX1yh`s!~3lWU(F;EW*evIFK!e<0s{!TNt(RvS1NLX6=?(o~hl@I0kFKU=c=U z?U7i`*9^bdV*M&ugppZqORV*yV!pOmQK(P42qUxJfyDBtz?NS&Sgam`MHrd&uEctA z{h2t6vsljx z7GY%8`x5K-jZb+j))^93A}!W7!6J;zIxMkf4_`IWVjUAK!pN*oCDt=DC*@kK#up+H7hz=9XOLL6 zv83A?OmdB$(p#_yBeRZ3tcuRfYFn&A!6J;z!ld73>(PndA*dU+W(yW!WY!lF>$aay z+eW=rf<+ja^`*r6dPBEL%hq#(MHrcNRAM#kebm;McMBF_WY#f>m3IATgfXLB9}5;? zWY$*_>tbI?CyRATum~fwj!UcwKQHTQvFf%*A}+$nEQEDi&9{H#jd~WVtzZ#GW_=^E z>NvhzWU;OgEW*gFZzWd3re)<8>uSLwjLiB@VjXf^9Wj!vV{mQJ)_)VplHs{FOnotFp+NoDK5K~g)S1%8vB z`?N>jHaK`YfM5|uW}RVHBf-KSTt@EG1&c5;>vu?MN5l$j>coS#F=dQk5k}WE)68=W z>9MuoS=M9J@#4ih$Ehv&2V-8rZv%JMY{A=v=CgVW+BE+uX}<69#67C!zZA`XnwmEW z&3`JI|7KQQ{HE(f`Ss7Jn$IDncEmRPHuC(psrfyj`ENxtHC*ioL-VmSPv59&j$q6S zHqDyJ_+4n$B0}rA7PE}JEFJztZB=t^#%!}`u4QU&+W}%+wIV__*I`x^r)t{S?_7w_ z5W&N(r^f0s<~>M_9Mmy2CkoAV6wURRbtzb+FK2!JJ*sBT;3HBA-V!X#bhecCf{oBUp^lx=*%P7ch%@K3(fJ9Q?&%JtbI-;q=digg(^LVm%o> zS&Uy)u6j~0Xuz8L3P8tsuEAT$r zv2KttQb`*#%U)88)mN|>L*?qNYr&IcV9Dib!g^{hS5w9uffA!!P0VrygsmnKq2-EV zmc3jS>n6csj8v{@X4%VSu^tjE#z^I&Qpn|M#(J8Gg5R`l3kFY!B%g22m;<(QH8acg zuCUciFPAN9wP03Lp?TbRBQD!}Q%lC!eZGaM`CFm6g`&9?vy3|4IWwZ0n&;Mx*#_$d zu9c~|K@7yWT1A9LfHsomy?dXTrD|@gXl`R_j*B6^n${*FRC7CK8S$_~@|6=*%@;D} zHSmo*w=*^8#6XOzT|}tn_RON*PuCSWtuVksB(>m0istsF=GigC!)ad;p_)4|%Y!r; z`?h^`e4?uPVnuTYQ}f0c&~SB#V9mC^9K$Tb=O6eeVTQ$eJ%%`%#u&-xJ2K0N&vz~F z)5T&Pi(!(+81i|etHOGy&v#-yWgt*JpSW>zp<1radJgg1Xp2r}x$1S)ZFPzWEmy40 zLNc|-qPu(>EmoXhF-9uaCCoC)Rq@@@Ar>o7uo%N;?-mmJpwCG*ND_M-qms(~{ZdG3 zM~nxTa`@SVl>ew@zl<@jA>AnZrDoZ;3tN{)gqFPvvy3*q?~3c5uvmu#i!oB!FK3n! z$Ntzg;YEwpxD&E~i!mA=`!=7;zCyA^{$sHQ3l?J}TV0t&^-T4aTW{tBijFFz^ zzLHs81glM*r`#56j$koHvenHj7yi+f#vEQ@u^tgD#voPGJ`fUkJ@RIM0-c@-t{o8r zjL{a~3RjFDWvy3%JbeAtauvl$6>xu{? z+lpsa3nb$oZF>Dnk}Osa!6J;zN-$Y!4u=R9VPsYhX2rq|u|_xl^JU9co?sD1*Evf_ z^jZZ$TWgaPMl7mrASsP5`y8n!+iC+TU|PMe|2}QC;C7*hG13T2{R=(LHe>9?dS*h0 zQBq6KSJ2}_3iT$OU|<_PdoybT(x}}VJv06VwV(E3%r=3+AFa39Pot=kSQ0~ZXzM$D znPu;%7OSgZF-EG5e$2A>Q;RiHuoxrR>Mz-9cJCiMEY=-@#Td!f0A^9mQ;q%A_~)N2 z)@H$CjMP)EW|q-Uk9>CXFpITMuoxrR8fcaa|8PIGSZ4%_F%oN#nM3l8>v!Z%w^*I2 z1L0x}`9^#%U4YgJ^^L)-XAaU0->~$gLC+$j^o|JijYMY6!tVx1k6(T40o6AgjHv^) zb%3EO(e#aSk;BA@P~S*mmf;)g`?lOR^v+{!o?WLR*GaRZo`V%7OS^lF-EeLT0^-4 zg2fogR+?lhbJ59XEnD*ii!qWdw^Xi;b6ZzhtS1GFF_NtzlC9(?f`3}9j|Gb{lC7c4 zqW*<{G;MQ}S1eYwN|hQqgy{NStmQco01q{&`%Q*NQ{g6 zmpp6ovaRt*qdEycYw|JXEuyvBf$kSd5Wu4QEyi7)H%g`{`HL%k?=DVGRG#=SU-%6@HGC z3>IC40n0W=%4HUHE&QW(d*If!dI<@AonR40wsj4&!q1VW3Kn5x*0m-}_hGVO{I^)J z2qUvbGAmYK~kcmy&7Mk;~68( zk*GJxbENB7&m0g8Tb7<4(Bnf2^&NSR6kyf{q*1$vpCgTC%r=3+A1z?^%Iic90}(M) zhqgIV9<%Jd(qc^&EXGLQJBC^0y>wBpv{)Mji!qX|e90Egku26{g2fogRspl@b0mvZ ztE-*^#z;LS$SmqeRL?X=vRIc27Goq^W6g5mAMTYF%OhBfkyzu*98%1rIg-ViELe<@ z=1A10vTuxMJ$B!)^xOwMi=draQ1*>NW^Kjq21swUEB#Zw$J%G+*E1#(RYCqkSE1<} zyF?BPBSL*+0<#R?*t&P^BNpph!D5V58%4~bXoG*W#OzBaTC8SQLWGMkQhOCM%NQBu z@2v(17GaDCpzA4NR&)J>Hhqp~v)au4&TRV%;TJgsG(!2a79$ zl|sE10|||uJ%xa3ULHNmSaZ!gfj2N_8*~_LQD(NqN5Xnp1lh8$lFFI&HGW?JW<}re zgVk29U<|EW4bA1I=2Jp*xvtq30VjFD_jXI2b~P4TeSjctClSXW%7*9K#xUO9tVMigze z<>ERPYlL7iMzVF2X^Z^u$%dIdEY^I%VvNL^$t)ij6vqZW?&@f=RS}oR&n2B^_gthdXgdXan)C=ewMeEzH*)^~_$07EHW!+o@YXn%E!?Nboz*-2_ zdlt*KPcoNTX($v$fb1)~U8_cbd5oc%fDr-anh{_JG}ARVf@6y<0^GtZdjzmp=LCx} zQhUv3mOTPktju^er7=eG-dk(1^^jmOMzVEV4Yqz4EXGK-Zm+>sx>y1+MzXb_23urTnm@uc`AR?V*zEXGK-$b)M~7=1bBz?_#X z)@Opn7%2kWC9x<1Sgcqv5Hd!xwU}8kD1Z?GEY<|UVvNMPn^``vC<64ldCemh>jlAL z49~HJW5S<9=TS>o&wS`GB7mjm9Q08CqFx|JfO~3S4aLURk6~F$YhWz{D+*aqZ7r*T z^(9zw7Rwd^mNV-ul&da&S`AqJj9x-}9J`k>%WY*}ZbpEsM9^H0vdgQ070j|n0E^`n zEXGLfwUSx(2w<`13KnA|?_DL?+WGSre_5-!!ySG@Z6N1GUsaDrB%kC`}E4D9+fQvDbw>%`-B5$!+BL#~wlC6iCW%m|~HAk=* zBYDdPX4$>PVr>#E#z?jvG0TO2*jp^t0l{L7#CnujZNQ*eH~EIexu7(H~W2k@iGQPK>ej)d-ms!tDpsA#ES$c*+&myE#FOcUFuhhVr3l@2$ z%6hd1){9`h7nZf92G$9%ehkan%B)0`$0*l>JgczJCAKjJ6DAW=TfuB+Oqva|Ucu~8 z^wd!>I~6?-DVWz7Lm}13b6o}VI%BT1Vd^QEHyDGEXX>f1VBS=0MJkxL7-O%W3lz*Q zMNb0-vs=M5R4{uOlW5CxBL(v|W0Gx{#tP;g1=B>qyvrDS{WMiDdl_SIizo#{{#rZ2 zj)_(<|6z>1T+I~B`;4*Ib8`i=PqEcP!F<3Nd%0RFnEi~g*I_FK^C4sGKHplwe8d=g zx!Ne01B$J-3g#eV>~+{q!F;S>E>tj|Fb3hk^!fG*<`84-dA>-&99HynP%xh|#$L}C zE11t1V=q^Xf;qw%d%Jg3FrO>=>7-!3P;7NpFkdppp66Hvb5zOCB?{)4qUTZt^OcgH z%M{FU#a0&u^R=Sqas~4ZW9;pIg@XB(G4`@|RWRQvm@5^`_lm7<3g(2Or@MkV$ryXP zU!`DvQ1rwp7#jKH_!F;Seo`a!Sq)!XBEr<1@ni3xmv;esbB^wn7Ycxp$dlHcP`uVD40eHCSAcaRxlX~hTeyc_a)iJO0R-xs$hHy zhW7qyN7%>HVG4%cnJ!~86-+b6*!|G2V45qKECoYvagpmVTfwwcFgXgQm4X?rVCdcG zvaJycrVV54zM89G+A4akQ84t*blKLm3g$w_*xO>Hf@!Z{MkyG2hi&Z$kIgr(Q!pJA zOhCb0%ozI|a1=EEwqiuQ$6%4&ww|2xx8|HcibA^(h2@0mGf+s!%XJ zl>AgGn4XNWm%U2C&^vx*TN4#bZ$-}}1=EKy_SiC6!O%N=Ye(4UnNt)@KLs;Y!Sq)! z(-aK7>sM}z8x_pejIr0xbOkd|u{A@%(0jLJTQ@0~!3t)kf=N_t%~CM*PF^|o&Q>r< zjIqyYZ&ol)Mb8`sL+{#^%QaWQxEN#i=XnYyg)#PazeT~MGRB_g`3i=_O`f3!DK3!r3!}LH!J(bG6j>R=vl5{vKeD^ z9`!~AGfu&5QZVBgWA8hUE0{tB^Mr!Ao-uYG+pJ(FD0-e$FhvUHDFsu^7<=3}s9;JM zWB0MA6-+5(>^}dDf+%oN7h+v2!_nX2gdTER?HFyAPc8x_pA3T8TE>}5Zq zU}h+o&lSu~3g!z1Gm|m)vVW;yW--Rzrr#-;*@~X;70k^_el{qWISS?x1v6L4&j|%H zPr;m2Ft;d}XBEtR#@OrUIR$eoW9;qqyn?w+!MvbgZdYu*s9+W-dR|g63mIdNbuTNJ zI~2?-3g%A5)~gC;k%GBh!Q90ddmV03FpCw;Rt0l6W9(z@0tK@~$rDmoAY<%(`7H&rUcu~AFb^sD z*{xt6R`l#qFdG;$N-N)WhFpnyF9#$}qF~;5&KPZ@u3g$-zvq{1HWXEJ- zv7|lDnDO+lbafo4X{p)n>Q)`jEO(Ae*REr9xjWh8 z3S_$cZjalQ;mkFyg-?ZAw>P<(G>;=I#haNP@Mk%)TskJ%?H?L&dL15@--#N~%_n<@ zX9Tj`=`L?}mJV}`a5=NH+};f2WLUO4)0NEsxcpf%F2|khvMNO9>M}07s#s5SWMp`A z9T`qnIBkw(hfl8>SEkdIkri-fI5S-izbJvOA=#Z?Gnbl~%qfSC_dxt>SA$K~>c&XY2i=1y{DB0a=cEpdv&pXKifFCzcZv*gTlXW3#$ zR;DAv4~gM-{#<{SD?Q*C?#NB|CJVpT8&j6)j+Bz^@%YgNTnJO}kR*q5sBXrQo$U68 z%Gf82QnIrMAJz?IW;p}H9YZCfB0sVN31L!pRu-HHEzDIQ0vzxrf7r-AsIwO5<0Yp*t0XiunFd$q~B_G*)b_8v8BuQplNE|Q)8fKjy= zR57%MbX_Ig-o#3x)bo6qUMC_j1tnKj7LC`TZfF8v)SH!sC~5D77T-+948Wb9ovs%= zT)I0WT)N(Mgcf8Zluv<%J+vD87^PGGDcv0ALTk{A*IoXx&rO`niXF~Fbk2Ry5H0=2tnL}w-W>tE1N+tL|yMzQcwTG{A z32Ul84=hcui7dt&s|F;E>6mT*Gs?_kIJcAZnK}GNq$4E--8(BckmmMdGMH=mKZYd; zLcLouqmZj@@9?zYE}Bt>aZm~Fr3i|Nx5s^rgQwsBOIE8@a(-D>=>KEZtF>l$IhUNQ zWnvW(TKNWuLyT?ox4g z0f8x?HER^BA&!3bxZrRmI}yiuf$h!4;!V#5CUXAa?ks1Tz7WMo;K)c7X~x_Ed8W0V z1M{{_SGoiJ)EH$`J>Dd&!f6T_@FBRMA_Uiu$pI}eip5>1PE z%=xn%eled85e726S?(0f2T=>dfm5pzTvrT_VDn z7#^3iGpHk(2p{FnoUZ6irEh7-Dal@HCDE1^fGSrXQLCl;1IdmoM;J=D1gr?0XeA1q zGQ*zW8eyenrMWWG9Uk&qEW1!tD~XDQ#kj3_yn#dI5-ia!QmJ?+hdka`zmUHPhmpii z1Qs!~l;o)1EZgEwO3QNigfmOx;aESq5Y}APn9A{bvW?l8L`(-GJ6*4O(b`gaipT5o ziAAcEfS${}G8~BpOLR=1H&X;3iJ6n`$+qpMn6-o+sC%h|PID(GV@+3W0i53SYV4r@ zyE3w|*^=!K&_AwB2aVY&ZuA{&)w!hJ%8icc6v7DsYD5_;c?u=}2zF*V{AtPA={_B* zI)^_U&Fyq#(uSEM8C}kejYqeyys)G)xiGJ&beuD;arGF(~1 zz37tZjtmqa6P9>q#D|@jWDYV8jF>ryiR`|iXb-j{V9*33oO(^L=(R(<=(@}n0*?!8 zH(dg2uHl$cqc3D;1$YI{NLj8g*Eu2G;l#LPEWJdG7Trz{zxvLa9=t_Drq79iRO|=@ zuo5>qYK8+o9Pqi(pf;&98%~IgOnu`-3NSVlS9Nk>c`(1SM{+;Cf{l;KL8{ykVP>$R zw5nVYC*@THv+(APs`5}mc&W2$Of~qN(xR&3>e7PcIHVw{YV6oxc}Tw8B?Z-__^Zmt z<|!H0&4eiNPs%HEj?XJB36bZp-Q-|?QC@joWnpRfbpQCg0wrI*!pXs+uqpn^yvkrw zQEC2!5NpG#g5^_mSz55DELfhAR~(d^rk`uFED&uKDz*v~ngR{piNW%syeY29mBEq< z6e_I7oWg=&shr}dsvI9IsVvM#{tHlDB_+Y4kRmwCr<7He`hyjux1W~WBiWIS0Rw{) zrUtI$VcE1Bg<&?!rEi6W2T**?aCsv2&ut0@yT@v1Q;z5}R^sjx6@NpYuUV=I7G zs&4FPT%)>z1**a6EKtopW8q|PsUd4Ml}0zllz_ui@H(u+Q`j6pp0D93^Qz@TgIPD*Yd|0$@jE?5&P z#0$efO-BrIv@lTiwZZXn_n{`EUT!p5wdqFnRR$q0q5k&Ddm_;r{$Ft z6a~wB=;J_0$&E1HGqg&K1Re`QNcw1y*&~!=1pg4YF1CgLaOtU`%E+&ME_@vahr?Lq zswq9Tuq=VArluMheBKQ@7+oYJkDOqP-RS&h* zaJ3+*hO0wytqgXT6k;?DQ^|o0YH-nOd&T}EFrOB%vF8EQYqjV3YCI31uCd4YYCI31 zt})?!HJ%4h_|iXBw-NLH0T&3Q`b9W#jt^ps3LVp#7>G-9CZ>2ZGLnWkQWK5+6emJ- zWe^MR!Lb;iMC``!>MJkJcN7$qW3_D39f>K9l=So@Z%Qa#C+lY7VaDT0NlABmhbB@& z0sZP>{@0KG8{E_UTtxrzFZzeFP!Y_pDle>@638ztolqE*Bvc+l&Qpkx*~+kxan>FI zF!2tLu090(14XnOP3gmHwgrJ2Ft#XA14;=4)nm~TSWARt$rvlJoTw&6Ur~f4n!`va z%NR$(%WVTmSU{?h3uPz?<=Fx9SQ3gfyg&+d)mE1t>uACiQuLaKlWNe_J5#j=bc*3j z)xvDfR0GE5Of{esXQ}}!4Jy@?T9c}}T4j1w>+vg`CTUy|qe=}pIUrUK)W1jQ(@7tpweoT+Peav8&oH!)K4k*kYiT@Ri-pARpL zqyD#K;j(Nv;olhkZ^?GU`f}laEb)I!wi}NBHzodW$-?mY6w`_m=ZCf;#`)nxW5@Zi ztSE9`cs-u{m$hUMLg!;e4@dut`|6hd%lff6Qa1meblS72cZUDp zZ2mv#6xsY2d9#AnzfxkwvVWx}G{pTYWme?-H)`ww@n7h%g}nbC7uECi|I^d|KZ6@) zXEp9th1+thkr5_j>NQxiA)O{VNX<~I5Bw9(a`S&ehI;Zp;0F)xk(f(+$c_;-=2))# zPdtvz=UpG%IN|2&#$IAIty2S~#^(7)o~?aqz{(9&BT#Ok8lmBus78X^Dm6j%4rMh< z4Ol%e@T>_Ne(JC^deMH|^>0q2q1FlKFwjsMoHUX%Zu+5eJj zFRg7Fd_FmrCL;eOSC~DIB3hl{yuen6I4^i;r#LT?)iKToZXZ$41Fv@wTb%pvIRBm3 z*+;_jwR2UkUI{U_E5291gdXwz;`;Tm3Gr`yTwL$oy<=i}CG?Ds`tP7}P)EwR`yIl}5%V@wY*g^x6!PuDMauu4=4ldvDb-b?_%q zi%PP;3Yb!w;^#Mkq0e+BMkOZNU&BhWNc_~hP1Bm-hc3!qqL#SL{(?Y~x5ZBzfuYZI z#YFi=+Yj|8*=zWT2kx}Ma{i)_Kio`GNdR%tt4S`p-T0*ctxjJIa7P8UI(>L&q1I>t zUb&1Px(F9e-xmty93kgPD0gO-u}R( z2wY9&Ef5%8WBBs6Lt>GFLwQ5Wu@bm>z;#@tYoq!M*KT#-m^T1Zb(fAa{UA)ctp?^1 zfvc$;ZwidAF?=~%AaSpPQ`@aMa9^GWu03$So(HZqaLpFum+j*I8&ZFSyBxSgfu;T% zuKr$udXf&eRvC{#vg<`{IYL>e`p$m_uL~h+pCA zuN&lU;3f)eb#a{XcN;L*P{71hQ~qWHbBDmyl)sGvqiYPGKOYjG0j|y}9Yy-WwZ|IB zI{~vp;Pn0$eq8+!m@jPl!i}pf$lPj8Yk?oS%yNWjj|5-_h2lc|xeauT1g0_+7e?P= zVD1aWh3KR9eMMj>e{_Xw-&c|G*MOU~R>!o%pK$dT3EbQVG;QH}9Y^}Bo0l90<{N=C z>m?+A6vyj7q-m}3Lzmtjn7@Q6Z&zUY2wZjgC_mW(!wT_>%Ns`DDBueJL0=sBw*d3J zz?u0A8IQUEw+EP0l0J;TA>}21iGEnqF2N67`Z%M`*9dnNFwTF#k-ww^6AZ*< z1~9*@xH1F`Mb7lB5Frk-q34?Xonoj;f5H!Pt(9mI(Uhfv{v*eX89An^u&5wVP*_ox zSD8OPSRR;|pAZ+F3Pbkax|A6Yu)`U<r)eh>_FF`bd=O2w1+Tjtx2BeK}5C~tLinUfzW_KOFwItW5tk#Rh!h1Sn>rO+d!czV2rNUvv4H)|nM zsPv|Daa#%S1-dxd>%_CCs0Q+D%0UBJ&d;K17mLJ(A&Dt?ke1mU0ie2ylqvvEk<&w$ zK;h}$ivVfZoMs0j(mho9dUYE1$;5YX&qi7jT$3L8;^+7A@FyPTAL@2#mkB_W9YAOI z1c(sG@&@3;s4?z@-CEMJC+MguC@f8>D#_0(t;{RZIzh!%NYTBJ&i6q7q>}`419)mD zKrxLYLOP8ob;t<`gJ&V|=xtV-b|vU#C}ac|Qh%@wPfusUXpdyL1fRYpo^tJnI%^ai ziO#EEfiZan0X#EOnjc8Vy@Yw=g4`$aS)E>DdfFeIDkB*sHy(1+sOHh#eW^ z8#q&ds*TcX+tcxs9OsGv6dedq#|}tBu`}p-e0r>&e9g>EJv$6Xh)E!FbJA7c4w7{7 z^UfLYC%@K3fFtc-Hy&e097D!zNa_&xaS+A>v4P?4j2;Q-bh@mTMlw8;%iWQTUtrf~ z%b`snMH_-PutT#c$~f_GuM1Db;h}MI1_Cv-gK!*!Uj29q(w}8kUSm5Z9p~qe?>cfE zZV#WsbA?dV#13Oq^Z+)wm4&@jV4K>pT!;SL3}lR+1E&MXC>T=q40q>-NA6^lQPOBd zTei<^Tk4#os<|BmRW^vBr-dCtkK=irUXK&cVEZwGv=@3>+ChjwUaB&!n@DYCPsM2{ zIC8?3tk#*~9^O8J zoJ5jEL$X&t(GKAsF2ccv(CsC(2ep9lnw=Oym`Gi*^Mu@r)N5b8}(*-Ym6O$1{#r@?BWM?Q57`8Q>HuGG4wpBkES%KIKaS&7M<(} zJ-*_o4~zmv5AQ4k(tS8l$T&>`@y>;#K9kL|$I4)e);QV2$0vvYMuD5Mb!j*l9py=9 zUm%Yr@Um)wnJ$j-hQ=<{0#P&R&`3_!4yLtQJnhKz^6?6e947`9^FR%paT2d}7n$sC zSBcK($MArP5rYuM3sH7cb5zZmdz!5hXV=WZfxIu%>#=efQ?ssKW-j9;U5XPMQ3sx& zmp_R|EL4hF{v;egO7l)LtR~o1vfE)^g41E#8R>2u0)gXh%&ykM4)tXxdE9=SQeru~ z(Y1Tpabnsl2Sb_@Q2P`p`Afs`Qf3V7Wmn|)d$LDhtj)I?Bg_-ri6MT0ZS)` zAA?5y=tMNJKJ(M(@!5VljwRkq(-%MXw4P>KefDpAS|6Tpw`ZL=Q3q#*Vqn3kzI5sz zo{^_T2_@Fj^u!cAV2*PXa!pokk$^QqHZKOT8Z{H^h(w$WhEtcs1m93uS0tJV6eP%2 zeUZQ;I+jiTKsHVccG8hPG;RAIS5CEDlW8RN5PAFeSY6Fo9nV!hg z>gIymP^40y<<$!*Y$Sx-XEIH3V?#`bR68)U(akq8#5ixr#5NT|{cISsYNLeMoM%vP zB$LsG5~FGbk=Bot-b|#6qLat8;n}OtpKb00&{%vN(gvD-o(8H)%za%rFbFFSUJvz! zI_z&@j*{wP55;U83r(ER%fkjGN7$2-v2MaqyE=kul@PV;2n=StHN&x!Qfr5#8qKcH zt!ULps5*93sw)HG+{4|A66@L%#cG=7K2%0ZuV+u!3zLGWF+y__ARa|6)Y5Wrh>t$2 zr_Yh}ISC6dUb~Xy0+N`$kX8gFjU_3@Tx^c;!YqLcX<>`5o3yZ6Y(PH(Z zJ0S^mg^?XoLk~ATiBLJtK)T=QbI^gBXgeLrVj-h;B`9hNP=^7fg)--TrZ$svp@(hu zHG-qcoHzjv6GD$iBQOb3Rn9<)kIqnLIXNcDQAGgfQXV{9W)jwCgTCQ%jw6LsBtV1-;C(E3N{-&fu|hBDO|SF(|m#;O-zVUtbm#Cs|2R0iAl@C z{vVw^MO_`o)WVK~I0n{G8f6mvjuaPfi)4AlrU)(Y$Z)iY!Lfhz-T+rJl|etv z*09{n1YvWFB6t8HkWUEXxQ=0g7Jca76ah$UbCZzeNJ_%oCMnZ9oYvdiF$mGZMDYAg zqa`!RTbgpCsWG#2r?Te;aL^AHyu2tOY%2weLv9>6CX<%_G!>(DGi|}{;gFM+>-V|P zqs4OFY{u568a|wmPZkTnBltK+9Jok*_9Qe!XgLlXQHT|a+i9xBR6P*36ah#J0w`%Am&Qsc1v}AMTD(X@ z97P)TnX&(;?;+@$0o>HshNt%sxY6M7Fj}&bI)qqI@TLc>WIZWjXHV>=n8)MOm`PxS zUVyVRxT9d}(2+!^0a8;^Dnc;j47CY0IITI0Yvmg>L^CbBypZY;OGE6zQl#Y!R8o0n z`kkI!TEb!Fl$4#463Fr4Ab*?#iWM$im640Jq&_KO=ORUEbW(J3hTaLMJ%>}vG&5^Gz*g~TG;4NM^?Hg6pC2`_F{3!9!}gxi}CE^6*h>$ z)ojFc#}N9Iz)O3>Zk9h(nXv1}u0-SL4(1*w9XLhXpuCFW!5qdA4I`r~;b! zrubO99)C;^7P|{DIgE_pxiK37RTovjuu-~`f+IIp*ej3s2ICZVB7b4w6u zr=KgI%sWs|0aTPYd=6u8Wb{k$AAd#?>+tJ3e0fvodp@pj$}v&QEK_5@2@Zm@+kqo? zGgBGYM>N6YO8p2zZbI6v2UkA?APdJqu?uWN?y2MB+)2ECg2tHe8mPJ7)zu~yR#sHv zh=5`){s589qP)tnrR6mLjEoLxs<3_<>deFoskUle>?b`V+(pFsUh!;rw4NEmk4Wc0 zON0=_H4&?e_{2aT4oWO$zddPIT25J+qiQnyEolg82y*2a0$Y-gGi;odr?dULTW=iw_}1mVc&o}pSfrMj*|xr^2r+|l&%)!13W_f3+{LNSHE zi6hY{fWeVDfc5Ul4nU3#|2KU*Or?|m)7P!Wm#y3(-h_bqquC)sJ&BtC0-<~aHbvbT zDPC^n4tkHH*@!8h3iCkQN99XfmgRmz^{cbnif|lS6|!O(5|N zAcpzK=qTv$xs%iVZZRPY;OpaT`j$1Emr+%8L^enZO&5KRny4OeBzy{a8@}R-j6MPLX;en~umSbzbYv&7Gt(eJ!Q4Jhkmo{XIxjiUmqzCB zTA&X2+!!8EQCZNxe<2MefkHgbOWia89{cB7F$moWqBBzZ%1~-*(awB-3qJa2= zcxXcwkxYTTbnIBI7xYD%`m#%aD;XCoK+bU53jUf!B=rG4UXTh)o|j=1mcHi=PR{N@b{TXvA1CDX-k7hRB_PsAC{d8Hz0eT?WvdhJ`>Tdr2iP(pY1 zkN|v5-%vyhqG-|0b|hgT=Y|9oFj)wseEjzkV z_61;n2@!$@MNqoM1F8BQ4|I_Cx6_3fM zK*%IfRBm^wicVb6WZD|xbn*kk38-Oc{T9HoG1(Jv)8Z>GE-s#V$KTJ zMUCs_(?>R{rUyW#kpoNVBrbK45e?JW7_|%z@0^M*#8Z6Q`=#E*yT4vOotJ5pNgof) zTu`bRpinu~c%S2wn?@|USBa%dpj*#mIBWC4QOkn9iZU?&#ZdO>Pdu#B0EzenZ>#j%>4|fS-$yl5p&b3Dy zC8$e%uLU>UMMl4jw!~tve}DYS!6RH4f%v1|xXHna{PIGM)0x5i(sGPUoj^)LtRUA5 zIMV|-04$&%%o)Ja)>BwfIh=<+mkr~=@LU-rSOz-Aa2|DrBAqQI^Sz6HSPs(ZkhuGh zMua_ZXd_>GUI>vlE|^5a76tpkHUnxV0)9B!a9%mDLv6^aQp72}U7_X+#gItt-(UQr zmz?Js^-){;5kJEDD={c=amN|OfhAFolZ-K#rjk)cJ?ljMw+( z?vK7tyPNuH$OODr2Rc1&AKxiOVc7$j6EASYmmt)S)TI%Dx*8F}$vq!=)o?Q^1qgC$ zn%WxkT3RcOq3&b9%~QY2#OdPP=32Ss1vl0DHeF`+LVYDmx-Zu)bF88faf^<`MlNqy zQJ7l=5%z-U#e#IhDZNaEW+JpDlo>25LZ7NY4@)a3&%lBI<%RjlJXfgTUOkk!*)o|j z^b+K5e-P_G96+B}cQI?lDQQwF&f3qV44V1{59sn zv=@TU(ssyu)G|(eenAeg2A?sY8XE}QK6FPgZIn~}B2O%%Ap^S1QGi)}%eETR(K0vhv z_Y&K+JoMi}R%p1vp|xB&Gz=rh7>T(6E~pFYU5m$Jnr^p+OdpD^Wr-Q&KTA^s8ajMAUSKIZWzc5t zG_H&scP74a$?3sE0`*fE6J3>d1n72ZJHfb_nzy0`!7}#WnA#E5i@VM9vGfu>HqLOJ z>@@a2>INabfZQV$Vz(YvX-|gBa4W196%EQ_X>6Y~N^7#lgauc9#cj@Ua?-*hC$rM(No zk!d2<-j+8p5li6KY=;Cim;Q<@Oqv3&G=1^y=TaXv8o=Y@NgvHi$UAt(M<1vPl5!E0 zDVssA)f7(_hiLkSp5|ltj$XX6llmF4Z7cV9jtQSL(V8;nq6R23`;2)Q&GonfuoXg< zZouc^T=UepF{luakF!DbS6h!>dN*RvqS=!bJ*e8LCkFyFIP~rbpCDQXqpUmwqn^Yw zM`I#HrELa12wZN)(~}Bt5T?&;@#O*h_wsjny5MJZRd?*}+n z0ifK;;#nk)C6p^;M}V?Lt(dIq!gt*?lc#}^=O0PB*mxd>yVCO~P|19!n)v1?^>G;7y|Yh$5ru&K>=whZKHu=m8e} z1zMQkQmJWhMKDX_6{zCWgdo4;$s-Np!;Nf+Lf{o@Jn(bBzt%{!=aHMIF0A-?7nHn& zHejiEwEIdH%1~Jx#wn57#COd#JkU^0(rg}J2Gac6>{;XndhdoaaHZ26)9G-Vy+yYW zX1qz@U__IHfS4W7vWLEbHimAR#kot+ZHtQZft#{MPDZc$#B+X}9cuGzYGw9Huyvo) zzeY4Ve;{4&{rZY7hHL=F51ZkZ195K=eVfcZRFA7-7m56e#v_Cj8UktKjP8Tu;goJ& z6ay;3XivuHfgdDOcKm5KIXScGjDQlxjTR6hbXeWcxc zv30Ngg5v5o+~Mhnh`+~p5}Pf2`NNbemJR)K_o^A1HWuko5k-X?rX61K#g`|ZzjNK9 z!+$N+v~?`s+4Z6=`=0#q%st}{th!>8^Da$0#`4{z$JV4jwC7k{?}S+^Zg$|&_s$Wd zr}m-aB@0j0sfxZ~_rZ^bHvCP~Mzj2-!lAx4d%k)m;^tA;?j4_ys%a}(esuIbD=*HN zyK_*)))&Wo{|NH)5zCY2eK6^cb@i_8vZ&{Z#-nDO#H}y2NdNd7dM%mx{`Q%7<@D@y zpw)x5(UdG7cJ9Z+5C8r59}Qb?Ka@IY-9wso56j!#)8+Ib@0pE-S=XJdf7>?X=Y5v{ z{ms0VCvJW0%?sxL@#V7#n@8YS8R&|NNWZ_=;a#8A-?!q<4I{e@yYdaR56jCwzRdUS zCE2U4{k?uK{cN-7 zO-C-mEj@VnGb&=kv1g~v{q+0Q4=p+LL~QQtY1lYrxo1V+c^4*K^V-DDFXi3xN3#q~ zTfp)*J%8+2FLLcQJrhnO-_hx*k(%~4%OB5qy3P9!cPg5a_{*y68s2z6?vbiX`e(Mi zWa5|0Cv2NE@1d*Ru@}M*+$=xTf9I&xuT_p;dU>y9-<(;y8INSM{GEndJKj0t-rt_S zaqyfz8^8Nn)85qauaEfjuZr!HT)%r>e`H?5LEINskM!5eXwvNFL3eaJapmlkiyj(+ zc28w_?jH;N>F;-FRcFVDj7c~D@FDWg@=f0N_l%oZ`NgysZyvq=&~*ixc9P}4-g@$c z|J&A2-ni>jPM?XCd+CRN~5pIyVfb^uj zI^g8wZMS!SYH{L6zs}uq7<ji-X>{-5Uv!wIX?L-F)RKiW7u4-=U+G;Fhkh5mx}l~WVEOT_ zfxj;)O>8sb-Zr1r>v;EK+%AQ*sECGB9xJ^2pdHrb`#R=-ujh z2*(oO9F3@m$T77pKls_r4O=cfwfK$uoVRP*%`E?}ZTq~%5pQ*z=6`AF{2k-aR&TO= z$94CAuz%&E%>L82U+~$9Ziq7t(PmK*_l>=>^7*KTJ3aJKhmDuafAbT>4VEw8HT0&P zlSlgBsPj(4HkSqv%vQ1dqSikT>v&Q9f*GCOd}`U-}T|E6h6Z+!H)rd`>T^jB>y zPU^7xx?Z!E?v&cEsla=`RAt}f3l7D>EMzN zN7bMH;dt2njph3y_T7J7ojc=%dcO%|Fd@<>7O*e^Q-yK9!|jk@;u95FN=QG+jl_VgKgRidxk!`5629!eD7bY z<5%@ME&35ykH>uD^QEOM?fu*uKB*5bb(Ro5J#0v13~IO!7DC zRr=WL1r1i;qG>O(eE-&s-?}^h^lR?0JDdDDV0mBo3Cr*L?(tW@Yxv-zT@$iC-dNH$ zQ`7ok{EdnjG4}4o<;T{?^q%aVw&u|33{9KC@{>o#jQ+J^&#}kSI=5WXE{m!!|RYaaUDJeDV2^FoKj{gb+FeJ%QtmE*IoM%-ZeWpz`osQRqq<2PUa<$;A$ ze#D%h3EChkBGF&8qV6qERd(Dz^`qv^+a};x5|)44_~oUy?_RRP6_=VeaqPitOd(?vm>gGPv49rU7cnx&Yg60fTqQ?B>k=5s#~|L zu>a9jn; zzkFfuYg>D`p1<^xeY-9_auojjD9ew|D*Joj({~^JdfwmrCgk1ug{FPQ@;WE(S|8D7 z#H*buW_8_tP3t|lxx6*$|6u%>dObS7J@vDpXAh)Jyw|H~V_1I2i6z+=Z3NMBRqov0S zc3p$B)pA(A>w>9YB-VeWQU8AVV?L-yv0(+v&(y2>sNMY1L*3>@pBvEUv3ZCyET7eU zUg^o-7JYR`n;~C%_T3BpZE*fcRK!bn)@uJk?c)<#zFPO`ilg1OVf&2bpY6Nl_8sLb zI{q+v@BYA$qwtY?S>EC3<>Tf)GwhPsj~+W%y5Qsf(9iNS-!^}9Uz#idV5c4aj%C`Y9XGpe9bRswlp}``y(scG?=bw87zPA z$xZu+#QUC;7A4*t6O?PYmu*Q~mK^d}{8 z@aMN!-m=qc18UuM`PA82O}EXu;Rx*3?nrvN-93ERPfb7Haz~e~L*I(K6>Xcy@)y%Q zjdpiEk@nVr)<3LmI0ybShvmyQ#r8c}GU%(r{hJ-X^PZ$vafA=c|6cuae&@BzI=6k| z?12V{4_yj>=tTOL+%vK9#AjC~ojsCsDsb|1_~x}N|7G;z+$VM|eXF8r&$IhFHF^+7 zDY3j$`_&hY+19t|)s9cs*1Hg)MEjZL-#^=-W9pxCUY|upWiys z4?h;-$T^nx7`X7Mv7L6mH0_lK%i^cD`WnwS#*+T+AAXb7Yu(#D+T@Kd+u6GBA{?{F z^0bEgQud!d)Xewm{?DJUyQnwv&+-$qB4S?}`+lD*mKJ^<|J_(2n)U?C<6~w|zxk~S*RmC(R}SgX@`$GW#PX)A)B3GwIpE0nM^bZ_Wo&e5S_0Z2 zD&oKow;ziezvc1QnygxM+%*pUx{~F8O?qtIx2I2R&D(Xq?}Di_F#mjs<&C#CKK|_s zQx-hr+tICdWureauVDG3JJv6H|F*xLZh5-hzExwLr*SOOWu$*W{rcYw{_2<56$>h# zTh*e&IUMK2@@I!O`f1(#Pwu~O-M7u2-2UZI90|qp%&}{K=-z#J)S1K^ceWVt9Q@&L zmOnV4==Jmm{{Ho?yW`_irj11Xq;?_wWzRNj(R=5Go7-hxHTZ?5=ZY~uWch-X#j_9h z>o(=y&5pMV-&^w^P20-y`Cp8Cy~BS}qf@_|`}b4PMaj6w`*PAVB&y%@2`eUU@7VtS zGn_~5!Fz+{ zqv~&8aYNVoW#4Yf@9|RK>1$`_kV)gP`e>~W2%%mx&J{>>i?Uqw8uVDFuWAlzT z-I`mmaD>05Z^-DM(T`Yu!-m@bxnlh_&pj}?&s$4+JhMvEwy=D_nZ4cij5~g8OI)}5 zJ(o5nZ~`Q4F{n=dVHTZZ)x z%U|u>e(vg5PaKI$Jae$Fr}F|Ff5-B>8%&#c*ScR~(~qotd(`MrpQC=RBt5^jKbAK6 z`j~s}d+gNo2igq%4fAuBPd{7QVNad>lJ0x1%^iOAv|BN6WciQ9AI*4m!Rxb+=f8QN zJnAd>!!s;D`1?;^eZKeMW;0K|yx_)O2@&vrmcMj+aQ^gmcSasQbl>J{=d62E)8e|3 z-6w|izkU7h5lfb(Em$$p*Lnv0ljW0U4qI`$QIA=hZ^>ww9PC(TDW-qW7}q2 zzW0``G5eb~M1200x3_|Ni$#Gi4m=v#Rf3p1X zi+XH%^{Fdo%>DYdpC&YjOVYG~SCRg0zx@0`X|j7#apQ<%gMX`=5C36#^Lx+5WaLcF zj_7z@-Q*7A*1&&Q{=iK|1<{d(P51XX*rIsJYpXHd#gU#f@AvNBXx4!l(Ub4ECvL!v zZsfwT=x%OPMWY1&45#3nre zMGh7FD<~p@A}WeMPrUB~ITZnKML|(f!3*#E=K=rkdo#N^nuN0W|9}1q+1dP~g*ol>wI%2C5_u*-PSAYCEkF%ysPkqVs5no5*sBB8u>-Ol2Oiv`|)YiDrLi90E zzhFp9J#{m=xOTSJ=XTE0&7f)yS}zu?>MKK8nX6i-x|813I%nxf*I(^rPM7}p9&e?m z)Hy3n2M4lK6|{k%E)$2Pzuwv!eQ~jz1pD=&w!JR06~}5|rRcz=w8~wfHxI7523Wd= z$mv&W`wTX?z4fJ4$zC6AHkLecT7y$F_E>q2Mb=<)3g z*{lZaMEUR5E#%^;b5%HIxv1C?RKHEChlTqdJ-rr8^hx3Dv>hRrt+z;_#79L zrh1>d3LkDhE+)<@>|E>f9v2TaAIB^404LnhzzgXkt5LM3A>NOU9Jg&%RO>BoEITf_ z_}^-ZU}B>c0(%c*07Ncr}~OAt-MLpd%U&N^S&%qXMT zwv{D%Mvf*=gnO%o4=TJ^DvD^>`nvu|}sx3DfE-kJ8Px zsRmF1rFF+!jjl@lZGvRX&hoLgN!g}m^5zTr)7Py7GW}Wjo~^6O>v1`wR7FHZl1!@I zHJTib!D=mvOQcu5#<)auCww8=Z$ODnaa`hQ0&2I;cTt7q^i<-lU(fgqJapCpb; z5Uuk;Z(qBeI(_QuYKYb6s@AWb0TOZ4>uf2g-CAt8U+=5ckq=>L^fofYuC8`t8qVX^ zIUT_w#N4Tltjo$2UlKUZ7V0f)ke?(tPDXeU7(RebVW1jy&%&bdx@(=jDDFqZ<}Gxf z#^q~_GLVQCd#0;ev$OhIwWm~P(h!**VN2asbGbEfk`bqpfZVJ{F>{DAmp;eG!GrA31KDaxTVmk(oqmHvTyU zt@RwMmqZ5G+oX3Yo1Se&t-Of2m+c1+A~2Or4`#8zSC`o$akf$19|8 z423w_gl;L#8)MIqf9V0El((;;wmyol(k6|q=ABz~Xso}^>2;MTlXwxe2HMJBJvv^U zEA`ISYq!OtGaaR;mL^>teX$`GXSAm$ZK^z;9MG3Oo_x^0F2d-@iQs=x;kCyb*mb6= zHp-AQnsx|x+E?qT1q+&E)mPN&YMo{cm3(pS%zxb&1j+`ZVVy%b2(E@2|1nfrzz8yW zx@}TECs|t^H6jfMp8k~a%)jR;APJrJWm`)p#B27{{YW&6fWYX*%Qu zEp(PwR9Doc>v3%nTW#vc+m0G*8;570HHc@n$53qnde`7CbLknFN~M7ybgR4<<__;y z>W)uKdZJnEXqHSoQqgU}P=m+qoY8}ReRFS6Au=|4AF@&JT&b_)MY-U z9uNE$vE`gTV^&+LZ&pJpgBdSNe`~^~k@$S3 z?#5U%Gd)#bxgiss<6Bwr!Uj0ehL3;Y6RqLWR}Aq8L}y80jgHHnLxy5ikB;dTceS3m zY2+9w)?rbDK5l-ae)sOl# z{wU(Z+8jM)mnoyQVf))UEN-41H4|-;LzB++IeyC@ea&Z^GSPsI4x^1++r)&rFgRDo z+=rn#L84xI%oS};piOzGaW(23Li3!SzV=XGSEYL>fwu~D&KSS~ala*2-s;G?)FA1B zWq^aeL15`|J+&ogw9-{Y-Yjx}Jv?IR13&bU*MagbL5agVUi6MgC#93TOHi=$aI)N{ znzn5YJmT<&K}p|aZZ?>kjq&&;;@1~61Ll-4OPM(?dV%RNlEbtOatpegRj!<#rH!xfPj~}@R1q+LHS5V zMiB=r#etXf=Hta{?6j=R#|u%|^@SvYS9AC-L0O~G)@rmZ^wAbkT)eNN*g}dM1DblY zp}6z@t@4Hzm+}!>T)ZncpYn!x*SNTNUs)EH?nH3~Z7u#5v`o8s(Ko2%_svU5Qi{1{ z*Oz>~a#MZpFtiTlMcb06ZhhDwuAPB}bRjZgH-PVwaqiD|R6l~IigX<)B_Sdm3mVnv zDE!78U4txM3ntvF#Fn)d+Bc}i>B8Caah5jb3Bh3_AM|TOz(;Dr0c}J~R zQ78@d7>Jt~g`_6#s0p0LG(!jIe_FfL2F0b+C=Ps)GZjC)3ad<1OiDozMON;jQK;6v zRGlXPrl|F6ZjPxBsm`tlCRXjSmls~<<2$wLF2`TykgB6%Q`O-uN9DYuR~>B+oLyd# zUr~4LwZ*NTs>Oz%dQkew$ROFT97$XWu~VK_;YtnuCS37`wQ@7Aq>Ojsik70>fh*;k z{-$c8pQt9fOHfv5v>WA}s3uBNJ*c`xHHkZ_rZlFh)#SuhO%+Ntesz#%8oq8@rc~h{ z)JwFyMY9vBc6{BNmlC1%`F{eBNVmP(n)QT&Dn{qN%5^oJq2me zTqM(+o$Ncsyl5`c>4po^Il+A8CSSbTn$tFkR!w3l#IHTuN-N)u#(6y7W#cSp`M5JP zZK6h-fjbk^+!_rv#Qn#7T(Om75-!?-YGD<+0oS&wP&Mrp=Z&UA?ZUQr(jihIkCr;C z1*=de(8?tJZm0yQ&^@@K4^i&Jm0JD%xaQ%y9@h(TeE`>LTpz-<1=lBWU5YDO_4^48O2-C+(}W;Bv~OPxEB>d zccO_^8C6!PFx-2$M;tkV9mzC#WKOa0v#Po2R9u znwzUqMw**_DVgTxOH<6|mj79s%TkhaT0VWc9nhBF513oNG;iNT%*|agzcjbJ`X%vB z{{VKy-1393i?!v&^ta3{FEja2jJf6KQ4S~(*ftC>x4d0mz6}4(EqU>aw!)>@(yq%> z)^>->o2_Yw$2bz}J~y`%sy2nFhX`@L zlJBm?c@f{Kin*old1k*GPT2jzzpHXc{2Bt8#?9e{gm{V^ZgRVXju>cMpruK&Sx3$A2Cw&Hp_ zuG?^hRZ?EWl`Icog`(440(E+lc8|PEKo^Dm1n^Ujt8gPMkGP}!G%&3nS?q1dq7VL0 z8PVwrq~b`#Mc}(>ccfVh@rz*;rK29<(zq0XF-pH4@k$S*(FJKFAdT4KIF6*I6U<%k z=>vpFhoCBw?!%=ckcN)PRYnJ;eU_rM7!$Rz&K$(b4$%~pm=9`MC2i0YO;2RJkV~Ku zvx8l$@l9$#1WKE|+QO0YyQXXH&m4tKyenLoeCxj$uBqTw@ z4Ug97O2-=fMEe(a)XvE>iBVL~LyA>;2`zhR`XHi!DVt>G+GGFPP*FF7QWPTU!Jv_- z2jbTjQP0!5PyffWB995930_PtP?e|$OFazu1t4iyV z%Uo4>3|&)!8!`P=TQ~67J5g>K3aK>YF6B&j3HTIC@YrxO{uVM7cO=utnAQ*7E_Yq{ zs}p{7P^iFl*6tEMiGDY2*>*w1fttYXs;xo%Zkk)j(+~ZTt)nD2p9YVk#rx9 zzd#z=8@Q`7w`?;n_@<`;-ud>N6whIDz?vr~o0~mA6+5O^lij?_$ zJppIsNOwA8mg#h6p1woqsG309rmw~zs_+kSHa-pE2Jo<^n2kp!#UsfpKY|ciis1$> zwWg#pmu1Fh2%XcCLq4kyE^N!Y=A}zg<|9SKN?i0uZ{LFybseHwTRsOa)4a5Ot{DQU zG>`eA%cAiJfM-hHsrX?4w0$$Vxt5l{%YS;v{QH~cMPFgE)S5D*%N3_mHHi5$OUo;w zASf9G#Dxr?b-7|O@?c8eWNCSa@>`7T^rW1?P%Eg&LEr>dIVqDVFUiJd=x@NE?FF4} z5%^@n-v&CeZ3W6kcpKpdS>dWDo6>h6hB{AxNRx%ETmCTn|G4squd^8pX5=p|%V~GW z9#Fo+qI||KPvsQ+U5*`>e5aJ3KTYvp2KF?vaSKh{*Fxqn-Yi@Wdm?mXOm z%Xf{q`-bnXz};7Tw;XpOwWqYZUAPmue_x~hrrpur+#<#h-2KX2uEE{yd`B)E<$yFi zbdtReC?mr9<2pK|i)l5XK6*61{SrX6mHH~VU!huSeI$Zsf-*XZY+#|mpyVsGpDP~@ zhqDw9c~i!=W|$d}fcVIn7@$uu8I6tteEP>RX?*5|DfCHbja`bhAZ-{A1e1}IfQe@s z8&X534d@FE9?EYInw|!!Kj*5fkqW^BL<%SdQ3UuWz2QV9CCx`bB@Z0vyAN2r&)*I> z6(Q!(C^__DH|E%jl0q6`O$oq}r?u2XRxhifUW`MA!+^+H@-xL$`V(we^kS2zmu zU%{1JwRdp!;QBYNm*CnSdfS9+XIwG%n?DTKOL5J_bsnxcxL%E`4cGbj@56N=uFbe! ziR(ICDZK}AMGKx!ooNZK-{Oi9`}{b_CNfR=rZzzb=^}-bF494|NPmmJ#F?}thUFpd67jdVqk0y1$=cl@?JiZj8>!u8 zYIh_PArC4y+4V*EIg~D{ZN*;p%So-q`sGJH!C);99^ zj_Q)f3e>)+9z^@1y97neBiV!*A$g=xGilJt_yrs~@+dkJkx7zXm;;&of7$;O82ABt zVE<>feIQL0`apMLHbmH4nhl}51kK8JQa;1qUowrXtcbfu-U(frsdVqY z;DLgrzgMl#TU1%FzUx1?9;7B2eRaspdUqA?bLnUro-wTs!(+SzON*`5AH7!5;2fDc z#8Wm?$;9$|&k%Rnz?W*!rl}1NDXYUaH4W%=gcXP}ct#Lr{H@zQq`Z;!L_WvC^C0TB_7f#TX9YtV$KGHvXbxw@j;x$YFp~sr&Iu^)q{g z#UINc6`L_ZQYFa`P_Za*LD6_G*Y62 zF+uX7N2J^;|KA=W$lE(?_ep>5|l^RSq$VLo8|? zYWc*pIS9(7h(#Jh7*#$g+?r1VMaah=OTD9sZaN5qSbk%Jv? zEW!v*???&=A*uHRMQ8%?xmCIE6*UfeUm1%q!Fle_vB;WHEODrLZYNCvVS-}~042td z!gTC!->`SIKdn<`EW!v*M%AP!$&%sqU)U#kDh;Lvm zpU#-SaaP5XqSbP z!yoGj8H+JNY0+rFuZI)+Ts++$>r)wvF+pjOC-1MXH%GnL#UJa0jtIoT7`_`NDVmj_ zD&T|aE4T(TL5VSJfVg_&ZulJ&?-FeK_yeG!91B(W~&;^;#jI?{+aT^ z7yeiaWGu!6l{A}UCE`rlQjoDC-XH5N8H+Ip#atT=V)#e~KCpMl0o5<(ThF@aAwQoH zG8SWkQa5odwUmGDnDvZ5)?yipF+pkN2Bqa$a?8j5So8%&Iv5j_RvxG^2C@}Y(iy8_ z`uJnf_Z8`2Opu>x1~tYoh|c)cj4pNgV@;K@7!#D1g=0~>FyQxY#;u3^v2K&G7!wq0 zTu`jHJZmrV$NEIZVoXr1@f?fV1*P@zunVU7W1UIrfP*o7=am$pt3+B1$^$4IX;ci^ zA3UAF+93!j6W0zj*29#Q!;3#~aJ>h3!dB4yy6dS5QsdzJu_p*BVFaJYC57mMva=Ose=EvQ8YLOA0!Ppo`XY6* zw4_iUe!lRaU#bZ-c*VgOlGsSnDmpUpLwgUHUBN^N_$fP%A9;55JQiKi12nsq~~WA`TQ&kD_$>DQrNFZ z8GC$8>Unq3&X(XLewY%YTN54#27sMnt zs~|tuHa>@$V5zUsXrfaAosP!D|JFowDWZZ@0Uk>fRb0mqXDn~{g3onV;e`(IAasfm z4?!o}Orj!H>5b1c<>s0Sa`Fqg;7%%TIh`u#RIT0B(Oo*7(&#icgU)4is?tt$1Ceqz z#R~w(CXTko36e(}BgsaWWy-XUv*qMlY+0FMR^`hQhz6RKlW7_^KF?$=C?ssiYW-kn zex`YxrC{9napMV!r_&DcAlPBaanOTXv5H^DQR}7xFxp{AtDoV<$&)XXwUmR_re@ll zS(uw$V6qjM!*idcW(GR0t+CUVs82u(7Pi4LB3$_JEN%xysM6Mv)xgvU>)$g+QZ7f( z<|hu?uQxMOjR9q8&5qGUP@zacLyehZQ;nG>Tq0re!iAKekR&;a5F6TV>lA`8VvTs% zR7haVNH*4CDP!A&#@pxanv}Mpg(b~6Cf;pDODo-`T&u0AEnrmj#LOvVMU0b$piA&4 z{pG;o3T3PpE9N7JG|OnA{)r|`A|k-ZF^N#TC^rHObrWDm+kjLHcyuUw&q#Vh4M?@! zM?tCSMTbF@M^$8*U|LF>z(W1n2o@SL^jJ8z5iE7DEydF$b#zgT9h)AgczW0WXmuzb z{leIc)xDS~GsA3DQq)5HYaAVp?53t%e9F&d<~>~M(zRTRhwA@grvEjDvexz2iz-I_ z9PrTNy?`V&9!Q;*xqieDKz^&sD;X^6}-!;mET~Mar&pIcGUc zX64^lM+cjPVa(9RolS zCze*#yG%`!R3{t`yfu4VVPQc|7W2v>hU|B`>CW%iGtEvkADwD79J~EC`m@(Ikw| zqGw>h{+tF7H#6oLM zfid4?@1IQb@jv2sCw^|lkVNc`Wo=1Oz}gaQ^X;7$K)`Sz=*zHjzgobQ5z5I)h8c?T zhJtwoW#CKVoUeTpa8S{i$%P(lMdhAD?{#EjfeLoet`lpU)p@E!!?Vw2b#89ikY6%* zO^Ny33G>8C=4nSSM9?=ix+z%(M!yWlrfV(4!=G7~d110OXLEgrv%fvb~Pl2E3S zxhe3GE8%E?!ll4055OfS+GYd_nQ)Kew+0y7-Sn4u%$1plRvVJPwFqkhrsq9`5|8sU z6K$CSCmx^^y$^o-f%#kFNPOYSaR%s#_u?S{espj-5>XCL*UzsT!ZLv=4#u@gmu6Bg z0_NhQ;8K9|0du3oY55Cy^#VuA%=N+Uo}kg0$~zvINfJkmAu};GGjJN0a3sHaV45XP$Qihh z{3Qc-Jur_2;KJqaY2Y>hQ~v;Na74@BEx_C>agp*D4<6ekh8g0-{6X>4;bH{_Y!J*|Z48NVgye)B&_-zA^4}rP;A!Zkq-wt5jlDJ6xUICkZz})lj z(fPdr%wCC$#E*hM!|D1*j?V8nV75tIBz{!h*MM36=+XH-3(QuDi^lI&V6J=Y==`1m zW{bo{mGcdkdIbpFBFhmwM?_*%T zl(H<}Znh#E-h6Sh%GRNY^w{dFip#?hyAil6`p}xYf@`&tEfw zw*WJKgTPTg6OLaBGVTCo(F-B`!r1%!fq6>eBH7bKu-Pp!f@64l`Z@v+0{8evf4brF zSB(7a115E|9~Y@VnhZ>t#6`+qPq0}C%xZ}<;O}tuo*q2jDKR4D@bV-3_aJZ=Z4szQ z^-KN7RT6VFe%Aswc58HgBM@96G12&aiNITdyJ}l>e$>n!1g88&funvgTz$|xa!&&D z(Muux!sttf?Rc#OKRP1S2c?rLF$~0s>mv-mk-+5~g&+BUGl7{WaisUmFT|f51p0Dd zo(;mm-wjyE4G8aVxi6B$LR(8Y+=VUD}lK$2-iB@&fxbrFq@8oO95^tFyBd>R*n#TCi%64(eFiuA4eql zk$49H^S#7HlV1-wCj;@LLrXV|{Kfz?DHInXzmecE3z&5hC*&7?Joo@Gn}cz!>W$>L z3z+wgf+P8T0!-|ixWS>7BSe0k5Y|g#7>H9i{o4b2xR#362C`)oBeKdek8BkCFW@S?gFmnz3BV~Ab2G(&q!RP_Hh8Xt-#z( z9Rv=oykY9&bznY_xJdO84<7%M7-oo5IDd%pXV?qf!jFzf`6E_Cfa&l)!=mPI2r#21 zE?WL3ON`(cK7Z8SW`y9v=?gW-D&Wqe27p78Ux@ylg|ISUu8}xum*Mz54*DIyOx%YX z92&nc^)U~a|43Z4^4=pcf@Apd<|FW7;Qk5V7cPG{0(Z)XXiNCfA?yqMjWGG!4$RvU z7b$<;z~e_?Vn1Sb{(dzKzX8CU8;T3D2R*?i9~f6CE)2g#z+4-O3*krl{D8!W9EO+Q zp9p*cxQ9L#D5|$`@*{nI515Dc`*D%RAMXM4nZ!ksUn1BTJ`udsbGY_K8+s%G_wr`~ zbpkHo^0x`NaR)Hr{Dr_p)4w!eE|9oL`AY$tX~4{vIBMtN^4AOW{{XX2;v%&V>d&77 zX3>|p!J*|Zq`iHPu=|0z?kk3|UWF@fDl+sCFdu&{a2mfb`Vw~tukztXN2KyneGCQ0 z7>WzS&jHM=P+W-qQTu2H=9W-g7=F(Ivpp0S!mkhb9h4Z{@)52+1|!7q4QwxdbVRC; zKMiH(#$GH1JidE`66En5BV z1?Hf{May5z_iE0>HJtox2%NvGY3UH|s8!3OJ&jrAgOPtUbJUm;o8wQ(1-mGIQ-~{rU(7t>aN+f!%U^gdjvpNwzYu$njIeZI>=GAE59R_B^EYu*`Dv?9 z?1IYMRVh7yxh)hIq6d><03HLTQ#0Pb9gja1$Y@W}^efy8Ng5XQdT z0L+FUTx-1|d-WzTUrAh~bZ-PMF5aNrh94a#;m73&u^T?nr*||cZ{kOX$X{!{BHTe> zrX(C4R}IW3p|}wJ8wCCP6_`_Lf*Hp^{KDy96Ed_e$)KFlP2i&GUp6p>5*JA>WQVFH zhSH@YQvKEgx1bIDZfhgIyMcSG4gB70Bfq`C9Xtv@(!ZGQ24w_(bVSp?@xXY4aN+fD zF)+7DTqHSDzqJ7v)5#*;B>Wvt|2&|74~(NnVE$U`AK|>feAWis@4!@GZ4(_K`drLJ zoGS5~D={i9+$ue6&E)h{`$CrK)#JOuLlD$9avN9rtwlau|JPUg4LPn=e&l_ha31Y8 z7?(7X>Qu=#8w>JG<1Ga_4r5MEz9~P;RHP)!U_)SVj>&2&Hc3PuiD(yyu$zi`^&__Z z6YOI`LURhUOY%(x#l~VwVS#drM70k@<(UdhMMf+3KM^cq0|PAu6OC3&jHxCff>&iXFK{SpLc4eZDJcZ#LphG!@xVUPr!h9Q~Ds{YB%F z`Xgr$Z?+>Fd9h+WmmncVwj4>Q zrtD%zwlUjmDagZCGy-5yRKSIW1ttfSXricos$t^LP6Omy@=XrtV~&*=sNpfe;r0Sc zZZ3tBl2QEjTKFVrap5FKk;z_MWXUESvtwsnfr|B`Oj(854qKtE#FlR?Fy=v}3ySf^ zzrc0Sa9Jj^aiXQL$gZUnr-fm4w=v6Va^#P9KtGBLvkR?SO7R-XS_rwKh9D1<1AmN1 z?h05rDBm45oZXaNQe-Kfl7*sUn--Cg1T9!CkHd&EO*Bom6xfTYzSN?1ZjH>P7J$U8 zg~l9(6qXV^LBpY?vp#C2?=K-IY7n(p{(PS+FcPh4~J`*^I?zM@fOHfSPp<8wV=!Nm_(rV^)?a$B|W3ILS`RLk)uv-86*VZY`Ot zoCCTCbZjyVqrtien_($}W~cM&eoHoLoz+=^c@V1L78YQ zVxlD*+dPU~_0%Fy&bLxsX}Z-*3sLi1jF(y=Q?=GL`SjM1xh4}zp*FfxG0j zE8*z*wqiTSPC;4Gy;y9d591xVCD2%EWJHJI1KpTSh84EBz=Ap>Eu}D6K!g>TCc!+b zmJ>Q}2U`^a%LfS7+P8+NDZmO67t+h@!h&2Y%z-jgrT}Azu;QW;doiV8$+cvQnxYzj zjVdU1*-a@bAQTv(VqWC;Bf*%(JL%vNDZG1e9fFzhG5B?YYQ z#f1)I7J3G*6=DTDN;!ix!6vJ)P=pNbPHU50#(I1ooxYS-T>6(6l5>VE#{!p5zBp=s^_R7v>-G# zzsR|>QdC$wW*!b^DJU%Bdi@G&*i|X1bCVL;Ohv_09AxmhXY0c%N@3kpo2vtfVsxTJxsU{nsgn?s6W z$#bCdD?o>X4y*_Yg<6L)qi(InY-nXS<%FaddYHk7(Pp8_fnZNa>JUiP>Wv#n4Q3+@ z3Tz{Ft64@g4_gsB5?FW#q?M0;o#aZWnD8j+=Wu)NjVvqesBR%wvULvQM0gG8+lq^f z$SE|kc&Hzl7#*46M%|V`oe0A2OCkuZ1?Gj{+2Qs_ zfrh|9^LT4M_ZF`sq`i`3vS+g^Y{|F5WLS!gHXAxB*5L-K2hNYFs0j6l(vz`a^8CXj zOQyrjIc&v6EEy5@j~WJxPy&8M#n3Bq;l)mR0E@G7Yb z;gXBMU(`T0Enr7xSp@x{1|fzCeiC(h(vi{fB*Z$YsK5cU z{Pu#1N@1eiahPUi$Wfy(QIkPo=&Po1p(s3-r56;QrUiCr9hj~KiVO$E%+Lar7%DOc zPP7;uIq5k=hqA0Vzw@!Zyc%pQ$*~l&=yO=~1#lM7*m+E$kqruy;is}+*aL+lbUQ&d z7Q?m7D!~ARTyqMD5dp=f$zmMg1Fijhd$x57*Tm%FtdiVZ2MiDl4aPQ*h|xO5Zn1Oz zi9vh8AREIPBN{XNt?c|#V64ndK`~j6B2%uZ2$s;qzB+|>2n^TC5HDF4=5ray))Kg* zAgiM=Ee8p~bO#NT*ng);ok9XJ!pUQ7 zexW2*bfJ#y;vy?MT>@$>&bNj_G3G?0FxfBv&6M+eZCLc46Uo zi;115S?C1X&o4IT*aF!Vn~O}w96MZ94AU@Y6_-Se5(63KT8(+^qB_uXODFX-rE^j| zthG48Y{NsMs6dLsKIEHnpoi3n!g7$1&f9yg3$+M7hycjU4bg6VtZh21LPz; zz4pjMvf{8{FbWsNIGMd?C+f%`OF%v${NaKehy<==VF`RjRwV+p3k0G6C?HjXk3$1B z3Xcg4FG3l}=_LSlRs?7t2*`p9M58SpVvy=;nduM+!$vYeAabaPS6m<{h?mxB+qtVE zaC{(Gj((7_03`DroH#qG1@uDoOl02J#EYVE{uKmk=}|5L!Y$ zA&qZMIoXA_DeRsRs8b-w4u*ggnI@EA9E#U4vYa8oBiI91=PiXM}@c1dZO9^QZv_Mg$g_Xm(2j4vGkbWH1J1_kh|%3bhC1 z8-ok%@hY-2Brr0XC%ggD1=)Z3OQ}jVH4x86fV8Iwb51J9p+SgNs-@Zt%>t$c;<={b zzFzCS^G6HdOgcWS3RQoe55XsXn7|BlLc?8rM zjc3zPXEBPcw$W8r;&ox`j3#$=eYMt*h6gb)6``qP#2(trX)1>*e?$Ft>R)Ah+?hp9TmtGyf~gCRSO>- zHhicSJ|=8-P#*)WPxK_BR$L4lKM z$Ly66LrqLjSuGa|UKH3)2Idx7(3x7r5Q_rPXgHQSqfC>eoN)?lF9VA(>7tb zD+9Fvnrx$hI2j-&VBmbxJS*l*(y9IbUjMf()ez zT@EA|Pi<1%PBN5gjt4kI>@11gkcu?&2`U*bTE3A7_N73JL95M@4R59dy-BXcWX*9D z=jLjOoTx^$$VW>QO^jzlqh%o)jov96U1T&&L&J1(RTDW;k~Keq`d|u3Qj?Jr{xpA0 z5mkO&Ww;a{xki)`G5r^s5pqW1DUurXgc?C%>?PW42iaOTMde|2wiz-vVhS0i-H~5d zP{;)F5RFiBHZ2e}rDS48S{jS+3vf?R;Lc*&5p^paa1-Wji;Je9u<=P&%s=8G2PUOy zYZk>nQWzy zQS_3Amn!9*@`=1_StS|JB$+xz#)a7q0ttl+L)G3<#+nSz&r*fIrJ0*MQ3SJ`e$R>TT>~AgO%zuQMl~dI+rLLWs1JYXoY`B5B*r` zCyG2!-Eh7-1Jqwlk2ADIWXO_(CkRkYs)fFgyah&{I3m76d7~fPk@%#pf}_#nsd76@ zeeT+tV(f0o1?h&?12JVAd89LMxjLk7_4*yx##&6tzU#hTZb`P%B-wRLXaY|beaRVybYJ|D%94}wfw)WK^0vS|dt zkup?LPL>t@R(#T#-~#P0t#Z+RoeuG(XFM&8PoiqFqvLVVI5s{h8Gqu5h1Fy%U``}e z%&6p&3cyasC(%bJ&3H1wf7}BpXB$hhIQP_is41u|s4vhbpgO(2veBd6HJ*B(!|ij` zmEs$54&Yd8Z%4j3TyBJ1TX$YVt-I_3c>nQ9oz=*Wk{aG&%jLj!hlpHP>h^h=M>1f) z!ZIn{7v&6)uUGR>hm8zts~x3ICw8*-%Z0K)w)A7JHWI6+*2}GEi5k;k zQT2rLM2SsP!?X>uF?xwl`bDj}neH+-eRmB4Ev*Vpj7$xgH6*NAHd6J^)JBp`&Q*L; zES~mIOXCNAged9kFmZfhrVn> zY59}EVTM{y9NTp=xaE_wcf3~s2v{@8;N(R2- zLVy2&0wDKnpowKymL}F&u$?EH?qS1E(k08+9+|L|)Xb`($0$TVd_^o)g54uKd`Ogs zy@za6l+#vKU*WFdp5+%IF79MGNwR)MaL6gdh*y|W%8?K$BgjxM38*V_J>cjdT>M;-#7>VdAt~CKt+vKhTe)Q=ijT%&*G}CQk#yM)2FJgqiukpE#$e7H%aE1 z{mDYnh)4<~Hjp7Xs_swlmxYQ>a^Sp>)=}pp3N69L5)0SgYoczmVEWk@v-Dq;ph8Q5 zr8ofi-V+D8 zZiKTP{gO@|G+$u$k1dS++EYg`~ykmYaHaloOf92VH4(oY<%w&&y#mM5#uPCMyLC ziY}OOLJ4wQUT2+~JE|hszB+Wx)L-p_qB0660kk7xX@x6`I#sf9>yWizL~bcDpN(0- z_@qx;#h0O@N6Q$YD0xgwG`v(}$jjrBdZDlq?ZBJBezE1U#Rmu8cv*`)UYs z7FbrT6ybAm0ZUK{DyXr00y1`JgWQ5w(yaN-I&alamWupvp;R2`$iAR_Z~0 zQVYI-TjmjH3d1J3Yp}a2ZLCV#wm>KV+4_1PJS^5Ka@o1^rPod!;8a1&wpwgFmruse z3R<=ie~MN!Px9iHknO9hVrIQX{<#0L8OL+;KU;17*_?^S029eQ2r)<573@JtCV@;A z`QxfHPU<#Xe4-sL3L25QtgfKG+EwRv=CIr24Ke162~q8zkOr;h2y>*Wz!hO_LqhEUlEFNg7&U zfmIYtBTElnnz5%|b}eYy_?8SQ2{Tw6q>49!YBAN+SF3|S$_M!bC>W0(sDqv(B*WSi z*g;c&KpNxm)s?x+%b_$>kz`n*BXWrtclnDc73wss?wKqc>S>W_`IzVJl7Q4TwVhfUKg9s3IB_VH8WD zRO}MFnbw3+zegtBHn9*`%8m!z0yW=MFws(kHD(jj*>qE@L}IdGQt~ST+7||#Q}B1%s1M{ zGi|LXEG(LZhK#K7KHw0Q)_<@(lS#bn2NRbUL=SGC<@UhTyYPT2J}CvcSKS?KE}rGC zDHGda3&)3*3y^H1<{?mbS`gxwalr|j3~YekK-#()var(domGNrnM&jL$;fqWD0Nif zJ0M*A4Ui7jp%ji6(@WGiXwpP&ER;O0l~Xe3C8(4x zuH{^-a8_tmk~}@kOVY|^ENdlGKnVp*ZVcs0{DdRI2uW{#3Is?!fK7Gy$ctq84bNbS zEf$(!Oe@OE!ia$qzXXs;T=ArT$?OJm&ZtIWgmD#}E$8D=sTs3toVHphDz^x7(ENsw zvb$Zt(7VY_l;lI!$l;(KY#H^1%eR~+Cx&JhDk|kEtAru0k9nZQr2lmjfa<0 zSo$M`t;gUptG>M4RmUD1ExZO3(HME$Lu^RcRAgE6q$+Fzg|?9FKLUyEKDS9q%ZNDa zyAT60L&%y=dXkJVq*5}H{l{C8NiV}aI z(G$~j7MboKkpW26X@a65UDo2ab^Yea25H$&-!7&yvP*y#?!hO`c1 z+S(hYes`qER^ZHyc%Be_T89|6)_lrR*r@;t2-_Etj)gHQWV|N@*%~i56Pk4FBXTU7 zAWt^Y1T43UjL^bx2-WD_qOTUF6yH4Hxi(r@O`TwrW!2pE?9$As=)s9$SQ9%248^QE zyYAFdxTl}VpGbhwr8Y>OtW|Yosg0`60G5A|SZM?#&62dAf}Xzn8^Q;0SbiI)ER z7yfg;X)ytqiFqS_(SurBz|$cfdxWc1l9L0mEje;~eeP>$9VhtVX=4GLAa44k7PJ5v zWOem1)5$`j3sU^98hMOdGAoZ?XtII-3^Zh9bIHu|QxN)t{5z5l&uyP4Y!dn0GzZJw zElfVuJ-xZ$%7}m@3LXT87fB}B^vt8g=Ey55#2L@zvrSe%OOhEqRe@Wc zMeppjHmcM=(4rQ8TS~mgMeBKKof5iC@$iIvZ}gC3OCx4Y=xt5W2E^lJs?TJ~2Z*%Lw+OEv$k!ZcSuR&s(jTVgKUy>n)mbAeemWYDoax2r%uO@BQLHsFq2U$hPc&O9 z;mIlq)3+oQ8i8OWZ-;k7f6{|X`P32tzu*VO#UcW%UNB7gYpFf|t-dF>-!i$Nanbkh zqA4@|lIJ_F&b|DFmCL_+xibH`YbRstR;C|tFaPiTo93PQ`r?hrySsGy4cn42eeExQ zypXV`PtmHI9(nX&QtTouCP4y;hEJc{@=33;z2lDDJZf0p`VYpT>tOmV_r5pU{9gOS zwYIoxf1GnKXjd@(vOjD4?rQI>8M15Ylu75!ZN{tVOiw<4*L&v8KcD!|x{pRz51)?h zFk;&g|4qOA^iFM#rLp=1!@;q?$2zeE8q=R`ab0~`?`z{f+;{84Q?FRJ9orr={nw4# z_AkGz^QkL3{W-ALZOccAFYG27e!M^H;;|23y2YImn^E#i*SoP+Cx-Yh9&}{Q^p7&v zF8pKr4_CaJJq@bF^r?N$uOImHWoPeAzWAw4Pri04^3U|7hcCF7oL_pR95b>!3! zA)hTwU$xM*WJ&qf-Jkrk@5RA0H@}GObC`a`T|dm3eY*4fgawCtEzBSJ9BK;tCL|ih zuK9Cp>E@wtZTMx#y*KwvxC~pYF@5^`b3XTc)3W}i1>fBA_q+EzgsmQ!-p_1b7Hd7y z_{y%@>S1@~qO673wjt5bz5li`?XEj>&cfm@n-*NMKLdQ2e&rGOz2{vKvt;RsgVz3i z?JkTi-emeSW^3o2XMbycc}$P*Z|`))Qha^_wjO+zr1$>w$;=0?`sTOYhNPvJ<14pJ z-+bZ8x9!>eb9(YszZu>r99yI)OPSt5i7h(iR?p7MGN$b{j_vZ8qU>P$ss~a=ephqB z=O2#l`o*<3WNpBLp*Z4S<-TX`hpRvR?AxcVUAOGRe^x>dnf}caef#D8eZ_NgrZ4RC zzPI`&Y{SU(!i_H1vXx)VYJaC=@bVe=55V^IOgEkGI`7J9cX!%2aMCBshCL5jH|!&k zXo%VOMa|Nm+t(*uvUBfy<2zydoe4}gcX~T__pkf9+J4*p$y2e*hGRQ_rhmJ@kn(K# zTO-a|>HcKslg)SFGdoQ0yz=4aE_^2K*-7*A-zZtqJRR$kIuifa@4R;F@Q1oA=vn*f z<@JMRZiOB)eQ5H+%ND)tHLY4b{zdnThf>a8w*UP>8xHKu1%IY@ zxy3wcb@ws*EAP#lvZ`Rc2@8p^UumLY&-X0{Q!8J1aNCJ%mVIHWXhN^e^ntOtXVrh) z@4-c9ezs@n>>ps;Rx*8luhSboyK&a0#;fi+&ysQqEWn#gKVjnuUwr-a>?L>EwhWH( zbw)cnu@mvXZ_9s|z4f1e9_#*V@3+^KXa9<=mYBXIF7B(bpZ}7wdWrAJHQo9i!FE$j z-}mC=kN)v)ZZ!SR`r^G;rR~KQNlY&)zy13mLnbBuk$LIXZeyP8jm6EKS^ijCFmUnb z4Rhu;HVjG}y%^&wrhA^~)NT0IQy%VJbne)vyBw*;);>({P;g?`MHgH%_}g<9=AL@j zxK)bsEz_6WT)ptaQG;jS^sw<2_Zw^9#Ai%SApX^RTY4>;4G9hvh0JUFJ` za$~!{?i@U`arVz2RnB~+`)qvfg6VgbmwwS@;}q}G$@cEHaWj5WlrNZm?bxnM^6y`A z^P&AUi_WO-g)Z})6N&#N_r$z;)_*U2@{XnvFRw^{d=0jtV)~drULU-x;){bXqz;bD zSTPrJUdQzOff={$zu?31)5ks5e)L0oFUIEvn7&~^pDS-_JYTXN~JG}z$% zOkZ_m)YaGARr#E4QNOW2XZKryRnI7MqM>pAgw?-xPG9iw;)34FpLJeEnZfkkZ{(eQ z^4z~(>UqzmIp_5~e>jbV zTlI=FwyYHS-_~M=24=q&`C(|#!efP(&-a9($>H!;^Pkfk* z-gF()>(<2o_D0Fl6<^FcW&dffe=rUFnZEDbzt67PQL)XFcDQlS>*>%#ni)+rd@ywJ znH!(kmcMUH>{iRQz59Sa(~q3o*R=iXop%-wTfN}&ho?P>t$vxl_3Tq$c>9qb{3V<7)-#D8b)!L|8!?K+q`JZ-`1MMmiJ zMNI$dn%J`1XO~ZVXYs}Ldr!$4ifzl7{;Yevt>>=KA2%$TKK1p=v^?aW=_lQEB)MQ> zQ;DJ9MX@=3E7l_aa4HfF|1{pe?(1K_-B`NgHe1Iz^D3b~OwYRNoyKd{b(lJ6S;p!U zrqBCMQU1&HKi(QXr1OG3^OBmbxgmATrQm;%=?4~g4xj(n^#{JZ>hRmMO0WGC{7)wS zm6r@#G5@X2^RJtj(SOg$ccSkqW%`68KYV!i;lqD*>alrWUgNsEARngpzG2X>`wIV9 z?=HUR&$$0=f*yXv^uu3W)&1M%`?q(z`mfKPNP8H5#VI|AfBtR5KHTwf+}o?Ky=U5> z3Fo|otw)*ed4Hho>(fitO#NS9+g-0+4m)`}({EpsyT1R1l&tTSC9(hMd&xL_YKQ52 z{?5pqclVB)pDB5wYtjSzPlfz33{5oLbMT3|SAO)(EqATh_fX1|g>$jJBh#&`M_zSG z)`i;|20UB3_^+-7uy0K7nejuv4)M2Nn348v&NclXh5qbe`hyc6>-pB*{i|kY{<7wx zPM6+>S3P(f9Om2-c0{)Y~wwn z|NBnbOPMS3uek22!`SMO=?hM}s`k6zmwkRs&vBnw-@fU7MR}g-&tBWE&(kqq%<8@& z_A&2)!J8E252pX|^-0^O9a!GJ_s+DYhacU5c9eb!rF&q;4L6@waOKtu3>%-B`OUq^ ze=XC;z52t4-@V}d{Nn}LFRWi!I2-*q(>E;ZRkw2Usu{Np{=oQf`9H9o1JGt*Coem1 z`|fkrP5JNE)7KWiWW7&OE@S#{&EI`%|GLK`m+ts^;)u^C9K`1qn7*LrpV#I-{n^V6 z=6==_ZH=fe%xZ(r_Q#Fm&YN-l>z~e>v%28w-@k!h#Pq5y7i~(cn7ex6i7~}}9=maw zqAX^*dBd3Rnl`lzd31T^d%s=z!iU(_kLg=eme2X{$Z2#rEZV_HTT5 z{Nl=_DSxc^b<6BWJlGDG>6R~?m3ZfFhO2SL@JXNcT>yWH>0fMg96r4^v*+ZSdVbuY z-}TF}r90E_98>jT{vC&Zd-?jILv!a&n+$*BG~yqZ_2 z+WXrrudFJ)eeIgtW_(bSdKUUSrjJg%;PbiJ&-L#8>Y#(wU6!K#{>=3I`n-}kC(k#( zvvb>@pIpE29K7R@O#G*>SUP`6Y~NdJuWJ~8DCrjTz4MrU#Q%-w z7984h#@Q9wW6cxZ`}u|pY^%xi*Z;X?=$c_a+bbP&n=fd$@?(6Gh3TLC`rsoy3m zcz1f-W$#vkPv8E;=WWB=w_Ox}rRAizcD!@;?ZX~NyJmXd^Im87+>?+eU?NzH|7eDIjw|mZe zC!N$Q4WBDu`Ze?89w<2R*V*e1ufFuAH-31i*ef{)1_ry+le9++@r+40p?L(P9+&dz6o%nxq*NHD$JH*(|NE+9)e*Wy;*y@Vu6%}I}=Djd%UB8!p zcw%XGb&R5HV)}WnU%hnosMD4fcWYWZw`f=u{O2=>&(|kBx3XpDiq)pnJaa?&-V)3n zF#WTqU*EPd-SpHMr@y`9jQs~jVB0~a_joxr)>CtC{h;3M&d&10qVIi)>9>y_ecMO9 zpBpp(^OP~Y*3kCAu>*Xot>I6 zI`xYzjI)?N>y~~#W&W&xx~yFCOyNfBU1%>%KYYt`&H=Zt8qn*ZKldbjxDRReA4L4) zXSO?Y@5hTebzk}O@|SMSZbARW^!km}S$%h2G;G0&(k?fdt6{I!GyPDnKBdbIFZY{k ze|F{7TPord#qLbwp-VI-Sv^ppN&_Pv(F^{TQ0ioo!vJtD;j;-=8hkK zJ9s7R8`EzsKgah};@$o4dav*L)34tC0qir=+kboAe+@k+Z|Lt`aQ4m%d+fr(d9>9; z!>K)fn$YjmxUzZuw?De-`iTp%9FFOq%>C((_v#N1?RLszvwv_n;o{Wcq_|On>L^tB1@>+5N!Wm6zW41^i5= zzkOr%-nh*Nu3Nct&yWY)y{AFWupQ9nvwNmI@>ylO;e)Flb8k&Ue>8*X7u|pR=^1R3FfYsgU zYrJ?jnE0P@)h1WZTgE@#e9lSpdpn+m9y*zxe*V%&%lq$qcJA|cdWOz9`Ahg|Oy7BN z_5M@WUum3fU;kIxKlh+-{Fv!U4_RhDbpA85UwYGW&Kupnhs;hJLi{(s`&IF_=!Zm|7j(<6|8GY2vOs{@xdE70#o*g^3+veT9#wi!W zUNQYYSJypq(zvI-9dYr#z7tbc-w%6rF7dx=Vcnt5d2>x$57d59w&TLFkPp*$be!{P zX590gM~`yOe5Zr!M981%e{`sSulLop`vzZ?bY#qk`>#@zubBSv+lyPa)UEFK{fyUl zJH{P=Jsgrs{QDj_v*OCfC!C)0-u-)Pm%Kk3b2&^Ok~-(nKUd~`dSFrWV^iX)=40Dy zrtiG0Lq&(%Z~S`7O%Gpj-@~t=fBA{&Q~LJkl$Cwsr|;glG&gqmi_o`p_>LGSUT!;o z&dl1^PP5Kf^4;=(x+qE`(}&03@IcP_&S$3FH?98~Z_%aVE3eNWOmU8$=BcZ#zzYP) z<@i9XH+fLg$l+&BtJXdw+u-)rmsTZveY9gu^2lio&S~x%XH|WfYZ{hIV`cD=%A@Fvf~dckQUhYa;+9Sgf%Wz&2Owe>#z z(Y>Wrx=Y_cYk|)`TSwyc)zjS7)jA@2MWLOwHO~6FI#-QzwkW{yR6#?j&Kf`|P&?iR zr~ZP}d7QM~u}%jEq|O_xmU`SeVoO0H{ZcQM73koA^eOjVJ*gvZb+y~;)R%W5cj!Rm zT(_z5mwNHSuAa7o48Y>h>i}XomRFP``Zu$KYzSvL86YCW}8wH33YszaNq z)ak>LI(?<6udAw#rc%))P+jecn)hgNFRq=bFRpCD?wZoFGMxs*SzBFQR#l--U}_U+ zOXWoqKx1v=@C=B+>x!a8ZL0lhe)~#yX*}*S>I@_FCDDpd?W)F#aDCM%j0t%zy5l2j zHC1|i2&7HczfxbyQUPcAs;Sjc`p00V0*qaQSj1Xi$2@e1zYI(2X@#40c#^uDkH{K6e!&M{R!5l%HQ|#A}|V9uN9t@e-bnVn}U* z6ichz6;b;3h7?OJfGXLrbgM_1e$B)ysn~Has$#dPUw}@zYjg^~W@dV-Zo$)QpE@E- zMHY?HiAJTf>Z{!~&^wt4eMZg0FCOYB12oTXlJ%usDqbGampBUEfaa>poFZZ!nttTS zZPGd?CKuebdW?nitX$FRy-iu*97HZgL`#awt9H7hHoRzY5mpbQr7vN8Gyr~>&X$9W zqq%r%{|&2AT2(>Y7gSd3sls}^-rJ})Jv}Z>RfSH64!X;B6BbWj1qOGc8Tx9`Tj{DI zuR=#`nLd;VMXA-RMbLnHU#*VhMVE>9*lVK<2HMp6n#8a`kNSA(yp_j08Y24x$2L;( zZ7M<|+3+FmnyN@#j$#Hd#Zwo>r)^UnYFv$aQil!DH=a}VPaV`8YwMNqX>v^0xZEFK zpZ1DbIgh@`RNr&(GQYm2i?*YV2FQTxW^!>Y=7rqOS-Kfi&A|j0yhnXPz%zmBD2@MU zI$!II@>C#VWPi1n@syuVwUeWtG?e@pysp4O4ozy)BM0qC0|owT^M$gQvs`sGt}3s` z<k)>_@_!3=3xqBvFqSj~QWhtDPv(xDz!pQ5W17uq~ z^CADR%2iS7q-o#dvLl{a56xFa&P^r%KI6ikThSk~ zwyBKpXlWuRk~i2U9VH&&8&J`Bk{7vfZIUkrE~Rx*m_(G2-$Ht;ozVs!5jmiJyK8l~XvD6;UY}(i zw@0V*>o0*=mvXFLAaa1R9oLEyF>9zVd6|9o>$t5Rhn@y7p^YBhPHHp9V4MP67k=g) zSt%oGgDlQWy)9P8*R4;j#p$T0tqk=G0)nh}`t(0)!vlMI$?v#2?Xo(!Wp#Ree^n-B z4UXeugr-tmEfyf?R}Jhe2xCg4EqyIjuV!)P#R?joiF4Vp03dSK+hnVw&vCVhg}T+~ zu{7?Zc1S$7D65JxjBiukn&{~$?O_|CdfUW=7WvJL(x0`BNtL@AYXBoTYjqfU{R{kLrPAs!;rbtI>XHG*{dlsV=edw-5c!Fi zv4hGnLQ4GBNVqAe;;MjzWt0ZY0hZ@?9p*Gx*Mob2;DH zaIWIJ$vD^X-3*+Y_^uM?d3@)=`3kR)H7t0-DPz{52+|xlmQok%*r+N^_yD{*YS4HqtI^ z8=+=HoPGEe8r;}^3kfA9QO?)nRA|6#f@nyg&4}{Vgdd4dZAK6hHzQKD|HIsOz(-YV z|KBA6LO@6;Qbb%}RTRNM0s@v~lPuYVO|oVaih@f?fGCg<5{m7GCgv?sR8;J}JVnKh zK1&o7dq?rvP*G8=&&IRe3Cn}XU;h@bLPyMIdkXUtA-I%soDly z6>OuPO4V}0{$*djf}j4VvL%^Y{0%ETO#*q_-x%~%dpCvfYZv}uaDpDUzp*q17*3H4 zg%Vw(s54(szn5(x`;#}bQ%B=JS?X}Cr10<_BrP9z!gZ9Srs9f+?ri;WA$}bn(;ue- zhDQjs6Y*cSm;UfAkse_+;)5GXma2_OZ$ehF%Ow_U2huhR#;#yn`0lD=S2b4q%BIEk z1?v>s7X$Ua$UvUz3#L-FTX9t|_KJcb!N(uXa2!%ekb|bFR0>if1=jnZB&~z1kJg5S z2u=8>eDTmJDA1=XzI6MeZ~LQx6x9h^^GK}uS8Q>gycv&1YJU7%6U0LNIxa@SZop`{ z``~|33lh$oi^pt4z@&%|# z)KjUj0Jf%=0c*-(DbEyYx)HJUD7SI9=(-d_0V0njHVfscO6pzv7;|h^Pwlw zd`_mS`Ans1Y_x*is;6R_e=@*U^DoA)+!mUDdJD}Thu0amV(ru>Ve9+ot>iYHo#U>&%>{l6#mQ>dK?CEe#L%wc~`y5Z|@~t zPF~GSH;EJ;##9uZ>qFIirj)`f7!_W@9L=8xu+@By_m&jCzJ=z8D{9TpqO~yG6DxcV zz4iRQ8m3y~^J=Z_{b73Z=c4|q`An(iD;S%vV26Ci81J(Z9H=Y7T`~l84;XJk zZmkw%>0;nysI-77W$qM==1##JV)z@tmKM+r@V6j_)h&y`dh@irta-nsu(211f>R2u zvic)*F`SKdC^0al#GqglgMvB4unJ&H3|Hb;OUs^yen3zm#?Kow2HK$BAHV-D5nslQ zodi67X}UyweSWcPPWjwcYXnx!Vis4To=Ox;rbLtEC|v}c<&+4RQa+i2ZNP5@bBKTz!P187@v9{foZo^7!gwaR z7^l(H&fY$Yz*r>kvl+!MKHyv}i)Z}Q>hNFeT8s~G?!&raj4l%H11XU(m8xyRRly$7 zQ!xYNDu6AK)Z$mHr*5A)T3jJkO{}UpZQl(=Yi9-c(4zRXXR3)zDZf#{*5J2-`J>*H z&B^%r9sUU}i&1rYhYZA7+d@BANgr3$xNV;RaUbc9MDY0}yb-&Fj!#YK5F~0W>#_v@ zF8p`LKf?)nW2vL6u}mqyPr+`)Zw13B+>+U{h3G%xMXS5`Ge_tdrbZ>7_&t=RKz?I3?Nnn5lg z>mxiK`WCx%{;ewrWmwtNCI3Ist^O#A@kd$oiYTL|M1_KF=g|EIEEdrn2Ve7_{3K*C~_YJssurodj_&rgQtBH``>`k zDj0#~&p`#bUAtDdpMuzncn)G8Vs^G4G0Pl>_$b7;;9qq#Q)Pnv6~DS_+izn3?(VaxJ)>@$Xu)@P z+C(kc-F6dn3~xt=TE%WVHspJ%g?})52zMh<_RHQs!)gBLBc44V@<*@qd@FI>UL@PF z`2bwhR%8}ZkKjL9?lGvX$j$i8uCdG-#WPatg1OcTFC*C({}l2R_OuGz|IM$PH*cxk z0c4>GLPvI#we!ej?+&0T1FkRD(usP2#`^zcXVl zi`Lo-Wqo6nwFt^{IN%|~qY#%No{V@FVk+Hi#M2N@M_hq;2IAR>PeD8vaRl*v#3v)B z2Q>vTYd;Aw2j!`VIdJD9eh~3I#8lS%@voGXsZ?!?342CQDP?7yjX+GLtSUui{incs zd)jH9+CwyVRzEG(MI)j%MAHyswF9cmrdgxC$z9epnKqrZ9}?4}s!Y7D5qXDNJz9w` zA{T_p_F}7hqa#?Q{vgC^T|L*0Z!zO*0fx=aK(-NB7JGv>)1w2cAsr?cAZ8tEbZI?- zw2~H6se+_nEAd;wX02G7?Aluc$&`WhbT+X3zurKW72Ci%y@9X?^{m5Uy@5|7ts2Ob zYM_F#feO~;L2vS`RZVs6W{u8GuI)7Ic$Ze!f$6%W%%;uE=`?G_>B+85ydPBCc9RQ~ zPpbKub2uH`%$WYBZZOaW9B%7x$Rc9yJhU)F!#s7-d))$;Dn4xf0DnU)-#Rs{hUB_k3afvtO0P7XV5N?XltXdTR&Dd z)%A<{-Py_=-n83e{c31uOSiYu8*zi0Wky*hCjU8@_x+n+utH9mx^?k|zp+r&fwwHC zZaxyV`5gbrGNM_zWZAg?Oj2dIek!S%xPBt3DqMF;>I_^}E|(N41<}je?jgjnmi=PD zXxW$H|0GK<#B0&N*CpR6Fw4^nNWcT5o_@E z7lNmmVD)KQfO`VWKIb=qVf*pQH2tf!%G-(4E7m<$ukL|eVawS9--%s{B^4H}qU(IZ;J3e1nv-)+&{P-){;`ztIvR zDr;*5a#R#5MT&O?mfp9$*0=Tmt!H^Bt!q|CEqS>?qt?403l>ZNKvDzRUeuez-yZaJ zr{=Z+S;9y7Pm+7sUrLJBgDBJwRdfC#^k^m!it*3ilpF&k#@|d^HCL%L6UN#pnA=Pl zI!M|3Vr&!f+u^?}{%v7etP&nRX3VrYId`d!6iL3?J zEy_mFYO2&rX3FR@+LYKErVjwtAOCcTD=fQ#O)-0~EyQ<=@lc?2l^>Y#Aq`!{8pKBcwh-}9#C3=>5HChN9Pv`b zXCpon@i~akLfoL|pQq=qM_dp16^NH3W*b)^rY`+}f2B)Isd-1i*6F$N_Tc~wP&L|B zievE?{3mI4`@mKiA=RW%DN<+xOYh%7>ks?T7xtlNX-C+IRELe=SW-5ERy|2*64{6( zazt>;Rb5z0JE0(#4w5oPJ9RRbOk`xX{sP%-1~@x7>q-EEKCESEZWac-DQgnm;vT}|OIl`7xP zQm_~F+!(v6H@O$E)lsj*BxOn>L82322LVeRo9ZX2STr7+%J!HN%$cCR@EG@H`W&F- zcL8>10wws7UqeA8rqvKqTM>MiKc(O_)p&m|yfmg{-}}X@-tup{V`V5$xUQ1BfYgLq)+hqJ;`(lb4ws4s4|(Ig&Cn5+tZ2 zBY>rJWR#?0(PDL^%qgaQP>W*|^2gp2%D0D>)I!ykYN2WyebWELj&}Ye+fM3b$PC3O z05(A+a9EwtdIc~xR!^R~?>)}*Tr|U6y5U4k`4VGg#95UyqY0gCq(XQGq!RY49*Zk3E1iU-RAN^+Z z*=dW8@JBzGHEXRuIudg$^F`f`8Ym_x;Ko)Jb~)V-Yu6`VKh8hn}XCM_)peW;Cig2 zZZ=bQAyp!H#`L!ykm4Anct@zjv#fA6zTv>wTx1!6u?gum}^K!ZOE2n zZ6J1WdzPnYT}#_*2V}LA-CSs(xe>Mu6ysu~&(<(d?T5Br`urSsD+l8caCMkpnWODP zPwEge^tM7$tk*M$S+{3($xTL!mE@R8)u>SlhCwQ+RC*Dky(#t`vgODdAJcLrVb#BR zt#5h7ylOl@*}Bzn+Ddtln~_RLd2NEmttdy{u&b z$98vHz!)gjozj=8iS;sb$bgj2g*#d(M+jED;OKCVDU#_ zeVOkB8%|EiZ#X%PTT1E_tkV*$1^MI{jTi_Rd@z3UYX8@_Gx4fE>R6D1-Kys* z{g*NTVWj@97TlMqQ)Z_`BpjN0*GFfVVB`fy!k zN`@(QOIN`-!6_IL@;C)!hBd%c!&Rl&i&23Y!&UC~8y-LJyz^GSKl&eCrqO@xBA=f& z%T9fce`^6*Xth}Ky(~F?s zsq*Xz>tuwROhKv?rEsah`eS9NVO7OIMP^{G!lUY|R2ot@2nDgYwlqQ_-d8E!smWR@ zc(=uUcLsyMldGcdj(o-6j>&W){tDBT?2;9rKe`3?^G7A2&l)E6;<=B8C2sxf$9^CC zIIMNYK34r%H;o&-?#$P`o6=B)tt)s%`;p=a6P5BH^)uX_SzA~15g-!1kZ5B(i6poE zpI0n)vDvosB|HES0y1^=5zi!~{L8kmxtnPj@4|nwHWSx7CG{Atk4OsZEZt)IqSJE8hCOT^pvXQV%Zt!x%XW9=OI25@mR$5 zh@r>zSUm9ok9tbxM8sT2gb`EsZ-a!D?lYxMKq=T7J(sOh8?utXQB@9Bkm!nLD#pLp>jfoQ%b4IXptJ^pCQveBjf{7_wo zWlNJ+qDm-XwX=kKr0UArMOS(<~B1nLh?60I0#ktHx79Q+2WLk_xPjdlf>Xq+t%OEZg=Ns(&*KF!MMu`Zpgt! z$4d3-6#udBo%#IkB9q->xb#Ez01domwUXZ(tcaao^g-4#dJT(aQ zd{!4{yBdpAa96#ff5lS2R+~KhwcTy*arrWvR=&20wlC1dhonDx)DyMcqvul`au6pN z-P-Y`Kez2Z(cien1BROHE>MxBt@+Vw6l&0uk>Bxsf8#nqQcoD>H(V*d5V2#Fa9}7h z{L#1m+=jXw=x@B#&64z~2uFl|he|X^|51f@fQ$p4r2goA`Wc`N=9wUx7C)X(q$>KY z=M$-`wlhJ`BA3GCZuC7Su#<4*L*B_+g_$}NDV5s`@>JU( z0W&oVsWOz4tlf^(7)d4L%GKSGpp1Q5`$1s!MIP?iXlrTtRls!VJnEL{pc|W)AV82j zeMDIp&poCA(`Jac4CKBxA7;hF7@_I4bFi#RPj>_6K_!Y^H5Cg2cv!WRr?Yt!X%KR1 zg`u7UzX@(lEHuEkC(Oe87vxAc2mX1&j*nK7jTxc8KR9 zehqNkU(^o7?`sfaRLInVGX?t8!W35SxGGq_o>Ef_`^X4SAV*CtDwTo^oIL=ncUC7Y zYfE1(qxN9!sPcZ=pwdG$PnH|gOn)J!?)Jt1G5Aly$R3vxElCSD9>7esr};UPEb@8$ zC*za_78zh|txeH!I4tWt+DG4+0XnILxL{DB1WtU-^!c+Z0`rY0e2Q!Ec2-%28b~oQ ziZ*UJ1i*=^ixXkS2J|oi;T=&})xZnk9Gzifz;4##4?p2_nOvwj!of`1yV zQgb>}sdA24!L9|Cg2~|@*m~UCm-9DIP-6PgpKoz@A165L4$ge1(fhNvVNxe`K1bbf zCk;>Pa1QMeD`PR#(c(1jTIU40t3A3XCD@2v;>LWBJJ2QfsRpd}@}q9ws-3l&a;_lr zoj~+UY)`lIM<=EjyVISL{7J71Gwx3NSA6BFdr!aXkMi>yW_5}dq`}c6kU)CONyD^|89#IPp^^NY2~)x={nZ5m>j_8~p3g_vwINg7{Fx82ECW z^D@N8k-3HX*VK%6!9&HpFsQ%#2+FiJ=cpbn7YN3 zy0xKT_vyLnK>^m$2+UW5TBSIsUlUk=9c7gsQ{onmN_7J4eZeLcjF}k{@!hWYwr!)e z#qECvgEvdHII2_{V2ZaLlj%gf6{f4QqgMGwd#!v+iq;254LakfK?nVqfxiEhaC0JV z(~(Q39;mL`pKxwJ-iy35W8CB+fWb2G;rIRDew59NR@{geL*_kvpZ8;S&RqJEOLYXb5)a`Z!dqK}d!3e@rQgFMZyQwxR#ZLZQ zV8$NDK6lB{AWzgKmxA@Q7P@2~wkd6$;Ji(%HsjnVDL&Z69=mrLJ6r6F*uO!0mDrh5 z_nH)JBPyX_tc_jlKZ%Gbc9o*oe-xM@_SS7JVN4jiOTmT+Hsm8|E$l9-!7>14slk$s z6zmmxi#6eL`4;?F$MjJMFy@cN|3jQ6RlsuDesn;7Hgm25XAJ%eTTih=g(`n2YOiF^ zRI1ENtgjI|V`-!;r%F-IE`c?-^Q7=-GgT@LsRM+9){yg_5fbrkuXwkx^JH;VDGF5a zCtqc8RSAjsD@=3ei4Pm?b^CGObmVB!hXJTUb2`G=entyAl5frSF**`6R{twn5j&D` zW(4)iHuZw3c)d7G`iWYtQq+sys_&ZFkyLop3zec?94ZvCdXb3tA&PekdSP)@De8sd zkAy=n67g4(=(ZU?;q_Rd*FmE-7KN7qj!M{4+u8ba+ zYCd#AvbGH=&Wg#}k4WVU%rJjf01~@f&;%I$B6_TUcbGrtZb8iUfz1D-KocK$CY7t& z9Aw#c2>Jr#2S_>V@cHX1Ybwf(m%W%yO|^|-6VhDBQU%L(_+U+|pN=$!fjnP?X{UYx zeh)=_2I8X;uR@%G7#_AZ3^AwX;fUcWOr6ip=41NVVc87f7J;{}%9 zw=K@Pchq`faoJ&pfv;XW_A!1YiBp;*xIDv(gdz2zPrMVEKwu9+31!pVpr;Jg=~k7ZiBTz*rBdYm9sZZ%zbwY(q8z!trK@WT z(_%DJW^KFfHh=Ej#zm5-pzYi{+o&{xDV!4q&i}M-!&+EW(`?)7Myad1F@Lqb zSB7O1qi^qGt8jKcYFZHdfH9$MT0yIWyD+qZf+zmR75tgsaD`aK6aXJBw}U#CzhQcR1ZV7-k{ZBnQdDP{>Qy;~bCwWOUXC*~-_!hv5YIQwE) z<_ZM|dzGXN!vKH;_Oz-s`KuN)gLsrE4GJa7a0LDhddf~27L}r5Q7M+CQic|t4#%p*TF*AB!ON6oSpIi)Yn^3b-6(ZcH>O}%wbj7QvIk|p#wXNyi>e6%k&Mj? zA5~xJ*@Bd&HJT3%?>f*LXH!1W60*z#YgGV1B~}Pbn}Mdr*3? zaixcu{^&M~@!pD@f+9)CqSy?@z^K;VsQXEUA@CfEq8^oyn(=mFR_p7q9e4U>tvJ&& z(p7T;N~{YQNYWzik1xr`CFAo4e*5#!e5n1T zAbch$w=qZxap0m0wJRsTVOl3|W8~-E)!yivj@u+gnWWEkfQ#|9+c;K`8qKF=VDAMv;m zRY=dgq9fray;l&!4uJe77xsG_;8S$=U*3)vm-PNbx3AvUUTm zL{64d?Vm~NDO^91)T_Ael+=5;awk1m`ySV>l1jtKdqh$zk>ZX{vh0GXTs+vTpS^m` z#QV%lb%K&#iT`A+C$5Tu{=Q$t^Q;%gx+nNU3tyB2^|7#8zBxGx6R;>H^9A z(9HeT%pHtAP|pUi(-gl2NU3&QZlB(|Z75QTUlCHP1O_y52Y9nG_SDaJ$Yf0}Lp;Os z|F8;mJl>gKF%uuJlf@`?FFsJgdE=ciZ@lwC@o7j;>cQVL@By4!eED@A?p3Cz&jFn4 zXT19pOlL+a%LQBwa0FE_pDSM|F9~7o#tOJT1Q6 zrzIXJ*m6&jZyDJE1`0{lA%go})8{GXZsc8pgL<)VAmJ10S;$jc0C?}c-TVJHGICI| z5hz2htq%ntONZkyh1`{DLOdVv&4?QjKZTeR=Szq`MEok^U5H;t{4L_Q5JP<0+lYC3 z?q7&;XG_Cv?)oPX??C(};tvt;M*I=tUlH#_oQAf4inu%CU5K*~1E;im!17c&Sw!Q>lE(il$&w^pv_) z!u7Ec{sBzoYp7HTGB~E4kJ;KOZZ;`YiWI9`q`1MPP$^P0#!;~6jlgMF)k>vEago4! z`@3o*e<;_6@2t>Cin@k|hd#7iuoU75GQD z@Sz0>F8ly{-g}jR-j(0fKn7|clhiy0Y95o+GzMxKlhiB*Y8I2!BnD~{SyPi3YEWIn zm!g&^UrMFYkgrl~wMx0o6y>R48D?sfnaVL!elry^Q;RpVe4n%JSy^OZ6Bo(}Nq0N)S+>Y)nv_sb#7jO#RpE z(JB{`^`MTcdN5^pkV}x})>O5u-FT3=VGdl#YPgU~zJ>b;7jh0<$ZEKdOI~rhj~OI| z-xvzwQWkW|M#s%)AT}qPnXum z%faw#>!t-7C*s`BN)J&i&uMqQH(GEeyxAWBZU&|QUQyscC9Y_e!#%tfZI;@_yN8L% zf3*CVqnGN`i+t&|Y`L2mZj@ zP-k}#zp@YeKvb0{17Ajcbh96xq1X)L)Gj>3wX`Ad3^_&8Gpv^Q5zidN^bDs-yumX` z;`=-yi68Os4hTF$S}(&hw0nG`l>VvPb_qN}Wi9mEdI|E~Hu{kmGRh;Iij?w7{)UwD zZ5ohLz9GFtk|k?5SN< zR=Htx=*~q(0?&=>t3;j~Z@F^($M|V(pzo6}Mh~zaM3x80B?i4SdJ#sTEa;sL0wAcv z)8Ty-;&)fXC5XErJ_&IT#7hzPLc9Vo4h_ozXq+0Te+R$&BmNlip@_did^q9;@EnA= z5%H0TZ$=DVtiKB}Zn4&HL7a)0UYif`mxv1x!xPg^Knzby%R$@)Ld->sy75M<99SNW zcsPC+A|8pj2r+M?orrh_V(f0nf#nH^>+pLb;`0zsMtn8mlM!!3JQeYMh$DzOMk)|* zLky!*|1RQF5nllPJPq-Ei23^=#BBdvG)TQ}|xpKM_G-~CfKu?59EaWqEDS3ZFz?Te?m~-@ynh z`30fqh19E(GJG8a$B5Yg)k1o0N;>q~lw^rTN@_9#4;P?YwCDH(ftm~U8a0-I8q43* zFa~NElXd!UY7~>~Ee2{3lhhanY7ALXV;D|E^^BTRKa`iIQfbInDYjCj+-8dMQ?Lv( zMJu9UIcCalrb1?Fl9`%jrskL_N?LJQVy5cN6y-^eY&!mrkGbc@dbYzqZM-eS+R}aS z#nj0t_MaL%|{4iAqYL2P{Q~$*}w8{rlb)e3wIxwZ`FhlFnW7!==jX%%b zP_SZ7(T1+SU;PO+tmUt|&Zxtegr?w=pphjbv!>MG+1lv~E2hk?oMHUq*jr@L%uyLb ztIKC-Irvs=_0Y=l!=IiHZKakDEw90O;zbqgWtNuYTF9g$3@xviQ8(KYCJ@yH&f0pV zAB3ndv_{?{AwM`Il3X}9ETLh*LKqCvF&JiuIBifmUp=7$bCO)N2&{)Q;8>9a!O@1+ zRxGL2Ay^uK3frMV_4di%BFVDsb*3gKx$eW&D7~#lI))Qegx_w~$JUDW$VqZtiz}^+ z3gpDVd6P9IjzQ(A!4H8Zx%vv6zZs0S8*5&q{-0UQqG-8t|nZKmi9DT zn#GPs=qW8_>Qo&PuZO*nySK9X2+kH1WzlbA=xvtuNV8=f1iZbKMVpr7vX8HW z%(7n4IUi(}m2Ol>Aa-pzxD{pL?i9+}h^xWoV6!Z@4m#K@YodV^R~FsCy|v3NI9qIG z9b%SMsdGNWEbE?T%j(~XvIfMJ)!!`ZNu6_lv#hqpBo)`LfvqUZ6Ia$iv#jnq=YeKf zCpBBvp{*#3GnZ304mHcF)Hxq&mi0)pWgXs%vIfPKb+}p9yE^B?&9a6VQ+AvTk7z|% zM+(j>xEkGlgjrTl=X``&)>~`CtmUY-PN^0i)w*RB{+_` za+FYUJ;ShY_a);js(W-Q!IAtQbcm7|L0vf+O3-J|VeA72w$wR$js_&j^)jw(*N1-$ zzdOF|SULcQ2i=UekG9&bmo*w~hv#BzJ9ieXwqH?p&J7lo{(>LbeFT+lWp$iTalS@z zTJHFs*%p<&8Us+l;fiQsg|T2%lDGLFI75umxvpmTkN?1N@!CQ^!#SfJZ?@}qyJuraqo?E^?AwyKpu7!fSFa z&^deKIOhq~CS0j3E?*4>O6(dbUvLJwEY5i*=NUTZJjL18%RZqpH2mr#Pr1vYTCP(G zj-!_$GPJ@_++UwP?IDY5lTIZ#4vi{sly&jL(`H*#-{@3=<0#87REGEW>&w13EUE+P zLLmr_!_y1^n&cXUE9EpI_u6e1)d@P4;5f<}Csb?~#Hd~3e(!RNYK~4NILO86107QL1l!mt1T@LD9aqZeCEqD4;;l`Q;H25~u+Y@Q*Y)}oLJ#2~+Vrqk zsF+PlOFguxzR;-z$I)LQp<-PasD~C+7dp5Ig5xObL_jUe=KkQaG>dA4P9->wvPy)? zjVmSA^UcC{EUK_hB{&W}3=5T^hdVx4aiT?4qf-fvqpVV)vg@Hmb&*abI1Z{Zp`z`j z488BZ{f9;Muudg7^vH&d0uDnV{xPT6_M;{MlH{UkHgv<{^A7klA%{Ka)QyQk)e~14 zJCBaNK+)SdPZFG6xEj`PqNyAI(Q7zS>4t6BXtGdoJ~irN?UZFNB%w0w z27VwI^mDnffj}HkSKsh2fdbF&q; z*`ZRX-odpk{!ci!=I40MrwR`5H5;5OP0ruyoGTS)+w5?fqT&_*<4#?CvPCtfD?kW> z15KF3GIv})}8GWEo~&qGd<%V^Uj6YoMr z*#~y1&KI0#a5eDenQi|~FKb?$RI7waUmj^!ZtDY8jpbY&$GOVnJfs^k5vt-iF939J z9$Agx*z3H&wcAYL%_I6oR@90#5<7gLK;cV9#X6Z<1IhQO) zx5Vn$nS%2Qu134gFx%Cm2kCG!Hck`H0yN2WB(CIl+_kS^LW|{mw&2`{tHJp!lk+g0 z^I35c`CfGmNna7t_$AW5!5UhzM0 z>+Vr{f{XxB=iVwbZ%J*R}* zT2vqCRD$DJ39oXN_2t8dTT~qmL?(jZILbN)&?HwcUh#k8rDtAmQDy2>g5xM_wNM%T zHKFgRQ!T2gI+fr!$~sr5jQ)Cc^iy3ds#Q9b-~bPI=5>g&;poB90>*{?|NFJaeP&VhqY@zqj-*!W5dKi3<_;6$ z)*)}15Cf-8Zz0BoIOz8*W9U*EPWfB_NRo>LjIROq%BxjRZ|N*6n*C~eE>ob9LLDL6i~||eY9=y?-o`2 zgM>&E97kE}g{nKR_@6fY^7$6k8l6gT9A#Z5R7SfVi@tM^MU~ElKZ4*m%DNm-Yo+(W zg}0_yRO@sq!EyA?6+(q!FPgAnX4=11%B~4l3eFx}jo!J!?44c*1B`G5dI$Y(TcunD zs3o!0ixSCQra2#_JTjA93YlKhB?YdTQ-o@2u*EMFl zw(DhG6W6Zmgv#h0w#%Yw*AJNpg5zk{^?+Ktg>08ab*xS$IF5F)70!0uAbdi+;=k<3 z%TJ2$uNwvDK3tXcz-rHI*8;t)8{*n^lTaD$dSUui85Y&uI+fr!+I6!~85+(x*P{AG zrxF~8ZrtK1>(JdJ{$WuWU)2#DM_IQD6%8NT&NmPtxddNA~qS~fY z367(z+l0!{L(aJtRbMwU5d??*HCp|qoMZdzc0iI`E%(<3!C}pf{<_`luW~oQ2)D=e z*ByXb?P7mfRF}F*gJ-|+@4Pp0Cn0i@hcaY;SyZpP0YVTQhYarm)GCYpWl?qMFGTXr zd}mo3h05Mv7S(v2N^l%y-R&rg{bfrnmA$_#swZ?R!Ey8#d&fDx?iD_N z;@TGf4|TdLGk&(>$Vzg#U6$Rr*X*y~^s?^NV(sDmLS>Av)dR1%$)Y-R05TB-$I-3_ z0JZD}cXutSa-B+W95Q@Rs1lcTqfR9_j-{UTsebW_0?C;S)B89D#4-F9Rm~z z)G=tCZMXR`K$2YN;>vb0SbP?NPm@609LqMU#{q4Q>P}GYu&8W1R82y44X*9*-}c9I zYT`Bg3BlQdYcl>BnoJG<6r2?#R>PkJ*s>DTaEq$Vp^8dy9KEwysEm;VVLA*ItY2;KNzA@mY8K z+87%p&6bs?Qwffvtk;ApaanV8D#3AR@9Qm;b)HToIF7R3XrZiobt=Jel(o%K*4B*k zwp!A7Tc;8nM_F$QRTi%3GR^zq?NcqPpLHt1ag3C=gvuBx4^#~tWlr{dxV{mu|`BM*L=eREbNpe-=YK%dP&lTYF3Z@!ruX7CUZh`7vP<@+_>dO|W zo(EML#+jq6QV__KXi2U)Ogh5HpvcaS;>+f7mc5=R_ZnC!IvD$HZlh%*|m&NmjEt z8TfF0TxQNFVONXq1j)0oIXMQS%s5;@Eg9Yne3&;UJHwmf^YWAT&Wa0RK^(XY?Fsq3 zlL9%?CSS`4e8eN3HF;!vCuZTXsBrD{+PZ}~Iezdg#c%y}M>#oUPio(iR?+ig?L-gp z6-z?x5o6`~i%ja~npIKb zRd%(ird7422+&2bqckKdS5PTrpy+CRWv))++A$NEHIiu(<|XW0>aXlb>@C za&j-5AM>d|mS=yRwps|p7%`ij-hT#$&E9Vg*%(ie^0{*(vuY|TSnr&i$=*njt{v92 zqdx62cKXcPs+y$=kBgg0Y(HnS{JMGbmYSlP96Q4YyuL(B8EdNgOFRrI{1qnIl?x-4 z1)(z4ey=Z=mPY?h89!5|79~I`-#Zd8BGomORh-$$59^!UNf}U8HPtz|QreVGfceJ6 zT@ERGGO#+!-U~%emfx#+jP~y%nZ8DnaoIwh4DNfwn^|2g8@`^s)LHW^#JaDdOcqy# z)2sK2ABp5GSt9mTS*MyzF@X6Miz;VU1oCt8Cr$7USHBF+%=HGSnJ{P*D(070)wGC} zJuCqSec>)DHK`ylEKw<5_8q%burl*Uw}_OT(QGlE%Ie`Fl)cI#d*AvP1KQqg3ybRJ z&A?X{bv;X*YrIp!P^-OQDJ@EjWU6L!*{04khY+JG&7qm{YX%`P*k~zSw`>nkCdh}~ zawatM9V?|=hKgC9-M-Qq{#w@l64Ec+S6byZmSpZLo$f;JADQK0?iYQ*zEZ{dr+ zOrh+h;n~@l_VH})+U<+uxo<>9&Gv~Zdw+am_)C$A6SFD`v9CL?dal|M@%wc{&eeAO zR`3739HaUF>w>bqp}^R>`7?8JGEdAc8(UVCR~jfTisbvkc_o1m(>Xc0n(4UDuBeSn zFE5uJG!D?vNP6Wo?2uwUO*{B`>&h#u_JQf#s_Es*^r$&PI)uEM`*1r;HfF~>yy6V| zoAYax-%QuP71IQ{C-^)#8OQ9LpfWUC`&W!}F(6+cx8E@s>G?mcgfdb8$CXf)YQ+B! zlK4Nagl@C{FV)hpI{$}tz%*|kzpYts#jgVPn}Z>M{jWq!{hL|vv|Q!A5hbqWUZ}Wa z*&n&kxYL1gtbP6xBm2_mFEO&Ooc$2D`Z$U%$+RLq> zZLVWmL)%Rw^FRw6|rviw30?NNzv`Q2B}sj=sTO!ZdY!)_zAI_*XO;EBv9eKP#ELd zE~>qd7>e2~noT!bz_F=g3s`X)*aEJ3tD>cja41Ey%;NQ+WmNQ}<8F}teLdZzCC*j% zNQRlx+6$HvdrL^eTg3`kduNr=DptU1iPc_sXdY7q61OVuc4jkZvFE@dKEDQ3**(km zU38#lUI${o&v6R3xw0I|8vN!7q_?)IUXpSV+0 zcJoSN=C?%NykaQwW>unDWoSVS_NoA8kNS!dbn}EzNbmUOJ2$RtjAq1kiXolE@L}4~ z$BZ87wuNCMMi0*%HacVUF*YEQ!!j~Pjs)iLk;8^(N!GN~@^cQ*mcF~|l;tz<3Jd+< zto`Nn1mPJIe!jyQQqvp{V@c-8c(qatUXGTQYkwS`cq#Z_N~X5pP76)5Kinl*F1)k> zc*{;vh&U~*<)p>)!+BusA3Bc0#L?&k{N6z3oxocjQCQ9K%SQHX!1-LqLp7S^_dRg7 zPK)6uTC8Ba@$qln)kAcp^+v)z*=E-I>6vZy0*XolrIRBizOlX%m@gkb#h@6r zv*(-DO3_&s7fQ7b)R8+VaDH)KnZS)2q&ne|(#av8c8E^YF(z|tiMK$g4+cU{aB8DXD2)V$!|Jt9p9v|ubV6@wSvWElG$^6O7cMRZz4`1gvoh`MXuhI+2U42ef)utO z7qZX>>)hMh$sFACiVH)qDmrG+PlBNGEfnZsea+NTrNMqq{BJUlF=O6g!P#nuvAF-8xh+EL5Gtcy3#@5|3C z4o%hu==?g`k-}go-E?A^FIofrNw#0!Mvb19EMfttMln$N0QYFHFk)ed!Rjcg0CbnHsH&Tmzkk7J?-eK zB&9jQ;yfh@qu5?{Oj!%FSVNw@?YV3^GFhtMTa+L4m1sxl)$3!&!+Ddc&JM73e@ys(^xh8%2143rg(FTyCadYuNAitnM~V+a?Q0D!SE`!{&Ma(5e>;vhFV7b$E%6o=_`+r} z1MC>e2EyE9)-Y_rKqo?B$eULRi-}o^mOsxInBdDd<>7H6)1pSgWuXuZU>ImLuB_H! ziO@XQO@kaIvhRs>KyGWeY263a2lroL4tb z8>-i8sGSE!WH=C}n&>lw)mTnkV)^T}dg<4&uY^J{gq~sNBlds_S5h1_OB&|Dh|@;H ze3-^>xE)^<0aJA-=nWJV2Ev76O^pGOX-5r};Fls$s2{-gyojSgulYppCXugGM?ll40hLNti!OmQCvq;d%`YQzV=h31B`i z@mZ7ju?Y!>OO;6IvJsYg$NP%RB9BW*nQ7)9pD;hm%s(Mv{s=QaJ7NAvGe0+B{%A8l zKVg2ZneR)OpJ(QeO_*=lzJi4LK9St>GX0lM4u^bsrUscgNt&KxjuDPV(j*%>R1Hj9 zTt*V!)`WZW#(N87UKVy`$OJpJ?8bypGS-U~8W+pV0XxYtmn&SvFr%HGffctmET!~? zS#fD0Z%Nn}!8}o16v#v7Ns1RU+vu5NO9GgGgOg3FBs~M`>#`CqrOQf!W@fUUSyEhF zYOY^dJ+f@8XPOzD?U~VD&(OCMptEH~a4v9UPE0;gQVd$Pu>=$yfm1FKI_L;kr}?4s z#f4HYBR5sgMO{@U(eP}(qV1^Xa_q~>pA0+cKpA@_CinmYjMZ78*JRPz00%JB(gPxk zE;=y3xDaMfx{2U49c(TexWZ;ey1~Q{txjn0>#FDLO=s`+LhqsEhYOZ66^IAtV!B_$E`zfYqVGD^UCScw$)M3t~MFZ31WVpYPK zg4r(3mYol8r4$~UU{Kh^Xk*6+`%1;@l~p2hlVWlWZBQ#HjsRjM+p#bJFdYPCs4}yy zJyUlixxz83*v_7>YC9GSU|4>(@ev3IRV*%vz}|;>5~U=SY*Q$RE&FETbX z7RF!T1~Qre;sZxPI%ILCc-ZtYCGT&$EQ1d2<-W=ZYMJeWTEIg!HgoNmP@ zFiT1?u{iRA=po3%7vZ9SKBg!KYt+HSGi+QgR_5Y6GCS4GHrj&~U@4ZAlk{FD(s4%3!%T^deA<@I)-* z>Bfo^XfRDP3Bum7KG`fNE!MXR=w`9tbQ1^X_99^~7L9BJtY6-E%_zC6iB#Y#rQyZq zMIkm4f<7_Fu;#K+td^VP+RY>=_2%Yc9hF;BJds|n3=Cp)H!)=SCXOrNJxsXK)mYdC z3Pf`w*s*}yDQ*C94~)YN`U<@80qB5pB}VU+i%=r>G?B*^W7{Kwt|*D1-!WwA(2Ax1 zTCD8^Z;1c{c`_%HxR*(c9UMyE)Rx|6j#1xIU$6*LGWyYMaUT4&3`HX4LZPlSyR6kyTqEy7+B%x(#UhL)kjQ2!tnYWdQq^Rd_M(l9`2 z+jFtNLp@;4xRfd?E-A$1LQkDoSm`CgGPX|X9zLcjToM!;j*{Ri`_zu;jmW}#LRA*T zXs!_GelXKz&-9NE7DC5U(htH$WbO3XSQ>f@xy1{)q@*7b1N2SO(g8kLfw>0&Cmmxp zCA~L5!H`J}#4dnx_F{7(qY1EOiqaq>0#~Wrsp6tTC~gLTM}-BD1`O8AWQz_=Nxv2- zs3|w-xj!sqJ%Gg>RH=C?kRFB{!$rAL-K|Jt@CLj^rQVVPX;>3@PW7FwU@l?~QDKu!a4D3D(m4(R4Eg5CQv zpD0X!aOOy&SqypeGo?7z*Q_kduSZ>UyXlkq4lxSJ<6e~zWf`FS+#p`xtppW@R}$gY zbxOJ$C1Dr`ecmF$rvUue$!90vbHXXn@G`9$+@=+8Z5@7dkzGMoAm&3w;pR>waZUd3s50c4@*u(%5DXo(X&LU z1xiIt&HSoJt;m`><1-b8+A$mTk-3w`&Z#fbdF1jf7=x?yG- zDE(xV5-6L0+I-%LAprE6TDC*>)ZHIcRb?CqTgu-Hto&kZ$fz!3sj4}G(E%7A0|dEo zkM8m?e0pveZ`q2Y4Vb z={uHGRL`A0vtnUhRgJ&A1`nWD)Kt#Qub5Rizha>%+j!EJIf+@JhXD_SD;Ct@Ns`Lx zbHlYY71QTQW4SYn;p{6aD->BAYRDoW*)(fP)0Ac7+=$=i^vE{7Liyw=t0j{oeg{Kl z<3&oG^tn3cS^*0JfpH{(mpPbd9Ige-oK>l=l!miCRM+)@27L4D<{5Jv>%rLoO%an! z*;0McZTj+32JdRpaa;u}XGn8tBTxsJ3CX9jn3}@+uy@H&x|U2ik%Iu`h{79Vm%|AI zg+E!1vap}4L5}kzSi{hSVq_kSU)3PDtCFv1LZAeG*Mv+lw^U4U*LCwC5O6VOComRl zGRvMILrvL)45Q=9{Gvuwg&0j>=M(@OD5;oPRa4GKiloL3C}VDUxr zxwOE|2Fb+IAGsbdFsvlr36YDpdZ|}QD0?Y_2TGpTv^oU20kWAKj%I$!E6Ax^1Zk`) z^64(h(6py-gF{6*w{tP+8OPBM`)ud?_w0p_Qzt;#{Zb%M>!^G6q{b zY9_;UFQuSK?0CvRG+K#)t#}_G8HA#MWZ(sjX^qtaRQiRc>uRMYYQGH5X=#biTPWha zoP2as##&LD`o!B0KRMJKZL*CuIu@L}*pF)cC`!oMaeERIRaoAq2Nyj>T&=x0TGG^G zL8%t5V%{k^n#Q1E8#xWm2M!9=U#(VAu2-K+X09Xhyng8&E}tU>WiT4#!eyB`nh2mq zick%u9BBYd<3-!adxt<%%OcrH;2^TOB4TqQzzX24YSq(gXU-ARk+0~mky2DuULk99 zu4Hl**f>@raB3O#N?8l`0&SAiEr@-Mlyt5J~nUrEb>WI2Nn=|8J0h+I3+1W z=G;I5aS4PO5uP+800D6*g?R#q_YssoE7aVlCAGPgEWJY!K}n5ez#uR=MQ4)7WqnyF zQczNiE1c*&U(jO7Cel5CQO@N?aEja*l|3%C`$qSfdpdHahuF*2sstl|4W(hm5cSIs zcC7R(ZTm!{e8U^pH59uDShpCN_R5Lg(|ut}=)16hYRE;528G163^FByiw#jlW^iK9 z^9D@yQuGOI*KjF>b3#O)6b=D7H#H1Xn+L53%*R1(yz5F9$y6(90X(8Gj;%@I?9wuJ z7iS$h;Yul#A5JN{$q_&a$IQ%!N9E%K8{OKF ze|_&m7k#|`w5G-9+){r>$qGhXPi6knqf_>Hrsf7a#k z$qO4Ng?og?P5U?A>MrnipPKak?+c$;?E6pfseha^9IuB?O(OpVw`Z9-<7b^0zY=o%R`=@{n;mvWejPbwT|DwTqf|s!?Uj0al(7!r;fWfdCXmJpQ>q3 z3;fZ6eOF!e=vO;3a`wF4HaKt%w%TwIG0oMksB_m9C!9CrtD}~WJ^1Evmx8~*FG@XQ z(FHgB;3?d3#S2rXP5lu31^!dtPy9EEr(U=1gBSlXCimQdkIuaRy|I|;UlMrkId3dJ?}m0K z4_cdb`2kbU{u;M1JCOg^*^6%-bJH8cpUzoVxblK?{(zq+@Hq=ctgCdVJMz`_>NU{`&F#!#7TXZ54RoH6z}8_Jj7XUw;0rQwE)Q)YBMW0O!;~<}o2FtNil@+ygyH#_8lV*PRpY?e*F%1LiKx`Qge_I-YqArg?$a+%fL1 zEARaK)z1!Ce&OWBJCD`06#{>E%;u?AZK<7e$q^$i{d~`L8#V25fxp=C@&4zZec8|V zo|(P!m<_vk!M+_p{yUdd|8e}i7wz12&L6LzHvRmMH0^kSFY9(r)z?3-{q($E<30|) ze%bBNe}O-Iew)6Vl0G}F$D?iUUAS{dlcwDx@I7C2+d5_Eg~@%M8@^=YJ&!ixz0U&o zKYHxfOPZoX@3}DNt)Ess_MWC41>2hD+U&XT^!Lvh-nVdP@T*1J*P!1|6ZnDwi{Bi- zdQSS}J?nmaa_QZexNa19;Io-?!o?-iDi%*0Iq{=@%kYkBfxrCwRl}|v@qKts{6Bj<^2ec7IlU%b*6V|I{V%!@^%wXu&y1c~x#3PDs&0R(JoT#8n)ZOe z+vomr;KWN(yY@XTG;q(h5XRm20{?o)jA=hDeEyT${R4Zf%Y1K#rj5k3m*&bnX;Z(P zZHtFIz9s!1SIj9p4&T=lcusik*r>2G!G)_XV(p$q($)YmVXdgJ!ClkXe! zN6$k$ZN@G?Y+{;g{j=l$wt2~v@YBgJcI z)5}{P&-6Wb*rBgKd)SVh$Kas>fq(epop<*tzPDoCn^W7L_2wM#xklixyI#NMl$2G0 zZm&K2#^CEl+=n-M3%uWPk41M*`Nloth2fV@IIkA-4tL$tTu)V}-(NiH*vK1A+NS5n z-}btuoh#CTOYt#=gHWe5*B1x;^OERu>n`_Y6!;g-db98mf7vnN`^eWHV*b5M;60yd+qQcC(RG9Rv>BXR-4?QWOW@ay8FS71eg1iD{imK| zdtaIRCGNlVApc>rpZVp_)sJ;}cJowLR^n9;YTv&Yg0ZroAul(PhQ>uDQU^`)XZThncVc(f!49-#=hiA?A_G1peGv?Pj;TZv7XN zFWb2Cwv8{rUj0kpudko?cKauGUU12C+lSs!*$4Kadr$J;Hn^AP?vLlR898L`y_K7X z7hwlT;D?>lRMG3I@tYcs>Q>(;@^G1^oiFh8y8<)rI{u-hPrn*C>Xq)_9EtUVz<+A^ z`m694J?}pA+3zPD^YMwFz&`gP|7E>?Ie+Y?kDpoO?;q?OS`7PEBJjVTTXT1}aSwiV z%&G78o8Y+|_F<_y1 z9_o4P_P49n{AS%L4Yyzr*mo6bJs<<*b7w{_|Glcqf=@cYMi`tF8v-?`@M8@}jz z_Y)tF$3q$dADVIcJ-=L1@X^i{4fjrNKet}fjy{O|KlNn%{MsM(JeIn>Z^@;X-F?p|>1|hN z+Og=%G*^!STaImW!4an~FYVH_Y{8B!*hzsuO<1dHzzUIQw;4kp+ZqGe6d*hi;R(jfIl|9t;7ObQCk^kyJe_lED{hVu; z@7en8$`|vdXxfrDI?k7%(lZT-RrP980rdu3^Rk0ezx`iRx% zM&$44`|;~%dO!6*yXYB`^ai8PyXbmq*zI)}E^5|e?fJ#~z`K4N@tJYX-DzJvM_KQE z<8#Ljo4x>XKBMorvCTsV5B%0YZvI)rhZ!T_uck421F3%2WotZpXC&kuGLC5e0>%+W z-%{ngb4G{7QAZB1**O08NB6*f82!Fy;s>2ByZ*Z)Lt30zd~ee0kiQF+`_oIEx{N%3 z`_^d_=5+krS9(AAGkV50r*p}Q6O-$$v-es$aeX&Q+RErV+HJPizqoVvQ@& zf9OYDiI3?D=dgKsPc+`veeAI%172&0nGmD*S~m8EUz;C$0c>qGqnjJ= zPd)Ja;TD-^4;*`?{*r<4!;Ic~VgC;2UQT>w{!eEQ7-ARQhOGxEJH~Kowjq8?(Z|7w!73D^H(9Z9>y5AW+cI`$+J`v{7fir7#poZbTfA%FbIoVBbH8_6d5?l! zlJpUy_l=t~WA58N(|xNZJ}|0(>!X;b#1sGK51I$BYCZI5@lzvn?@Qlcf*)q|gFjb& z+o$-AXLmPSz2t;x68g~!MlW$aIsM40ufI9<%Hl_t9QkJj#z97Jx~=JnA2&~3_;}{d zUUmIV&V%!^QV$@ zFQYGP*zkuD-<^qHwb1|a>Q+E*O`6A`CeyXp2t`0!IKjQ>EM9k zA)41YDR|yeYm!bYC@bjSN1y0WWr6%M9r<28qnD@xY2NR<1O}CUT%gxeeIbC? z<0vcC;~A>+>+4oju+QbumzjouX?WD9zHW(@lizG4j`7P^PN8vBc3 zB84=nl{hEmJEo!nA)7m*c@~~xp6?AY@kEc*o-+$Yc-$VE_UfpSU_b>pi*)3NDv=j2 z%+ixt6wW6M`pOq9*f7t!-zAK80Zi=FmmQZ7eFX9<*RR_$hj*&y62vIlsVr#wo0@|0jZAzcmEWGb{*6Xk;sO=nBbT=q`7-&K|U%B6k^H^H=C`dGtpV z;O;EC1p6+yL}R*?+WV&ZT-YS3&)q|NrKRBDcb4jNQ3wd_j#BKk(W5=?;`Hi{$?ozw zP;)(oD_7m&4pH@p#+Y!6k`Xb%PvB8%dK?LFf-3J@0y{meFT1U>GM(#6i0$-G-(ho?Gy@XeP)C=Q>+LE-s}<#!x=N<%=OShk zeRXg^%aPm0hE9imw~dbH^x{R`lbwb7+@H_}mVOEgCx=|0jI0m)3-JuR;M$0YiF1l0 zR9q4fj}knh&acxWSBK%@`gKI2IJ|!JZJn~X^L0s0zZ74GGk>T@H`4yntCETIBVwAE_}e8n($&k_!?_N7muPJe~F zTu-nshQ| zyV9($(3{-_x&?+zz6w27Cwe`C9K0w?pWJfOU8>S6-IW6qpaH&=b*a~(S ze*E?&JT^v}MRme9&{@~u7q?d6PA$q!XVG{xw@mv)q1_Q%wNp{nVvt9ulvN)zI!K`_ zLMm&Vqj-{TZMCSaEv^E!0!SXU0H2v#(B=$`VJi`XEJ+j7XNh7R51|HWJdn7N8F%-!8% z7q(sEennCb6-*X46Q3lN5=SruZ^_cyN;HwhsUL_yR@VdhG!C>sSsk^k+UmI3kkS$Z zGE(`ZG*TX{gB`=5BvJ;_X2s#xh~F#4|3mPbjQ`1sTH?d4h|Z#=thPO)8Jg9Xn)w?^jS`}ydP$_%I}D2bX{j#I{xno)b>>$%wN!`Fv<{&< z5-7Op0y~_Rz2Uy1S;TxKeyNgX{F18T@ZqYWGp;I5BUN!4;R~eJt!F=zzUYsV4I}3k zr*CNS&zf%ypofkg*bW@Ju4SJxFd@$y@SuK-CVBW!U{m23)Tg(nus}*AN7CC>*!`_C z>EcCdj==X%P-%4y*zc=40^bz@RRJT7S3#uS0q;#9H&oX^+N9&J2G9S^Z@moULp25; z6iH`v)MbW9XVsKAboW5cr1!c8x%I!g`;mWYb0!a2*Ferp=2KtcjC&*4Q6GA*$(dYa zT?3gbY2m%G8-J+HnQBy%b3=u5Cer9=$T215}F*Ff_E4`i8f~VMyvalD* z*F^Ebqb7{ratoA}ca(v6Z*TIb>bE;a43}S$6(M`O-Bs$b+bUhSgFf4x%`Ubx*|gk` zTDEHkT{k!`;0X5~nZASi3>eUtGSGWuQtHrqWZdTs(laa|z`I8Zy?D4zg;UnL4<|3) zDE}vZHQpoh;#|C!1HJi+FFA&6Jdxfbe0j%1rEC;3LtML$*JKfRkBLpY4HOfzqgFpI7nIdQS`ag)5KZ zR$+YTApTnKxgmaCj}fB!2*%F}T-?_j7mOeI2Qx4$1&(}y7QYWce;Jth->CQncoa&Z z9{MaWTLg~yX}#x$+Vh~m;FKL&@3|q|Q58;0zSn^J9=LVKIj>;#?TqAi1%@NF>-#Pe zPXhPKx1srwANxvRLh;*-#P5Jx^Id3umm~QtV7?JJvQw@4N=P^b%&8M9ej4r3`g^=g z03SL+wZ{m7;YiVL0plmpsXaylmm#phgm#(yA}DM=@{- zKXOzseu%E6JYbdyT%92ND8_jLm=PyAKfK(o`5^esMgkQ`e4hJoLJpK;6NFATj7KVa zq56Ic%wGaW{Zh;C60R<0Ty1IAg(Db_?5_(jgTvqwflCHvuE3F=Sh+m@vf*EL6ytk8 zFhhUi|114Xg=+$VGJqL>hT}ND+V6XN9k}(t6yvr{Iw(@rva2(|?F8oKKN&2fT{ZX% zx60!~M=(2xL0TVR5(Q3aHw`<;24-Rye(~Tp6PQQT{50&~WnjLn!B5)`&I1#3j%pFS zeaQ|w0Mk1Rj_Nx|V2B?bT6Pr&x*51)f#v=H{Y}-r9<;|2!r*pEI)b$?`SDC(?hrU+ z(`;W#z6W26Fyo>_@k1Kz@e(jQ1TI+nl007t3}c8dR$tXPNb;QkuG0mM3MF3;VB#-w zTqyahz>E{PQ1Vp>4CkmVUosMBs&HEUBL;%+0PZ8^2?F$|s&6mw`%7Tta<%xqh{P)m z2I+Hr=uqmb!LLpoj$uH2Y4Ljv^lO1TDX^jVwZz0d@X+G-BmjxPeJ`+~_{Gq3lL8Jc zek9*;;QkWWQ2e^okBnbBaM2AoHW#A4tEH44vfqQHdXHx0N^(c$@d1tt`~gGgKmTw&wT{4OV)z=YyQ?eP?F zn*O1GtC!hUd3OU_$Zx9*M_+dzYRUizAr*QU5(7Fbs$Jo*j9hLo`aCvEHL5ty#ZXspz!?G2uvt`WPe+Ma|{m8uS#G-@gw_t61XKp!t>iK zFroOZMdAVA%7=#M_n^Rp;mM}#ctl_r5MNsMvK{noz}+@HJijLd zCKNxi=iR_9ygod?7X>C1KN{aY0`B1v;rYEIFroO-{OCL2-bf73?>m7B#gFELb&Uq; z1AOQR)gFHc3j&Iv zfepp4jVU}o>c9Pg`$Awt@vEB}p5JcL18~O$HWa@mBg6AM1AbQlce$BkL-8{S46?98 zt3AkG3V`cv3D0kgzzBAl?MwdN2i(X};rY1*CKNximxaKYM~CO<5twlN76E6mhUa&S zz=YyQ_Hs9H1JlCuyGdX|@uU7W9XMNhcz)9bCKNxizm>q{WrXKqb z12b0OLd9$40wb5J6|c2L;tb%H3oMnc)qjtIz6O|?IV$;7*Dqs$dmNaT1&&`g#Xc>D zi}xa#9Ubw#7ntwVxSHD|B+}nGUsT%ywTG7eu=FRb0%p@Vj#K=pM*Dsa%y$A8tbIv;^>PhT z96od?I1PT+12amEQ|&8=1CL^0?o{J6_&pBHCN)mQkM#VZz~Gb}TJ}eJIIO~H>5ue$ z6u6Bys`RI7k0{^{3Jfb0Ut0WrA%4JpI6gE#+PCzlz=Yy=9Elf!`z9|uzs3_dCKSK( zNNfRIvztQmYYf~#feFR$FcOWxU2YG}kMw5}m{9yke`&xCpBS1S>CY)Jq4-gKOMolR z56zEm4p<^Eq4-gK*8n%IAUwZE1SS-}qe$Ec+!9Akg874$z;y!VWr0)n z$!PSqy}*1Lz>oDKRez&)J0mbSWe3A)@H-D&l(SksEq*cJa3wGU1y0%jqVo4WfExvj zw+62Eeif2$J}`F+9F@+>Rq<;F`buCn3LN)q+T+Lj!2Bq1ihov(AHBiv0x;JU@%r*| zwa1Tvz>KPit2KVmIFk)bvA`+is>U}OKW+tPZ3MU%fjOwgsp>)eegYaFz?pDY4?w# zzr_mnuZbtlq4;{hUV+_(Z2n++_ORGIzBOa5net-`h3O|kZ z_!yWk1uj^7kX@Y@7{(A^tUXlrQVe>l62w>d&_VpPUHyn0#a} zQv?R5>pWU1E!I?x?HXHpm?YyFnlMXk7ML=wfNEeqX}^F{?PpDgNapOLh+;c?*`zE<)Qh}enJ;8D+G@0N=v>! zL4O*UM=DhOH0)(BFrNxssP;G`FksCNW-qFEgZ%h;;F?tOa=G1W#~X3L3{&G&d^WEK`7hRP8snQ0m?Hwm>x=P71NSR1i{=FCrS^RZW|Z?V zFh2+!*@2dwZUDXET=a8%=upblu+u%j>=(FDcJ-^kFoyUFW~YAvSO0ciZZLji2i<__ zFK~(-XxPF-6*?*L}#T^tw6 zo-=?MFL1&1*9!cm0<%bs)94@Tfq6xZQ?&=#)d65msc{n8mFPZ-+^hm zNTnAIem#M?PK{IXBmLzF3{KghrN41VnE>2N0sOS|NAr~Zz_{-YufMs#EEc$6`Xl+C z5f~;MzLVSb0hnAh zPUTNmBEJKezXeX|zbgN7BXG@^z#rg42jR5Z<0$AefSGU)$0`0rLx1ytxkuoFwFl|% zIbgP_aT@%N0P}+yr_u}ggN92DQfGYVP|DTdHyjv?8mHn%@%SWxVGQx5WzSPU_W^fO zU`a1p`dbcq%Vh@X34G{K+CxLWt-$ONIHevc`N*EX6&S`4U%~A86mWk05JQ}NTV12-_!1umGL$qw!p7@V>r zm>oO}+%pmI+ZQ3f{lI+{h99-tKfp9y8CYL!JLm$8r3Oyh4kiFoS_7wT2eW}$AaGQA zFgsWVOt7+7xYdE*QSG?y@It8rT6!b;#;0kh!|j-zoW z*mDx%AI0?#eCP;f2c+k8U~UpPMK2n5#CkpFvu!6`em z_>DtK)ML0m03SN&I=+_uZAS9@z|4Pw;}knkjYovL0L;rzscOZc%KP3M8L1vXS@#K__YD9tH1`UFUgk}AwM&4*%9#bM#yg(aPuSJw=P0{8-Uv!0l!Zp zR@E;5d&ODfeqCjLn7pt1YCLq{7NF^=Lc?91pL-S$nSCBHbubi!wC5u z1nzhQ{OTNvtUaQEYa_6s+9M%Ce#3w>N5HQrLVjhyO^blv$_V+b1#UwaeiZ-h1?F>s z3+4Y#19L76Kk_f_K98(D;()tGU_-UXs0jIG0e4db{BDhq-|fIHiGbg;5%PN(xSbL3 zI~pOs?}0lLhF>4FM~g2EQW8FNDDA5ezl;H9roi#`(2k#11G8JrPa}Rg2+U6cN2P1U z8x+5s1t$71moFG@J8-Rl`9$C-pB6v5oU!@{_A`9N`Sq1?s<^lq^k&C!-yJ@5aJ|%? zzY*>(VEz{YuEE!Mjsrg7_{{<4#|Us2fGPSWG{5r@d>Swn-*H^9IBW@oIt|Rs6C9_k z$Ex%~xW|DR_GVr@Tq-c1Mu58j%-z3+=12DT zGBBIYaGYX)s`&mDRPyTI4bm}u=%DNITJe1xl3Sj|b>}}+ELxf=XB1JhHDQ}Ltm*8)tgz!6vG*Hro=y*PlG z`xh^_0dQLS>xkrSz{8=Y{HQ&S0rQW*QEiz1xL?c0zw97C-tauHs~}1AJn6W&xNB2Psm2^@ zw$+j}q-!}|QP~@hr|%jO89;}p)UN`AQF2}yc)(e4KH1fOU5(!@h&}fD;CLjT_U#lNKIm+$VS;=FUT*nv$qG?)0{qE zK3)vcT51?u!K#3VrrS+fS@!gdbQ2?|FmifEipg$CA7ivyQt(;@fu40yhUcV@PR|&d zj`vc?Nf+d#^c<_zo|&DcaKrS6xS6b`G*f!E)D~H&kUE@f%+AiTB;{nA@U{|}*FQ3^ zoOD}GW@biKwkbtwA@bGb`La#pvZYQ+mh*C!G*eneR<7M>wPqya)eyX_dOS~ZiZR=0 zx0#Z&Eg9)7GYL{($d{gN$lsv73$QDOQuzO0aJb$U&)h zlqfVKjn$iEVLG4nhs-WLBio*uk&~W+cWrP%8}U3T8Ob?HCXz9_Cf%N$n`uHb^GuCZ ziK$t}kt}z0!<~_fG$wIv#w*hNA}2u(Q>rE1lwwaZnT=yC8Ck4J8e@&8t~4&qN)1Tm z+7;=p5KQVx#A9q$x;@jFm2ELv?Z)I}z_W}@(Om(HkE319qR-lmnHKvPQ%RiN=Z!`@WOb|<2CM3wo&cN$yc#asB zV~nfN=|{%!nyBo-c%Iu-vwc)a>3v?TOOq%)s-a^tGwsw|nVC$@lRQBqVvNUPz8+$;R?RR}D*KmP+Z3 zwbNm#u4zuGC%E|G4(iRaC0lbzS@42MIjO03s)jAulx{-X7_GTBi%luAX)TsqVp*hS zwbGMI+&(9>OcJSit#s&%)qtBf>7Q`ClLc0dn{R;rE4lX3rd&HkM6B1Qk;|<|W=NP68uyLa zW|kCBAtUoAh^sJO3YSSE5+!k0OG%2SB{Sl-on^IU2imrAOfn72R!Cq^&d#z**CRn*;m_(wW3ug*e$4kc(ATgE!+feS zJI7|n_?QCUnq{(OMtVBM80jOKW2W@Ff$3SM6ib!>ki`?AULYU| z+D=bFd}YlrrclhH2-6@CW=c<~0g4edh@u)Kp}Cm9AnpwVv(@09oB?H}BQCSSDRNPw z0>PGaTQ*`T)Fl8(aSy4g5fzkTv7yzI%`8A$11h#fRs%%@c#Br_``J0m&6nrt=NYzXH&3O=m^K`bmH zi|r*++XSW}RMjd)Cxe7iv5c2|Z6N){x4dldy;6{ZAod<}rMC}5R%w>~A zG_tZHm^(?%$wGLZZD&r6ijiBQePCu%8uF67JXX(Q^A2LeBRM0+%T&znOj*pEkX}0k zGC&{BMlodE88!=rv6!g9>J(|}GHJ-)+0$$(qh)3_g|%hF5sk!5Dg~Y+3zkSh6P4Am zMp;%gOR_PY^)VBQn6iaeqp1^Bvr8a`<^-4*8q-IbY)Ua* z0}(t}#RLu0M4B$ur#WoBQeWX@d!ftcv3v6U#r6_snc~;F)y$oiX-v*W+-tQY(?l-W zWEq2rqpZsKnqZ2H?KHiFGq(XIH_eq=uxzvmo77}hw_*37z$_CBd}WS3f&!toG;pL& z)DP;aD`mPXo!%Uu)0>t*#Z_8fD)knc>>bDh-UR_3*{6u_t1C+rNj8chm}ZTR7?hMC zw@9BrKFqg~rDtVWm6H0_K-B66vMW>^dA~qBvl7IlnO37EJVg=_Yr0?Atqur8+HBUGafnXFB*C+cMx`lEATu0T14RnSvdi{d zUAm0Et_C{YlA4Msv2dQ%XqvDR??Hj+feA?#7+_WgMF=)FVXcK>JyVVw1_$Ow9@bd) zK1wegqM6=TNgt}2-cLy%rkUPfNguA6o}i>(ubDnTNgtt^K2S+d(o7$$q^D@6Cn@PB z&Gcj?JykQk+RKg9OgFKX*~j9N>|7gO@TZuAl2TU^DT={U*P=Z2

UWjHl$Oh+bcz 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≤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%0D52T+mmrjg)k9DVE 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

WMYm=-^0Y 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