作者 ookk303

save1

@@ -56,7 +56,8 @@ @@ -56,7 +56,8 @@
56 "mediaparm.h": "c", 56 "mediaparm.h": "c",
57 "videostream_push.h": "c", 57 "videostream_push.h": "c",
58 "v4l2_record.h": "c", 58 "v4l2_record.h": "c",
59 - "deviceinfo.h": "c" 59 + "deviceinfo.h": "c",
  60 + "mediaproc.h": "c"
60 }, 61 },
61 "Codegeex.GenerationPreference": "automatic", 62 "Codegeex.GenerationPreference": "automatic",
62 "C_Cpp.dimInactiveRegions": false 63 "C_Cpp.dimInactiveRegions": false
@@ -15,14 +15,9 @@ @@ -15,14 +15,9 @@
15 #define THREAD_POOL_SIZE 5 // 线程池大小 15 #define THREAD_POOL_SIZE 5 // 线程池大小
16 16
17 typedef struct { 17 typedef struct {
18 - void (*task_function)(void*); //任务函数指针,用于指定 执行的任务  
19 - void* data; // 任务参数 //任务参数的地址 用于输入任务内容  
20 -} t_JZsdk_TaskMgmt_TaskInput;  
21 -  
22 -typedef struct {  
23 pthread_t thread; // 线程 //调用的线程 18 pthread_t thread; // 线程 //调用的线程
24 int is_busy; // 标识线程是否忙碌 19 int is_busy; // 标识线程是否忙碌
25 - t_JZsdk_TaskMgmt_TaskInput* task; // 线程执行的任务 20 + t_JZsdk_TaskFuntionInput* task; // 线程执行的任务
26 pthread_mutex_t lock; // 互斥锁 21 pthread_mutex_t lock; // 互斥锁
27 pthread_cond_t condition; // 条件变量 22 pthread_cond_t condition; // 条件变量
28 } t_ThreadPool; 23 } t_ThreadPool;
@@ -73,7 +68,7 @@ T_JZsdkReturnCode TaskManagement_SubmitTask(void (*task_function)(void*), void* @@ -73,7 +68,7 @@ T_JZsdkReturnCode TaskManagement_SubmitTask(void (*task_function)(void*), void*
73 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 68 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
74 } 69 }
75 70
76 - t_JZsdk_TaskMgmt_TaskInput *task = (t_JZsdk_TaskMgmt_TaskInput*)malloc(sizeof(t_JZsdk_TaskMgmt_TaskInput)); 71 + t_JZsdk_TaskFuntionInput *task = (t_JZsdk_TaskFuntionInput*)malloc(sizeof(t_JZsdk_TaskFuntionInput));
77 if (task == NULL) 72 if (task == NULL)
78 { 73 {
79 // 处理内存分配失败的情况 74 // 处理内存分配失败的情况
@@ -81,7 +76,7 @@ T_JZsdkReturnCode TaskManagement_SubmitTask(void (*task_function)(void*), void* @@ -81,7 +76,7 @@ T_JZsdkReturnCode TaskManagement_SubmitTask(void (*task_function)(void*), void*
81 } 76 }
82 77
83 task->task_function = task_function; 78 task->task_function = task_function;
84 - task->data = data; 79 + task->args = data;
85 80
86 //将发送内容放入任务 81 //将发送内容放入任务
87 TaskPool[i].task = task; 82 TaskPool[i].task = task;
@@ -109,7 +104,7 @@ static void* TaskManagement_ThreadFunction(void* arg) @@ -109,7 +104,7 @@ static void* TaskManagement_ThreadFunction(void* arg)
109 104
110 if (pool->task->task_function != NULL) 105 if (pool->task->task_function != NULL)
111 { 106 {
112 - pool->task->task_function(pool->task->data); 107 + pool->task->task_function(pool->task->args);
113 } 108 }
114 109
115 // 执行完成,将状态置为未忙碌 110 // 执行完成,将状态置为未忙碌
@@ -23,6 +23,12 @@ extern "C" { @@ -23,6 +23,12 @@ extern "C" {
23 23
24 /* Exported types ------------------------------------------------------------*/ 24 /* Exported types ------------------------------------------------------------*/
25 25
  26 +//用于传递指针函数的类型
  27 +typedef struct t_JZsdk_TaskFuntionInput{
  28 + void (*task_function)(void*); //任务函数指针,用于指定 执行的任务
  29 + void *args; // 任务参数 //任务参数的地址 用于输入任务内容
  30 +} t_JZsdk_TaskFuntionInput;
  31 +
26 /* Exported functions --------------------------------------------------------*/ 32 /* Exported functions --------------------------------------------------------*/
27 T_JZsdkReturnCode TaskManagement_Init(); 33 T_JZsdkReturnCode TaskManagement_Init();
28 T_JZsdkReturnCode TaskManagement_SubmitTask(void (*task_function)(void*), void* data); 34 T_JZsdkReturnCode TaskManagement_SubmitTask(void (*task_function)(void*), void* data);
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 #define VERSION_CHOOSE_H 7 #define VERSION_CHOOSE_H
8 #include "./ConfigParams.h" 8 #include "./ConfigParams.h"
9 //1~10行 除了D可以修改版本选择 禁止动任何东西 9 //1~10行 除了D可以修改版本选择 禁止动任何东西
10 -#define DEVICE_VERSION JZ_C1 10 +#define DEVICE_VERSION JZ_H150S
11 11
12 //禁止修改行 选择是串口程序 还是 psdk程序 12 //禁止修改行 选择是串口程序 还是 psdk程序
13 #define APP_VERSION APP_PSDK 13 #define APP_VERSION APP_PSDK
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #define MAJOR_VERSION 0x01 19 #define MAJOR_VERSION 0x01
20 #define MINOR_VERSION 0x03 20 #define MINOR_VERSION 0x03
21 #define MODIFY_VERSION 0x09 21 #define MODIFY_VERSION 0x09
22 -#define DEBUG_VERSION 0x05 22 +#define DEBUG_VERSION 0x02
23 23
24 //禁止修改行 滤波方式 24 //禁止修改行 滤波方式
25 #define FILTERING_TYPE HIGH_PASS_FILTERING 25 #define FILTERING_TYPE HIGH_PASS_FILTERING
@@ -75,10 +75,13 @@ @@ -75,10 +75,13 @@
75 //是否加载RTK_MPP模块 75 //是否加载RTK_MPP模块
76 #ifdef MACRO_RTK_MPP_MODULE 76 #ifdef MACRO_RTK_MPP_MODULE
77 #define RTK_MPP_STATUS VERSION_SWITCH_ON 77 #define RTK_MPP_STATUS VERSION_SWITCH_ON
  78 + #define RTK_MPP_STATUS_ON
78 #else 79 #else
79 #define RTK_MPP_STATUS VERSION_SWITCH_OFF 80 #define RTK_MPP_STATUS VERSION_SWITCH_OFF
80 #endif 81 #endif
81 82
  83 +
  84 +
82 //是否加载WIRINGPI模块 85 //是否加载WIRINGPI模块
83 #ifdef MACRO_WIRINGPI_MODULE 86 #ifdef MACRO_WIRINGPI_MODULE
84 #define WIRINGPI_STATUS_ON 87 #define WIRINGPI_STATUS_ON
@@ -109,6 +112,7 @@ @@ -109,6 +112,7 @@
109 112
110 //是否加载RTK_MPP模块 113 //是否加载RTK_MPP模块
111 #define RTK_MPP_STATUS VERSION_SWITCH_ON 114 #define RTK_MPP_STATUS VERSION_SWITCH_ON
  115 + #define RTK_MPP_STATUS_ON
112 116
113 //是否加载WIRINGPI模块 117 //是否加载WIRINGPI模块
114 #define WIRINGPI_STATUS_ON 118 #define WIRINGPI_STATUS_ON
@@ -17,6 +17,14 @@ @@ -17,6 +17,14 @@
17 17
18 static int CameraFd = 0; 18 static int CameraFd = 0;
19 19
  20 +//临时方案 后续会改写法合并到t_JZsdk_TaskFuntionInput(搞起来有点麻烦)
  21 +typedef struct t_FrameCatch_TaskFuntionInput
  22 +{
  23 + void (*task_function)(void*); //任务函数指针,用于指定 执行的任务
  24 + void* data; //数据指针
  25 + unsigned int data_size; //数据大小
  26 +} t_FrameCatch_TaskFuntionInput;
  27 +
20 //多线程抓取数据线程 28 //多线程抓取数据线程
21 static void *JZsdk_Catch_MultiThread(void *args) 29 static void *JZsdk_Catch_MultiThread(void *args)
22 { 30 {
@@ -45,11 +53,55 @@ static void *JZsdk_Catch_MultiThread(void *args) @@ -45,11 +53,55 @@ static void *JZsdk_Catch_MultiThread(void *args)
45 } 53 }
46 54
47 55
  56 +/******************************
  57 + *
  58 + * 相机抓取初始化
  59 + * ThreadMode: 0为单线程 1为多线程
  60 + *
  61 + * ******************************/
  62 +T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode)
  63 +{
  64 + T_JZsdkReturnCode ret;
  65 +
  66 + //初始化数据接收线程
  67 + pthread_t ReadDataTask;
  68 + pthread_attr_t task_attribute; //线程属性
  69 + pthread_attr_init(&task_attribute); //初始化线程属性
  70 + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
  71 +
  72 + if (ThreadMode == 0)
  73 + {
  74 + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,NULL); //线程
  75 + if(opus_Protection != 0)
  76 + {
  77 + JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
  78 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  79 + }
  80 + }
  81 + else if (ThreadMode == 1)
  82 + {
  83 + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,NULL); //线程
  84 + if(opus_Protection != 0)
  85 + {
  86 + JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
  87 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  88 + }
  89 + }
  90 +
  91 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  92 +}
  93 +
  94 +
  95 +
  96 +
48 //单线程抓取数据线程 97 //单线程抓取数据线程
49 -static void *JZsdk_Catch_SingleThread(void *args) 98 +static void *JZsdk_Catch_SingleThread2(void *args)
50 { 99 {
  100 + t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput *)args;
51 while (1) 101 while (1)
52 { 102 {
  103 + task->task_function();
  104 +
53 unsigned int buf_size = 0; 105 unsigned int buf_size = 0;
54 unsigned char *buf = NULL; 106 unsigned char *buf = NULL;
55 107
@@ -66,19 +118,25 @@ static void *JZsdk_Catch_SingleThread(void *args) @@ -66,19 +118,25 @@ static void *JZsdk_Catch_SingleThread(void *args)
66 118
67 //进行数据处理 119 //进行数据处理
68 VideoMgmt_Single_FrameIn(buf, buf_size); 120 VideoMgmt_Single_FrameIn(buf, buf_size);
  121 +
  122 + task->task_function();
69 123
70 //归还图片 124 //归还图片
71 V4L2_CameraFrameRecord_OnlyReturnFrame(); 125 V4L2_CameraFrameRecord_OnlyReturnFrame();
72 } 126 }
73 } 127 }
74 128
75 -/****************************** 129 +
  130 +/********************************************
  131 + *
76 * 132 *
77 * 相机抓取初始化 133 * 相机抓取初始化
78 - * ThreadMode: 0为单线程 1为多线程  
79 * 134 *
80 - * ******************************/  
81 -T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) 135 + * 传入线程的抓取模式 ThreadMode: 0为单线程 1为多线程
  136 + * 传入线程的处理函数 task_function
  137 + *
  138 + * *****************************************/
  139 +T_JZsdkReturnCode JZsdk_FrameCatch_Init2(int ThreadMode, T_JZsdkReturnCode (*task_function)(void*))
