瀏覽代碼

Z991239-1621 #comment fea 回显库增加位置等参数属性设置功能

陈礼鹏80274480 4 年之前
父節點
當前提交
696b0fa4a6

+ 2 - 0
Other/CMakeLists.txt

@@ -30,6 +30,8 @@ else(MSVC)
    add_subdirectory(libmediaplayer)
    add_subdirectory(libmediadeviceinfo)
    add_subdirectory(libvideocapture)
+   add_subdirectory(libvideorender)
+
 endif(MSVC)
 
 

+ 14 - 1
Other/libvideorender/ivideorenderinterface.h

@@ -12,8 +12,21 @@
 #define LIBVIDEORENDER_API
 #endif // RVC_OS_WIN
 
+#include <stdint.h>
+
 struct video_frame;
 
+typedef struct videorender_param_s {
+	int icx;
+	int icy;
+	uint32_t uvideowidth;
+	uint32_t uvideoheight;
+	uint32_t uwidth;
+	uint32_t uheight;
+	uint32_t uwinflags;
+	bool bpersonarea;
+}videorender_param_t;
+
 struct IRenderCallback
 {
 	virtual void Debug(const char* fmt, ...) = 0;
@@ -24,7 +37,7 @@ struct IRenderCallback
 class IVideoRender 
 {
 public:
-	virtual int VideoRenderSetParam() = 0;
+	virtual int VideoRenderSetParam(videorender_param_t* tparam) = 0;
 	virtual int StartVideoRender() = 0;
 	virtual int StopVideoRender() = 0;
 	virtual void VideoRenderDestroy() = 0;

+ 38 - 8
Other/libvideorender/libvideorender.cpp

@@ -37,13 +37,43 @@ VideoRenderImpl::~VideoRenderImpl()
 	SDL_Quit();
 }
 
+int VideoRenderImpl::SetWindowProperty(videorender_param_t* tparam)
+{
+	int  iRet = -1;
+	if (NULL == tparam){
+		return iRet;
+	}
+
+	m_cx = tparam->icy;
+	m_cy = tparam->icy;
+	m_width = tparam->uwidth;
+	m_height = tparam->uheight;
+	m_videowidth = m_width;
+	m_videoheight = m_height;
+	if (tparam->uvideowidth > 0){
+		m_videowidth = tparam->uvideowidth;
+	}
+
+	if (tparam->uvideoheight > 0){
+		m_videoheight = tparam->uvideoheight;
+	}
+
+	m_flags |= tparam->uwinflags;
 
-int VideoRenderImpl::VideoRenderSetParam()
+	iRet = 0;
+
+	return iRet;
+}
+
+int VideoRenderImpl::VideoRenderSetParam(videorender_param_t* tparam)
 {
-	if (NULL == m_sdl_window) /*init SDL*/
-	{
-		if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
-		{
+	if (SetWindowProperty(tparam)){
+		m_callback->Debug("SetWindowProperty failed for param error.");
+		return -1;
+	}
+
+	if (NULL == m_sdl_window){
+		if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0){
 			m_callback->Debug("RENDER: Couldn't initialize SDL2: %s", SDL_GetError());
 			return -1;
 		}
@@ -156,14 +186,14 @@ int VideoRenderImpl::VideoRenderSetParam()
 
 	free(render_info);
 
-	SDL_RenderSetLogicalSize(m_renderer, m_width, m_height);
+	SDL_RenderSetLogicalSize(m_renderer, m_videowidth, m_videoheight);
 	SDL_SetRenderDrawBlendMode(m_renderer, SDL_BLENDMODE_NONE);
 
 	m_rending_texture = SDL_CreateTexture(m_renderer,
 		SDL_PIXELFORMAT_BGR24,
 		SDL_TEXTUREACCESS_STREAMING,
-		m_width,
-		m_height);
+		m_videowidth,
+		m_videoheight);
 
 	if (m_rending_texture == NULL){
 		m_callback->Debug("RENDER: (SDL2) Couldn't get a texture for rendering: %s", SDL_GetError());

+ 3 - 1
Other/libvideorender/libvideorender.h

@@ -14,7 +14,7 @@ public:
 	VideoRenderImpl(IRenderCallback* pCallback);
 	~VideoRenderImpl();
 
-	int VideoRenderSetParam();
+	int VideoRenderSetParam(videorender_param_t* tparam);
 	int StartVideoRender();
 	int StopVideoRender();
 	void VideoRenderDestroy();
@@ -22,6 +22,8 @@ public:
 	int HideVideoWindow();
 	int RenderVideoFrame(video_frame* pframe);
 
+	int SetWindowProperty(videorender_param_t* tparam);
+
 
 private:
 	SDL_Window* m_sdl_window;