Quellcode durchsuchen

Z991239-3865 #comment feat: RvcFace类以及相关实现

陈纪林80310970 vor 3 Jahren
Ursprung
Commit
84cc5a0c9e

+ 261 - 0
Module/mod_livenessdetection/RvcFaceVideo.cpp

@@ -0,0 +1,261 @@
+#include "StdAfx.h"
+#include "RvcFaceVideo.h"
+#include "..\..\Other\libvideoframework\videoutil.h"
+
+RvcFaceVideo::RvcFaceVideo(void)
+{
+	memset(m_env_videoname, 0, MAX_PATH);
+	memset(m_opt_videoname, 0, MAX_PATH);
+	memset(m_preview_env_videoname, 0, MAX_PATH);
+	memset(m_preview_opt_videoname, 0, MAX_PATH);
+
+	m_env_videoqueue = NULL;
+	m_opt_videoqueue = NULL;
+	m_env_videoframe = NULL;
+	m_opt_videoframe = NULL;
+
+	m_preview_env_videoqueue = NULL;
+	m_preview_opt_videoqueue = NULL;
+	m_preview_env_videoframe = NULL;
+	m_preview_opt_videoframe = NULL;
+}
+
+
+RvcFaceVideo::~RvcFaceVideo(void)
+{
+	if (NULL != m_env_videoqueue){
+		delete m_env_videoqueue;
+		m_env_videoqueue = NULL;
+	}
+
+	if (NULL != m_opt_videoqueue){
+		delete m_opt_videoqueue;
+		m_opt_videoqueue = NULL;
+	}
+
+	if (NULL != m_preview_env_videoqueue){
+		delete m_preview_env_videoqueue;
+		m_preview_env_videoqueue = NULL;
+	}
+
+	if (NULL != m_preview_opt_videoqueue){
+		delete m_preview_opt_videoqueue;
+		m_preview_opt_videoqueue = NULL;
+	}
+
+	if (NULL != m_env_videoframe){
+		delete m_env_videoframe;
+		m_env_videoframe = NULL;
+	}
+
+	if (NULL != m_opt_videoframe){
+		delete m_opt_videoframe;
+		m_opt_videoframe = NULL;
+	}
+
+	if (NULL != m_preview_env_videoframe){
+		delete m_preview_env_videoname;
+		m_preview_env_videoframe = NULL;
+	}
+
+	if (NULL != m_preview_opt_videoframe){
+		delete m_preview_opt_videoframe;
+		m_preview_opt_videoframe = NULL;
+	}
+}
+
+
+int RvcFaceVideo::InitVideoQueue(const char* strenvqueue, const char* stroptqueue, const char* strpreview_envqueue, const char* strpreview_optqueue)
+{
+	int iRet = -1;
+	if (NULL != strenvqueue){
+		_snprintf(m_env_videoname, MAX_PATH, "%s", strenvqueue);
+	}
+
+	if (NULL != stroptqueue){
+		_snprintf(m_opt_videoname, MAX_PATH, "%s", stroptqueue);
+	}
+
+	if (NULL != strpreview_envqueue){
+		_snprintf(m_preview_env_videoname, MAX_PATH, "%s", strpreview_envqueue);
+	}
+
+	if (NULL != strpreview_optqueue){
+		_snprintf(m_preview_opt_videoname, MAX_PATH, "%s", strpreview_optqueue);
+	}
+
+	if (strlen(m_env_videoname)){
+		m_env_videoqueue = new Clibvideoqueue(m_env_videoname);
+		iRet = 0;
+	}
+
+	if (strlen(m_opt_videoname)){
+		m_opt_videoqueue = new Clibvideoqueue(m_opt_videoname);
+		iRet = 0;
+	}
+
+	if (strlen(m_preview_env_videoname)){
+		m_preview_env_videoqueue = new Clibvideoqueue(m_preview_env_videoname);
+		iRet = 0;
+	}
+
+	if (strlen(m_preview_opt_videoname)){
+		m_preview_opt_videoqueue = new Clibvideoqueue(m_preview_opt_videoname);
+		iRet = 0;
+	}
+
+	return iRet;
+}
+
+
+int RvcFaceVideo::GetVideoFrameSize(int icameraid, int* ivideowidth, int* ivideoheight)
+{
+	assert(icameraid == 0 || icameraid == 1);
+	int isize = 0;
+
+	if (icameraid == 0){
+		int width  = 0;
+		int height = 0;
+		if (NULL != m_env_videoqueue){
+			m_env_videoqueue->GetFrameSize(width,height);
+		}
+		*ivideowidth = width;
+		*ivideoheight = height;
+		isize = width*height*3;
+	}
+	else{
+		int width  = 0;
+		int height = 0;
+		if (NULL != m_opt_videoqueue){
+			m_opt_videoqueue->GetFrameSize(width,height);
+		}
+		*ivideowidth = width;
+		*ivideoheight = height;
+		isize = width*height*3;
+	}
+
+	return isize;
+}
+
+
+int RvcFaceVideo::GetPreViewVideoFrameSize(int icameraid, int* ivideowidth, int* ivideoheight)
+{
+	assert(icameraid == 0 || icameraid == 1);
+	int isize = 0;
+
+	if (0 == icameraid){
+		int width  = 0;
+		int height = 0;
+		if (NULL != m_preview_env_videoqueue){
+			m_preview_env_videoqueue->GetFrameSize(width,height);
+		}
+		*ivideowidth = width;
+		*ivideoheight = height;
+		isize = width*height*3;
+	}
+	else{
+		int width  = 0;
+		int height = 0;
+		if (NULL != m_preview_opt_videoqueue){
+			m_preview_opt_videoqueue->GetFrameSize(width,height);
+		}
+		*ivideowidth = width;
+		*ivideoheight = height;
+		isize = width*height*3;
+	}
+
+	return isize;
+}
+
+
+BOOL RvcFaceVideo::GetVideoFrame(int icameraid, videoq_frame* videoframe, int iflags)
+{
+	assert(icameraid == 0 || icameraid == 1);
+
+	BOOL bRslt = FALSE;
+	if (icameraid == 0){	
+		bRslt = m_env_videoqueue->GetVideo(videoframe, iflags);
+	}
+	else{
+		if (NULL != m_opt_videoqueue){//横向摄像头图像,拼接
+			bRslt = m_opt_videoqueue->GetVideo(videoframe, iflags);
+		}
+	}
+	return bRslt;
+}
+
+
+BOOL RvcFaceVideo::GetPreViewVideoFrame(int icameraid, videoq_frame* videoframe, int iflags)
+{
+	assert(icameraid == 0 || icameraid == 1);
+
+	BOOL bRslt = FALSE;
+	if (icameraid == 0){	
+		bRslt = m_preview_env_videoqueue->GetVideo(videoframe, iflags);
+	}
+	else{
+		if (NULL != m_preview_opt_videoqueue){//横向摄像头图像,拼接
+			bRslt = m_preview_opt_videoqueue->GetVideo(videoframe, iflags);
+		}
+	}
+	return bRslt;
+}
+
+
+int RvcFaceVideo::InitVideoFrame()
+{
+	int iRet = -1;
+	if (NULL != m_env_videoqueue){
+		int iwidth = 0;
+		int iheight = 0;
+		int isize = GetVideoFrameSize(0, &iwidth, &iheight);
+		m_env_videoframe = new videoq_frame();
+		m_env_videoframe->data = new unsigned char[isize];
+		m_env_videoframe->framesize = isize;
+		m_env_videoframe->width = iwidth;
+		m_env_videoframe->height = iheight;
+		m_env_videoframe->format = VIDEO_FORMAT_RGB24;
+		iRet = 0;
+	}
+
+	if (NULL != m_opt_videoqueue){
+		int iwidth = 0;
+		int iheight = 0;
+		int isize = GetVideoFrameSize(1, &iwidth, &iheight);
+		m_opt_videoframe = new videoq_frame();
+		m_opt_videoframe->data = new unsigned char[isize];
+		m_opt_videoframe->framesize = isize;
+		m_opt_videoframe->width = iwidth;
+		m_opt_videoframe->height = iheight;
+		m_opt_videoframe->format = VIDEO_FORMAT_RGB24;
+		iRet = 0;
+	}
+
+	if (NULL != m_preview_env_videoqueue){
+		int iwidth = 0;
+		int iheight = 0;
+		int isize = GetPreViewVideoFrameSize(0, &iwidth, &iheight);
+		m_preview_env_videoframe = new videoq_frame();
+		m_preview_env_videoframe->data = new unsigned char[isize];
+		m_preview_env_videoframe->framesize = isize;
+		m_preview_env_videoframe->width = iwidth;
+		m_preview_env_videoframe->height = iheight;
+		m_preview_env_videoframe->format = VIDEO_FORMAT_RGB24;
+		iRet = 0;
+	}
+
+	if (NULL != m_preview_opt_videoqueue){
+		int iwidth = 0;
+		int iheight = 0;
+		int isize = GetPreViewVideoFrameSize(1, &iwidth, &iheight);
+		m_preview_opt_videoframe = new videoq_frame();
+		m_preview_opt_videoframe->data = new unsigned char[isize];
+		m_preview_opt_videoframe->framesize = isize;
+		m_preview_opt_videoframe->width = iwidth;
+		m_preview_opt_videoframe->height = iheight;
+		m_preview_opt_videoframe->format = VIDEO_FORMAT_RGB24;
+		iRet = 0;
+	}
+
+	return iRet;
+}

