| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | 
							- #pragma once
 
- #include <stdio.h>
 
- #include "mfxvideo++.h"
 
- // =================================================================
 
- // OS-specific definitions of types, macro, etc...
 
- // The following should be defined:
 
- //  - mfxTime
 
- //  - MSDK_FOPEN
 
- //  - MSDK_SLEEP
 
- #if defined(_WIN32) || defined(_WIN64)
 
- #include "bits/windows_defs.h"
 
- #elif defined(__linux__)
 
- #include "bits/linux_defs.h"
 
- #endif
 
- // =================================================================
 
- // Helper macro definitions...
 
- #define MSDK_PRINT_RET_MSG(ERR)                          \
 
- 	{                                                \
 
- 		PrintErrString(ERR, __FILE__, __LINE__); \
 
- 	}
 
- #define MSDK_CHECK_RESULT(P, X, ERR)             \
 
- 	{                                        \
 
- 		if ((X) > (P)) {                 \
 
- 			MSDK_PRINT_RET_MSG(ERR); \
 
- 			return ERR;              \
 
- 		}                                \
 
- 	}
 
- #define MSDK_CHECK_POINTER(P, ERR)               \
 
- 	{                                        \
 
- 		if (!(P)) {                      \
 
- 			MSDK_PRINT_RET_MSG(ERR); \
 
- 			return ERR;              \
 
- 		}                                \
 
- 	}
 
- #define MSDK_CHECK_ERROR(P, X, ERR)              \
 
- 	{                                        \
 
- 		if ((X) == (P)) {                \
 
- 			MSDK_PRINT_RET_MSG(ERR); \
 
- 			return ERR;              \
 
- 		}                                \
 
- 	}
 
- #define MSDK_IGNORE_MFX_STS(P, X)         \
 
- 	{                                 \
 
- 		if ((X) == (P)) {         \
 
- 			P = MFX_ERR_NONE; \
 
- 		}                         \
 
- 	}
 
- #define MSDK_BREAK_ON_ERROR(P)           \
 
- 	{                                \
 
- 		if (MFX_ERR_NONE != (P)) \
 
- 			break;           \
 
- 	}
 
- #define MSDK_SAFE_DELETE_ARRAY(P)   \
 
- 	{                           \
 
- 		if (P) {            \
 
- 			delete[] P; \
 
- 			P = NULL;   \
 
- 		}                   \
 
- 	}
 
- #define MSDK_ALIGN32(X) (((mfxU32)((X) + 31)) & (~(mfxU32)31))
 
- #define MSDK_ALIGN16(value) (((value + 15) >> 4) << 4)
 
- #define MSDK_SAFE_RELEASE(X)          \
 
- 	{                             \
 
- 		if (X) {              \
 
- 			X->Release(); \
 
- 			X = NULL;     \
 
- 		}                     \
 
- 	}
 
- #define MSDK_MAX(A, B) (((A) > (B)) ? (A) : (B))
 
- // Usage of the following two macros are only required for certain Windows DirectX11 use cases
 
- #define WILL_READ 0x1000
 
- #define WILL_WRITE 0x2000
 
- // =================================================================
 
- // Intel Media SDK memory allocator entrypoints....
 
- // Implementation of this functions is OS/Memory type specific.
 
- mfxStatus simple_alloc(mfxHDL pthis, mfxFrameAllocRequest *request,
 
- 		       mfxFrameAllocResponse *response);
 
- mfxStatus simple_lock(mfxHDL pthis, mfxMemId mid, mfxFrameData *ptr);
 
- mfxStatus simple_unlock(mfxHDL pthis, mfxMemId mid, mfxFrameData *ptr);
 
- mfxStatus simple_gethdl(mfxHDL pthis, mfxMemId mid, mfxHDL *handle);
 
- mfxStatus simple_free(mfxHDL pthis, mfxFrameAllocResponse *response);
 
- mfxStatus simple_copytex(mfxHDL pthis, mfxMemId mid, mfxU32 tex_handle,
 
- 			 mfxU64 lock_key, mfxU64 *next_key);
 
- // =================================================================
 
- // Utility functions, not directly tied to Media SDK functionality
 
- //
 
- void PrintErrString(int err, const char *filestr, int line);
 
- // LoadRawFrame: Reads raw frame from YUV file (YV12) into NV12 surface
 
- // - YV12 is a more common format for YUV files than NV12 (therefore the conversion during read and write)
 
- // - For the simulation case (fSource = NULL), the surface is filled with default image data
 
- // LoadRawRGBFrame: Reads raw RGB32 frames from file into RGB32 surface
 
- // - For the simulation case (fSource = NULL), the surface is filled with default image data
 
- mfxStatus LoadRawFrame(mfxFrameSurface1 *pSurface, FILE *fSource);
 
- mfxStatus LoadRawRGBFrame(mfxFrameSurface1 *pSurface, FILE *fSource);
 
- // Write raw YUV (NV12) surface to YUV (YV12) file
 
- mfxStatus WriteRawFrame(mfxFrameSurface1 *pSurface, FILE *fSink);
 
- // Write bit stream data for frame to file
 
- mfxStatus WriteBitStreamFrame(mfxBitstream *pMfxBitstream, FILE *fSink);
 
- // Read bit stream data from file. Stream is read as large chunks (= many frames)
 
- mfxStatus ReadBitStreamData(mfxBitstream *pBS, FILE *fSource);
 
- void ClearYUVSurfaceSysMem(mfxFrameSurface1 *pSfc, mfxU16 width, mfxU16 height);
 
- void ClearYUVSurfaceVMem(mfxMemId memId);
 
- void ClearRGBSurfaceVMem(mfxMemId memId);
 
- // Get free raw frame surface
 
- int GetFreeSurfaceIndex(mfxFrameSurface1 **pSurfacesPool, mfxU16 nPoolSize);
 
- // For use with asynchronous task management
 
- typedef struct {
 
- 	mfxBitstream mfxBS;
 
- 	mfxSyncPoint syncp;
 
- } Task;
 
- // Get free task
 
- int GetFreeTaskIndex(Task *pTaskPool, mfxU16 nPoolSize);
 
- // Initialize Intel Media SDK Session, device/display and memory manager
 
- mfxStatus Initialize(mfxIMPL impl, mfxVersion ver, MFXVideoSession *pSession,
 
- 		     mfxFrameAllocator *pmfxAllocator,
 
- 		     mfxHDL *deviceHandle = NULL,
 
- 		     bool bCreateSharedHandles = false, bool dx9hack = false);
 
- // Release resources (device/display)
 
- void Release();
 
- // Convert frame type to string
 
- char mfxFrameTypeString(mfxU16 FrameType);
 
- void mfxGetTime(mfxTime *timestamp);
 
- //void mfxInitTime();  might need this for Windows
 
- double TimeDiffMsec(mfxTime tfinish, mfxTime tstart);
 
 
  |