正在显示
47 个修改的文件
包含
1927 行增加
和
1303 行删除
@@ -122,7 +122,13 @@ | @@ -122,7 +122,13 @@ | ||
122 | "hardwareinfo.h": "c", | 122 | "hardwareinfo.h": "c", |
123 | "jzsdk_attributedef.h": "c", | 123 | "jzsdk_attributedef.h": "c", |
124 | "msp_types.h": "c", | 124 | "msp_types.h": "c", |
125 | - "attribute.h": "c" | 125 | + "attribute.h": "c", |
126 | + "rk_venc_rc.h": "c", | ||
127 | + "rk_mpi.h": "c", | ||
128 | + "cameradef.h": "c", | ||
129 | + "cam_zoom.h": "c", | ||
130 | + "videodev2.h": "c", | ||
131 | + "jzsdk_widget.h": "c" | ||
126 | }, | 132 | }, |
127 | "Codegeex.GenerationPreference": "automatic", | 133 | "Codegeex.GenerationPreference": "automatic", |
128 | "C_Cpp.dimInactiveRegions": false | 134 | "C_Cpp.dimInactiveRegions": false |
1 | # 编译链的配置 | 1 | # 编译链的配置 |
2 | 2 | ||
3 | #1、编译链与设备类型的选择 | 3 | #1、编译链与设备类型的选择 |
4 | -set(DEVICE_NAME JZ_U3S) | 4 | +set(DEVICE_NAME JZ_C1) |
5 | #上一行为禁止修改行 | 5 | #上一行为禁止修改行 |
6 | 6 | ||
7 | message("**************************JZSDK构建编译开始***************************\n") | 7 | message("**************************JZSDK构建编译开始***************************\n") |
8 | 8 | ||
9 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | 9 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") |
10 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 10 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
11 | - set(DEVICE_TYPE MEGAPHONE) | ||
12 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") | 11 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") |
13 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 12 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
14 | - set(DEVICE_TYPE MEGAPHONE) | ||
15 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S") | 13 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S") |
16 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 14 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
17 | - set(DEVICE_TYPE MEGAPHONE) | ||
18 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T") | 15 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T") |
19 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 16 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
20 | - set(DEVICE_TYPE MEGAPHONE) | ||
21 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10") | 17 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10") |
22 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 18 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
23 | - set(DEVICE_TYPE MEGAPHONE) | ||
24 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T") | 19 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T") |
25 | - set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | ||
26 | - set(DEVICE_TYPE MEGAPHONE) | 20 | + set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
27 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") | 21 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") |
28 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 22 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
29 | - set(DEVICE_TYPE MEGAPHONE) | ||
30 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") | 23 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") |
31 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 24 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
32 | - set(DEVICE_TYPE MEGAPHONE) | ||
33 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") | 25 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") |
34 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 26 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
35 | - set(DEVICE_TYPE MEGAPHONE) | ||
36 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") | 27 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") |
37 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 28 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
38 | - set(DEVICE_TYPE MEGAPHONE) | ||
39 | elseif("${DEVICE_NAME}" STREQUAL "TF_A1") | 29 | elseif("${DEVICE_NAME}" STREQUAL "TF_A1") |
40 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 30 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
41 | - set(DEVICE_TYPE MEGAPHONE) | ||
42 | elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | 31 | elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") |
43 | set(MAKE_COMPILER ARM_X86_64_ARRCH64) | 32 | set(MAKE_COMPILER ARM_X86_64_ARRCH64) |
44 | endif() | 33 | endif() |
@@ -19,8 +19,11 @@ file(GLOB_RECURSE JZSDK_COMMON_SRC ${ROOT_DIRS}JZsdk_Common/*.c) | @@ -19,8 +19,11 @@ file(GLOB_RECURSE JZSDK_COMMON_SRC ${ROOT_DIRS}JZsdk_Common/*.c) | ||
19 | list(APPEND ALL_SRC_FILES ${JZSDK_COMMON_SRC}) | 19 | list(APPEND ALL_SRC_FILES ${JZSDK_COMMON_SRC}) |
20 | list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Common) | 20 | list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Common) |
21 | 21 | ||
22 | -file(GLOB_RECURSE JZSDK_CONFIG_SRC ${ROOT_DIRS}JZsdk_Config/*.c) | ||
23 | -list(APPEND ALL_SRC_FILES ${JZSDK_CONFIG_SRC}) | 22 | +file(GLOB_RECURSE JZSDK_CONFIG_SRC_baseConfig ${ROOT_DIRS}JZsdk_Config/BaseConfig.c) |
23 | +file(GLOB_RECURSE JZSDK_CONFIG_SRC_Paramterpar ${ROOT_DIRS}JZsdk_Config/ParamterParsing.c) | ||
24 | + | ||
25 | +list(APPEND ALL_SRC_FILES ${JZSDK_CONFIG_SRC_baseConfig}) | ||
26 | +list(APPEND ALL_SRC_FILES ${JZSDK_CONFIG_SRC_Paramterpar}) | ||
24 | list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Config) | 27 | list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Config) |
25 | 28 | ||
26 | file(GLOB_RECURSE JZSDK_HAL_SRC ${ROOT_DIRS}JZsdk_hal/*.c) | 29 | file(GLOB_RECURSE JZSDK_HAL_SRC ${ROOT_DIRS}JZsdk_hal/*.c) |
@@ -37,13 +40,6 @@ if(${DEVICE_INFO_MODULE} STREQUAL "VERSION_SWITCH_ON") | @@ -37,13 +40,6 @@ if(${DEVICE_INFO_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
37 | 40 | ||
38 | endif() | 41 | endif() |
39 | 42 | ||
40 | -#如果要加载设备配置 | ||
41 | -if(${DEVICE_CONFIG_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
42 | - message("\n设备配置源码加载中") | ||
43 | - file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}Module/DeviceConfig/*.c) | ||
44 | - list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
45 | -endif() | ||
46 | - | ||
47 | #如果要加载云台模块,需要加载以下附属内容 | 43 | #如果要加载云台模块,需要加载以下附属内容 |
48 | if(${GIMBAL_MODULE} STREQUAL "VERSION_SWITCH_ON") | 44 | if(${GIMBAL_MODULE} STREQUAL "VERSION_SWITCH_ON") |
49 | message("\n云台模块源码加载中") | 45 | message("\n云台模块源码加载中") |
@@ -188,7 +184,7 @@ if(${IMAGEPROCESSING_MODULE} STREQUAL "VERSION_SWITCH_ON") | @@ -188,7 +184,7 @@ if(${IMAGEPROCESSING_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
188 | list(APPEND ALL_SRC_FILES ${MODULE_IMAGEPROCESSING_cpp_SRC}) | 184 | list(APPEND ALL_SRC_FILES ${MODULE_IMAGEPROCESSING_cpp_SRC}) |
189 | endif() | 185 | endif() |
190 | 186 | ||
191 | - | 187 | +message("\n模组加载完毕\n") |
192 | 188 | ||
193 | # 头文件加载,后续再进行优化 | 189 | # 头文件加载,后续再进行优化 |
194 | list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Megaphone) | 190 | list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Megaphone) |
@@ -9,9 +9,6 @@ set(AUDIODEAL_MODULE VERSION_SWITCH_OFF) | @@ -9,9 +9,6 @@ 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 | - | ||
15 | # Gimbal 云台处理模块 | 12 | # Gimbal 云台处理模块 |
16 | set(GIMBAL_MODULE VERSION_SWITCH_OFF) | 13 | set(GIMBAL_MODULE VERSION_SWITCH_OFF) |
17 | 14 | ||
@@ -60,9 +57,6 @@ set(IMAGEPROCESSING_MODULE VERSION_SWITCH_OFF) | @@ -60,9 +57,6 @@ set(IMAGEPROCESSING_MODULE VERSION_SWITCH_OFF) | ||
60 | # 添加信息模块 | 57 | # 添加信息模块 |
61 | set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) | 58 | set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) |
62 | 59 | ||
63 | -# 添加设备配置模块 | ||
64 | -set(DEVICE_CONFIG_MODULE VERSION_SWITCH_ON) | ||
65 | - | ||
66 | # 添加UI管理模块 | 60 | # 添加UI管理模块 |
67 | set(UI_CONTROL_MODULE VERSION_SWITCH_ON) | 61 | set(UI_CONTROL_MODULE VERSION_SWITCH_ON) |
68 | 62 | ||
@@ -75,6 +69,7 @@ message("通用库加载完成") | @@ -75,6 +69,7 @@ message("通用库加载完成") | ||
75 | ########################### 独立库加载 ########################################## | 69 | ########################### 独立库加载 ########################################## |
76 | 70 | ||
77 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | 71 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") |
72 | + | ||
78 | # 添加AudioDeal 音频处理模块 | 73 | # 添加AudioDeal 音频处理模块 |
79 | set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | 74 | set(AUDIODEAL_MODULE VERSION_SWITCH_ON) |
80 | 75 | ||
@@ -93,6 +88,12 @@ if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | @@ -93,6 +88,12 @@ if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | ||
93 | # 添加FFMPEG及其附属模块 | 88 | # 添加FFMPEG及其附属模块 |
94 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 89 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
95 | 90 | ||
91 | + #设备独立配置源文件 | ||
92 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H1_series/JZ_H1E/*.c) | ||
93 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
94 | + | ||
95 | + message("h1e基础配置完毕\n") | ||
96 | + | ||
96 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") | 97 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") |
97 | 98 | ||
98 | # 添加AudioDeal 音频处理模块 | 99 | # 添加AudioDeal 音频处理模块 |
@@ -112,6 +113,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") | @@ -112,6 +113,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") | ||
112 | 113 | ||
113 | # 添加FFMPEG及其附属模块 | 114 | # 添加FFMPEG及其附属模块 |
114 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 115 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
116 | + | ||
117 | + #设备独立配置源文件 | ||
118 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H1_series/JZ_H1T/*.c) | ||
119 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
120 | + | ||
121 | + message("h1t基础配置完毕\n") | ||
115 | 122 | ||
116 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") | 123 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") |
117 | 124 | ||
@@ -133,6 +140,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") | @@ -133,6 +140,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") | ||
133 | # 添加FFMPEG及其附属模块 | 140 | # 添加FFMPEG及其附属模块 |
134 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 141 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
135 | 142 | ||
143 | + #设备独立配置源文件 | ||
144 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U3/*.c) | ||
145 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
146 | + | ||
147 | + message("u3基础配置完毕\n") | ||
148 | + | ||
136 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") | 149 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") |
137 | 150 | ||
138 | # 添加AudioDeal 音频处理模块 | 151 | # 添加AudioDeal 音频处理模块 |
@@ -156,6 +169,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") | @@ -156,6 +169,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") | ||
156 | # 添加激光模块 | 169 | # 添加激光模块 |
157 | set(SIDE_LASER_MODULE VERSION_SWITCH_ON) | 170 | set(SIDE_LASER_MODULE VERSION_SWITCH_ON) |
158 | 171 | ||
172 | + #设备独立配置源文件 | ||
173 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U3S/*.c) | ||
174 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
175 | + | ||
176 | + message("u3s基础配置完毕\n") | ||
177 | + | ||
159 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") | 178 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") |
160 | 179 | ||
161 | # 添加AudioDeal 音频处理模块 | 180 | # 添加AudioDeal 音频处理模块 |
@@ -175,6 +194,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") | @@ -175,6 +194,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") | ||
175 | 194 | ||
176 | # 添加FFMPEG及其附属模块 | 195 | # 添加FFMPEG及其附属模块 |
177 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 196 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
197 | + | ||
198 | + #设备独立配置源文件 | ||
199 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U3D/*.c) | ||
200 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
201 | + | ||
202 | + message("u3d基础配置完毕\n") | ||
178 | 203 | ||
179 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") | 204 | elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") |
180 | 205 | ||
@@ -196,6 +221,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") | @@ -196,6 +221,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") | ||
196 | # 添加FFMPEG及其附属模块 | 221 | # 添加FFMPEG及其附属模块 |
197 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 222 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
198 | 223 | ||
224 | + #设备独立配置源文件 | ||
225 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_U3_series/JZ_U30/*.c) | ||
226 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
227 | + | ||
228 | + message("u30基础配置完毕\n") | ||
229 | + | ||
199 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10") | 230 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10") |
200 | # 添加AudioDeal 音频处理模块 | 231 | # 添加AudioDeal 音频处理模块 |
201 | set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | 232 | set(AUDIODEAL_MODULE VERSION_SWITCH_ON) |
@@ -215,6 +246,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H10") | @@ -215,6 +246,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H10") | ||
215 | # 添加FFMPEG及其附属模块 | 246 | # 添加FFMPEG及其附属模块 |
216 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 247 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
217 | 248 | ||
249 | + #设备独立配置源文件 | ||
250 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H10_series/JZ_H10/*.c) | ||
251 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
252 | + | ||
253 | + message("h10基础配置完毕\n") | ||
254 | + | ||
218 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T") | 255 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T") |
219 | 256 | ||
220 | # 添加AudioDeal 音频处理模块 | 257 | # 添加AudioDeal 音频处理模块 |
@@ -231,6 +268,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T") | @@ -231,6 +268,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T") | ||
231 | 268 | ||
232 | # 添加FFMPEG及其附属模块 | 269 | # 添加FFMPEG及其附属模块 |
233 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 270 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
271 | + | ||
272 | + #设备独立配置源文件 | ||
273 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H10_series/JZ_H10T/*.c) | ||
274 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
275 | + | ||
276 | + message("h10t基础配置完毕\n") | ||
234 | 277 | ||
235 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S") | 278 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S") |
236 | # 添加AudioDeal 音频处理模块 | 279 | # 添加AudioDeal 音频处理模块 |
@@ -254,6 +297,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S") | @@ -254,6 +297,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S") | ||
254 | # 添加FFMPEG及其附属模块 | 297 | # 添加FFMPEG及其附属模块 |
255 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 298 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
256 | 299 | ||
300 | + #设备独立配置源文件 | ||
301 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H150S_H150T/*.c) | ||
302 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
303 | + | ||
304 | + message("h150s基础配置完毕\n") | ||
305 | + | ||
257 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T") | 306 | elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T") |
258 | 307 | ||
259 | # 添加AudioDeal 音频处理模块 | 308 | # 添加AudioDeal 音频处理模块 |
@@ -277,6 +326,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T") | @@ -277,6 +326,12 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T") | ||
277 | # 添加FFMPEG及其附属模块 | 326 | # 添加FFMPEG及其附属模块 |
278 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 327 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
279 | 328 | ||
329 | + #设备独立配置源文件 | ||
330 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZ_H150S_H150T/*.c) | ||
331 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
332 | + | ||
333 | + message("h150t基础配置完毕\n") | ||
334 | + | ||
280 | elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | 335 | elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") |
281 | 336 | ||
282 | # 添加Gimbal 云台处理模块 | 337 | # 添加Gimbal 云台处理模块 |
@@ -296,6 +351,13 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | @@ -296,6 +351,13 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | ||
296 | 351 | ||
297 | # 添加昆腾模块 | 352 | # 添加昆腾模块 |
298 | set(LIB_KT_MODULE VERSION_SWITCH_ON) | 353 | set(LIB_KT_MODULE VERSION_SWITCH_ON) |
354 | + | ||
355 | + #设备独立配置源文件 | ||
356 | + file(GLOB_RECURSE DEVICE_CONFOG_SRC ${ROOT_DIRS}JZsdk_Config/DeviceSample/JZC1/*.c) | ||
357 | + list(APPEND ALL_SRC_FILES ${DEVICE_CONFOG_SRC}) | ||
358 | + | ||
359 | + message("C1基础配置完毕\n") | ||
360 | + | ||
299 | endif() | 361 | endif() |
300 | 362 | ||
301 | message("***********************模组模块配置完毕*********************************\n") | 363 | message("***********************模组模块配置完毕*********************************\n") |
@@ -47,6 +47,8 @@ typedef uint64_t U64_t; | @@ -47,6 +47,8 @@ typedef uint64_t U64_t; | ||
47 | typedef double F64_t; | 47 | typedef double F64_t; |
48 | typedef float F32_t; | 48 | typedef float F32_t; |
49 | 49 | ||
50 | +#define JZSDK_SINGLE_THREAD 0 //jz单线程 | ||
51 | +#define JZSDK_MULTI_THREAD 1 //jz多线程 | ||
50 | 52 | ||
51 | //线程权柄 | 53 | //线程权柄 |
52 | typedef void *T_JZTaskHandle; | 54 | typedef void *T_JZTaskHandle; |
@@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
20 | #include "JZsdk_haldata_deal/JZsdk_data_transmisson.h" | 20 | #include "JZsdk_haldata_deal/JZsdk_data_transmisson.h" |
21 | #include "MediaProc/MediaProc.h" | 21 | #include "MediaProc/MediaProc.h" |
22 | #include "UI_control/WidegMgmt/JZsdk_Widget.h" | 22 | #include "UI_control/WidegMgmt/JZsdk_Widget.h" |
23 | -#include "DeviceConfig/DeviceConfig.h" | 23 | +#include "DeviceSample/DeviceSample.h" |
24 | #include "CommonMod/CommonMod.h" | 24 | #include "CommonMod/CommonMod.h" |
25 | 25 | ||
26 | #include "JZsdk_Hal.h" | 26 | #include "JZsdk_Hal.h" |
@@ -163,228 +163,60 @@ T_JZsdkReturnCode Main_APP_Psdk() | @@ -163,228 +163,60 @@ T_JZsdkReturnCode Main_APP_Psdk() | ||
163 | //外接传输模块 | 163 | //外接传输模块 |
164 | JZsdk_data_transmisson_Receive_Init(); | 164 | JZsdk_data_transmisson_Receive_Init(); |
165 | 165 | ||
166 | - //喊话器功能被打开时 | ||
167 | -#ifdef MEGAPHONE_CONFIG_STATUS_ON | ||
168 | - | ||
169 | - //音频库初始化 | ||
170 | - AudioDeal_Init(); | ||
171 | - | 166 | +//a1加载 |
167 | +#if DEVICE_VERSION == JZ_A1 | ||
168 | + JZ_a1_init(APP_PSDK); | ||
172 | #endif | 169 | #endif |
173 | 170 | ||
174 | - if (DEVICE_VERSION == TF_A1) | ||
175 | - { | ||
176 | - //串口设备1初始化 | ||
177 | - //value[0] = UART_DEV1_BITRATE; | ||
178 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
179 | - | ||
180 | - //串口设备2初始化 | ||
181 | - value[0] = UART_DEV2_BITRATE; | ||
182 | - JZsdk_HalPort_Init(UART_DEV_2, value); | ||
183 | - | ||
184 | - //喊话器初始化 | ||
185 | - Megaphone_Init(); | ||
186 | - | ||
187 | - //云台初始化 | ||
188 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
189 | - | ||
190 | - //灯类初始化 | ||
191 | - Lighting_Init(); | ||
192 | - | ||
193 | - delayMs(1000); | ||
194 | - | ||
195 | - //消息订阅初始化 | ||
196 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
197 | - } | ||
198 | - | ||
199 | - else if (DEVICE_VERSION == JZ_H1E) | ||
200 | - { | ||
201 | - //串口设备1初始化 | ||
202 | - //value[0] = UART_DEV1_BITRATE; | ||
203 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
204 | - | ||
205 | - //喊话器初始化 | ||
206 | - Megaphone_Init(); | ||
207 | - } | ||
208 | - | ||
209 | - else if (DEVICE_VERSION == JZ_H1T) | ||
210 | - { | ||
211 | - //串口设备1初始化 | ||
212 | - //value[0] = UART_DEV1_BITRATE; | ||
213 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
214 | - | ||
215 | - //4g设备初始化 | ||
216 | - value[0] = COMM_4G_UART_BITRATE; | ||
217 | - JZsdk_HalPort_Init(UART_4G, value); | ||
218 | - | ||
219 | - //喊话器初始化 | ||
220 | - Megaphone_Init(); | ||
221 | - | ||
222 | - //云台初始化 | ||
223 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_TRANSPARENT); | ||
224 | - } | ||
225 | - | ||
226 | - else if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | ||
227 | - { | ||
228 | - //串口设备1初始化 | ||
229 | - //value[0] = UART_DEV1_BITRATE; | ||
230 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
231 | - | ||
232 | - if (DEVICE_VERSION == JZ_H150T) | ||
233 | - { | ||
234 | - //4g设备初始化 | ||
235 | - value[0] = COMM_4G_UART_BITRATE; | ||
236 | - JZsdk_HalPort_Init(UART_4G, value); | ||
237 | - } | ||
238 | - | ||
239 | - //喊话器初始化 | ||
240 | - Megaphone_Init(); | ||
241 | - | ||
242 | - //云台初始化 | ||
243 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
244 | - | ||
245 | - //相机初始化 | ||
246 | - MediaProc_Init(); | ||
247 | - } | ||
248 | - | ||
249 | - else if (DEVICE_VERSION == JZ_H10) | ||
250 | - { | ||
251 | - //串口设备1初始化 | ||
252 | - //value[0] = UART_DEV1_BITRATE; | ||
253 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
254 | - | ||
255 | - //喊话器初始化 | ||
256 | - Megaphone_Init(); | ||
257 | - | ||
258 | - //云台初始化 | ||
259 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
260 | - } | ||
261 | - | ||
262 | - else if (DEVICE_VERSION == JZ_H10T) | ||
263 | - { | ||
264 | - //串口设备1初始化 | ||
265 | - //value[0] = UART_DEV1_BITRATE; | ||
266 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
267 | - | ||
268 | - //4g设备初始化 | ||
269 | - value[0] = COMM_4G_UART_BITRATE; | ||
270 | - JZsdk_HalPort_Init(UART_4G, value); | ||
271 | - | ||
272 | - //喊话器初始化 | ||
273 | - Megaphone_Init(); | ||
274 | - | ||
275 | - //云台初始化 | ||
276 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
277 | - } | ||
278 | - | ||
279 | - else if (DEVICE_VERSION == JZ_U3) | ||
280 | - { | ||
281 | - //串口设备1初始化 | ||
282 | - //value[0] = UART_DEV1_BITRATE; | ||
283 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
284 | - | ||
285 | - //串口设备2初始化 | ||
286 | - value[0] = UART_DEV2_BITRATE; | ||
287 | - JZsdk_HalPort_Init(UART_DEV_2, value); | ||
288 | - | ||
289 | - //喊话器初始化 | ||
290 | - Megaphone_Init(); | ||
291 | - | ||
292 | - //云台初始化 | ||
293 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
294 | - | ||
295 | - //灯类初始化 | ||
296 | - Lighting_Init(); | ||
297 | - | ||
298 | - delayMs(1000); | ||
299 | - | ||
300 | - //消息订阅初始化 | ||
301 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
302 | - } | ||
303 | - | ||
304 | - else if (DEVICE_VERSION == JZ_U3S) | ||
305 | - { | ||
306 | - //串口设备1初始化 | ||
307 | - //value[0] = UART_DEV1_BITRATE; | ||
308 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
309 | - | ||
310 | - //串口设备2初始化 | ||
311 | - value[0] = UART_DEV2_BITRATE; | ||
312 | - JZsdk_HalPort_Init(UART_DEV_2, value); | ||
313 | - | ||
314 | - //喊话器初始化 | ||
315 | - Megaphone_Init(); | ||
316 | - | ||
317 | - //云台初始化 | ||
318 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
319 | - | ||
320 | - //灯类初始化 | ||
321 | - Lighting_Init(); | ||
322 | -#ifdef SIDE_LASER_STATUS_ON | ||
323 | - //侧边激光初始化 | ||
324 | - SideLaser_Init(); | 171 | +//h1e加载 |
172 | +#if DEVICE_VERSION == JZ_H1E | ||
173 | + JZ_h1e_init(APP_PSDK); | ||
325 | #endif | 174 | #endif |
326 | - delayMs(1000); | ||
327 | - | ||
328 | - //消息订阅初始化 | ||
329 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
330 | - } | ||
331 | - | ||
332 | - else if (DEVICE_VERSION == JZ_U3D) | ||
333 | - { | ||
334 | - //串口设备1初始化 | ||
335 | - //value[0] = UART_DEV1_BITRATE; | ||
336 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | ||
337 | - | ||
338 | - //串口设备2初始化 | ||
339 | - value[0] = UART_DEV2_BITRATE; | ||
340 | - JZsdk_HalPort_Init(UART_DEV_2, value); | ||
341 | - | ||
342 | - //喊话器初始化 | ||
343 | - Megaphone_Init(); | ||
344 | 175 | ||
345 | - //云台初始化 | ||
346 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
347 | - | ||
348 | - //灯类初始化 | ||
349 | - Lighting_Init(); | ||
350 | - | ||
351 | - delayMs(1000); | ||
352 | - | ||
353 | - //消息订阅初始化 | ||
354 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
355 | - } | 176 | +//h1t加载 |
177 | +#if DEVICE_VERSION == JZ_H1T | ||
178 | + JZ_h1t_init(APP_PSDK); | ||
179 | +#endif | ||
356 | 180 | ||
357 | - else if (DEVICE_VERSION == JZ_U30) | ||
358 | - { | ||
359 | - //串口设备1初始化 | ||
360 | - //value[0] = UART_DEV1_BITRATE; | ||
361 | - //JZsdk_HalPort_Init(UART_DEV_1, value); | 181 | +//h10加载 |
182 | +#if DEVICE_VERSION == JZ_H10 | ||
183 | + JZ_h10_init(APP_PSDK); | ||
184 | +#endif | ||
362 | 185 | ||
363 | - //串口设备2初始化 | ||
364 | - value[0] = UART_DEV2_BITRATE; | ||
365 | - JZsdk_HalPort_Init(UART_DEV_2, value); | 186 | +//h10t加载 |
187 | +#if DEVICE_VERSION == JZ_H10T | ||
188 | + JZ_h10t_init(APP_PSDK); | ||
189 | +#endif | ||
366 | 190 | ||
367 | - //喊话器初始化 | ||
368 | - Megaphone_Init(); | 191 | +//h150s h150t加载 |
192 | +#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T | ||
193 | + JZ_h150s_h150t_init(APP_PSDK); | ||
194 | +#endif | ||
369 | 195 | ||
370 | - //云台初始化 | ||
371 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | 196 | +//u3加载 |
197 | +#if DEVICE_VERSION == JZ_U3 | ||
198 | + JZ_u3_init(APP_PSDK); | ||
199 | +#endif | ||
372 | 200 | ||
373 | - //灯类初始化 | ||
374 | - Lighting_Init(); | 201 | +//u3s加载 |
202 | +#if DEVICE_VERSION == JZ_U3S | ||
203 | + JZ_u3s_init(APP_PSDK); | ||
204 | +#endif | ||
375 | 205 | ||
376 | - delayMs(1000); | 206 | +//u3d加载 |
207 | +#if DEVICE_VERSION == JZ_U3D | ||
208 | + JZ_u3d_init(APP_PSDK); | ||
209 | +#endif | ||
377 | 210 | ||
378 | - //消息订阅初始化 | ||
379 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
380 | - } | 211 | +//u30加载 |
212 | +#if DEVICE_VERSION == JZ_U30 | ||
213 | + JZ_u30_init(APP_PSDK); | ||
214 | +#endif | ||
381 | 215 | ||
382 | - else if (DEVICE_VERSION == JZ_C1) | ||
383 | - { | ||
384 | - //初始化C1 | ||
385 | - JZC1_Init(); | ||
386 | - } | ||
387 | - | 216 | +//c1加载 |
217 | +#if DEVICE_VERSION == JZ_C1 | ||
218 | + JZC1_Init(); | ||
219 | +#endif | ||
388 | 220 | ||
389 | //初始化控件 | 221 | //初始化控件 |
390 | JZSDK_WidgetMgMT_Init(); | 222 | JZSDK_WidgetMgMT_Init(); |
@@ -422,246 +254,62 @@ int Main_APP_Uart() | @@ -422,246 +254,62 @@ int Main_APP_Uart() | ||
422 | //工作模式设置函数,用于超时,及播放启动语音等 | 254 | //工作模式设置函数,用于超时,及播放启动语音等 |
423 | Main_WorkMode(); | 255 | Main_WorkMode(); |
424 | 256 | ||
425 | - //喊话器功能被打开时 | ||
426 | -#ifdef MEGAPHONE_CONFIG_STATUS_ON | ||
427 | - //音频库初始化 | ||
428 | - AudioDeal_Init(); | ||
429 | -#endif | ||
430 | 257 | ||
431 | - if (DEVICE_VERSION == JZ_H1E) | ||
432 | - { | ||
433 | - //串口设备1初始化 | ||
434 | - value[0] = UART_DEV1_BITRATE; | ||
435 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
436 | - | ||
437 | - //喊话器初始化 | ||
438 | - Megaphone_Init(); | ||
439 | - } | ||
440 | - | ||
441 | - if (DEVICE_VERSION == JZ_H1T) | ||
442 | - { | ||
443 | - //串口设备1初始化 | ||
444 | - value[0] = UART_DEV1_BITRATE; | ||
445 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
446 | - | ||
447 | - //4g设备初始化 | ||
448 | - value[0] = COMM_4G_UART_BITRATE; | ||
449 | - JZsdk_HalPort_Init(UART_4G, value); | ||
450 | - | ||
451 | - //喊话器初始化 | ||
452 | - Megaphone_Init(); | ||
453 | - | ||
454 | - //云台初始化 | ||
455 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_TRANSPARENT); | ||
456 | - | ||
457 | - // //测试增加选项 | ||
458 | - // //开启循环 | ||
459 | - // JZsdk_Uart_audio_PlayLoop(UART_DEV_1, 1); | ||
460 | - | ||
461 | - // //设置音量 | ||
462 | - // JZsdk_Uart_Set_Volume(UART_DEV_1, 50); | ||
463 | - } | ||
464 | - | ||
465 | - if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | ||
466 | - { | ||
467 | - //串口设备1初始化 | ||
468 | - value[0] = UART_DEV1_BITRATE; | ||
469 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
470 | - | ||
471 | - //网口初始化 | ||
472 | - JZsdk_NetWork_Init(); | ||
473 | - | ||
474 | - if (DEVICE_VERSION == JZ_H150T) | ||
475 | - { | ||
476 | - //4g设备初始化 | ||
477 | - value[0] = COMM_4G_UART_BITRATE; | ||
478 | - JZsdk_HalPort_Init(UART_4G, value); | ||
479 | - } | ||
480 | - | ||
481 | - //云台初始化 | ||
482 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
483 | - | ||
484 | - //相机初始化 | ||
485 | - MediaProc_Init(); | ||
486 | - | ||
487 | - //喊话器初始化 | ||
488 | - Megaphone_Init(); | ||
489 | - } | ||
490 | - | ||
491 | - if (DEVICE_VERSION == JZ_H10) | ||
492 | - { | ||
493 | - //串口设备1初始化 | ||
494 | - value[0] = UART_DEV1_BITRATE; | ||
495 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
496 | - | ||
497 | - //H10和10t固定打开滤波 | ||
498 | - int filter_mode = JZ_FLAGCODE_ON; | ||
499 | - Main_M30_all_filter_mode(&filter_mode); | ||
500 | - | ||
501 | - //喊话器初始化 | ||
502 | - Megaphone_Init(); | ||
503 | - | ||
504 | - //云台初始化 | ||
505 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
506 | - } | ||
507 | - | ||
508 | - if (DEVICE_VERSION == JZ_H10T) | ||
509 | - { | ||
510 | - //串口设备1初始化 | ||
511 | - value[0] = UART_DEV1_BITRATE; | ||
512 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
513 | - | ||
514 | - //4g设备初始化 | ||
515 | - value[0] = COMM_4G_UART_BITRATE; | ||
516 | - JZsdk_HalPort_Init(UART_4G, value); | ||
517 | - | ||
518 | - //H10和10t固定打开滤波 | ||
519 | - int filter_mode = JZ_FLAGCODE_ON; | ||
520 | - Main_M30_all_filter_mode(&filter_mode); | ||
521 | - | ||
522 | - //喊话器初始化 | ||
523 | - Megaphone_Init(); | ||
524 | - | ||
525 | - //云台初始化 | ||
526 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
527 | - } | ||
528 | - | ||
529 | - if (DEVICE_VERSION == JZ_U3) | ||
530 | - { | ||
531 | - //串口设备1初始化 | ||
532 | - value[0] = UART_DEV1_BITRATE; | ||
533 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
534 | - | ||
535 | - //串口设备2初始化 | ||
536 | - value[0] = UART_DEV2_BITRATE; | ||
537 | - JZsdk_HalPort_Init(UART_DEV_2, value); | ||
538 | - | ||
539 | - //喊话器初始化 | ||
540 | - Megaphone_Init(); | ||
541 | - | ||
542 | - //云台初始化 | ||
543 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
544 | - | ||
545 | - //灯类初始化 | ||
546 | - Lighting_Init(); | ||
547 | - | ||
548 | - delayMs(1000); | ||
549 | - | ||
550 | - //消息订阅初始化 | ||
551 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_OFF); | ||
552 | - | ||
553 | - // //测试需要开启亮度 | ||
554 | - // JZsdk_Uart_SearchLight_Control(UART_DEV_1, 1); | ||
555 | - // JZsdk_Uart_SearchLight_Lumen(UART_DEV_1, 20, 20); | ||
556 | - | ||
557 | - } | ||
558 | - | ||
559 | - else if (DEVICE_VERSION == JZ_U3S) | ||
560 | - { | ||
561 | - //串口设备1初始化 | ||
562 | - value[0] = UART_DEV1_BITRATE; | ||
563 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
564 | - | ||
565 | - //串口设备2初始化 | ||
566 | - value[0] = UART_DEV2_BITRATE; | ||
567 | - JZsdk_HalPort_Init(UART_DEV_2, value); | ||
568 | - | ||
569 | - //喊话器初始化 | ||
570 | - Megaphone_Init(); | ||
571 | - | ||
572 | - //云台初始化 | ||
573 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
574 | - | ||
575 | - //灯类初始化 | ||
576 | - Lighting_Init(); | ||
577 | -#ifdef SIDE_LASER_STATUS_ON | ||
578 | - //侧边激光初始化 | ||
579 | - SideLaser_Init(); | 258 | +//a1加载 |
259 | +#if DEVICE_VERSION == JZ_A1 | ||
260 | + JZ_a1_init(APP_UART); | ||
580 | #endif | 261 | #endif |
581 | - delayMs(1000); | ||
582 | - | ||
583 | - //消息订阅初始化 | ||
584 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
585 | - } | ||
586 | - | ||
587 | - else if (DEVICE_VERSION == JZ_U3D) | ||
588 | - { | ||
589 | - //串口设备1初始化 | ||
590 | - value[0] = UART_DEV1_BITRATE; | ||
591 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
592 | - | ||
593 | - //串口设备2初始化 | ||
594 | - value[0] = UART_DEV2_BITRATE; | ||
595 | - JZsdk_HalPort_Init(UART_DEV_2, value); | ||
596 | - | ||
597 | - //喊话器初始化 | ||
598 | - Megaphone_Init(); | ||
599 | - | ||
600 | - //云台初始化 | ||
601 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
602 | - | ||
603 | - //灯类初始化 | ||
604 | - Lighting_Init(); | ||
605 | - | ||
606 | - delayMs(1000); | ||
607 | - | ||
608 | - //消息订阅初始化 | ||
609 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
610 | 262 | ||
611 | - // delayS(3); | ||
612 | - | ||
613 | - // JZSDK_LOG_INFO("开起发光"); | ||
614 | - | ||
615 | - // //开灯 | ||
616 | - // UIcontrol_SearchLightControl(UART_DEV_1, 0x02); | ||
617 | - // UIcontrol_Set_SearchLightLumen(UART_DEV_1, 1, 100, 100); | ||
618 | - | ||
619 | - } | ||
620 | - | ||
621 | - else if (DEVICE_VERSION == JZ_U30) | ||
622 | - { | ||
623 | - //串口设备1初始化 | ||
624 | - value[0] = UART_DEV1_BITRATE; | ||
625 | - JZsdk_HalPort_Init(UART_DEV_1, value); | ||
626 | - | ||
627 | - //串口设备2初始化 | ||
628 | - value[0] = UART_DEV2_BITRATE; | ||
629 | - JZsdk_HalPort_Init(UART_DEV_2, value); | 263 | +//h1e加载 |
264 | +#if DEVICE_VERSION == JZ_H1E | ||
265 | + JZ_h1e_init(APP_UART); | ||
266 | +#endif | ||
630 | 267 | ||
631 | - //喊话器初始化 | ||
632 | - Megaphone_Init(); | 268 | +//h1t加载 |
269 | +#if DEVICE_VERSION == JZ_H1T | ||
270 | + JZ_h1t_init(APP_UART); | ||
271 | +#endif | ||
633 | 272 | ||
634 | - //云台初始化 | ||
635 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | 273 | +//h10加载 |
274 | +#if DEVICE_VERSION == JZ_H10 | ||
275 | + JZ_h10_init(APP_UART); | ||
276 | +#endif | ||
636 | 277 | ||
637 | - //灯类初始化 | ||
638 | - Lighting_Init(); | 278 | +//h10t加载 |
279 | +#if DEVICE_VERSION == JZ_H10T | ||
280 | + JZ_h10t_init(APP_UART); | ||
281 | +#endif | ||
639 | 282 | ||
640 | - delayMs(1000); | 283 | +//h150s h150t加载 |
284 | +#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T | ||
285 | + JZ_h150s_h150t_init(APP_UART); | ||
286 | +#endif | ||
641 | 287 | ||
642 | - //消息订阅初始化 | ||
643 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
644 | - } | 288 | +//u3加载 |
289 | +#if DEVICE_VERSION == JZ_U3 | ||
290 | + JZ_u3_init(APP_UART); | ||
291 | +#endif | ||
645 | 292 | ||
646 | - if (DEVICE_VERSION == TF_A1) | ||
647 | - { | ||
648 | - //串口设备1初始化 | ||
649 | - value[0] = UART_DEV1_BITRATE; | ||
650 | - JZsdk_HalPort_Init(UART_DEV_1, value); | 293 | +//u3s加载 |
294 | +#if DEVICE_VERSION == JZ_U3S | ||
295 | + JZ_u3s_init(APP_UART); | ||
296 | +#endif | ||
651 | 297 | ||
652 | - //串口设备2初始化 | ||
653 | - value[0] = UART_DEV2_BITRATE; | ||
654 | - JZsdk_HalPort_Init(UART_DEV_2, value); | 298 | +//u3d加载 |
299 | +#if DEVICE_VERSION == JZ_U3D | ||
300 | + JZ_u3d_init(APP_UART); | ||
301 | +#endif | ||
655 | 302 | ||
656 | - //喊话器初始化 | ||
657 | - Megaphone_Init(); | 303 | +//u30加载 |
304 | +#if DEVICE_VERSION == JZ_U30 | ||
305 | + JZ_u30_init(APP_UART); | ||
306 | +#endif | ||
658 | 307 | ||
659 | - //云台初始化 | ||
660 | - Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | 308 | +//c1加载 |
309 | +#if DEVICE_VERSION == JZ_C1 | ||
310 | + JZC1_Init(); | ||
311 | +#endif | ||
661 | 312 | ||
662 | - //消息订阅初始化 | ||
663 | - HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
664 | - } | ||
665 | 313 | ||
666 | g_baseconfig_InitFlag = JZ_FLAGCODE_ON; | 314 | g_baseconfig_InitFlag = JZ_FLAGCODE_ON; |
667 | 315 |
1 | /** | 1 | /** |
2 | ******************************************************************** | 2 | ******************************************************************** |
3 | - * @file DeviceConfig.h | ||
4 | - * DeviceConfig.h的头文件 | 3 | + * @file DeviceSample.h |
4 | + * DeviceSample.h的头文件 | ||
5 | * | 5 | * |
6 | ********************************************************************* | 6 | ********************************************************************* |
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | 9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ |
10 | -#ifndef DEVICE_CONFIG_H | ||
11 | -#define DEVICE_CONFIG_H | 10 | +#ifndef DEVICE_SAMPLE_H |
11 | +#define DEVICE_SAMPLE_H | ||
12 | 12 | ||
13 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 13 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
14 | 14 | ||
15 | -#include "DeviceConfig/JZC1/JZC1.h" | 15 | +#include "DeviceSample/JZC1/JZC1.h" |
16 | 16 | ||
17 | 17 | ||
18 | /* Includes ------------------------------------------------------------------*/ | 18 | /* Includes ------------------------------------------------------------------*/ |
1 | - | ||
2 | -#include <stdio.h> | ||
3 | -#include <stdlib.h> | ||
4 | -#include <string.h> | ||
5 | -#include <pthread.h> | ||
6 | -#include <time.h> | ||
7 | -#include <unistd.h> | ||
8 | - | ||
9 | #include "JZsdkLib.h" | 1 | #include "JZsdkLib.h" |
10 | #include "BaseConfig.h" | 2 | #include "BaseConfig.h" |
3 | +#include <pthread.h> | ||
4 | + | ||
11 | #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" | 5 | #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" |
12 | 6 | ||
13 | #include "IRCUT/ircut.h" | 7 | #include "IRCUT/ircut.h" |
14 | 8 | ||
15 | - | ||
16 | #ifdef RTK_MPP_STATUS_ON | 9 | #ifdef RTK_MPP_STATUS_ON |
17 | #include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h" | 10 | #include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h" |
18 | #include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h" | 11 | #include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h" |
19 | #include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h" | 12 | #include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h" |
20 | #include "MediaProc/Camera/Camera.h" | 13 | #include "MediaProc/Camera/Camera.h" |
21 | 14 | ||
22 | -#endif | ||
23 | - | ||
24 | #ifdef RTK_RGA_STATUS_ON | 15 | #ifdef RTK_RGA_STATUS_ON |
25 | 16 | ||
26 | #include "MediaProc/RgaProc/RK_Rga/RK_Rga.h" | 17 | #include "MediaProc/RgaProc/RK_Rga/RK_Rga.h" |
27 | 18 | ||
28 | -//c1的rga结构体 | 19 | +#endif |
20 | + | ||
21 | + | ||
22 | +#include "MediaProc/MediaProc.h" | ||
23 | + | ||
24 | + | ||
29 | typedef struct C1_RgaInfo | 25 | typedef struct C1_RgaInfo |
30 | { | 26 | { |
31 | //源图像 | 27 | //源图像 |
@@ -42,27 +38,57 @@ typedef struct C1_RgaInfo | @@ -42,27 +38,57 @@ typedef struct C1_RgaInfo | ||
42 | 38 | ||
43 | }C1_RgaInfo; | 39 | }C1_RgaInfo; |
44 | 40 | ||
45 | -static C1_RgaInfo *g_C1_RgaIrcInfo = NULL; | ||
46 | -static C1_RgaInfo *g_C1_RgaOptInfo = NULL; | 41 | +typedef struct T_JZC1_info |
42 | +{ | ||
43 | +/*************************************************************/ | ||
44 | + //红外相机的编码器信息 | ||
45 | + T_rtk_mmp_enc_info *IRC_enc_info; | ||
47 | 46 | ||
48 | -static unsigned char *g_MixedIrc_Buffer = NULL; | 47 | + //红外相机的rga信息 |
48 | + C1_RgaInfo *IRC_rga_info; | ||
49 | 49 | ||
50 | -static unsigned char *g_MixedOpt_Buffer = NULL; | ||
51 | -static unsigned int g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF; | 50 | +/*************************************************************/ |
51 | + //光学相机的解码器信息 | ||
52 | + T_rtk_mmp_dec_info *Opt_dec_info; | ||
52 | 53 | ||
53 | -#endif | 54 | + //光学相机的编码器信息 |
55 | + T_rtk_mmp_enc_info *Opt_enc_info; | ||
56 | + | ||
57 | + //光学相机的相机信息 | ||
58 | + JZsdk_CameraInfo *Opt_Camera_info; | ||
59 | + | ||
60 | + C1_RgaInfo *Opt_rga_info; | ||
61 | + | ||
62 | + | ||
63 | +/*************************************************************/ | ||
64 | + //融合相机的编码器信息 | ||
65 | + T_rtk_mmp_enc_info *Fuse_enc_info; | ||
66 | + | ||
67 | +}T_JZC1_info; | ||
68 | + | ||
69 | +#define JZ_C1_IRC_WIDTH 320 | ||
70 | +#define JZ_C1_IRC_HEIGHT 256 | ||
71 | +#define JZ_C1_IRC_FRAMERATE 30 | ||
72 | +#define JZ_C1_IRC_INDEX VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST | ||
54 | 73 | ||
55 | -#ifdef MEDIA_PROC_CONFIG_STATUS_ON | 74 | +#define JZ_C1_OPT_WIDTH 1920 |
75 | +#define JZ_C1_OPT_HEIGHT 1080 | ||
76 | +#define JZ_C1_OPT_FRAMERATE 30 | ||
77 | +#define JZ_C1_OPT_INDEX VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND | ||
78 | +#define JZ_C1_OPT_DEV_PATH ("/dev/video21") | ||
79 | +#define JZ_C1_OPT_PIXEL V4L2_PIX_FMT_MJPEG | ||
56 | 80 | ||
57 | -#include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h" | ||
58 | -#include "MediaProc/MediaParm.h" | ||
59 | -#include "MediaProc/VideoMgmt/VideoStreamPush/VideoStream_Push.h" | ||
60 | -#include "MediaProc/VideoMgmt/VideoMgmt.h" | ||
61 | -#include "MediaProc/IRC_funtion/IRC_Param.h" | ||
62 | -#include "MediaProc/IRC_funtion/IRC_funtion.h" | ||
63 | -#include "MediaProc/MediaProc_Param.h" | 81 | +#define JZ_C1_FUSE_WIDTH 1920 |
82 | +#define JZ_C1_FUSE_HEIGHT 1080 | ||
83 | +#define JZ_C1_FUSE_FRAMERATE 30 | ||
84 | +#define JZ_C1_FUSE_INDEX VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD | ||
85 | + | ||
86 | +static unsigned char *g_MixedIrc_Buffer = NULL; | ||
87 | +static unsigned char *g_MixedOpt_Buffer = NULL; | ||
88 | +static unsigned int g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF; | ||
64 | 89 | ||
65 | 90 | ||
91 | +static T_JZC1_info g_JZC1_info; | ||
66 | 92 | ||
67 | static void *g_usb_index = NULL; | 93 | static void *g_usb_index = NULL; |
68 | 94 | ||
@@ -72,15 +98,15 @@ static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, | @@ -72,15 +98,15 @@ static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, | ||
72 | #define NSEC_PER_SEC 1000000000L //1秒的纳秒数 | 98 | #define NSEC_PER_SEC 1000000000L //1秒的纳秒数 |
73 | #define TARGET_FPS 30 | 99 | #define TARGET_FPS 30 |
74 | 100 | ||
75 | -static unsigned char FrameBuffer[FIRST_HEIGHT * FIRST_WIDTH *2]; //用于存储帧数据的缓冲区 | 101 | +static unsigned char FrameBuffer[JZ_C1_IRC_HEIGHT * JZ_C1_IRC_WIDTH *2]; //用于存储帧数据的缓冲区 |
76 | static unsigned int FrameBufferLen = 0; //用于存储帧数据的长度 | 102 | static unsigned int FrameBufferLen = 0; //用于存储帧数据的长度 |
77 | static int FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; | 103 | static int FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; |
78 | 104 | ||
79 | #ifdef RTK_RGA_STATUS_ON | 105 | #ifdef RTK_RGA_STATUS_ON |
80 | static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size); | 106 | static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size); |
81 | -static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo **rgaInfo, int dst_width, int dst_height, int dst_format); | ||
82 | #endif | 107 | #endif |
83 | 108 | ||
109 | + | ||
84 | //数据推送函数 | 110 | //数据推送函数 |
85 | static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, unsigned int data_len) | 111 | static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, unsigned int data_len) |
86 | { | 112 | { |
@@ -93,7 +119,7 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | @@ -93,7 +119,7 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | ||
93 | } | 119 | } |
94 | 120 | ||
95 | //红外相机 | 121 | //红外相机 |
96 | - if (currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST && CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST) | 122 | + if (currentIndex == JZ_C1_IRC_INDEX && CameraIndex == JZ_C1_IRC_INDEX) |
97 | { | 123 | { |
98 | 124 | ||
99 | //推送数据到流转模块 | 125 | //推送数据到流转模块 |
@@ -101,14 +127,14 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | @@ -101,14 +127,14 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | ||
101 | } | 127 | } |
102 | 128 | ||
103 | //光学相机 | 129 | //光学相机 |
104 | - if(CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND && currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND) | 130 | + if(CameraIndex == JZ_C1_OPT_INDEX && currentIndex == JZ_C1_OPT_INDEX) |
105 | { | 131 | { |
106 | //推送数据到流转模块 | 132 | //推送数据到流转模块 |
107 | VideoMgmt_Single_FrameIn(data, data_len); | 133 | VideoMgmt_Single_FrameIn(data, data_len); |
108 | } | 134 | } |
109 | 135 | ||
110 | //组合视频流 | 136 | //组合视频流 |
111 | - if (currentIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD && CameraIndex == VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD) | 137 | + if (currentIndex == JZ_C1_FUSE_INDEX && CameraIndex == JZ_C1_FUSE_INDEX) |
112 | { | 138 | { |
113 | //推送数据到流转模块 | 139 | //推送数据到流转模块 |
114 | VideoMgmt_Single_FrameIn(data, data_len); | 140 | VideoMgmt_Single_FrameIn(data, data_len); |
@@ -119,17 +145,13 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | @@ -119,17 +145,13 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | ||
119 | 145 | ||
120 | static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len) | 146 | static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len) |
121 | { | 147 | { |
122 | - | ||
123 | - | ||
124 | -#ifdef RTK_MPP_STATUS_ON | ||
125 | - | ||
126 | //JZSDK_LOG_INFO("JZC1_OptDeal"); | 148 | //JZSDK_LOG_INFO("JZC1_OptDeal"); |
127 | 149 | ||
128 | MppFrame yuv_data = NULL; //用于传递yuv数据的地址 | 150 | MppFrame yuv_data = NULL; //用于传递yuv数据的地址 |
129 | MppPacket Packet = NULL; | 151 | MppPacket Packet = NULL; |
130 | 152 | ||
131 | //输入数据进入解码器 | 153 | //输入数据进入解码器 |
132 | - RTK_mmp_dec_input(JZsdk_RtkMmpGetDecHandleAddr(1), data, data_len, &yuv_data); | 154 | + RTK_mmp_dec_input(g_JZC1_info.Opt_dec_info, data, data_len, &yuv_data); |
133 | 155 | ||
134 | // int width = mpp_frame_get_width(yuv_data); | 156 | // int width = mpp_frame_get_width(yuv_data); |
135 | // int height = mpp_frame_get_height(yuv_data); | 157 | // int height = mpp_frame_get_height(yuv_data); |
@@ -180,7 +202,7 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | @@ -180,7 +202,7 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | ||
180 | unsigned char *temp_data = (unsigned char *)malloc(size); | 202 | unsigned char *temp_data = (unsigned char *)malloc(size); |
181 | memcpy(temp_data, mpp_buffer_get_ptr(temp), size); | 203 | memcpy(temp_data, mpp_buffer_get_ptr(temp), size); |
182 | 204 | ||
183 | - JZC1_RgaDeal(g_C1_RgaOptInfo, ZoomRatio, temp_data, &size); | 205 | + JZC1_RgaDeal(g_JZC1_info.Opt_rga_info, ZoomRatio, temp_data, &size); |
184 | 206 | ||
185 | //重新将数据放回 | 207 | //重新将数据放回 |
186 | memcpy(mpp_buffer_get_ptr(temp), temp_data, size); | 208 | memcpy(mpp_buffer_get_ptr(temp), temp_data, size); |
@@ -200,7 +222,7 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | @@ -200,7 +222,7 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | ||
200 | 222 | ||
201 | 223 | ||
202 | //将返回的数据输入进编码器 | 224 | //将返回的数据输入进编码器 |
203 | - RTK_mmp_enc_yuv_to_h264_byFrame(JZsdk_RtkMmpGetEncHandleAddr(1), yuv_data, &Packet); | 225 | + RTK_mmp_enc_yuv_to_h264_byFrame(g_JZC1_info.Opt_enc_info, yuv_data, &Packet); |
204 | 226 | ||
205 | //获取数据指针与长度 | 227 | //获取数据指针与长度 |
206 | int packet_len = mpp_packet_get_length(Packet); | 228 | int packet_len = mpp_packet_get_length(Packet); |
@@ -211,7 +233,6 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | @@ -211,7 +233,6 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | ||
211 | 233 | ||
212 | //释放掉编码图像 | 234 | //释放掉编码图像 |
213 | mpp_packet_deinit(&Packet); | 235 | mpp_packet_deinit(&Packet); |
214 | -#endif | ||
215 | 236 | ||
216 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 237 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
217 | } | 238 | } |
@@ -230,7 +251,6 @@ static T_JZsdkReturnCode JZC1_Irc_DataCorrect(unsigned char *data) | @@ -230,7 +251,6 @@ static T_JZsdkReturnCode JZC1_Irc_DataCorrect(unsigned char *data) | ||
230 | //在这里将灰度图数据转换成目标数据 | 251 | //在这里将灰度图数据转换成目标数据 |
231 | static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len) | 252 | static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len) |
232 | { | 253 | { |
233 | -#ifdef IRC_CONFIG_STATUS_ON | ||
234 | //JZSDK_LOG_DEBUG("irc数据处理"); | 254 | //JZSDK_LOG_DEBUG("irc数据处理"); |
235 | if (data_len == 0) | 255 | if (data_len == 0) |
236 | { | 256 | { |
@@ -291,7 +311,7 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | @@ -291,7 +311,7 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | ||
291 | 311 | ||
292 | if (ZoomRatio != JZ_FLAGCODE_OFF) | 312 | if (ZoomRatio != JZ_FLAGCODE_OFF) |
293 | { | 313 | { |
294 | - JZC1_RgaDeal(g_C1_RgaIrcInfo, ZoomRatio, raw_data, &raw_data_len); | 314 | + JZC1_RgaDeal(g_JZC1_info.IRC_rga_info, ZoomRatio, raw_data, &raw_data_len); |
295 | } | 315 | } |
296 | 316 | ||
297 | //将数据放入混合缓冲区 | 317 | //将数据放入混合缓冲区 |
@@ -304,10 +324,9 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | @@ -304,10 +324,9 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | ||
304 | unsigned char *h264Data = NULL; | 324 | unsigned char *h264Data = NULL; |
305 | unsigned int h264DataLen = 0; | 325 | unsigned int h264DataLen = 0; |
306 | 326 | ||
307 | -#ifdef RTK_MPP_STATUS_ON | ||
308 | MppPacket Packet = NULL; | 327 | MppPacket Packet = NULL; |
309 | 328 | ||
310 | - RTK_mmp_enc_data_to_h264(JZsdk_RtkMmpGetEncHandleAddr(0), raw_data, raw_data_len, &Packet); | 329 | + RTK_mmp_enc_data_to_h264(g_JZC1_info.IRC_enc_info, raw_data, raw_data_len, &Packet); |
311 | 330 | ||
312 | h264DataLen = mpp_packet_get_length(Packet); | 331 | h264DataLen = mpp_packet_get_length(Packet); |
313 | h264Data = (unsigned char *)mpp_packet_get_pos(Packet); | 332 | h264Data = (unsigned char *)mpp_packet_get_pos(Packet); |
@@ -316,7 +335,6 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | @@ -316,7 +335,6 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | ||
316 | 335 | ||
317 | //释放掉packet | 336 | //释放掉packet |
318 | mpp_packet_deinit(&Packet); | 337 | mpp_packet_deinit(&Packet); |
319 | -#endif | ||
320 | 338 | ||
321 | //将h264数据推送 | 339 | //将h264数据推送 |
322 | JZC1_PushFrame(1, h264Data, h264DataLen); | 340 | JZC1_PushFrame(1, h264Data, h264DataLen); |
@@ -334,11 +352,10 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | @@ -334,11 +352,10 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | ||
334 | u16Data = NULL; | 352 | u16Data = NULL; |
335 | } | 353 | } |
336 | 354 | ||
337 | -#endif | ||
338 | - | ||
339 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 355 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
340 | } | 356 | } |
341 | 357 | ||
358 | + | ||
342 | static void *JZC1_IrcDataBuffer_Thread(void *args) | 359 | static void *JZC1_IrcDataBuffer_Thread(void *args) |
343 | { | 360 | { |
344 | 361 | ||
@@ -355,8 +372,6 @@ static void *JZC1_IrcDataBuffer_Thread(void *args) | @@ -355,8 +372,6 @@ static void *JZC1_IrcDataBuffer_Thread(void *args) | ||
355 | unsigned char *TempBuffer = (unsigned char *)malloc(163840); | 372 | unsigned char *TempBuffer = (unsigned char *)malloc(163840); |
356 | unsigned int TempBufferLen = 0; | 373 | unsigned int TempBufferLen = 0; |
357 | 374 | ||
358 | - | ||
359 | - | ||
360 | while (1) | 375 | while (1) |
361 | { | 376 | { |
362 | //获取当前时间 | 377 | //获取当前时间 |
@@ -393,10 +408,9 @@ static void *JZC1_IrcDataBuffer_Thread(void *args) | @@ -393,10 +408,9 @@ static void *JZC1_IrcDataBuffer_Thread(void *args) | ||
393 | struct timespec req = { .tv_sec = 0, .tv_nsec = 1000000 }; | 408 | struct timespec req = { .tv_sec = 0, .tv_nsec = 1000000 }; |
394 | nanosleep(&req, NULL); | 409 | nanosleep(&req, NULL); |
395 | } | 410 | } |
396 | - | ||
397 | - | ||
398 | } | 411 | } |
399 | 412 | ||
413 | + | ||
400 | static T_JZsdkReturnCode JZC1_IrcDataSave(unsigned char *data, unsigned int data_len) | 414 | static T_JZsdkReturnCode JZC1_IrcDataSave(unsigned char *data, unsigned int data_len) |
401 | { | 415 | { |
402 | //避免缓冲区被同时操作 | 416 | //避免缓冲区被同时操作 |
@@ -419,7 +433,7 @@ static T_JZsdkReturnCode JZC1_IrcDataSave(unsigned char *data, unsigned int data | @@ -419,7 +433,7 @@ static T_JZsdkReturnCode JZC1_IrcDataSave(unsigned char *data, unsigned int data | ||
419 | //红外数据接收线程 | 433 | //红外数据接收线程 |
420 | static void *JZC1_IrcDataRecv_Thread(void *args) | 434 | static void *JZC1_IrcDataRecv_Thread(void *args) |
421 | { | 435 | { |
422 | - int frame_len = FIRST_WIDTH *2* FIRST_HEIGHT; //163840 | 436 | + int frame_len = g_JZC1_info.IRC_enc_info->width * g_JZC1_info.IRC_enc_info->height *2; //163840 |
423 | unsigned char buf[frame_len]; //usb数据缓冲区需要为512的倍数 | 437 | unsigned char buf[frame_len]; //usb数据缓冲区需要为512的倍数 |
424 | unsigned char frameData[frame_len]; // 存储整帧数据的画面缓冲区 | 438 | unsigned char frameData[frame_len]; // 存储整帧数据的画面缓冲区 |
425 | unsigned int lineNum = 0; | 439 | unsigned int lineNum = 0; |
@@ -547,7 +561,6 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | @@ -547,7 +561,6 @@ static void *JZC1_IrcDataRecv_Thread(void *args) | ||
547 | } | 561 | } |
548 | } | 562 | } |
549 | 563 | ||
550 | - | ||
551 | //C1 红外相机数据的初始化 | 564 | //C1 红外相机数据的初始化 |
552 | static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | 565 | static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() |
553 | { | 566 | { |
@@ -584,44 +597,68 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | @@ -584,44 +597,68 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | ||
584 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 597 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
585 | } | 598 | } |
586 | 599 | ||
600 | + JZSDK_LOG_INFO("JZsdk_JZC1_Irc_Data_Init sucess"); | ||
601 | + | ||
587 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 602 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
588 | } | 603 | } |
589 | 604 | ||
590 | 605 | ||
606 | +// /******************** | ||
607 | +// * | ||
608 | +// * 混合视频说明 | ||
609 | +// * | ||
610 | +// * 1920*1088 做处理 并输出为 1920*1080 | ||
611 | +// * __________________________________________________________________ | ||
612 | +// * |_________________________________ | | ||
613 | +// * | |________________________________| | ||
614 | +// * | | | | ||
615 | +// * | | 1920*1088 /2 960* 544 | | ||
616 | +// * | | | | ||
617 | +// * | 320*256 拉伸4到 1280*1024 | | | ||
618 | +// * | 裁剪出 3/4 到 960 * 768 | | | ||
619 | +// * | | | | ||
620 | +// * | |________________________________| | ||
621 | +// * |_________________________________| | | ||
622 | +// * |__________________________________________________________________| | ||
623 | +// * | ||
624 | +// * ******************/ | ||
625 | + | ||
626 | + | ||
627 | +static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo *rgaInfo, int dst_width, int dst_height, int dst_format) | ||
628 | +{ | ||
629 | + int width = dst_width; | ||
630 | + int height = dst_height; | ||
631 | + int rect_x = 0; | ||
632 | + int rect_y = 0; | ||
633 | + int rect_w = dst_width; | ||
634 | + int rect_h = dst_height; | ||
635 | + | ||
636 | + rgaInfo->src_img = NULL; | ||
591 | 637 | ||
592 | -/******************** | ||
593 | - * | ||
594 | - * 混合视频说明 | ||
595 | - * | ||
596 | - * 1920*1088 做处理 并输出为 1920*1080 | ||
597 | - * __________________________________________________________________ | ||
598 | - * |_________________________________ | | ||
599 | - * | |________________________________| | ||
600 | - * | | | | ||
601 | - * | | 1920*1088 /2 960* 544 | | ||
602 | - * | | | | ||
603 | - * | 320*256 拉伸4到 1280*1024 | | | ||
604 | - * | 裁剪出 3/4 到 960 * 768 | | | ||
605 | - * | | | | ||
606 | - * | |________________________________| | ||
607 | - * |_________________________________| | | ||
608 | - * |__________________________________________________________________| | ||
609 | - * | ||
610 | - * ******************/ | 638 | + RK_Rga_ImageInit(&(rgaInfo->src_img), width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输入模块 |
611 | 639 | ||
640 | + rgaInfo->corp_img = NULL; | ||
641 | + RK_Rga_ImageInit(&(rgaInfo->corp_img), width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化裁剪模块 | ||
612 | 642 | ||
613 | -/****************** | ||
614 | - * | ||
615 | - * 混合视频处理 | ||
616 | - * | ||
617 | - * | ||
618 | - * ********************/ | ||
619 | -static void JZC1_MixedVideo_Deal() | ||
620 | -{ | 643 | + rgaInfo->dst_img = NULL; |
644 | + RK_Rga_ImageInit(&(rgaInfo->dst_img), width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输出模块 | ||
621 | 645 | ||
646 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
622 | } | 647 | } |
623 | 648 | ||
624 | 649 | ||
650 | +// /****************** | ||
651 | +// * | ||
652 | +// * 混合视频处理 | ||
653 | +// * | ||
654 | +// * | ||
655 | +// * ********************/ | ||
656 | +// static void JZC1_MixedVideo_Deal() | ||
657 | +// { | ||
658 | + | ||
659 | +// } | ||
660 | + | ||
661 | + | ||
625 | static void *MixedVideo_Thread(void *args) | 662 | static void *MixedVideo_Thread(void *args) |
626 | { | 663 | { |
627 | #ifdef RTK_RGA_STATUS_ON | 664 | #ifdef RTK_RGA_STATUS_ON |
@@ -642,16 +679,16 @@ static void *MixedVideo_Thread(void *args) | @@ -642,16 +679,16 @@ static void *MixedVideo_Thread(void *args) | ||
642 | im_rect Irc_Rect; | 679 | im_rect Irc_Rect; |
643 | Irc_Rect.x = 0; | 680 | Irc_Rect.x = 0; |
644 | Irc_Rect.y = 0; | 681 | Irc_Rect.y = 0; |
645 | - Irc_Rect.width = JZ_ALIGN(FIRST_WIDTH, 16); | ||
646 | - Irc_Rect.height = JZ_ALIGN(FIRST_HEIGHT, 16); | 682 | + Irc_Rect.width = g_JZC1_info.IRC_enc_info->hor_stride; |
683 | + Irc_Rect.height = g_JZC1_info.IRC_enc_info->ver_stride; | ||
647 | int IRc_Format = RK_FORMAT_YCbCr_420_SP; | 684 | int IRc_Format = RK_FORMAT_YCbCr_420_SP; |
648 | 685 | ||
649 | //红外放大图像 | 686 | //红外放大图像 |
650 | im_rect Irc_ResizeRect; | 687 | im_rect Irc_ResizeRect; |
651 | Irc_ResizeRect.x = 0; | 688 | Irc_ResizeRect.x = 0; |
652 | Irc_ResizeRect.y = 0; | 689 | Irc_ResizeRect.y = 0; |
653 | - Irc_ResizeRect.width = JZ_ALIGN(FIRST_WIDTH, 16) * 4; | ||
654 | - Irc_ResizeRect.height = JZ_ALIGN(FIRST_HEIGHT, 16) * 4; | 690 | + Irc_ResizeRect.width = g_JZC1_info.IRC_enc_info->hor_stride * 4; |
691 | + Irc_ResizeRect.height = g_JZC1_info.IRC_enc_info->ver_stride * 4; | ||
655 | 692 | ||
656 | //红外裁剪区域 | 693 | //红外裁剪区域 |
657 | im_rect Irc_CropRect; | 694 | im_rect Irc_CropRect; |
@@ -678,16 +715,16 @@ static void *MixedVideo_Thread(void *args) | @@ -678,16 +715,16 @@ static void *MixedVideo_Thread(void *args) | ||
678 | im_rect Opt_Rect; | 715 | im_rect Opt_Rect; |
679 | Opt_Rect.x = 0; | 716 | Opt_Rect.x = 0; |
680 | Opt_Rect.y = 0; | 717 | Opt_Rect.y = 0; |
681 | - Opt_Rect.width = JZ_ALIGN(SECOND_WIDTH, 16); | ||
682 | - Opt_Rect.height = JZ_ALIGN(SECOND_HEIGHT, 16); | 718 | + Opt_Rect.width = g_JZC1_info.Opt_enc_info->hor_stride; |
719 | + Opt_Rect.height = g_JZC1_info.Opt_enc_info->ver_stride; | ||
683 | int Opt_Format = RK_FORMAT_YCbCr_420_SP; | 720 | int Opt_Format = RK_FORMAT_YCbCr_420_SP; |
684 | 721 | ||
685 | //光学源缩小图像 | 722 | //光学源缩小图像 |
686 | im_rect Opt_ResizeRect; | 723 | im_rect Opt_ResizeRect; |
687 | Opt_ResizeRect.x = 0; | 724 | Opt_ResizeRect.x = 0; |
688 | Opt_ResizeRect.y = 0; | 725 | Opt_ResizeRect.y = 0; |
689 | - Opt_ResizeRect.width = JZ_ALIGN(SECOND_WIDTH, 16) / 2; | ||
690 | - Opt_ResizeRect.height = JZ_ALIGN(SECOND_HEIGHT, 16) / 2; | 726 | + Opt_ResizeRect.width = g_JZC1_info.Opt_enc_info->hor_stride / 2; |
727 | + Opt_ResizeRect.height = g_JZC1_info.Opt_enc_info->ver_stride / 2; | ||
691 | 728 | ||
692 | //光学源图像 | 729 | //光学源图像 |
693 | RK_RgaImage *Opt_SrcImg = NULL; | 730 | RK_RgaImage *Opt_SrcImg = NULL; |
@@ -704,8 +741,8 @@ static void *MixedVideo_Thread(void *args) | @@ -704,8 +741,8 @@ static void *MixedVideo_Thread(void *args) | ||
704 | im_rect Dst_Rect; | 741 | im_rect Dst_Rect; |
705 | Dst_Rect.x = 0; | 742 | Dst_Rect.x = 0; |
706 | Dst_Rect.y = 0; | 743 | Dst_Rect.y = 0; |
707 | - Dst_Rect.width = JZ_ALIGN(SECOND_WIDTH, 16); | ||
708 | - Dst_Rect.height = JZ_ALIGN(SECOND_HEIGHT, 16); | 744 | + Dst_Rect.width = g_JZC1_info.Opt_enc_info->hor_stride; |
745 | + Dst_Rect.height = g_JZC1_info.Opt_enc_info->ver_stride; | ||
709 | int Dst_Format = RK_FORMAT_YCbCr_420_SP; | 746 | int Dst_Format = RK_FORMAT_YCbCr_420_SP; |
710 | 747 | ||
711 | //目标图像中光学图像的矩形 | 748 | //目标图像中光学图像的矩形 |
@@ -765,8 +802,8 @@ static void *MixedVideo_Thread(void *args) | @@ -765,8 +802,8 @@ static void *MixedVideo_Thread(void *args) | ||
765 | memset(Opt_SrcImg->buf, 0, Opt_SrcImg->buf_size); | 802 | memset(Opt_SrcImg->buf, 0, Opt_SrcImg->buf_size); |
766 | 803 | ||
767 | //将数据放入缓冲区 | 804 | //将数据放入缓冲区 |
768 | - memcpy(Irc_SrcImg->buf, g_MixedIrc_Buffer, (JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2); | ||
769 | - memcpy(Opt_SrcImg->buf, g_MixedOpt_Buffer, JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2); | 805 | + memcpy(Irc_SrcImg->buf, g_MixedIrc_Buffer, (g_JZC1_info.IRC_enc_info->hor_stride) * (g_JZC1_info.IRC_enc_info->ver_stride) * 3 / 2); |
806 | + memcpy(Opt_SrcImg->buf, g_MixedOpt_Buffer, g_JZC1_info.Opt_enc_info->hor_stride * g_JZC1_info.Opt_enc_info->ver_stride * 3 / 2); | ||
770 | 807 | ||
771 | g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF; | 808 | g_MixedOptBuffer_UseFlag = JZ_FLAGCODE_OFF; |
772 | 809 | ||
@@ -817,10 +854,9 @@ static void *MixedVideo_Thread(void *args) | @@ -817,10 +854,9 @@ static void *MixedVideo_Thread(void *args) | ||
817 | 854 | ||
818 | //JZSDK_LOG_DEBUG("DstImg->buf_size:%d", DstImg->buf_size); | 855 | //JZSDK_LOG_DEBUG("DstImg->buf_size:%d", DstImg->buf_size); |
819 | 856 | ||
820 | -#ifdef RTK_MPP_STATUS_ON | ||
821 | MppPacket Packet = NULL; | 857 | MppPacket Packet = NULL; |
822 | 858 | ||
823 | - RTK_mmp_enc_data_to_h264(JZsdk_RtkMmpGetEncHandleAddr(2), DstImg->buf, DstImg->buf_size, &Packet); | 859 | + RTK_mmp_enc_data_to_h264(g_JZC1_info.Fuse_enc_info, DstImg->buf, DstImg->buf_size, &Packet); |
824 | 860 | ||
825 | h264DataLen = mpp_packet_get_length(Packet); | 861 | h264DataLen = mpp_packet_get_length(Packet); |
826 | h264Data = (unsigned char *)mpp_packet_get_pos(Packet); | 862 | h264Data = (unsigned char *)mpp_packet_get_pos(Packet); |
@@ -829,7 +865,6 @@ static void *MixedVideo_Thread(void *args) | @@ -829,7 +865,6 @@ static void *MixedVideo_Thread(void *args) | ||
829 | 865 | ||
830 | //释放掉packet | 866 | //释放掉packet |
831 | mpp_packet_deinit(&Packet); | 867 | mpp_packet_deinit(&Packet); |
832 | -#endif | ||
833 | 868 | ||
834 | //推送视频流 | 869 | //推送视频流 |
835 | JZC1_PushFrame(VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD, h264Data, h264DataLen); | 870 | JZC1_PushFrame(VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD, h264Data, h264DataLen); |
@@ -858,8 +893,9 @@ static void *MixedVideo_Thread(void *args) | @@ -858,8 +893,9 @@ static void *MixedVideo_Thread(void *args) | ||
858 | static T_JZsdkReturnCode JZC1_MixedVideo_Init() | 893 | static T_JZsdkReturnCode JZC1_MixedVideo_Init() |
859 | { | 894 | { |
860 | #ifdef IRC_CONFIG_STATUS_ON | 895 | #ifdef IRC_CONFIG_STATUS_ON |
861 | - g_MixedIrc_Buffer = (unsigned char *)malloc(JZ_ALIGN(FIRST_WIDTH, 16)*JZ_ALIGN(FIRST_HEIGHT, 16)*3/2); | ||
862 | - g_MixedOpt_Buffer = (unsigned char *)malloc(JZ_ALIGN(SECOND_WIDTH, 16)*JZ_ALIGN(SECOND_HEIGHT, 16)*3/2); | 896 | + |
897 | + g_MixedIrc_Buffer = (unsigned char *)malloc(g_JZC1_info.IRC_enc_info->hor_stride * g_JZC1_info.IRC_enc_info->ver_stride * 3/2); | ||
898 | + g_MixedOpt_Buffer = (unsigned char *)malloc(g_JZC1_info.Opt_enc_info->hor_stride * g_JZC1_info.Opt_enc_info->ver_stride * 3/2); | ||
863 | 899 | ||
864 | //混合视频初始化 | 900 | //混合视频初始化 |
865 | pthread_t Task; | 901 | pthread_t Task; |
@@ -880,150 +916,13 @@ static T_JZsdkReturnCode JZC1_MixedVideo_Init() | @@ -880,150 +916,13 @@ static T_JZsdkReturnCode JZC1_MixedVideo_Init() | ||
880 | } | 916 | } |
881 | 917 | ||
882 | 918 | ||
883 | -#endif | ||
884 | - | ||
885 | -//JZ_C1 的媒体初始化 | ||
886 | -static T_JZsdkReturnCode JZC1_MediaInit() | ||
887 | -{ | ||
888 | - T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
889 | - | ||
890 | - | ||
891 | -//初始化媒体模块 | ||
892 | -#ifdef MEDIA_PROC_CONFIG_STATUS_ON | ||
893 | - | ||
894 | - //初始化videoMgmt模块 | ||
895 | - VideoMgmt_Init(); | ||
896 | - | ||
897 | - //初始化Mulit模块 | ||
898 | - #ifdef RTK_MPP_STATUS_ON | ||
899 | - //初始化红外的编解码器 | ||
900 | - RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(0), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, FIRST_WIDTH, FIRST_HEIGHT, 30, 5); | ||
901 | - | ||
902 | - //初始化光学的编解码器 | ||
903 | - RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); | ||
904 | - RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); | ||
905 | - | ||
906 | - // RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); | ||
907 | - // RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); | ||
908 | - | ||
909 | - //初始化混合视频流的编码器 | ||
910 | - RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(2), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); | ||
911 | - | ||
912 | - #endif | ||
913 | - | ||
914 | - //初始化Camera模块 | ||
915 | - int CameraFd = -1; | ||
916 | - ret = V4l2_Camarainit2(&CameraFd, SECOND_WIDTH, SECOND_HEIGHT, 30); | ||
917 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
918 | - { | ||
919 | - JZSDK_LOG_ERROR("光学相机启动失败"); | ||
920 | - } | ||
921 | - else | ||
922 | - { | ||
923 | - | ||
924 | - //光学相机的抓取 | ||
925 | - ret = JZsdk_FrameCatch_Single(JZC1_OptDeal); | ||
926 | - } | ||
927 | - | ||
928 | - //初始化IRC_funtion模块 | ||
929 | - ret = IRC_ParamInit(FIRST_HEIGHT, FIRST_WIDTH, 25); | ||
930 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
931 | - { | ||
932 | - JZSDK_LOG_ERROR("初始化红外的数据处理失败"); | ||
933 | - } | ||
934 | - else | ||
935 | - { | ||
936 | - //初始化红外的数据输入 | ||
937 | - ret = JZsdk_JZC1_Irc_Data_Init(); | ||
938 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
939 | - { | ||
940 | - JZSDK_LOG_ERROR("红外相机初始化失败"); | ||
941 | - } | ||
942 | - } | ||
943 | - | ||
944 | - //设置默认参数 | ||
945 | - | ||
946 | - //默认推送红外摄像头 后续改成 红外+光学 的组合画面 | ||
947 | - VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD); | ||
948 | - | ||
949 | - //设置快门为开 | ||
950 | - JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON); | ||
951 | - | ||
952 | - //设置伪彩颜色为hot | ||
953 | - int value = 8; | ||
954 | - Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value); | ||
955 | - | ||
956 | - //设置为默认输出模式 | ||
957 | - value = 0; | ||
958 | - Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); | ||
959 | - | ||
960 | - //设置默认打开自动校正 | ||
961 | - value = JZ_FLAGCODE_ON; | ||
962 | - Proc_IRC_param(JZ_FLAGCODE_SET, JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE, &value); | ||
963 | - | ||
964 | - //初始化变焦模块 | ||
965 | - Cam_Zoom_Init(); | ||
966 | - | ||
967 | - //初始化RGA模块 | ||
968 | -#ifdef RTK_RGA_STATUS_ON | ||
969 | - ret = JZC1_RgaInit(&g_C1_RgaIrcInfo, JZ_ALIGN(FIRST_WIDTH, 16), JZ_ALIGN(FIRST_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP); | ||
970 | - ret = JZC1_RgaInit(&g_C1_RgaOptInfo, JZ_ALIGN(SECOND_WIDTH, 16), JZ_ALIGN(SECOND_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP); | ||
971 | - | ||
972 | - //混合视频初始化 | ||
973 | - JZC1_MixedVideo_Init(); | ||
974 | -#endif | ||
975 | - | ||
976 | -#endif | ||
977 | - | ||
978 | - | ||
979 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
980 | -} | ||
981 | - | ||
982 | -#ifdef RTK_RGA_STATUS_ON | ||
983 | - | ||
984 | -static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo **rgaInfo, int dst_width, int dst_height, int dst_format) | ||
985 | -{ | ||
986 | - | ||
987 | - | ||
988 | - //初始化rga结构体 | ||
989 | - (*rgaInfo) = (C1_RgaInfo *)malloc(sizeof(C1_RgaInfo)); | ||
990 | - if ((*rgaInfo) == NULL) | ||
991 | - { | ||
992 | - JZSDK_LOG_ERROR("RGA初始化失败"); | ||
993 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
994 | - } | ||
995 | - | ||
996 | - int width = dst_width; | ||
997 | - int height = dst_height; | ||
998 | - int rect_x = 0; | ||
999 | - int rect_y = 0; | ||
1000 | - int rect_w = dst_width; | ||
1001 | - int rect_h = dst_height; | ||
1002 | - | ||
1003 | - | ||
1004 | - (*rgaInfo)->src_img = NULL; | ||
1005 | - RK_Rga_ImageInit(&(*rgaInfo)->src_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输入模块 | ||
1006 | - | ||
1007 | - (*rgaInfo)->corp_img = NULL; | ||
1008 | - RK_Rga_ImageInit(&(*rgaInfo)->corp_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化裁剪模块 | ||
1009 | - | ||
1010 | - (*rgaInfo)->dst_img = NULL; | ||
1011 | - RK_Rga_ImageInit(&(*rgaInfo)->dst_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输出模块 | ||
1012 | - | ||
1013 | - | ||
1014 | - | ||
1015 | -} | ||
1016 | - | ||
1017 | -#endif | ||
1018 | - | ||
1019 | //rga处理 | 919 | //rga处理 |
1020 | -#ifdef RTK_RGA_STATUS_ON | ||
1021 | static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size) | 920 | static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size) |
1022 | { | 921 | { |
1023 | int d_ret; | 922 | int d_ret; |
1024 | 923 | ||
1025 | 924 | ||
1026 | - if (g_C1_RgaIrcInfo == NULL || *imgage_size != rga_info->src_img->buf_size) | 925 | + if (g_JZC1_info.IRC_rga_info == NULL || *imgage_size != rga_info->src_img->buf_size) |
1027 | { | 926 | { |
1028 | printf("C1_Rga_Deal failed imagesize:%d bufsize:%d\n", *imgage_size, rga_info->src_img->buf_size); | 927 | printf("C1_Rga_Deal failed imagesize:%d bufsize:%d\n", *imgage_size, rga_info->src_img->buf_size); |
1029 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 928 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -1089,33 +988,201 @@ static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned | @@ -1089,33 +988,201 @@ static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned | ||
1089 | 988 | ||
1090 | } | 989 | } |
1091 | 990 | ||
991 | +T_JZsdkReturnCode JZC1_SetNextFrame_IDR(unsigned int index) | ||
992 | +{ | ||
993 | + if (index == JZ_C1_IRC_INDEX) | ||
994 | + { | ||
995 | + RTK_mmp_enc_SetNextFrame_IDR(g_JZC1_info.IRC_enc_info); | ||
996 | + } | ||
997 | + else if (index == JZ_C1_OPT_INDEX) | ||
998 | + { | ||
999 | + RTK_mmp_enc_SetNextFrame_IDR(g_JZC1_info.Opt_enc_info); | ||
1000 | + } | ||
1001 | + else if (index == JZ_C1_FUSE_INDEX) | ||
1002 | + { | ||
1003 | + RTK_mmp_enc_SetNextFrame_IDR(g_JZC1_info.Fuse_enc_info); | ||
1004 | + } | ||
1005 | + | ||
1006 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1007 | + | ||
1008 | +} | ||
1009 | + | ||
1010 | + | ||
1092 | #endif | 1011 | #endif |
1093 | 1012 | ||
1013 | +//c1的实际初始化函数 | ||
1094 | T_JZsdkReturnCode JZC1_Init() | 1014 | T_JZsdkReturnCode JZC1_Init() |
1095 | { | 1015 | { |
1096 | - T_JZsdkReturnCode ret; | 1016 | +#ifdef RTK_MPP_STATUS_ON |
1017 | + | ||
1018 | + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1097 | 1019 | ||
1098 | - //初始化引脚 | ||
1099 | - Ircut_Init(); | 1020 | + T_JZsdkVideoMgmtHandler VideoMgmtHandler = { |
1021 | + .SetNextFrame_IDR = JZC1_SetNextFrame_IDR, | ||
1022 | + }; | ||
1023 | + VideoMgmt_Init(VideoMgmtHandler); | ||
1100 | 1024 | ||
1101 | - //初始化媒体模块 | ||
1102 | - ret = JZC1_MediaInit(); | 1025 | + //初始化红外的编码器 |
1026 | + g_JZC1_info.IRC_enc_info = (T_rtk_mmp_enc_info *)malloc(sizeof(T_rtk_mmp_enc_info)); | ||
1027 | + if (g_JZC1_info.IRC_enc_info == NULL) | ||
1028 | + { | ||
1029 | + JZSDK_LOG_ERROR("malloc enc_info failed"); | ||
1030 | + } | ||
1103 | 1031 | ||
1104 | - JZSDK_LOG_INFO("JZ_C1 INIT COMPLETED\n"); | 1032 | + g_JZC1_info.IRC_enc_info->Input_fmt = MPP_FMT_YUV420SP; |
1033 | + g_JZC1_info.IRC_enc_info->encType = MPP_VIDEO_CodingAVC; | ||
1034 | + g_JZC1_info.IRC_enc_info->width = JZ_C1_IRC_WIDTH; | ||
1035 | + g_JZC1_info.IRC_enc_info->height = JZ_C1_IRC_HEIGHT; | ||
1036 | + g_JZC1_info.IRC_enc_info->FrameNum = JZ_C1_IRC_FRAMERATE; | ||
1037 | + g_JZC1_info.IRC_enc_info->IDR_gop = 5; | ||
1105 | 1038 | ||
1106 | - return ret; | ||
1107 | -} | 1039 | + g_JZC1_info.IRC_enc_info->hor_stride = JZ_ALIGN(g_JZC1_info.IRC_enc_info->width, 16); |
1040 | + g_JZC1_info.IRC_enc_info->ver_stride = JZ_ALIGN(g_JZC1_info.IRC_enc_info->height, 16); | ||
1041 | + | ||
1042 | + RTK_mmp_enc_Init(g_JZC1_info.IRC_enc_info); | ||
1043 | + | ||
1044 | + //初始化光学摄像头的解码器 | ||
1045 | + g_JZC1_info.Opt_dec_info = (T_rtk_mmp_dec_info *)malloc(sizeof(T_rtk_mmp_dec_info)); | ||
1046 | + if (g_JZC1_info.Opt_dec_info == NULL) | ||
1047 | + { | ||
1048 | + JZSDK_LOG_ERROR("malloc dec_info failed"); | ||
1049 | + } | ||
1050 | + | ||
1051 | + g_JZC1_info.Opt_dec_info->Dec_type = MPP_VIDEO_CodingMJPEG; | ||
1052 | + g_JZC1_info.Opt_dec_info->out_format = MPP_FMT_YUV420SP; | ||
1053 | + g_JZC1_info.Opt_dec_info->width = JZ_C1_OPT_WIDTH; | ||
1054 | + g_JZC1_info.Opt_dec_info->height = JZ_C1_OPT_HEIGHT; | ||
1108 | 1055 | ||
1056 | + g_JZC1_info.Opt_dec_info->hor_stride = JZ_ALIGN(g_JZC1_info.Opt_dec_info->width, 16); | ||
1057 | + g_JZC1_info.Opt_dec_info->ver_stride = JZ_ALIGN(g_JZC1_info.Opt_dec_info->height, 16); | ||
1109 | 1058 | ||
1059 | + RTK_mmp_dec_Init(g_JZC1_info.Opt_dec_info); | ||
1110 | 1060 | ||
1061 | + //初始化光学的编码器 | ||
1062 | + g_JZC1_info.Opt_enc_info = (T_rtk_mmp_enc_info *)malloc(sizeof(T_rtk_mmp_enc_info)); | ||
1063 | + if (g_JZC1_info.Opt_enc_info == NULL) | ||
1064 | + { | ||
1065 | + JZSDK_LOG_ERROR("malloc enc_info failed"); | ||
1066 | + } | ||
1067 | + | ||
1068 | + g_JZC1_info.Opt_enc_info->Input_fmt = MPP_FMT_YUV420SP; | ||
1069 | + g_JZC1_info.Opt_enc_info->encType = MPP_VIDEO_CodingAVC; | ||
1070 | + g_JZC1_info.Opt_enc_info->width = JZ_C1_OPT_WIDTH; | ||
1071 | + g_JZC1_info.Opt_enc_info->height = JZ_C1_OPT_HEIGHT; | ||
1072 | + g_JZC1_info.Opt_enc_info->FrameNum = JZ_C1_OPT_FRAMERATE; | ||
1073 | + g_JZC1_info.Opt_enc_info->IDR_gop = 15; | ||
1074 | + | ||
1075 | + g_JZC1_info.Opt_enc_info->hor_stride = JZ_ALIGN(g_JZC1_info.Opt_enc_info->width, 16); | ||
1076 | + g_JZC1_info.Opt_enc_info->ver_stride = JZ_ALIGN(g_JZC1_info.Opt_enc_info->height, 16); | ||
1077 | + | ||
1078 | + RTK_mmp_enc_Init(g_JZC1_info.Opt_enc_info); | ||
1079 | + | ||
1080 | + //初始化融合的编码器 | ||
1081 | + g_JZC1_info.Fuse_enc_info = (T_rtk_mmp_enc_info *)malloc(sizeof(T_rtk_mmp_enc_info)); | ||
1082 | + if (g_JZC1_info.Fuse_enc_info == NULL) | ||
1083 | + { | ||
1084 | + JZSDK_LOG_ERROR("malloc enc_info failed"); | ||
1085 | + } | ||
1086 | + | ||
1087 | + g_JZC1_info.Fuse_enc_info->Input_fmt = MPP_FMT_YUV420SP; | ||
1088 | + g_JZC1_info.Fuse_enc_info->encType = MPP_VIDEO_CodingAVC; | ||
1089 | + g_JZC1_info.Fuse_enc_info->width = JZ_C1_FUSE_WIDTH; | ||
1090 | + g_JZC1_info.Fuse_enc_info->height = JZ_C1_FUSE_HEIGHT; | ||
1091 | + g_JZC1_info.Fuse_enc_info->FrameNum = JZ_C1_FUSE_FRAMERATE; | ||
1092 | + g_JZC1_info.Fuse_enc_info->IDR_gop = 15; | ||
1093 | + | ||
1094 | + g_JZC1_info.Fuse_enc_info->hor_stride = JZ_ALIGN(g_JZC1_info.Fuse_enc_info->width, 16); | ||
1095 | + g_JZC1_info.Fuse_enc_info->ver_stride = JZ_ALIGN(g_JZC1_info.Fuse_enc_info->height, 16); | ||
1096 | + | ||
1097 | + RTK_mmp_enc_Init(g_JZC1_info.Fuse_enc_info); | ||
1098 | + | ||
1099 | + //初始化光学相机 | ||
1100 | + g_JZC1_info.Opt_Camera_info = (JZsdk_CameraInfo *)malloc(sizeof(JZsdk_CameraInfo)); | ||
1101 | + if (g_JZC1_info.Opt_Camera_info == NULL) | ||
1102 | + { | ||
1103 | + JZSDK_LOG_ERROR("malloc camera_info failed"); | ||
1104 | + } | ||
1105 | + | ||
1106 | + g_JZC1_info.Opt_Camera_info->width = JZ_C1_OPT_WIDTH; | ||
1107 | + g_JZC1_info.Opt_Camera_info->height = JZ_C1_OPT_HEIGHT; | ||
1108 | + g_JZC1_info.Opt_Camera_info->FrameNum = JZ_C1_OPT_FRAMERATE; | ||
1109 | + g_JZC1_info.Opt_Camera_info->CameraFormat = JZ_C1_OPT_PIXEL; | ||
1110 | + g_JZC1_info.Opt_Camera_info->ThreadMode = JZSDK_SINGLE_THREAD; | ||
1111 | + memset(&(g_JZC1_info.Opt_Camera_info->CameraParam), 0, sizeof(JZsdk_CameraParam)); | ||
1112 | + memset(g_JZC1_info.Opt_Camera_info->CmeraDevPath, 0, sizeof(g_JZC1_info.Opt_Camera_info->CmeraDevPath)); | ||
1113 | + memcpy(g_JZC1_info.Opt_Camera_info->CmeraDevPath, JZ_C1_OPT_DEV_PATH, strlen(JZ_C1_OPT_DEV_PATH)); | ||
1114 | + g_JZC1_info.Opt_Camera_info->SingleDataOutput = JZC1_OptDeal; | ||
1115 | + | ||
1116 | + ret = Camera_Init_2(g_JZC1_info.Opt_Camera_info); | ||
1117 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
1118 | + { | ||
1119 | + JZSDK_LOG_ERROR("光学相机启动失败"); | ||
1120 | + } | ||
1121 | + | ||
1122 | + //初始化IRC_funtion模块 | ||
1123 | + ret = IRC_ParamInit(JZ_C1_IRC_HEIGHT, JZ_C1_IRC_WIDTH, 25); | ||
1124 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
1125 | + { | ||
1126 | + JZSDK_LOG_ERROR("初始化红外的数据处理失败"); | ||
1127 | + } | ||
1128 | + else | ||
1129 | + { | ||
1130 | + //初始化红外的数据输入 | ||
1131 | + ret = JZsdk_JZC1_Irc_Data_Init(); | ||
1132 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
1133 | + { | ||
1134 | + JZSDK_LOG_ERROR("红外相机初始化失败"); | ||
1135 | + } | ||
1136 | + } | ||
1137 | + | ||
1138 | + //默认推送红外摄像头 后续改成 红外+光学 的组合画面 | ||
1139 | + VideoMgmt_VideoStreamFlowIndex(JZ_C1_FUSE_INDEX); | ||
1140 | + | ||
1141 | + //设置快门为开 | ||
1142 | + JZsdk_Camera_ShutterSwitch(JZ_FLAGCODE_ON); | ||
1143 | + | ||
1144 | + //设置伪彩颜色为hot | ||
1145 | + int value = 8; | ||
1146 | + Camera_param(JZ_FLAGCODE_SET, CAMERA_PSEUDO_COLOR, &value); | ||
1147 | + | ||
1148 | + //设置为默认输出模式 | ||
1149 | + value = 0; | ||
1150 | + Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); | ||
1111 | 1151 | ||
1152 | + //设置默认打开自动校正 | ||
1153 | + value = JZ_FLAGCODE_ON; | ||
1154 | + Proc_IRC_param(JZ_FLAGCODE_SET, JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE, &value); | ||
1112 | 1155 | ||
1156 | + //初始化变焦模块 | ||
1157 | + Cam_Zoom_Init(); | ||
1113 | 1158 | ||
1159 | + //初始化C1的RGA模块 | ||
1160 | +#ifdef RTK_RGA_STATUS_ON | ||
1114 | 1161 | ||
1162 | + g_JZC1_info.IRC_rga_info = (C1_RgaInfo *)malloc(sizeof(C1_RgaInfo)); | ||
1163 | + if (g_JZC1_info.IRC_rga_info == NULL) | ||
1164 | + { | ||
1165 | + JZSDK_LOG_ERROR("malloc IRC_rga_info failed"); | ||
1166 | + } | ||
1115 | 1167 | ||
1168 | + ret = JZC1_RgaInit(g_JZC1_info.IRC_rga_info, g_JZC1_info.IRC_enc_info->hor_stride, g_JZC1_info.IRC_enc_info->ver_stride, RK_FORMAT_YCbCr_420_SP); | ||
1116 | 1169 | ||
1170 | + g_JZC1_info.Opt_rga_info = (C1_RgaInfo *)malloc(sizeof(C1_RgaInfo)); | ||
1171 | + if (g_JZC1_info.Opt_rga_info == NULL) | ||
1172 | + { | ||
1173 | + JZSDK_LOG_ERROR("malloc Opt_rga_info failed"); | ||
1174 | + } | ||
1175 | + | ||
1176 | + ret = JZC1_RgaInit(g_JZC1_info.Opt_rga_info, g_JZC1_info.Opt_enc_info->hor_stride, g_JZC1_info.Opt_enc_info->ver_stride, RK_FORMAT_YCbCr_420_SP); | ||
1117 | 1177 | ||
1178 | + //混合视频初始化 | ||
1179 | + JZC1_MixedVideo_Init(); | ||
1180 | +#endif | ||
1118 | 1181 | ||
1119 | 1182 | ||
1183 | +#endif | ||
1120 | 1184 | ||
1185 | + JZSDK_LOG_INFO("JZC1_Init success"); | ||
1121 | 1186 | ||
1187 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1188 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * h10 h10t 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_h10_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + int value[5] = {0}; | ||
18 | + if (mode == APP_UART) | ||
19 | + { | ||
20 | + //串口设备1初始化 | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + | ||
24 | + } | ||
25 | + | ||
26 | + //喊话器初始化 | ||
27 | + Megaphone_Init(); | ||
28 | + | ||
29 | + //云台初始化 | ||
30 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
31 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * h10 h10t 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_h10t_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + int value[5] = {0}; | ||
18 | + if (mode == APP_UART) | ||
19 | + { | ||
20 | + //串口设备1初始化 | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + | ||
24 | + } | ||
25 | + | ||
26 | + //4g设备初始化 | ||
27 | + value[0] = COMM_4G_UART_BITRATE; | ||
28 | + JZsdk_HalPort_Init(UART_4G, value); | ||
29 | + | ||
30 | + //喊话器初始化 | ||
31 | + Megaphone_Init(); | ||
32 | + | ||
33 | + //云台初始化 | ||
34 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
35 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * h150s h150t 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_h150s_h150t_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + if (mode == APP_PSDK) | ||
18 | + { | ||
19 | + //串口设备1初始化 | ||
20 | + int value[1]; | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + } | ||
24 | + | ||
25 | + //h150t额外开启4g | ||
26 | + if (DEVICE_VERSION == JZ_H150T) | ||
27 | + { | ||
28 | + //4g设备初始化 | ||
29 | + int value[1]; | ||
30 | + value[0] = COMM_4G_UART_BITRATE; | ||
31 | + JZsdk_HalPort_Init(UART_4G, value); | ||
32 | + } | ||
33 | + | ||
34 | + //喊话器初始化 | ||
35 | + Megaphone_Init(); | ||
36 | + | ||
37 | + //云台初始化 | ||
38 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
39 | + | ||
40 | + //相机初始化 | ||
41 | + MediaProc_Init(); | ||
42 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * h1e 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_h1e_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + if (mode == APP_UART) | ||
18 | + { | ||
19 | + //串口设备1初始化 | ||
20 | + int value[1] = {0}; | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + } | ||
24 | + | ||
25 | + //4g设备初始化 | ||
26 | + value[0] = COMM_4G_UART_BITRATE; | ||
27 | + JZsdk_HalPort_Init(UART_4G, value); | ||
28 | + | ||
29 | + //喊话器初始化 | ||
30 | + Megaphone_Init(); | ||
31 | + | ||
32 | + //云台初始化 | ||
33 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_TRANSPARENT); | ||
34 | + | ||
35 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
36 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * h15tt 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_h1t_init(int mode) | ||
13 | +{ | ||
14 | + int value[1] = {0}; | ||
15 | + | ||
16 | + //音频库初始化 | ||
17 | + AudioDeal_Init(); | ||
18 | + | ||
19 | + if (mode == APP_UART) | ||
20 | + { | ||
21 | + //串口设备1初始化 | ||
22 | + value[0] = UART_DEV1_BITRATE; | ||
23 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
24 | + } | ||
25 | + | ||
26 | + //4g设备初始化 | ||
27 | + value[0] = COMM_4G_UART_BITRATE; | ||
28 | + JZsdk_HalPort_Init(UART_4G, value); | ||
29 | + | ||
30 | + //喊话器初始化 | ||
31 | + Megaphone_Init(); | ||
32 | + | ||
33 | + //云台初始化 | ||
34 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_TRANSPARENT); | ||
35 | + | ||
36 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
37 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * u3 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_u3_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + int value[5] = {0}; | ||
18 | + if (mode == APP_UART) | ||
19 | + { | ||
20 | + //串口设备1初始化 | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + | ||
24 | + } | ||
25 | + | ||
26 | + //串口设备2初始化 | ||
27 | + value[0] = UART_DEV2_BITRATE; | ||
28 | + JZsdk_HalPort_Init(UART_DEV_2, value); | ||
29 | + | ||
30 | + //喊话器初始化 | ||
31 | + Megaphone_Init(); | ||
32 | + | ||
33 | + //云台初始化 | ||
34 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
35 | + | ||
36 | + //灯类初始化 | ||
37 | + Lighting_Init(); | ||
38 | + | ||
39 | + delayMs(1000); | ||
40 | + | ||
41 | + //消息订阅初始化 | ||
42 | + HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
43 | + | ||
44 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * u30 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_u30_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + int value[5] = {0}; | ||
18 | + if (mode == APP_UART) | ||
19 | + { | ||
20 | + //串口设备1初始化 | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + | ||
24 | + } | ||
25 | + | ||
26 | + //串口设备2初始化 | ||
27 | + value[0] = UART_DEV2_BITRATE; | ||
28 | + JZsdk_HalPort_Init(UART_DEV_2, value); | ||
29 | + | ||
30 | + //喊话器初始化 | ||
31 | + Megaphone_Init(); | ||
32 | + | ||
33 | + //云台初始化 | ||
34 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
35 | + | ||
36 | + //灯类初始化 | ||
37 | + Lighting_Init(); | ||
38 | + | ||
39 | + delayMs(1000); | ||
40 | + | ||
41 | + //消息订阅初始化 | ||
42 | + HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
43 | + | ||
44 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * u3d 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_u3d_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + int value[5] = {0}; | ||
18 | + if (mode == APP_UART) | ||
19 | + { | ||
20 | + //串口设备1初始化 | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + | ||
24 | + } | ||
25 | + | ||
26 | + //串口设备2初始化 | ||
27 | + value[0] = UART_DEV2_BITRATE; | ||
28 | + JZsdk_HalPort_Init(UART_DEV_2, value); | ||
29 | + | ||
30 | + //喊话器初始化 | ||
31 | + Megaphone_Init(); | ||
32 | + | ||
33 | + //云台初始化 | ||
34 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
35 | + | ||
36 | + //灯类初始化 | ||
37 | + Lighting_Init(); | ||
38 | + | ||
39 | + delayMs(1000); | ||
40 | + | ||
41 | + //消息订阅初始化 | ||
42 | + HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
43 | + | ||
44 | +} |
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * u3s 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_u3s_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + int value[5] = {0}; | ||
18 | + if (mode == APP_UART) | ||
19 | + { | ||
20 | + //串口设备1初始化 | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + | ||
24 | + } | ||
25 | + | ||
26 | + //串口设备2初始化 | ||
27 | + value[0] = UART_DEV2_BITRATE; | ||
28 | + JZsdk_HalPort_Init(UART_DEV_2, value); | ||
29 | + | ||
30 | + //喊话器初始化 | ||
31 | + Megaphone_Init(); | ||
32 | + | ||
33 | + //云台初始化 | ||
34 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
35 | + | ||
36 | + //灯类初始化 | ||
37 | + Lighting_Init(); | ||
38 | +#ifdef SIDE_LASER_STATUS_ON | ||
39 | + //侧边激光初始化 | ||
40 | + SideLaser_Init(); | ||
41 | +#endif | ||
42 | + delayMs(1000); | ||
43 | + | ||
44 | + //消息订阅初始化 | ||
45 | + HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
46 | + | ||
47 | +} |
JZsdk_Config/DeviceSample/TF_A1/TF_a1.c
0 → 100644
1 | +#include "JZsdkLib.h" | ||
2 | +#include "BaseConfig.h" | ||
3 | +#include <pthread.h> | ||
4 | + | ||
5 | +/**************************** | ||
6 | + * | ||
7 | + * a1 初始化 | ||
8 | + * | ||
9 | + * mode psdk为psdk模式 uart为串口模式 | ||
10 | + * | ||
11 | + * ****************************/ | ||
12 | +T_JZsdkReturnCode JZ_a1_init(int mode) | ||
13 | +{ | ||
14 | + //音频库初始化 | ||
15 | + AudioDeal_Init(); | ||
16 | + | ||
17 | + int value[5] = {0}; | ||
18 | + if (mode == APP_UART) | ||
19 | + { | ||
20 | + //串口设备1初始化 | ||
21 | + value[0] = UART_DEV1_BITRATE; | ||
22 | + JZsdk_HalPort_Init(UART_DEV_1, value); | ||
23 | + } | ||
24 | + | ||
25 | + //串口设备2初始化 | ||
26 | + value[0] = UART_DEV2_BITRATE; | ||
27 | + JZsdk_HalPort_Init(UART_DEV_2, value); | ||
28 | + | ||
29 | + //喊话器初始化 | ||
30 | + Megaphone_Init(); | ||
31 | + | ||
32 | + //云台初始化 | ||
33 | + Gimbal_Init(JZ_MODULE_CONTROL_WAY_INDEPENDENT); | ||
34 | + | ||
35 | + //灯类初始化 | ||
36 | + Lighting_Init(); | ||
37 | + | ||
38 | + delayMs(1000); | ||
39 | + | ||
40 | + //消息订阅初始化 | ||
41 | + HalSend_type1Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); | ||
42 | +} |
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | #define VERSION_CHOOSE_H | 7 | #define VERSION_CHOOSE_H |
8 | #include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h" | 8 | #include "JZsdk_Base/JZsdk_Code/JZsdk_DeviceCode.h" |
9 | //1~10行 除了D可以修改版本选择 禁止动任何东西 | 9 | //1~10行 除了D可以修改版本选择 禁止动任何东西 |
10 | -#define DEVICE_VERSION JZ_U3S | 10 | +#define DEVICE_VERSION JZ_C1 |
11 | 11 | ||
12 | //禁止修改行 选择是串口程序 还是 psdk程序 | 12 | //禁止修改行 选择是串口程序 还是 psdk程序 |
13 | #define APP_VERSION APP_PSDK | 13 | #define APP_VERSION APP_PSDK |
@@ -19,7 +19,7 @@ | @@ -19,7 +19,7 @@ | ||
19 | #define MAJOR_VERSION 0x01 | 19 | #define MAJOR_VERSION 0x01 |
20 | #define MINOR_VERSION 0x03 | 20 | #define MINOR_VERSION 0x03 |
21 | #define MODIFY_VERSION 0x10 | 21 | #define MODIFY_VERSION 0x10 |
22 | -#define DEBUG_VERSION 0x00 | 22 | +#define DEBUG_VERSION 0x01 |
23 | 23 | ||
24 | //禁止修改行 滤波方式 | 24 | //禁止修改行 滤波方式 |
25 | #define FILTERING_TYPE HIGH_PASS_FILTERING | 25 | #define FILTERING_TYPE HIGH_PASS_FILTERING |
@@ -20,8 +20,8 @@ extern "C" { | @@ -20,8 +20,8 @@ extern "C" { | ||
20 | 20 | ||
21 | /* Exported constants --------------------------------------------------------*/ | 21 | /* Exported constants --------------------------------------------------------*/ |
22 | /* 常亮定义*/ | 22 | /* 常亮定义*/ |
23 | -#define SINGLE_THREAD_SEND 0 | ||
24 | -#define MULTI_THREAD_SEND 1 | 23 | +#define SINGLE_THREAD_SEND JZSDK_SINGLE_THREAD |
24 | +#define MULTI_THREAD_SEND JZSDK_MULTI_THREAD | ||
25 | 25 | ||
26 | /* Exported types ------------------------------------------------------------*/ | 26 | /* Exported types ------------------------------------------------------------*/ |
27 | 27 |
@@ -83,6 +83,14 @@ T_JZsdkReturnCode FOMAT_FirewareOriginRegion_Init(int SerialType, unsigned char | @@ -83,6 +83,14 @@ T_JZsdkReturnCode FOMAT_FirewareOriginRegion_Init(int SerialType, unsigned char | ||
83 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 83 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
84 | } | 84 | } |
85 | 85 | ||
86 | + //检测是否是欧洲定制区域固件 | ||
87 | + if ((SerialNumber[4] == 'E' || SerialNumber[4] == 'e') | ||
88 | + && (SerialNumber[5] == 'U' || SerialNumber[5] == 'u')) | ||
89 | + { | ||
90 | + g_OriginRegionNum = ORIGIN_EU; | ||
91 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
92 | + } | ||
93 | + | ||
86 | //无匹配序列号 | 94 | //无匹配序列号 |
87 | if (FIRMWARE_ORIGIN == DOMESTIC_VERSION) | 95 | if (FIRMWARE_ORIGIN == DOMESTIC_VERSION) |
88 | { | 96 | { |
@@ -94,39 +94,11 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) | @@ -94,39 +94,11 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) | ||
94 | 94 | ||
95 | /*******************************************************************************************************************************************/ | 95 | /*******************************************************************************************************************************************/ |
96 | 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 | -} | ||
123 | - | ||
124 | 97 | ||
125 | //单线程抓取数据线程 | 98 | //单线程抓取数据线程 |
126 | -static void *JZsdk_Catch_SingleThread2(void *args) | 99 | +static void *JZsdk_Catch_SingleThread(void *args) |
127 | { | 100 | { |
128 | - t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput *)args; | ||
129 | - | 101 | + JZsdk_CameraInfo *CameraInfo = (JZsdk_CameraInfo *)args; |
130 | while (1) | 102 | while (1) |
131 | { | 103 | { |
132 | 104 | ||
@@ -134,7 +106,7 @@ static void *JZsdk_Catch_SingleThread2(void *args) | @@ -134,7 +106,7 @@ static void *JZsdk_Catch_SingleThread2(void *args) | ||
134 | unsigned char *buf = NULL; | 106 | unsigned char *buf = NULL; |
135 | 107 | ||
136 | //从相机中读取一张照片 | 108 | //从相机中读取一张照片 |
137 | - V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); | 109 | + V4L2_CameraFrameRecord_OnlyGetFrame2(CameraInfo ,&buf, &buf_size); |
138 | 110 | ||
139 | //JZSDK_LOG_INFO("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); | 111 | //JZSDK_LOG_INFO("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); |
140 | 112 | ||
@@ -145,10 +117,10 @@ static void *JZsdk_Catch_SingleThread2(void *args) | @@ -145,10 +117,10 @@ static void *JZsdk_Catch_SingleThread2(void *args) | ||
145 | } | 117 | } |
146 | 118 | ||
147 | //进行数据处理 | 119 | //进行数据处理 |
148 | - task->task_function(buf, buf_size); | 120 | + CameraInfo->SingleDataOutput(buf, buf_size); |
149 | 121 | ||
150 | //归还图片 | 122 | //归还图片 |
151 | - V4L2_CameraFrameRecord_OnlyReturnFrame(); | 123 | + V4L2_CameraFrameRecord_OnlyReturnFrame2(CameraInfo); |
152 | } | 124 | } |
153 | } | 125 | } |
154 | 126 | ||
@@ -161,35 +133,15 @@ static void *JZsdk_Catch_SingleThread2(void *args) | @@ -161,35 +133,15 @@ static void *JZsdk_Catch_SingleThread2(void *args) | ||
161 | * 传入线程的处理函数 task_function | 133 | * 传入线程的处理函数 task_function |
162 | * | 134 | * |
163 | * *****************************************/ | 135 | * *****************************************/ |
164 | -T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(unsigned char*, unsigned int)) | 136 | +T_JZsdkReturnCode JZsdk_FrameCatch_Single(JZsdk_CameraInfo *CameraInfo) |
165 | { | 137 | { |
166 | T_JZsdkReturnCode ret; | 138 | T_JZsdkReturnCode ret; |
167 | 139 | ||
168 | - //初始化数据接收线程 | ||
169 | - pthread_t ReadDataTask; | ||
170 | - pthread_attr_t task_attribute; //线程属性 | ||
171 | - pthread_attr_init(&task_attribute); //初始化线程属性 | ||
172 | - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | 140 | + T_JZTaskHandle single_task = NULL; |
141 | + T_JZsdkOsalHandler *osal_handler = JZsdk_Platform_GetOsalHandler(); | ||
142 | + osal_handler->TaskCreate("framecatch_single",JZsdk_Catch_SingleThread, 8192, (void *)CameraInfo, &single_task); | ||
173 | 143 | ||
174 | - | ||
175 | - //单线程模式 | ||
176 | - if (task_function == NULL) | ||
177 | - { | ||
178 | - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
179 | - } | ||
180 | - | ||
181 | - t_FrameCatch_TaskFuntionInput *task = (t_FrameCatch_TaskFuntionInput*)malloc(sizeof(t_FrameCatch_TaskFuntionInput)); | ||
182 | - if (task == NULL) | ||
183 | - { | ||
184 | - // 处理内存分配失败的情况 | ||
185 | - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
186 | - } | ||
187 | - | ||
188 | - //task->task_function = task_function; | ||
189 | - task->task_function = (void (*)(unsigned char *, unsigned int))task_function; | ||
190 | - | ||
191 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread2,(void *)task); //线程 | ||
192 | - if(opus_Protection != 0) | 144 | + if (single_task == NULL) |
193 | { | 145 | { |
194 | JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); | 146 | JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); |
195 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 147 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -198,6 +150,60 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(uns | @@ -198,6 +150,60 @@ T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(uns | ||
198 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 150 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
199 | } | 151 | } |
200 | 152 | ||
153 | + | ||
154 | + | ||
155 | + | ||
156 | + | ||
157 | + | ||
158 | + | ||
159 | + | ||
160 | + | ||
161 | + | ||
162 | + | ||
163 | + | ||
164 | + | ||
165 | + | ||
166 | + | ||
167 | + | ||
168 | + | ||
169 | + | ||
170 | + | ||
171 | + | ||
172 | + | ||
173 | + | ||
174 | + | ||
175 | + | ||
176 | + | ||
177 | +//多线程抓取数据线程 | ||
178 | +static void *JZsdk_Catch_MultiThread2(void *args) | ||
179 | +{ | ||
180 | + while (1) | ||
181 | + { | ||
182 | + unsigned int buf_size = 0; | ||
183 | + unsigned char *buf = NULL; | ||
184 | + | ||
185 | + //从相机中读取一张照片 | ||
186 | + V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); | ||
187 | + | ||
188 | + //printf("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); | ||
189 | + | ||
190 | + if (buf == NULL) | ||
191 | + { | ||
192 | + JZSDK_LOG_ERROR("相机数据读取失败"); | ||
193 | + continue; | ||
194 | + } | ||
195 | + | ||
196 | + //放入缓冲池 //将数据放入缓冲池,从而被其他线程使用 | ||
197 | + VideoMgmt_write_data(&args, buf, buf_size); | ||
198 | + | ||
199 | + //归还图片 | ||
200 | + V4L2_CameraFrameRecord_OnlyReturnFrame(); | ||
201 | + } | ||
202 | +} | ||
203 | + | ||
204 | + | ||
205 | + | ||
206 | + | ||
201 | /************************* | 207 | /************************* |
202 | * | 208 | * |
203 | * | 209 | * |
@@ -24,10 +24,10 @@ extern "C" { | @@ -24,10 +24,10 @@ extern "C" { | ||
24 | /* Exported types ------------------------------------------------------------*/ | 24 | /* Exported types ------------------------------------------------------------*/ |
25 | 25 | ||
26 | /* Exported functions --------------------------------------------------------*/ | 26 | /* Exported functions --------------------------------------------------------*/ |
27 | -T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode); | ||
28 | -T_JZsdkReturnCode JZsdk_FrameCatch_Single(T_JZsdkReturnCode (*task_function)(unsigned char*, unsigned int)); | 27 | +T_JZsdkReturnCode JZsdk_FrameCatch_Single(JZsdk_CameraInfo *CameraInfo); |
29 | T_JZsdkReturnCode JZsdk_FrameCatch_Multi(void *FrameIndex); | 28 | T_JZsdkReturnCode JZsdk_FrameCatch_Multi(void *FrameIndex); |
30 | 29 | ||
30 | +T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode); | ||
31 | 31 | ||
32 | #ifdef __cplusplus | 32 | #ifdef __cplusplus |
33 | } | 33 | } |
@@ -97,6 +97,7 @@ T_JZsdkReturnCode Cam_Zoom_Init() | @@ -97,6 +97,7 @@ T_JZsdkReturnCode Cam_Zoom_Init() | ||
97 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 97 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
98 | } | 98 | } |
99 | 99 | ||
100 | + JZSDK_LOG_INFO("变焦模块初始化成功!"); | ||
100 | 101 | ||
101 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 102 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
102 | } | 103 | } |
@@ -45,7 +45,7 @@ T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_n | @@ -45,7 +45,7 @@ T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_n | ||
45 | T_JZsdkReturnCode ret; | 45 | T_JZsdkReturnCode ret; |
46 | 46 | ||
47 | //初始化摄像头 | 47 | //初始化摄像头 |
48 | - ret = V4l2_Camarainit2(&g_CameraFd,width,height,frame_num); | 48 | + ret = V4l2_Camarainit(&g_CameraFd,width,height,frame_num); |
49 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 49 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
50 | { | 50 | { |
51 | return ret; | 51 | return ret; |
@@ -65,7 +65,44 @@ T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_n | @@ -65,7 +65,44 @@ T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_n | ||
65 | JZsdk_FrameCatch_Init(ThreadMode); | 65 | JZsdk_FrameCatch_Init(ThreadMode); |
66 | 66 | ||
67 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 67 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
68 | - | 68 | +} |
69 | + | ||
70 | + | ||
71 | + | ||
72 | +T_JZsdkReturnCode Camera_Init_2(JZsdk_CameraInfo *CameraInfo) | ||
73 | +{ | ||
74 | + T_JZsdkReturnCode ret; | ||
75 | + | ||
76 | + //初始化摄像头 | ||
77 | + ret = V4L2_CameraInit_2(CameraInfo); | ||
78 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
79 | + { | ||
80 | + return ret; | ||
81 | + } | ||
82 | + | ||
83 | + // //初始化摄像头参数 | ||
84 | + // ret = V4L2_Parameter_Setting(CameraInfo->CameraFd); | ||
85 | + // if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
86 | + // { | ||
87 | + // JZSDK_LOG_ERROR("摄像头参数调整失败"); | ||
88 | + // return ret; | ||
89 | + // } | ||
90 | + | ||
91 | + if (CameraInfo->ThreadMode == JZSDK_SINGLE_THREAD && CameraInfo->SingleDataOutput != NULL) | ||
92 | + { | ||
93 | + JZsdk_FrameCatch_Single(CameraInfo); | ||
94 | + } | ||
95 | + else if(CameraInfo->ThreadMode == JZSDK_MULTI_THREAD) | ||
96 | + { | ||
97 | + //JZsdk_FrameCatch_Init(ThreadMode); | ||
98 | + } | ||
99 | + else | ||
100 | + { | ||
101 | + JZSDK_LOG_ERROR("线程模式错误"); | ||
102 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
103 | + } | ||
104 | + | ||
105 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
69 | } | 106 | } |
70 | 107 | ||
71 | 108 |
@@ -13,6 +13,7 @@ | @@ -13,6 +13,7 @@ | ||
13 | /* Includes ------------------------------------------------------------------*/ | 13 | /* Includes ------------------------------------------------------------------*/ |
14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
15 | #include "MediaProc/MediaProc_Param.h" | 15 | #include "MediaProc/MediaProc_Param.h" |
16 | +#include "MediaProc/Camera/CameraDef.h" | ||
16 | 17 | ||
17 | #include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h" | 18 | #include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h" |
18 | #include "MediaProc/Camera/V4L2_camera/V4L2_CameraParameterSetting.h" | 19 | #include "MediaProc/Camera/V4L2_camera/V4L2_CameraParameterSetting.h" |
@@ -38,6 +39,7 @@ T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(); | @@ -38,6 +39,7 @@ T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(); | ||
38 | T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch(); | 39 | T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch(); |
39 | 40 | ||
40 | T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_num); | 41 | T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_num); |
42 | +T_JZsdkReturnCode Camera_Init_2(JZsdk_CameraInfo *CameraInfo); | ||
41 | 43 | ||
42 | 44 | ||
43 | #ifdef __cplusplus | 45 | #ifdef __cplusplus |
Module/MediaProc/Camera/CameraDef.h
0 → 100644
1 | +/** | ||
2 | + ******************************************************************** | ||
3 | + * @file CameraDef.h | ||
4 | + * Camera的头文件 | ||
5 | + * | ||
6 | + ********************************************************************* | ||
7 | + */ | ||
8 | + | ||
9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
10 | +#ifndef CMAERA_DEF_H | ||
11 | +#define CMAERA_DEF_H | ||
12 | + | ||
13 | +/* Includes ------------------------------------------------------------------*/ | ||
14 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
15 | + | ||
16 | +#ifdef __cplusplus | ||
17 | +extern "C" { | ||
18 | +#endif | ||
19 | + | ||
20 | +/* Exported constants --------------------------------------------------------*/ | ||
21 | +/* 常亮定义*/ | ||
22 | +typedef struct JZsdk_CameraParam | ||
23 | +{ | ||
24 | + unsigned int Brightness; //亮度,该摄像头亮度范围为 1-255 默认128 | ||
25 | + unsigned int Contrast; //对比度,该摄像头对比度范围为 1-255 默认128 | ||
26 | + unsigned int Saturation; //饱和度,该摄像头饱和度范围为 1-255 默认128 | ||
27 | + unsigned int expsure; //曝光,该摄像头曝光范围为 1-255 默认128 | ||
28 | +}JZsdk_CameraParam; | ||
29 | + | ||
30 | + | ||
31 | +typedef struct JZsdk_CameraInfo | ||
32 | +{ | ||
33 | + /***************** 摄像头基础配置 ******************/ | ||
34 | + | ||
35 | + int CameraFd; //摄像头文件描述符 | ||
36 | + unsigned char CmeraDevPath[JZSDK_FILE_PATH_SIZE_MAX]; //摄像头设备路径 | ||
37 | + int width; | ||
38 | + int height; | ||
39 | + int FrameNum; | ||
40 | + int CameraFormat; | ||
41 | + | ||
42 | + /***************** 摄像头参数配置 ******************/ | ||
43 | + JZsdk_CameraParam CameraParam; | ||
44 | + | ||
45 | + /***************** 设置画面数据的输出配置 ******************/ | ||
46 | + | ||
47 | + //相机拍摄的画面流的输出模式 分为单线程和多线程 | ||
48 | + int ThreadMode; | ||
49 | + | ||
50 | + //单线程时,需要提供一个数据输出的函数 | ||
51 | + T_JZsdkReturnCode (*SingleDataOutput)(unsigned char *data, unsigned int len); | ||
52 | + | ||
53 | + //多线程时,输出的缓冲区索引值 | ||
54 | + int VideoMgmt_index; | ||
55 | +}JZsdk_CameraInfo; | ||
56 | + | ||
57 | +/* Exported types ------------------------------------------------------------*/ | ||
58 | + | ||
59 | + | ||
60 | +/* Exported functions --------------------------------------------------------*/ | ||
61 | + | ||
62 | +#ifdef __cplusplus | ||
63 | +} | ||
64 | +#endif | ||
65 | + | ||
66 | +#endif |
@@ -275,7 +275,7 @@ static int open_device() | @@ -275,7 +275,7 @@ static int open_device() | ||
275 | return 0; | 275 | return 0; |
276 | } | 276 | } |
277 | 277 | ||
278 | -T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame_num) | 278 | +T_JZsdkReturnCode V4l2_Camarainit(int *dev_fd, int width, int height, int frame_num) |
279 | { | 279 | { |
280 | int ret; | 280 | int ret; |
281 | 281 | ||
@@ -314,7 +314,8 @@ T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame | @@ -314,7 +314,8 @@ T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame | ||
314 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 314 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
315 | } | 315 | } |
316 | 316 | ||
317 | -int V4L2_CamaraUninit2() | 317 | + |
318 | +int V4L2_CamaraUninit() | ||
318 | { | 319 | { |
319 | 320 | ||
320 | //停止采集 | 321 | //停止采集 |
@@ -12,6 +12,9 @@ | @@ -12,6 +12,9 @@ | ||
12 | 12 | ||
13 | /* Includes ------------------------------------------------------------------*/ | 13 | /* Includes ------------------------------------------------------------------*/ |
14 | 14 | ||
15 | +#include "MediaProc/Camera/CameraDef.h" | ||
16 | +#include <linux/videodev2.h> | ||
17 | + | ||
15 | #ifdef __cplusplus | 18 | #ifdef __cplusplus |
16 | extern "C" { | 19 | extern "C" { |
17 | #endif | 20 | #endif |
@@ -22,13 +25,18 @@ extern "C" { | @@ -22,13 +25,18 @@ extern "C" { | ||
22 | /* Exported types ------------------------------------------------------------*/ | 25 | /* Exported types ------------------------------------------------------------*/ |
23 | 26 | ||
24 | /* Exported functions --------------------------------------------------------*/ | 27 | /* Exported functions --------------------------------------------------------*/ |
25 | -T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame_num); | 28 | +T_JZsdkReturnCode V4l2_Camarainit(int *dev_fd, int width, int height, int frame_num); |
26 | int V4L2_CamaraUninit2(); | 29 | int V4L2_CamaraUninit2(); |
27 | -int V4L2_CameraFrameRecord2(unsigned char **RecordReturnBuffer, int *RecordReturnLength, int Audlength); | 30 | +//int V4L2_CameraFrameRecord2(unsigned char **RecordReturnBuffer, int *RecordReturnLength, int Audlength); |
28 | 31 | ||
29 | int V4L2_CameraFrameRecord_OnlyGetFrame(unsigned char **RecordReturnBuffer, int *RecordReturnLength); | 32 | int V4L2_CameraFrameRecord_OnlyGetFrame(unsigned char **RecordReturnBuffer, int *RecordReturnLength); |
30 | int V4L2_CameraFrameRecord_OnlyReturnFrame(); | 33 | int V4L2_CameraFrameRecord_OnlyReturnFrame(); |
31 | 34 | ||
35 | +T_JZsdkReturnCode V4L2_CameraInit_2(JZsdk_CameraInfo *CameraInfo); | ||
36 | +T_JZsdkReturnCode V4L2_CameraFrameRecord_OnlyGetFrame2(JZsdk_CameraInfo *CameraInfo, unsigned char **RecordReturnBuffer, int *RecordReturnLength); | ||
37 | +T_JZsdkReturnCode V4L2_CameraFrameRecord_OnlyReturnFrame2(JZsdk_CameraInfo *CameraInfo); | ||
38 | + | ||
39 | + | ||
32 | #ifdef __cplusplus | 40 | #ifdef __cplusplus |
33 | } | 41 | } |
34 | #endif | 42 | #endif |
1 | + | ||
2 | + | ||
3 | +/* Includes ------------------------------------------------------------------*/ | ||
4 | + | ||
5 | +#include <stdio.h> | ||
6 | +#include <stdlib.h> | ||
7 | +#include <string.h> | ||
8 | +#include <assert.h> | ||
9 | +#include <getopt.h> /* getopt_long() */ | ||
10 | +#include <fcntl.h> /* low-level i/o */ | ||
11 | +#include <unistd.h> | ||
12 | +#include <sys/stat.h> | ||
13 | +#include <sys/types.h> | ||
14 | +#include <sys/time.h> | ||
15 | +#include <sys/mman.h> | ||
16 | +#include <sys/ioctl.h> | ||
17 | + | ||
18 | +#include <linux/videodev2.h> | ||
19 | + | ||
20 | +#include "JZsdkLib.h" | ||
21 | +#include "./V4L2_Record.h" | ||
22 | +#include "MediaProc/MediaParm.h" | ||
23 | + | ||
24 | +/* Private constants ---------------------------------------------------------*/ | ||
25 | +// 清空 | ||
26 | +#define CLEAR(x) memset(&(x), 0, sizeof(x)) | ||
27 | + | ||
28 | +/* Private types -------------------------------------------------------------*/ | ||
29 | + | ||
30 | +struct buffer | ||
31 | +{ | ||
32 | + char *start; | ||
33 | + size_t length; | ||
34 | +}; | ||
35 | + | ||
36 | + | ||
37 | +// 存储队列 | ||
38 | +static struct buffer *buffers; | ||
39 | +static unsigned int n_buffers; | ||
40 | +static struct v4l2_buffer buf; | ||
41 | + | ||
42 | +//unsigned char* pucVideBuf[4]; // 视频BUFF空间地址 | ||
43 | + | ||
44 | +/* Private functions declaration ---------------------------------------------*/ | ||
45 | +static int xioctl(int fh, int request, void *arg) | ||
46 | +{ | ||
47 | + int num; | ||
48 | + int r; | ||
49 | + do | ||
50 | + { | ||
51 | + r = ioctl(fh, request, arg); | ||
52 | + num++; | ||
53 | + //delayMs(10); | ||
54 | + } while ( (-1 == r)); | ||
55 | + return r; | ||
56 | +} | ||
57 | + | ||
58 | +static int stop_capturing() | ||
59 | +{ | ||
60 | + // enum v4l2_buf_type type; | ||
61 | + | ||
62 | + // type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
63 | + // if (-1 == xioctl(fd, VIDIOC_STREAMOFF, &type)) | ||
64 | + // { | ||
65 | + // JZSDK_LOG_ERROR("VddIDIOC_STREAMOFF"); | ||
66 | + // return -1; | ||
67 | + // } | ||
68 | + | ||
69 | + // return 0; | ||
70 | +} | ||
71 | + | ||
72 | +static T_JZsdkReturnCode start_capturing(JZsdk_CameraInfo *CameraInfo) | ||
73 | +{ | ||
74 | + unsigned int i; | ||
75 | + enum v4l2_buf_type type; | ||
76 | + | ||
77 | + for (i = 0; i < n_buffers; ++i) | ||
78 | + { | ||
79 | + //struct v4l2_buffer buf; | ||
80 | + | ||
81 | + CLEAR(buf); | ||
82 | + buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
83 | + buf.memory = V4L2_MEMORY_MMAP; //内存映射 | ||
84 | + buf.index = i; | ||
85 | + | ||
86 | + //从缓存区中取出数据 | ||
87 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_QBUF, &buf)) | ||
88 | + { | ||
89 | + JZSDK_LOG_ERROR("VIDIOC_QBUF"); | ||
90 | + } | ||
91 | + } | ||
92 | + | ||
93 | + type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
94 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_STREAMON, &type)) | ||
95 | + { | ||
96 | + JZSDK_LOG_ERROR("VIDIOC_STREAMON"); | ||
97 | + } | ||
98 | + | ||
99 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
100 | +} | ||
101 | + | ||
102 | +static int uninit_device() | ||
103 | +{ | ||
104 | + // unsigned int i; | ||
105 | + | ||
106 | + // for (i = 0; i < n_buffers; ++i) | ||
107 | + // { | ||
108 | + // if (-1 == munmap(buffers[i].start, buffers[i].length)) | ||
109 | + // { | ||
110 | + // JZSDK_LOG_ERROR("munmap"); | ||
111 | + // } | ||
112 | + // } | ||
113 | + // free(buffers); | ||
114 | +} | ||
115 | + | ||
116 | +static T_JZsdkReturnCode init_mmap(JZsdk_CameraInfo *CameraInfo) | ||
117 | +{ | ||
118 | + //定义了缓存的数量,驱动会据此申请对应数量的视频缓存。多个缓存可以用于建立FIFO,来提高视频采集的效率。 | ||
119 | + struct v4l2_requestbuffers req; | ||
120 | + | ||
121 | + CLEAR(req); | ||
122 | + | ||
123 | + req.count = 4; | ||
124 | + req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
125 | + req.memory = V4L2_MEMORY_MMAP; | ||
126 | + | ||
127 | + if (xioctl(CameraInfo->CameraFd, VIDIOC_REQBUFS, &req) == -1) | ||
128 | + { | ||
129 | + JZSDK_LOG_ERROR("VIDIOC_REQBUFS"); | ||
130 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
131 | + } | ||
132 | + | ||
133 | + if (req.count < 2) | ||
134 | + { | ||
135 | + JZSDK_LOG_ERROR("摄像头mmap的缓冲区内存不足"); | ||
136 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
137 | + } | ||
138 | + | ||
139 | + //分配req.count个 *Buffer长度的内存 | ||
140 | + buffers = calloc(req.count, sizeof(*buffers)); | ||
141 | + | ||
142 | + if (!buffers) | ||
143 | + { | ||
144 | + JZSDK_LOG_ERROR("摄像头buffers注册内存失败"); | ||
145 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
146 | + } | ||
147 | + | ||
148 | + // 改变buffer数量 以改进视频质量 | ||
149 | + //映射所有的缓存 | ||
150 | + for (n_buffers = 0; n_buffers < req.count; ++n_buffers) | ||
151 | + { | ||
152 | + CLEAR(buf); | ||
153 | + | ||
154 | + buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
155 | + buf.memory = V4L2_MEMORY_MMAP; | ||
156 | + buf.index = n_buffers; | ||
157 | + | ||
158 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_QUERYBUF, &buf)) | ||
159 | + { | ||
160 | + JZSDK_LOG_ERROR("VIDIOC_QUERYBUF"); | ||
161 | + } | ||
162 | + | ||
163 | + buffers[n_buffers].length = buf.length; | ||
164 | + buffers[n_buffers].start = | ||
165 | + mmap(NULL /* start anywhere */, | ||
166 | + buf.length, | ||
167 | + PROT_READ | PROT_WRITE /* required */, | ||
168 | + MAP_SHARED /* recommended */, | ||
169 | + CameraInfo->CameraFd, buf.m.offset); | ||
170 | + | ||
171 | + if (MAP_FAILED == buffers[n_buffers].start) | ||
172 | + { | ||
173 | + JZSDK_LOG_ERROR("mmap"); | ||
174 | + } | ||
175 | + } | ||
176 | + | ||
177 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
178 | +} | ||
179 | + | ||
180 | + | ||
181 | +// 初始化 程序 | ||
182 | +static T_JZsdkReturnCode init_device(JZsdk_CameraInfo *CameraInfo) | ||
183 | +{ | ||
184 | + struct v4l2_capability cap; | ||
185 | + struct v4l2_format fmt; | ||
186 | + | ||
187 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_QUERYCAP, &cap)) | ||
188 | + { //测试参数 | ||
189 | + JZSDK_LOG_ERROR("VIDIOC_QUERYCAP"); | ||
190 | + } | ||
191 | + | ||
192 | + if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) | ||
193 | + { | ||
194 | + JZSDK_LOG_ERROR("no video capture device"); | ||
195 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
196 | + } | ||
197 | + | ||
198 | + if (!(cap.capabilities & V4L2_CAP_STREAMING)) | ||
199 | + { | ||
200 | + JZSDK_LOG_ERROR("does not support streaming i/o"); | ||
201 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
202 | + } | ||
203 | + | ||
204 | + // 设置摄像头使用格式 | ||
205 | + memset(&fmt, 0, sizeof(struct v4l2_format)); | ||
206 | + | ||
207 | + //描绘帧的格式 | ||
208 | + // fmt结构体 含有 tpye格式 和 fmt 联合体 | ||
209 | + // fmt 结构体 | ||
210 | + fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
211 | + fmt.fmt.pix.width = CameraInfo->width; | ||
212 | + fmt.fmt.pix.height = CameraInfo->height; | ||
213 | + fmt.fmt.pix.pixelformat = CameraInfo->CameraFormat; | ||
214 | + fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; | ||
215 | + | ||
216 | + //写入格式参数 | ||
217 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_S_FMT, &fmt)) //设置格式 | ||
218 | + { | ||
219 | + JZSDK_LOG_ERROR("VIDIOC_S_FMT"); | ||
220 | + } | ||
221 | + | ||
222 | + /* | ||
223 | + 修改: 加入帧数设置 | ||
224 | + */ | ||
225 | + struct v4l2_streamparm streamparm; | ||
226 | + streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | ||
227 | + streamparm.parm.capture.timeperframe.numerator = 1; //每1秒 | ||
228 | + streamparm.parm.capture.timeperframe.denominator = CameraInfo->FrameNum; // 帧数 | ||
229 | + | ||
230 | + //streamparm.parm.capture.capturemode = 0; //低质量图片模式 | ||
231 | + | ||
232 | + //写入帧数设置 | ||
233 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_S_PARM, &streamparm)) | ||
234 | + { | ||
235 | + JZSDK_LOG_ERROR("failed in setting the fps in camera!"); | ||
236 | + } | ||
237 | + JZSDK_LOG_DEBUG("camera is getting img-data in %d fps\n", streamparm.parm.capture.timeperframe.denominator); | ||
238 | + | ||
239 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
240 | +} | ||
241 | + | ||
242 | +static int close_device() | ||
243 | +{ | ||
244 | + // if (-1 == close(fd)) | ||
245 | + // { | ||
246 | + // JZSDK_LOG_ERROR("close"); | ||
247 | + // } | ||
248 | + | ||
249 | + // fd = -1; | ||
250 | +} | ||
251 | + | ||
252 | + | ||
253 | + | ||
254 | +T_JZsdkReturnCode V4L2_CameraInit_2(JZsdk_CameraInfo *CameraInfo) | ||
255 | +{ | ||
256 | + T_JZsdkReturnCode ret; | ||
257 | + | ||
258 | + //打开摄像头 | ||
259 | + CameraInfo->CameraFd = open(CameraInfo->CmeraDevPath, O_RDWR , 0); | ||
260 | + if (CameraInfo->CameraFd == -1) | ||
261 | + { | ||
262 | + JZSDK_LOG_ERROR("打开摄像头设备失败 %s",CameraInfo->CmeraDevPath); | ||
263 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
264 | + } | ||
265 | + | ||
266 | + //初始化设备 | ||
267 | + ret = init_device(CameraInfo); | ||
268 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
269 | + { | ||
270 | + JZSDK_LOG_ERROR("初始化摄像头设备失败"); | ||
271 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
272 | + } | ||
273 | + | ||
274 | + //初始化映射 | ||
275 | + ret = init_mmap(CameraInfo); | ||
276 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
277 | + { | ||
278 | + JZSDK_LOG_ERROR("初始化摄像头映射失败"); | ||
279 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
280 | + } | ||
281 | + | ||
282 | + //开始抓取 | ||
283 | + ret = start_capturing(CameraInfo); | ||
284 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
285 | + { | ||
286 | + JZSDK_LOG_ERROR("开始抓取失败"); | ||
287 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
288 | + } | ||
289 | + | ||
290 | + JZSDK_LOG_INFO("v4l2 camera init success"); | ||
291 | + | ||
292 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
293 | +} | ||
294 | + | ||
295 | +int V4L2_CamaraUninit2() | ||
296 | +{ | ||
297 | + //停止采集 | ||
298 | + stop_capturing(); | ||
299 | + | ||
300 | + //释放设备 | ||
301 | + uninit_device(); | ||
302 | + | ||
303 | + //关闭设备 | ||
304 | + close_device(); | ||
305 | + | ||
306 | + return 0; | ||
307 | +} | ||
308 | + | ||
309 | +// /*********** | ||
310 | +// * | ||
311 | +// * 取出画面数据memcpy类型 | ||
312 | +// * | ||
313 | +// * ************/ | ||
314 | +// int V4L2_CameraFrameRecord2(unsigned char **RecordReturnBuffer, int *RecordReturnLength, int Audlength) | ||
315 | +// { | ||
316 | +// memset(&buf, 0, sizeof(struct v4l2_buffer)); | ||
317 | + | ||
318 | +// buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; //每个结构体都需要设置type为这个参数要记住 | ||
319 | +// buf.memory = V4L2_MEMORY_MMAP; | ||
320 | + | ||
321 | +// //取出画面 | ||
322 | +// if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) | ||
323 | +// { | ||
324 | +// JZSDK_LOG_ERROR("VIDIOC_DQBUF"); | ||
325 | +// } | ||
326 | + | ||
327 | +// //画面长度 | ||
328 | +// *RecordReturnLength = buf.bytesused; | ||
329 | + | ||
330 | +// //画面数组 | ||
331 | +// memcpy(*RecordReturnBuffer, buffers[buf.index].start, *RecordReturnLength); | ||
332 | + | ||
333 | +// //放回画面内存 | ||
334 | +// if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) | ||
335 | +// { | ||
336 | +// JZSDK_LOG_ERROR("VIDIOC_QBUF"); | ||
337 | +// } | ||
338 | + | ||
339 | +// return 0; | ||
340 | +// } | ||
341 | + | ||
342 | + | ||
343 | + | ||
344 | +/*********** | ||
345 | + * | ||
346 | + * 取出画面数据,单取地址不返还 | ||
347 | + * ************/ | ||
348 | +T_JZsdkReturnCode V4L2_CameraFrameRecord_OnlyGetFrame2(JZsdk_CameraInfo *CameraInfo, unsigned char **RecordReturnBuffer, int *RecordReturnLength) | ||
349 | +{ | ||
350 | + memset(&buf, 0, sizeof(struct v4l2_buffer)); | ||
351 | + | ||
352 | + buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; //每个结构体都需要设置type为这个参数要记住 | ||
353 | + buf.memory = V4L2_MEMORY_MMAP; | ||
354 | + | ||
355 | + //取出画面 | ||
356 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_DQBUF, &buf)) | ||
357 | + { | ||
358 | + JZSDK_LOG_ERROR("VIDIOC_DQBUF"); | ||
359 | + } | ||
360 | + | ||
361 | + //画面长度 | ||
362 | + *RecordReturnLength = buf.bytesused; | ||
363 | + | ||
364 | + //画面数组 | ||
365 | + *RecordReturnBuffer = (unsigned char *)buffers[buf.index].start; | ||
366 | + | ||
367 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
368 | +} | ||
369 | + | ||
370 | +/*********** | ||
371 | + * | ||
372 | + * 返还画面数据 | ||
373 | + * ************/ | ||
374 | +T_JZsdkReturnCode V4L2_CameraFrameRecord_OnlyReturnFrame2(JZsdk_CameraInfo *CameraInfo) | ||
375 | +{ | ||
376 | + //放回画面内存 | ||
377 | + if (-1 == xioctl(CameraInfo->CameraFd, VIDIOC_QBUF, &buf)) | ||
378 | + { | ||
379 | + JZSDK_LOG_ERROR("VIDIOC_QBUF"); | ||
380 | + } | ||
381 | + | ||
382 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
383 | +} |
@@ -47,11 +47,11 @@ T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate) | @@ -47,11 +47,11 @@ T_JZsdkReturnCode IRC_ParamInit(int height, int width, int frameRate) | ||
47 | #endif | 47 | #endif |
48 | } | 48 | } |
49 | 49 | ||
50 | - temp_fp = fopen("IRC_temp.raw", "w"); | ||
51 | - if (temp_fp == NULL) | ||
52 | - { | ||
53 | - JZSDK_LOG_ERROR("IRC_temp.raw文件打开失败"); | ||
54 | - } | 50 | + // temp_fp = fopen("IRC_temp.raw", "w"); |
51 | + // if (temp_fp == NULL) | ||
52 | + // { | ||
53 | + // JZSDK_LOG_ERROR("IRC_temp.raw文件打开失败"); | ||
54 | + // } | ||
55 | 55 | ||
56 | return ret; | 56 | return ret; |
57 | } | 57 | } |
@@ -30,23 +30,23 @@ static T_JZsdkReturnCode MediaProc_SingleThreading() | @@ -30,23 +30,23 @@ static T_JZsdkReturnCode MediaProc_SingleThreading() | ||
30 | //多线程方案 | 30 | //多线程方案 |
31 | static T_JZsdkReturnCode MediaProc_MultiThreading() | 31 | static T_JZsdkReturnCode MediaProc_MultiThreading() |
32 | { | 32 | { |
33 | - //如果是150S相机 150T相机 | ||
34 | - if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | ||
35 | - { | ||
36 | - //1、启动视频流缓冲区模块 | ||
37 | - VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index); | 33 | + // //如果是150S相机 150T相机 |
34 | + // if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | ||
35 | + // { | ||
36 | + // //1、启动视频流缓冲区模块 | ||
37 | + // VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index); | ||
38 | 38 | ||
39 | - //2、相机初始化 | ||
40 | - Camera_Init(1,FIRST_WIDTH, FIRST_HEIGHT, FIRST_FRAME_NUM); | 39 | + // //2、相机初始化 |
40 | + // Camera_Init(1,FIRST_WIDTH, FIRST_HEIGHT, FIRST_FRAME_NUM); | ||
41 | 41 | ||
42 | - //3、启用推流模块 | ||
43 | - VideoMgmt_VideoStreamFlow_Init(FIRST_FRAME_NUM, &VideoMgmt_FirstVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); | 42 | + // //3、启用推流模块 |
43 | + // VideoMgmt_VideoStreamFlow_Init(FIRST_FRAME_NUM, &VideoMgmt_FirstVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); | ||
44 | 44 | ||
45 | - //转码模块 | ||
46 | - VideoStreamTransCode_Init(); | 45 | + // //转码模块 |
46 | + // VideoStreamTransCode_Init(); | ||
47 | 47 | ||
48 | - VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送光学摄像头 | ||
49 | - } | 48 | + // VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送光学摄像头 |
49 | + // } | ||
50 | } | 50 | } |
51 | 51 | ||
52 | //视频流模块初始化 | 52 | //视频流模块初始化 |
@@ -8,41 +8,7 @@ | @@ -8,41 +8,7 @@ | ||
8 | #include "./RTK_mmp_dec.h" | 8 | #include "./RTK_mmp_dec.h" |
9 | 9 | ||
10 | #ifdef RTK_MPP_STATUS_ON | 10 | #ifdef RTK_MPP_STATUS_ON |
11 | - #include "rockchip/mpp_common.h" //这个.h能在mpp的源码中找到 | ||
12 | - #include "rockchip/mpp_packet.h" | ||
13 | - #include "rockchip/rk_mpi.h" | ||
14 | - #include "./RTK_mmp_dec.h" | ||
15 | 11 | ||
16 | -typedef struct { | ||
17 | - //编码器编号,用于选择编码器 | ||
18 | - int index; | ||
19 | - | ||
20 | - // 基础流上下文 | ||
21 | - MppCtx ctx; | ||
22 | - MppApi *mpi; | ||
23 | - | ||
24 | - // 输入/输出 | ||
25 | - MppPacket packet; //用于存放h264,h265数据 | ||
26 | - MppFrame frame; //用于存放yuv rgb数据 | ||
27 | - | ||
28 | - // 资源分配参数 | ||
29 | - unsigned int width; | ||
30 | - unsigned int height; | ||
31 | - unsigned int hor_stride; | ||
32 | - unsigned int ver_stride; | ||
33 | - MppCodingType type; | ||
34 | - | ||
35 | - // 运行时配置 | ||
36 | - unsigned int need_split; //输入分割设置,整帧输入,这里为0 | ||
37 | - | ||
38 | - MppBufferGroup frm_grp; | ||
39 | - MppBufferGroup pkt_grp; | ||
40 | - MppBuffer frmBuf; | ||
41 | - MppBuffer pktBuf; | ||
42 | - unsigned char *dataBuf; | ||
43 | - unsigned int packet_size; //写入的包大小 | ||
44 | - | ||
45 | -} MPP_DEC_CONFIG ; | ||
46 | 12 | ||
47 | void dump_frame(MppFrame frame, FILE *out_fp) | 13 | void dump_frame(MppFrame frame, FILE *out_fp) |
48 | { | 14 | { |
@@ -130,52 +96,34 @@ void dump_frame(MppFrame frame, FILE *out_fp) | @@ -130,52 +96,34 @@ void dump_frame(MppFrame frame, FILE *out_fp) | ||
130 | 96 | ||
131 | //rtk解码器初始化 | 97 | //rtk解码器初始化 |
132 | //输入内容,编码器参数的地址 | 98 | //输入内容,编码器参数的地址 |
133 | -T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFrameFormat out_format, int width, int height) | 99 | +T_JZsdkReturnCode RTK_mmp_dec_Init(T_rtk_mmp_dec_info *dec_info) |
134 | { | 100 | { |
101 | + MPP_RET ret; | ||
135 | MppParam param = NULL; | 102 | MppParam param = NULL; |
136 | 103 | ||
137 | - //创建一解码器参数 | ||
138 | - MPP_DEC_CONFIG *DecConfigInput = NULL; | ||
139 | - int ret;//返回值 | ||
140 | - | ||
141 | - //为编码器参数注册内存 | ||
142 | - DecConfigInput = (MPP_DEC_CONFIG *)malloc(sizeof(MPP_DEC_CONFIG)); | ||
143 | - if (DecConfigInput == NULL) { | ||
144 | - JZSDK_LOG_ERROR("mpp编码器参数内存分配失败"); | ||
145 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
146 | - } | ||
147 | - | ||
148 | //初始化编码器参数 | 104 | //初始化编码器参数 |
149 | // 资源分配参数 | 105 | // 资源分配参数 |
150 | - DecConfigInput->height = height; | ||
151 | - DecConfigInput->width = width; | ||
152 | - | ||
153 | - DecConfigInput->hor_stride = MPP_ALIGN(width, 16); | ||
154 | - DecConfigInput->ver_stride = MPP_ALIGN(height, 16); | ||
155 | - | ||
156 | - DecConfigInput->type = int_type; | ||
157 | - DecConfigInput->packet_size = (3*DecConfigInput->hor_stride*DecConfigInput->ver_stride); //一般这个值够了 | 106 | + dec_info->packet_size = (3*dec_info->hor_stride*dec_info->ver_stride); //一般这个值够了 |
158 | 107 | ||
159 | // 运行时配置 | 108 | // 运行时配置 |
160 | - DecConfigInput->need_split = 0; | 109 | + dec_info->need_split = 0; |
161 | 110 | ||
162 | //如果是其他类型,dec_tpye为1 mjpeg则为0 | 111 | //如果是其他类型,dec_tpye为1 mjpeg则为0 |
163 | - int dec_type = (DecConfigInput->type != MPP_VIDEO_CodingMJPEG) ? (1) : (0); | ||
164 | - | 112 | + int VideoType = (dec_info->Dec_type != MPP_VIDEO_CodingMJPEG) ? (1) : (0); |
165 | 113 | ||
166 | // /************************************* | 114 | // /************************************* |
167 | // //创建输入输出的数组 | 115 | // //创建输入输出的数组 |
168 | // ************************************/ | 116 | // ************************************/ |
169 | - if (dec_type == 1) //普通的视频类型 | 117 | + if (VideoType == 1) //普通的视频类型 |
170 | { | 118 | { |
171 | - DecConfigInput->dataBuf = (unsigned char*)malloc(DecConfigInput->packet_size); | ||
172 | - if(DecConfigInput->dataBuf == NULL) | 119 | + dec_info->dataBuf = (unsigned char*)malloc(dec_info->packet_size); |
120 | + if(dec_info->dataBuf == NULL) | ||
173 | { | 121 | { |
174 | JZSDK_LOG_ERROR("摄像头的视频回复帧内存注册错误"); | 122 | JZSDK_LOG_ERROR("摄像头的视频回复帧内存注册错误"); |
175 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 123 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
176 | } | 124 | } |
177 | 125 | ||
178 | - ret = mpp_packet_init(&DecConfigInput->packet, DecConfigInput->dataBuf, DecConfigInput->packet_size); | 126 | + ret = mpp_packet_init(&dec_info->packet, dec_info->dataBuf, dec_info->packet_size); |
179 | if (ret) { | 127 | if (ret) { |
180 | JZSDK_LOG_ERROR("mpp_packet_init failed"); | 128 | JZSDK_LOG_ERROR("mpp_packet_init failed"); |
181 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 129 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -183,19 +131,19 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -183,19 +131,19 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
183 | } | 131 | } |
184 | else //mjpeg下的视频类型 | 132 | else //mjpeg下的视频类型 |
185 | { | 133 | { |
186 | - ret = mpp_buffer_group_get_internal(&DecConfigInput->frm_grp, MPP_BUFFER_TYPE_ION); | 134 | + ret = mpp_buffer_group_get_internal(&dec_info->frm_grp, MPP_BUFFER_TYPE_ION); |
187 | if (ret) { | 135 | if (ret) { |
188 | JZSDK_LOG_ERROR("failed to get buffer group for input frame ret %d", ret); | 136 | JZSDK_LOG_ERROR("failed to get buffer group for input frame ret %d", ret); |
189 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 137 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
190 | } | 138 | } |
191 | 139 | ||
192 | - ret = mpp_buffer_group_get_internal(&DecConfigInput->pkt_grp, MPP_BUFFER_TYPE_ION); | 140 | + ret = mpp_buffer_group_get_internal(&dec_info->pkt_grp, MPP_BUFFER_TYPE_ION); |
193 | if (ret) { | 141 | if (ret) { |
194 | JZSDK_LOG_ERROR("failed to get buffer group for output packet ret %d", ret); | 142 | JZSDK_LOG_ERROR("failed to get buffer group for output packet ret %d", ret); |
195 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 143 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
196 | } | 144 | } |
197 | 145 | ||
198 | - ret = mpp_frame_init(&DecConfigInput->frame); /* output frame */ | 146 | + ret = mpp_frame_init(&dec_info->frame); /* output frame */ |
199 | if (MPP_OK != ret) | 147 | if (MPP_OK != ret) |
200 | { | 148 | { |
201 | JZSDK_LOG_ERROR("mpp_frame_init failed"); | 149 | JZSDK_LOG_ERROR("mpp_frame_init failed"); |
@@ -209,7 +157,7 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -209,7 +157,7 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
209 | * YUV422 buffer is 2 times of w*h. | 157 | * YUV422 buffer is 2 times of w*h. |
210 | * So create larger buffer with 2 times w*h. | 158 | * So create larger buffer with 2 times w*h. |
211 | */ | 159 | */ |
212 | - ret = mpp_buffer_get(DecConfigInput->frm_grp, &DecConfigInput->frmBuf, DecConfigInput->hor_stride * DecConfigInput->ver_stride * 4); | 160 | + ret = mpp_buffer_get(dec_info->frm_grp, &dec_info->frmBuf, dec_info->hor_stride * dec_info->ver_stride * 4); |
213 | if (ret) { | 161 | if (ret) { |
214 | JZSDK_LOG_ERROR("failed to get buffer for input frame ret %d", ret); | 162 | JZSDK_LOG_ERROR("failed to get buffer for input frame ret %d", ret); |
215 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 163 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -217,25 +165,25 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -217,25 +165,25 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
217 | 165 | ||
218 | // NOTE: for mjpeg decoding send the whole file | 166 | // NOTE: for mjpeg decoding send the whole file |
219 | 167 | ||
220 | - ret = mpp_buffer_get(DecConfigInput->pkt_grp, &DecConfigInput->pktBuf, DecConfigInput->packet_size); | 168 | + ret = mpp_buffer_get(dec_info->pkt_grp, &dec_info->pktBuf, dec_info->packet_size); |
221 | if (ret) { | 169 | if (ret) { |
222 | JZSDK_LOG_ERROR("failed to get buffer for input frame ret %d", ret); | 170 | JZSDK_LOG_ERROR("failed to get buffer for input frame ret %d", ret); |
223 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 171 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
224 | } | 172 | } |
225 | 173 | ||
226 | - mpp_packet_init_with_buffer(&DecConfigInput->packet, DecConfigInput->pktBuf); | ||
227 | - DecConfigInput->dataBuf = mpp_buffer_get_ptr(DecConfigInput->pktBuf); | 174 | + mpp_packet_init_with_buffer(&dec_info->packet, dec_info->pktBuf); |
175 | + dec_info->dataBuf = mpp_buffer_get_ptr(dec_info->pktBuf); | ||
228 | 176 | ||
229 | - mpp_frame_set_buffer(DecConfigInput->frame, DecConfigInput->frmBuf); | 177 | + mpp_frame_set_buffer(dec_info->frame, dec_info->frmBuf); |
230 | } | 178 | } |
231 | 179 | ||
232 | printf("创建输入输出的数组初始化完毕\n"); | 180 | printf("创建输入输出的数组初始化完毕\n"); |
233 | 181 | ||
234 | // 创建解码器 | 182 | // 创建解码器 |
235 | - ret = mpp_create(&DecConfigInput->ctx, &DecConfigInput->mpi); | 183 | + ret = mpp_create(&dec_info->ctx, &dec_info->mpi); |
236 | if (ret != MPP_OK) | 184 | if (ret != MPP_OK) |
237 | { | 185 | { |
238 | - free(DecConfigInput); | 186 | + free(dec_info); |
239 | JZSDK_LOG_ERROR("解码器创建失败"); | 187 | JZSDK_LOG_ERROR("解码器创建失败"); |
240 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 188 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
241 | } | 189 | } |
@@ -249,11 +197,11 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -249,11 +197,11 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
249 | * - 解码文件需要 split 模式 | 197 | * - 解码文件需要 split 模式 |
250 | * - 设置非阻塞模式,0非阻塞(默认),-1阻塞,+val 超时(ms) | 198 | * - 设置非阻塞模式,0非阻塞(默认),-1阻塞,+val 超时(ms) |
251 | */ | 199 | */ |
252 | - param = &(DecConfigInput->need_split); | ||
253 | - ret = DecConfigInput->mpi->control(DecConfigInput->ctx, MPP_DEC_SET_PARSER_SPLIT_MODE, param); | 200 | + param = &(dec_info->need_split); |
201 | + ret = dec_info->mpi->control(dec_info->ctx, MPP_DEC_SET_PARSER_SPLIT_MODE, param); | ||
254 | if (ret != MPP_OK) { | 202 | if (ret != MPP_OK) { |
255 | - mpp_destroy(DecConfigInput->ctx); // 销毁创建的编码器 | ||
256 | - free(DecConfigInput); | 203 | + mpp_destroy(dec_info->ctx); // 销毁创建的编码器 |
204 | + free(dec_info); | ||
257 | JZSDK_LOG_ERROR("mpi->control error MPP_DEC_SET_PARSER_SPLIT_MODE"); | 205 | JZSDK_LOG_ERROR("mpi->control error MPP_DEC_SET_PARSER_SPLIT_MODE"); |
258 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 206 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
259 | } | 207 | } |
@@ -285,10 +233,10 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -285,10 +233,10 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
285 | MPP_VIDEO_CodingVP8 : VP8 | 233 | MPP_VIDEO_CodingVP8 : VP8 |
286 | MPP_VIDEO_CodingVP9 : VP9 | 234 | MPP_VIDEO_CodingVP9 : VP9 |
287 | MPP_VIDEO_CodingMJPEG : MJPEG */ | 235 | MPP_VIDEO_CodingMJPEG : MJPEG */ |
288 | - ret = mpp_init(DecConfigInput->ctx, MPP_CTX_DEC, DecConfigInput->type); | 236 | + ret = mpp_init(dec_info->ctx, MPP_CTX_DEC, dec_info->Dec_type); |
289 | if (ret != MPP_OK) { | 237 | if (ret != MPP_OK) { |
290 | - mpp_destroy(DecConfigInput->ctx); | ||
291 | - free(DecConfigInput); | 238 | + mpp_destroy(dec_info->ctx); |
239 | + free(dec_info); | ||
292 | JZSDK_LOG_ERROR("mpp解码初始化失败"); | 240 | JZSDK_LOG_ERROR("mpp解码初始化失败"); |
293 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 241 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
294 | } | 242 | } |
@@ -300,8 +248,8 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -300,8 +248,8 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
300 | //输出的码流格式 | 248 | //输出的码流格式 |
301 | //param = &out_format; | 249 | //param = &out_format; |
302 | //也不知道为什么只能设420sp没法设420p | 250 | //也不知道为什么只能设420sp没法设420p |
303 | - MppFrameFormat format = out_format; | ||
304 | - ret = DecConfigInput->mpi->control(DecConfigInput->ctx, MPP_DEC_SET_OUTPUT_FORMAT, &format); | 251 | + MppFrameFormat format = dec_info->out_format; |
252 | + ret = dec_info->mpi->control(dec_info->ctx, MPP_DEC_SET_OUTPUT_FORMAT, &format); | ||
305 | if (ret == MPP_OK) | 253 | if (ret == MPP_OK) |
306 | { | 254 | { |
307 | printf("输出格式正确\n"); | 255 | printf("输出格式正确\n"); |
@@ -312,44 +260,37 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -312,44 +260,37 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
312 | } | 260 | } |
313 | 261 | ||
314 | 262 | ||
315 | - //把编码器地址传递回去 | ||
316 | - *index = (void *)DecConfigInput; | ||
317 | - printf("mmp解码器初始化完毕\n"); | ||
318 | - | ||
319 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 263 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
320 | } | 264 | } |
321 | 265 | ||
322 | 266 | ||
323 | 267 | ||
324 | -T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, unsigned int input_data_len, MppFrame *out_put_frame) | 268 | +T_JZsdkReturnCode RTK_mmp_dec_input(T_rtk_mmp_dec_info *dec_info ,unsigned char *input_data, unsigned int input_data_len, MppFrame *out_put_frame) |
325 | { | 269 | { |
326 | int ret; //返回值 | 270 | int ret; //返回值 |
327 | int pktEos = 0; | 271 | int pktEos = 0; |
328 | MppTask task = NULL; | 272 | MppTask task = NULL; |
329 | 273 | ||
330 | - //1、获取编码器参数 | ||
331 | - MPP_DEC_CONFIG *DecConfigInput = (MPP_DEC_CONFIG *)*index; | ||
332 | - | ||
333 | //2、将解码的数据放入划好的地址 | 274 | //2、将解码的数据放入划好的地址 |
334 | - memset(DecConfigInput->dataBuf,0,DecConfigInput->packet_size); | ||
335 | - memcpy(DecConfigInput->dataBuf , input_data ,input_data_len ); | 275 | + memset(dec_info->dataBuf,0,dec_info->packet_size); |
276 | + memcpy(dec_info->dataBuf , input_data ,input_data_len ); | ||
336 | 277 | ||
337 | - mpp_packet_set_pos(DecConfigInput->packet, DecConfigInput->dataBuf); //设置packet的 有效数据 的开始位置 | ||
338 | - mpp_packet_set_length(DecConfigInput->packet, input_data_len); //设置packet的 有效数据 的长度 | 278 | + mpp_packet_set_pos(dec_info->packet, dec_info->dataBuf); //设置packet的 有效数据 的开始位置 |
279 | + mpp_packet_set_length(dec_info->packet, input_data_len); //设置packet的 有效数据 的长度 | ||
339 | 280 | ||
340 | if(pktEos) //结束标志,这边估计是不会用了 | 281 | if(pktEos) //结束标志,这边估计是不会用了 |
341 | { | 282 | { |
342 | - mpp_packet_set_eos(DecConfigInput->packet); | 283 | + mpp_packet_set_eos(dec_info->packet); |
343 | } | 284 | } |
344 | 285 | ||
345 | - ret = DecConfigInput->mpi->poll(DecConfigInput->ctx, MPP_PORT_INPUT, MPP_POLL_BLOCK); | 286 | + ret = dec_info->mpi->poll(dec_info->ctx, MPP_PORT_INPUT, MPP_POLL_BLOCK); |
346 | if (ret) | 287 | if (ret) |
347 | { | 288 | { |
348 | JZSDK_LOG_ERROR("mpp input poll failed"); | 289 | JZSDK_LOG_ERROR("mpp input poll failed"); |
349 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 290 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
350 | } | 291 | } |
351 | 292 | ||
352 | - ret = DecConfigInput->mpi->dequeue(DecConfigInput->ctx, MPP_PORT_INPUT, &task); /* input queue */ | 293 | + ret = dec_info->mpi->dequeue(dec_info->ctx, MPP_PORT_INPUT, &task); /* input queue */ |
353 | if (ret) | 294 | if (ret) |
354 | { | 295 | { |
355 | JZSDK_LOG_ERROR("mpp task input dequeue failed"); | 296 | JZSDK_LOG_ERROR("mpp task input dequeue failed"); |
@@ -357,10 +298,10 @@ T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, uns | @@ -357,10 +298,10 @@ T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, uns | ||
357 | } | 298 | } |
358 | 299 | ||
359 | //mpp_assert(task); | 300 | //mpp_assert(task); |
360 | - mpp_task_meta_set_packet(task, KEY_INPUT_PACKET, DecConfigInput->packet); | ||
361 | - mpp_task_meta_set_frame (task, KEY_OUTPUT_FRAME, DecConfigInput->frame); | 301 | + mpp_task_meta_set_packet(task, KEY_INPUT_PACKET, dec_info->packet); |
302 | + mpp_task_meta_set_frame (task, KEY_OUTPUT_FRAME, dec_info->frame); | ||
362 | 303 | ||
363 | - ret = DecConfigInput->mpi->enqueue(DecConfigInput->ctx, MPP_PORT_INPUT, task); /* input queue */ | 304 | + ret = dec_info->mpi->enqueue(dec_info->ctx, MPP_PORT_INPUT, task); /* input queue */ |
364 | if (ret) | 305 | if (ret) |
365 | { | 306 | { |
366 | JZSDK_LOG_ERROR("mpp task input enqueue failed"); | 307 | JZSDK_LOG_ERROR("mpp task input enqueue failed"); |
@@ -368,14 +309,14 @@ T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, uns | @@ -368,14 +309,14 @@ T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, uns | ||
368 | } | 309 | } |
369 | 310 | ||
370 | /* poll and wait here */ | 311 | /* poll and wait here */ |
371 | - ret = DecConfigInput->mpi->poll(DecConfigInput->ctx, MPP_PORT_OUTPUT, MPP_POLL_BLOCK); | 312 | + ret = dec_info->mpi->poll(dec_info->ctx, MPP_PORT_OUTPUT, MPP_POLL_BLOCK); |
372 | if (ret) | 313 | if (ret) |
373 | { | 314 | { |
374 | JZSDK_LOG_ERROR("mpp output poll failed"); | 315 | JZSDK_LOG_ERROR("mpp output poll failed"); |
375 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 316 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
376 | } | 317 | } |
377 | 318 | ||
378 | - ret = DecConfigInput->mpi->dequeue(DecConfigInput->ctx, MPP_PORT_OUTPUT, &task); /* output queue */ | 319 | + ret = dec_info->mpi->dequeue(dec_info->ctx, MPP_PORT_OUTPUT, &task); /* output queue */ |
379 | if (ret) | 320 | if (ret) |
380 | { | 321 | { |
381 | JZSDK_LOG_ERROR("mpp task output dequeue failed"); | 322 | JZSDK_LOG_ERROR("mpp task output dequeue failed"); |
@@ -386,22 +327,22 @@ T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, uns | @@ -386,22 +327,22 @@ T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, uns | ||
386 | 327 | ||
387 | if (task) | 328 | if (task) |
388 | { | 329 | { |
389 | - mpp_task_meta_get_frame(task, KEY_OUTPUT_FRAME, &DecConfigInput->frame); | 330 | + mpp_task_meta_get_frame(task, KEY_OUTPUT_FRAME, &dec_info->frame); |
390 | 331 | ||
391 | - if (DecConfigInput->frame) | 332 | + if (dec_info->frame) |
392 | { | 333 | { |
393 | //把解码出来的数据传递回去 | 334 | //把解码出来的数据传递回去 |
394 | - *out_put_frame = DecConfigInput->frame; | 335 | + *out_put_frame = dec_info->frame; |
395 | 336 | ||
396 | //printf("解码成功\n"); | 337 | //printf("解码成功\n"); |
397 | 338 | ||
398 | - if (mpp_frame_get_eos(DecConfigInput->frame)) | 339 | + if (mpp_frame_get_eos(dec_info->frame)) |
399 | { | 340 | { |
400 | printf("found eos frame\n"); | 341 | printf("found eos frame\n"); |
401 | } | 342 | } |
402 | } | 343 | } |
403 | 344 | ||
404 | - ret = DecConfigInput->mpi->enqueue(DecConfigInput->ctx, MPP_PORT_OUTPUT, task); | 345 | + ret = dec_info->mpi->enqueue(dec_info->ctx, MPP_PORT_OUTPUT, task); |
405 | if (ret) | 346 | if (ret) |
406 | { | 347 | { |
407 | JZSDK_LOG_ERROR("mpp task output enqueue failed\n"); | 348 | JZSDK_LOG_ERROR("mpp task output enqueue failed\n"); |
1 | #ifndef RTK_MMP_DEC_H | 1 | #ifndef RTK_MMP_DEC_H |
2 | #define RTK_MMP_DEC_H | 2 | #define RTK_MMP_DEC_H |
3 | 3 | ||
4 | -#include "version_choose.h" | 4 | +#include "BaseConfig.h" |
5 | +#include "../RTK_mmp_LibInclude.h" | ||
5 | 6 | ||
6 | #ifdef RTK_MPP_STATUS_ON | 7 | #ifdef RTK_MPP_STATUS_ON |
7 | 8 | ||
9 | + | ||
10 | +typedef struct T_rtk_mmp_dec_info | ||
11 | +{ | ||
12 | + //输入的参数 | ||
13 | + unsigned int width; //输入的宽度 | ||
14 | + unsigned int height; //输入的高度 | ||
15 | + MppCodingType Dec_type; //解码的类型 | ||
16 | + MppFrameFormat out_format; | ||
17 | + | ||
18 | + // 基础流上下文 | ||
19 | + MppCtx ctx; | ||
20 | + MppApi *mpi; | ||
21 | + | ||
22 | + // 输入/输出 | ||
23 | + MppPacket packet; //用于存放h264,h265数据 | ||
24 | + MppFrame frame; //用于存放yuv rgb数据 | ||
25 | + | ||
26 | + // 资源分配参数 | ||
27 | + unsigned int hor_stride; | ||
28 | + unsigned int ver_stride; | ||
29 | + | ||
30 | + | ||
31 | + // 运行时配置 | ||
32 | + unsigned int need_split; //输入分割设置,整帧输入,这里为0 | ||
33 | + | ||
34 | + MppBufferGroup frm_grp; | ||
35 | + MppBufferGroup pkt_grp; | ||
36 | + MppBuffer frmBuf; | ||
37 | + MppBuffer pktBuf; | ||
38 | + unsigned char *dataBuf; | ||
39 | + unsigned int packet_size; //写入的包大小 | ||
40 | + | ||
41 | +}T_rtk_mmp_dec_info ; | ||
42 | + | ||
43 | + | ||
8 | #include "rockchip/rk_type.h" | 44 | #include "rockchip/rk_type.h" |
9 | #include "rockchip/mpp_frame.h" | 45 | #include "rockchip/mpp_frame.h" |
10 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 46 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
11 | 47 | ||
12 | -T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFrameFormat out_format,int width, int height); | ||
13 | -T_JZsdkReturnCode RTK_mmp_dec_input(void **index ,unsigned char *input_data, unsigned int input_data_len, MppFrame *out_put_frame); | 48 | +T_JZsdkReturnCode RTK_mmp_dec_Init(T_rtk_mmp_dec_info *dec_info); |
49 | +T_JZsdkReturnCode RTK_mmp_dec_input(T_rtk_mmp_dec_info *dec_info ,unsigned char *input_data, unsigned int input_data_len, MppFrame *out_put_frame); | ||
14 | #endif | 50 | #endif |
15 | 51 | ||
16 | #endif | 52 | #endif |
@@ -6,110 +6,206 @@ | @@ -6,110 +6,206 @@ | ||
6 | #include "./RTK_mmp_enc.h" | 6 | #include "./RTK_mmp_enc.h" |
7 | 7 | ||
8 | #ifdef RTK_MPP_STATUS_ON | 8 | #ifdef RTK_MPP_STATUS_ON |
9 | -#include "rockchip/mpp_packet.h" | ||
10 | -#include "rockchip/rk_mpi.h" | ||
11 | -#include "rockchip/mpp_env.h" //这个.h能在mpp的源码中找到 | ||
12 | -#include "rockchip/rk_venc_rc.h" | ||
13 | -#include "rockchip/mpp_common.h" //这个.h能在mpp的源码中找到 | ||
14 | - | ||
15 | -typedef struct { | ||
16 | - // 基础流上下文 | ||
17 | - MppCtx ctx; | ||
18 | - MppApi *mpi; | ||
19 | - MppCodingType type; //处理的码流类型 | ||
20 | - | ||
21 | - // 输入/输出 | ||
22 | - MppBufferGroup BufferGop; //数据缓冲池 | ||
23 | - | ||
24 | - MppBuffer PacketBuffer; //输出数组缓冲区 | ||
25 | - unsigned int Packet_data_size; //packet包的长度 | ||
26 | - unsigned int Packet_eos; //packet包的结束标志 | ||
27 | - | ||
28 | - MppBuffer FrameBuffer; //输入数组缓冲区 | ||
29 | - unsigned int Frame_data_size; //Frame包的长度 | ||
30 | - unsigned int Frame_eos; //Frame包的结束标志 | ||
31 | - | ||
32 | - // 资源分配参数 | ||
33 | - unsigned int width; | ||
34 | - unsigned int height; | ||
35 | - unsigned int hor_stride; | ||
36 | - unsigned int ver_stride; | ||
37 | - unsigned int FrameNum; //帧数 | ||
38 | - unsigned int IDR_gop; //i帧间隔数 | ||
39 | - | ||
40 | - // 运行时的配置 | ||
41 | - MppEncCfg cfg; | ||
42 | - MppEncHeaderMode header_mode; | ||
43 | - int header_size; | ||
44 | - MppFrameFormat Input_fmt; | ||
45 | - MppEncSeiMode sei_mode; | ||
46 | - | ||
47 | -} MPP_ENC_CONFIG ; | ||
48 | - | ||
49 | -//设置编码器参数 | ||
50 | -int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | 9 | + |
10 | + | ||
11 | +T_JZsdkReturnCode RTK_mmp_enc_Init(T_rtk_mmp_enc_info *enc_info) | ||
51 | { | 12 | { |
13 | + | ||
14 | + int ret; | ||
15 | + | ||
16 | + enc_info->ctx = NULL; | ||
17 | + enc_info->mpi = NULL; | ||
18 | + | ||
19 | + //编解码一体的情况下用不上这里了 | ||
20 | + switch (enc_info->Input_fmt & MPP_FRAME_FMT_MASK) | ||
21 | + { | ||
22 | + case MPP_FMT_YUV420SP: | ||
23 | + case MPP_FMT_YUV420P: { | ||
24 | + enc_info->Frame_data_size = MPP_ALIGN(enc_info->hor_stride, 64) * MPP_ALIGN(enc_info->ver_stride, 64) * 3 / 2; | ||
25 | + } break; | ||
26 | + | ||
27 | + case MPP_FMT_YUV422_YUYV : | ||
28 | + case MPP_FMT_YUV422_YVYU : | ||
29 | + case MPP_FMT_YUV422_UYVY : | ||
30 | + case MPP_FMT_YUV422_VYUY : | ||
31 | + case MPP_FMT_YUV422P : | ||
32 | + case MPP_FMT_YUV422SP : | ||
33 | + case MPP_FMT_RGB444 : | ||
34 | + case MPP_FMT_BGR444 : | ||
35 | + case MPP_FMT_RGB555 : | ||
36 | + case MPP_FMT_BGR555 : | ||
37 | + case MPP_FMT_RGB565 : | ||
38 | + case MPP_FMT_BGR565 : { | ||
39 | + enc_info->Frame_data_size = MPP_ALIGN(enc_info->hor_stride, 64) * MPP_ALIGN(enc_info->ver_stride, 64) * 2; | ||
40 | + } break; | ||
41 | + | ||
42 | + default: { | ||
43 | + enc_info->Frame_data_size = MPP_ALIGN(enc_info->hor_stride, 64) * MPP_ALIGN(enc_info->ver_stride, 64) * 4; | ||
44 | + } break; | ||
45 | + } | ||
46 | + | ||
47 | + //获取h264头长度 | ||
48 | + if (MPP_FRAME_FMT_IS_FBC(enc_info->Input_fmt)) | ||
49 | + { | ||
50 | + enc_info->header_size = MPP_ALIGN(MPP_ALIGN(enc_info->width, 16) * MPP_ALIGN(enc_info->height, 16) / 16, SZ_4K); | ||
51 | + } | ||
52 | + else | ||
53 | + { | ||
54 | + enc_info->header_size = 0; | ||
55 | + } | ||
56 | + | ||
57 | +/*************************************************** | ||
58 | + * | ||
59 | + * 注册输入输出数组的内存 | ||
60 | + * | ||
61 | + * *****************************************************/ | ||
62 | + // 获取MPP缓冲区组,缓冲区类型为ION且可缓存 | ||
63 | + ret = mpp_buffer_group_get_internal(&enc_info->BufferGop, MPP_BUFFER_TYPE_ION); | ||
64 | + if (ret) { | ||
65 | + printf("获取MPP缓冲区组失败failed to get mpp buffer group ret %d\n", ret); | ||
66 | + } | ||
67 | + | ||
68 | + // 从缓冲区组中获取用于输入帧的缓冲区 | ||
69 | + ret = mpp_buffer_get(enc_info->BufferGop, &enc_info->FrameBuffer, enc_info->Frame_data_size + enc_info->header_size); | ||
70 | + if (ret) { | ||
71 | + printf("获取输入帧缓冲区失败failed to get buffer for input frame ret %d\n", ret); | ||
72 | + } | ||
73 | + | ||
74 | + // 从缓冲区组中获取用于输出包的缓冲区 | ||
75 | + ret = mpp_buffer_get(enc_info->BufferGop, &enc_info->PacketBuffer, enc_info->Frame_data_size); | ||
76 | + if (ret) { | ||
77 | + printf("获取输出包缓冲区失败failed to get buffer for output packet ret %d\n", ret); | ||
78 | + } | ||
79 | + | ||
80 | + // // 从缓冲区组中获取用于运动信息输出包的缓冲区 | ||
81 | + // ret = mpp_buffer_get(enc_info->BufferGop, &p->md_info, p->mdinfo_size); | ||
82 | + // if (ret) { | ||
83 | + // printf("获取运动信息输出包缓冲区失败failed to get buffer for motion info output packet ret %d\n", ret); | ||
84 | + // } | ||
85 | + | ||
86 | + //创建一个编码器 | ||
87 | + ret = mpp_create(&(enc_info->ctx), &enc_info->mpi); | ||
88 | + if (ret != MPP_OK) | ||
89 | + { | ||
90 | + JZSDK_LOG_ERROR("mpp_create failed ret %d", ret); | ||
91 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
92 | + } | ||
93 | + else | ||
94 | + { | ||
95 | + printf("编码器创建完毕\n"); | ||
96 | + } | ||
97 | + | ||
98 | + //设置编码超时(堵塞) | ||
99 | + MppPollType timeout = MPP_POLL_BLOCK; | ||
100 | + ret = enc_info->mpi->control(enc_info->ctx, MPP_SET_OUTPUT_TIMEOUT, &timeout); | ||
101 | + if (ret != MPP_OK) | ||
102 | + { | ||
103 | + JZSDK_LOG_ERROR("编码超时设置失败 %d", ret); | ||
104 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
105 | + } | ||
106 | + else | ||
107 | + { | ||
108 | + printf("编码超时设置成功\n"); | ||
109 | + } | ||
110 | + | ||
111 | + //初始化编码器 | ||
112 | + ret = mpp_init(enc_info->ctx, MPP_CTX_ENC, MPP_VIDEO_CodingAVC); | ||
113 | + if (ret != MPP_OK) | ||
114 | + { | ||
115 | + JZSDK_LOG_ERROR("mpp_init failed ret %d", ret); | ||
116 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
117 | + } | ||
118 | + else | ||
119 | + { | ||
120 | + printf("编码器初始化完毕\n"); | ||
121 | + } | ||
122 | + | ||
123 | + //初始化编码器配置 | ||
124 | + ret = mpp_enc_cfg_init(&enc_info->cfg); | ||
125 | + if (ret) { | ||
126 | + JZSDK_LOG_ERROR("mpp_enc_cfg_init failed ret %d", ret); | ||
127 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
128 | + } | ||
129 | + else | ||
130 | + { | ||
131 | + printf("编码器配置初始化完毕\n"); | ||
132 | + } | ||
133 | + | ||
134 | + //获得基本编码器配置 | ||
135 | + ret = enc_info->mpi->control(enc_info->ctx, MPP_ENC_GET_CFG, enc_info->cfg); | ||
136 | + if (ret) { | ||
137 | + JZSDK_LOG_ERROR("get enc cfg failed ret %d", ret); | ||
138 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
139 | + } | ||
140 | + | ||
141 | +/*********************************************************************************************************************** | ||
142 | + * | ||
143 | + * | ||
144 | + * 设置编码器参数 | ||
145 | + * | ||
146 | + * | ||
147 | +************************************************************************************************************************/ | ||
52 | //设置位固定码率模式 | 148 | //设置位固定码率模式 |
53 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:mode", MPP_ENC_RC_MODE_CBR); | 149 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:mode", MPP_ENC_RC_MODE_CBR); |
54 | 150 | ||
55 | //设置码率 dji要小于8M 先填个4M 4000000 | 151 | //设置码率 dji要小于8M 先填个4M 4000000 |
56 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:bps_target", 4000000); | 152 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:bps_target", 4000000); |
57 | 153 | ||
58 | //设置输入帧率不变 | 154 | //设置输入帧率不变 |
59 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:fps_in_flex", 0); | 155 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:fps_in_flex", 0); |
60 | 156 | ||
61 | //设置输入帧率的分子 | 157 | //设置输入帧率的分子 |
62 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:fps_in_num", EncCfg->FrameNum); | 158 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:fps_in_num", enc_info->FrameNum); |
63 | //设置输入帧率的分母 | 159 | //设置输入帧率的分母 |
64 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:fps_in_denorm", 1); | 160 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:fps_in_denorm", 1); |
65 | 161 | ||
66 | //设置输出帧率的分子 | 162 | //设置输出帧率的分子 |
67 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:fps_out_num", EncCfg->FrameNum); | 163 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:fps_out_num", enc_info->FrameNum); |
68 | //设置输出帧率的分母 | 164 | //设置输出帧率的分母 |
69 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:fps_out_denorm", 1); | 165 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:fps_out_denorm", 1); |
70 | 166 | ||
71 | //设置i帧间隔,跟随帧率 1秒1 I帧 | 167 | //设置i帧间隔,跟随帧率 1秒1 I帧 |
72 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:gop", EncCfg->IDR_gop); | 168 | + mpp_enc_cfg_set_s32(enc_info->cfg, "rc:gop", enc_info->IDR_gop); |
73 | 169 | ||
74 | //一帧图像最大重编码次数,次数越小,重编码次数越小,越清晰 | 170 | //一帧图像最大重编码次数,次数越小,重编码次数越小,越清晰 |
75 | //这里暂不开启 | 171 | //这里暂不开启 |
76 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "rc:max_reenc_times", 1); | 172 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "rc:max_reenc_times", 1); |
77 | 173 | ||
78 | //设置输入图像的宽高 | 174 | //设置输入图像的宽高 |
79 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:width", EncCfg->width); | ||
80 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:height", EncCfg->height); | 175 | + mpp_enc_cfg_set_s32(enc_info->cfg, "prep:width", enc_info->width); |
176 | + mpp_enc_cfg_set_s32(enc_info->cfg, "prep:height", enc_info->height); | ||
81 | 177 | ||
82 | //垂直方向相邻两行之间的距离 | 178 | //垂直方向相邻两行之间的距离 |
83 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:hor_stride", EncCfg->hor_stride); | 179 | + mpp_enc_cfg_set_s32(enc_info->cfg, "prep:hor_stride", enc_info->hor_stride); |
84 | //入图像分量之间的以行数间隔数 | 180 | //入图像分量之间的以行数间隔数 |
85 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:ver_stride", EncCfg->ver_stride); | 181 | + mpp_enc_cfg_set_s32(enc_info->cfg, "prep:ver_stride", enc_info->ver_stride); |
86 | 182 | ||
87 | //MppFrameFormat 设置输入图像的像素格式 | 183 | //MppFrameFormat 设置输入图像的像素格式 |
88 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:format", EncCfg->Input_fmt); | 184 | + mpp_enc_cfg_set_s32(enc_info->cfg, "prep:format", enc_info->Input_fmt); |
89 | 185 | ||
90 | //MppFrameColorSpace 设置输入图像的数据空间色彩范围, 不设置 | 186 | //MppFrameColorSpace 设置输入图像的数据空间色彩范围, 不设置 |
91 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:color", MPP_FRAME_SPC_RGB); | 187 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "prep:color", MPP_FRAME_SPC_RGB); |
92 | 188 | ||
93 | //MppFrameColorRange 表示输入图像是 full range 还是 limit range 不设置 | 189 | //MppFrameColorRange 表示输入图像是 full range 还是 limit range 不设置 |
94 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:range", MPP_FRAME_RANGE_UNSPECIFIED); | 190 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "prep:range", MPP_FRAME_RANGE_UNSPECIFIED); |
95 | 191 | ||
96 | //MppEncRotationCfg 选择旋转方向 不旋转! | 192 | //MppEncRotationCfg 选择旋转方向 不旋转! |
97 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:rotation", MPP_ENC_ROT_0); | 193 | + mpp_enc_cfg_set_s32(enc_info->cfg, "prep:rotation", MPP_ENC_ROT_0); |
98 | 194 | ||
99 | //是否镜像 0不镜像 水平镜像1 垂直镜像2 | 195 | //是否镜像 0不镜像 水平镜像1 垂直镜像2 |
100 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "prep:mirroring", 0); | 196 | + mpp_enc_cfg_set_s32(enc_info->cfg, "prep:mirroring", 0); |
101 | 197 | ||
102 | //MppCodingType 表示 MppEncCodecCfg 对应的协议类型,需要与 MppCtx初始化函数 mpp_init 的参数一致。 | 198 | //MppCodingType 表示 MppEncCodecCfg 对应的协议类型,需要与 MppCtx初始化函数 mpp_init 的参数一致。 |
103 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "codec:type", MPP_VIDEO_CodingAVC); //h264类型 | 199 | + mpp_enc_cfg_set_s32(enc_info->cfg, "codec:type", MPP_VIDEO_CodingAVC); //h264类型 |
104 | 200 | ||
105 | //h264流的码流格式类型 0 标识AnnexB 加入 00 00 00 01起始码 1 没有起始码 | 201 | //h264流的码流格式类型 0 标识AnnexB 加入 00 00 00 01起始码 1 没有起始码 |
106 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:stream_type", 0); | 202 | + mpp_enc_cfg_set_s32(enc_info->cfg, "h264:stream_type", 0); |
107 | 203 | ||
108 | //h264流的表示 SPS 中的 profile_idc 参数: | 204 | //h264流的表示 SPS 中的 profile_idc 参数: |
109 | //66 – 表示 Baseline profile。 | 205 | //66 – 表示 Baseline profile。 |
110 | //77 – 表示 Main profile。 | 206 | //77 – 表示 Main profile。 |
111 | //100 – 表示 High profile。 | 207 | //100 – 表示 High profile。 |
112 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:profile", 66); | 208 | + mpp_enc_cfg_set_s32(enc_info->cfg, "h264:profile", 66); |
113 | 209 | ||
114 | //sps档次 dji要求小于5.1 这里选4.1 | 210 | //sps档次 dji要求小于5.1 这里选4.1 |
115 | //其中 10 表示 level 1.0: | 211 | //其中 10 表示 level 1.0: |
@@ -118,75 +214,75 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | @@ -118,75 +214,75 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | ||
118 | // 30/31/32 – D1@25fps / 720p@30fps / 720p@60fps | 214 | // 30/31/32 – D1@25fps / 720p@30fps / 720p@60fps |
119 | // 40/41/42 – 1080p@30fps / 1080p@30fps / 1080p@60fps | 215 | // 40/41/42 – 1080p@30fps / 1080p@30fps / 1080p@60fps |
120 | // 50/51/52 – 4K@30fps / 4K@30fps / 4K@60fps | 216 | // 50/51/52 – 4K@30fps / 4K@30fps / 4K@60fps |
121 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:level", 41); | 217 | + mpp_enc_cfg_set_s32(enc_info->cfg, "h264:level", 41); |
122 | 218 | ||
123 | //表示编码器使用的熵编码格式: 0 CAVLC 1 CABAC cabac的精度更多,但是效率变低 | 219 | //表示编码器使用的熵编码格式: 0 CAVLC 1 CABAC cabac的精度更多,但是效率变低 |
124 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:cabac_en", 1); | 220 | + mpp_enc_cfg_set_s32(enc_info->cfg, "h264:cabac_en", 1); |
125 | 221 | ||
126 | //表示协议语法中的 cabac_init_idc,在 cabac_en 为 1 时有效,有效值为 0~2。 | 222 | //表示协议语法中的 cabac_init_idc,在 cabac_en 为 1 时有效,有效值为 0~2。 |
127 | //DJI给的范围是1 | 223 | //DJI给的范围是1 |
128 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:cabac_idc", 1); | 224 | + mpp_enc_cfg_set_s32(enc_info->cfg, "h264:cabac_idc", 1); |
129 | 225 | ||
130 | //表示协议语法中的 8x8 变换使能标志。 | 226 | //表示协议语法中的 8x8 变换使能标志。 |
131 | //0 – 为关闭,在 Baseline/Main profile 时固定关闭。 | 227 | //0 – 为关闭,在 Baseline/Main profile 时固定关闭。 |
132 | //1 – 为开启,在 High profile 时可选可启。 | 228 | //1 – 为开启,在 High profile 时可选可启。 |
133 | - mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:trans8x8", 0); | 229 | + mpp_enc_cfg_set_s32(enc_info->cfg, "h264:trans8x8", 0); |
134 | 230 | ||
135 | //表示协议语法中 constrained_intra_pred_mode 模式使能标志。0 – 为关闭,1 – 为开启。 | 231 | //表示协议语法中 constrained_intra_pred_mode 模式使能标志。0 – 为关闭,1 – 为开启。 |
136 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:const_intra", 0); | 232 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:const_intra", 0); |
137 | 233 | ||
138 | //表示协议语法中 scaling_list_matrix 模式 0 – 为 flat matrix,1 – 默认 matrix。 | 234 | //表示协议语法中 scaling_list_matrix 模式 0 – 为 flat matrix,1 – 默认 matrix。 |
139 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:scaling_list", 0); | 235 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:scaling_list", 0); |
140 | 236 | ||
141 | //表示协议语法中 chroma_cb_qp_offset 值。有效范围为[-12, 12]。 | 237 | //表示协议语法中 chroma_cb_qp_offset 值。有效范围为[-12, 12]。 |
142 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:cb_qp_offset", 0); | 238 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:cb_qp_offset", 0); |
143 | 239 | ||
144 | //表示协议语法中 chroma_cr_qp_offset 值。有效范围为[-12, 12]。 | 240 | //表示协议语法中 chroma_cr_qp_offset 值。有效范围为[-12, 12]。 |
145 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:cr_qp_offset", 0); | 241 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:cr_qp_offset", 0); |
146 | 242 | ||
147 | //表示协议语法中 deblock_disable 标志,有效范围为[0, 2]。0 – deblocking 使能。1 – deblocking 关闭。2 – 在 slice 边界关闭 deblocking。 | 243 | //表示协议语法中 deblock_disable 标志,有效范围为[0, 2]。0 – deblocking 使能。1 – deblocking 关闭。2 – 在 slice 边界关闭 deblocking。 |
148 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:dblk_disable", 0); | 244 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:dblk_disable", 0); |
149 | 245 | ||
150 | //表示协议语法中 deblock_offset_alpha 值。有效范围为[-6, 6]。 | 246 | //表示协议语法中 deblock_offset_alpha 值。有效范围为[-6, 6]。 |
151 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:dblk_alpha", 0); | 247 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:dblk_alpha", 0); |
152 | 248 | ||
153 | //表示协议语法中 deblock_dblk_beta 值。有效范围为[-6, 6]。 | 249 | //表示协议语法中 deblock_dblk_beta 值。有效范围为[-6, 6]。 |
154 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:dblk_beta", 0) | 250 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:dblk_beta", 0) |
155 | 251 | ||
156 | //表示初始 QP 值,一般情况请勿配置。 | 252 | //表示初始 QP 值,一般情况请勿配置。 |
157 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:qp_init", 26); | 253 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "h264:qp_init", 26); |
158 | 254 | ||
159 | // 表示最大 QP 值,一般情况请勿配置。 | 255 | // 表示最大 QP 值,一般情况请勿配置。 |
160 | - // mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:qp_max", 51); | 256 | + // mpp_enc_cfg_set_s32(enc_info->cfg, "h264:qp_max", 51); |
161 | 257 | ||
162 | // 表示最小 QP 值,一般情况请勿配置。 | 258 | // 表示最小 QP 值,一般情况请勿配置。 |
163 | - // mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:qp_min", 10); | 259 | + // mpp_enc_cfg_set_s32(enc_info->cfg, "h264:qp_min", 10); |
164 | 260 | ||
165 | // 表示最大 I 帧 QP 值,一般情况请勿配置。 | 261 | // 表示最大 I 帧 QP 值,一般情况请勿配置。 |
166 | - // mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:qp_max_i", 51); | 262 | + // mpp_enc_cfg_set_s32(enc_info->cfg, "h264:qp_max_i", 51); |
167 | 263 | ||
168 | // 表示最小 I 帧 QP 值,一般情况请勿配置。 | 264 | // 表示最小 I 帧 QP 值,一般情况请勿配置。 |
169 | - // mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:qp_min_i", 10); | 265 | + // mpp_enc_cfg_set_s32(enc_info->cfg, "h264:qp_min_i", 10); |
170 | 266 | ||
171 | // 表示相临两帧之间的帧级 QP 变化幅度。 | 267 | // 表示相临两帧之间的帧级 QP 变化幅度。 |
172 | - // mpp_enc_cfg_set_s32(EncCfg->cfg, "h264:qp_step", 10); | 268 | + // mpp_enc_cfg_set_s32(enc_info->cfg, "h264:qp_step", 10); |
173 | 269 | ||
174 | /***** h265 的自己翻阅文档********/ | 270 | /***** h265 的自己翻阅文档********/ |
175 | 271 | ||
176 | //表示 JPEG 编码器使用的量化参数等级,编码器一共内置了 11 级量化系数表格,从 0 到 10,图像质量从差到好。 | 272 | //表示 JPEG 编码器使用的量化参数等级,编码器一共内置了 11 级量化系数表格,从 0 到 10,图像质量从差到好。 |
177 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "jpeg: quant", 10); | 273 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "jpeg: quant", 10); |
178 | 274 | ||
179 | //MppEncSplitMode 切分模式 | 275 | //MppEncSplitMode 切分模式 |
180 | //1– BY_BYTE 切分 slice 根据 slice 大小。 2– BY_CTU 切分 slice 根据宏块或 CTU 个数 | 276 | //1– BY_BYTE 切分 slice 根据 slice 大小。 2– BY_CTU 切分 slice 根据宏块或 CTU 个数 |
181 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "split:mode", MPP_ENC_SPLIT_NONE); | 277 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "split:mode", MPP_ENC_SPLIT_NONE); |
182 | 278 | ||
183 | //切分参数 Slice 切分参数: | 279 | //切分参数 Slice 切分参数: |
184 | //在 BY_BYTE 模式下,参数表示每个 slice 的最大大小。 | 280 | //在 BY_BYTE 模式下,参数表示每个 slice 的最大大小。 |
185 | //在 BY_CTU 模式下,参数表示每个 slice 包含的宏块或CTU 个数。 | 281 | //在 BY_CTU 模式下,参数表示每个 slice 包含的宏块或CTU 个数。 |
186 | - //mpp_enc_cfg_set_s32(EncCfg->cfg, "split:arg", 1); | 282 | + //mpp_enc_cfg_set_s32(enc_info->cfg, "split:arg", 1); |
187 | 283 | ||
188 | //将配置参数输入 | 284 | //将配置参数输入 |
189 | - int ret = EncCfg->mpi->control(EncCfg->ctx, MPP_ENC_SET_CFG, EncCfg->cfg); | 285 | + ret = enc_info->mpi->control(enc_info->ctx, MPP_ENC_SET_CFG, enc_info->cfg); |
190 | if (ret) | 286 | if (ret) |
191 | { | 287 | { |
192 | printf("mpi control enc set cfg failed ret %d\n", ret); | 288 | printf("mpi control enc set cfg failed ret %d\n", ret); |
@@ -196,8 +292,8 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | @@ -196,8 +292,8 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | ||
196 | //设置帧信息 (可选项) | 292 | //设置帧信息 (可选项) |
197 | RK_U32 sei_mode; | 293 | RK_U32 sei_mode; |
198 | mpp_env_get_u32("sei_mode", &sei_mode, MPP_ENC_SEI_MODE_ONE_FRAME); | 294 | mpp_env_get_u32("sei_mode", &sei_mode, MPP_ENC_SEI_MODE_ONE_FRAME); |
199 | - EncCfg->sei_mode = sei_mode; | ||
200 | - ret = EncCfg->mpi->control(EncCfg->ctx, MPP_ENC_SET_SEI_CFG, &EncCfg->sei_mode); | 295 | + enc_info->sei_mode = sei_mode; |
296 | + ret = enc_info->mpi->control(enc_info->ctx, MPP_ENC_SET_SEI_CFG, &enc_info->sei_mode); | ||
201 | if (ret) | 297 | if (ret) |
202 | { | 298 | { |
203 | printf("mpi control enc set sei cfg failed ret %d\n", ret); | 299 | printf("mpi control enc set sei cfg failed ret %d\n", ret); |
@@ -206,10 +302,10 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | @@ -206,10 +302,10 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | ||
206 | 302 | ||
207 | //设置头信息 (可选项) | 303 | //设置头信息 (可选项) |
208 | //如果是264 或者h265 给个信息头 | 304 | //如果是264 或者h265 给个信息头 |
209 | - if (EncCfg->type == MPP_VIDEO_CodingAVC || EncCfg->type == MPP_VIDEO_CodingHEVC) | 305 | + if (enc_info->encType == MPP_VIDEO_CodingAVC || enc_info->encType == MPP_VIDEO_CodingHEVC) |
210 | { | 306 | { |
211 | - EncCfg->header_mode = MPP_ENC_HEADER_MODE_EACH_IDR; | ||
212 | - ret = EncCfg->mpi->control(EncCfg->ctx, MPP_ENC_SET_HEADER_MODE, &EncCfg->header_mode); | 307 | + enc_info->header_mode = MPP_ENC_HEADER_MODE_EACH_IDR; |
308 | + ret = enc_info->mpi->control(enc_info->ctx, MPP_ENC_SET_HEADER_MODE, &enc_info->header_mode); | ||
213 | if (ret) { | 309 | if (ret) { |
214 | printf("mpi control enc set header mode failed ret %d\n", ret); | 310 | printf("mpi control enc set header mode failed ret %d\n", ret); |
215 | return ret; | 311 | return ret; |
@@ -238,164 +334,6 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | @@ -238,164 +334,6 @@ int RTK_mmp_enc_cfg(MPP_ENC_CONFIG *EncCfg) | ||
238 | // mpp_enc_roi_init(&p->roi_ctx, p->width, p->height, p->type, 4); | 334 | // mpp_enc_roi_init(&p->roi_ctx, p->width, p->height, p->type, 4); |
239 | // mpp_assert(p->roi_ctx); | 335 | // mpp_assert(p->roi_ctx); |
240 | // } | 336 | // } |
241 | -} | ||
242 | - | ||
243 | -T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, MppFrameFormat In_format, int width, int height, int FrameNum, int IDR_gop) | ||
244 | -{ | ||
245 | - //创建一个编码器参数 | ||
246 | - MPP_ENC_CONFIG *EncCfg = NULL; | ||
247 | - | ||
248 | - //为编码器参数注册内存 | ||
249 | - EncCfg = (MPP_ENC_CONFIG *)malloc(sizeof(MPP_ENC_CONFIG)); | ||
250 | - if (EncCfg == NULL) { | ||
251 | - printf("mpp编码器参数内存分配失败\n"); | ||
252 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
253 | - } | ||
254 | - | ||
255 | - int ret; | ||
256 | - | ||
257 | - EncCfg->ctx = NULL; | ||
258 | - EncCfg->mpi = NULL; | ||
259 | - //EncCfg->type = MPP_VIDEO_CodingAVC; //默认输出类型为h264 | ||
260 | - EncCfg->type = Out_video_tpye; //默认输出类型为h264 | ||
261 | - | ||
262 | - EncCfg->height = height; | ||
263 | - EncCfg->width = width; | ||
264 | - EncCfg->hor_stride = (MPP_ALIGN(width, 16)); | ||
265 | - EncCfg->ver_stride = (MPP_ALIGN(height, 16)); | ||
266 | - EncCfg->FrameNum = FrameNum; | ||
267 | - EncCfg->IDR_gop = IDR_gop; | ||
268 | - //EncCfg->Input_fmt = MPP_FMT_YUV420SP; | ||
269 | - EncCfg->Input_fmt = In_format; | ||
270 | - | ||
271 | - //编解码一体的情况下用不上这里了 | ||
272 | - switch (EncCfg->Input_fmt & MPP_FRAME_FMT_MASK) | ||
273 | - { | ||
274 | - case MPP_FMT_YUV420SP: | ||
275 | - case MPP_FMT_YUV420P: { | ||
276 | - EncCfg->Frame_data_size = MPP_ALIGN(EncCfg->hor_stride, 64) * MPP_ALIGN(EncCfg->ver_stride, 64) * 3 / 2; | ||
277 | - } break; | ||
278 | - | ||
279 | - case MPP_FMT_YUV422_YUYV : | ||
280 | - case MPP_FMT_YUV422_YVYU : | ||
281 | - case MPP_FMT_YUV422_UYVY : | ||
282 | - case MPP_FMT_YUV422_VYUY : | ||
283 | - case MPP_FMT_YUV422P : | ||
284 | - case MPP_FMT_YUV422SP : | ||
285 | - case MPP_FMT_RGB444 : | ||
286 | - case MPP_FMT_BGR444 : | ||
287 | - case MPP_FMT_RGB555 : | ||
288 | - case MPP_FMT_BGR555 : | ||
289 | - case MPP_FMT_RGB565 : | ||
290 | - case MPP_FMT_BGR565 : { | ||
291 | - EncCfg->Frame_data_size = MPP_ALIGN(EncCfg->hor_stride, 64) * MPP_ALIGN(EncCfg->ver_stride, 64) * 2; | ||
292 | - } break; | ||
293 | - | ||
294 | - default: { | ||
295 | - EncCfg->Frame_data_size = MPP_ALIGN(EncCfg->hor_stride, 64) * MPP_ALIGN(EncCfg->ver_stride, 64) * 4; | ||
296 | - } break; | ||
297 | - } | ||
298 | - | ||
299 | - //获取h264头长度 | ||
300 | - if (MPP_FRAME_FMT_IS_FBC(EncCfg->Input_fmt)) | ||
301 | - { | ||
302 | - EncCfg->header_size = MPP_ALIGN(MPP_ALIGN(EncCfg->width, 16) * MPP_ALIGN(EncCfg->height, 16) / 16, SZ_4K); | ||
303 | - } | ||
304 | - else | ||
305 | - { | ||
306 | - EncCfg->header_size = 0; | ||
307 | - } | ||
308 | - | ||
309 | -/*************************************************** | ||
310 | - * | ||
311 | - * 注册输入输出数组的内存 | ||
312 | - * | ||
313 | - * *****************************************************/ | ||
314 | - // 获取MPP缓冲区组,缓冲区类型为ION且可缓存 | ||
315 | - ret = mpp_buffer_group_get_internal(&EncCfg->BufferGop, MPP_BUFFER_TYPE_ION); | ||
316 | - if (ret) { | ||
317 | - printf("获取MPP缓冲区组失败failed to get mpp buffer group ret %d\n", ret); | ||
318 | - } | ||
319 | - | ||
320 | - // 从缓冲区组中获取用于输入帧的缓冲区 | ||
321 | - ret = mpp_buffer_get(EncCfg->BufferGop, &EncCfg->FrameBuffer, EncCfg->Frame_data_size + EncCfg->header_size); | ||
322 | - if (ret) { | ||
323 | - printf("获取输入帧缓冲区失败failed to get buffer for input frame ret %d\n", ret); | ||
324 | - } | ||
325 | - | ||
326 | - // 从缓冲区组中获取用于输出包的缓冲区 | ||
327 | - ret = mpp_buffer_get(EncCfg->BufferGop, &EncCfg->PacketBuffer, EncCfg->Frame_data_size); | ||
328 | - if (ret) { | ||
329 | - printf("获取输出包缓冲区失败failed to get buffer for output packet ret %d\n", ret); | ||
330 | - } | ||
331 | - | ||
332 | - // // 从缓冲区组中获取用于运动信息输出包的缓冲区 | ||
333 | - // ret = mpp_buffer_get(EncCfg->BufferGop, &p->md_info, p->mdinfo_size); | ||
334 | - // if (ret) { | ||
335 | - // printf("获取运动信息输出包缓冲区失败failed to get buffer for motion info output packet ret %d\n", ret); | ||
336 | - // } | ||
337 | - | ||
338 | - //创建一个编码器 | ||
339 | - ret = mpp_create(&(EncCfg->ctx), &EncCfg->mpi); | ||
340 | - if (ret != MPP_OK) | ||
341 | - { | ||
342 | - JZSDK_LOG_ERROR("mpp_create failed ret %d", ret); | ||
343 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
344 | - } | ||
345 | - else | ||
346 | - { | ||
347 | - printf("编码器创建完毕\n"); | ||
348 | - } | ||
349 | - | ||
350 | - //设置编码超时(堵塞) | ||
351 | - MppPollType timeout = MPP_POLL_BLOCK; | ||
352 | - ret = EncCfg->mpi->control(EncCfg->ctx, MPP_SET_OUTPUT_TIMEOUT, &timeout); | ||
353 | - if (ret != MPP_OK) | ||
354 | - { | ||
355 | - JZSDK_LOG_ERROR("编码超时设置失败 %d", ret); | ||
356 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
357 | - } | ||
358 | - else | ||
359 | - { | ||
360 | - printf("编码超时设置成功\n"); | ||
361 | - } | ||
362 | - | ||
363 | - //初始化编码器 | ||
364 | - ret = mpp_init(EncCfg->ctx, MPP_CTX_ENC, MPP_VIDEO_CodingAVC); | ||
365 | - if (ret != MPP_OK) | ||
366 | - { | ||
367 | - JZSDK_LOG_ERROR("mpp_init failed ret %d", ret); | ||
368 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
369 | - } | ||
370 | - else | ||
371 | - { | ||
372 | - printf("编码器初始化完毕\n"); | ||
373 | - } | ||
374 | - | ||
375 | - //初始化编码器配置 | ||
376 | - ret = mpp_enc_cfg_init(&EncCfg->cfg); | ||
377 | - if (ret) { | ||
378 | - JZSDK_LOG_ERROR("mpp_enc_cfg_init failed ret %d", ret); | ||
379 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
380 | - } | ||
381 | - else | ||
382 | - { | ||
383 | - printf("编码器配置初始化完毕\n"); | ||
384 | - } | ||
385 | - | ||
386 | - //获得基本编码器配置 | ||
387 | - ret = EncCfg->mpi->control(EncCfg->ctx, MPP_ENC_GET_CFG, EncCfg->cfg); | ||
388 | - if (ret) { | ||
389 | - JZSDK_LOG_ERROR("get enc cfg failed ret %d", ret); | ||
390 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
391 | - } | ||
392 | - | ||
393 | - //设置编码器参数 | ||
394 | - RTK_mmp_enc_cfg(EncCfg); | ||
395 | - | ||
396 | - | ||
397 | - //把编码器地址传递回去 | ||
398 | - *index = (void *)EncCfg; | ||
399 | 337 | ||
400 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 338 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
401 | } | 339 | } |
@@ -420,7 +358,7 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | @@ -420,7 +358,7 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | ||
420 | // MppPacket m_packet = NULL; | 358 | // MppPacket m_packet = NULL; |
421 | 359 | ||
422 | // // 检查编码类型是否为AVC(H.264)或HEVC(H.265) | 360 | // // 检查编码类型是否为AVC(H.264)或HEVC(H.265) |
423 | -// if (EncCfg->type == MPP_VIDEO_CodingAVC || EncCfg->type == MPP_VIDEO_CodingHEVC) | 361 | +// if (enc_info->type == MPP_VIDEO_CodingAVC || enc_info->type == MPP_VIDEO_CodingHEVC) |
424 | // { | 362 | // { |
425 | // /* | 363 | // /* |
426 | // * 可以使用普通malloc分配的内存缓冲区作为输入,而不是pkt_buf。 | 364 | // * 可以使用普通malloc分配的内存缓冲区作为输入,而不是pkt_buf。 |
@@ -428,7 +366,7 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | @@ -428,7 +366,7 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | ||
428 | // * 这里使用pkt_buf缓冲区只是为了简化演示。 | 366 | // * 这里使用pkt_buf缓冲区只是为了简化演示。 |
429 | // */ | 367 | // */ |
430 | // // 使用pkt_buf缓冲区初始化packet | 368 | // // 使用pkt_buf缓冲区初始化packet |
431 | -// mpp_packet_init_with_buffer(&m_packet, EncCfg->Packet_data); | 369 | +// mpp_packet_init_with_buffer(&m_packet, enc_info->Packet_data); |
432 | // /* NOTE: It is important to clear output packet length!! */ | 370 | // /* NOTE: It is important to clear output packet length!! */ |
433 | // /* | 371 | // /* |
434 | // * 注意:清除输出数据包长度非常重要! | 372 | // * 注意:清除输出数据包长度非常重要! |
@@ -437,7 +375,7 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | @@ -437,7 +375,7 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | ||
437 | // mpp_packet_set_length(m_packet, 0); | 375 | // mpp_packet_set_length(m_packet, 0); |
438 | 376 | ||
439 | // // 调用mpi的control函数,获取编码的头部信息(如SPS和PPS),并将其存储在packet中 | 377 | // // 调用mpi的control函数,获取编码的头部信息(如SPS和PPS),并将其存储在packet中 |
440 | -// ret = EncCfg->mpi->control(EncCfg->ctx, MPP_ENC_GET_HDR_SYNC, m_packet); | 378 | +// ret = enc_info->mpi->control(enc_info->ctx, MPP_ENC_GET_HDR_SYNC, m_packet); |
441 | // if (ret) { | 379 | // if (ret) { |
442 | // printf("获取h264 enc头信息失败\n"); | 380 | // printf("获取h264 enc头信息失败\n"); |
443 | // return ret; | 381 | // return ret; |
@@ -464,20 +402,17 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | @@ -464,20 +402,17 @@ T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, M | ||
464 | // yuv420sp转h264 | 402 | // yuv420sp转h264 |
465 | // 但是输入和输出都是mmpframe的地址 | 403 | // 但是输入和输出都是mmpframe的地址 |
466 | // 注意,输出的画面帧要记得释放内存 | 404 | // 注意,输出的画面帧要记得释放内存 |
467 | -T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_data_frame, MppPacket *out_put_frame) | 405 | +T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(T_rtk_mmp_enc_info *enc_info, MppFrame input_data_frame, MppPacket *out_put_frame) |
468 | { | 406 | { |
469 | int ret; //返回值 | 407 | int ret; //返回值 |
470 | 408 | ||
471 | - //获取编码器参数 | ||
472 | - MPP_ENC_CONFIG *EncCfg = (MPP_ENC_CONFIG *)*index; | ||
473 | - | ||
474 | //获取输入的数据 | 409 | //获取输入的数据 |
475 | MppFrame frame = input_data_frame; | 410 | MppFrame frame = input_data_frame; |
476 | 411 | ||
477 | //printf("mmp开始编码\n"); | 412 | //printf("mmp开始编码\n"); |
478 | 413 | ||
479 | /* 将帧编码并放入编码上下文 */ | 414 | /* 将帧编码并放入编码上下文 */ |
480 | - ret = EncCfg->mpi->encode_put_frame(EncCfg->ctx, frame); | 415 | + ret = enc_info->mpi->encode_put_frame(enc_info->ctx, frame); |
481 | if (ret) { | 416 | if (ret) { |
482 | JZSDK_LOG_ERROR("mpp encode put frame failed"); | 417 | JZSDK_LOG_ERROR("mpp encode put frame failed"); |
483 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 418 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -486,7 +421,7 @@ T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_d | @@ -486,7 +421,7 @@ T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_d | ||
486 | 421 | ||
487 | do { | 422 | do { |
488 | //获取编码后的帧 | 423 | //获取编码后的帧 |
489 | - ret = EncCfg->mpi->encode_get_packet(EncCfg->ctx, out_put_frame); | 424 | + ret = enc_info->mpi->encode_get_packet(enc_info->ctx, out_put_frame); |
490 | if (ret) { | 425 | if (ret) { |
491 | JZSDK_LOG_ERROR("mpp encode get packet failed"); | 426 | JZSDK_LOG_ERROR("mpp encode get packet failed"); |
492 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 427 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -496,7 +431,7 @@ T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_d | @@ -496,7 +431,7 @@ T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_d | ||
496 | { | 431 | { |
497 | // write packet to file here | 432 | // write packet to file here |
498 | //ptr = mpp_packet_get_pos(packet); | 433 | //ptr = mpp_packet_get_pos(packet); |
499 | - //int packet_len = mpp_packet_get_length(EncCfg->Packet_data); | 434 | + //int packet_len = mpp_packet_get_length(enc_info->Packet_data); |
500 | //EncConfigInput->Packet_eos = mpp_packet_get_eos(packet); | 435 | //EncConfigInput->Packet_eos = mpp_packet_get_eos(packet); |
501 | 436 | ||
502 | //printf("获取到编码内容 len:%d\n",packet_len); | 437 | //printf("获取到编码内容 len:%d\n",packet_len); |
@@ -509,13 +444,10 @@ T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_d | @@ -509,13 +444,10 @@ T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_d | ||
509 | } | 444 | } |
510 | 445 | ||
511 | // yuv420个帧长度为 高*宽*3/2 | 446 | // yuv420个帧长度为 高*宽*3/2 |
512 | -T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_data_length, MppPacket *Packet) | 447 | +T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(T_rtk_mmp_enc_info *enc_info, char *in_data, int in_data_length, MppPacket *Packet) |
513 | { | 448 | { |
514 | int ret; //返回值 | 449 | int ret; //返回值 |
515 | 450 | ||
516 | - //获取编码器参数 | ||
517 | - MPP_ENC_CONFIG *EncCfg = (MPP_ENC_CONFIG *)*index; | ||
518 | - | ||
519 | MppFrame frame = NULL; | 451 | MppFrame frame = NULL; |
520 | MppMeta meta = NULL; //元数据指针 | 452 | MppMeta meta = NULL; //元数据指针 |
521 | 453 | ||
@@ -528,27 +460,27 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | @@ -528,27 +460,27 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | ||
528 | 460 | ||
529 | //设置帧对象的参数 | 461 | //设置帧对象的参数 |
530 | // 设置处理帧的宽度、高度、水平跨度、垂直跨度和格式 | 462 | // 设置处理帧的宽度、高度、水平跨度、垂直跨度和格式 |
531 | - mpp_frame_set_width(frame, EncCfg->width); | ||
532 | - mpp_frame_set_height(frame, EncCfg->height); | ||
533 | - mpp_frame_set_hor_stride(frame, EncCfg->hor_stride); | ||
534 | - mpp_frame_set_ver_stride(frame, EncCfg->ver_stride); | ||
535 | - mpp_frame_set_fmt(frame, EncCfg->Input_fmt); | ||
536 | - mpp_frame_set_eos(frame, EncCfg->Frame_eos); // 设置帧的结束标志 | 463 | + mpp_frame_set_width(frame, enc_info->width); |
464 | + mpp_frame_set_height(frame, enc_info->height); | ||
465 | + mpp_frame_set_hor_stride(frame, enc_info->hor_stride); | ||
466 | + mpp_frame_set_ver_stride(frame, enc_info->ver_stride); | ||
467 | + mpp_frame_set_fmt(frame, enc_info->Input_fmt); | ||
468 | + mpp_frame_set_eos(frame, enc_info->Frame_eos); // 设置帧的结束标志 | ||
537 | 469 | ||
538 | //获取帧缓冲区的指针 | 470 | //获取帧缓冲区的指针 |
539 | - void *buf = mpp_buffer_get_ptr(EncCfg->FrameBuffer); | 471 | + void *buf = mpp_buffer_get_ptr(enc_info->FrameBuffer); |
540 | 472 | ||
541 | //将yuv数据写入缓冲区 | 473 | //将yuv数据写入缓冲区 |
542 | memcpy(buf, in_data, in_data_length); | 474 | memcpy(buf, in_data, in_data_length); |
543 | 475 | ||
544 | // 使用默认的帧缓冲区 | 476 | // 使用默认的帧缓冲区 |
545 | - mpp_frame_set_buffer(frame, EncCfg->FrameBuffer); | 477 | + mpp_frame_set_buffer(frame, enc_info->FrameBuffer); |
546 | 478 | ||
547 | // 获取帧的元数据对象 | 479 | // 获取帧的元数据对象 |
548 | meta = mpp_frame_get_meta(frame); | 480 | meta = mpp_frame_get_meta(frame); |
549 | 481 | ||
550 | // 初始化包对象,并使用指定的输出缓冲区 | 482 | // 初始化包对象,并使用指定的输出缓冲区 |
551 | - mpp_packet_init_with_buffer(Packet, EncCfg->PacketBuffer); | 483 | + mpp_packet_init_with_buffer(Packet, enc_info->PacketBuffer); |
552 | 484 | ||
553 | // 注意:清除输出包的长度 | 485 | // 注意:清除输出包的长度 |
554 | // 设置包的长度为0 | 486 | // 设置包的长度为0 |
@@ -563,7 +495,7 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | @@ -563,7 +495,7 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | ||
563 | */ | 495 | */ |
564 | 496 | ||
565 | /* 将frame数据放入编码器 */ | 497 | /* 将frame数据放入编码器 */ |
566 | - ret = EncCfg->mpi->encode_put_frame(EncCfg->ctx, frame); | 498 | + ret = enc_info->mpi->encode_put_frame(enc_info->ctx, frame); |
567 | if (ret) { | 499 | if (ret) { |
568 | JZSDK_LOG_ERROR("mpp encode put frame failed"); | 500 | JZSDK_LOG_ERROR("mpp encode put frame failed"); |
569 | mpp_frame_deinit(&frame); | 501 | mpp_frame_deinit(&frame); |
@@ -579,7 +511,7 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | @@ -579,7 +511,7 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | ||
579 | 511 | ||
580 | do { | 512 | do { |
581 | //获取解码后的帧 | 513 | //获取解码后的帧 |
582 | - ret = EncCfg->mpi->encode_get_packet(EncCfg->ctx, Packet); | 514 | + ret = enc_info->mpi->encode_get_packet(enc_info->ctx, Packet); |
583 | if (ret) { | 515 | if (ret) { |
584 | JZSDK_LOG_ERROR("mpp encode get packet failed"); | 516 | JZSDK_LOG_ERROR("mpp encode get packet failed"); |
585 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 517 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -600,17 +532,15 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | @@ -600,17 +532,15 @@ T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_d | ||
600 | * 设置下一帧为I帧 | 532 | * 设置下一帧为I帧 |
601 | * | 533 | * |
602 | * *******************/ | 534 | * *******************/ |
603 | -T_JZsdkReturnCode RTK_mmp_enc_SetNextFrame_IDR(void **index) | 535 | +T_JZsdkReturnCode RTK_mmp_enc_SetNextFrame_IDR(T_rtk_mmp_enc_info *enc_info) |
604 | { | 536 | { |
605 | - //获取编码器参数 | ||
606 | - MPP_ENC_CONFIG *EncCfg = (MPP_ENC_CONFIG *)*index; | ||
607 | - | ||
608 | //将配置参数输入 | 537 | //将配置参数输入 |
609 | - int ret = EncCfg->mpi->control(EncCfg->ctx, MPP_ENC_SET_IDR_FRAME, EncCfg->cfg); | 538 | + int ret = enc_info->mpi->control(enc_info->ctx, MPP_ENC_SET_IDR_FRAME, enc_info->cfg); |
610 | if (ret) | 539 | if (ret) |
611 | { | 540 | { |
612 | printf("设置I帧失败%d\n", ret); | 541 | printf("设置I帧失败%d\n", ret); |
613 | return ret; | 542 | return ret; |
614 | } | 543 | } |
615 | } | 544 | } |
545 | + | ||
616 | #endif | 546 | #endif |
1 | #ifndef RTK_MMP_ENC_H | 1 | #ifndef RTK_MMP_ENC_H |
2 | #define RTK_MMP_ENC_H | 2 | #define RTK_MMP_ENC_H |
3 | 3 | ||
4 | -#include "version_choose.h" | 4 | +#include "BaseConfig.h" |
5 | +#include "../RTK_mmp_LibInclude.h" | ||
5 | 6 | ||
6 | #ifdef RTK_MPP_STATUS_ON | 7 | #ifdef RTK_MPP_STATUS_ON |
7 | 8 | ||
@@ -9,10 +10,53 @@ | @@ -9,10 +10,53 @@ | ||
9 | #include "rockchip/mpp_frame.h" | 10 | #include "rockchip/mpp_frame.h" |
10 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 11 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
11 | 12 | ||
12 | -T_JZsdkReturnCode RTK_mmp_enc_Init(void **index, MppCodingType Out_video_tpye, MppFrameFormat In_format, int width, int height, int FrameNum, int IDR_gop); | ||
13 | -T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(void **index, MppFrame input_data_frame, MppPacket *out_put_frame); | ||
14 | -T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(void **index, char *in_data, int in_data_length, MppPacket *Packet); | ||
15 | -T_JZsdkReturnCode RTK_mmp_enc_SetNextFrame_IDR(void **index); | 13 | + |
14 | +typedef struct T_rtk_mmp_enc_info | ||
15 | +{ | ||
16 | + //要求输入的参数 | ||
17 | + MppFrameFormat Input_fmt; //输入视频的格式 | ||
18 | + unsigned int width; //输入视频的宽度 | ||
19 | + unsigned int height; //输入视频的高度 | ||
20 | + unsigned int FrameNum; //帧数 | ||
21 | + | ||
22 | + MppCodingType encType; //编码的类型 | ||
23 | + unsigned int IDR_gop; //i帧间隔数 | ||
24 | + | ||
25 | + | ||
26 | + // 基础流上下文 | ||
27 | + MppCtx ctx; | ||
28 | + MppApi *mpi; | ||
29 | + | ||
30 | + | ||
31 | + | ||
32 | + // 输入/输出 | ||
33 | + MppBufferGroup BufferGop; //数据缓冲池 | ||
34 | + | ||
35 | + MppBuffer PacketBuffer; //输出数组缓冲区 | ||
36 | + unsigned int Packet_data_size; //packet包的长度 | ||
37 | + unsigned int Packet_eos; //packet包的结束标志 | ||
38 | + | ||
39 | + MppBuffer FrameBuffer; //输入数组缓冲区 | ||
40 | + unsigned int Frame_data_size; //Frame包的长度 | ||
41 | + unsigned int Frame_eos; //Frame包的结束标志 | ||
42 | + | ||
43 | + // 资源分配参数 | ||
44 | + unsigned int hor_stride; | ||
45 | + unsigned int ver_stride; | ||
46 | + | ||
47 | + // 运行时的配置 | ||
48 | + MppEncCfg cfg; | ||
49 | + MppEncHeaderMode header_mode; | ||
50 | + int header_size; | ||
51 | + | ||
52 | + MppEncSeiMode sei_mode; | ||
53 | + | ||
54 | +}T_rtk_mmp_enc_info ; | ||
55 | + | ||
56 | +T_JZsdkReturnCode RTK_mmp_enc_Init(T_rtk_mmp_enc_info *enc_info); | ||
57 | +T_JZsdkReturnCode RTK_mmp_enc_yuv_to_h264_byFrame(T_rtk_mmp_enc_info *enc_info, MppFrame input_data_frame, MppPacket *out_put_frame); | ||
58 | +T_JZsdkReturnCode RTK_mmp_enc_data_to_h264(T_rtk_mmp_enc_info *enc_info, char *in_data, int in_data_length, MppPacket *Packet); | ||
59 | +T_JZsdkReturnCode RTK_mmp_enc_SetNextFrame_IDR(T_rtk_mmp_enc_info *enc_info); | ||
16 | 60 | ||
17 | #endif | 61 | #endif |
18 | 62 |
@@ -7,75 +7,5 @@ | @@ -7,75 +7,5 @@ | ||
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 | -//c1 0是红外权柄 1是光学权柄 2为空权柄 | ||
11 | -static void *RtkMmpEncHandle[3] = { NULL }; // 所有元素都被初始化为NULL | ||
12 | -static void *RtkMmpDecHandle[3] = { NULL }; // 所有元素都被初始化为NULL | 10 | +#include "./RTK_mmp.h" |
13 | 11 | ||
14 | -/* | ||
15 | - rtk模块获取编码权柄 | ||
16 | - 属于参数即可权柄 | ||
17 | - | ||
18 | -*/ | ||
19 | -void *JZsdk_RtkMmpGetEncHandle(int CameraIndex) | ||
20 | -{ | ||
21 | - return RtkMmpEncHandle[CameraIndex]; | ||
22 | -} | ||
23 | - | ||
24 | - | ||
25 | - | ||
26 | -/* | ||
27 | - rtk模块获取解码权柄 | ||
28 | - 属于参数即可权柄 | ||
29 | - | ||
30 | -*/ | ||
31 | -void *JZsdk_RtkMmpGetDecHandle(int CameraIndex) | ||
32 | -{ | ||
33 | - return RtkMmpDecHandle[CameraIndex]; | ||
34 | -} | ||
35 | - | ||
36 | -/********* | ||
37 | - * | ||
38 | - * 返回dec权柄地址 | ||
39 | - * | ||
40 | - * | ||
41 | - * ***/ | ||
42 | -void **JZsdk_RtkMmpGetDecHandleAddr(int CameraIndex) | ||
43 | -{ | ||
44 | - return &(RtkMmpDecHandle[CameraIndex]); | ||
45 | -} | ||
46 | - | ||
47 | -/********* | ||
48 | - * | ||
49 | - * 返回enc权柄地址 | ||
50 | - * | ||
51 | - * | ||
52 | - * ***/ | ||
53 | -void **JZsdk_RtkMmpGetEncHandleAddr(int CameraIndex) | ||
54 | -{ | ||
55 | - return &(RtkMmpEncHandle[CameraIndex]); | ||
56 | -} | ||
57 | - | ||
58 | -//昆腾相机设置下一帧为I帧 | ||
59 | -T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex) | ||
60 | -{ | ||
61 | -#ifdef RTK_MPP_STATUS_ON | ||
62 | - if (CameraIndex == 0) | ||
63 | - { | ||
64 | - RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(0)); | ||
65 | - } | ||
66 | - else if(CameraIndex == 1) | ||
67 | - { | ||
68 | - RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(1)); | ||
69 | - } | ||
70 | - else if(CameraIndex == 2) | ||
71 | - { | ||
72 | - RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(2)); | ||
73 | - } | ||
74 | - else | ||
75 | - { | ||
76 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
77 | - } | ||
78 | - | ||
79 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
80 | -#endif | ||
81 | -} |
@@ -38,14 +38,6 @@ T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264(unsigned char *RawData, int data_ | @@ -38,14 +38,6 @@ T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264(unsigned char *RawData, int data_ | ||
38 | T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264_Return(void **index, unsigned char *RawData, int *data_len); | 38 | T_JZsdkReturnCode JZsdk_RTKMMP_RawData_to_h264_Return(void **index, unsigned char *RawData, int *data_len); |
39 | 39 | ||
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); | 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); |
41 | -T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex); | ||
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 | - | ||
49 | 41 | ||
50 | 42 | ||
51 | #ifdef __cplusplus | 43 | #ifdef __cplusplus |
1 | +/** | ||
2 | + ******************************************************************** | ||
3 | + * @file RTK_mmp_LibInclude.h | ||
4 | + * | ||
5 | + ********************************************************************* | ||
6 | + */ | ||
7 | + | ||
8 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
9 | +#ifndef RTK_MMP_LIBINCLUDE_H | ||
10 | +#define RTK_MMP_LIBINCLUDE_H | ||
11 | + | ||
12 | +/* Includes ------------------------------------------------------------------*/ | ||
13 | +#ifdef RTK_MPP_STATUS_ON | ||
14 | + #include "rockchip/mpp_common.h" //这个.h能在mpp的源码中找到 | ||
15 | + #include "rockchip/mpp_packet.h" | ||
16 | + #include "rockchip/rk_mpi.h" | ||
17 | + | ||
18 | + #include "rockchip/mpp_env.h" //这个.h能在mpp的源码中找到 | ||
19 | + #include "rockchip/rk_venc_rc.h" | ||
20 | + | ||
21 | +#endif | ||
22 | + | ||
23 | + | ||
24 | +#ifdef __cplusplus | ||
25 | +extern "C" { | ||
26 | +#endif | ||
27 | + | ||
28 | + | ||
29 | + | ||
30 | +/* Exported constants --------------------------------------------------------*/ | ||
31 | +/* 常亮定义*/ | ||
32 | + | ||
33 | + | ||
34 | +/* Exported types ------------------------------------------------------------*/ | ||
35 | + | ||
36 | +/* Exported functions --------------------------------------------------------*/ | ||
37 | + | ||
38 | + | ||
39 | +#ifdef __cplusplus | ||
40 | +} | ||
41 | +#endif | ||
42 | + | ||
43 | +#endif |
@@ -30,6 +30,8 @@ | @@ -30,6 +30,8 @@ | ||
30 | #include "../MultProc/RTK_mmp/RTK_mmp.h" | 30 | #include "../MultProc/RTK_mmp/RTK_mmp.h" |
31 | 31 | ||
32 | 32 | ||
33 | +static T_JZsdkVideoMgmtHandler *g_VideoMgmtHandler = NULL; | ||
34 | + | ||
33 | JZ_VideoStreamUseStatus g_VideoStreamDealStatus = VIDEO_STREAM_IDLE; //视频流的处理状态 | 35 | JZ_VideoStreamUseStatus g_VideoStreamDealStatus = VIDEO_STREAM_IDLE; //视频流的处理状态 |
34 | static int g_VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 | 36 | static int g_VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 |
35 | static int g_VideoFreeze_PlayFlag = JZ_FLAGCODE_OFF; //视频流冻结功能的传输flag | 37 | static int g_VideoFreeze_PlayFlag = JZ_FLAGCODE_OFF; //视频流冻结功能的传输flag |
@@ -132,26 +134,15 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_RecordPlay(int status) | @@ -132,26 +134,15 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_RecordPlay(int status) | ||
132 | * *********************************/ | 134 | * *********************************/ |
133 | T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | 135 | T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() |
134 | { | 136 | { |
135 | -#if DEVICE_VERSION == JZ_C1 | ||
136 | - switch (g_VideoStreamFlowIndexNum) | 137 | + |
138 | + T_JZsdkVideoMgmtHandler *VideoMgmtHandler = JZsdk_GetVideoMgmtHandler(); | ||
139 | + if (VideoMgmtHandler == NULL) | ||
137 | { | 140 | { |
138 | - case VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST: | ||
139 | - { | ||
140 | - JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(0); | ||
141 | - } | ||
142 | - break; | 141 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
142 | + } | ||
143 | 143 | ||
144 | - case VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND: | ||
145 | - { | ||
146 | - JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(1); | ||
147 | - } | ||
148 | - break; | ||
149 | 144 | ||
150 | - default: | ||
151 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
152 | - break; | ||
153 | - } | ||
154 | -#endif | 145 | + VideoMgmtHandler->SetNextFrame_IDR(g_VideoStreamFlowIndexNum); |
155 | 146 | ||
156 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 147 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
157 | } | 148 | } |
@@ -404,6 +395,29 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | @@ -404,6 +395,29 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | ||
404 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 395 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
405 | } | 396 | } |
406 | 397 | ||
398 | + | ||
399 | + | ||
400 | + | ||
401 | + | ||
402 | + | ||
403 | +static T_JZsdkReturnCode JZsdk_RegVideoMgmtHandler(const T_JZsdkVideoMgmtHandler *VideoMgmtHandler) | ||
404 | +{ | ||
405 | + g_VideoMgmtHandler = malloc(sizeof(T_JZsdkVideoMgmtHandler)); | ||
406 | + if (VideoMgmtHandler == NULL) { | ||
407 | + return JZ_ERROR_SYSTEM_MODULE_CODE_MEMORY_ALLOC_FAILED; // 处理内存分配失败的情况 | ||
408 | + } | ||
409 | + | ||
410 | + memcpy(g_VideoMgmtHandler, VideoMgmtHandler, sizeof(T_JZsdkVideoMgmtHandler)); | ||
411 | + | ||
412 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
413 | +} | ||
414 | + | ||
415 | +T_JZsdkVideoMgmtHandler *JZsdk_GetVideoMgmtHandler(void) | ||
416 | +{ | ||
417 | + return g_VideoMgmtHandler; // 返回已注册的处理器 | ||
418 | +} | ||
419 | + | ||
420 | + | ||
407 | /******************* | 421 | /******************* |
408 | * | 422 | * |
409 | * | 423 | * |
@@ -412,10 +426,13 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | @@ -412,10 +426,13 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | ||
412 | * | 426 | * |
413 | * | 427 | * |
414 | * ***********************/ | 428 | * ***********************/ |
415 | -T_JZsdkReturnCode VideoMgmt_Init(void) | 429 | +T_JZsdkReturnCode VideoMgmt_Init(T_JZsdkVideoMgmtHandler handler) |
416 | { | 430 | { |
417 | T_JZsdkReturnCode ret; | 431 | T_JZsdkReturnCode ret; |
418 | 432 | ||
433 | + //注册视频流处理函数 | ||
434 | + ret = JZsdk_RegVideoMgmtHandler(&handler); | ||
435 | + | ||
419 | //初始化转码模块 | 436 | //初始化转码模块 |
420 | VideoStreamTransCode_Init(); | 437 | VideoStreamTransCode_Init(); |
421 | 438 |
@@ -21,11 +21,19 @@ extern "C" { | @@ -21,11 +21,19 @@ extern "C" { | ||
21 | /* Exported constants --------------------------------------------------------*/ | 21 | /* Exported constants --------------------------------------------------------*/ |
22 | /* 常亮定义*/ | 22 | /* 常亮定义*/ |
23 | 23 | ||
24 | +typedef struct T_JZsdkVideoMgmtHandler | ||
25 | +{ | ||
26 | + T_JZsdkReturnCode (*SetNextFrame_IDR)(unsigned int Index); | ||
27 | + | ||
28 | +}T_JZsdkVideoMgmtHandler; | ||
24 | 29 | ||
25 | /* Exported types ------------------------------------------------------------*/ | 30 | /* Exported types ------------------------------------------------------------*/ |
26 | 31 | ||
27 | /* Exported functions --------------------------------------------------------*/ | 32 | /* Exported functions --------------------------------------------------------*/ |
28 | -T_JZsdkReturnCode VideoMgmt_Init(void); | 33 | +T_JZsdkReturnCode VideoMgmt_Init(T_JZsdkVideoMgmtHandler handler); |
34 | +T_JZsdkVideoMgmtHandler *JZsdk_GetVideoMgmtHandler(void); | ||
35 | + | ||
36 | + | ||
29 | T_JZsdkReturnCode VideoMgmt_init_buffer(void **index); | 37 | T_JZsdkReturnCode VideoMgmt_init_buffer(void **index); |
30 | T_JZsdkReturnCode VideoMgmt_VideoBuffer_Deinit(void **index); | 38 | T_JZsdkReturnCode VideoMgmt_VideoBuffer_Deinit(void **index); |
31 | T_JZsdkReturnCode VideoMgmt_write_data(void **index, unsigned char *data, unsigned int data_len); | 39 | T_JZsdkReturnCode VideoMgmt_write_data(void **index, unsigned char *data, unsigned int data_len); |
@@ -467,7 +467,8 @@ T_JZsdkReturnCode UIcontrol_PausePlayAudio(int DeviceName) | @@ -467,7 +467,8 @@ T_JZsdkReturnCode UIcontrol_PausePlayAudio(int DeviceName) | ||
467 | //如果psdk接口已经使用 | 467 | //如果psdk接口已经使用 |
468 | if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK ) | 468 | if ( (JZsdk_HalPort_UseFlag(DEVICE_PSDK) == JZ_FLAGCODE_ON) && DeviceName != DEVICE_PSDK ) |
469 | { | 469 | { |
470 | - JZsdk_Psdk_UI_io_Reply_PlayStatus(PlayStatus); | 470 | + //停止固定显示关闭 |
471 | + JZsdk_Psdk_UI_io_Reply_PlayStatus(JZ_FLAGCODE_OFF); | ||
471 | } | 472 | } |
472 | 473 | ||
473 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 474 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
@@ -168,6 +168,8 @@ T_JZsdkReturnCode JZSDK_WidgetMgMT_ControlInit() | @@ -168,6 +168,8 @@ T_JZsdkReturnCode JZSDK_WidgetMgMT_ControlInit() | ||
168 | JZSDK_LOG_ERROR("创建控件写入线程失败!"); | 168 | JZSDK_LOG_ERROR("创建控件写入线程失败!"); |
169 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 169 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
170 | } | 170 | } |
171 | + | ||
172 | + JZSDK_LOG_INFO("控件控制初始化成功"); | ||
171 | } | 173 | } |
172 | 174 | ||
173 | 175 | ||
@@ -179,7 +181,7 @@ T_JZsdkReturnCode JZSDK_WidgetMgMT_ControlInit() | @@ -179,7 +181,7 @@ T_JZsdkReturnCode JZSDK_WidgetMgMT_ControlInit() | ||
179 | * ******/ | 181 | * ******/ |
180 | T_JZsdkReturnCode JZSDK_WidgetMgMT_ConrtrolInputTask(int task_inscode, int value) | 182 | T_JZsdkReturnCode JZSDK_WidgetMgMT_ConrtrolInputTask(int task_inscode, int value) |
181 | { | 183 | { |
182 | - //如果输入的任务是关闭音频,就取消所有的上下曲操作,并重置数据池 | 184 | + //如果输入的任务是关闭/继续音频,就取消所有的上下曲操作,并重置数据池 |
183 | if (task_inscode == JZSDK_WIDGET_PLAYANDSTOP) | 185 | if (task_inscode == JZSDK_WIDGET_PLAYANDSTOP) |
184 | { | 186 | { |
185 | WidgetControl_WriteDataClear(); | 187 | WidgetControl_WriteDataClear(); |
@@ -469,12 +469,8 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -469,12 +469,8 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
469 | case 2: // 播放\暂停 value为1 是三角控件 暂停 所以要去取反 | 469 | case 2: // 播放\暂停 value为1 是三角控件 暂停 所以要去取反 |
470 | { | 470 | { |
471 | value = !value; | 471 | value = !value; |
472 | - //如果为暂停 | ||
473 | - if (value == 0) | ||
474 | - { | ||
475 | - JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PLAYANDSTOP, value); | ||
476 | - } | ||
477 | - | 472 | + JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_PLAYANDSTOP, value); |
473 | + | ||
478 | break; | 474 | break; |
479 | } | 475 | } |
480 | 476 |
1 | # cmake 最低版本要求 第三行名字不能动 | 1 | # cmake 最低版本要求 第三行名字不能动 |
2 | cmake_minimum_required(VERSION 2.8) | 2 | cmake_minimum_required(VERSION 2.8) |
3 | -project(JZ_U3S) | 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线程库,以支持多线程程序。 |
@@ -12,7 +12,6 @@ project(JZ_U3S) | @@ -12,7 +12,6 @@ project(JZ_U3S) | ||
12 | set(CMAKE_EXE_LINKER_FLAGS "-pthread") | 12 | set(CMAKE_EXE_LINKER_FLAGS "-pthread") |
13 | 13 | ||
14 | # 设置设备类型以加载主要功能模块 | 14 | # 设置设备类型以加载主要功能模块 |
15 | -set(DEVICE_TYPE MEGAPHONE) | ||
16 | #预留行 | 15 | #预留行 |
17 | #预留行 | 16 | #预留行 |
18 | #预留行 | 17 | #预留行 |
@@ -21,7 +20,8 @@ set(DEVICE_TYPE MEGAPHONE) | @@ -21,7 +20,8 @@ set(DEVICE_TYPE MEGAPHONE) | ||
21 | #预留行 | 20 | #预留行 |
22 | #预留行 | 21 | #预留行 |
23 | #预留行 | 22 | #预留行 |
24 | -set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 23 | +#预留行 |
24 | +#预留行 | ||
25 | #预留行 | 25 | #预留行 |
26 | set(ROOT_DIRS "${CMAKE_CURRENT_LIST_DIR}/../../../../../../../") | 26 | set(ROOT_DIRS "${CMAKE_CURRENT_LIST_DIR}/../../../../../../../") |
27 | 27 |
@@ -12,7 +12,7 @@ set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++") | @@ -12,7 +12,7 @@ set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++") | ||
12 | set(CMAKE_EXE_LINKER_FLAGS "-pthread") | 12 | set(CMAKE_EXE_LINKER_FLAGS "-pthread") |
13 | 13 | ||
14 | #预留行 | 14 | #预留行 |
15 | -set(DEVICE_TYPE MEGAPHONE) | 15 | +#预留行 |
16 | #预留行 | 16 | #预留行 |
17 | #预留行 | 17 | #预留行 |
18 | #预留行 | 18 | #预留行 |
-
请 注册 或 登录 后发表评论