作者 ookk303

配置文件修改

正在显示 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 +}
  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
  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 #预留行