#ifndef __MFXMEMORY_H__
#define __MFXMEMORY_H__
#include "mfxsession.h"
#include "mfxstructures.h"
#ifdef __cplusplus
extern "C"
{
#endif
mfxStatus MFX_CDECL MFXMemory_GetSurfaceForVPP(mfxSession session, mfxFrameSurface1** surface);
mfxStatus MFX_CDECL MFXMemory_GetSurfaceForVPPOut(mfxSession session, mfxFrameSurface1** surface);
#define MFXMemory_GetSurfaceForVPPIn MFXMemory_GetSurfaceForVPP
mfxStatus MFX_CDECL MFXMemory_GetSurfaceForEncode(mfxSession session, mfxFrameSurface1** surface);
mfxStatus MFX_CDECL MFXMemory_GetSurfaceForDecode(mfxSession session, mfxFrameSurface1** surface);
#ifdef ONEVPL_EXPERIMENTAL
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxSurfaceInterface SurfaceInterface;
mfxHDL texture2D;
mfxHDL reserved[7];
} mfxSurfaceD3D11Tex2D;
MFX_PACK_END()
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxSurfaceInterface SurfaceInterface;
mfxHDL vaDisplay;
mfxU32 vaSurfaceID;
mfxU32 reserved1;
mfxHDL reserved[6];
} mfxSurfaceVAAPI;
MFX_PACK_END()
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxExtBuffer Header;
mfxHDL ocl_context;
mfxHDL ocl_command_queue;
mfxHDL reserved[8];
} mfxExtSurfaceOpenCLImg2DExportDescription;
MFX_PACK_END()
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxSurfaceInterface SurfaceInterface;
mfxHDL ocl_context;
mfxHDL ocl_command_queue;
mfxHDL ocl_image[4];
mfxU32 ocl_image_num;
mfxHDL reserved[8];
} mfxSurfaceOpenCLImg2D;
MFX_PACK_END()
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxExtBuffer Header;
mfxHDL d3d12Device;
mfxHDL reserved[9];
} mfxExtSurfaceD3D12Tex2DExportDescription;
MFX_PACK_END()
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxSurfaceInterface SurfaceInterface;
mfxHDL texture2D;
mfxHDL reserved[7];
} mfxSurfaceD3D12Tex2D;
MFX_PACK_END()
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxExtBuffer Header;
mfxHDL instance;
mfxHDL physicalDevice;
mfxHDL device;
mfxHDL reserved[7];
} mfxExtSurfaceVulkanImg2DExportDescription;
MFX_PACK_END()
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxSurfaceInterface SurfaceInterface;
mfxHDL instance;
mfxHDL physicalDevice;
mfxHDL device;
mfxHDL image2D;
mfxHDL image2DMemory;
mfxHDL reserved[10];
} mfxSurfaceVulkanImg2D;
MFX_PACK_END()
typedef enum {
MFX_SURFACE_COMPONENT_UNKNOWN = 0,
MFX_SURFACE_COMPONENT_ENCODE = 1,
MFX_SURFACE_COMPONENT_DECODE = 2,
MFX_SURFACE_COMPONENT_VPP_INPUT = 3,
MFX_SURFACE_COMPONENT_VPP_OUTPUT = 4,
} mfxSurfaceComponent;
#define MFX_SURFACETYPESSUPPORTED_VERSION MFX_STRUCT_VERSION(1, 0)
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct {
mfxStructVersion Version;
mfxU16 NumSurfaceTypes;
struct surftype {
mfxSurfaceType SurfaceType;
mfxU32 reserved[6];
mfxU16 NumSurfaceComponents;
struct surfcomp {
mfxSurfaceComponent SurfaceComponent;
mfxU32 SurfaceFlags;
mfxU32 reserved[7];
} *SurfaceComponents;
} *SurfaceTypes;
mfxU32 reserved[4];
} mfxSurfaceTypesSupported;
MFX_PACK_END()
#define MFX_MEMORYINTERFACE_VERSION MFX_STRUCT_VERSION(1, 1)
MFX_PACK_BEGIN_STRUCT_W_PTR()
typedef struct mfxMemoryInterface {
mfxHDL Context;
mfxStructVersion Version;
mfxStatus (MFX_CDECL *ImportFrameSurface)(struct mfxMemoryInterface* memory_interface, mfxSurfaceComponent surf_component, mfxSurfaceHeader* external_surface, mfxFrameSurface1** imported_surface);
mfxStatus (MFX_CDECL* GetBitstreamBuffer)(struct mfxMemoryInterface* memory_interface, mfxBitstream* queried_bsBuffer);
mfxHDL reserved[15];
} mfxMemoryInterface;
MFX_PACK_END()
#define MFXGetMemoryInterface(session, piface) MFXVideoCORE_GetHandle((session), MFX_HANDLE_MEMORY_INTERFACE, (mfxHDL *)(piface))
#endif
#ifdef __cplusplus
} #endif
#endif