正在显示
6 个修改的文件
包含
151 行增加
和
36 行删除
@@ -63,7 +63,8 @@ | @@ -63,7 +63,8 @@ | ||
63 | "rtk_mmp_dec.h": "c", | 63 | "rtk_mmp_dec.h": "c", |
64 | "rtk_mmp_enc.h": "c", | 64 | "rtk_mmp_enc.h": "c", |
65 | "videostreamtranscode.h": "c", | 65 | "videostreamtranscode.h": "c", |
66 | - "time.h": "c" | 66 | + "time.h": "c", |
67 | + "cam_framecatch.h": "c" | ||
67 | }, | 68 | }, |
68 | "Codegeex.GenerationPreference": "automatic", | 69 | "Codegeex.GenerationPreference": "automatic", |
69 | "C_Cpp.dimInactiveRegions": false | 70 | "C_Cpp.dimInactiveRegions": false |
@@ -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 0x06 | 22 | +#define DEBUG_VERSION 0x05 |
23 | 23 | ||
24 | //禁止修改行 滤波方式 | 24 | //禁止修改行 滤波方式 |
25 | #define FILTERING_TYPE HIGH_PASS_FILTERING | 25 | #define FILTERING_TYPE HIGH_PASS_FILTERING |
@@ -3,6 +3,8 @@ | @@ -3,6 +3,8 @@ | ||
3 | #include <stdlib.h> | 3 | #include <stdlib.h> |
4 | #include <string.h> | 4 | #include <string.h> |
5 | #include <pthread.h> | 5 | #include <pthread.h> |
6 | +#include <time.h> | ||
7 | +#include <unistd.h> | ||
6 | 8 | ||
7 | 9 | ||
8 | #include "JZsdkLib.h" | 10 | #include "JZsdkLib.h" |
@@ -13,25 +15,35 @@ | @@ -13,25 +15,35 @@ | ||
13 | 15 | ||
14 | 16 | ||
15 | #ifdef RTK_MPP_STATUS_ON | 17 | #ifdef RTK_MPP_STATUS_ON |
16 | - | ||
17 | #include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h" | 18 | #include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h" |
18 | -#include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h" | ||
19 | -#include "MediaProc/MediaParm.h" | ||
20 | #include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h" | 19 | #include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h" |
21 | #include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h" | 20 | #include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h" |
21 | + | ||
22 | +#endif | ||
23 | + | ||
24 | +#ifdef MEDIA_PROC_CONFIG_STATUS_ON | ||
25 | + | ||
26 | +#include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h" | ||
27 | +#include "MediaProc/MediaParm.h" | ||
22 | #include "MediaProc/VideoMgmt/VideoStreamPush/VideoStream_Push.h" | 28 | #include "MediaProc/VideoMgmt/VideoStreamPush/VideoStream_Push.h" |
23 | #include "MediaProc/VideoMgmt/VideoMgmt.h" | 29 | #include "MediaProc/VideoMgmt/VideoMgmt.h" |
24 | #include "MediaProc/IRC_funtion/IRC_Param.h" | 30 | #include "MediaProc/IRC_funtion/IRC_Param.h" |
25 | #include "MediaProc/IRC_funtion/IRC_funtion.h" | 31 | #include "MediaProc/IRC_funtion/IRC_funtion.h" |
26 | #include "MediaProc/MediaProc_Param.h" | 32 | #include "MediaProc/MediaProc_Param.h" |
27 | 33 | ||
28 | -#endif | 34 | + |
29 | 35 | ||
30 | static void *g_usb_index = NULL; | 36 | static void *g_usb_index = NULL; |
31 | 37 | ||
32 | // 定义 昆腾的 帧头长度和帧头内容 | 38 | // 定义 昆腾的 帧头长度和帧头内容 |
33 | #define FRAME_HEADER_SIZE 4 | 39 | #define FRAME_HEADER_SIZE 4 |
34 | static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, 0xdd}; | 40 | static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, 0xdd}; |
41 | +#define NSEC_PER_SEC 1000000000L //1秒的纳秒数 | ||
42 | +#define TARGET_FPS 30 | ||
43 | + | ||
44 | +static unsigned char FrameBuffer[FIRST_HEIGHT * FIRST_WIDTH *2]; //用于存储帧数据的缓冲区 | ||
45 | +static unsigned int FrameBufferLen = 0; //用于存储帧数据的长度 | ||
46 | +static FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; | ||
35 | 47 | ||
36 | 48 | ||
37 | //数据推送函数 | 49 | //数据推送函数 |
@@ -48,6 +60,7 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | @@ -48,6 +60,7 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | ||
48 | //红外相机 | 60 | //红外相机 |
49 | if (currentIndex == 1 && CameraIndex == 1) | 61 | if (currentIndex == 1 && CameraIndex == 1) |
50 | { | 62 | { |
63 | + | ||
51 | //推送数据到流转模块 | 64 | //推送数据到流转模块 |
52 | VideoMgmt_Single_FrameIn(data, data_len); | 65 | VideoMgmt_Single_FrameIn(data, data_len); |
53 | } | 66 | } |
@@ -58,7 +71,6 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | @@ -58,7 +71,6 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | ||
58 | //推送数据到流转模块 | 71 | //推送数据到流转模块 |
59 | VideoMgmt_Single_FrameIn(data, data_len); | 72 | VideoMgmt_Single_FrameIn(data, data_len); |
60 | } | 73 | } |
61 | - | ||
62 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 74 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
63 | } | 75 | } |
64 | 76 | ||
@@ -113,7 +125,12 @@ static T_JZsdkReturnCode JZC1_Irc_DataCorrect(unsigned char *data) | @@ -113,7 +125,12 @@ static T_JZsdkReturnCode JZC1_Irc_DataCorrect(unsigned char *data) | ||
113 | static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len) | 125 | static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len) |
114 | { | 126 | { |
115 | //JZSDK_LOG_DEBUG("irc数据处理"); | 127 | //JZSDK_LOG_DEBUG("irc数据处理"); |
116 | - | 128 | + if (data_len == 0) |
129 | + { | ||
130 | + JZSDK_LOG_ERROR("无数据错误"); | ||
131 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
132 | + } | ||
133 | + | ||
117 | //红外数据纠正处理 | 134 | //红外数据纠正处理 |
118 | JZC1_Irc_DataCorrect(data); | 135 | JZC1_Irc_DataCorrect(data); |
119 | 136 | ||
@@ -121,6 +138,8 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | @@ -121,6 +138,8 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | ||
121 | U16_t * u16Data = (U16_t *)malloc(sizeof(U16_t) * (data_len / 2)); | 138 | U16_t * u16Data = (U16_t *)malloc(sizeof(U16_t) * (data_len / 2)); |
122 | int u16DataSize = data_len / 2; | 139 | int u16DataSize = data_len / 2; |
123 | 140 | ||
141 | + //JZSDK_LOG_DEBUG("data_len:%d u16DataSize:%d", data_len / 2, FIRST_HEIGHT * FIRST_WIDTH); | ||
142 | + | ||
124 | //合成像素,u8转换合并成u16 | 143 | //合成像素,u8转换合并成u16 |
125 | JZsdk_Merge_U8_to_U16_byReverse(data, data_len, u16Data, &u16DataSize); | 144 | JZsdk_Merge_U8_to_U16_byReverse(data, data_len, u16Data, &u16DataSize); |
126 | 145 | ||
@@ -168,6 +187,83 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | @@ -168,6 +187,83 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | ||
168 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 187 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
169 | } | 188 | } |
170 | 189 | ||
190 | +static void *JZC1_IrcDataBuffer_Thread(void *args) | ||
191 | +{ | ||
192 | + | ||
193 | + struct timespec now; | ||
194 | + | ||
195 | + //获取起始时间 | ||
196 | + struct timespec start_time; | ||
197 | + clock_gettime(CLOCK_MONOTONIC, &start_time); | ||
198 | + long long prev_time = start_time.tv_sec * NSEC_PER_SEC + start_time.tv_nsec; | ||
199 | + | ||
200 | + //设置间隔时间 | ||
201 | + long long period = NSEC_PER_SEC / TARGET_FPS; | ||
202 | + | ||
203 | + unsigned char *TempBuffer = (unsigned char *)malloc(163840); | ||
204 | + unsigned int TempBufferLen = 0; | ||
205 | + | ||
206 | + | ||
207 | + | ||
208 | + while (1) | ||
209 | + { | ||
210 | + //获取当前时间 | ||
211 | + clock_gettime(CLOCK_MONOTONIC, &now); | ||
212 | + long long current_time = now.tv_sec * NSEC_PER_SEC + now.tv_nsec; | ||
213 | + | ||
214 | + //计算时间差 | ||
215 | + long long elapsed_time = current_time - prev_time; | ||
216 | + | ||
217 | + //超过33ms | ||
218 | + if (elapsed_time >= period) | ||
219 | + { | ||
220 | + while (FrameBuffer_UseFlag == JZ_FLAGCODE_ON) | ||
221 | + { | ||
222 | + delayUs(100); | ||
223 | + } | ||
224 | + | ||
225 | + FrameBuffer_UseFlag = JZ_FLAGCODE_ON; | ||
226 | + | ||
227 | + memset(TempBuffer, 0, sizeof(TempBuffer)); | ||
228 | + memcpy(TempBuffer, FrameBuffer, FrameBufferLen); | ||
229 | + TempBufferLen = FrameBufferLen; | ||
230 | + | ||
231 | + FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; | ||
232 | + | ||
233 | + //红外数据缓冲线程 | ||
234 | + JZC1_IrcDeal(TempBuffer, TempBufferLen); | ||
235 | + | ||
236 | + prev_time = current_time; | ||
237 | + } | ||
238 | + | ||
239 | + // 为了防止过于频繁地调用 clock_gettime,可以添加一个小的睡眠时间 | ||
240 | + // 例如,休眠1毫秒(100000000纳秒),以减少CPU占用 | ||
241 | + struct timespec req = { .tv_sec = 0, .tv_nsec = 1000000 }; | ||
242 | + nanosleep(&req, NULL); | ||
243 | + } | ||
244 | + | ||
245 | + | ||
246 | +} | ||
247 | + | ||
248 | +static T_JZsdkReturnCode JZC1_IrcDataSave(unsigned char *data, unsigned int data_len) | ||
249 | +{ | ||
250 | + //避免缓冲区被同时操作 | ||
251 | + while (FrameBuffer_UseFlag == JZ_FLAGCODE_ON) | ||
252 | + { | ||
253 | + delayUs(100); | ||
254 | + } | ||
255 | + | ||
256 | + FrameBuffer_UseFlag = JZ_FLAGCODE_ON; | ||
257 | + | ||
258 | + memset(FrameBuffer, 0, sizeof(FrameBuffer)); | ||
259 | + memcpy(FrameBuffer, data, data_len); | ||
260 | + FrameBufferLen = data_len; | ||
261 | + | ||
262 | + FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; | ||
263 | + | ||
264 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
265 | +} | ||
266 | + | ||
171 | //红外数据接收线程 | 267 | //红外数据接收线程 |
172 | static void *JZC1_IrcDataRecv_Thread(void *args) | 268 | static void *JZC1_IrcDataRecv_Thread(void *args) |
173 | { | 269 | { |
@@ -245,7 +341,7 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | @@ -245,7 +341,7 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | ||
245 | { | 341 | { |
246 | memcpy( &frameData[frameDataLen], buf, frame_len-frameDataLen ); | 342 | memcpy( &frameData[frameDataLen], buf, frame_len-frameDataLen ); |
247 | 343 | ||
248 | - JZC1_IrcDeal(frameData, frame_len); | 344 | + JZC1_IrcDataSave(frameData, frame_len); |
249 | 345 | ||
250 | frame = 2; | 346 | frame = 2; |
251 | frameDataLen = 0; | 347 | frameDataLen = 0; |
@@ -265,7 +361,7 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | @@ -265,7 +361,7 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | ||
265 | 361 | ||
266 | //JZSDK_LOG_INFO("写入1 %d %x", i, frameData[20]); | 362 | //JZSDK_LOG_INFO("写入1 %d %x", i, frameData[20]); |
267 | 363 | ||
268 | - JZC1_IrcDeal(frameData, frame_len); | 364 | + JZC1_IrcDataSave(frameData, frame_len); |
269 | //JZSDK_LOG_INFO("放入数据到缓冲区"); | 365 | //JZSDK_LOG_INFO("放入数据到缓冲区"); |
270 | //memset(frameData,0,sizeof(frameData)); | 366 | //memset(frameData,0,sizeof(frameData)); |
271 | } | 367 | } |
@@ -282,7 +378,7 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | @@ -282,7 +378,7 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | ||
282 | memcpy( &frameData[0], buf, frame_len); | 378 | memcpy( &frameData[0], buf, frame_len); |
283 | 379 | ||
284 | //将未处理raw数据放入缓冲区 | 380 | //将未处理raw数据放入缓冲区 |
285 | - JZC1_IrcDeal(frameData, frame_len); | 381 | + JZC1_IrcDataSave(frameData, frame_len); |
286 | //JZSDK_LOG_INFO("放入数据到缓冲区"); | 382 | //JZSDK_LOG_INFO("放入数据到缓冲区"); |
287 | } | 383 | } |
288 | frame++; | 384 | frame++; |
@@ -317,17 +413,30 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | @@ -317,17 +413,30 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | ||
317 | pthread_attr_t task_attribute; //线程属性 | 413 | pthread_attr_t task_attribute; //线程属性 |
318 | pthread_attr_init(&task_attribute); //初始化线程属性 | 414 | pthread_attr_init(&task_attribute); //初始化线程属性 |
319 | pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | 415 | pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 |
320 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZC1_IrcDataRecv_Thread,NULL); //线程 | ||
321 | - if(opus_Protection != 0) | 416 | + int Urcdata_Protection = pthread_create(&ReadDataTask,&task_attribute,JZC1_IrcDataRecv_Thread,NULL); //线程 |
417 | + if(Urcdata_Protection != 0) | ||
322 | { | 418 | { |
323 | JZSDK_LOG_ERROR("创建视频usb线程失败!"); | 419 | JZSDK_LOG_ERROR("创建视频usb线程失败!"); |
324 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 420 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
325 | } | 421 | } |
326 | 422 | ||
423 | + //初始化送usb数据去处理的线程 | ||
424 | + pthread_t BufferDataTask; | ||
425 | + pthread_attr_t BufferDataTask_attribute; //线程属性 | ||
426 | + pthread_attr_init(&BufferDataTask_attribute); //初始化线程属性 | ||
427 | + pthread_attr_setdetachstate(&BufferDataTask_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
428 | + int bufferdata_Protection = pthread_create(&BufferDataTask,&BufferDataTask_attribute,JZC1_IrcDataBuffer_Thread,NULL); //线程 | ||
429 | + if(bufferdata_Protection != 0) | ||
430 | + { | ||
431 | + JZSDK_LOG_ERROR("创建usb缓冲失败!"); | ||
432 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
433 | + } | ||
434 | + | ||
327 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 435 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
328 | } | 436 | } |
329 | 437 | ||
330 | 438 | ||
439 | +#endif | ||
331 | 440 | ||
332 | //JZ_C1 的媒体初始化 | 441 | //JZ_C1 的媒体初始化 |
333 | static T_JZsdkReturnCode JZC1_MediaInit() | 442 | static T_JZsdkReturnCode JZC1_MediaInit() |
@@ -344,7 +453,7 @@ static T_JZsdkReturnCode JZC1_MediaInit() | @@ -344,7 +453,7 @@ static T_JZsdkReturnCode JZC1_MediaInit() | ||
344 | //初始化Mulit模块 | 453 | //初始化Mulit模块 |
345 | #ifdef RTK_MPP_STATUS_ON | 454 | #ifdef RTK_MPP_STATUS_ON |
346 | //初始化红外的编解码器 | 455 | //初始化红外的编解码器 |
347 | - RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(0), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, FIRST_WIDTH, FIRST_HEIGHT, 25, 5); | 456 | + RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(0), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, FIRST_WIDTH, FIRST_HEIGHT, 30, 5); |
348 | 457 | ||
349 | //初始化光学的编解码器 | 458 | //初始化光学的编解码器 |
350 | RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); | 459 | RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); |
@@ -55,8 +55,11 @@ T_JZsdkReturnCode IRC_LowT_CycleCalibration(U16_t *ImageData,struct IRC_param *d | @@ -55,8 +55,11 @@ T_JZsdkReturnCode IRC_LowT_CycleCalibration(U16_t *ImageData,struct IRC_param *d | ||
55 | dealInfo->LowT_NineFrameAdd[i] += ImageData[i]; | 55 | dealInfo->LowT_NineFrameAdd[i] += ImageData[i]; |
56 | } | 56 | } |
57 | dealInfo->LowT_flag++; | 57 | dealInfo->LowT_flag++; |
58 | + | ||
58 | } | 59 | } |
59 | - | 60 | + |
61 | + JZSDK_LOG_DEBUG("低温标定基准值已存入%d组",dealInfo->LowT_flag - 1); | ||
62 | + | ||
60 | if (dealInfo->LowT_flag > 9) //已经存储了9组数据 | 63 | if (dealInfo->LowT_flag > 9) //已经存储了9组数据 |
61 | { | 64 | { |
62 | for (int i = 0; i < (dealInfo->Width * dealInfo->Height); i++) | 65 | for (int i = 0; i < (dealInfo->Width * dealInfo->Height); i++) |
@@ -110,7 +113,9 @@ T_JZsdkReturnCode IRC_HighT_CycleCalibration(U16_t *ImageData, struct IRC_param | @@ -110,7 +113,9 @@ T_JZsdkReturnCode IRC_HighT_CycleCalibration(U16_t *ImageData, struct IRC_param | ||
110 | } | 113 | } |
111 | dealInfo->HighT_flag++; | 114 | dealInfo->HighT_flag++; |
112 | } | 115 | } |
113 | - | 116 | + |
117 | + JZSDK_LOG_DEBUG("高温标定基准值已存入%d组",dealInfo->LowT_flag - 1); | ||
118 | + | ||
114 | if (dealInfo->HighT_flag > 9) //已经存储了9组数据 | 119 | if (dealInfo->HighT_flag > 9) //已经存储了9组数据 |
115 | { | 120 | { |
116 | for (int i = 0; i < (dealInfo->Width * dealInfo->Height); i++) | 121 | for (int i = 0; i < (dealInfo->Width * dealInfo->Height); i++) |
@@ -697,7 +702,6 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo) | @@ -697,7 +702,6 @@ T_JZsdkReturnCode IRC_LocalFrame_DataRead(int flag,struct IRC_param *dealInfo) | ||
697 | int capacity = 0; // 用于记录当前分配的内存容量 | 702 | int capacity = 0; // 用于记录当前分配的内存容量 |
698 | U16_t *numbers = NULL; // 用于存储已读取的整数 | 703 | U16_t *numbers = NULL; // 用于存储已读取的整数 |
699 | 704 | ||
700 | - // 读取数据 | ||
701 | while (fscanf(fp, "%d", &num) == 1) { | 705 | while (fscanf(fp, "%d", &num) == 1) { |
702 | // 如果当前容量不足以存储新元素,则增加容量 | 706 | // 如果当前容量不足以存储新元素,则增加容量 |
703 | if (count >= capacity) { | 707 | if (count >= capacity) { |
@@ -177,7 +177,6 @@ unsigned int Get_2DImage_PointToArray(int x, int y, int width, int height) | @@ -177,7 +177,6 @@ unsigned int Get_2DImage_PointToArray(int x, int y, int width, int height) | ||
177 | */ | 177 | */ |
178 | static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param *dealInfo) | 178 | static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param *dealInfo) |
179 | { | 179 | { |
180 | - | ||
181 | //将rgb图形镜像 | 180 | //将rgb图形镜像 |
182 | int MirrorImageFlag = JZ_FLAGCODE_ON; | 181 | int MirrorImageFlag = JZ_FLAGCODE_ON; |
183 | 182 | ||
@@ -197,7 +196,7 @@ static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param | @@ -197,7 +196,7 @@ static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param | ||
197 | for (y = 0; y < dealInfo->Height; y++) | 196 | for (y = 0; y < dealInfo->Height; y++) |
198 | { | 197 | { |
199 | // 复制当前行到临时缓冲区 | 198 | // 复制当前行到临时缓冲区 |
200 | - memcpy(temp_row, rgb_data + y * bytes_per_row, bytes_per_row); | 199 | + memcpy(temp_row, rgb_data + (y * bytes_per_row), bytes_per_row); |
201 | 200 | ||
202 | // 从右向左(即反向)复制临时缓冲区的数据回原位置 | 201 | // 从右向左(即反向)复制临时缓冲区的数据回原位置 |
203 | for (x = 0; x < dealInfo->Width; x++) { | 202 | for (x = 0; x < dealInfo->Width; x++) { |
@@ -214,7 +213,6 @@ static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param | @@ -214,7 +213,6 @@ static T_JZsdkReturnCode IRC_Postdeal(unsigned char *rgb_data, struct IRC_param | ||
214 | free(temp_row); // 释放临时缓冲区 | 213 | free(temp_row); // 释放临时缓冲区 |
215 | } | 214 | } |
216 | 215 | ||
217 | - | ||
218 | //修复外圈图像 | 216 | //修复外圈图像 |
219 | if (dealInfo->RingRepair == JZ_FLAGCODE_ON) | 217 | if (dealInfo->RingRepair == JZ_FLAGCODE_ON) |
220 | { | 218 | { |
@@ -374,6 +372,8 @@ T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned | @@ -374,6 +372,8 @@ T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned | ||
374 | //1、数据预处理(移除数据的盲点,并记录标定数据) | 372 | //1、数据预处理(移除数据的盲点,并记录标定数据) |
375 | IRC_data_PreliminaryDeal(rawData , &dataSize, g_IRC_Param); | 373 | IRC_data_PreliminaryDeal(rawData , &dataSize, g_IRC_Param); |
376 | 374 | ||
375 | + //JZSDK_LOG_DEBUG("数据预处理完成"); | ||
376 | + | ||
377 | //2、数据前处理,将原始数据和16位数据 合成为rgb数据 | 377 | //2、数据前处理,将原始数据和16位数据 合成为rgb数据 |
378 | U8_t *RGB_data = NULL; | 378 | U8_t *RGB_data = NULL; |
379 | unsigned int RGB_dataSize = 0; | 379 | unsigned int RGB_dataSize = 0; |
@@ -394,10 +394,12 @@ T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned | @@ -394,10 +394,12 @@ T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned | ||
394 | break; | 394 | break; |
395 | } | 395 | } |
396 | 396 | ||
397 | + //JZSDK_LOG_DEBUG("数据前处理完成"); | ||
398 | + | ||
397 | //3、数据后处理,在rgb数据上,进行图像处理 | 399 | //3、数据后处理,在rgb数据上,进行图像处理 |
398 | IRC_Postdeal(RGB_data, g_IRC_Param); | 400 | IRC_Postdeal(RGB_data, g_IRC_Param); |
399 | 401 | ||
400 | - //printf("后处理完成\n"); | 402 | + //JZSDK_LOG_DEBUG("数据后处理完成"); |
401 | 403 | ||
402 | //4、数据转换,将rgb数据,转换为yuv数据 | 404 | //4、数据转换,将rgb数据,转换为yuv数据 |
403 | if (g_IRC_Param->IRC_outPixelMode == PIXEL_MODE_YUV420) | 405 | if (g_IRC_Param->IRC_outPixelMode == PIXEL_MODE_YUV420) |
@@ -1042,80 +1044,80 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | @@ -1042,80 +1044,80 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | ||
1042 | IrcDealCfg->LowT_flag = JZ_FLAGCODE_OFF; | 1044 | IrcDealCfg->LowT_flag = JZ_FLAGCODE_OFF; |
1043 | IrcDealCfg->HighT_flag = JZ_FLAGCODE_OFF; | 1045 | IrcDealCfg->HighT_flag = JZ_FLAGCODE_OFF; |
1044 | 1046 | ||
1045 | - IrcDealCfg->TPC_Diff = (double *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(double)); | 1047 | + IrcDealCfg->TPC_Diff = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); |
1046 | if (IrcDealCfg->TPC_Diff == NULL) | 1048 | if (IrcDealCfg->TPC_Diff == NULL) |
1047 | { | 1049 | { |
1048 | JZSDK_LOG_ERROR("TPC_Diff注册失败"); | 1050 | JZSDK_LOG_ERROR("TPC_Diff注册失败"); |
1049 | } | 1051 | } |
1050 | 1052 | ||
1051 | - IrcDealCfg->TPC_Slope = (double *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(double)); | 1053 | + IrcDealCfg->TPC_Slope = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); |
1052 | if (IrcDealCfg->TPC_Slope == NULL) | 1054 | if (IrcDealCfg->TPC_Slope == NULL) |
1053 | { | 1055 | { |
1054 | JZSDK_LOG_ERROR("TPC_Slope注册失败"); | 1056 | JZSDK_LOG_ERROR("TPC_Slope注册失败"); |
1055 | } | 1057 | } |
1056 | 1058 | ||
1057 | - IrcDealCfg->HighT_NineFrameAdd = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1059 | + IrcDealCfg->HighT_NineFrameAdd = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1058 | if (IrcDealCfg->HighT_NineFrameAdd == NULL) | 1060 | if (IrcDealCfg->HighT_NineFrameAdd == NULL) |
1059 | { | 1061 | { |
1060 | JZSDK_LOG_ERROR("HighT_NineFrameAdd注册失败"); | 1062 | JZSDK_LOG_ERROR("HighT_NineFrameAdd注册失败"); |
1061 | } | 1063 | } |
1062 | 1064 | ||
1063 | - IrcDealCfg->LowT_NineFrameAdd = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1065 | + IrcDealCfg->LowT_NineFrameAdd = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1064 | if (IrcDealCfg->LowT_NineFrameAdd == NULL) | 1066 | if (IrcDealCfg->LowT_NineFrameAdd == NULL) |
1065 | { | 1067 | { |
1066 | JZSDK_LOG_ERROR("LowT_NineFrameAdd注册失败"); | 1068 | JZSDK_LOG_ERROR("LowT_NineFrameAdd注册失败"); |
1067 | } | 1069 | } |
1068 | 1070 | ||
1069 | - IrcDealCfg->HighT_NineFrame_Avg = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1071 | + IrcDealCfg->HighT_NineFrame_Avg = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1070 | if (IrcDealCfg->HighT_NineFrame_Avg == NULL) | 1072 | if (IrcDealCfg->HighT_NineFrame_Avg == NULL) |
1071 | { | 1073 | { |
1072 | JZSDK_LOG_ERROR("HighT_NineFrame_Avg注册失败"); | 1074 | JZSDK_LOG_ERROR("HighT_NineFrame_Avg注册失败"); |
1073 | } | 1075 | } |
1074 | 1076 | ||
1075 | - IrcDealCfg->LowT_NineFrame_Avg = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1077 | + IrcDealCfg->LowT_NineFrame_Avg = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1076 | if (IrcDealCfg->LowT_NineFrame_Avg == NULL) | 1078 | if (IrcDealCfg->LowT_NineFrame_Avg == NULL) |
1077 | { | 1079 | { |
1078 | JZSDK_LOG_ERROR("LowT_NineFrame_Avg注册失败"); | 1080 | JZSDK_LOG_ERROR("LowT_NineFrame_Avg注册失败"); |
1079 | } | 1081 | } |
1080 | 1082 | ||
1081 | - IrcDealCfg->SPC_Diff = (double *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(double)); | 1083 | + IrcDealCfg->SPC_Diff = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); |
1082 | if (IrcDealCfg->SPC_Diff == NULL) | 1084 | if (IrcDealCfg->SPC_Diff == NULL) |
1083 | { | 1085 | { |
1084 | JZSDK_LOG_ERROR("SPC_Diff注册失败"); | 1086 | JZSDK_LOG_ERROR("SPC_Diff注册失败"); |
1085 | } | 1087 | } |
1086 | 1088 | ||
1087 | - IrcDealCfg->SPC_Slope = (double *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(double)); | 1089 | + IrcDealCfg->SPC_Slope = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); |
1088 | if (IrcDealCfg->SPC_Slope == NULL) | 1090 | if (IrcDealCfg->SPC_Slope == NULL) |
1089 | { | 1091 | { |
1090 | JZSDK_LOG_ERROR("SPC_Slope注册失败"); | 1092 | JZSDK_LOG_ERROR("SPC_Slope注册失败"); |
1091 | } | 1093 | } |
1092 | 1094 | ||
1093 | - IrcDealCfg->DGCE_Area = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1095 | + IrcDealCfg->DGCE_Area = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1094 | if (IrcDealCfg->DGCE_Area == NULL) | 1096 | if (IrcDealCfg->DGCE_Area == NULL) |
1095 | { | 1097 | { |
1096 | JZSDK_LOG_ERROR("DGCE_Area注册失败"); | 1098 | JZSDK_LOG_ERROR("DGCE_Area注册失败"); |
1097 | } | 1099 | } |
1098 | 1100 | ||
1099 | - IrcDealCfg->DGCE_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1101 | + IrcDealCfg->DGCE_Mark_Data = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1100 | if (IrcDealCfg->DGCE_Mark_Data == NULL) | 1102 | if (IrcDealCfg->DGCE_Mark_Data == NULL) |
1101 | { | 1103 | { |
1102 | JZSDK_LOG_ERROR("DGCE_Mark_Data注册失败"); | 1104 | JZSDK_LOG_ERROR("DGCE_Mark_Data注册失败"); |
1103 | } | 1105 | } |
1104 | 1106 | ||
1105 | - IrcDealCfg->SPC_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1107 | + IrcDealCfg->SPC_Mark_Data = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1106 | if (IrcDealCfg->SPC_Mark_Data == NULL) | 1108 | if (IrcDealCfg->SPC_Mark_Data == NULL) |
1107 | { | 1109 | { |
1108 | JZSDK_LOG_ERROR("SPC_Mark_Data注册失败"); | 1110 | JZSDK_LOG_ERROR("SPC_Mark_Data注册失败"); |
1109 | } | 1111 | } |
1110 | 1112 | ||
1111 | - IrcDealCfg->Factory_HighT_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1113 | + IrcDealCfg->Factory_HighT_Mark_Data = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1112 | if (IrcDealCfg->Factory_HighT_Mark_Data == NULL) | 1114 | if (IrcDealCfg->Factory_HighT_Mark_Data == NULL) |
1113 | { | 1115 | { |
1114 | JZSDK_LOG_ERROR("Factory_HighT_Mark_Data注册失败"); | 1116 | JZSDK_LOG_ERROR("Factory_HighT_Mark_Data注册失败"); |
1115 | } | 1117 | } |
1116 | IrcDealCfg->Factory_HighT_Mark_Data_flag = JZ_FLAGCODE_OFF; | 1118 | IrcDealCfg->Factory_HighT_Mark_Data_flag = JZ_FLAGCODE_OFF; |
1117 | 1119 | ||
1118 | - IrcDealCfg->Factory_LowT_Mark_Data = (U16_t *)malloc(IrcDealCfg->Height * IrcDealCfg->Width * sizeof(U16_t)); | 1120 | + IrcDealCfg->Factory_LowT_Mark_Data = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
1119 | if (IrcDealCfg->Factory_LowT_Mark_Data == NULL) | 1121 | if (IrcDealCfg->Factory_LowT_Mark_Data == NULL) |
1120 | { | 1122 | { |
1121 | JZSDK_LOG_ERROR("Factory_LowT_Mark_Data注册失败"); | 1123 | JZSDK_LOG_ERROR("Factory_LowT_Mark_Data注册失败"); |
@@ -1129,7 +1131,6 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | @@ -1129,7 +1131,6 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | ||
1129 | * | 1131 | * |
1130 | **********************************************************************************************/ | 1132 | **********************************************************************************************/ |
1131 | 1133 | ||
1132 | - | ||
1133 | //填入高温数据 | 1134 | //填入高温数据 |
1134 | IRC_Set_HighTempData(IrcDealCfg); | 1135 | IRC_Set_HighTempData(IrcDealCfg); |
1135 | 1136 |
@@ -39,7 +39,7 @@ extern "C" { | @@ -39,7 +39,7 @@ extern "C" { | ||
39 | #define MAX_TTS_VOLUME 92 | 39 | #define MAX_TTS_VOLUME 92 |
40 | #elif DEVICE_VERSION == JZ_H10 | 40 | #elif DEVICE_VERSION == JZ_H10 |
41 | #define MAX_VOLUME (65) | 41 | #define MAX_VOLUME (65) |
42 | - #define MAX_TTS_VOLUME (70) //115 | 42 | + #define MAX_TTS_VOLUME (70) |
43 | #elif DEVICE_VERSION == JZ_H10T | 43 | #elif DEVICE_VERSION == JZ_H10T |
44 | #define MAX_VOLUME (83) | 44 | #define MAX_VOLUME (83) |
45 | #define MAX_TTS_VOLUME (83) | 45 | #define MAX_TTS_VOLUME (83) |
-
请 注册 或 登录 后发表评论