...
|
...
|
@@ -17,6 +17,14 @@ |
|
|
|
|
|
static int CameraFd = 0;
|
|
|
|
|
|
//临时方案 后续会改写法合并到t_JZsdk_TaskFuntionInput(搞起来有点麻烦)
|
|
|
typedef struct t_FrameCatch_TaskFuntionInput
|
|
|
{
|
|
|
void (*task_function)(void*); //任务函数指针,用于指定 执行的任务
|
|
|
void* data; //数据指针
|
|
|
unsigned int data_size; //数据大小
|
|
|
} t_FrameCatch_TaskFuntionInput;
|
|
|
|
|
|
//多线程抓取数据线程
|
|
|
static void *JZsdk_Catch_MultiThread(void *args)
|
|
|
{
|
...
|
...
|
@@ -45,11 +53,55 @@ static void *JZsdk_Catch_MultiThread(void *args) |
|
|
}
|
|
|
|
|
|
|
|
|
/******************************
|
|
|
*
|
|
|
* 相机抓取初始化
|
|
|
* ThreadMode: 0为单线程 1为多线程
|
|
|
*
|
|
|
* ******************************/
|
|
|
T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
//初始化数据接收线程
|
|
|
pthread_t ReadDataTask;
|
|
|
pthread_attr_t task_attribute; //线程属性
|
|
|
pthread_attr_init(&task_attribute); //初始化线程属性
|
|
|
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
|
|
|
|
|
|
if (ThreadMode == 0)
|
|
|
{
|
|
|
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,NULL); //线程
|
|
|
if(opus_Protection != 0)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
}
|
|
|
else if (ThreadMode == 1)
|
|
|
{
|
|
|
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,NULL); //线程
|
|
|
if(opus_Protection != 0)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//单线程抓取数据线程
|
|
|
static void *JZsdk_Catch_SingleThread(void *args)
|
|
|
static void *JZsdk_Catch_SingleThread2(void *args)
|
|
|
{
|
|
|
t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput *)args;
|
|
|
while (1)
|
|
|
{
|
|
|
task->task_function();
|
|
|
|
|
|
unsigned int buf_size = 0;
|
|
|
unsigned char *buf = NULL;
|
|
|
|
...
|
...
|
@@ -66,19 +118,25 @@ static void *JZsdk_Catch_SingleThread(void *args) |
|
|
|
|
|
//进行数据处理
|
|
|
VideoMgmt_Single_FrameIn(buf, buf_size);
|
|
|
|
|
|
task->task_function();
|
|
|
|
|
|
//归还图片
|
|
|
V4L2_CameraFrameRecord_OnlyReturnFrame();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/******************************
|
|
|
|
|
|
/********************************************
|
|
|
*
|
|
|
*
|
|
|
* 相机抓取初始化
|
|
|
* ThreadMode: 0为单线程 1为多线程
|
|
|
*
|
|
|
* ******************************/
|
|
|
T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode)
|
|
|
* 传入线程的抓取模式 ThreadMode: 0为单线程 1为多线程
|
|
|
* 传入线程的处理函数 task_function
|
|
|
*
|
|
|
* *****************************************/
|
|
|
T_JZsdkReturnCode JZsdk_FrameCatch_Init2(int ThreadMode, T_JZsdkReturnCode (*task_function)(void*))
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
...
|
...
|
@@ -88,9 +146,19 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) |
|
|
pthread_attr_init(&task_attribute); //初始化线程属性
|
|
|
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
|
|
|
|
|
|
t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput*)malloc(sizeof(t_FrameCatch_TaskFuntionInput));
|
|
|
if (task == NULL)
|
|
|
{
|
|
|
// 处理内存分配失败的情况
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
task->task_function = task_function;
|
|
|
task->args = NULL;
|
|
|
|
|
|
if (ThreadMode == 0)
|
|
|
{
|
|
|
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,NULL); //线程
|
|
|
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,(void *)task); //线程
|
|
|
if(opus_Protection != 0)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
|
...
|
...
|
@@ -99,7 +167,7 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) |
|
|
}
|
|
|
else if (ThreadMode == 1)
|
|
|
{
|
|
|
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,NULL); //线程
|
|
|
int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,(void *)task); //线程
|
|
|
if(opus_Protection != 0)
|
|
|
{
|
|
|
JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
|
...
|
...
|
|