82 { 140 {
83 T_JZsdkReturnCode ret; 141 T_JZsdkReturnCode ret;
84 142
@@ -88,9 +146,19 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) @@ -88,9 +146,19 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode)
88 pthread_attr_init(&task_attribute); //初始化线程属性 146 pthread_attr_init(&task_attribute); //初始化线程属性
89 pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 147 pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
90 148
  149 + t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput*)malloc(sizeof(t_FrameCatch_TaskFuntionInput));
  150 + if (task == NULL)
  151 + {
  152 + // 处理内存分配失败的情况
  153 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  154 + }
  155 +
  156 + task->task_function = task_function;
  157 + task->args = NULL;
  158 +
91 if (ThreadMode == 0) 159 if (ThreadMode == 0)
92 { 160 {
93 - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,NULL); //线程 161 + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,(void *)task); //线程
94 if(opus_Protection != 0) 162 if(opus_Protection != 0)
95 { 163 {
96 JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); 164 JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
@@ -99,7 +167,7 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) @@ -99,7 +167,7 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode)
99 } 167 }
100 else if (ThreadMode == 1) 168 else if (ThreadMode == 1)
101 { 169 {
102 - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,NULL); //线程 170 + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,(void *)task); //线程
103 if(opus_Protection != 0) 171 if(opus_Protection != 0)
104 { 172 {
105 JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); 173 JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!");
  1 +
  2 +#include <stdio.h>
  3 +#include "MediaProc.h"
  4 +#include "IrcC1.h"
  5 +#include "MediaParm.h"
  6 +
  7 +#include "JZsdkLib.h"
  8 +#include "BaseConfig.h"
  9 +
  10 +#ifdef RTK_MPP_STATUS_ON
  11 +
  12 +#include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h"
  13 +
  14 +//c1的红外编码权柄
  15 +void *JZC1_Irc_enc_handle = NULL;
  16 +
  17 +//c1的光学相机编码权柄
  18 +void *JZC1_Opt_enc_handle = NULL;
  19 +void *JZC1_Opt_dec_handle = NULL;
  20 +
  21 +#endif
  22 +
  23 +T_JZsdkReturnCode JZC1_Init()
  24 +{
  25 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  26 +
  27 +#ifdef RTK_MPP_STATUS_ON
  28 + //1、初始化编解码模块
  29 +
  30 + //初始化红外的编解码器
  31 + RTK_mmp_enc_Init(&JZC1_Irc_enc_handle, MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, FIRST_WIDTH, FIRST_HEIGHT, 25, 5);
  32 +
  33 + //初始化光学的编解码器
  34 + RTK_mmp_enc_Init(&JZC1_Opt_enc_handle, MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, SECOND_WIDTH, SECOND_HEIGHT, 25, 5);
  35 + RTK_mmp_dec_Init(&JZC1_Opt_dec_handle, MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, SECOND_WIDTH, SECOND_HEIGHT, 30, 15);
  36 +
  37 + //2、相机初始化
  38 + Camera_Init();
  39 +
  40 + //初始化光学相机
  41 + ret = JZsdk_Kt_Camera_Init();
  42 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  43 + {
  44 + JZSDK_LOG_ERROR("光学相机初始化失败");
  45 + }
  46 + else
  47 + {
  48 + //初始化数据转换模块
  49 + JZsdk_Kt_Cam_DataDeal_Init();
  50 + }
  51 +
  52 +
  53 +#endif
  54 +}
@@ -36,7 +36,6 @@ extern "C" { @@ -36,7 +36,6 @@ extern "C" {
36 #define SATURATION (128) //饱和度 摄像头饱和度范围为 1-255 默认128 36 #define SATURATION (128) //饱和度 摄像头饱和度范围为 1-255 默认128
37 #define EXPSURE (100) //曝光值 摄像头曝光值范围: 5-2500 默认auto设置 37 #define EXPSURE (100) //曝光值 摄像头曝光值范围: 5-2500 默认auto设置
38 38
39 -  
40 #define SECOND_WIDTH 1920 39 #define SECOND_WIDTH 1920
41 #define SECOND_HEIGHT 1080 40 #define SECOND_HEIGHT 1080
42 #define SECOND_FRAME_NUM 30 41 #define SECOND_FRAME_NUM 30
@@ -26,6 +26,13 @@ static T_JZsdkReturnCode MediaProc_SingleThreading() @@ -26,6 +26,13 @@ static T_JZsdkReturnCode MediaProc_SingleThreading()
26 //2、转码模块初始化 26 //2、转码模块初始化
27 VideoStreamTransCode_Init(); 27 VideoStreamTransCode_Init();
28 } 28 }
  29 +
  30 + //如果是昆腾相机 红外+光学 则红外为1号,光学为2号
  31 + if (DEVICE_VERSION == JZ_C1)
  32 + {
  33 + //1、初始化编解码处理模块
  34 + JZsdk_Kt_IrcMMP_Init(FIRST_WIDTH ,FIRST_HEIGHT, 25, 5 ,SECOND_WIDTH ,SECOND_HEIGHT, 30, 15);
  35 + }
29 } 36 }
30 37
31 //多线程方案 38 //多线程方案
@@ -12,6 +12,15 @@ @@ -12,6 +12,15 @@
12 12
13 /* Includes ------------------------------------------------------------------*/ 13 /* Includes ------------------------------------------------------------------*/
14 #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" 14 #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
  15 +#include "BaseConfig.h"
  16 +
  17 +#ifdef RTK_MPP_STATUS_ON
  18 +
  19 +
  20 +#include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h"
  21 +#include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h"
  22 +
  23 +#endif
15 24
16 #ifdef __cplusplus 25 #ifdef __cplusplus
17 extern "C" { 26 extern "C" {