#pragma once #ifdef _WIN32 #ifdef LIBVIDEORENDER_EXPORTS #define LIBVIDEORENDER_API __declspec(dllexport) #else #define LIBVIDEORENDER_API __declspec(dllimport) #endif # elif ( defined(__GNUC__) && __GNUC__ >= 4 ) #define LIBVIDEORENDER_API __attribute__((visibility("default"))) #else // RVC_OS_WIN #define LIBVIDEORENDER_API #endif // RVC_OS_WIN #include #include typedef enum { RVC_FLIP_NONE = 0x00000000, /**< Do not flip */ RVC_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ RVC_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ } RVC_RendererFlip; struct video_frame; typedef struct videorender_param_s { int icx; int icy; uint32_t uvideowidth; uint32_t uvideoheight; uint32_t uwidth; uint32_t uheight; int ivideoformat; bool bmoveable; }videorender_param_t; enum render_loglevel { RENDER_LOG_DEBUG, RENDER_LOG_INFO, RENDER_LOG_WARN, RENDER_LOG_ERROR, RENDER_LOG_FATAL }; typedef struct videorender_callback_s { void (*debug)(render_loglevel elevel, void* user_data, const char* fmt, va_list arg); void (*onrenderfailed)(); void (*onvideorenderexcption)(); void* user_data; }videorender_callback_t; class IVideoRender { public: virtual int VideoRenderSetParam(videorender_param_t* tparam) = 0; virtual int StartVideoRender() = 0; virtual int StopVideoRender() = 0; virtual void VideoRenderDestroy() = 0; virtual int ShowVideoWindow() = 0; virtual int HideVideoWindow() = 0; virtual int RenderVideoFrame(video_frame* pframe, RVC_RendererFlip eFlipType = RVC_FLIP_NONE) = 0; }; extern "C" LIBVIDEORENDER_API IVideoRender* CreateVideoRenderObj(videorender_callback_t* pCallback); extern "C" LIBVIDEORENDER_API void DestroyVideoRenderObj(IVideoRender* pIVideoRender); extern "C" LIBVIDEORENDER_API int VideoRender_Init(); extern "C" LIBVIDEORENDER_API int VideoRender_Term();