| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786 |
- //
- // Notice Regarding Standards. AMD does not provide a license or sublicense to
- // any Intellectual Property Rights relating to any standards, including but not
- // limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4;
- // AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3
- // (collectively, the "Media Technologies"). For clarity, you will pay any
- // royalties due for such third party technologies, which may include the Media
- // Technologies that are owed as a result of AMD providing the Software to you.
- //
- // MIT license
- //
- // Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved.
- //
- // 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 AMF_Context_h
- #define AMF_Context_h
- #pragma once
- #include "Buffer.h"
- #include "AudioBuffer.h"
- #include "Surface.h"
- #include "Compute.h"
- #include "ComputeFactory.h"
- #if defined(__cplusplus)
- namespace amf
- {
- #endif
- //----------------------------------------------------------------------------------------------
- // AMFContext interface
- //----------------------------------------------------------------------------------------------
- #if defined(__cplusplus)
- class AMF_NO_VTABLE AMFContext : public AMFPropertyStorage
- {
- public:
- AMF_DECLARE_IID(0xa76a13f0, 0xd80e, 0x4fcc, 0xb5, 0x8, 0x65, 0xd0, 0xb5, 0x2e, 0xd9, 0xee)
-
- // Cleanup
- virtual AMF_RESULT AMF_STD_CALL Terminate() = 0;
- // DX9
- virtual AMF_RESULT AMF_STD_CALL InitDX9(void* pDX9Device) = 0;
- virtual void* AMF_STD_CALL GetDX9Device(AMF_DX_VERSION dxVersionRequired = AMF_DX9) = 0;
- virtual AMF_RESULT AMF_STD_CALL LockDX9() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockDX9() = 0;
- class AMFDX9Locker;
- // DX11
- virtual AMF_RESULT AMF_STD_CALL InitDX11(void* pDX11Device, AMF_DX_VERSION dxVersionRequired = AMF_DX11_0) = 0;
- virtual void* AMF_STD_CALL GetDX11Device(AMF_DX_VERSION dxVersionRequired = AMF_DX11_0) = 0;
- virtual AMF_RESULT AMF_STD_CALL LockDX11() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockDX11() = 0;
- class AMFDX11Locker;
- // OpenCL
- virtual AMF_RESULT AMF_STD_CALL InitOpenCL(void* pCommandQueue = NULL) = 0;
- virtual void* AMF_STD_CALL GetOpenCLContext() = 0;
- virtual void* AMF_STD_CALL GetOpenCLCommandQueue() = 0;
- virtual void* AMF_STD_CALL GetOpenCLDeviceID() = 0;
- virtual AMF_RESULT AMF_STD_CALL GetOpenCLComputeFactory(AMFComputeFactory **ppFactory) = 0; // advanced compute - multiple queries
- virtual AMF_RESULT AMF_STD_CALL InitOpenCLEx(AMFComputeDevice *pDevice) = 0;
- virtual AMF_RESULT AMF_STD_CALL LockOpenCL() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockOpenCL() = 0;
- class AMFOpenCLLocker;
- // OpenGL
- virtual AMF_RESULT AMF_STD_CALL InitOpenGL(amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC) = 0;
- virtual amf_handle AMF_STD_CALL GetOpenGLContext() = 0;
- virtual amf_handle AMF_STD_CALL GetOpenGLDrawable() = 0;
- virtual AMF_RESULT AMF_STD_CALL LockOpenGL() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockOpenGL() = 0;
- class AMFOpenGLLocker;
- // XV - Linux
- virtual AMF_RESULT AMF_STD_CALL InitXV(void* pXVDevice) = 0;
- virtual void* AMF_STD_CALL GetXVDevice() = 0;
- virtual AMF_RESULT AMF_STD_CALL LockXV() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockXV() = 0;
- class AMFXVLocker;
- // Gralloc - Android
- virtual AMF_RESULT AMF_STD_CALL InitGralloc(void* pGrallocDevice) = 0;
- virtual void* AMF_STD_CALL GetGrallocDevice() = 0;
- virtual AMF_RESULT AMF_STD_CALL LockGralloc() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockGralloc() = 0;
- class AMFGrallocLocker;
- // Allocation
- virtual AMF_RESULT AMF_STD_CALL AllocBuffer(AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer) = 0;
- virtual AMF_RESULT AMF_STD_CALL AllocSurface(AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface) = 0;
- virtual AMF_RESULT AMF_STD_CALL AllocAudioBuffer(AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels,
- AMFAudioBuffer** ppAudioBuffer) = 0;
- // Wrap existing objects
- virtual AMF_RESULT AMF_STD_CALL CreateBufferFromHostNative(void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromHostNative(AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData,
- AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromDX9Native(void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromDX11Native(void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromOpenGLNative(AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromGrallocNative(amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromOpenCLNative(AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes,
- AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateBufferFromOpenCLNative(void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer) = 0;
- // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported
- virtual AMF_RESULT AMF_STD_CALL GetCompute(AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute) = 0;
- };
- //----------------------------------------------------------------------------------------------
- // smart pointer
- //----------------------------------------------------------------------------------------------
- typedef AMFInterfacePtr_T<AMFContext> AMFContextPtr;
- //----------------------------------------------------------------------------------------------
- // AMFContext1 interface
- //----------------------------------------------------------------------------------------------
- class AMF_NO_VTABLE AMFContext1 : public AMFContext
- {
- public:
- AMF_DECLARE_IID(0xd9e9f868, 0x6220, 0x44c6, 0xa2, 0x2f, 0x7c, 0xd6, 0xda, 0xc6, 0x86, 0x46)
- virtual AMF_RESULT AMF_STD_CALL CreateBufferFromDX11Native(void* pHostBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL AllocBufferEx(AMF_MEMORY_TYPE type, amf_size size, AMF_BUFFER_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFBuffer** ppBuffer) = 0;
- virtual AMF_RESULT AMF_STD_CALL AllocSurfaceEx(AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMF_SURFACE_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFSurface** ppSurface) = 0;
- // Vulkan - Windows, Linux
- virtual AMF_RESULT AMF_STD_CALL InitVulkan(void* pVulkanDevice) = 0;
- virtual void* AMF_STD_CALL GetVulkanDevice() = 0;
- virtual AMF_RESULT AMF_STD_CALL LockVulkan() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockVulkan() = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromVulkanNative(void* pVulkanImage, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateBufferFromVulkanNative(void* pVulkanBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL GetVulkanDeviceExtensions(amf_size *pCount, const char **ppExtensions) = 0;
-
- class AMFVulkanLocker;
- };
- //----------------------------------------------------------------------------------------------
- // smart pointer
- //----------------------------------------------------------------------------------------------
- typedef AMFInterfacePtr_T<AMFContext1> AMFContext1Ptr;
- class AMF_NO_VTABLE AMFContext2 : public AMFContext1
- {
- public:
- AMF_DECLARE_IID(0x726241d3, 0xbd46, 0x4e90, 0x99, 0x68, 0x93, 0xe0, 0x7e, 0xa2, 0x98, 0x4d)
- // DX12
- virtual AMF_RESULT AMF_STD_CALL InitDX12(void* pDX11Device, AMF_DX_VERSION dxVersionRequired = AMF_DX12) = 0;
- virtual void* AMF_STD_CALL GetDX12Device(AMF_DX_VERSION dxVersionRequired = AMF_DX12) = 0;
- virtual AMF_RESULT AMF_STD_CALL LockDX12() = 0;
- virtual AMF_RESULT AMF_STD_CALL UnlockDX12() = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromDX12Native(void* pResourceTexture, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0;
- virtual AMF_RESULT AMF_STD_CALL CreateBufferFromDX12Native(void* pResourceBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0;
- class AMFDX12Locker;
- };
- typedef AMFInterfacePtr_T<AMFContext2> AMFContext2Ptr;
- #else
- typedef struct AMFContext AMFContext;
- AMF_DECLARE_IID(AMFContext, 0xa76a13f0, 0xd80e, 0x4fcc, 0xb5, 0x8, 0x65, 0xd0, 0xb5, 0x2e, 0xd9, 0xee)
- typedef struct AMFContextVtbl
- {
- // AMFInterface interface
- amf_long (AMF_STD_CALL *Acquire)(AMFContext* pThis);
- amf_long (AMF_STD_CALL *Release)(AMFContext* pThis);
- enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFContext* pThis, const struct AMFGuid *interfaceID, void** ppInterface);
-
- // AMFInterface AMFPropertyStorage
- AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFContext* pThis, const wchar_t* name, AMFVariantStruct value);
- AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFContext* pThis, const wchar_t* name, AMFVariantStruct* pValue);
- amf_bool (AMF_STD_CALL *HasProperty)(AMFContext* pThis, const wchar_t* name);
- amf_size (AMF_STD_CALL *GetPropertyCount)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFContext* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue);
- AMF_RESULT (AMF_STD_CALL *Clear)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *AddTo)(AMFContext* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep);
- AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFContext* pThis, AMFPropertyStorage* pDest, amf_bool deep);
- void (AMF_STD_CALL *AddObserver)(AMFContext* pThis, AMFPropertyStorageObserver* pObserver);
- void (AMF_STD_CALL *RemoveObserver)(AMFContext* pThis, AMFPropertyStorageObserver* pObserver);
- // AMFContext interface
-
- // Cleanup
- AMF_RESULT (AMF_STD_CALL *Terminate)(AMFContext* pThis);
- // DX9
- AMF_RESULT (AMF_STD_CALL *InitDX9)(AMFContext* pThis, void* pDX9Device);
- void* (AMF_STD_CALL *GetDX9Device)(AMFContext* pThis, AMF_DX_VERSION dxVersionRequired);
- AMF_RESULT (AMF_STD_CALL *LockDX9)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockDX9)(AMFContext* pThis);
- // DX11
- AMF_RESULT (AMF_STD_CALL *InitDX11)(AMFContext* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired);
- void* (AMF_STD_CALL *GetDX11Device)(AMFContext* pThis, AMF_DX_VERSION dxVersionRequired);
- AMF_RESULT (AMF_STD_CALL *LockDX11)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockDX11)(AMFContext* pThis);
- // OpenCL
- AMF_RESULT (AMF_STD_CALL *InitOpenCL)(AMFContext* pThis, void* pCommandQueue);
- void* (AMF_STD_CALL *GetOpenCLContext)(AMFContext* pThis);
- void* (AMF_STD_CALL *GetOpenCLCommandQueue)(AMFContext* pThis);
- void* (AMF_STD_CALL *GetOpenCLDeviceID)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *GetOpenCLComputeFactory)(AMFContext* pThis, AMFComputeFactory **ppFactory); // advanced compute - multiple queries
- AMF_RESULT (AMF_STD_CALL *InitOpenCLEx)(AMFContext* pThis, AMFComputeDevice *pDevice);
- AMF_RESULT (AMF_STD_CALL *LockOpenCL)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockOpenCL)(AMFContext* pThis);
- // OpenGL
- AMF_RESULT (AMF_STD_CALL *InitOpenGL)(AMFContext* pThis, amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC);
- amf_handle (AMF_STD_CALL *GetOpenGLContext)(AMFContext* pThis);
- amf_handle (AMF_STD_CALL *GetOpenGLDrawable)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *LockOpenGL)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockOpenGL)(AMFContext* pThis);
- // XV - Linux
- AMF_RESULT (AMF_STD_CALL *InitXV)(AMFContext* pThis, void* pXVDevice);
- void* (AMF_STD_CALL *GetXVDevice)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *LockXV)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockXV)(AMFContext* pThis);
- // Gralloc - Android
- AMF_RESULT (AMF_STD_CALL *InitGralloc)(AMFContext* pThis, void* pGrallocDevice);
- void* (AMF_STD_CALL *GetGrallocDevice)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *LockGralloc)(AMFContext* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockGralloc)(AMFContext* pThis);
- // Allocation
- AMF_RESULT (AMF_STD_CALL *AllocBuffer)(AMFContext* pThis, AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer);
- AMF_RESULT (AMF_STD_CALL *AllocSurface)(AMFContext* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface);
- AMF_RESULT (AMF_STD_CALL *AllocAudioBuffer)(AMFContext* pThis, AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels,
- AMFAudioBuffer** ppAudioBuffer);
- // Wrap existing objects
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromHostNative)(AMFContext* pThis, void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromHostNative)(AMFContext* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData,
- AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX9Native)(AMFContext* pThis, void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX11Native)(AMFContext* pThis, void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenGLNative)(AMFContext* pThis, AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromGrallocNative)(AMFContext* pThis, amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenCLNative)(AMFContext* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes,
- AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromOpenCLNative)(AMFContext* pThis, void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer);
- // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported
- AMF_RESULT (AMF_STD_CALL *GetCompute)(AMFContext* pThis, AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute);
- } AMFContextVtbl;
- struct AMFContext
- {
- const AMFContextVtbl *pVtbl;
- };
- typedef struct AMFContext1 AMFContext1;
- AMF_DECLARE_IID(AMFContext1, 0xd9e9f868, 0x6220, 0x44c6, 0xa2, 0x2f, 0x7c, 0xd6, 0xda, 0xc6, 0x86, 0x46)
- typedef struct AMFContext1Vtbl
- {
- // AMFInterface interface
- amf_long (AMF_STD_CALL *Acquire)(AMFContext1* pThis);
- amf_long (AMF_STD_CALL *Release)(AMFContext1* pThis);
- enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFContext1* pThis, const struct AMFGuid *interfaceID, void** ppInterface);
-
- // AMFInterface AMFPropertyStorage
- AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFContext1* pThis, const wchar_t* name, AMFVariantStruct value);
- AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFContext1* pThis, const wchar_t* name, AMFVariantStruct* pValue);
- amf_bool (AMF_STD_CALL *HasProperty)(AMFContext1* pThis, const wchar_t* name);
- amf_size (AMF_STD_CALL *GetPropertyCount)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFContext1* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue);
- AMF_RESULT (AMF_STD_CALL *Clear)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *AddTo)(AMFContext1* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep);
- AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFContext1* pThis, AMFPropertyStorage* pDest, amf_bool deep);
- void (AMF_STD_CALL *AddObserver)(AMFContext1* pThis, AMFPropertyStorageObserver* pObserver);
- void (AMF_STD_CALL *RemoveObserver)(AMFContext1* pThis, AMFPropertyStorageObserver* pObserver);
- // AMFContext interface
-
- // Cleanup
- AMF_RESULT (AMF_STD_CALL *Terminate)(AMFContext1* pThis);
- // DX9
- AMF_RESULT (AMF_STD_CALL *InitDX9)(AMFContext1* pThis, void* pDX9Device);
- void* (AMF_STD_CALL *GetDX9Device)(AMFContext1* pThis, AMF_DX_VERSION dxVersionRequired);
- AMF_RESULT (AMF_STD_CALL *LockDX9)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockDX9)(AMFContext1* pThis);
- // DX11
- AMF_RESULT (AMF_STD_CALL *InitDX11)(AMFContext1* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired);
- void* (AMF_STD_CALL *GetDX11Device)(AMFContext1* pThis, AMF_DX_VERSION dxVersionRequired);
- AMF_RESULT (AMF_STD_CALL *LockDX11)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockDX11)(AMFContext1* pThis);
- // OpenCL
- AMF_RESULT (AMF_STD_CALL *InitOpenCL)(AMFContext1* pThis, void* pCommandQueue);
- void* (AMF_STD_CALL *GetOpenCLContext)(AMFContext1* pThis);
- void* (AMF_STD_CALL *GetOpenCLCommandQueue)(AMFContext1* pThis);
- void* (AMF_STD_CALL *GetOpenCLDeviceID)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *GetOpenCLComputeFactory)(AMFContext1* pThis, AMFComputeFactory **ppFactory); // advanced compute - multiple queries
- AMF_RESULT (AMF_STD_CALL *InitOpenCLEx)(AMFContext1* pThis, AMFComputeDevice *pDevice);
- AMF_RESULT (AMF_STD_CALL *LockOpenCL)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockOpenCL)(AMFContext1* pThis);
- // OpenGL
- AMF_RESULT (AMF_STD_CALL *InitOpenGL)(AMFContext1* pThis, amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC);
- amf_handle (AMF_STD_CALL *GetOpenGLContext)(AMFContext1* pThis);
- amf_handle (AMF_STD_CALL *GetOpenGLDrawable)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *LockOpenGL)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockOpenGL)(AMFContext1* pThis);
- // XV - Linux
- AMF_RESULT (AMF_STD_CALL *InitXV)(AMFContext1* pThis, void* pXVDevice);
- void* (AMF_STD_CALL *GetXVDevice)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *LockXV)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockXV)(AMFContext1* pThis);
- // Gralloc - Android
- AMF_RESULT (AMF_STD_CALL *InitGralloc)(AMFContext1* pThis, void* pGrallocDevice);
- void* (AMF_STD_CALL *GetGrallocDevice)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *LockGralloc)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockGralloc)(AMFContext1* pThis);
- // Allocation
- AMF_RESULT (AMF_STD_CALL *AllocBuffer)(AMFContext1* pThis, AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer);
- AMF_RESULT (AMF_STD_CALL *AllocSurface)(AMFContext1* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface);
- AMF_RESULT (AMF_STD_CALL *AllocAudioBuffer)(AMFContext1* pThis, AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels,
- AMFAudioBuffer** ppAudioBuffer);
- // Wrap existing objects
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromHostNative)(AMFContext1* pThis, void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromHostNative)(AMFContext1* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData,
- AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX9Native)(AMFContext1* pThis, void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX11Native)(AMFContext1* pThis, void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenGLNative)(AMFContext1* pThis, AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromGrallocNative)(AMFContext1* pThis, amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenCLNative)(AMFContext1* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes,
- AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromOpenCLNative)(AMFContext1* pThis, void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer);
- // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported
- AMF_RESULT (AMF_STD_CALL *GetCompute)(AMFContext1* pThis, AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute);
- // AMFContext1 interface
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromDX11Native)(AMFContext1* pThis, void* pHostBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *AllocBufferEx)(AMFContext1* pThis, AMF_MEMORY_TYPE type, amf_size size, AMF_BUFFER_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFBuffer** ppBuffer);
- AMF_RESULT (AMF_STD_CALL *AllocSurfaceEx)(AMFContext1* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMF_SURFACE_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFSurface** ppSurface);
- // Vulkan - Windows, Linux
- AMF_RESULT (AMF_STD_CALL *InitVulkan)(AMFContext1* pThis, void* pVulkanDevice);
- void* (AMF_STD_CALL *GetVulkanDevice)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *LockVulkan)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockVulkan)(AMFContext1* pThis);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromVulkanNative)(AMFContext1* pThis, void* pVulkanImage, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromVulkanNative)(AMFContext1* pThis, void* pVulkanBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *GetVulkanDeviceExtensions)(AMFContext1* pThis, amf_size *pCount, const char **ppExtensions);
- } AMFContext1Vtbl;
- struct AMFContext1
- {
- const AMFContext1Vtbl *pVtbl;
- };
- typedef struct AMFContext2 AMFContext2;
- AMF_DECLARE_IID(AMFContext2, 0xd9e9f868, 0x6220, 0x44c6, 0xa2, 0x2f, 0x7c, 0xd6, 0xda, 0xc6, 0x86, 0x46)
- typedef struct AMFContext2Vtbl
- {
- // AMFInterface interface
- amf_long (AMF_STD_CALL *Acquire)(AMFContext2* pThis);
- amf_long (AMF_STD_CALL *Release)(AMFContext2* pThis);
- enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFContext2* pThis, const struct AMFGuid *interfaceID, void** ppInterface);
- // AMFInterface AMFPropertyStorage
- AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFContext2* pThis, const wchar_t* name, AMFVariantStruct value);
- AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFContext2* pThis, const wchar_t* name, AMFVariantStruct* pValue);
- amf_bool (AMF_STD_CALL *HasProperty)(AMFContext2* pThis, const wchar_t* name);
- amf_size (AMF_STD_CALL *GetPropertyCount)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFContext2* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue);
- AMF_RESULT (AMF_STD_CALL *Clear)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *AddTo)(AMFContext2* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep);
- AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFContext2* pThis, AMFPropertyStorage* pDest, amf_bool deep);
- void (AMF_STD_CALL *AddObserver)(AMFContext2* pThis, AMFPropertyStorageObserver* pObserver);
- void (AMF_STD_CALL *RemoveObserver)(AMFContext2* pThis, AMFPropertyStorageObserver* pObserver);
- // AMFContext interface
- // Cleanup
- AMF_RESULT (AMF_STD_CALL *Terminate)(AMFContext2* pThis);
- // DX9
- AMF_RESULT (AMF_STD_CALL *InitDX9)(AMFContext2* pThis, void* pDX9Device);
- void* (AMF_STD_CALL *GetDX9Device)(AMFContext2* pThis, AMF_DX_VERSION dxVersionRequired);
- AMF_RESULT (AMF_STD_CALL *LockDX9)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockDX9)(AMFContext2* pThis);
- // DX11
- AMF_RESULT (AMF_STD_CALL *InitDX11)(AMFContext2* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired);
- void* (AMF_STD_CALL *GetDX11Device)(AMFContext2* pThis, AMF_DX_VERSION dxVersionRequired);
- AMF_RESULT (AMF_STD_CALL *LockDX11)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockDX11)(AMFContext2* pThis);
- // OpenCL
- AMF_RESULT (AMF_STD_CALL *InitOpenCL)(AMFContext2* pThis, void* pCommandQueue);
- void* (AMF_STD_CALL *GetOpenCLContext)(AMFContext2* pThis);
- void* (AMF_STD_CALL *GetOpenCLCommandQueue)(AMFContext2* pThis);
- void* (AMF_STD_CALL *GetOpenCLDeviceID)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *GetOpenCLComputeFactory)(AMFContext2* pThis, AMFComputeFactory **ppFactory); // advanced compute - multiple queries
- AMF_RESULT (AMF_STD_CALL *InitOpenCLEx)(AMFContext2* pThis, AMFComputeDevice *pDevice);
- AMF_RESULT (AMF_STD_CALL *LockOpenCL)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockOpenCL)(AMFContext2* pThis);
- // OpenGL
- AMF_RESULT (AMF_STD_CALL *InitOpenGL)(AMFContext2* pThis, amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC);
- amf_handle (AMF_STD_CALL *GetOpenGLContext)(AMFContext2* pThis);
- amf_handle (AMF_STD_CALL *GetOpenGLDrawable)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *LockOpenGL)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockOpenGL)(AMFContext2* pThis);
- // XV - Linux
- AMF_RESULT (AMF_STD_CALL *InitXV)(AMFContext2* pThis, void* pXVDevice);
- void* (AMF_STD_CALL *GetXVDevice)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *LockXV)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockXV)(AMFContext2* pThis);
- // Gralloc - Android
- AMF_RESULT (AMF_STD_CALL *InitGralloc)(AMFContext2* pThis, void* pGrallocDevice);
- void* (AMF_STD_CALL *GetGrallocDevice)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *LockGralloc)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockGralloc)(AMFContext2* pThis);
- // Allocation
- AMF_RESULT (AMF_STD_CALL *AllocBuffer)(AMFContext2* pThis, AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer);
- AMF_RESULT (AMF_STD_CALL *AllocSurface)(AMFContext2* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface);
- AMF_RESULT (AMF_STD_CALL *AllocAudioBuffer)(AMFContext2* pThis, AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels, AMFAudioBuffer** ppAudioBuffer);
- // Wrap existing objects
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromHostNative)(AMFContext2* pThis, void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromHostNative)(AMFContext2* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData,AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX9Native)(AMFContext2* pThis, void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX11Native)(AMFContext2* pThis, void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenGLNative)(AMFContext2* pThis, AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromGrallocNative)(AMFContext2* pThis, amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenCLNative)(AMFContext2* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromOpenCLNative)(AMFContext2* pThis, void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer);
- // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported
- AMF_RESULT (AMF_STD_CALL *GetCompute)(AMFContext2* pThis, AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute);
- // AMFContext1 interface
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromDX11Native)(AMFContext2* pThis, void* pHostBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *AllocBufferEx)(AMFContext2* pThis, AMF_MEMORY_TYPE type, amf_size size, AMF_BUFFER_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFBuffer** ppBuffer);
- AMF_RESULT (AMF_STD_CALL *AllocSurfaceEx)(AMFContext2* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMF_SURFACE_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFSurface** ppSurface);
- // Vulkan - Windows, Linux
- AMF_RESULT (AMF_STD_CALL *InitVulkan)(AMFContext2* pThis, void* pVulkanDevice);
- void* (AMF_STD_CALL *GetVulkanDevice)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *LockVulkan)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockVulkan)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromVulkanNative)(AMFContext2* pThis, void* pVulkanImage, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromVulkanNative)(AMFContext2* pThis, void* pVulkanBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *GetVulkanDeviceExtensions)(AMFContext2* pThis, amf_size *pCount, const char **ppExtensions);
- // AMFContext2 interface
- AMF_RESULT (AMF_STD_CALL *InitDX12)(AMFContext2* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired);
- void* (AMF_STD_CALL *GetDX12Device)(AMFContext2* pThis, AMF_DX_VERSION dxVersionRequired);
- AMF_RESULT (AMF_STD_CALL *LockDX12)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *UnlockDX12)(AMFContext2* pThis);
- AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX12Native)(AMFContext2* pThis, void* pResourceTexture, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver);
- AMF_RESULT (AMF_STD_CALL *CreateBufferFromDX12Native)(AMFContext2* pThis, void* pResourceBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver);
- } AMFContext2Vtbl;
- struct AMFContext2
- {
- const AMFContext2Vtbl *pVtbl;
- };
- #endif
- #if defined(__cplusplus)
- //----------------------------------------------------------------------------------------------
- // Lockers
- //----------------------------------------------------------------------------------------------
- class AMFContext::AMFDX9Locker
- {
- public:
- AMFDX9Locker() : m_Context(NULL)
- {}
- AMFDX9Locker(AMFContext* resources) : m_Context(NULL)
- {
- Lock(resources);
- }
- ~AMFDX9Locker()
- {
- if(m_Context != NULL)
- {
- m_Context->UnlockDX9();
- }
- }
- void Lock(AMFContext* resources)
- {
- if(m_Context != NULL)
- {
- m_Context->UnlockDX9();
- }
- m_Context = resources;
- if(m_Context != NULL)
- {
- m_Context->LockDX9();
- }
- }
- protected:
- AMFContext* m_Context;
- private:
- AMFDX9Locker(const AMFDX9Locker&);
- AMFDX9Locker& operator=(const AMFDX9Locker&);
- };
- //----------------------------------------------------------------------------------------------
- class AMFContext::AMFDX11Locker
- {
- public:
- AMFDX11Locker() : m_Context(NULL)
- {}
- AMFDX11Locker(AMFContext* resources) : m_Context(NULL)
- {
- Lock(resources);
- }
- ~AMFDX11Locker()
- {
- if(m_Context != NULL)
- {
- m_Context->UnlockDX11();
- }
- }
- void Lock(AMFContext* resources)
- {
- if(m_Context != NULL)
- {
- m_Context->UnlockDX11();
- }
- m_Context = resources;
- if(m_Context != NULL)
- {
- m_Context->LockDX11();
- }
- }
- protected:
- AMFContext* m_Context;
- private:
- AMFDX11Locker(const AMFDX11Locker&);
- AMFDX11Locker& operator=(const AMFDX11Locker&);
- };
- //----------------------------------------------------------------------------------------------
- class AMFContext::AMFOpenCLLocker
- {
- public:
- AMFOpenCLLocker() : m_Context(NULL)
- {}
- AMFOpenCLLocker(AMFContext* resources) : m_Context(NULL)
- {
- Lock(resources);
- }
- ~AMFOpenCLLocker()
- {
- if(m_Context != NULL)
- {
- m_Context->UnlockOpenCL();
- }
- }
- void Lock(AMFContext* resources)
- {
- if(m_Context != NULL)
- {
- m_Context->UnlockOpenCL();
- }
- m_Context = resources;
- if(m_Context != NULL)
- {
- m_Context->LockOpenCL();
- }
- }
- protected:
- AMFContext* m_Context;
- private:
- AMFOpenCLLocker(const AMFOpenCLLocker&);
- AMFOpenCLLocker& operator=(const AMFOpenCLLocker&);
- };
- //----------------------------------------------------------------------------------------------
- class AMFContext::AMFOpenGLLocker
- {
- public:
- AMFOpenGLLocker(AMFContext* pContext) : m_pContext(pContext),
- m_GLLocked(false)
- {
- if(m_pContext != NULL)
- {
- if(m_pContext->LockOpenGL() == AMF_OK)
- {
- m_GLLocked = true;
- }
- }
- }
- ~AMFOpenGLLocker()
- {
- if(m_GLLocked)
- {
- m_pContext->UnlockOpenGL();
- }
- }
- private:
- AMFContext* m_pContext;
- amf_bool m_GLLocked; ///< AMFOpenGLLocker can be called when OpenGL is not initialized yet
- ///< in this case don't call UnlockOpenGL
- AMFOpenGLLocker(const AMFOpenGLLocker&);
- AMFOpenGLLocker& operator=(const AMFOpenGLLocker&);
- };
- //----------------------------------------------------------------------------------------------
- class AMFContext::AMFXVLocker
- {
- public:
- AMFXVLocker() : m_pContext(NULL)
- {}
- AMFXVLocker(AMFContext* pContext) : m_pContext(NULL)
- {
- Lock(pContext);
- }
- ~AMFXVLocker()
- {
- if(m_pContext != NULL)
- {
- m_pContext->UnlockXV();
- }
- }
- void Lock(AMFContext* pContext)
- {
- if((pContext != NULL) && (pContext->GetXVDevice() != NULL))
- {
- m_pContext = pContext;
- m_pContext->LockXV();
- }
- }
- protected:
- AMFContext* m_pContext;
- private:
- AMFXVLocker(const AMFXVLocker&);
- AMFXVLocker& operator=(const AMFXVLocker&);
- };
- //----------------------------------------------------------------------------------------------
- class AMFContext::AMFGrallocLocker
- {
- public:
- AMFGrallocLocker() : m_pContext(NULL)
- {}
- AMFGrallocLocker(AMFContext* pContext) : m_pContext(NULL)
- {
- Lock(pContext);
- }
- ~AMFGrallocLocker()
- {
- if(m_pContext != NULL)
- {
- m_pContext->UnlockGralloc();
- }
- }
- void Lock(AMFContext* pContext)
- {
- if((pContext != NULL) && (pContext->GetGrallocDevice() != NULL))
- {
- m_pContext = pContext;
- m_pContext->LockGralloc();
- }
- }
- protected:
- AMFContext* m_pContext;
- private:
- AMFGrallocLocker(const AMFGrallocLocker&);
- AMFGrallocLocker& operator=(const AMFGrallocLocker&);
- };
- //----------------------------------------------------------------------------------------------
- class AMFContext1::AMFVulkanLocker
- {
- public:
- AMFVulkanLocker() : m_pContext(NULL)
- {}
- AMFVulkanLocker(AMFContext1* pContext) : m_pContext(NULL)
- {
- Lock(pContext);
- }
- ~AMFVulkanLocker()
- {
- if(m_pContext != NULL)
- {
- m_pContext->UnlockVulkan();
- }
- }
- void Lock(AMFContext1* pContext)
- {
- if((pContext != NULL) && (pContext->GetVulkanDevice() != NULL))
- {
- m_pContext = pContext;
- m_pContext->LockVulkan();
- }
- }
- protected:
- AMFContext1* m_pContext;
- private:
- AMFVulkanLocker(const AMFVulkanLocker&);
- AMFVulkanLocker& operator=(const AMFVulkanLocker&);
- };
- //----------------------------------------------------------------------------------------------
- class AMFContext2::AMFDX12Locker
- {
- public:
- AMFDX12Locker() : m_Context(NULL)
- {}
- AMFDX12Locker(AMFContext2* resources) : m_Context(NULL)
- {
- Lock(resources);
- }
- ~AMFDX12Locker()
- {
- if (m_Context != NULL)
- {
- m_Context->UnlockDX12();
- }
- }
- void Lock(AMFContext2* resources)
- {
- if (m_Context != NULL)
- {
- m_Context->UnlockDX12();
- }
- m_Context = resources;
- if (m_Context != NULL)
- {
- m_Context->LockDX12();
- }
- }
- protected:
- AMFContext2* m_Context;
- private:
- AMFDX12Locker(const AMFDX12Locker&);
- AMFDX12Locker& operator=(const AMFDX12Locker&);
- };
- //----------------------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------------------
- #endif
- #if defined(__cplusplus)
- }
- #endif
- enum AMF_CONTEXT_DEVICETYPE_ENUM
- {
- AMF_CONTEXT_DEVICE_TYPE_GPU = 0,
- AMF_CONTEXT_DEVICE_TYPE_CPU
- };
- #define AMF_CONTEXT_DEVICE_TYPE L"AMF_Context_DeviceType" //Value type: amf_int64; Values : AMF_CONTEXT_DEVICE_TYPE_GPU for GPU (default) , AMF_CONTEXT_DEVICE_TYPE_CPU for CPU.
- #endif //#ifndef AMF_Context_h
|