正在显示
25 个修改的文件
包含
765 行增加
和
681 行删除
@@ -57,7 +57,13 @@ | @@ -57,7 +57,13 @@ | ||
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 | + "mediaproc.h": "c", |
61 | + "jzsdk_network.h": "c", | ||
62 | + "kt_irc.h": "c", | ||
63 | + "rtk_mmp_dec.h": "c", | ||
64 | + "rtk_mmp_enc.h": "c", | ||
65 | + "videostreamtranscode.h": "c", | ||
66 | + "time.h": "c" | ||
61 | }, | 67 | }, |
62 | "Codegeex.GenerationPreference": "automatic", | 68 | "Codegeex.GenerationPreference": "automatic", |
63 | "C_Cpp.dimInactiveRegions": false | 69 | "C_Cpp.dimInactiveRegions": false |
1 | # 编译链的配置 | 1 | # 编译链的配置 |
2 | 2 | ||
3 | #1、编译链与设备类型的选择 | 3 | #1、编译链与设备类型的选择 |
4 | -set(DEVICE_NAME JZ_H150S) | 4 | +set(DEVICE_NAME JZ_C1) |
5 | #上一行为禁止修改行 | 5 | #上一行为禁止修改行 |
6 | 6 | ||
7 | message("**************************JZSDK构建编译开始***************************\n") | 7 | message("**************************JZSDK构建编译开始***************************\n") |
@@ -40,6 +40,13 @@ if(${DEVICE_INFO_MODULE} STREQUAL "VERSION_SWITCH_ON") | @@ -40,6 +40,13 @@ if(${DEVICE_INFO_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
40 | 40 | ||
41 | endif() | 41 | endif() |
42 | 42 | ||
43 | +#如果要加载设备配置 | ||
44 | +if(${DEVICE_CONFIG_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
45 | + message("\n设备配置源码加载中") | ||
46 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}Module/DeviceConfig/*.c) | ||
47 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
48 | +endif() | ||
49 | + | ||
43 | #如果要加载云台模块,需要加载以下附属内容 | 50 | #如果要加载云台模块,需要加载以下附属内容 |
44 | if(${GIMBAL_MODULE} STREQUAL "VERSION_SWITCH_ON") | 51 | if(${GIMBAL_MODULE} STREQUAL "VERSION_SWITCH_ON") |
45 | message("\n云台模块源码加载中") | 52 | message("\n云台模块源码加载中") |
@@ -9,6 +9,9 @@ set(AUDIODEAL_MODULE VERSION_SWITCH_OFF) | @@ -9,6 +9,9 @@ set(AUDIODEAL_MODULE VERSION_SWITCH_OFF) | ||
9 | # 信息模块 | 9 | # 信息模块 |
10 | set(DEVICE_INFO_MODULE VERSION_SWITCH_OFF) | 10 | set(DEVICE_INFO_MODULE VERSION_SWITCH_OFF) |
11 | 11 | ||
12 | +# 设备配置模块 | ||
13 | +set(DEVICE_CONFIG_MODULE VERSION_SWITCH_OFF) | ||
14 | + | ||
12 | # Gimbal 云台处理模块 | 15 | # Gimbal 云台处理模块 |
13 | set(GIMBAL_MODULE VERSION_SWITCH_OFF) | 16 | set(GIMBAL_MODULE VERSION_SWITCH_OFF) |
14 | 17 | ||
@@ -57,12 +60,16 @@ set(IMAGEPROCESSING_MODULE VERSION_SWITCH_OFF) | @@ -57,12 +60,16 @@ set(IMAGEPROCESSING_MODULE VERSION_SWITCH_OFF) | ||
57 | # 添加信息模块 | 60 | # 添加信息模块 |
58 | set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) | 61 | set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) |
59 | 62 | ||
63 | +# 添加设备配置模块 | ||
64 | +set(DEVICE_CONFIG_MODULE VERSION_SWITCH_ON) | ||
65 | + | ||
60 | # 添加UI管理模块 | 66 | # 添加UI管理模块 |
61 | set(UI_CONTROL_MODULE VERSION_SWITCH_ON) | 67 | set(UI_CONTROL_MODULE VERSION_SWITCH_ON) |
62 | 68 | ||
63 | # 添加电源管理模块 | 69 | # 添加电源管理模块 |
64 | set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | 70 | set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) |
65 | 71 | ||
72 | + | ||
66 | message("通用库加载完成") | 73 | message("通用库加载完成") |
67 | 74 | ||
68 | ########################### 独立库加载 ########################################## | 75 | ########################### 独立库加载 ########################################## |
@@ -22,6 +22,7 @@ | @@ -22,6 +22,7 @@ | ||
22 | #include "JZsdk_haldata_deal/JZsdk_data_transmisson.h" | 22 | #include "JZsdk_haldata_deal/JZsdk_data_transmisson.h" |
23 | #include "MediaProc/MediaProc.h" | 23 | #include "MediaProc/MediaProc.h" |
24 | #include "UI_control/WidegMgmt/JZsdk_Widget.h" | 24 | #include "UI_control/WidegMgmt/JZsdk_Widget.h" |
25 | +#include "DeviceConfig/DeviceConfig.h" | ||
25 | 26 | ||
26 | #if APP_VERSION == APP_PSDK | 27 | #if APP_VERSION == APP_PSDK |
27 | #include "fc_subscription/test_fc_subscription.h" | 28 | #include "fc_subscription/test_fc_subscription.h" |
@@ -347,11 +348,8 @@ T_JZsdkReturnCode Main_APP_Psdk() | @@ -347,11 +348,8 @@ T_JZsdkReturnCode Main_APP_Psdk() | ||
347 | 348 | ||
348 | else if (DEVICE_VERSION == JZ_C1) | 349 | else if (DEVICE_VERSION == JZ_C1) |
349 | { | 350 | { |
350 | - //引脚初始化 | ||
351 | - Ircut_Init(); | ||
352 | - | ||
353 | - //视频流模块初始化 | ||
354 | - MediaProc_Init(); | 351 | + //初始化C1 |
352 | + JZC1_Init(); | ||
355 | } | 353 | } |
356 | 354 | ||
357 | 355 |
@@ -7,19 +7,19 @@ | @@ -7,19 +7,19 @@ | ||
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_H150S | 10 | +#define DEVICE_VERSION JZ_C1 |
11 | 11 | ||
12 | //禁止修改行 选择是串口程序 还是 psdk程序 | 12 | //禁止修改行 选择是串口程序 还是 psdk程序 |
13 | #define APP_VERSION APP_PSDK | 13 | #define APP_VERSION APP_PSDK |
14 | 14 | ||
15 | //禁止修改行 板子型号 | 15 | //禁止修改行 板子型号 |
16 | -#define PLATFORM_VERSION PLATFORM_H3 | 16 | +#define PLATFORM_VERSION PLATFORM_V3S |
17 | 17 | ||
18 | //禁止修改行 串口连接程序的软件版本号 | 18 | //禁止修改行 串口连接程序的软件版本号 |
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 0x02 | 22 | +#define DEBUG_VERSION 0x05 |
23 | 23 | ||
24 | //禁止修改行 滤波方式 | 24 | //禁止修改行 滤波方式 |
25 | #define FILTERING_TYPE HIGH_PASS_FILTERING | 25 | #define FILTERING_TYPE HIGH_PASS_FILTERING |
@@ -48,6 +48,7 @@ | @@ -48,6 +48,7 @@ | ||
48 | //是否开启媒体功能 | 48 | //是否开启媒体功能 |
49 | #ifdef MACRO_MEDIA_PROC_MODULE | 49 | #ifdef MACRO_MEDIA_PROC_MODULE |
50 | #define MEDIA_PROC_CONFIG_STATUS VERSION_SWITCH_ON | 50 | #define MEDIA_PROC_CONFIG_STATUS VERSION_SWITCH_ON |
51 | + #define MEDIA_PROC_CONFIG_STATUS_ON | ||
51 | #else | 52 | #else |
52 | #define MEDIA_PROC_CONFIG_STATUS VERSION_SWITCH_OFF | 53 | #define MEDIA_PROC_CONFIG_STATUS VERSION_SWITCH_OFF |
53 | #endif | 54 | #endif |
@@ -103,6 +104,7 @@ | @@ -103,6 +104,7 @@ | ||
103 | 104 | ||
104 | //是否开启媒体管理功能 | 105 | //是否开启媒体管理功能 |
105 | #define MEDIA_PROC_CONFIG_STATUS VERSION_SWITCH_ON | 106 | #define MEDIA_PROC_CONFIG_STATUS VERSION_SWITCH_ON |
107 | + #define MEDIA_PROC_CONFIG_STATUS_ON | ||
106 | 108 | ||
107 | //是否开启红外相机功能 | 109 | //是否开启红外相机功能 |
108 | #define IRC_CONFIG_STATUS VERSION_SWITCH_ON | 110 | #define IRC_CONFIG_STATUS VERSION_SWITCH_ON |
1 | /** | 1 | /** |
2 | ******************************************************************** | 2 | ******************************************************************** |
3 | - * @file Kt_Irc.h | ||
4 | - * Kt_Irc的头文件 | 3 | + * @file DeviceConfig.h |
4 | + * DeviceConfig.h的头文件 | ||
5 | * | 5 | * |
6 | ********************************************************************* | 6 | ********************************************************************* |
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | 9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ |
10 | -#ifndef KT_IRC_H | ||
11 | -#define KT_IRC_H | 10 | +#ifndef DEVICE_CONFIG_H |
11 | +#define DEVICE_CONFIG_H | ||
12 | 12 | ||
13 | -/* Includes ------------------------------------------------------------------*/ | ||
14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 13 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
15 | 14 | ||
15 | +#include "DeviceConfig/JZC1/JZC1.h" | ||
16 | + | ||
17 | + | ||
18 | +/* Includes ------------------------------------------------------------------*/ | ||
16 | #ifdef __cplusplus | 19 | #ifdef __cplusplus |
17 | extern "C" { | 20 | extern "C" { |
18 | #endif | 21 | #endif |
19 | 22 | ||
23 | + | ||
24 | + | ||
20 | /* Exported constants --------------------------------------------------------*/ | 25 | /* Exported constants --------------------------------------------------------*/ |
21 | /* 常亮定义*/ | 26 | /* 常亮定义*/ |
22 | 27 | ||
23 | - | ||
24 | /* Exported types ------------------------------------------------------------*/ | 28 | /* Exported types ------------------------------------------------------------*/ |
25 | 29 | ||
26 | -/* Exported functions --------------------------------------------------------*/ | ||
27 | -T_JZsdkReturnCode JZsdk_Kt_Irc_Camera_Init(); | ||
28 | -T_JZsdkReturnCode JZsdk_Kt_Irc_ShutterSwitch(int value); | ||
29 | - | ||
30 | 30 | ||
31 | #ifdef __cplusplus | 31 | #ifdef __cplusplus |
32 | } | 32 | } |
Module/DeviceConfig/JZC1/JZC1.c
0 → 100644
1 | + | ||
2 | +#include <stdio.h> | ||
3 | +#include <stdlib.h> | ||
4 | +#include <string.h> | ||
5 | +#include <pthread.h> | ||
6 | + | ||
7 | + | ||
8 | +#include "JZsdkLib.h" | ||
9 | +#include "BaseConfig.h" | ||
10 | +#include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" | ||
11 | + | ||
12 | +#include "IRCUT/ircut.h" | ||
13 | + | ||
14 | + | ||
15 | +#ifdef RTK_MPP_STATUS_ON | ||
16 | + | ||
17 | +#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" | ||
21 | +#include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h" | ||
22 | +#include "MediaProc/VideoMgmt/VideoStreamPush/VideoStream_Push.h" | ||
23 | +#include "MediaProc/VideoMgmt/VideoMgmt.h" | ||
24 | +#include "MediaProc/IRC_funtion/IRC_Param.h" | ||
25 | +#include "MediaProc/IRC_funtion/IRC_funtion.h" | ||
26 | +#include "MediaProc/MediaProc_Param.h" | ||
27 | + | ||
28 | +#endif | ||
29 | + | ||
30 | +static void *g_usb_index = NULL; | ||
31 | + | ||
32 | +// 定义 昆腾的 帧头长度和帧头内容 | ||
33 | +#define FRAME_HEADER_SIZE 4 | ||
34 | +static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, 0xdd}; | ||
35 | + | ||
36 | + | ||
37 | +//数据推送函数 | ||
38 | +static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, unsigned int data_len) | ||
39 | +{ | ||
40 | + int currentIndex = VideoMgmt_GetVideoStreamFlowIndexNum(); //获取当前视频流索引 | ||
41 | + //无视频流 | ||
42 | + if (currentIndex == 0) | ||
43 | + { | ||
44 | + //不推送视频 | ||
45 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
46 | + } | ||
47 | + | ||
48 | + //红外相机 | ||
49 | + if (currentIndex == 1 && CameraIndex == 1) | ||
50 | + { | ||
51 | + //推送数据到流转模块 | ||
52 | + VideoMgmt_Single_FrameIn(data, data_len); | ||
53 | + } | ||
54 | + | ||
55 | + //光学相机 | ||
56 | + if(CameraIndex == 2 && currentIndex == 2) | ||
57 | + { | ||
58 | + //推送数据到流转模块 | ||
59 | + VideoMgmt_Single_FrameIn(data, data_len); | ||
60 | + } | ||
61 | + | ||
62 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
63 | +} | ||
64 | + | ||
65 | + | ||
66 | +static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len) | ||
67 | +{ | ||
68 | + //JZSDK_LOG_INFO("JZC1_OptDeal"); | ||
69 | + | ||
70 | +#ifdef RTK_MPP_STATUS_ON | ||
71 | + MppFrame yuv_data = NULL; //用于传递yuv数据的地址 | ||
72 | + MppPacket Packet = NULL; | ||
73 | + | ||
74 | + //输入数据进入解码器 | ||
75 | + RTK_mmp_dec_input(JZsdk_RtkMmpGetDecHandleAddr(1), data, data_len, &yuv_data); | ||
76 | + | ||
77 | + // int width = mpp_frame_get_width(yuv_data); | ||
78 | + // int height = mpp_frame_get_height(yuv_data); | ||
79 | + // int h_stride = mpp_frame_get_hor_stride(yuv_data); | ||
80 | + // int v_stride = mpp_frame_get_ver_stride(yuv_data); | ||
81 | + | ||
82 | + // JZSDK_LOG_INFO("w:%d h:%d hor:%d ver:%d",width,height,h_stride,v_stride); | ||
83 | + | ||
84 | + //将返回的数据输入进编码器 | ||
85 | + RTK_mmp_enc_yuv_to_h264_byFrame(JZsdk_RtkMmpGetEncHandleAddr(1), yuv_data, &Packet); | ||
86 | + | ||
87 | + //获取数据指针与长度 | ||
88 | + int packet_len = mpp_packet_get_length(Packet); | ||
89 | + void *ptr = mpp_packet_get_pos(Packet); | ||
90 | + | ||
91 | + //推送视频流 | ||
92 | + JZC1_PushFrame(2, (unsigned char *)ptr, packet_len); | ||
93 | + | ||
94 | + //释放掉编码图像 | ||
95 | + mpp_packet_deinit(&Packet); | ||
96 | +#endif | ||
97 | + | ||
98 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
99 | +} | ||
100 | + | ||
101 | +//红外数据纠正函数, 暂定全部替换 | ||
102 | +static T_JZsdkReturnCode JZC1_Irc_DataCorrect(unsigned char *data) | ||
103 | +{ | ||
104 | + //像素修正 | ||
105 | + data[0] = data[5]; | ||
106 | + data[1] = data[6]; | ||
107 | + data[2] = data[5]; | ||
108 | + data[3] = data[6]; | ||
109 | +} | ||
110 | + | ||
111 | + | ||
112 | +//在这里将灰度图数据转换成目标数据 | ||
113 | +static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len) | ||
114 | +{ | ||
115 | + //JZSDK_LOG_DEBUG("irc数据处理"); | ||
116 | + | ||
117 | + //红外数据纠正处理 | ||
118 | + JZC1_Irc_DataCorrect(data); | ||
119 | + | ||
120 | + //将灰度图数据转换为原始码流数据 | ||
121 | + unsigned char *raw_data = NULL; | ||
122 | + int raw_data_len = 0; | ||
123 | + IRC_FrameDeal(data, data_len, &raw_data, &raw_data_len); | ||
124 | + | ||
125 | + //将原始码流数据写入到编码器 并转换为h264 | ||
126 | + unsigned char *h264Data = NULL; | ||
127 | + unsigned int h264DataLen = 0; | ||
128 | + | ||
129 | +#ifdef RTK_MPP_STATUS_ON | ||
130 | + MppPacket Packet = NULL; | ||
131 | + | ||
132 | + RTK_mmp_enc_data_to_h264(JZsdk_RtkMmpGetEncHandleAddr(0), raw_data, raw_data_len, &Packet); | ||
133 | + | ||
134 | + h264DataLen = mpp_packet_get_length(Packet); | ||
135 | + h264Data = (unsigned char *)mpp_packet_get_pos(Packet); | ||
136 | + //EncCfg->Packet_eos = mpp_packet_get_eos(packet); | ||
137 | + // printf("获取到编码内容 len:%d\n",packet_len); | ||
138 | + | ||
139 | + //释放掉packet | ||
140 | + mpp_packet_deinit(&Packet); | ||
141 | +#endif | ||
142 | + | ||
143 | + //将h264数据推送 | ||
144 | + JZC1_PushFrame(1, h264Data, h264DataLen); | ||
145 | + | ||
146 | + //释放内存 | ||
147 | + if (raw_data != NULL) | ||
148 | + { | ||
149 | + free(raw_data); | ||
150 | + raw_data = NULL; | ||
151 | + } | ||
152 | + | ||
153 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
154 | +} | ||
155 | + | ||
156 | +//红外数据接收线程 | ||
157 | +static void *JZC1_IrcDataRecv_Thread(void *args) | ||
158 | +{ | ||
159 | + int frame_len = FIRST_WIDTH *2* FIRST_HEIGHT; //163840 | ||
160 | + unsigned char buf[frame_len]; //usb数据缓冲区需要为512的倍数 | ||
161 | + unsigned char frameData[frame_len]; // 存储整帧数据的画面缓冲区 | ||
162 | + unsigned int lineNum = 0; | ||
163 | + int frame = 0; | ||
164 | + int frameDataLen = 0;//缓冲区的数据长度 | ||
165 | + | ||
166 | + /***** | ||
167 | + * | ||
168 | + * 数据格式说明 | ||
169 | + * | ||
170 | + * 帧头 0xaa 0xbb 0x02 0x80 0x01 0x00 + 行数 如第一行0x00 0x01 | ||
171 | + * 数据包长度为 0x0280 | ||
172 | + * 数据包 一包的行数为256 0x0100 | ||
173 | + * 当前数据为第x行 x= 0x0001 | ||
174 | + * 两位数据为一个点 | ||
175 | + * 接着把前4个点的数据 用第五个点替换掉 | ||
176 | + * *****/ | ||
177 | + | ||
178 | + while (1) | ||
179 | + { | ||
180 | + int realLen; | ||
181 | + memset(buf,0,sizeof(buf)); | ||
182 | + T_JZsdkReturnCode ret = JZsdk_HalUsbBulk_ReadData(&g_usb_index, buf, sizeof(buf), &realLen); | ||
183 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
184 | + { | ||
185 | + // 处理读取错误 | ||
186 | + JZSDK_LOG_ERROR("读取错误"); | ||
187 | + continue; | ||
188 | + //return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
189 | + } | ||
190 | + if (realLen != 0) | ||
191 | + { | ||
192 | + //JZSDK_LOG_INFO("读取到%d 字节",realLen); | ||
193 | + } | ||
194 | + | ||
195 | + //寻找数据是否存在帧头 | ||
196 | + for (int i = 0; i < realLen; i++) | ||
197 | + { | ||
198 | + // 验证帧头 | ||
199 | + if (memcmp(buf+i, FRAME_HEADER, FRAME_HEADER_SIZE) != 0) | ||
200 | + { | ||
201 | + // 帧头不匹配,可能是噪声或错误的数据包 | ||
202 | + continue; | ||
203 | + } | ||
204 | + | ||
205 | +/********************** | ||
206 | + * | ||
207 | + * 方法一,将usb缓冲区调整大小 到超过640*256, 然后直接输出整段画面,避免重复复制,节省处理时间 | ||
208 | + * | ||
209 | + * ******************************/ | ||
210 | + //如果查找到帧头 | ||
211 | + | ||
212 | + //查看是否是第0帧 | ||
213 | + if (frame == 0) | ||
214 | + { | ||
215 | + //重置掉画面缓冲区 | ||
216 | + memset(frameData,0,sizeof(frameData)); | ||
217 | + | ||
218 | + //将数据置于缓冲区 | ||
219 | + frameDataLen = (realLen-i); | ||
220 | + memcpy( &frameData[0], buf + i, frameDataLen); | ||
221 | + | ||
222 | + //让画面帧强跳到第一帧 | ||
223 | + frame = 1; | ||
224 | + | ||
225 | + continue; | ||
226 | + } | ||
227 | + | ||
228 | + //如果是第一帧 | ||
229 | + if (frame == 1) | ||
230 | + { | ||
231 | + memcpy( &frameData[frameDataLen], buf, frame_len-frameDataLen ); | ||
232 | + | ||
233 | + JZC1_IrcDeal(frameData, frame_len); | ||
234 | + | ||
235 | + frame = 2; | ||
236 | + frameDataLen = 0; | ||
237 | + //memset(frameData,0,sizeof(frameData)); | ||
238 | + } | ||
239 | + | ||
240 | + | ||
241 | + //如果不是第1帧,且上段数据小于一画面段,说明为数据被切割 | ||
242 | + if ( i<frame_len) | ||
243 | + { | ||
244 | + //则于前端残余数据拼接,并输出 | ||
245 | + if (frame%2==0 && (frame != 1) ) | ||
246 | + { | ||
247 | + | ||
248 | + memcpy( &frameData[frame_len-i], buf, i); | ||
249 | + //将未处理raw数据放入缓冲区 | ||
250 | + | ||
251 | + //JZSDK_LOG_INFO("写入1 %d %x", i, frameData[20]); | ||
252 | + | ||
253 | + JZC1_IrcDeal(frameData, frame_len); | ||
254 | + //JZSDK_LOG_INFO("放入数据到缓冲区"); | ||
255 | + //memset(frameData,0,sizeof(frameData)); | ||
256 | + } | ||
257 | + frame++; | ||
258 | + } | ||
259 | + | ||
260 | + //如果剩余长度超出一画数据,将画面数据整段输出 | ||
261 | + if ( (i + frame_len) < realLen) | ||
262 | + { | ||
263 | + if (frame%2==0) | ||
264 | + { | ||
265 | + //JZSDK_LOG_INFO("写入2"); | ||
266 | + | ||
267 | + memcpy( &frameData[0], buf, frame_len); | ||
268 | + | ||
269 | + //将未处理raw数据放入缓冲区 | ||
270 | + JZC1_IrcDeal(frameData, frame_len); | ||
271 | + //JZSDK_LOG_INFO("放入数据到缓冲区"); | ||
272 | + } | ||
273 | + frame++; | ||
274 | + continue; | ||
275 | + } | ||
276 | + | ||
277 | + //JZSDK_LOG_INFO("i:%d, frame_len:%d realLen:%d frame:%d",i,frame_len,realLen,frame); | ||
278 | + | ||
279 | + //如果剩余数据小于一画,存进画面缓冲区 | ||
280 | + //memset(frameData,0,sizeof(frameData)); | ||
281 | + memcpy(frameData, buf+i, (realLen-i)); | ||
282 | + break; | ||
283 | + } | ||
284 | + } | ||
285 | +} | ||
286 | + | ||
287 | + | ||
288 | +//C1 红外相机数据的初始化 | ||
289 | +static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | ||
290 | +{ | ||
291 | + T_JZsdkReturnCode ret; | ||
292 | + | ||
293 | + //初始化接收的usb口 | ||
294 | + ret = JZsdk_HalUsbBulk_Init(&g_usb_index, 0, 0, LINUX_USB_PID, LINUX_USB_VID, USB_IN_POINT, USB_OUT_POINT); | ||
295 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
296 | + { | ||
297 | + return ret; | ||
298 | + } | ||
299 | + | ||
300 | + //初始化usb接收线程 | ||
301 | + pthread_t ReadDataTask; | ||
302 | + pthread_attr_t task_attribute; //线程属性 | ||
303 | + pthread_attr_init(&task_attribute); //初始化线程属性 | ||
304 | + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
305 | + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZC1_IrcDataRecv_Thread,NULL); //线程 | ||
306 | + if(opus_Protection != 0) | ||
307 | + { | ||
308 | + JZSDK_LOG_ERROR("创建视频usb线程失败!"); | ||
309 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
310 | + } | ||
311 | + | ||
312 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
313 | +} | ||
314 | + | ||
315 | + | ||
316 | + | ||
317 | +//JZ_C1 的媒体初始化 | ||
318 | +static T_JZsdkReturnCode JZC1_MediaInit() | ||
319 | +{ | ||
320 | + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
321 | + | ||
322 | + | ||
323 | +//初始化媒体模块 | ||
324 | +#ifdef MEDIA_PROC_CONFIG_STATUS_ON | ||
325 | + | ||
326 | + //初始化videoMgmt模块 | ||
327 | + VideoMgmt_Init(); | ||
328 | + | ||
329 | + //初始化Mulit模块 | ||
330 | + #ifdef RTK_MPP_STATUS_ON | ||
331 | + //初始化红外的编解码器 | ||
332 | + RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(0), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, FIRST_WIDTH, FIRST_HEIGHT, 25, 5); | ||
333 | + | ||
334 | + //初始化光学的编解码器 | ||
335 | + RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); | ||
336 | + RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); | ||
337 | + #endif | ||
338 | + | ||
339 | + //初始化Camera模块 | ||
340 | + int CameraFd = -1; | ||
341 | + ret = V4l2_Camarainit2(&CameraFd, SECOND_WIDTH, SECOND_HEIGHT, 30); | ||
342 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
343 | + { | ||
344 | + JZSDK_LOG_ERROR("光学相机启动失败"); | ||
345 | + } | ||
346 | + else | ||
347 | + { | ||
348 | + //光学相机的抓取 | ||
349 | + ret = JZsdk_FrameCatch_Single(JZC1_OptDeal); | ||
350 | + } | ||
351 | + | ||
352 | + //初始化IRC_funtion模块 | ||
353 | + ret = IRC_ParamInit(FIRST_HEIGHT, FIRST_WIDTH, 25); | ||
354 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
355 | + { | ||
356 | + JZSDK_LOG_ERROR("初始化红外的数据处理失败"); | ||
357 | + } | ||
358 | + else | ||
359 | + { | ||
360 | + //初始化红外的数据输入 | ||
361 | + ret = JZsdk_JZC1_Irc_Data_Init(); | ||
362 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
363 | + { | ||
364 | + JZSDK_LOG_ERROR("红外相机初始化失败"); | ||
365 | + } | ||
366 | + } | ||
367 | + | ||
368 | + //设置默认参数 | ||
369 | + | ||
370 | + //默认推送红外摄像头 后续改成 红外+光学 的组合画面 | ||
371 | + VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); | ||
372 | + | ||
373 | + //设置快门为开 | ||
374 | + JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON); | ||
375 | + | ||
376 | + //设置伪彩颜色 | ||
377 | + int value = 8; | ||
378 | + Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value); | ||
379 | + | ||
380 | + //设置伪彩模式 | ||
381 | + value = 1; | ||
382 | + Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); | ||
383 | + | ||
384 | +#endif | ||
385 | + | ||
386 | + | ||
387 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
388 | +} | ||
389 | + | ||
390 | + | ||
391 | +T_JZsdkReturnCode JZC1_Init() | ||
392 | +{ | ||
393 | + T_JZsdkReturnCode ret; | ||
394 | + | ||
395 | + //初始化引脚 | ||
396 | + Ircut_Init(); | ||
397 | + | ||
398 | + //初始化媒体模块 | ||
399 | + ret = JZC1_MediaInit(); | ||
400 | + | ||
401 | + JZSDK_LOG_INFO("JZ_C1 INIT COMPLETED\n"); | ||
402 | + | ||
403 | + return ret; | ||
404 | +} | ||
405 | + | ||
406 | + | ||
407 | + | ||
408 | + | ||
409 | + | ||
410 | + | ||
411 | + | ||
412 | + | ||
413 | + | ||
414 | + | ||
415 | + | ||
416 | + | ||
417 | + | ||
418 | + |
Module/DeviceConfig/JZC1/JZC1.h
0 → 100644
1 | +/** | ||
2 | + ******************************************************************** | ||
3 | + * @file JZC1.h | ||
4 | + * JZC1.h的头文件 | ||
5 | + * | ||
6 | + ********************************************************************* | ||
7 | + */ | ||
8 | + | ||
9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
10 | +#ifndef JZC1_H | ||
11 | +#define JZC1_H | ||
12 | + | ||
13 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
14 | + | ||
15 | + | ||
16 | +/* Includes ------------------------------------------------------------------*/ | ||
17 | +#ifdef __cplusplus | ||
18 | +extern "C" { | ||
19 | +#endif | ||
20 | + | ||
21 | + | ||
22 | + | ||
23 | +/* Exported constants --------------------------------------------------------*/ | ||
24 | +/* 常亮定义*/ | ||
25 | + | ||
26 | +/* Exported types ------------------------------------------------------------*/ | ||
27 | + | ||
28 | +T_JZsdkReturnCode JZC1_Init(); | ||
29 | + | ||
30 | + | ||
31 | +#ifdef __cplusplus | ||
32 | +} | ||
33 | +#endif | ||
34 | + | ||
35 | +#endif |
@@ -20,8 +20,8 @@ static int CameraFd = 0; | @@ -20,8 +20,8 @@ static int CameraFd = 0; | ||
20 | //临时方案 后续会改写法合并到t_JZsdk_TaskFuntionInput(搞起来有点麻烦) | 20 | //临时方案 后续会改写法合并到t_JZsdk_TaskFuntionInput(搞起来有点麻烦) |
21 | typedef struct t_FrameCatch_TaskFuntionInput | 21 | typedef struct t_FrameCatch_TaskFuntionInput |
22 | { | 22 | { |
23 | - void (*task_function)(void*); //任务函数指针,用于指定 执行的任务 | ||
24 | - void* data; //数据指针 | 23 | + void (*task_function)(unsigned char*, unsigned int); //任务函数指针,用于指定 执行的任务 |
24 | + unsigned* data; //数据指针 | ||
25 | unsigned int data_size; //数据大小 | 25 | unsigned int data_size; //数据大小 |
26 | } t_FrameCatch_TaskFuntionInput; | 26 | } t_FrameCatch_TaskFuntionInput; |
27 | 27 | ||
@@ -71,12 +71,12 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) | @@ -71,12 +71,12 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) | ||
71 | 71 | ||
72 | if (ThreadMode == 0) | 72 | if (ThreadMode == 0) |
73 | { | 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 | - } | 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 | } | 80 | } |
81 | else if (ThreadMode == 1) | 81 | else if (ThreadMode == 1) |
82 | { | 82 | { |
@@ -92,23 +92,51 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) | @@ -92,23 +92,51 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) | ||
92 | } | 92 | } |
93 | 93 | ||
94 | 94 | ||
95 | +/*******************************************************************************************************************************************/ | ||
96 | + | ||
97 | +//多线程抓取数据线程 | ||
98 | +static void *JZsdk_Catch_MultiThread2(void *args) | ||
99 | +{ | ||
100 | + while (1) | ||
101 | + { | ||
102 | + unsigned int buf_size = 0; | ||
103 | + unsigned char *buf = NULL; | ||
104 | + | ||
105 | + //从相机中读取一张照片 | ||
106 | + V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); | ||
107 | + | ||
108 | + //printf("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); | ||
109 | + | ||
110 | + if (buf == NULL) | ||
111 | + { | ||
112 | + JZSDK_LOG_ERROR("相机数据读取失败"); | ||
113 | + continue; | ||
114 | + } | ||
115 | + | ||
116 | + //放入缓冲池 //将数据放入缓冲池,从而被其他线程使用 | ||
117 | + VideoMgmt_write_data(&args, buf, buf_size); | ||
118 | + | ||
119 | + //归还图片 | ||
120 | + V4L2_CameraFrameRecord_OnlyReturnFrame(); | ||
121 | + } | ||
122 | +} | ||
95 | 123 | ||
96 | 124 | ||
97 | //单线程抓取数据线程 | 125 | //单线程抓取数据线程 |
98 | static void *JZsdk_Catch_SingleThread2(void *args) | 126 | static void *JZsdk_Catch_SingleThread2(void *args) |
99 | { | 127 | { |
100 | t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput *)args; | 128 | t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput *)args; |
129 | + | ||
101 | while (1) | 130 | while (1) |
102 | { | 131 | { |
103 | - task->task_function(); | ||
104 | 132 | ||
105 | unsigned int buf_size = 0; | 133 | unsigned int buf_size = 0; |
106 | unsigned char *buf = NULL; | 134 | unsigned char *buf = NULL; |
107 | - | 135 | + |
108 | //从相机中读取一张照片 | 136 | //从相机中读取一张照片 |
109 | V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); | 137 | V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); |
110 | 138 | ||
111 | - //printf("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); | 139 | + //JZSDK_LOG_INFO("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); |
112 | 140 | ||
113 | if (buf == NULL) | 141 | if (buf == NULL) |
114 | { | 142 | { |
@@ -117,9 +145,7 @@ static void *JZsdk_Catch_SingleThread2(void *args) | @@ -117,9 +145,7 @@ static void *JZsdk_Catch_SingleThread2(void *args) | ||
117 | } | 145 | } |
118 | 146 | ||
119 | //进行数据处理 | 147 | //进行数据处理 |
120 | - VideoMgmt_Single_FrameIn(buf, buf_size); | ||
121 | - | ||
122 | - task->task_function(); | 148 | + task->task_function(buf, buf_size); |
123 | 149 | ||
124 | //归还图片 | 150 | //归还图片 |
125 | V4L2_CameraFrameRecord_OnlyReturnFrame(); | 151 | V4L2_CameraFrameRecord_OnlyReturnFrame(); |
@@ -130,13 +156,12 @@ static void *JZsdk_Catch_SingleThread2(void *args) | @@ -130,13 +156,12 @@ static void *JZsdk_Catch_SingleThread2(void *args) | ||
130 | /******************************************** | 156 | /******************************************** |
131 | * | 157 | * |
132 | * | 158 | * |
133 | - * 相机抓取初始化 | 159 | + * 相机抓取多线程单线程 |
134 | * | 160 | * |
135 | - * 传入线程的抓取模式 ThreadMode: 0为单线程 1为多线程 | ||
136 | * 传入线程的处理函数 task_function | 161 | * 传入线程的处理函数 task_function |
137 | * | 162 | * |
138 | * *****************************************/ | 163 | * *****************************************/ |
139 | -T_JZsdkReturnCode JZsdk_FrameCatch_Init2(int ThreadMode, T_JZsdkReturnCode (*task_function)(void*)) | 164 | +T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(unsigned char*, unsigned int)) |
140 | { | 165 | { |
141 | T_JZsdkReturnCode ret; | 166 | T_JZsdkReturnCode ret; |
142 | 167 | ||
@@ -146,34 +171,61 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init2(int ThreadMode, T_JZsdkReturnCode (*tas | @@ -146,34 +171,61 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init2(int ThreadMode, T_JZsdkReturnCode (*tas | ||
146 | pthread_attr_init(&task_attribute); //初始化线程属性 | 171 | pthread_attr_init(&task_attribute); //初始化线程属性 |
147 | pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | 172 | pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 |
148 | 173 | ||
174 | + | ||
175 | + //单线程模式 | ||
176 | + if (task_function == NULL) | ||
177 | + { | ||
178 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
179 | + } | ||
180 | + | ||
149 | t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput*)malloc(sizeof(t_FrameCatch_TaskFuntionInput)); | 181 | t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput*)malloc(sizeof(t_FrameCatch_TaskFuntionInput)); |
150 | if (task == NULL) | 182 | if (task == NULL) |
151 | { | 183 | { |
152 | // 处理内存分配失败的情况 | 184 | // 处理内存分配失败的情况 |
153 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 185 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; |
154 | } | 186 | } |
155 | 187 | ||
156 | task->task_function = task_function; | 188 | task->task_function = task_function; |
157 | - task->args = NULL; | ||
158 | 189 | ||
159 | - if (ThreadMode == 0) | 190 | + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread2,(void *)task); //线程 |
191 | + if(opus_Protection != 0) | ||
160 | { | 192 | { |
161 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,(void *)task); //线程 | ||
162 | - if(opus_Protection != 0) | ||
163 | - { | ||
164 | - JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); | ||
165 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
166 | - } | 193 | + JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); |
194 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
167 | } | 195 | } |
168 | - else if (ThreadMode == 1) | 196 | + |
197 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
198 | +} | ||
199 | + | ||
200 | +/************************* | ||
201 | + * | ||
202 | + * | ||
203 | + * 相机抓取多线程 | ||
204 | + * | ||
205 | + * | ||
206 | + * ******************/ | ||
207 | +T_JZsdkReturnCode JZsdk_FrameCatch_Multi(void *FrameIndex) | ||
208 | +{ | ||
209 | + T_JZsdkReturnCode ret; | ||
210 | + | ||
211 | + //初始化数据接收线程 | ||
212 | + pthread_t ReadDataTask; | ||
213 | + pthread_attr_t task_attribute; //线程属性 | ||
214 | + pthread_attr_init(&task_attribute); //初始化线程属性 | ||
215 | + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
216 | + | ||
217 | + if (FrameIndex == NULL) | ||
169 | { | 218 | { |
170 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,(void *)task); //线程 | ||
171 | - if(opus_Protection != 0) | ||
172 | - { | ||
173 | - JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); | ||
174 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
175 | - } | 219 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; |
176 | } | 220 | } |
177 | 221 | ||
222 | + | ||
223 | + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread2, FrameIndex); //线程 | ||
224 | + if(opus_Protection != 0) | ||
225 | + { | ||
226 | + JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); | ||
227 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
228 | + } | ||
229 | + | ||
178 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 230 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
179 | } | 231 | } |
@@ -25,7 +25,8 @@ extern "C" { | @@ -25,7 +25,8 @@ extern "C" { | ||
25 | 25 | ||
26 | /* Exported functions --------------------------------------------------------*/ | 26 | /* Exported functions --------------------------------------------------------*/ |
27 | T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode); | 27 | T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode); |
28 | - | 28 | +T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(unsigned char*, unsigned int)); |
29 | +T_JZsdkReturnCode JZsdk_FrameCatch_Multi(void *FrameIndex); | ||
29 | 30 | ||
30 | 31 | ||
31 | #ifdef __cplusplus | 32 | #ifdef __cplusplus |
@@ -8,9 +8,9 @@ | @@ -8,9 +8,9 @@ | ||
8 | #include "./Camera.h" | 8 | #include "./Camera.h" |
9 | #include "version_choose.h" | 9 | #include "version_choose.h" |
10 | #include "BaseConfig.h" | 10 | #include "BaseConfig.h" |
11 | -#include "./Kt_Irc/Kt_Irc.h" | ||
12 | #include "../ImageProc/PseudoColor/PseudoColor.h" | 11 | #include "../ImageProc/PseudoColor/PseudoColor.h" |
13 | #include "MediaProc/MediaProc_Param.h" | 12 | #include "MediaProc/MediaProc_Param.h" |
13 | +#include "Ircut/ircut.h" | ||
14 | 14 | ||
15 | #include "MediaProc/IRC_funtion/IRC_funtion.h" | 15 | #include "MediaProc/IRC_funtion/IRC_funtion.h" |
16 | 16 | ||
@@ -68,6 +68,8 @@ T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_n | @@ -68,6 +68,8 @@ T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_n | ||
68 | 68 | ||
69 | } | 69 | } |
70 | 70 | ||
71 | + | ||
72 | + | ||
71 | //快门开关 | 73 | //快门开关 |
72 | /*********************************** | 74 | /*********************************** |
73 | * | 75 | * |
@@ -79,7 +81,20 @@ T_JZsdkReturnCode JZsdk_Camera_ShutterSwitch(int value) | @@ -79,7 +81,20 @@ T_JZsdkReturnCode JZsdk_Camera_ShutterSwitch(int value) | ||
79 | { | 81 | { |
80 | T_JZsdkReturnCode ret; | 82 | T_JZsdkReturnCode ret; |
81 | #if DEVICE_VERSION == JZ_C1 | 83 | #if DEVICE_VERSION == JZ_C1 |
82 | - ret = JZsdk_Kt_Irc_ShutterSwitch(value); | 84 | + |
85 | + if (value == JZ_FLAGCODE_ON) | ||
86 | + { | ||
87 | + ret = SysfsGPIO_Set_ircut(KT_IRC_SHUTTER_GPIO_NUM, 1); | ||
88 | + } | ||
89 | + else if (value == JZ_FLAGCODE_OFF) | ||
90 | + { | ||
91 | + ret = SysfsGPIO_Set_ircut(KT_IRC_SHUTTER_GPIO_NUM, 0); | ||
92 | + } | ||
93 | + else | ||
94 | + { | ||
95 | + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
96 | + } | ||
97 | + | ||
83 | #else | 98 | #else |
84 | ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 99 | ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
85 | #endif | 100 | #endif |
Module/MediaProc/Camera/JZC1/JZC1.c
已删除
100644 → 0
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 | -} |
Module/MediaProc/Camera/Kt_Irc/Kt_Irc.c
已删除
100644 → 0
1 | -#include <stdio.h> | ||
2 | -#include <string.h> | ||
3 | -#include <stdlib.h> | ||
4 | -#include <pthread.h> | ||
5 | -#include <unistd.h> | ||
6 | - | ||
7 | -#include "JZsdkLib.h" | ||
8 | -#include "version_choose.h" | ||
9 | -#include "BaseConfig.h" | ||
10 | - | ||
11 | - | ||
12 | -#include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" | ||
13 | -#include "../V4L2_camera/V4L2_Record.h" | ||
14 | -#include "../../MultProc/MultProc.h" | ||
15 | -#include "../../MediaParm.h" | ||
16 | -#include "../../VideoMgmt/VideoMgmt.h" | ||
17 | -#include "Ircut/ircut.h" | ||
18 | -#include "../Camera.h" | ||
19 | - | ||
20 | -#include "UI_control/UI_control.h" | ||
21 | -#include "../../IRC_funtion/IRC_Param.h" | ||
22 | -#include "../../IRC_funtion/IRC_funtion.h" | ||
23 | - | ||
24 | -#define IRC_WIDTH FIRST_WIDTH | ||
25 | -#define IRC_HEIGHT FIRST_HEIGHT | ||
26 | - | ||
27 | -#define CAMERA_WIDTH SECOND_WIDTH | ||
28 | -#define CAMERA_HEIGHT SECOND_HEIGHT | ||
29 | - | ||
30 | -static int Kt_Camera_fd; | ||
31 | - | ||
32 | -extern IRC_param *g_IRC_Param; | ||
33 | - | ||
34 | - | ||
35 | -#define IRC_WIDTH FIRST_WIDTH | ||
36 | -#define IRC_HEIGHT FIRST_HEIGHT | ||
37 | - | ||
38 | -// 定义帧头长度和帧头内容 | ||
39 | -#define FRAME_HEADER_SIZE 4 | ||
40 | - | ||
41 | -static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, 0xdd}; | ||
42 | - | ||
43 | - | ||
44 | -static void *Irc_usb_index = NULL; | ||
45 | - | ||
46 | -//红外数据纠正函数, 暂定全部替换 | ||
47 | -T_JZsdkReturnCode Kt_Irc_DataCorrect(unsigned char *data) | ||
48 | -{ | ||
49 | - //像素修正 | ||
50 | - data[0] = data[5]; | ||
51 | - data[1] = data[6]; | ||
52 | - data[2] = data[5]; | ||
53 | - data[3] = data[6]; | ||
54 | -} | ||
55 | - | ||
56 | - | ||
57 | -//红外数据接收线程 | ||
58 | -static void *JZsdk_Kt_Irc_DataRecv_Thread(void *args) | ||
59 | -{ | ||
60 | - int frame_len = IRC_WIDTH*2*IRC_HEIGHT; //163840 | ||
61 | - unsigned char buf[163840]; //usb数据缓冲区需要为512的倍数 4194304 后续考虑为 262144 | ||
62 | - unsigned char frameData[frame_len]; // 存储整帧数据的画面缓冲区 | ||
63 | - unsigned int lineNum = 0; | ||
64 | - int frame = 0; | ||
65 | - int frameDataLen = 0;//缓冲区的数据长度 | ||
66 | - | ||
67 | - /***** | ||
68 | - * | ||
69 | - * 数据格式说明 | ||
70 | - * | ||
71 | - * 帧头 0xaa 0xbb 0x02 0x80 0x01 0x00 + 行数 如第一行0x00 0x01 | ||
72 | - * 数据包长度为 0x0280 | ||
73 | - * 数据包 一包的行数为256 0x0100 | ||
74 | - * 当前数据为第x行 x= 0x0001 | ||
75 | - * 两位数据为一个点 | ||
76 | - * 接着把前4个点的数据 用第五个点替换掉 | ||
77 | - * *****/ | ||
78 | - | ||
79 | - while (1) | ||
80 | - { | ||
81 | - int realLen; | ||
82 | - memset(buf,0,sizeof(buf)); | ||
83 | - T_JZsdkReturnCode ret = JZsdk_HalUsbBulk_ReadData(&Irc_usb_index, buf, sizeof(buf), &realLen); | ||
84 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
85 | - { | ||
86 | - // 处理读取错误 | ||
87 | - JZSDK_LOG_ERROR("读取错误"); | ||
88 | - continue; | ||
89 | - //return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
90 | - } | ||
91 | - if (realLen != 0) | ||
92 | - { | ||
93 | - //JZSDK_LOG_INFO("读取到%d 字节",realLen); | ||
94 | - } | ||
95 | - | ||
96 | - //寻找数据是否存在帧头 | ||
97 | - for (int i = 0; i < realLen; i++) | ||
98 | - { | ||
99 | - // 验证帧头 | ||
100 | - if (memcmp(buf+i, FRAME_HEADER, FRAME_HEADER_SIZE) != 0) | ||
101 | - { | ||
102 | - // 帧头不匹配,可能是噪声或错误的数据包 | ||
103 | - continue; | ||
104 | - } | ||
105 | - | ||
106 | -/********************** | ||
107 | - * | ||
108 | - * 方法一,将usb缓冲区调整大小 到超过640*256, 然后直接输出整段画面,避免重复复制,节省处理时间 | ||
109 | - * | ||
110 | - * ******************************/ | ||
111 | - //如果查找到帧头 | ||
112 | - | ||
113 | - //查看是否是第0帧 | ||
114 | - if (frame == 0) | ||
115 | - { | ||
116 | - //重置掉画面缓冲区 | ||
117 | - memset(frameData,0,sizeof(frameData)); | ||
118 | - | ||
119 | - //将数据置于缓冲区 | ||
120 | - frameDataLen = (realLen-i); | ||
121 | - memcpy( &frameData[0], buf + i, frameDataLen); | ||
122 | - | ||
123 | - //让画面帧强跳到第一帧 | ||
124 | - frame = 1; | ||
125 | - | ||
126 | - continue; | ||
127 | - } | ||
128 | - | ||
129 | - //如果是第一帧 | ||
130 | - if (frame == 1) | ||
131 | - { | ||
132 | - memcpy( &frameData[frameDataLen], buf, frame_len-frameDataLen ); | ||
133 | - | ||
134 | - VideoMgmt_write_data(&VideoMgmt_FirstRaw_index, frameData, frame_len); | ||
135 | - | ||
136 | - frame = 2; | ||
137 | - frameDataLen = 0; | ||
138 | - //memset(frameData,0,sizeof(frameData)); | ||
139 | - } | ||
140 | - | ||
141 | - | ||
142 | - //如果不是第1帧,且上段数据小于一画面段,说明为数据被切割 | ||
143 | - if ( i<frame_len) | ||
144 | - { | ||
145 | - //则于前端残余数据拼接,并输出 | ||
146 | - if (frame%2==0 && (frame != 1) ) | ||
147 | - { | ||
148 | - | ||
149 | - memcpy( &frameData[frame_len-i], buf, i); | ||
150 | - //将未处理raw数据放入缓冲区 | ||
151 | - | ||
152 | - //JZSDK_LOG_INFO("写入1 %d %x", i, frameData[20]); | ||
153 | - | ||
154 | - VideoMgmt_write_data(&VideoMgmt_FirstRaw_index, frameData, frame_len); | ||
155 | - //JZSDK_LOG_INFO("放入数据到缓冲区"); | ||
156 | - //memset(frameData,0,sizeof(frameData)); | ||
157 | - } | ||
158 | - frame++; | ||
159 | - } | ||
160 | - | ||
161 | - //如果剩余长度超出一画数据,将画面数据整段输出 | ||
162 | - if ( (i + frame_len) < realLen) | ||
163 | - { | ||
164 | - if (frame%2==0) | ||
165 | - { | ||
166 | - //JZSDK_LOG_INFO("写入2"); | ||
167 | - | ||
168 | - memcpy( &frameData[0], buf, frame_len); | ||
169 | - | ||
170 | - //将未处理raw数据放入缓冲区 | ||
171 | - VideoMgmt_write_data(&VideoMgmt_FirstRaw_index, frameData, frame_len); | ||
172 | - //JZSDK_LOG_INFO("放入数据到缓冲区"); | ||
173 | - } | ||
174 | - frame++; | ||
175 | - continue; | ||
176 | - } | ||
177 | - | ||
178 | - //JZSDK_LOG_INFO("i:%d, frame_len:%d realLen:%d frame:%d",i,frame_len,realLen,frame); | ||
179 | - | ||
180 | - //如果剩余数据小于一画,存进画面缓冲区 | ||
181 | - //memset(frameData,0,sizeof(frameData)); | ||
182 | - memcpy(frameData, buf+i, (realLen-i)); | ||
183 | - break; | ||
184 | - } | ||
185 | - } | ||
186 | -} | ||
187 | - | ||
188 | -//红外相机数据的初始化 | ||
189 | -T_JZsdkReturnCode JZsdk_Kt_Irc_Data_Init() | ||
190 | -{ | ||
191 | - T_JZsdkReturnCode ret; | ||
192 | - | ||
193 | - //初始化接收的usb口 | ||
194 | - ret = JZsdk_HalUsbBulk_Init(&Irc_usb_index, 0, 0, LINUX_USB_PID, LINUX_USB_VID, USB_IN_POINT, USB_OUT_POINT); | ||
195 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
196 | - { | ||
197 | - return ret; | ||
198 | - } | ||
199 | - | ||
200 | - //初始化usb接收线程 | ||
201 | - pthread_t ReadDataTask; | ||
202 | - pthread_attr_t task_attribute; //线程属性 | ||
203 | - pthread_attr_init(&task_attribute); //初始化线程属性 | ||
204 | - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
205 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Kt_Irc_DataRecv_Thread,NULL); //线程 | ||
206 | - if(opus_Protection != 0) | ||
207 | - { | ||
208 | - JZSDK_LOG_ERROR("创建视频usb线程失败!"); | ||
209 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
210 | - } | ||
211 | - | ||
212 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
213 | -} | ||
214 | - | ||
215 | - | ||
216 | -//红外数据的处理 | ||
217 | -static void *JZsdk_Kt_Irc_DataDeal_Thread(void *args) | ||
218 | -{ | ||
219 | - int DealFrameNum = 0; | ||
220 | - unsigned char BaseBuffer[IRC_WIDTH*2*IRC_HEIGHT]; | ||
221 | - | ||
222 | - while (1) | ||
223 | - { | ||
224 | - unsigned char *gary_data = NULL; | ||
225 | - unsigned int gary_data_len; | ||
226 | - //1、从原始流缓冲区中取出raw数据 | ||
227 | - VideoMgmt_read_data(&VideoMgmt_FirstRaw_index, &gary_data, &gary_data_len,JZ_FLAGCODE_OFF ,JZ_FLAGCODE_OFF); | ||
228 | - | ||
229 | - //2、红外数据纠正处理 | ||
230 | - Kt_Irc_DataCorrect(gary_data); | ||
231 | - | ||
232 | - //3、将灰度图数据转换为原始码流数据 | ||
233 | - unsigned char *raw_data = NULL; | ||
234 | - int raw_data_len = 0; | ||
235 | - IRC_FrameDeal(gary_data, gary_data_len, &raw_data, &raw_data_len); | ||
236 | - | ||
237 | - //4、将原始码流数据转换成h264流,为避免多次复制,这里的h264会直接放入视频流管理的缓冲区 | ||
238 | - JZsdk_RTKMMP_RawData_to_h264(raw_data, raw_data_len); | ||
239 | - | ||
240 | - //5、释放内存 | ||
241 | - if (raw_data != NULL) | ||
242 | - { | ||
243 | - if (raw_data != NULL) | ||
244 | - { | ||
245 | - free(raw_data); | ||
246 | - raw_data = NULL; | ||
247 | - } | ||
248 | - | ||
249 | - if (gary_data != NULL) | ||
250 | - { | ||
251 | - } | ||
252 | - | ||
253 | - if (gary_data != NULL) | ||
254 | - { | ||
255 | - free(gary_data); | ||
256 | - gary_data = NULL; | ||
257 | - } | ||
258 | - } | ||
259 | - | ||
260 | - //JZSDK_LOG_DEBUG("得到了一帧红外h264"); | ||
261 | - } | ||
262 | -} | ||
263 | - | ||
264 | -//红外相机数据的处理线程 | ||
265 | -static T_JZsdkReturnCode JZsdk_Kt_Irc_DataDeal_Init() | ||
266 | -{ | ||
267 | - pthread_t ReadDataTask; | ||
268 | - pthread_attr_t task_attribute; //线程属性 | ||
269 | - pthread_attr_init(&task_attribute); //初始化线程属性 | ||
270 | - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
271 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Kt_Irc_DataDeal_Thread,NULL); //线程 | ||
272 | - if(opus_Protection != 0) | ||
273 | - { | ||
274 | - JZSDK_LOG_ERROR("创建红外相机数据的处理线程失败!"); | ||
275 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
276 | - } | ||
277 | - | ||
278 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
279 | -} | ||
280 | - | ||
281 | -//光学相机数据的处理线程 | ||
282 | -static void *JZsdk_Kt_Cam_DataDeal_Thread(void *args) | ||
283 | -{ | ||
284 | - int DealFrameNum = 0; | ||
285 | - while (1) | ||
286 | - { | ||
287 | - unsigned char *raw_data = NULL; | ||
288 | - unsigned int raw_data_len; | ||
289 | - //1、从原始流缓冲区中取出raw数据 | ||
290 | - VideoMgmt_read_data(&VideoMgmt_SecondRaw_index, &raw_data, &raw_data_len,JZ_FLAGCODE_OFF ,JZ_FLAGCODE_OFF); | ||
291 | - | ||
292 | - //2、将raw数据流转换成h264流,并放置到视频流缓冲区 | ||
293 | - JZsdk_Kt_CamMMP_Mjpeg_to_h264(raw_data, raw_data_len); | ||
294 | - | ||
295 | - free(raw_data); | ||
296 | - raw_data = NULL; | ||
297 | - | ||
298 | - //DealFrameNum++; | ||
299 | - //printf("get Cam Frame%d\n",DealFrameNum); | ||
300 | - | ||
301 | - } | ||
302 | -} | ||
303 | - | ||
304 | -//光学相机数据的处理线程 | ||
305 | -static T_JZsdkReturnCode JZsdk_Kt_Cam_DataDeal_Init() | ||
306 | -{ | ||
307 | - pthread_t ReadDataTask; | ||
308 | - pthread_attr_t task_attribute; //线程属性 | ||
309 | - pthread_attr_init(&task_attribute); //初始化线程属性 | ||
310 | - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
311 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Kt_Cam_DataDeal_Thread,NULL); //线程 | ||
312 | - if(opus_Protection != 0) | ||
313 | - { | ||
314 | - JZSDK_LOG_ERROR("创建红外相机数据的处理线程失败!"); | ||
315 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
316 | - } | ||
317 | - | ||
318 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
319 | -} | ||
320 | - | ||
321 | -//光学相机数据读取线程 | ||
322 | -static void *JZsdk_Kt_Cam_Data_Thread(void *args) | ||
323 | -{ | ||
324 | - while (1) | ||
325 | - { | ||
326 | - unsigned int buf_size = 0; | ||
327 | - unsigned char *buf = NULL; | ||
328 | - | ||
329 | - //从相机中读取一张照片 | ||
330 | - V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); | ||
331 | - | ||
332 | - if (buf == NULL) | ||
333 | - { | ||
334 | - JZSDK_LOG_ERROR("相机数据读取失败"); | ||
335 | - continue; | ||
336 | - } | ||
337 | - | ||
338 | - | ||
339 | - //放入缓冲池 | ||
340 | - VideoMgmt_write_data(&VideoMgmt_SecondRaw_index, buf, buf_size); | ||
341 | - | ||
342 | - //归还图片 | ||
343 | - V4L2_CameraFrameRecord_OnlyReturnFrame(); | ||
344 | - } | ||
345 | -} | ||
346 | - | ||
347 | -//光学相机初始化 | ||
348 | -static T_JZsdkReturnCode JZsdk_Kt_Camera_Init() | ||
349 | -{ | ||
350 | - T_JZsdkReturnCode ret; | ||
351 | - | ||
352 | - //初始化摄像头 | ||
353 | - ret = V4l2_Camarainit2(&Kt_Camera_fd,CAMERA_WIDTH,CAMERA_HEIGHT,30); | ||
354 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
355 | - { | ||
356 | - return ret; | ||
357 | - } | ||
358 | - | ||
359 | - | ||
360 | - //初始化数据接收线程 | ||
361 | - pthread_t ReadDataTask; | ||
362 | - pthread_attr_t task_attribute; //线程属性 | ||
363 | - pthread_attr_init(&task_attribute); //初始化线程属性 | ||
364 | - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
365 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Kt_Cam_Data_Thread,NULL); //线程 | ||
366 | - if(opus_Protection != 0) | ||
367 | - { | ||
368 | - JZSDK_LOG_ERROR("创建v4l2线程失败!"); | ||
369 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
370 | - } | ||
371 | - | ||
372 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
373 | -} | ||
374 | - | ||
375 | -//昆腾相机初始化 | ||
376 | -T_JZsdkReturnCode JZsdk_Kt_Irc_Camera_Init() | ||
377 | -{ | ||
378 | - T_JZsdkReturnCode ret; | ||
379 | - | ||
380 | - //1、初始化光学相机 | ||
381 | - ret = JZsdk_Kt_Camera_Init(); | ||
382 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
383 | - { | ||
384 | - JZSDK_LOG_ERROR("光学相机初始化失败"); | ||
385 | - } | ||
386 | - else | ||
387 | - { | ||
388 | - //初始化数据转换模块 | ||
389 | - JZsdk_Kt_Cam_DataDeal_Init(); | ||
390 | - } | ||
391 | - | ||
392 | - //2、初始化红外的数据处理 | ||
393 | - ret = IRC_ParamInit(&g_IRC_Param, IRC_HEIGHT, IRC_WIDTH, 25); | ||
394 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
395 | - { | ||
396 | - JZSDK_LOG_ERROR("初始化红外的数据处理失败"); | ||
397 | - } | ||
398 | - | ||
399 | - //3、初始化红外的数据输入 | ||
400 | - ret = JZsdk_Kt_Irc_Data_Init(); | ||
401 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
402 | - { | ||
403 | - JZSDK_LOG_ERROR("红外相机初始化失败"); | ||
404 | - } | ||
405 | - else | ||
406 | - { | ||
407 | - //初始化数据转换模块 | ||
408 | - JZsdk_Kt_Irc_DataDeal_Init(); | ||
409 | - } | ||
410 | - | ||
411 | - JZSDK_LOG_INFO("KT_Irc init complete"); | ||
412 | - | ||
413 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
414 | -} | ||
415 | - | ||
416 | -//昆腾的红外相机的快门开关 | ||
417 | -/*********************************** | ||
418 | - * | ||
419 | - * value on为开 off为关 | ||
420 | - * | ||
421 | - * | ||
422 | - * ***************************************/ | ||
423 | -T_JZsdkReturnCode JZsdk_Kt_Irc_ShutterSwitch(int value) | ||
424 | -{ | ||
425 | - T_JZsdkReturnCode ret; | ||
426 | - if (value == JZ_FLAGCODE_ON) | ||
427 | - { | ||
428 | - ret = SysfsGPIO_Set_ircut(KT_IRC_SHUTTER_GPIO_NUM, 1); | ||
429 | - } | ||
430 | - else if (value == JZ_FLAGCODE_OFF) | ||
431 | - { | ||
432 | - ret = SysfsGPIO_Set_ircut(KT_IRC_SHUTTER_GPIO_NUM, 0); | ||
433 | - } | ||
434 | - else | ||
435 | - { | ||
436 | - ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
437 | - } | ||
438 | - | ||
439 | - return ret; | ||
440 | -} | ||
441 | - |
@@ -30,11 +30,11 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | @@ -30,11 +30,11 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | ||
30 | 备注: | 30 | 备注: |
31 | 31 | ||
32 | */ | 32 | */ |
33 | -T_JZsdkReturnCode IRC_ParamInit(struct IRC_param **index, int height, int width, int frameRate) | 33 | +T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate) |
34 | { | 34 | { |
35 | T_JZsdkReturnCode ret; | 35 | T_JZsdkReturnCode ret; |
36 | 36 | ||
37 | - IRC_param_Init(index, height, width, frameRate); | 37 | + ret = IRC_param_Init(&g_IRC_Param, height, width, frameRate); |
38 | 38 | ||
39 | if (g_IRC_Param->DealWay ==IRC_DEALMODE_KTLIB) | 39 | if (g_IRC_Param->DealWay ==IRC_DEALMODE_KTLIB) |
40 | { | 40 | { |
@@ -66,7 +66,7 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize, | @@ -66,7 +66,7 @@ static T_JZsdkReturnCode IRC_data_PreliminaryDeal(U8_t *rawData , int dataSize, | ||
66 | ret = JZsdk_Merge_U8_to_U16_byReverse(rawData, dataSize, returnData, returnDataSize); | 66 | ret = JZsdk_Merge_U8_to_U16_byReverse(rawData, dataSize, returnData, returnDataSize); |
67 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS || *returnDataSize != dealInfo->PixelNum) | 67 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS || *returnDataSize != dealInfo->PixelNum) |
68 | { | 68 | { |
69 | - JZSDK_LOG_ERROR("像素合成失败"); | 69 | + JZSDK_LOG_ERROR("像素合成失败, ret:0x%x dataSize:%d returnDataSize:%d PixelNum:%d", ret, dataSize,*returnDataSize, dealInfo->PixelNum); |
70 | return ret; | 70 | return ret; |
71 | } | 71 | } |
72 | 72 |
@@ -26,7 +26,7 @@ extern "C" { | @@ -26,7 +26,7 @@ extern "C" { | ||
26 | 26 | ||
27 | /* Exported functions --------------------------------------------------------*/ | 27 | /* Exported functions --------------------------------------------------------*/ |
28 | 28 | ||
29 | -T_JZsdkReturnCode IRC_ParamInit(struct IRC_param **index, int height, int width, int frameRate); | 29 | +T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate); |
30 | T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize); | 30 | T_JZsdkReturnCode IRC_FrameDeal(unsigned char *rawData ,unsigned int dataSize, unsigned char **outData, unsigned int *outDataSize); |
31 | 31 | ||
32 | T_JZsdkReturnCode IRC_SetRawPixel_ResetFlag(); | 32 | T_JZsdkReturnCode IRC_SetRawPixel_ResetFlag(); |
@@ -116,6 +116,7 @@ T_JZsdkReturnCode PseudoColor_Gray2Rgb(U8_t *in_str, U8_t **out_str, unsigned in | @@ -116,6 +116,7 @@ T_JZsdkReturnCode PseudoColor_Gray2Rgb(U8_t *in_str, U8_t **out_str, unsigned in | ||
116 | { | 116 | { |
117 | if (P_Color_FinishFlag != JZ_FLAGCODE_ON) | 117 | if (P_Color_FinishFlag != JZ_FLAGCODE_ON) |
118 | { | 118 | { |
119 | + JZSDK_LOG_ERROR("伪彩配置文件未初始化"); | ||
119 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 120 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
120 | } | 121 | } |
121 | 122 | ||
@@ -123,6 +124,7 @@ T_JZsdkReturnCode PseudoColor_Gray2Rgb(U8_t *in_str, U8_t **out_str, unsigned in | @@ -123,6 +124,7 @@ T_JZsdkReturnCode PseudoColor_Gray2Rgb(U8_t *in_str, U8_t **out_str, unsigned in | ||
123 | *out_str = (unsigned char*)malloc(*out_str_len * sizeof(unsigned char)); | 124 | *out_str = (unsigned char*)malloc(*out_str_len * sizeof(unsigned char)); |
124 | if (out_str == NULL) | 125 | if (out_str == NULL) |
125 | { | 126 | { |
127 | + JZSDK_LOG_ERROR("内存分配失败"); | ||
126 | return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | 128 | return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; |
127 | } | 129 | } |
128 | 130 |
@@ -12,7 +12,6 @@ | @@ -12,7 +12,6 @@ | ||
12 | #include "./MultProc/MultProc.h" | 12 | #include "./MultProc/MultProc.h" |
13 | #include "./MediaParm.h" | 13 | #include "./MediaParm.h" |
14 | #include "./Camera/Camera.h" | 14 | #include "./Camera/Camera.h" |
15 | -#include "./Camera/Kt_Irc/Kt_Irc.h" | ||
16 | 15 | ||
17 | //单线程方案 | 16 | //单线程方案 |
18 | static T_JZsdkReturnCode MediaProc_SingleThreading() | 17 | static T_JZsdkReturnCode MediaProc_SingleThreading() |
@@ -26,13 +25,6 @@ static T_JZsdkReturnCode MediaProc_SingleThreading() | @@ -26,13 +25,6 @@ static T_JZsdkReturnCode MediaProc_SingleThreading() | ||
26 | //2、转码模块初始化 | 25 | //2、转码模块初始化 |
27 | VideoStreamTransCode_Init(); | 26 | VideoStreamTransCode_Init(); |
28 | } | 27 | } |
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 | - } | ||
36 | } | 28 | } |
37 | 29 | ||
38 | //多线程方案 | 30 | //多线程方案 |
@@ -55,41 +47,6 @@ static T_JZsdkReturnCode MediaProc_MultiThreading() | @@ -55,41 +47,6 @@ static T_JZsdkReturnCode MediaProc_MultiThreading() | ||
55 | 47 | ||
56 | VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送光学摄像头 | 48 | VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送光学摄像头 |
57 | } | 49 | } |
58 | - | ||
59 | - //如果是昆腾相机 红外+光学 则红外为1号,光学为2号 | ||
60 | - if (DEVICE_VERSION == JZ_C1) | ||
61 | - { | ||
62 | - //1、启动视频流缓冲区模块 | ||
63 | - VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index); | ||
64 | - VideoMgmt_init_buffer(&VideoMgmt_FirstRaw_index); | ||
65 | - | ||
66 | - VideoMgmt_init_buffer(&VideoMgmt_SecondVideo_index); | ||
67 | - VideoMgmt_init_buffer(&VideoMgmt_SecondRaw_index); | ||
68 | - | ||
69 | - //2、初始化编解码处理模块 | ||
70 | - JZsdk_Kt_IrcMMP_Init(FIRST_WIDTH ,FIRST_HEIGHT, 25, 5 ,SECOND_WIDTH ,SECOND_HEIGHT, 30, 15); | ||
71 | - | ||
72 | - //3、相机初始化 | ||
73 | - JZsdk_Kt_Irc_Camera_Init(); | ||
74 | - | ||
75 | - //4、启用推流模块 | ||
76 | - VideoMgmt_VideoStreamFlow_Init(25, &VideoMgmt_FirstVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); | ||
77 | - VideoMgmt_VideoStreamFlow_Init(30, &VideoMgmt_SecondVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND); | ||
78 | - | ||
79 | - //转码模块 | ||
80 | - VideoStreamTransCode_Init(); | ||
81 | - | ||
82 | - //5、打开默认选项 | ||
83 | - VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送红外摄像头 后续改成 红外+光学 的组合画面 | ||
84 | - JZsdk_Kt_Irc_ShutterSwitch(JZ_FLAGCODE_ON); | ||
85 | - | ||
86 | - //6、修改部分参数 | ||
87 | - int value = 8; | ||
88 | - Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value); | ||
89 | - value = 1; | ||
90 | - Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); | ||
91 | - } | ||
92 | - | ||
93 | } | 50 | } |
94 | 51 | ||
95 | //视频流模块初始化 | 52 | //视频流模块初始化 |
@@ -98,8 +55,6 @@ T_JZsdkReturnCode MediaProc_Init() | @@ -98,8 +55,6 @@ T_JZsdkReturnCode MediaProc_Init() | ||
98 | 55 | ||
99 | #if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T | 56 | #if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T |
100 | MediaProc_SingleThreading(); | 57 | MediaProc_SingleThreading(); |
101 | -# elif DEVICE_VERSION == JZ_C1 | ||
102 | - MediaProc_MultiThreading(); | ||
103 | #endif | 58 | #endif |
104 | 59 | ||
105 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 60 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
@@ -7,75 +7,52 @@ | @@ -7,75 +7,52 @@ | ||
7 | #include "version_choose.h" | 7 | #include "version_choose.h" |
8 | #include "MediaProc/VideoMgmt/VideoMgmt.h" | 8 | #include "MediaProc/VideoMgmt/VideoMgmt.h" |
9 | 9 | ||
10 | -void *Kt_Irc_enc_index = NULL; //昆腾红外编码器的索引值 | ||
11 | -void *Kt_Cam_enc_index = NULL; //昆腾光学编码器的索引值 | ||
12 | -void *Kt_Cam_dec_index = NULL; //昆腾光学解码器的索引值 | 10 | +//c1 0是红外权柄 1是光学权柄 2为空权柄 |
11 | +static void *RtkMmpEncHandle[3] = { NULL }; // 所有元素都被初始化为NULL | ||
12 | +static void *RtkMmpDecHandle[3] = { NULL }; // 所有元素都被初始化为NULL | ||
13 | 13 | ||
14 | -//昆腾红外相机的mmp初始化部分 | ||
15 | -T_JZsdkReturnCode JZsdk_Kt_IrcMMP_Init(int Irc_width, int Irc_height, int Irc_frame, int Irc_gop, int Cam_width, int Cam_height, int Cam_frame,int Cam_gop) | ||
16 | -{ | ||
17 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | ||
18 | - //初始化红外数据的编码器 | ||
19 | - RTK_mmp_enc_Init(&Kt_Irc_enc_index, MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, Irc_width, Irc_height, Irc_frame, Irc_gop); | ||
20 | - //RTK_mmp_enc_Init(&Kt_Irc_enc_index, MPP_VIDEO_CodingAVC, MPP_FMT_RGB888, Irc_width, Irc_height, Irc_frame); | 14 | +/* |
15 | + rtk模块获取编码权柄 | ||
16 | + 属于参数即可权柄 | ||
21 | 17 | ||
22 | - //初始化光学数据的编解码器 | ||
23 | - RTK_mmp_dec_Init(&Kt_Cam_dec_index, MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, Cam_width, Cam_height); | ||
24 | - RTK_mmp_enc_Init(&Kt_Cam_enc_index, MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, Cam_width, Cam_height, Cam_frame, Cam_gop); | ||
25 | -#endif | 18 | +*/ |
19 | +void *JZsdk_RtkMmpGetEncHandle(int CameraIndex) | ||
20 | +{ | ||
21 | + return RtkMmpEncHandle[CameraIndex]; | ||
26 | } | 22 | } |
27 | 23 | ||
28 | -//原始视频流通过rtkmmp转为h264 | ||
29 | -T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264(unsigned char *RawData, int data_len) | ||
30 | -{ | ||
31 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | ||
32 | - MppPacket Packet = NULL; | ||
33 | 24 | ||
34 | - RTK_mmp_enc_data_to_h264(&Kt_Irc_enc_index, RawData, data_len, &Packet); | ||
35 | - | ||
36 | - int packet_len = mpp_packet_get_length(Packet); | ||
37 | - void *ptr = mpp_packet_get_pos(Packet); | ||
38 | - //EncCfg->Packet_eos = mpp_packet_get_eos(packet); | ||
39 | - // printf("获取到编码内容 len:%d\n",packet_len); | ||
40 | 25 | ||
41 | - //3、将h264流输出到视频流缓冲区 | ||
42 | - VideoMgmt_write_data(&VideoMgmt_FirstVideo_index, ptr, packet_len); | 26 | +/* |
27 | + rtk模块获取解码权柄 | ||
28 | + 属于参数即可权柄 | ||
43 | 29 | ||
44 | - //释放掉packet | ||
45 | - mpp_packet_deinit(&Packet); | ||
46 | -#endif | 30 | +*/ |
31 | +void *JZsdk_RtkMmpGetDecHandle(int CameraIndex) | ||
32 | +{ | ||
33 | + return RtkMmpDecHandle[CameraIndex]; | ||
47 | } | 34 | } |
48 | 35 | ||
49 | -//昆腾光学相机数据输入部分 | ||
50 | -T_JZsdkReturnCode JZsdk_Kt_CamMMP_Mjpeg_to_h264(unsigned char *data, int data_len) | 36 | +/********* |
37 | + * | ||
38 | + * 返回dec权柄地址 | ||
39 | + * | ||
40 | + * | ||
41 | + * ***/ | ||
42 | +void **JZsdk_RtkMmpGetDecHandleAddr(int CameraIndex) | ||
51 | { | 43 | { |
52 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | ||
53 | - MppFrame yuv_data = NULL; //用于传递yuv数据的地址 | ||
54 | - MppPacket Packet = NULL; | ||
55 | - | ||
56 | - //输入数据进入解码器 | ||
57 | - RTK_mmp_dec_input(&Kt_Cam_dec_index, data, data_len, &yuv_data); | ||
58 | - | ||
59 | - // int width = mpp_frame_get_width(yuv_data); | ||
60 | - // int height = mpp_frame_get_height(yuv_data); | ||
61 | - // int h_stride = mpp_frame_get_hor_stride(yuv_data); | ||
62 | - // int v_stride = mpp_frame_get_ver_stride(yuv_data); | ||
63 | - | ||
64 | - // JZSDK_LOG_INFO("w:%d h:%d hor:%d ver:%d",width,height,h_stride,v_stride); | ||
65 | - | ||
66 | - //将返回的数据输入进编码器 | ||
67 | - RTK_mmp_enc_yuv_to_h264_byFrame(&Kt_Cam_enc_index, yuv_data, &Packet); | ||
68 | - | ||
69 | - //获取数据指针与长度 | ||
70 | - int packet_len = mpp_packet_get_length(Packet); | ||
71 | - void *ptr = mpp_packet_get_pos(Packet); | ||
72 | - | ||
73 | - //置入视频缓冲区 | ||
74 | - VideoMgmt_write_data(&VideoMgmt_SecondVideo_index, (unsigned char *)ptr, (unsigned int)packet_len); | 44 | + return &(RtkMmpDecHandle[CameraIndex]); |
45 | +} | ||
75 | 46 | ||
76 | - //释放掉编码图像 | ||
77 | - mpp_packet_deinit(&Packet); | ||
78 | -#endif | 47 | +/********* |
48 | + * | ||
49 | + * 返回enc权柄地址 | ||
50 | + * | ||
51 | + * | ||
52 | + * ***/ | ||
53 | +void **JZsdk_RtkMmpGetEncHandleAddr(int CameraIndex) | ||
54 | +{ | ||
55 | + return &(RtkMmpEncHandle[CameraIndex]); | ||
79 | } | 56 | } |
80 | 57 | ||
81 | //昆腾相机设置下一帧为I帧 | 58 | //昆腾相机设置下一帧为I帧 |
@@ -84,11 +61,11 @@ T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex) | @@ -84,11 +61,11 @@ T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex) | ||
84 | #if RTK_MPP_STATUS == VERSION_SWITCH_ON | 61 | #if RTK_MPP_STATUS == VERSION_SWITCH_ON |
85 | if (CameraIndex == 0) | 62 | if (CameraIndex == 0) |
86 | { | 63 | { |
87 | - RTK_mmp_enc_SetNextFrame_IDR(&Kt_Irc_enc_index); | 64 | + RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(0)); |
88 | } | 65 | } |
89 | else if(CameraIndex == 1) | 66 | else if(CameraIndex == 1) |
90 | { | 67 | { |
91 | - RTK_mmp_enc_SetNextFrame_IDR(&Kt_Cam_enc_index); | 68 | + RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(1)); |
92 | } | 69 | } |
93 | else | 70 | else |
94 | { | 71 | { |
@@ -35,9 +35,17 @@ extern "C" { | @@ -35,9 +35,17 @@ extern "C" { | ||
35 | /* Exported functions --------------------------------------------------------*/ | 35 | /* Exported functions --------------------------------------------------------*/ |
36 | T_JZsdkReturnCode JZsdk_Kt_CamMMP_Mjpeg_to_h264(unsigned char *data, int data_len); | 36 | T_JZsdkReturnCode JZsdk_Kt_CamMMP_Mjpeg_to_h264(unsigned char *data, int data_len); |
37 | T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264(unsigned char *RawData, int data_len); | 37 | T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264(unsigned char *RawData, int data_len); |
38 | +T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264_Return(void **index, unsigned char *RawData, int *data_len); | ||
39 | + | ||
38 | T_JZsdkReturnCode JZsdk_Kt_IrcMMP_Init(int Irc_width, int Irc_height, int Irc_frame, int Irc_gop, int Cam_width, int Cam_height, int Cam_frame,int Cam_gop); | 40 | T_JZsdkReturnCode JZsdk_Kt_IrcMMP_Init(int Irc_width, int Irc_height, int Irc_frame, int Irc_gop, int Cam_width, int Cam_height, int Cam_frame,int Cam_gop); |
39 | T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex); | 41 | T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex); |
40 | 42 | ||
43 | +void *JZsdk_RtkMmpGetEncHandle(int CameraIndex); | ||
44 | +void *JZsdk_RtkMmpGetDecHandle(int CameraIndex); | ||
45 | + | ||
46 | +void **JZsdk_RtkMmpGetDecHandleAddr(int CameraIndex); | ||
47 | +void **JZsdk_RtkMmpGetEncHandleAddr(int CameraIndex); | ||
48 | + | ||
41 | 49 | ||
42 | 50 | ||
43 | #ifdef __cplusplus | 51 | #ifdef __cplusplus |
@@ -32,6 +32,11 @@ | @@ -32,6 +32,11 @@ | ||
32 | 32 | ||
33 | JZ_VideoStreamUseStatus g_VideoStreamDealStatus = VIDEO_STREAM_IDLE; //视频流的处理状态 | 33 | JZ_VideoStreamUseStatus g_VideoStreamDealStatus = VIDEO_STREAM_IDLE; //视频流的处理状态 |
34 | static int g_VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 | 34 | static int g_VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 |
35 | +static int g_VideoFreeze_PlayFlag = JZ_FLAGCODE_OFF; //视频流冻结功能的传输flag | ||
36 | + | ||
37 | +//视频流冻结的缓存区 | ||
38 | +static unsigned char *g_FreezeData = NULL; //当前使用的缓存区 | ||
39 | +static unsigned int FreezeDataLen = 0; | ||
35 | 40 | ||
36 | /********************************************************************************************************************************************* | 41 | /********************************************************************************************************************************************* |
37 | * | 42 | * |
@@ -44,6 +49,8 @@ static int g_VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 | @@ -44,6 +49,8 @@ static int g_VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 | ||
44 | 49 | ||
45 | static int g_VideoStreamFlowIndexNum = JZ_FLAGCODE_OFF; //视频流转的索引值 | 50 | static int g_VideoStreamFlowIndexNum = JZ_FLAGCODE_OFF; //视频流转的索引值 |
46 | 51 | ||
52 | + | ||
53 | +//获取视频索引 | ||
47 | int VideoMgmt_GetVideoStreamFlowIndexNum() | 54 | int VideoMgmt_GetVideoStreamFlowIndexNum() |
48 | { | 55 | { |
49 | return g_VideoStreamFlowIndexNum; | 56 | return g_VideoStreamFlowIndexNum; |
@@ -149,6 +156,18 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | @@ -149,6 +156,18 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | ||
149 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 156 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
150 | } | 157 | } |
151 | 158 | ||
159 | + | ||
160 | +static void *Pthread_FreezeTime(void *arg) | ||
161 | +{ | ||
162 | + //每500ms 恢复一次冻结画面 | ||
163 | + while (1) | ||
164 | + { | ||
165 | + delayMs(500); | ||
166 | + g_VideoFreeze_PlayFlag = JZ_FLAGCODE_ON; | ||
167 | + } | ||
168 | +} | ||
169 | + | ||
170 | + | ||
152 | /************** | 171 | /************** |
153 | * | 172 | * |
154 | * 视频流流转的线程 | 173 | * 视频流流转的线程 |
@@ -157,18 +176,72 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | @@ -157,18 +176,72 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | ||
157 | * ************/ | 176 | * ************/ |
158 | T_JZsdkReturnCode VideoMgmt_VideoStreamToDeal(unsigned char *data, unsigned int data_len) | 177 | T_JZsdkReturnCode VideoMgmt_VideoStreamToDeal(unsigned char *data, unsigned int data_len) |
159 | { | 178 | { |
160 | - //拍照数据 | ||
161 | - VideoStramPhoto_PhotoDataIn(data, data_len); | 179 | + //出错 |
180 | + if (data == NULL) | ||
181 | + { | ||
182 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
183 | + } | ||
184 | + | ||
185 | + //冻结数据处理 | ||
186 | + int VideoFreezeFlag = g_VideoFreezeFlag; | ||
187 | + | ||
188 | + //如果冻结功能未打开 | ||
189 | + if (VideoFreezeFlag == JZ_FLAGCODE_OFF) | ||
190 | + { | ||
191 | + if (g_FreezeData != NULL) | ||
192 | + { | ||
193 | + free(g_FreezeData); | ||
194 | + g_FreezeData = NULL; | ||
195 | + } | ||
196 | + | ||
197 | + } | ||
198 | + //冻结功能打开 | ||
199 | + else if (VideoFreezeFlag == JZ_FLAGCODE_ON) | ||
200 | + { | ||
201 | + //如果冻结数据为空,且 当前为i帧 | ||
202 | + if (g_FreezeData == NULL && data[4] == 0x67) | ||
203 | + { | ||
204 | + FreezeDataLen = data_len; | ||
205 | + JZsdk_Malloc((void **)&g_FreezeData, data_len); | ||
206 | + memcpy(g_FreezeData, data , data_len); | ||
207 | + } | ||
208 | + } | ||
209 | + | ||
210 | + //没有冻结数据的情况下 | ||
211 | + if (g_FreezeData == NULL) | ||
212 | + { | ||
213 | + //拍照数据 | ||
214 | + VideoStramPhoto_PhotoDataIn(data, data_len); | ||
215 | + | ||
216 | + //录像处理函数 | ||
217 | + VideoStramRecord_RecordDataIn(data, data_len); | ||
218 | + | ||
219 | + //连拍处理函数 | ||
220 | + //FrameDeal_ShootPhotoBurstDeal(FrameDealBuffer, FrameLength); | ||
221 | + | ||
222 | + //推流 | ||
223 | + VideoStream_PushFrame(data, data_len); | ||
224 | + } | ||
225 | + else | ||
226 | + { | ||
227 | + //拍照数据 | ||
228 | + VideoStramPhoto_PhotoDataIn(g_FreezeData, FreezeDataLen); | ||
229 | + | ||
230 | + //录像处理函数 | ||
231 | + VideoStramRecord_RecordDataIn(g_FreezeData, FreezeDataLen); | ||
162 | 232 | ||
163 | - //录像处理函数 | ||
164 | - VideoStramRecord_RecordDataIn(data, data_len); | 233 | + //连拍处理函数 |
234 | + //FrameDeal_ShootPhotoBurstDeal(g_FreezeData, FreezeDataLen); | ||
165 | 235 | ||
166 | - //连拍处理函数 | ||
167 | - //FrameDeal_ShootPhotoBurstDeal(FrameDealBuffer, FrameLength); | 236 | + //推流 |
237 | + if (g_VideoFreeze_PlayFlag == JZ_FLAGCODE_ON) | ||
238 | + { | ||
239 | + VideoStream_PushFrame(g_FreezeData, FreezeDataLen); | ||
240 | + g_VideoFreeze_PlayFlag = JZ_FLAGCODE_OFF; | ||
241 | + } | ||
242 | + } | ||
168 | 243 | ||
169 | - //推流 | ||
170 | - VideoStream_PushFrame(data, data_len); | ||
171 | - //JZSDK_LOG_INFO("推送一帧%d,数据大小%d\n",VideoPush->VideoStreamFlowIndex,data_len); | 244 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
172 | } | 245 | } |
173 | 246 | ||
174 | 247 | ||
@@ -329,4 +402,34 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | @@ -329,4 +402,34 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | ||
329 | #endif | 402 | #endif |
330 | 403 | ||
331 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 404 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
405 | +} | ||
406 | + | ||
407 | +/******************* | ||
408 | + * | ||
409 | + * | ||
410 | + * videoMgmt初始化 | ||
411 | + * | ||
412 | + * | ||
413 | + * | ||
414 | + * ***********************/ | ||
415 | +T_JZsdkReturnCode VideoMgmt_Init(void) | ||
416 | +{ | ||
417 | + T_JZsdkReturnCode ret; | ||
418 | + | ||
419 | + //初始化转码模块 | ||
420 | + VideoStreamTransCode_Init(); | ||
421 | + | ||
422 | + //冻结计时模块 | ||
423 | + //创建视频流流转线程 | ||
424 | + pthread_t FreezeTask; | ||
425 | + pthread_attr_t task_attribute; //线程属性 | ||
426 | + pthread_attr_init(&task_attribute); //初始化线程属性 | ||
427 | + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
428 | + int p_ret = pthread_create(&FreezeTask,&task_attribute,(void *)Pthread_FreezeTime,NULL); //线程 | ||
429 | + if(p_ret != 0) | ||
430 | + { | ||
431 | + JZSDK_LOG_ERROR("创建冻结计时线程失败!"); | ||
432 | + } | ||
433 | + | ||
434 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
332 | } | 435 | } |
@@ -25,6 +25,7 @@ extern "C" { | @@ -25,6 +25,7 @@ extern "C" { | ||
25 | /* Exported types ------------------------------------------------------------*/ | 25 | /* Exported types ------------------------------------------------------------*/ |
26 | 26 | ||
27 | /* Exported functions --------------------------------------------------------*/ | 27 | /* Exported functions --------------------------------------------------------*/ |
28 | +T_JZsdkReturnCode VideoMgmt_Init(void); | ||
28 | T_JZsdkReturnCode VideoMgmt_init_buffer(void **index); | 29 | T_JZsdkReturnCode VideoMgmt_init_buffer(void **index); |
29 | T_JZsdkReturnCode VideoMgmt_VideoBuffer_Deinit(void **index); | 30 | T_JZsdkReturnCode VideoMgmt_VideoBuffer_Deinit(void **index); |
30 | T_JZsdkReturnCode VideoMgmt_write_data(void **index, unsigned char *data, unsigned int data_len); | 31 | T_JZsdkReturnCode VideoMgmt_write_data(void **index, unsigned char *data, unsigned int data_len); |
@@ -202,16 +202,8 @@ static int Video_TransCode_Thread_Init() | @@ -202,16 +202,8 @@ static int Video_TransCode_Thread_Init() | ||
202 | * ********/ | 202 | * ********/ |
203 | T_JZsdkReturnCode VideoStreamTransCode_Init() | 203 | T_JZsdkReturnCode VideoStreamTransCode_Init() |
204 | { | 204 | { |
205 | - if (DEVICE_VERSION == JZ_H150S | ||
206 | - || DEVICE_VERSION == JZ_H150T | ||
207 | - || DEVICE_VERSION == JZ_C1) | ||
208 | - { | ||
209 | - Video_TransCode_Thread_Init(); | ||
210 | - } | ||
211 | - else | ||
212 | - { | ||
213 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
214 | - } | 205 | + |
206 | + Video_TransCode_Thread_Init(); | ||
215 | 207 | ||
216 | JZSDK_LOG_INFO("transcode module init success"); | 208 | JZSDK_LOG_INFO("transcode module init success"); |
217 | 209 |
@@ -187,7 +187,7 @@ T_JZsdkReturnCode AttentionVoice_IndependencePlay() | @@ -187,7 +187,7 @@ T_JZsdkReturnCode AttentionVoice_IndependencePlay() | ||
187 | 187 | ||
188 | if (language == 0x11) | 188 | if (language == 0x11) |
189 | { | 189 | { |
190 | - Megaphone_TTS_Play("Upgrade defeat, restarting Megaphone.", strlen("Upgrade defeat, restarting Megaphone."), JZ_FLAGCODE_ON); | 190 | + Megaphone_TTS_Play("Megaphone starting.", strlen("Megaphone starting."), JZ_FLAGCODE_ON); |
191 | } | 191 | } |
192 | else | 192 | else |
193 | { | 193 | { |
1 | # cmake 最低版本要求 第三行名字不能动 | 1 | # cmake 最低版本要求 第三行名字不能动 |
2 | cmake_minimum_required(VERSION 2.8) | 2 | cmake_minimum_required(VERSION 2.8) |
3 | -project(JZ_H150S) | 3 | +project(JZ_C1) |
4 | 4 | ||
5 | set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++") | 5 | set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++") |
6 | #"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。 | 6 | #"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。 |
-
请 注册 或 登录 后发表评论