#pragma once #include "ivideorenderinterface.h" #ifdef _WIN32 #include #include #else #include #endif // _WIN32 #ifndef MAX_PATH #define MAX_PATH 260 #endif #ifndef rvc_snprintf #ifdef RVC_OS_WIN #define rvc_snprintf _snprintf #else #define rvc_snprintf snprintf #endif // RVC_OS_WIN #endif // rvc_snprintf enum eVideoRenderQueue { ePreview_Queue, eSnapshot_Queue }; enum eVideoRenderMode { eRender_Local_Single, eRender_LocalRemote, eRender_Local_Both }; typedef struct rvc_video_box_move_callback_s { void (*on_video_box_move)(int imessagetype, int ivideotype, int ileft, int ibottom, void* user_data); void* user_data; }rvc_video_box_move_callback_t; typedef struct rvc_video_render_callback_s { int (*on_stop_remote_video_render)(void* user_data); int (*on_remote_video_render)(void* videoframe, void* user_data); void* user_data; }rvc_video_render_callback_t; typedef struct rvc_video_render_window_type_callback_s { int (*on_window_type)(void* user_data); void* user_data; }rvc_video_render_window_type_callback_t; typedef struct rvc_video_render_params_s { int ilocal_view_x; int ilocal_view_y; int ilocal_view_cx; int ilocal_view_cy; int iremote_view_x; int iremote_view_y; int iremote_view_cx; int iremote_view_cy; int ilocal_move; int iremote_move; int ilocal_fresh_time; int iremote_fresh_time; eVideoRenderQueue erender_queue; }rvc_video_render_params_t; typedef struct rvc_video_render_s { IVideoRender* plocal_render; IVideoRender* premote_render; #ifdef _WIN32 HANDLE local_render_thread; HANDLE local_render_stop_event; HANDLE remote_render_thread; HANDLE remote_render_stop_event; #else pthread_t local_render_threadid; sem_t local_render_stop_sem; pthread_t remote_render_threadid; sem_t remote_render_stop_sem; #endif rvc_video_render_params_t render_param; rvc_video_render_window_type_callback_t cb; }rvc_video_render_t; int rvc_start_video_render(rvc_video_render_t* prender, eVideoRenderMode eMode, rvc_video_box_move_callback_t* cb); int rvc_stop_video_render(rvc_video_render_t* prender); int rvc_remote_video_render(rvc_video_render_t* prender, void* videoframe); int rvc_stop_remote_video_render(rvc_video_render_t* prender);