+ 36 - 0
Module/mod_livenessdetection/RvcFaceVideo.h

@@ -0,0 +1,36 @@
+#pragma once
+#include "../../Other/libvideoqueue/libvideoqueue.h"
+
+#define MAX_PATH          260
+
+class RvcFaceVideo
+{
+public:
+	RvcFaceVideo(void);
+	~RvcFaceVideo(void);
+
+	int InitVideoQueue(const char* strenvqueue, const char* stroptqueue, const char* strpreview_envqueue, const char* strpreview_optqueue);
+	int GetVideoFrameSize(int icameraid, int* ivideowidth, int* ivideoheight);
+	int GetPreViewVideoFrameSize(int icameraid, int* ivideowidth, int* ivideoheight);
+	BOOL GetVideoFrame(int icameraid, videoq_frame* videoframe, int iflags);
+	BOOL GetPreViewVideoFrame(int icameraid, videoq_frame* videoframe, int iflags);
+	int InitVideoFrame();
+
+public:
+	Clibvideoqueue* m_env_videoqueue;
+	Clibvideoqueue* m_opt_videoqueue;
+	videoq_frame *m_env_videoframe;
+	videoq_frame *m_opt_videoframe;
+
+	Clibvideoqueue* m_preview_env_videoqueue;
+	Clibvideoqueue* m_preview_opt_videoqueue;
+	videoq_frame *m_preview_env_videoframe;
+	videoq_frame *m_preview_opt_videoframe;
+
+private:
+	char m_env_videoname[MAX_PATH];
+	char m_opt_videoname[MAX_PATH];
+	char m_preview_env_videoname[MAX_PATH];
+	char m_preview_opt_videoname[MAX_PATH];
+};
+