正在显示
45 个修改的文件
包含
1344 行增加
和
423 行删除
@@ -64,7 +64,15 @@ | @@ -64,7 +64,15 @@ | ||
64 | "rtk_mmp_enc.h": "c", | 64 | "rtk_mmp_enc.h": "c", |
65 | "videostreamtranscode.h": "c", | 65 | "videostreamtranscode.h": "c", |
66 | "time.h": "c", | 66 | "time.h": "c", |
67 | - "cam_framecatch.h": "c" | 67 | + "cam_framecatch.h": "c", |
68 | + "audiostreamdeal.h": "c", | ||
69 | + "ff_statement.h": "c", | ||
70 | + "configparams.h": "c", | ||
71 | + "im2d.hpp": "c", | ||
72 | + "rk_rga.h": "c", | ||
73 | + "rgautils.h": "c", | ||
74 | + "im2d_type.h": "c", | ||
75 | + "im2d.h": "c" | ||
68 | }, | 76 | }, |
69 | "Codegeex.GenerationPreference": "automatic", | 77 | "Codegeex.GenerationPreference": "automatic", |
70 | "C_Cpp.dimInactiveRegions": false | 78 | "C_Cpp.dimInactiveRegions": false |
@@ -7,7 +7,8 @@ set(IFLAY_TTS_MODULE VERSION_SWITCH_OFF) | @@ -7,7 +7,8 @@ set(IFLAY_TTS_MODULE VERSION_SWITCH_OFF) | ||
7 | set(ESPEAK_TTS_MODULE VERSION_SWITCH_OFF) | 7 | set(ESPEAK_TTS_MODULE VERSION_SWITCH_OFF) |
8 | set(ALSALIB_MODULE VERSION_SWITCH_OFF) | 8 | set(ALSALIB_MODULE VERSION_SWITCH_OFF) |
9 | set(OPUS_MODULE VERSION_SWITCH_OFF) | 9 | set(OPUS_MODULE VERSION_SWITCH_OFF) |
10 | -set(LIB_RTK_MMP VERSION_SWITCH_OFF) | 10 | +set(LIB_RK_MMP VERSION_SWITCH_OFF) |
11 | +set(LIB_RK_RGB VERSION_SWITCH_OFF) | ||
11 | set(LIB_USB VERSION_SWITCH_OFF) | 12 | set(LIB_USB VERSION_SWITCH_OFF) |
12 | set(LIB_KT_IRC VERSION_SWITCH_OFF) | 13 | set(LIB_KT_IRC VERSION_SWITCH_OFF) |
13 | 14 | ||
@@ -93,8 +94,11 @@ if(${MEDIA_PROC_MODULE} STREQUAL "VERSION_SWITCH_ON") | @@ -93,8 +94,11 @@ if(${MEDIA_PROC_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
93 | message("加载红外相机模块") | 94 | message("加载红外相机模块") |
94 | add_definitions(-DMACRO_IRC_MODULE) | 95 | add_definitions(-DMACRO_IRC_MODULE) |
95 | 96 | ||
96 | - message("加载RTK模块") | ||
97 | - set(LIB_RTK_MMP VERSION_SWITCH_ON) | 97 | + message("加载RK MMP模块") |
98 | + set(LIB_RK_MMP VERSION_SWITCH_ON) | ||
99 | + | ||
100 | + message("加载RK RGA模块") | ||
101 | + set(LIB_RK_RGB VERSION_SWITCH_ON) | ||
98 | 102 | ||
99 | message("加载USB模块") | 103 | message("加载USB模块") |
100 | set(LIB_USB VERSION_SWITCH_ON) | 104 | set(LIB_USB VERSION_SWITCH_ON) |
@@ -130,16 +130,28 @@ if(${FFMPEG_MODULE} STREQUAL "VERSION_SWITCH_ON") | @@ -130,16 +130,28 @@ if(${FFMPEG_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
130 | endif() | 130 | endif() |
131 | 131 | ||
132 | 132 | ||
133 | -#rtk_mmp库 | ||
134 | -if(${LIB_RTK_MMP} STREQUAL "VERSION_SWITCH_ON") | ||
135 | - message("RTK_MMP库已加载\n") | ||
136 | - add_definitions(-DMACRO_RTK_MPP_MODULE) #加载usb模块 | 133 | +#RK_mmp库 |
134 | +if(${LIB_RK_MMP} STREQUAL "VERSION_SWITCH_ON") | ||
135 | + message("RK_MMP库已加载\n") | ||
136 | + add_definitions(-DMACRO_RK_MPP_MODULE) #加载模块 | ||
137 | 137 | ||
138 | - include_directories(${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/include) | 138 | + include_directories(${ROOT_DIRS}/ThirdParty/RK_mmp/aarch64-none-linux-gnu/include) |
139 | target_link_libraries( | 139 | target_link_libraries( |
140 | ${PROJECT_NAME} | 140 | ${PROJECT_NAME} |
141 | - ${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/lib/librockchip_mpp.so.0 | ||
142 | - ${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/lib/librockchip_vpu.so.0 | 141 | + ${ROOT_DIRS}/ThirdParty/RK_mmp/aarch64-none-linux-gnu/lib/librockchip_mpp.so.0 |
142 | + ${ROOT_DIRS}/ThirdParty/RK_mmp/aarch64-none-linux-gnu/lib/librockchip_vpu.so.0 | ||
143 | + ) | ||
144 | +endif() | ||
145 | + | ||
146 | +#RK_rgb库 | ||
147 | +if(${LIB_RK_RGB} STREQUAL "VERSION_SWITCH_ON") | ||
148 | + message("RK_RGB库已加载\n") | ||
149 | + add_definitions(-DMACRO_RK_RGA_MODULE) #加载模块 | ||
150 | + | ||
151 | + include_directories(${ROOT_DIRS}/ThirdParty/RK_rga/aarch64-none-linux-gnu/include) | ||
152 | + target_link_libraries( | ||
153 | + ${PROJECT_NAME} | ||
154 | + ${ROOT_DIRS}/ThirdParty/RK_rga/aarch64-none-linux-gnu/lib/librga.so | ||
143 | ) | 155 | ) |
144 | endif() | 156 | endif() |
145 | 157 |
@@ -32,7 +32,7 @@ typedef enum JZsdk_Widget_Control | @@ -32,7 +32,7 @@ typedef enum JZsdk_Widget_Control | ||
32 | JZSDK_WIDGET_SHUTTER_SWITCH = 0x0023, //快门开关 | 32 | JZSDK_WIDGET_SHUTTER_SWITCH = 0x0023, //快门开关 |
33 | JZSDK_WIDGET_FREEZE_VIDEO = 0x0024, //冻结视频流 | 33 | JZSDK_WIDGET_FREEZE_VIDEO = 0x0024, //冻结视频流 |
34 | JZSDK_WIDGET_PSEUDO_MODE = 0x0025, //色彩输出模式 | 34 | JZSDK_WIDGET_PSEUDO_MODE = 0x0025, //色彩输出模式 |
35 | - JZSDK_WIDGET_FOCAL_LENGTH = 0x0026, //焦距 | 35 | + JZSDK_WIDGET_ZOOM_SIZE = 0x0026, //焦距 |
36 | JZSDK_WIDGET_SPC_RESET = 0x0027, //spc重置 | 36 | JZSDK_WIDGET_SPC_RESET = 0x0027, //spc重置 |
37 | JZSDK_WIDGET_PSEUDO_COLOR = 0x0028, //伪彩颜色 | 37 | JZSDK_WIDGET_PSEUDO_COLOR = 0x0028, //伪彩颜色 |
38 | JZSDK_WIDGET_CAMERA_CORRECT_MODE = 0x0029, //相机纠正模式 | 38 | JZSDK_WIDGET_CAMERA_CORRECT_MODE = 0x0029, //相机纠正模式 |
@@ -205,6 +205,7 @@ T_JZsdkReturnCode JZsdk_LoggerInit() | @@ -205,6 +205,7 @@ T_JZsdkReturnCode JZsdk_LoggerInit() | ||
205 | char logMessage[256]; | 205 | char logMessage[256]; |
206 | snprintf(logMessage,256,"LOG_FILE:%s\n",LogFileName); | 206 | snprintf(logMessage,256,"LOG_FILE:%s\n",LogFileName); |
207 | fprintf(logFile, "%s", logMessage); | 207 | fprintf(logFile, "%s", logMessage); |
208 | + fflush(logFile); | ||
208 | 209 | ||
209 | //dfclose(logFile); | 210 | //dfclose(logFile); |
210 | 211 | ||
@@ -248,7 +249,7 @@ T_JZsdkReturnCode writeToLogFile(const char *data) | @@ -248,7 +249,7 @@ T_JZsdkReturnCode writeToLogFile(const char *data) | ||
248 | } | 249 | } |
249 | 250 | ||
250 | fprintf(logFile, "%s", data); // 写入新的数据 | 251 | fprintf(logFile, "%s", data); // 写入新的数据 |
251 | - | 252 | + fflush(logFile); |
252 | //fclose(logFile); | 253 | //fclose(logFile); |
253 | 254 | ||
254 | // 解锁 | 255 | // 解锁 |
@@ -279,6 +280,7 @@ T_JZsdkReturnCode HexToLogFile(const char *data) | @@ -279,6 +280,7 @@ T_JZsdkReturnCode HexToLogFile(const char *data) | ||
279 | } | 280 | } |
280 | 281 | ||
281 | fprintf(logFile, "%x ", data[0]); // 写入新的数据 | 282 | fprintf(logFile, "%x ", data[0]); // 写入新的数据 |
283 | + fflush(logFile); | ||
282 | 284 | ||
283 | //fclose(logFile); | 285 | //fclose(logFile); |
284 | 286 |
@@ -48,6 +48,8 @@ extern "C" { | @@ -48,6 +48,8 @@ extern "C" { | ||
48 | #define JZ_MATH_SWAP(a, b) do { typeof(a) temp = (a); (a) = (b); (b) = temp; } while (0) //交换两个变量的值(这个宏使用了一个临时变量,但它仍然是通过宏来完成的): | 48 | #define JZ_MATH_SWAP(a, b) do { typeof(a) temp = (a); (a) = (b); (b) = temp; } while (0) //交换两个变量的值(这个宏使用了一个临时变量,但它仍然是通过宏来完成的): |
49 | 49 | ||
50 | 50 | ||
51 | +#define JZ_ALIGN(x, a) (((x)+(a)-1)&~((a)-1)) //用于将 x 的值对齐到最近的 a 的倍数。这里的对齐是通过加上 a-1 然后使用位运算 &~((a)-1) 来实现的。 | ||
52 | + | ||
51 | #ifdef __cplusplus | 53 | #ifdef __cplusplus |
52 | } | 54 | } |
53 | #endif | 55 | #endif |
@@ -19,7 +19,7 @@ | @@ -19,7 +19,7 @@ | ||
19 | #define MAJOR_VERSION 0x01 | 19 | #define MAJOR_VERSION 0x01 |
20 | #define MINOR_VERSION 0x03 | 20 | #define MINOR_VERSION 0x03 |
21 | #define MODIFY_VERSION 0x09 | 21 | #define MODIFY_VERSION 0x09 |
22 | -#define DEBUG_VERSION 0x05 | 22 | +#define DEBUG_VERSION 0x07 |
23 | 23 | ||
24 | //禁止修改行 滤波方式 | 24 | //禁止修改行 滤波方式 |
25 | #define FILTERING_TYPE HIGH_PASS_FILTERING | 25 | #define FILTERING_TYPE HIGH_PASS_FILTERING |
@@ -74,14 +74,14 @@ | @@ -74,14 +74,14 @@ | ||
74 | #endif | 74 | #endif |
75 | 75 | ||
76 | //是否加载RTK_MPP模块 | 76 | //是否加载RTK_MPP模块 |
77 | - #ifdef MACRO_RTK_MPP_MODULE | ||
78 | - #define RTK_MPP_STATUS VERSION_SWITCH_ON | 77 | + #ifdef MACRO_RK_MPP_MODULE |
79 | #define RTK_MPP_STATUS_ON | 78 | #define RTK_MPP_STATUS_ON |
80 | - #else | ||
81 | - #define RTK_MPP_STATUS VERSION_SWITCH_OFF | ||
82 | #endif | 79 | #endif |
83 | 80 | ||
84 | - | 81 | + //是否加载RTK_RGA模块 |
82 | + #ifdef MACRO_RK_RGA_MODULE | ||
83 | + #define RTK_RGA_STATUS_ON | ||
84 | + #endif | ||
85 | 85 | ||
86 | //是否加载WIRINGPI模块 | 86 | //是否加载WIRINGPI模块 |
87 | #ifdef MACRO_WIRINGPI_MODULE | 87 | #ifdef MACRO_WIRINGPI_MODULE |
@@ -113,9 +113,11 @@ | @@ -113,9 +113,11 @@ | ||
113 | #define USB_CONFIG_STATUS VERSION_SWITCH_ON | 113 | #define USB_CONFIG_STATUS VERSION_SWITCH_ON |
114 | 114 | ||
115 | //是否加载RTK_MPP模块 | 115 | //是否加载RTK_MPP模块 |
116 | - #define RTK_MPP_STATUS VERSION_SWITCH_ON | ||
117 | #define RTK_MPP_STATUS_ON | 116 | #define RTK_MPP_STATUS_ON |
118 | 117 | ||
118 | + //是否加载RGA模块 | ||
119 | + #define RTK_RGA_STATUS_ON | ||
120 | + | ||
119 | //是否加载WIRINGPI模块 | 121 | //是否加载WIRINGPI模块 |
120 | #define WIRINGPI_STATUS_ON | 122 | #define WIRINGPI_STATUS_ON |
121 | 123 |
@@ -401,7 +401,7 @@ static int RecvDeal_RealTimeMP2_Limit_transmission(int Port, char *getbuf, int l | @@ -401,7 +401,7 @@ static int RecvDeal_RealTimeMP2_Limit_transmission(int Port, char *getbuf, int l | ||
401 | T_JZsdkReturnCode ret; | 401 | T_JZsdkReturnCode ret; |
402 | 402 | ||
403 | //提取出数据 | 403 | //提取出数据 |
404 | - int DataLen = ((int)getbuf[3] << 8 ) + (int)getbuf[4] - 2 - 9; | 404 | + int DataLen = (((int)getbuf[3] << 8 ) + (int)getbuf[4]) - 9 - 2; |
405 | if (DataLen > 128) | 405 | if (DataLen > 128) |
406 | { | 406 | { |
407 | JZSDK_LOG_ERROR("传输得到的mp2实时数据帧长度超出128上限"); | 407 | JZSDK_LOG_ERROR("传输得到的mp2实时数据帧长度超出128上限"); |
@@ -1065,6 +1065,8 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char | @@ -1065,6 +1065,8 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char | ||
1065 | **********/ | 1065 | **********/ |
1066 | static int RecvDeal_Amplifier_stop(int Port, char *getbuf) | 1066 | static int RecvDeal_Amplifier_stop(int Port, char *getbuf) |
1067 | { | 1067 | { |
1068 | + T_JZsdkReturnCode ret; | ||
1069 | + | ||
1068 | JZSDK_LOG_INFO("%s,强制关闭功放",RecvDeal_GetPortName(Port)); | 1070 | JZSDK_LOG_INFO("%s,强制关闭功放",RecvDeal_GetPortName(Port)); |
1069 | 1071 | ||
1070 | //获取帧的序列号 | 1072 | //获取帧的序列号 |
@@ -1073,7 +1075,15 @@ static int RecvDeal_Amplifier_stop(int Port, char *getbuf) | @@ -1073,7 +1075,15 @@ static int RecvDeal_Amplifier_stop(int Port, char *getbuf) | ||
1073 | int status = JZ_FLAGCODE_OFF; | 1075 | int status = JZ_FLAGCODE_OFF; |
1074 | 1076 | ||
1075 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON | 1077 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON |
1076 | - return Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &status); | 1078 | + |
1079 | + //先关闭播放 | ||
1080 | + ret = UIcontrol_StopPlayAudio(NO_SPECIFIED); | ||
1081 | + if (ret == JZ_ERRORCODE_REALTIMEVOICE_HAS_BEEN_ON) //如果喊话器正处于实时播放,禁止关闭功放操作 | ||
1082 | + { | ||
1083 | + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
1084 | + } | ||
1085 | + | ||
1086 | + Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &status); | ||
1077 | #endif | 1087 | #endif |
1078 | 1088 | ||
1079 | //回复操作成功 | 1089 | //回复操作成功 |
@@ -1088,6 +1098,8 @@ static int RecvDeal_Amplifier_stop(int Port, char *getbuf) | @@ -1088,6 +1098,8 @@ static int RecvDeal_Amplifier_stop(int Port, char *getbuf) | ||
1088 | **********/ | 1098 | **********/ |
1089 | static int RecvDeal_Amplifier_open(int Port, char *getbuf) | 1099 | static int RecvDeal_Amplifier_open(int Port, char *getbuf) |
1090 | { | 1100 | { |
1101 | + T_JZsdkReturnCode ret; | ||
1102 | + | ||
1091 | JZSDK_LOG_INFO("%s,强制开启功放",RecvDeal_GetPortName(Port)); | 1103 | JZSDK_LOG_INFO("%s,强制开启功放",RecvDeal_GetPortName(Port)); |
1092 | 1104 | ||
1093 | //获取帧的序列号 | 1105 | //获取帧的序列号 |
@@ -1096,7 +1108,15 @@ static int RecvDeal_Amplifier_open(int Port, char *getbuf) | @@ -1096,7 +1108,15 @@ static int RecvDeal_Amplifier_open(int Port, char *getbuf) | ||
1096 | int status = JZ_FLAGCODE_ON; | 1108 | int status = JZ_FLAGCODE_ON; |
1097 | 1109 | ||
1098 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON | 1110 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON |
1099 | - return Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &status); | 1111 | + |
1112 | + //先关闭播放 | ||
1113 | + ret = UIcontrol_StopPlayAudio(NO_SPECIFIED); | ||
1114 | + if (ret == JZ_ERRORCODE_REALTIMEVOICE_HAS_BEEN_ON) //如果喊话器正处于实时播放,禁止关闭功放操作 | ||
1115 | + { | ||
1116 | + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
1117 | + } | ||
1118 | + | ||
1119 | + Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &status); | ||
1100 | #endif | 1120 | #endif |
1101 | 1121 | ||
1102 | //回复操作成功 | 1122 | //回复操作成功 |
@@ -1123,12 +1143,13 @@ static int RecvDeal_Amplifier_auto(int Port) | @@ -1123,12 +1143,13 @@ static int RecvDeal_Amplifier_auto(int Port) | ||
1123 | **********/ | 1143 | **********/ |
1124 | static int RecvDeal_SetVolume(int Port, char *getbuf) | 1144 | static int RecvDeal_SetVolume(int Port, char *getbuf) |
1125 | { | 1145 | { |
1126 | - JZSDK_LOG_INFO("%s,调节音量",RecvDeal_GetPortName(Port)); | ||
1127 | - | ||
1128 | //获取帧的序列号 | 1146 | //获取帧的序列号 |
1129 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 1147 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
1130 | 1148 | ||
1131 | int value = (int)getbuf[9]; | 1149 | int value = (int)getbuf[9]; |
1150 | + | ||
1151 | + JZSDK_LOG_INFO("%s,调节音量:%d",RecvDeal_GetPortName(Port),value); | ||
1152 | + | ||
1132 | UIcontrol_SetVolume(Port, value); | 1153 | UIcontrol_SetVolume(Port, value); |
1133 | 1154 | ||
1134 | //回复操作成功 | 1155 | //回复操作成功 |
@@ -3384,9 +3405,9 @@ static int RecvDeal_ObtainGimbalLinkage(int Port, char *getbuf) | @@ -3384,9 +3405,9 @@ static int RecvDeal_ObtainGimbalLinkage(int Port, char *getbuf) | ||
3384 | * | 3405 | * |
3385 | * | 3406 | * |
3386 | **********/ | 3407 | **********/ |
3387 | -static int RecvDeal_FrameErrorReply(int Port, char *getbuf) | 3408 | +static int RecvDeal_FrameErrorReply(int Port, char *getbuf, int len) |
3388 | { | 3409 | { |
3389 | - JZSDK_LOG_INFO("%s,帧指令错误:帧错误或者是帧无对应操作",RecvDeal_GetPortName(Port)); | 3410 | + JZSDK_LOG_INFO("%s,帧指令错误:帧错误或者是帧无对应操作,长度为:%d",RecvDeal_GetPortName(Port),len); |
3390 | 3411 | ||
3391 | //无法正常获取帧的序列号 | 3412 | //无法正常获取帧的序列号 |
3392 | //回复操作失败 | 3413 | //回复操作失败 |
@@ -4024,13 +4045,13 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in | @@ -4024,13 +4045,13 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in | ||
4024 | 4045 | ||
4025 | //帧错误回复操作失败 | 4046 | //帧错误回复操作失败 |
4026 | case JZ_ERROR_SYSTEM_FRAME_ERROR: | 4047 | case JZ_ERROR_SYSTEM_FRAME_ERROR: |
4027 | - RecvDeal_FrameErrorReply(Port,getbuf); | 4048 | + RecvDeal_FrameErrorReply(Port,getbuf,len); |
4028 | return JZ_ERROR_SYSTEM_FRAME_ERROR; | 4049 | return JZ_ERROR_SYSTEM_FRAME_ERROR; |
4029 | break; | 4050 | break; |
4030 | 4051 | ||
4031 | default: | 4052 | default: |
4032 | //无指令,发送操作失败 | 4053 | //无指令,发送操作失败 |
4033 | - RecvDeal_FrameErrorReply(Port,getbuf); | 4054 | + RecvDeal_FrameErrorReply(Port,getbuf,len); |
4034 | return JZ_ERROR_SYSTEM_FRAME_ERROR; | 4055 | return JZ_ERROR_SYSTEM_FRAME_ERROR; |
4035 | break; | 4056 | break; |
4036 | 4057 |
@@ -399,15 +399,15 @@ int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int g | @@ -399,15 +399,15 @@ int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int g | ||
399 | { | 399 | { |
400 | if (Uart_fd == Uart_DEV1_fd) | 400 | if (Uart_fd == Uart_DEV1_fd) |
401 | { | 401 | { |
402 | - JZSDK_LOG_INFO("串口-设备1号,接受到数据+未处理数据的长度len: %d", getbufLen); | 402 | + //JZSDK_LOG_INFO("串口-设备1号,接受到数据+未处理数据的长度len: %d", getbufLen); |
403 | } | 403 | } |
404 | else if (Uart_fd == Uart_DEV2_fd) | 404 | else if (Uart_fd == Uart_DEV2_fd) |
405 | { | 405 | { |
406 | - JZSDK_LOG_INFO("串口-设备2号,接受到数据+未处理数据的长度len: %d", getbufLen); | 406 | + //JZSDK_LOG_INFO("串口-设备2号,接受到数据+未处理数据的长度len: %d", getbufLen); |
407 | } | 407 | } |
408 | else if (Uart_fd == Uart_4G_fd) | 408 | else if (Uart_fd == Uart_4G_fd) |
409 | { | 409 | { |
410 | - JZSDK_LOG_INFO("串口-设备4G,接受到数据+未处理数据的长度len: %d", getbufLen); | 410 | + //JZSDK_LOG_INFO("串口-设备4G,接受到数据+未处理数据的长度len: %d", getbufLen); |
411 | } | 411 | } |
412 | else | 412 | else |
413 | { | 413 | { |
@@ -419,7 +419,7 @@ int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int g | @@ -419,7 +419,7 @@ int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int g | ||
419 | { | 419 | { |
420 | if (Uart_fd == HAL_DATA_TRANSMISSION) | 420 | if (Uart_fd == HAL_DATA_TRANSMISSION) |
421 | { | 421 | { |
422 | - JZSDK_LOG_INFO("hal_data,接受到数据+未处理数据的长度len: %d", getbufLen); | 422 | + //JZSDK_LOG_INFO("hal_data,接受到数据+未处理数据的长度len: %d", getbufLen); |
423 | } | 423 | } |
424 | else | 424 | else |
425 | { | 425 | { |
@@ -549,7 +549,7 @@ int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int g | @@ -549,7 +549,7 @@ int UartDeal_Recv_interface(int type, int Uart_fd , unsigned char *getbuf, int g | ||
549 | HaveReadLen = HaveReadLen + FrameLen; | 549 | HaveReadLen = HaveReadLen + FrameLen; |
550 | HaveDealLen = HaveReadLen; | 550 | HaveDealLen = HaveReadLen; |
551 | 551 | ||
552 | - JZSDK_LOG_INFO("framelen%d read%d [read]:%x get%d",FrameLen ,HaveReadLen, getbuf[HaveReadLen], getbufLen); | 552 | + JZSDK_LOG_INFO("fd:%x f_len%d h_r%d [h_r]:%x get%d", Uart_fd,FrameLen ,HaveReadLen, getbuf[HaveReadLen-1], getbufLen); |
553 | 553 | ||
554 | FrameLen = 0; | 554 | FrameLen = 0; |
555 | FrameFlag = 0; | 555 | FrameFlag = 0; |
@@ -69,6 +69,9 @@ T_JZsdkReturnCode AudioDeal_Init() | @@ -69,6 +69,9 @@ T_JZsdkReturnCode AudioDeal_Init() | ||
69 | AudioDeakInfo_index->FilterInfo = NULL; | 69 | AudioDeakInfo_index->FilterInfo = NULL; |
70 | FF_Filter_Init(AudioDeakInfo_index, 0x00); | 70 | FF_Filter_Init(AudioDeakInfo_index, 0x00); |
71 | 71 | ||
72 | + //初始化mp2音频流 | ||
73 | + File_Stream_deal_Init(AV_CODEC_ID_MP2); | ||
74 | + | ||
72 | Audiodeal_status = JZ_FLAGCODE_ON; | 75 | Audiodeal_status = JZ_FLAGCODE_ON; |
73 | 76 | ||
74 | JZSDK_LOG_INFO("MODULE_AUDIODEL_INIT_COMPLETE"); | 77 | JZSDK_LOG_INFO("MODULE_AUDIODEL_INIT_COMPLETE"); |
@@ -261,6 +264,9 @@ T_JZsdkReturnCode AudioDeal_StopDeal() | @@ -261,6 +264,9 @@ T_JZsdkReturnCode AudioDeal_StopDeal() | ||
261 | //清空alsa里的缓冲区 | 264 | //清空alsa里的缓冲区 |
262 | Alsa_DropPcm(AudioDeakInfo_index); | 265 | Alsa_DropPcm(AudioDeakInfo_index); |
263 | 266 | ||
267 | + //清空mp3音频流 | ||
268 | + Stream_Player_Stop(AudioDeakInfo_index); | ||
269 | + | ||
264 | while (AudioDeakInfo_index->AudioDeal_Alsa_Finish_Flag != JZ_FLAGCODE_OFF) | 270 | while (AudioDeakInfo_index->AudioDeal_Alsa_Finish_Flag != JZ_FLAGCODE_OFF) |
265 | { | 271 | { |
266 | delayMs(1); | 272 | delayMs(1); |
@@ -31,6 +31,8 @@ int PCM_PooL_Interface_PcmData_WithoutReply(struct AudioDealInfo *AD_Info,unsign | @@ -31,6 +31,8 @@ int PCM_PooL_Interface_PcmData_WithoutReply(struct AudioDealInfo *AD_Info,unsign | ||
31 | T_JZsdkReturnCode AudioFile_Stream_Interface_PcmData(struct AudioDealInfo *AD_Info, AVFrame *frame); | 31 | T_JZsdkReturnCode AudioFile_Stream_Interface_PcmData(struct AudioDealInfo *AD_Info, AVFrame *frame); |
32 | T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, unsigned int in_sampleRate, unsigned char *data, int dataSize); | 32 | T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, unsigned int in_sampleRate, unsigned char *data, int dataSize); |
33 | 33 | ||
34 | +T_JZsdkReturnCode File_Stream_deal_Init(enum AVCodecID id); | ||
35 | +T_JZsdkReturnCode Stream_Player_Stop(struct AudioDealInfo *AD_Info); | ||
34 | 36 | ||
35 | #ifdef __cplusplus | 37 | #ifdef __cplusplus |
36 | } | 38 | } |
@@ -21,52 +21,71 @@ static const AVCodec *codec; | @@ -21,52 +21,71 @@ static const AVCodec *codec; | ||
21 | 21 | ||
22 | T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame); | 22 | T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame); |
23 | 23 | ||
24 | -int File_Stream_deal_Init(enum AVCodecID id) | 24 | +T_JZsdkReturnCode File_Stream_deal_Init(enum AVCodecID id) |
25 | { | 25 | { |
26 | + //注册包 | ||
26 | pkt = av_packet_alloc(); | 27 | pkt = av_packet_alloc(); |
27 | if(!pkt) | 28 | if(!pkt) |
28 | { | 29 | { |
29 | JZSDK_LOG_ERROR("av_packet_alloc failed."); | 30 | JZSDK_LOG_ERROR("av_packet_alloc failed."); |
30 | } | 31 | } |
31 | 32 | ||
33 | + //寻找解码器 | ||
32 | codec = avcodec_find_decoder(id); | 34 | codec = avcodec_find_decoder(id); |
33 | if (!codec) { | 35 | if (!codec) { |
34 | JZSDK_LOG_ERROR("Codec not found\n"); | 36 | JZSDK_LOG_ERROR("Codec not found\n"); |
35 | } | 37 | } |
36 | 38 | ||
39 | + //获得裸流的解析器 | ||
37 | parser = av_parser_init(codec->id); | 40 | parser = av_parser_init(codec->id); |
38 | if (!parser) { | 41 | if (!parser) { |
39 | JZSDK_LOG_ERROR("Parser not found\n"); | 42 | JZSDK_LOG_ERROR("Parser not found\n"); |
40 | } | 43 | } |
41 | 44 | ||
45 | + //分配解码上下文 | ||
42 | cdc_ctx = avcodec_alloc_context3(codec); | 46 | cdc_ctx = avcodec_alloc_context3(codec); |
43 | if (!cdc_ctx) { | 47 | if (!cdc_ctx) { |
44 | JZSDK_LOG_ERROR("Could not allocate audio codec context\n"); | 48 | JZSDK_LOG_ERROR("Could not allocate audio codec context\n"); |
45 | } | 49 | } |
46 | 50 | ||
47 | - /* open it */ | 51 | + //将解码器和解码上下文绑定 |
48 | if (avcodec_open2(cdc_ctx, codec, NULL) < 0) | 52 | if (avcodec_open2(cdc_ctx, codec, NULL) < 0) |
49 | { | 53 | { |
50 | JZSDK_LOG_ERROR("Could not open codec\n"); | 54 | JZSDK_LOG_ERROR("Could not open codec\n"); |
51 | } | 55 | } |
52 | 56 | ||
53 | - //如果解码器不存在,初始化解码器 | ||
54 | - if (!decoded_frame) | ||
55 | - { | ||
56 | - if (!(decoded_frame = av_frame_alloc())) | ||
57 | - { | ||
58 | - JZSDK_LOG_ERROR("Could not allocate audio frame\n"); | ||
59 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
60 | - } | ||
61 | - } | 57 | + JZSDK_LOG_INFO("file stream init complete"); |
58 | + | ||
59 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
62 | } | 60 | } |
63 | 61 | ||
64 | //输入mp3的实时数据,以及本次数据的长度 | 62 | //输入mp3的实时数据,以及本次数据的长度 |
65 | T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, unsigned int in_sampleRate, unsigned char *data, int dataSize) | 63 | T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, unsigned int in_sampleRate, unsigned char *data, int dataSize) |
66 | { | 64 | { |
65 | + //JZSDK_LOG_DEBUG("mp3 stream输入 %d 字节数据", dataSize); | ||
66 | + | ||
67 | + //重置重采样器 | ||
68 | + FF_Resample_Reset(AD_Info, in_sampleRate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16); | ||
69 | + | ||
70 | + //检查滤波器 | ||
71 | + FF_Filter_Init(AD_Info, 0x01); | ||
72 | + | ||
73 | + int ret = 0; | ||
74 | + unsigned char *databufPtr = data; | ||
75 | + int databufSize = dataSize; | ||
76 | + | ||
67 | //将数据输入到 | 77 | //将数据输入到 |
68 | - while(dataSize > 0) | 78 | + while(databufSize > 0) |
69 | { | 79 | { |
80 | + //如果解码器不存在,初始化解码器 | ||
81 | + if (!decoded_frame) | ||
82 | + { | ||
83 | + if (!(decoded_frame = av_frame_alloc())) | ||
84 | + { | ||
85 | + JZSDK_LOG_ERROR("Could not allocate audio frame\n"); | ||
86 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
87 | + } | ||
88 | + } | ||
70 | 89 | ||
71 | //检查参数,并将正确的数据输入到pkt中 | 90 | //检查参数,并将正确的数据输入到pkt中 |
72 | //parser 解析器 | 91 | //parser 解析器 |
@@ -74,22 +93,16 @@ T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, un | @@ -74,22 +93,16 @@ T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, un | ||
74 | //pkt输出的数据指针 | 93 | //pkt输出的数据指针 |
75 | //data datasize 输入的数据指针 | 94 | //data datasize 输入的数据指针 |
76 | //pts、dts、pos:时间戳和位置信息,一般可以设置为AV_NOPTS_VALUE和0。 | 95 | //pts、dts、pos:时间戳和位置信息,一般可以设置为AV_NOPTS_VALUE和0。 |
77 | - int ret = av_parser_parse2(parser, cdc_ctx, &pkt->data, &pkt->size, data, dataSize, AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0); | 96 | + ret = av_parser_parse2(parser, cdc_ctx, &pkt->data, &pkt->size, databufPtr, databufSize, AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0); |
78 | if (ret < 0) { | 97 | if (ret < 0) { |
79 | printf("Error while parsing\n"); | 98 | printf("Error while parsing\n"); |
80 | - return -1; | 99 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
81 | } | 100 | } |
82 | - | ||
83 | - //重置重采样器 | ||
84 | - FF_Resample_Reset(AD_Info, in_sampleRate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16); | ||
85 | - | ||
86 | - //检查滤波器 | ||
87 | - FF_Filter_Init(AD_Info, 0x01); | ||
88 | 101 | ||
89 | //数据指针 往后一个解析长度 | 102 | //数据指针 往后一个解析长度 |
90 | //长度指针 减少一个被解析数据的长度 | 103 | //长度指针 减少一个被解析数据的长度 |
91 | - data += ret; | ||
92 | - dataSize -= ret; | 104 | + databufPtr += ret; |
105 | + databufSize -= ret; | ||
93 | 106 | ||
94 | //如果输出有长度 解码输出的数据 | 107 | //如果输出有长度 解码输出的数据 |
95 | if (pkt->size > 0) | 108 | if (pkt->size > 0) |
@@ -97,6 +110,8 @@ T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, un | @@ -97,6 +110,8 @@ T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, un | ||
97 | Stream_Player_decode(AD_Info, cdc_ctx, pkt, decoded_frame); | 110 | Stream_Player_decode(AD_Info, cdc_ctx, pkt, decoded_frame); |
98 | } | 111 | } |
99 | } | 112 | } |
113 | + | ||
114 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
100 | } | 115 | } |
101 | 116 | ||
102 | 117 | ||
@@ -108,7 +123,13 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | @@ -108,7 +123,13 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | ||
108 | 123 | ||
109 | //发送数据包给解码器解码,已将数据解码为pcm原始数据 | 124 | //发送数据包给解码器解码,已将数据解码为pcm原始数据 |
110 | ret = avcodec_send_packet(dec_ctx, pkt); | 125 | ret = avcodec_send_packet(dec_ctx, pkt); |
111 | - if (ret < 0) | 126 | + if (ret == AVERROR(EAGAIN)) |
127 | + { | ||
128 | + char errbuf[128]; | ||
129 | + av_strerror(ret, errbuf, sizeof(errbuf)); | ||
130 | + JZSDK_LOG_ERROR("Error while sending a packet to the decoder %s",errbuf); | ||
131 | + } | ||
132 | + else if (ret < 0) | ||
112 | { | 133 | { |
113 | JZSDK_LOG_ERROR("Error submitting the packet to the decoder, ret=%d\n",ret); | 134 | JZSDK_LOG_ERROR("Error submitting the packet to the decoder, ret=%d\n",ret); |
114 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 135 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
@@ -120,7 +141,7 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | @@ -120,7 +141,7 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | ||
120 | 141 | ||
121 | /* read all the output frames (in general there may be any number of them */ | 142 | /* read all the output frames (in general there may be any number of them */ |
122 | //读取输出的帧 | 143 | //读取输出的帧 |
123 | - while ( (ret >= 0) && (AD_Info->Flag_AudioDataGenerationImplement == JZ_FLAGCODE_ON) ) | 144 | + while ( (ret >= 0) && AD_Info->AudioDeal_ResampleAndFilter_Execute_Flag == JZ_FLAGCODE_ON) |
124 | { | 145 | { |
125 | //从解码器中读取解码后的音频帧数据 | 146 | //从解码器中读取解码后的音频帧数据 |
126 | ret = avcodec_receive_frame(dec_ctx, frame); | 147 | ret = avcodec_receive_frame(dec_ctx, frame); |
@@ -134,6 +155,8 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | @@ -134,6 +155,8 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | ||
134 | JZSDK_LOG_ERROR("Error during decoding\n"); | 155 | JZSDK_LOG_ERROR("Error during decoding\n"); |
135 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 156 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
136 | } | 157 | } |
158 | + | ||
159 | + //printf("输出了:%d的数据\n",frame->nb_samples); | ||
137 | 160 | ||
138 | int out_nb_samples = 0; | 161 | int out_nb_samples = 0; |
139 | 162 | ||
@@ -149,7 +172,7 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | @@ -149,7 +172,7 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | ||
149 | //将临时帧 放入 均衡滤波器 | 172 | //将临时帧 放入 均衡滤波器 |
150 | FF_Filter_push_frame_to_fliter(AD_Info, temp_frame); | 173 | FF_Filter_push_frame_to_fliter(AD_Info, temp_frame); |
151 | 174 | ||
152 | - while(AD_Info->Flag_AudioDataGenerationImplement == JZ_FLAGCODE_ON) | 175 | + while(AD_Info->AudioDeal_ResampleAndFilter_Execute_Flag == JZ_FLAGCODE_ON) |
153 | { | 176 | { |
154 | //得到滤波器输出的音频帧 eq_frame | 177 | //得到滤波器输出的音频帧 eq_frame |
155 | int fret = FF_Filter_get_frame_from_filter(AD_Info, eq_frame); | 178 | int fret = FF_Filter_get_frame_from_filter(AD_Info, eq_frame); |
@@ -158,6 +181,8 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | @@ -158,6 +181,8 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | ||
158 | break; | 181 | break; |
159 | } | 182 | } |
160 | 183 | ||
184 | + //printf("pcm播放 %d 数据\n",eq_frame->nb_samples); | ||
185 | + | ||
161 | //播放改滤波后的帧 | 186 | //播放改滤波后的帧 |
162 | Pcm_AlsaPlay(AD_Info, (unsigned char*)eq_frame->data[0], eq_frame->nb_samples); | 187 | Pcm_AlsaPlay(AD_Info, (unsigned char*)eq_frame->data[0], eq_frame->nb_samples); |
163 | 188 | ||
@@ -179,4 +204,14 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | @@ -179,4 +204,14 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | ||
179 | //释放掉输出的变量 | 204 | //释放掉输出的变量 |
180 | av_frame_unref(temp_frame); | 205 | av_frame_unref(temp_frame); |
181 | av_frame_unref(eq_frame); | 206 | av_frame_unref(eq_frame); |
207 | + | ||
182 | } | 208 | } |
209 | + | ||
210 | +T_JZsdkReturnCode Stream_Player_Stop(struct AudioDealInfo *AD_Info) | ||
211 | +{ | ||
212 | + pkt->data = NULL; | ||
213 | + pkt->size = 0; | ||
214 | + Stream_Player_decode(AD_Info, cdc_ctx, pkt, decoded_frame); | ||
215 | + | ||
216 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
217 | +} |
@@ -296,13 +296,25 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType) | @@ -296,13 +296,25 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType) | ||
296 | { | 296 | { |
297 | T_JZsdkReturnCode ret; | 297 | T_JZsdkReturnCode ret; |
298 | 298 | ||
299 | - int NewType = FILTER_NORMAL; | 299 | + int NewType = FILTER_NORMAL_AUDIO; |
300 | 300 | ||
301 | //通过g_FilterMode 与 音频内容 得出滤波类型 | 301 | //通过g_FilterMode 与 音频内容 得出滤波类型 |
302 | if (g_FilterMode == 0x00) //默认滤波 | 302 | if (g_FilterMode == 0x00) //默认滤波 |
303 | { | 303 | { |
304 | //无须管音频类型,直接同一个默认滤波器 | 304 | //无须管音频类型,直接同一个默认滤波器 |
305 | - NewType = FILTER_NORMAL; | 305 | + if (AudioType == 0x00) //文本类型 |
306 | + { | ||
307 | + NewType = FILTER_NORMAL_AUDIO; | ||
308 | + } | ||
309 | + else if (AudioType == 0x01) //音频类型 | ||
310 | + { | ||
311 | + NewType = FILTER_NORMAL_TTS; | ||
312 | + } | ||
313 | + else | ||
314 | + { | ||
315 | + JZSDK_LOG_ERROR("错误的音频类型"); | ||
316 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
317 | + } | ||
306 | } | 318 | } |
307 | else if (g_FilterMode == 0x01) //30M滤波 | 319 | else if (g_FilterMode == 0x01) //30M滤波 |
308 | { | 320 | { |
@@ -348,8 +360,12 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType) | @@ -348,8 +360,12 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType) | ||
348 | //初始化滤波器 | 360 | //初始化滤波器 |
349 | switch (NewType) | 361 | switch (NewType) |
350 | { | 362 | { |
351 | - case FILTER_NORMAL: | ||
352 | - ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL); | 363 | + case FILTER_NORMAL_AUDIO: |
364 | + ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL_AUDIO); | ||
365 | + break; | ||
366 | + | ||
367 | + case FILTER_NORMAL_TTS: | ||
368 | + ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL_TTS); | ||
353 | break; | 369 | break; |
354 | 370 | ||
355 | case FILTER_NORMAL_M30_TTS: | 371 | case FILTER_NORMAL_M30_TTS: |
@@ -361,7 +377,7 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType) | @@ -361,7 +377,7 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType) | ||
361 | break; | 377 | break; |
362 | 378 | ||
363 | default: | 379 | default: |
364 | - ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL); | 380 | + ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL_AUDIO); |
365 | break; | 381 | break; |
366 | } | 382 | } |
367 | 383 |
@@ -12,7 +12,7 @@ | @@ -12,7 +12,7 @@ | ||
12 | 12 | ||
13 | /* Includes ------------------------------------------------------------------*/ | 13 | /* Includes ------------------------------------------------------------------*/ |
14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
15 | - | 15 | +#include "BaseConfig.h" |
16 | 16 | ||
17 | #ifdef __cplusplus | 17 | #ifdef __cplusplus |
18 | extern "C" { | 18 | extern "C" { |
@@ -46,7 +46,18 @@ extern "C" { | @@ -46,7 +46,18 @@ extern "C" { | ||
46 | equalizer=f=8000:t=q:w=2.0:g=0, \ | 46 | equalizer=f=8000:t=q:w=2.0:g=0, \ |
47 | equalizer=f=16000:t=q:w=2.0:g=0" | 47 | equalizer=f=16000:t=q:w=2.0:g=0" |
48 | 48 | ||
49 | -#define FILTER_FORMAL_3 "equalizer=f=31:t=q:w=2.0:g=-48, \ | 49 | +#define FILTER_FORMAL_3_AUDIO "equalizer=f=31:t=q:w=2.0:g=-48, \ |
50 | + equalizer=f=62:t=q:w=2.0:g=-36, \ | ||
51 | + equalizer=f=125:t=q:w=2.0:g=-30, \ | ||
52 | + equalizer=f=250:t=q:w=2.0:g=-26, \ | ||
53 | + equalizer=f=500:t=q:w=2.0:g=-20, \ | ||
54 | + equalizer=f=1000:t=q:w=2.0:g=-12, \ | ||
55 | + equalizer=f=2000:t=q:w=2.0:g=-8, \ | ||
56 | + equalizer=f=4000:t=q:w=2.0:g=+1, \ | ||
57 | + equalizer=f=8000:t=q:w=2.0:g=+2, \ | ||
58 | + equalizer=f=16000:t=q:w=2.0:g=+2" | ||
59 | + | ||
60 | +#define FILTER_FORMAL_3_TTS "equalizer=f=31:t=q:w=2.0:g=-48, \ | ||
50 | equalizer=f=62:t=q:w=2.0:g=-36, \ | 61 | equalizer=f=62:t=q:w=2.0:g=-36, \ |
51 | equalizer=f=125:t=q:w=2.0:g=-30, \ | 62 | equalizer=f=125:t=q:w=2.0:g=-30, \ |
52 | equalizer=f=250:t=q:w=2.0:g=-26, \ | 63 | equalizer=f=250:t=q:w=2.0:g=-26, \ |
@@ -83,6 +94,21 @@ extern "C" { | @@ -83,6 +94,21 @@ extern "C" { | ||
83 | anequalizer=c0 f=3800 w=1200 g=-22 t=0|c1 f=3800 w=1200 g=-22 t=0, \ | 94 | anequalizer=c0 f=3800 w=1200 g=-22 t=0|c1 f=3800 w=1200 g=-22 t=0, \ |
84 | anequalizer=c0 f=3100 w=600 g=-16 t=0|c1 f=3100 w=600 g=-16 t=0" | 95 | anequalizer=c0 f=3100 w=600 g=-16 t=0|c1 f=3100 w=600 g=-16 t=0" |
85 | 96 | ||
97 | + | ||
98 | +#define FILTER_FORMAL_1_M30_2 "equalizer=f=31:t=q:w=2.0:g=-48, \ | ||
99 | + equalizer=f=62:t=q:w=2.0:g=-36, \ | ||
100 | + equalizer=f=125:t=q:w=2.0:g=-30, \ | ||
101 | + equalizer=f=250:t=q:w=2.0:g=-26, \ | ||
102 | + equalizer=f=500:t=q:w=2.0:g=-20, \ | ||
103 | + equalizer=f=1000:t=q:w=2.0:g=-12, \ | ||
104 | + equalizer=f=2000:t=q:w=2.0:g=-8, \ | ||
105 | + equalizer=f=4000:t=q:w=2.0:g=+1, \ | ||
106 | + equalizer=f=8000:t=q:w=2.0:g=+2, \ | ||
107 | + equalizer=f=16000:t=q:w=2.0:g=+2, \ | ||
108 | + anequalizer=c0 f=4000 w=1400 g=-28 t=0|c1 f=4000 w=1400 g=-28 t=0, \ | ||
109 | + anequalizer=c0 f=3700 w=1400 g=-24 t=0|c1 f=3700 w=1400 g=-24 t=0" | ||
110 | + | ||
111 | + | ||
86 | /*00 35 | 112 | /*00 35 |
87 | 02 37 | 113 | 02 37 |
88 | 05 39 | 114 | 05 39 |
@@ -118,15 +144,31 @@ extern "C" { | @@ -118,15 +144,31 @@ extern "C" { | ||
118 | 144 | ||
119 | 145 | ||
120 | typedef enum FilterList{ | 146 | typedef enum FilterList{ |
121 | - FILTER_NORMAL = 1, | 147 | + FILTER_NORMAL_AUDIO = 1, |
148 | + FILTER_NORMAL_TTS = 2, | ||
122 | FILTER_NORMAL_M30_AUDIO = 5, | 149 | FILTER_NORMAL_M30_AUDIO = 5, |
123 | FILTER_NORMAL_M30_TTS = 6, | 150 | FILTER_NORMAL_M30_TTS = 6, |
124 | }FilterList; | 151 | }FilterList; |
125 | 152 | ||
126 | -#define FILTER_PARAM_NORMAL FILTER_FORMAL_3 | 153 | +//普通音频滤波参数 |
154 | +#define FILTER_PARAM_NORMAL_AUDIO FILTER_FORMAL_3_AUDIO | ||
155 | +//普通TTS滤波参数 | ||
156 | +#define FILTER_PARAM_NORMAL_TTS FILTER_FORMAL_3_TTS | ||
157 | + | ||
158 | + | ||
159 | + | ||
127 | #define FILTER_PARAM_M30_TTS FILTER_FORMAL_1_M30_TTS | 160 | #define FILTER_PARAM_M30_TTS FILTER_FORMAL_1_M30_TTS |
161 | + | ||
162 | +//h10t的滤波器跟其他的不一样,所以单独定义 | ||
163 | +#if DEVICE_VERSION == JZ_H10T | ||
164 | + | ||
165 | +#define FILTER_PARAM_M30_AUDIO FILTER_FORMAL_1_M30_2 | ||
166 | + | ||
167 | +#else | ||
168 | + | ||
128 | #define FILTER_PARAM_M30_AUDIO FILTER_FORMAL_1_M30_1 | 169 | #define FILTER_PARAM_M30_AUDIO FILTER_FORMAL_1_M30_1 |
129 | 170 | ||
171 | +#endif | ||
130 | /* Exported types ------------------------------------------------------------*/ | 172 | /* Exported types ------------------------------------------------------------*/ |
131 | 173 | ||
132 | /* Exported functions --------------------------------------------------------*/ | 174 | /* Exported functions --------------------------------------------------------*/ |
@@ -6,7 +6,6 @@ | @@ -6,7 +6,6 @@ | ||
6 | #include <time.h> | 6 | #include <time.h> |
7 | #include <unistd.h> | 7 | #include <unistd.h> |
8 | 8 | ||
9 | - | ||
10 | #include "JZsdkLib.h" | 9 | #include "JZsdkLib.h" |
11 | #include "BaseConfig.h" | 10 | #include "BaseConfig.h" |
12 | #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" | 11 | #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" |
@@ -18,6 +17,33 @@ | @@ -18,6 +17,33 @@ | ||
18 | #include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h" | 17 | #include "MediaProc/MultProc/RTK_mmp/RTK_mmp.h" |
19 | #include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h" | 18 | #include "MediaProc/MultProc/RTK_mmp/Dec/RTK_mmp_dec.h" |
20 | #include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h" | 19 | #include "MediaProc/MultProc/RTK_mmp/Enc/RTK_mmp_enc.h" |
20 | +#include "MediaProc/Camera/Camera.h" | ||
21 | + | ||
22 | +#endif | ||
23 | + | ||
24 | +#ifdef RTK_RGA_STATUS_ON | ||
25 | + | ||
26 | +#include "MediaProc/RgaProc/RK_Rga/RK_Rga.h" | ||
27 | + | ||
28 | +//c1的rga结构体 | ||
29 | +typedef struct C1_RgaInfo | ||
30 | +{ | ||
31 | + //源图像 | ||
32 | + RK_RgaImage *src_img; | ||
33 | + | ||
34 | + //裁剪图像 | ||
35 | + RK_RgaImage *corp_img; | ||
36 | + | ||
37 | + //目标图像 | ||
38 | + RK_RgaImage *dst_img; | ||
39 | + | ||
40 | + //放大倍数 | ||
41 | + int scale; | ||
42 | + | ||
43 | +}C1_RgaInfo; | ||
44 | + | ||
45 | +static C1_RgaInfo *g_C1_RgaIrcInfo = NULL; | ||
46 | +static C1_RgaInfo *g_C1_RgaOptInfo = NULL; | ||
21 | 47 | ||
22 | #endif | 48 | #endif |
23 | 49 | ||
@@ -45,6 +71,10 @@ static unsigned char FrameBuffer[FIRST_HEIGHT * FIRST_WIDTH *2]; //用于存储 | @@ -45,6 +71,10 @@ static unsigned char FrameBuffer[FIRST_HEIGHT * FIRST_WIDTH *2]; //用于存储 | ||
45 | static unsigned int FrameBufferLen = 0; //用于存储帧数据的长度 | 71 | static unsigned int FrameBufferLen = 0; //用于存储帧数据的长度 |
46 | static FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; | 72 | static FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; |
47 | 73 | ||
74 | +#ifdef RTK_RGA_STATUS_ON | ||
75 | +static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size); | ||
76 | +static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo **rgaInfo, int dst_width, int dst_height, int dst_format); | ||
77 | +#endif | ||
48 | 78 | ||
49 | //数据推送函数 | 79 | //数据推送函数 |
50 | static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, unsigned int data_len) | 80 | static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, unsigned int data_len) |
@@ -74,12 +104,14 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | @@ -74,12 +104,14 @@ static T_JZsdkReturnCode JZC1_PushFrame(int CameraIndex, unsigned char* data, un | ||
74 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 104 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
75 | } | 105 | } |
76 | 106 | ||
77 | - | ||
78 | static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len) | 107 | static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len) |
79 | { | 108 | { |
80 | - //JZSDK_LOG_INFO("JZC1_OptDeal"); | 109 | + |
81 | 110 | ||
82 | #ifdef RTK_MPP_STATUS_ON | 111 | #ifdef RTK_MPP_STATUS_ON |
112 | + | ||
113 | + //JZSDK_LOG_INFO("JZC1_OptDeal"); | ||
114 | + | ||
83 | MppFrame yuv_data = NULL; //用于传递yuv数据的地址 | 115 | MppFrame yuv_data = NULL; //用于传递yuv数据的地址 |
84 | MppPacket Packet = NULL; | 116 | MppPacket Packet = NULL; |
85 | 117 | ||
@@ -93,6 +125,68 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | @@ -93,6 +125,68 @@ static T_JZsdkReturnCode JZC1_OptDeal(unsigned char *data, unsigned int data_len | ||
93 | 125 | ||
94 | // JZSDK_LOG_INFO("w:%d h:%d hor:%d ver:%d",width,height,h_stride,v_stride); | 126 | // JZSDK_LOG_INFO("w:%d h:%d hor:%d ver:%d",width,height,h_stride,v_stride); |
95 | 127 | ||
128 | + //光学数据缩放 | ||
129 | + int resize = JZ_FLAGCODE_OFF; | ||
130 | + Camera_param(JZ_FLAGCODE_GET, CAMERA_RESIZE, &resize); | ||
131 | + | ||
132 | + //将size转化为倍数 | ||
133 | + int ZoomRatio = 0; | ||
134 | + switch (resize) | ||
135 | + { | ||
136 | + case 0: | ||
137 | + ZoomRatio = JZ_FLAGCODE_OFF; | ||
138 | + break; | ||
139 | + | ||
140 | + case 1: | ||
141 | + ZoomRatio = 2; | ||
142 | + break; | ||
143 | + | ||
144 | + case 2: | ||
145 | + ZoomRatio = 4; | ||
146 | + break; | ||
147 | + | ||
148 | + case 3: | ||
149 | + ZoomRatio = 8; | ||
150 | + break; | ||
151 | + | ||
152 | + default: | ||
153 | + ZoomRatio = JZ_FLAGCODE_OFF; | ||
154 | + break; | ||
155 | + } | ||
156 | + | ||
157 | + | ||
158 | + if (ZoomRatio != JZ_FLAGCODE_OFF) | ||
159 | + { | ||
160 | + | ||
161 | + MppBuffer temp = mpp_frame_get_buffer(yuv_data); | ||
162 | + RK_U32 h = mpp_frame_get_hor_stride(yuv_data); | ||
163 | + RK_U32 w = mpp_frame_get_ver_stride(yuv_data); | ||
164 | + | ||
165 | + int size = (h * w * 1.5); | ||
166 | + | ||
167 | + unsigned char *temp_data = (unsigned char *)malloc(size); | ||
168 | + memcpy(temp_data, mpp_buffer_get_ptr(temp), size); | ||
169 | + | ||
170 | + JZC1_RgaDeal(g_C1_RgaOptInfo, ZoomRatio, temp_data, &size); | ||
171 | + | ||
172 | + //重新将数据放回 | ||
173 | + memcpy(mpp_buffer_get_ptr(temp), temp_data, size); | ||
174 | + | ||
175 | + free(temp_data); | ||
176 | + | ||
177 | + } | ||
178 | + | ||
179 | + //测试 | ||
180 | + MppBuffer temp = mpp_frame_get_buffer(yuv_data); | ||
181 | + RK_U32 h = mpp_frame_get_hor_stride(yuv_data); | ||
182 | + RK_U32 w = mpp_frame_get_ver_stride(yuv_data); | ||
183 | + | ||
184 | + int size = (h * w * 1.5); | ||
185 | + | ||
186 | + unsigned char *temp_data = (unsigned char *)malloc(size); | ||
187 | + memcpy(temp_data, mpp_buffer_get_ptr(temp), size); | ||
188 | + | ||
189 | + | ||
96 | //将返回的数据输入进编码器 | 190 | //将返回的数据输入进编码器 |
97 | RTK_mmp_enc_yuv_to_h264_byFrame(JZsdk_RtkMmpGetEncHandleAddr(1), yuv_data, &Packet); | 191 | RTK_mmp_enc_yuv_to_h264_byFrame(JZsdk_RtkMmpGetEncHandleAddr(1), yuv_data, &Packet); |
98 | 192 | ||
@@ -150,6 +244,41 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | @@ -150,6 +244,41 @@ static T_JZsdkReturnCode JZC1_IrcDeal(unsigned char *data, unsigned int data_len | ||
150 | //将原始码流数据转换为rgb数据 | 244 | //将原始码流数据转换为rgb数据 |
151 | IRC_FrameDeal(u16Data, u16DataSize, &raw_data, &raw_data_len); | 245 | IRC_FrameDeal(u16Data, u16DataSize, &raw_data, &raw_data_len); |
152 | 246 | ||
247 | + //获取放大的倍数 | ||
248 | + //光学数据缩放 | ||
249 | + int resize = JZ_FLAGCODE_OFF; | ||
250 | + Camera_param(JZ_FLAGCODE_GET, CAMERA_RESIZE, &resize); | ||
251 | + | ||
252 | + //将size转化为倍数 | ||
253 | + int ZoomRatio = 0; | ||
254 | + switch (resize) | ||
255 | + { | ||
256 | + case 0: | ||
257 | + ZoomRatio = JZ_FLAGCODE_OFF; | ||
258 | + break; | ||
259 | + | ||
260 | + case 1: | ||
261 | + ZoomRatio = 2; | ||
262 | + break; | ||
263 | + | ||
264 | + case 2: | ||
265 | + ZoomRatio = 4; | ||
266 | + break; | ||
267 | + | ||
268 | + case 3: | ||
269 | + ZoomRatio = 8; | ||
270 | + break; | ||
271 | + | ||
272 | + default: | ||
273 | + ZoomRatio = 0; | ||
274 | + break; | ||
275 | + } | ||
276 | + | ||
277 | + if (ZoomRatio != JZ_FLAGCODE_OFF) | ||
278 | + { | ||
279 | + JZC1_RgaDeal(g_C1_RgaIrcInfo, ZoomRatio, raw_data, &raw_data_len); | ||
280 | + } | ||
281 | + | ||
153 | //将原始码流数据写入到编码器 并转换为h264 | 282 | //将原始码流数据写入到编码器 并转换为h264 |
154 | unsigned char *h264Data = NULL; | 283 | unsigned char *h264Data = NULL; |
155 | unsigned int h264DataLen = 0; | 284 | unsigned int h264DataLen = 0; |
@@ -436,6 +565,205 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | @@ -436,6 +565,205 @@ static T_JZsdkReturnCode JZsdk_JZC1_Irc_Data_Init() | ||
436 | } | 565 | } |
437 | 566 | ||
438 | 567 | ||
568 | + | ||
569 | +/******************** | ||
570 | + * | ||
571 | + * 混合视频说明 | ||
572 | + * | ||
573 | + * 1920*1088 做处理 并输出为 1920*1080 | ||
574 | + * __________________________________________________________________ | ||
575 | + * |_________________________________ | | ||
576 | + * | |________________________________| | ||
577 | + * | | | | ||
578 | + * | | 1920*1088 /2 960* 544 | | ||
579 | + * | | | | ||
580 | + * | 320*256 拉伸4到 1280*1024 | | | ||
581 | + * | 裁剪出 3/4 到 960 * 768 | | | ||
582 | + * | | | | ||
583 | + * | |________________________________| | ||
584 | + * |_________________________________| | | ||
585 | + * |__________________________________________________________________| | ||
586 | + * | ||
587 | + * ******************/ | ||
588 | + | ||
589 | +static unsigned char *g_MixedIrc_Buffer = NULL; | ||
590 | +static unsigned char *g_MixedOpt_Buffer = NULL; | ||
591 | + | ||
592 | +/****************** | ||
593 | + * | ||
594 | + * 混合视频处理 | ||
595 | + * | ||
596 | + * | ||
597 | + * ********************/ | ||
598 | +static void JZC1_MixedVideo_Deal() | ||
599 | +{ | ||
600 | + | ||
601 | +} | ||
602 | + | ||
603 | + | ||
604 | +static void *MixedVideo_Thread(void *args) | ||
605 | +{ | ||
606 | +#ifdef RTK_RGA_STATUS_ON | ||
607 | + struct timespec now; | ||
608 | + int d_ret = 0; | ||
609 | + | ||
610 | + //获取起始时间 | ||
611 | + struct timespec start_time; | ||
612 | + clock_gettime(CLOCK_MONOTONIC, &start_time); | ||
613 | + long long prev_time = start_time.tv_sec * NSEC_PER_SEC + start_time.tv_nsec; | ||
614 | + | ||
615 | + //设置间隔时间 | ||
616 | + long long period = NSEC_PER_SEC / TARGET_FPS; | ||
617 | + | ||
618 | + //混合视频缓冲区 | ||
619 | + unsigned char * MixedIrc_Buffer = (unsigned char *)malloc((JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2); | ||
620 | + unsigned char * MixedOpt_Buffer = (unsigned char *)malloc(JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2); | ||
621 | + | ||
622 | + //初始化混合视频的rga | ||
623 | + int Irc_width = JZ_ALIGN(FIRST_WIDTH, 16); | ||
624 | + int Irc_height = JZ_ALIGN(FIRST_HEIGHT, 16); | ||
625 | + int IRc_Rect_x = 0; | ||
626 | + int IRc_Rect_y = 0; | ||
627 | + int Irc_Rect_w = JZ_ALIGN(FIRST_WIDTH, 16); | ||
628 | + int Irc_Rect_h = JZ_ALIGN(FIRST_HEIGHT, 16); | ||
629 | + int Irc_Format = RK_FORMAT_YCbCr_420_SP; | ||
630 | + | ||
631 | + int Opt_width = JZ_ALIGN(SECOND_WIDTH, 16); | ||
632 | + int Opt_height = JZ_ALIGN(SECOND_HEIGHT, 16); | ||
633 | + int Opt_Rect_x = 0; | ||
634 | + int Opt_Rect_y = 0; | ||
635 | + int Opt_Rect_w = JZ_ALIGN(SECOND_WIDTH, 16); | ||
636 | + int Opt_Rect_h = JZ_ALIGN(SECOND_HEIGHT, 16); | ||
637 | + int Opt_Format = RK_FORMAT_YCbCr_420_SP; | ||
638 | + | ||
639 | + //红外源图像 | ||
640 | + RK_RgaImage *Irc_SrcImg = NULL; | ||
641 | + RK_Rga_ImageInit(&Irc_SrcImg, Irc_width, Irc_height, Irc_Format, IRc_Rect_x, IRc_Rect_y, Irc_Rect_w, Irc_Rect_h); | ||
642 | + | ||
643 | + //红外放大图像 | ||
644 | + RK_RgaImage *Irc_ResizeImg = NULL; | ||
645 | + RK_Rga_ImageInit(&Irc_ResizeImg, Irc_width*4, Irc_height*4, Irc_Format, IRc_Rect_x, IRc_Rect_y, Irc_Rect_w*4, Irc_Rect_h*4); | ||
646 | + | ||
647 | + //红外裁剪图像 | ||
648 | + RK_RgaImage *Irc_CropImg = NULL; | ||
649 | + RK_Rga_ImageInit(&Irc_CropImg, (Irc_width*4) /4 *3, (Irc_height*4) /4 *3, Irc_Format, (Irc_width*4)/4, (Irc_height*4)/4, (Irc_width*4) /4 *3, (Irc_height*4) /4 *3); | ||
650 | + | ||
651 | + //光学源图像 | ||
652 | + RK_RgaImage *Opt_SrcImg = NULL; | ||
653 | + RK_Rga_ImageInit(&Opt_SrcImg, Opt_width, Opt_height, Opt_Format, Opt_Rect_x, Opt_Rect_y, Opt_Rect_w, Opt_Rect_h); | ||
654 | + | ||
655 | + //光学的缩小图像 | ||
656 | + RK_RgaImage *Opt_ResizeImg = NULL; | ||
657 | + RK_Rga_ImageInit(&Opt_ResizeImg, Opt_width/2, Opt_height/2, Opt_Format, Opt_Rect_x, Opt_Rect_y, Opt_Rect_w/2, Opt_Rect_h/2); | ||
658 | + | ||
659 | + //目标图像 | ||
660 | + RK_RgaImage *DstImg = NULL; | ||
661 | + RK_Rga_ImageInit(&DstImg, Irc_width, Irc_height, Irc_Format, IRc_Rect_x, IRc_Rect_y, Irc_Rect_w, Irc_Rect_h); | ||
662 | + | ||
663 | + while (1) | ||
664 | + { | ||
665 | + //获取当前时间 | ||
666 | + clock_gettime(CLOCK_MONOTONIC, &now); | ||
667 | + long long current_time = now.tv_sec * NSEC_PER_SEC + now.tv_nsec; | ||
668 | + | ||
669 | + //计算时间差 | ||
670 | + long long elapsed_time = current_time - prev_time; | ||
671 | + | ||
672 | + //超过33ms | ||
673 | + if (elapsed_time >= period) | ||
674 | + { | ||
675 | + // while (FrameBuffer_UseFlag == JZ_FLAGCODE_ON) | ||
676 | + // { | ||
677 | + // delayUs(100); | ||
678 | + // } | ||
679 | + | ||
680 | + //将数据放入缓冲区 | ||
681 | + memcpy(MixedIrc_Buffer, g_MixedIrc_Buffer, (JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2); | ||
682 | + memcpy(MixedOpt_Buffer, g_MixedOpt_Buffer, JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2); | ||
683 | + | ||
684 | + //混合视频处理 | ||
685 | + memset(MixedIrc_Buffer, 0, sizeof(MixedIrc_Buffer)); | ||
686 | + memset(MixedOpt_Buffer, 0, sizeof(MixedOpt_Buffer)); | ||
687 | + | ||
688 | + memcpy(MixedIrc_Buffer, g_MixedIrc_Buffer, (JZ_ALIGN(FIRST_WIDTH, 16)) * (JZ_ALIGN(FIRST_HEIGHT, 16)) * 3 / 2); | ||
689 | + memcpy(MixedOpt_Buffer, g_MixedOpt_Buffer, JZ_ALIGN(SECOND_WIDTH, 16) * JZ_ALIGN(SECOND_HEIGHT, 16) * 3 / 2); | ||
690 | + | ||
691 | + //FrameBuffer_UseFlag = JZ_FLAGCODE_OFF; | ||
692 | + | ||
693 | + //光学数据处理 | ||
694 | + //缩小图像到1/2 | ||
695 | + d_ret = imresize(Opt_SrcImg->img, Opt_ResizeImg->img); | ||
696 | + if (d_ret != IM_STATUS_SUCCESS) | ||
697 | + { | ||
698 | + printf("irc resize failed\n"); | ||
699 | + continue; | ||
700 | + } | ||
701 | + | ||
702 | + //红外数据处理 | ||
703 | + //放大图像到4倍 | ||
704 | + d_ret = imresize(Irc_SrcImg->img, Irc_ResizeImg->img); | ||
705 | + if (d_ret != IM_STATUS_SUCCESS) | ||
706 | + { | ||
707 | + printf("opt resize failed\n"); | ||
708 | + continue; | ||
709 | + } | ||
710 | + | ||
711 | + //裁切红外图像 | ||
712 | + d_ret = imcrop(Irc_ResizeImg->img, Irc_CropImg->img, Irc_CropImg->rect); | ||
713 | + if (d_ret != IM_STATUS_SUCCESS) | ||
714 | + { | ||
715 | + printf("opt crop failed\n"); | ||
716 | + continue; | ||
717 | + } | ||
718 | + | ||
719 | + //以下参考rga_alpha_yuv_demo.cpp | ||
720 | + | ||
721 | + //将缩放好的光学画面放入目标画面 | ||
722 | + int usage = IM_SYNC | IM_ALPHA_BLEND_DST_OVER | IM_ALPHA_BLEND_PRE_MUL; | ||
723 | + // d_ret = improcess() | ||
724 | + | ||
725 | + | ||
726 | + // prev_time = current_time; | ||
727 | + } | ||
728 | + | ||
729 | + // 为了防止过于频繁地调用 clock_gettime,可以添加一个小的睡眠时间 | ||
730 | + // 例如,休眠1毫秒(100000000纳秒),以减少CPU占用 | ||
731 | + struct timespec req = { .tv_sec = 0, .tv_nsec = 1000000 }; | ||
732 | + nanosleep(&req, NULL); | ||
733 | + } | ||
734 | +#endif | ||
735 | +} | ||
736 | + | ||
737 | + | ||
738 | +/****************** | ||
739 | + * | ||
740 | + * 混合视频初始化 | ||
741 | + * | ||
742 | + * | ||
743 | + * ********************/ | ||
744 | +static JZC1_MixedVideo_Init() | ||
745 | +{ | ||
746 | + g_MixedIrc_Buffer = (unsigned char *)malloc(JZ_ALIGN(FIRST_WIDTH, 16)*JZ_ALIGN(FIRST_HEIGHT, 16)*3/2); | ||
747 | + g_MixedOpt_Buffer = (unsigned char *)malloc(JZ_ALIGN(SECOND_WIDTH, 16)*JZ_ALIGN(SECOND_HEIGHT, 16)*3/2); | ||
748 | + | ||
749 | + //混合视频初始化 | ||
750 | + pthread_t Task; | ||
751 | + pthread_attr_t attribute; //线程属性 | ||
752 | + pthread_attr_init(&attribute); //初始化线程属性 | ||
753 | + pthread_attr_setdetachstate(&attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
754 | + int bufferdata_Protection = pthread_create(&Task,&attribute,MixedVideo_Thread,NULL); //线程 | ||
755 | + if(bufferdata_Protection != 0) | ||
756 | + { | ||
757 | + JZSDK_LOG_ERROR("创建混合视频初始化失败!"); | ||
758 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
759 | + } | ||
760 | + | ||
761 | + JZSDK_LOG_INFO("MixedVidoe_Init Success"); | ||
762 | + | ||
763 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
764 | +} | ||
765 | + | ||
766 | + | ||
439 | #endif | 767 | #endif |
440 | 768 | ||
441 | //JZ_C1 的媒体初始化 | 769 | //JZ_C1 的媒体初始化 |
@@ -453,11 +781,14 @@ static T_JZsdkReturnCode JZC1_MediaInit() | @@ -453,11 +781,14 @@ static T_JZsdkReturnCode JZC1_MediaInit() | ||
453 | //初始化Mulit模块 | 781 | //初始化Mulit模块 |
454 | #ifdef RTK_MPP_STATUS_ON | 782 | #ifdef RTK_MPP_STATUS_ON |
455 | //初始化红外的编解码器 | 783 | //初始化红外的编解码器 |
456 | - RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(0), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420P, FIRST_WIDTH, FIRST_HEIGHT, 30, 5); | 784 | + RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(0), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, FIRST_WIDTH, FIRST_HEIGHT, 30, 5); |
457 | 785 | ||
458 | //初始化光学的编解码器 | 786 | //初始化光学的编解码器 |
459 | RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); | 787 | RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); |
460 | RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); | 788 | RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); |
789 | + | ||
790 | + // RTK_mmp_dec_Init(JZsdk_RtkMmpGetDecHandleAddr(1), MPP_VIDEO_CodingMJPEG, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT); | ||
791 | + // RTK_mmp_enc_Init(JZsdk_RtkMmpGetEncHandleAddr(1), MPP_VIDEO_CodingAVC, MPP_FMT_YUV420SP, SECOND_WIDTH, SECOND_HEIGHT, 30, 15); | ||
461 | #endif | 792 | #endif |
462 | 793 | ||
463 | //初始化Camera模块 | 794 | //初始化Camera模块 |
@@ -469,6 +800,7 @@ static T_JZsdkReturnCode JZC1_MediaInit() | @@ -469,6 +800,7 @@ static T_JZsdkReturnCode JZC1_MediaInit() | ||
469 | } | 800 | } |
470 | else | 801 | else |
471 | { | 802 | { |
803 | + | ||
472 | //光学相机的抓取 | 804 | //光学相机的抓取 |
473 | ret = JZsdk_FrameCatch_Single(JZC1_OptDeal); | 805 | ret = JZsdk_FrameCatch_Single(JZC1_OptDeal); |
474 | } | 806 | } |
@@ -505,12 +837,132 @@ static T_JZsdkReturnCode JZC1_MediaInit() | @@ -505,12 +837,132 @@ static T_JZsdkReturnCode JZC1_MediaInit() | ||
505 | value = 0; | 837 | value = 0; |
506 | Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); | 838 | Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); |
507 | 839 | ||
840 | + //初始化变焦模块 | ||
841 | + Cam_Zoom_Init(); | ||
842 | + | ||
843 | + //初始化RGA模块 | ||
844 | +#ifdef RTK_RGA_STATUS_ON | ||
845 | + ret = JZC1_RgaInit(&g_C1_RgaIrcInfo, JZ_ALIGN(FIRST_WIDTH, 16), JZ_ALIGN(FIRST_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP); | ||
846 | + ret = JZC1_RgaInit(&g_C1_RgaOptInfo, JZ_ALIGN(SECOND_WIDTH, 16), JZ_ALIGN(SECOND_HEIGHT, 16), RK_FORMAT_YCbCr_420_SP); | ||
847 | +#endif | ||
848 | + | ||
849 | +#endif | ||
850 | + | ||
851 | + | ||
852 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
853 | +} | ||
854 | + | ||
855 | +#ifdef RTK_RGA_STATUS_ON | ||
856 | + | ||
857 | +static T_JZsdkReturnCode JZC1_RgaInit(C1_RgaInfo **rgaInfo, int dst_width, int dst_height, int dst_format) | ||
858 | +{ | ||
859 | + | ||
860 | + | ||
861 | + //初始化rga结构体 | ||
862 | + (*rgaInfo) = (C1_RgaInfo *)malloc(sizeof(C1_RgaInfo)); | ||
863 | + if ((*rgaInfo) == NULL) | ||
864 | + { | ||
865 | + JZSDK_LOG_ERROR("RGA初始化失败"); | ||
866 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
867 | + } | ||
868 | + | ||
869 | + int width = dst_width; | ||
870 | + int height = dst_height; | ||
871 | + int rect_x = 0; | ||
872 | + int rect_y = 0; | ||
873 | + int rect_w = dst_width; | ||
874 | + int rect_h = dst_height; | ||
875 | + | ||
876 | + | ||
877 | + (*rgaInfo)->src_img = NULL; | ||
878 | + RK_Rga_ImageInit(&(*rgaInfo)->src_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输入模块 | ||
879 | + | ||
880 | + (*rgaInfo)->corp_img = NULL; | ||
881 | + RK_Rga_ImageInit(&(*rgaInfo)->corp_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化裁剪模块 | ||
882 | + | ||
883 | + (*rgaInfo)->dst_img = NULL; | ||
884 | + RK_Rga_ImageInit(&(*rgaInfo)->dst_img, width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化输出模块 | ||
885 | + | ||
886 | + | ||
887 | + | ||
888 | +} | ||
889 | + | ||
508 | #endif | 890 | #endif |
509 | 891 | ||
892 | +//rga处理 | ||
893 | +#ifdef RTK_RGA_STATUS_ON | ||
894 | +static T_JZsdkReturnCode JZC1_RgaDeal(C1_RgaInfo *rga_info, int resize, unsigned char *image, unsigned int *imgage_size) | ||
895 | +{ | ||
896 | + int d_ret; | ||
897 | + | ||
898 | + | ||
899 | + if (g_C1_RgaIrcInfo == NULL || *imgage_size != rga_info->src_img->buf_size) | ||
900 | + { | ||
901 | + printf("C1_Rga_Deal failed imagesize:%d bufsize:%d\n", *imgage_size, rga_info->src_img->buf_size); | ||
902 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
903 | + } | ||
904 | + | ||
905 | + //检查裁剪倍数是否改变 | ||
906 | + if (resize != rga_info->scale) | ||
907 | + { | ||
908 | + rga_info->scale = resize; | ||
909 | + | ||
910 | + //释放裁剪区域, 并重新注册 | ||
911 | + if (rga_info->corp_img != NULL) | ||
912 | + { | ||
913 | + RK_Rga_ImageDeInit(&(rga_info->corp_img)); | ||
914 | + | ||
915 | + int width = rga_info->src_img->width / resize; | ||
916 | + int height = rga_info->src_img->height / resize; | ||
917 | + int rect_x = (rga_info->src_img->width) / 2 - width / 2; | ||
918 | + int rect_y = (rga_info->src_img->height) / 2 - height / 2; | ||
919 | + int rect_w = width; | ||
920 | + int rect_h = height; | ||
921 | + int dst_format = rga_info->src_img->format; | ||
922 | + | ||
923 | + RK_Rga_ImageInit(&(rga_info->corp_img), width, height, dst_format, rect_x, rect_y, rect_w, rect_h); //初始化裁剪模块 | ||
924 | + } | ||
925 | + } | ||
926 | + | ||
927 | + //将图像放入处理器 | ||
928 | + memcpy(rga_info->src_img->buf, image, *imgage_size); | ||
929 | + | ||
930 | + //JZSDK_LOG_DEBUG("裁剪倍率%d",resize); | ||
931 | + | ||
932 | + if (resize == 0) | ||
933 | + { | ||
934 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
935 | + } | ||
936 | + | ||
937 | + //裁剪图像 | ||
938 | + d_ret = imcrop(rga_info->src_img->img, rga_info->corp_img->img, rga_info->corp_img->rect); | ||
939 | + if (d_ret != IM_STATUS_SUCCESS) | ||
940 | + { | ||
941 | + printf("crop failed\n"); | ||
942 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
943 | + } | ||
944 | + | ||
945 | + //缩放图像 | ||
946 | + d_ret = imresize(rga_info->corp_img->img, rga_info->dst_img->img); | ||
947 | + if (d_ret != IM_STATUS_SUCCESS) | ||
948 | + { | ||
949 | + printf("resize failed\n"); | ||
950 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
951 | + } | ||
952 | + | ||
953 | + //返回图像 | ||
954 | + memcpy(image, rga_info->dst_img->buf, rga_info->dst_img->buf_size); | ||
955 | + //printf("image[0]:%d image[1]:%d\n", image[0], image[1]); | ||
956 | + *imgage_size = rga_info->dst_img->buf_size; | ||
510 | 957 | ||
511 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 958 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
959 | + | ||
960 | + | ||
961 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
962 | + | ||
512 | } | 963 | } |
513 | 964 | ||
965 | +#endif | ||
514 | 966 | ||
515 | T_JZsdkReturnCode JZC1_Init() | 967 | T_JZsdkReturnCode JZC1_Init() |
516 | { | 968 | { |
@@ -14,7 +14,6 @@ sysfs接口与GPIO(通用输入/输出)模块 | @@ -14,7 +14,6 @@ sysfs接口与GPIO(通用输入/输出)模块 | ||
14 | **/ | 14 | **/ |
15 | 15 | ||
16 | /******************* | 16 | /******************* |
17 | - * | ||
18 | * sysfs的gpio引脚注册 | 17 | * sysfs的gpio引脚注册 |
19 | * 引脚号计算公式为 pin = bank * 32 + number, number = group*8 + X | 18 | * 引脚号计算公式为 pin = bank * 32 + number, number = group*8 + X |
20 | * 格式为 GPIO + bank + '_' + group + X | 19 | * 格式为 GPIO + bank + '_' + group + X |
Module/MediaProc/Camera/Cam_Zoom/Cam_Zoom.c
0 → 100644
1 | +#include <stdio.h> | ||
2 | +#include <pthread.h> | ||
3 | + | ||
4 | + | ||
5 | +#include "BaseConfig.h" | ||
6 | +#include "JZsdkLib.h" | ||
7 | + | ||
8 | +#define ZOOM_VALUE_DETECTION_FREQUENCY 50 //每秒检测50次变焦值 | ||
9 | + | ||
10 | +static int g_Cam_ZoomTempValue = 0; //相机对焦临时变量 用于各个模块的输入使用 | ||
11 | +static int g_Cam_ZoomValue = 0; //相机对焦变量的实际对焦值, 0为最远(完整画面), 1000为最近(最大放大画面) | ||
12 | + | ||
13 | +/***************** | ||
14 | + * | ||
15 | + * | ||
16 | + * 设置临时变焦值 | ||
17 | + * | ||
18 | + * | ||
19 | + * *******************/ | ||
20 | +T_JZsdkReturnCode Cam_Zoom_SetTempValue(int *value) | ||
21 | +{ | ||
22 | + if (*value > 1000) | ||
23 | + { | ||
24 | + *value = 1000; | ||
25 | + } | ||
26 | + else if (*value < 0) | ||
27 | + { | ||
28 | + *value = 0; | ||
29 | + } | ||
30 | + | ||
31 | + g_Cam_ZoomTempValue = *value; | ||
32 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
33 | +} | ||
34 | + | ||
35 | +/************* | ||
36 | + * | ||
37 | + * | ||
38 | + * 获取变焦值 | ||
39 | + * | ||
40 | + * | ||
41 | + * *****************/ | ||
42 | +T_JZsdkReturnCode Cam_Zoom_GetValue(int *value) | ||
43 | +{ | ||
44 | + *value = g_Cam_ZoomValue; | ||
45 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
46 | +} | ||
47 | + | ||
48 | +/********************* | ||
49 | + * | ||
50 | + * | ||
51 | + * 设置实际变焦值 | ||
52 | + * | ||
53 | + * | ||
54 | + * *********************/ | ||
55 | +static T_JZsdkReturnCode Cam_Zoom_SetValue(int value) | ||
56 | +{ | ||
57 | + g_Cam_ZoomValue = value; | ||
58 | + | ||
59 | + //对外广播变焦值 | ||
60 | + | ||
61 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
62 | +} | ||
63 | + | ||
64 | + | ||
65 | +static void *ZoomValue_Thread(void *args) | ||
66 | +{ | ||
67 | + while (1) | ||
68 | + { | ||
69 | + //每一段时间检测输入的变焦值是否有变化 | ||
70 | + delayMs(1000/ZOOM_VALUE_DETECTION_FREQUENCY); | ||
71 | + if (g_Cam_ZoomTempValue != g_Cam_ZoomValue) | ||
72 | + { | ||
73 | + Cam_Zoom_SetValue(g_Cam_ZoomTempValue); | ||
74 | + } | ||
75 | + | ||
76 | + //JZSDK_LOG_DEBUG("g_Cam_ZoomValue = %d , g_Cam_ZoomTempValue = %d", g_Cam_ZoomValue, g_Cam_ZoomTempValue); | ||
77 | + } | ||
78 | +} | ||
79 | + | ||
80 | +/****************** | ||
81 | + * | ||
82 | + * | ||
83 | + * 变焦模块初始化 | ||
84 | + * | ||
85 | + * *****************/ | ||
86 | +T_JZsdkReturnCode Cam_Zoom_Init() | ||
87 | +{ | ||
88 | + //初始化处理现场 | ||
89 | + pthread_t ZoomValue_Task; | ||
90 | + pthread_attr_t attribute; //线程属性 | ||
91 | + pthread_attr_init(&attribute); //初始化线程属性 | ||
92 | + pthread_attr_setdetachstate(&attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
93 | + int bufferdata_Protection = pthread_create(&ZoomValue_Task,&attribute,ZoomValue_Thread,NULL); //线程 | ||
94 | + if(bufferdata_Protection != 0) | ||
95 | + { | ||
96 | + JZSDK_LOG_ERROR("创建变焦模块失败!"); | ||
97 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
98 | + } | ||
99 | + | ||
100 | + | ||
101 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
102 | +} |
Module/MediaProc/Camera/Cam_Zoom/Cam_Zoom.h
0 → 100644
1 | +/** | ||
2 | + ******************************************************************** | ||
3 | + * @file Cam_Zoom.h | ||
4 | + * Cam_Zoom.c 的头文件 | ||
5 | + * | ||
6 | + ********************************************************************* | ||
7 | + */ | ||
8 | + | ||
9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
10 | +#ifndef CAM_ZOOM_H | ||
11 | +#define CAM_ZOOM_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 | + | ||
23 | + | ||
24 | +/* Exported types ------------------------------------------------------------*/ | ||
25 | + | ||
26 | +/* Exported functions --------------------------------------------------------*/ | ||
27 | +T_JZsdkReturnCode Cam_Zoom_SetTempValue(int *value); | ||
28 | +T_JZsdkReturnCode Cam_Zoom_GetValue(int *value); | ||
29 | +T_JZsdkReturnCode Cam_Zoom_Init(); | ||
30 | + | ||
31 | +#ifdef __cplusplus | ||
32 | +} | ||
33 | +#endif | ||
34 | + | ||
35 | +#endif |
@@ -313,6 +313,13 @@ T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *va | @@ -313,6 +313,13 @@ T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *va | ||
313 | { | 313 | { |
314 | *value = g_CameraGasEnhancementColor; | 314 | *value = g_CameraGasEnhancementColor; |
315 | } | 315 | } |
316 | + break; | ||
317 | + | ||
318 | + case CAMERA_RESIZE: | ||
319 | + { | ||
320 | + Cam_Zoom_GetValue(value); | ||
321 | + } | ||
322 | + break; | ||
316 | 323 | ||
317 | default: | 324 | default: |
318 | { | 325 | { |
@@ -389,6 +396,15 @@ T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *va | @@ -389,6 +396,15 @@ T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *va | ||
389 | } | 396 | } |
390 | break; | 397 | break; |
391 | 398 | ||
399 | + case CAMERA_RESIZE: | ||
400 | + { | ||
401 | + Cam_Zoom_SetTempValue(value); | ||
402 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
403 | + { | ||
404 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
405 | + } | ||
406 | + } | ||
407 | + | ||
392 | default: | 408 | default: |
393 | { | 409 | { |
394 | *value = JZ_FLAGCODE_OFF; | 410 | *value = JZ_FLAGCODE_OFF; |
@@ -14,6 +14,11 @@ | @@ -14,6 +14,11 @@ | ||
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 | 16 | ||
17 | +#include "MediaProc/Camera/Cam_FrameCatch/Cam_FrameCatch.h" | ||
18 | +#include "MediaProc/Camera/V4L2_camera/V4L2_CameraParameterSetting.h" | ||
19 | +#include "MediaProc/Camera/V4L2_camera/V4L2_Record.h" | ||
20 | +#include "MediaProc/Camera/Cam_Zoom/Cam_Zoom.h" | ||
21 | + | ||
17 | #ifdef __cplusplus | 22 | #ifdef __cplusplus |
18 | extern "C" { | 23 | extern "C" { |
19 | #endif | 24 | #endif |
@@ -71,8 +71,11 @@ typedef struct IRC_param | @@ -71,8 +71,11 @@ typedef struct IRC_param | ||
71 | unsigned int SPC_auto_time_flag; //spc定时自动打档标志位,用于计算打档时间 | 71 | unsigned int SPC_auto_time_flag; //spc定时自动打档标志位,用于计算打档时间 |
72 | 72 | ||
73 | //两点矫正(Two-Point Correction -> TPC) | 73 | //两点矫正(Two-Point Correction -> TPC) |
74 | - double *TPC_Diff; // tpc截距数组 即计算得到的增益 | ||
75 | - double *TPC_Slope; // tpc斜率数组 即计算得到的补正 | 74 | + double *TPC_Gain; // tpc斜率数组 即计算得到的校准增益 |
75 | + double *TPC_Offset; // tpc截距数组 即计算得到的校正偏移值 | ||
76 | + | ||
77 | + unsigned int TPC_ResetFlag; //tpc校准标志位 开启时进行tpc校准 | ||
78 | + | ||
76 | 79 | ||
77 | unsigned int TPC_mode; //tpc模式 0出厂打档 1手动打档 | 80 | unsigned int TPC_mode; //tpc模式 0出厂打档 1手动打档 |
78 | 81 |
@@ -407,7 +407,8 @@ T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned | @@ -407,7 +407,8 @@ T_JZsdkReturnCode IRC_FrameDeal(U16_t *rawData ,unsigned int dataSize, unsigned | ||
407 | U8_t *yuv_frame = (U8_t *)malloc(g_IRC_Param->Width*g_IRC_Param->Height*3/2 *sizeof(U8_t)); | 407 | U8_t *yuv_frame = (U8_t *)malloc(g_IRC_Param->Width*g_IRC_Param->Height*3/2 *sizeof(U8_t)); |
408 | 408 | ||
409 | // 调用转换函数 | 409 | // 调用转换函数 |
410 | - Stream_rgb888_to_yuv420p(RGB_data,g_IRC_Param->Width,g_IRC_Param->Height, yuv_frame); | 410 | + //Stream_rgb888_to_yuv420p(RGB_data,g_IRC_Param->Width,g_IRC_Param->Height, yuv_frame); |
411 | + Stream_rgb888_to_yuv420sp(RGB_data,g_IRC_Param->Width,g_IRC_Param->Height, yuv_frame); | ||
411 | 412 | ||
412 | *outData = yuv_frame; | 413 | *outData = yuv_frame; |
413 | *outDataSize = g_IRC_Param->Width*g_IRC_Param->Height*3/2; | 414 | *outDataSize = g_IRC_Param->Width*g_IRC_Param->Height*3/2; |
@@ -1044,16 +1045,16 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | @@ -1044,16 +1045,16 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | ||
1044 | IrcDealCfg->LowT_flag = JZ_FLAGCODE_OFF; | 1045 | IrcDealCfg->LowT_flag = JZ_FLAGCODE_OFF; |
1045 | IrcDealCfg->HighT_flag = JZ_FLAGCODE_OFF; | 1046 | IrcDealCfg->HighT_flag = JZ_FLAGCODE_OFF; |
1046 | 1047 | ||
1047 | - IrcDealCfg->TPC_Diff = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); | ||
1048 | - if (IrcDealCfg->TPC_Diff == NULL) | 1048 | + IrcDealCfg->TPC_Offset = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); |
1049 | + if (IrcDealCfg->TPC_Offset == NULL) | ||
1049 | { | 1050 | { |
1050 | - JZSDK_LOG_ERROR("TPC_Diff注册失败"); | 1051 | + JZSDK_LOG_ERROR("TPC_Offset注册失败"); |
1051 | } | 1052 | } |
1052 | 1053 | ||
1053 | - IrcDealCfg->TPC_Slope = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); | ||
1054 | - if (IrcDealCfg->TPC_Slope == NULL) | 1054 | + IrcDealCfg->TPC_Gain = (double *)malloc(IrcDealCfg->PixelNum * sizeof(double)); |
1055 | + if (IrcDealCfg->TPC_Gain == NULL) | ||
1055 | { | 1056 | { |
1056 | - JZSDK_LOG_ERROR("TPC_Slope注册失败"); | 1057 | + JZSDK_LOG_ERROR("TPC_Gain注册失败"); |
1057 | } | 1058 | } |
1058 | 1059 | ||
1059 | IrcDealCfg->HighT_NineFrameAdd = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); | 1060 | IrcDealCfg->HighT_NineFrameAdd = (U16_t *)malloc(IrcDealCfg->PixelNum * sizeof(U16_t)); |
@@ -1137,6 +1138,9 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | @@ -1137,6 +1138,9 @@ static T_JZsdkReturnCode IRC_param_Init(struct IRC_param **index, int height, in | ||
1137 | //填入低温数据 | 1138 | //填入低温数据 |
1138 | IRC_Set_LowTempData(IrcDealCfg); | 1139 | IRC_Set_LowTempData(IrcDealCfg); |
1139 | 1140 | ||
1141 | + //开启tpc校验标志 | ||
1142 | + IrcDealCfg->TPC_ResetFlag = JZ_FLAGCODE_ON; | ||
1143 | + | ||
1140 | //获取markdata的本地数据 | 1144 | //获取markdata的本地数据 |
1141 | ret = IRC_LocalFrame_DataRead(SPC_MARK_DATA, IrcDealCfg); | 1145 | ret = IRC_LocalFrame_DataRead(SPC_MARK_DATA, IrcDealCfg); |
1142 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 1146 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
@@ -202,274 +202,6 @@ static T_JZsdkReturnCode JZsdk_vKT(U16_t *in_str, U8_t **out_str, int *out_str_l | @@ -202,274 +202,6 @@ static T_JZsdkReturnCode JZsdk_vKT(U16_t *in_str, U8_t **out_str, int *out_str_l | ||
202 | } | 202 | } |
203 | 203 | ||
204 | 204 | ||
205 | - | ||
206 | -// //将14位灰度图数据转换为原始码流 | ||
207 | -// T_JZsdkReturnCode IRC_14bitGrayData_to_RawData(U8_t *data, int data_len, U8_t **raw_data, int *raw_data_len, struct IRC_param *dealInfo, int rawType) | ||
208 | -// { | ||
209 | -// T_JZsdkReturnCode ret; | ||
210 | - | ||
211 | -// //无图像 | ||
212 | -// if (data == NULL || dealInfo == NULL) | ||
213 | -// { | ||
214 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
215 | -// } | ||
216 | - | ||
217 | -// U16_t u16_RawData[dealInfo->PixelNum]; //原始16位码流 | ||
218 | -// U16_t u16_CorrentData[dealInfo->PixelNum]; | ||
219 | -// unsigned int u16_data_len; //16位码流的数据长度 | ||
220 | - | ||
221 | -// //1、合成像素,u8转换合并成u16 | ||
222 | -// JZsdk_Merge_U8_to_U16_byReverse(data, data_len,u16_RawData, &u16_data_len); | ||
223 | -// if (u16_data_len != dealInfo->PixelNum) | ||
224 | -// { | ||
225 | -// JZSDK_LOG_ERROR("像素合成失败"); | ||
226 | -// } | ||
227 | - | ||
228 | -// //2、数据检查 | ||
229 | -// for (int i = 0; i < dealInfo->PixelNum; i++) | ||
230 | -// { | ||
231 | -// if (u16_RawData[i] > dealInfo->ExpectedMax) | ||
232 | -// { | ||
233 | -// u16_RawData[i] = dealInfo->ExpectedMax; | ||
234 | -// } | ||
235 | -// } | ||
236 | - | ||
237 | -// //3、如果开启了原始流坏点寻找 | ||
238 | -// if (dealInfo->AutoBadPixelReset == JZ_FLAGCODE_ON) | ||
239 | -// { | ||
240 | -// JZsdk_RawCheckisBadPixel_U16(u16_RawData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, &dealInfo->BadPixelNum); | ||
241 | -// dealInfo->AutoBadPixelReset = JZ_FLAGCODE_OFF; | ||
242 | -// } | ||
243 | -// //盲元纠正 | ||
244 | -// JZsdk_CutBadPixel_U16(u16_RawData, dealInfo->Width, dealInfo->Height, dealInfo->BadPixel, dealInfo->BadPixelNum,dealInfo->BadPixelExtern, 1); | ||
245 | - | ||
246 | - | ||
247 | -// /*************************************************************************** | ||
248 | -// * | ||
249 | -// * 图像标定记录 | ||
250 | -// * | ||
251 | -// * | ||
252 | -// * *******************************************************************/ | ||
253 | -// //3、如果开启了低温循环标定 | ||
254 | -// if (dealInfo->LowT_flag != JZ_FLAGCODE_OFF) | ||
255 | -// { | ||
256 | -// IRC_LowT_CycleCalibration(u16_RawData, dealInfo); | ||
257 | -// } | ||
258 | - | ||
259 | -// //4、如果开启了高温循环标定 | ||
260 | -// if (dealInfo->HighT_flag != JZ_FLAGCODE_OFF) | ||
261 | -// { | ||
262 | -// IRC_HighT_CycleCalibration(u16_RawData, dealInfo); | ||
263 | -// } | ||
264 | - | ||
265 | - | ||
266 | -// //单点校正spc如果未进行过数据的标定,则进行一次 | ||
267 | -// if (dealInfo->FirstSPC_flag == JZ_FLAGCODE_ON) | ||
268 | -// { | ||
269 | -// JZSDK_LOG_INFO("未进行过数据标定"); | ||
270 | -// memcpy(dealInfo->SPC_Mark_Data, u16_RawData, dealInfo->PixelNum * sizeof(U16_t)); | ||
271 | -// IRC_SPC_FrameSaveOrRead(dealInfo, 1, dealInfo->SPC_Mark_Data); | ||
272 | -// IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data); | ||
273 | -// dealInfo->FirstSPC_flag = JZ_FLAGCODE_OFF; | ||
274 | -// } | ||
275 | - | ||
276 | -// //如果开启spc重置标定 | ||
277 | -// if (dealInfo->SPC_ResetFlag == JZ_FLAGCODE_ON) | ||
278 | -// { | ||
279 | -// JZSDK_LOG_INFO("SPC重置标定"); | ||
280 | -// memcpy(dealInfo->SPC_Mark_Data, u16_RawData, dealInfo->PixelNum * sizeof(U16_t)); | ||
281 | -// IRC_SPC_FrameSaveOrRead(dealInfo, 1, dealInfo->SPC_Mark_Data); | ||
282 | -// IRC_SPC_ParamCorrect(dealInfo, dealInfo->SPC_Mark_Data); | ||
283 | -// dealInfo->SPC_ResetFlag = JZ_FLAGCODE_OFF; | ||
284 | -// } | ||
285 | - | ||
286 | -// //标记气体增图像图像 | ||
287 | -// //如果开启气体增强时,未标记过 | ||
288 | -// if (dealInfo->OutputPixelColorMode == 2 && dealInfo->First_DGCE_flag == JZ_FLAGCODE_ON) | ||
289 | -// { | ||
290 | -// memcpy(dealInfo->DGCE_Mark_Data, u16_RawData, dealInfo->PixelNum * sizeof(U16_t) ); | ||
291 | -// dealInfo->First_DGCE_flag = JZ_FLAGCODE_OFF; | ||
292 | -// } | ||
293 | -// //如果开启气体增强重置标定 | ||
294 | -// if (dealInfo->DGCE_ResetFlag == JZ_FLAGCODE_ON) | ||
295 | -// { | ||
296 | -// JZSDK_LOG_INFO("气体增强重置标定"); | ||
297 | -// memcpy(dealInfo->DGCE_Mark_Data, u16_RawData, dealInfo->PixelNum * sizeof(U16_t)); | ||
298 | -// dealInfo->DGCE_ResetFlag = JZ_FLAGCODE_OFF; | ||
299 | -// } | ||
300 | - | ||
301 | -// /*************************************************************************** | ||
302 | -// * | ||
303 | -// * 校正 | ||
304 | -// * | ||
305 | -// * | ||
306 | -// * *******************************************************************/ | ||
307 | -// //5、校正 | ||
308 | -// //先复制一份纠正用数据 | ||
309 | -// memcpy(u16_CorrentData, u16_RawData, dealInfo->PixelNum * sizeof(U16_t)); | ||
310 | - | ||
311 | - | ||
312 | -// //如果打开了两点校正 | ||
313 | -// if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC) | ||
314 | -// { | ||
315 | -// IRC_TPC(u16_CorrentData, dealInfo); | ||
316 | -// } | ||
317 | - | ||
318 | -// if (dealInfo->FrameCorrectMode == IRC_CORRCTION_SPC) | ||
319 | -// { | ||
320 | -// IRC_SPC(u16_CorrentData, dealInfo); | ||
321 | -// } | ||
322 | - | ||
323 | -// //7、图像输出模式 | ||
324 | -// U8_t *GrayImage = NULL; //灰度图数组 | ||
325 | -// unsigned int GrayImageLen = 0; //灰度图长度 | ||
326 | -// U8_t *RgbImage = NULL; //rgb888的图像数组 | ||
327 | -// unsigned int RgbImageLen = 0; //rgb数组的长度 | ||
328 | - | ||
329 | -// switch (dealInfo->OutputPixelColorMode) | ||
330 | -// { | ||
331 | -// case 0: //默认输出模式 | ||
332 | -// { | ||
333 | -// //u16转换为灰度图 | ||
334 | -// //IRC_Histogram_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo); | ||
335 | -// JZsdk_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo); | ||
336 | - | ||
337 | -// if (JZsdk_GrayBadPixelCheck_flag == JZ_FLAGCODE_ON) | ||
338 | -// { | ||
339 | -// JZsdk_GrayCheckisBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, &dealInfo->GrayPixelNum); | ||
340 | -// JZsdk_GrayBadPixelCheck_flag = JZ_FLAGCODE_OFF; | ||
341 | -// } | ||
342 | - | ||
343 | -// //JZsdk_CutBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, dealInfo->GrayPixelNum,dealInfo->GrayPixelExtern, 1); | ||
344 | - | ||
345 | -// //灰度图转rgb888 | ||
346 | -// IRC_GrayTo_RGB(GrayImage, &RgbImage, &RgbImageLen,dealInfo); | ||
347 | -// } | ||
348 | -// break; | ||
349 | - | ||
350 | -// case 1: //伪彩输出模式 | ||
351 | -// { | ||
352 | -// //u16转换为灰度图 | ||
353 | -// //IRC_Histogram_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo); | ||
354 | -// JZsdk_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo); | ||
355 | - | ||
356 | -// if (JZsdk_GrayBadPixelCheck_flag == JZ_FLAGCODE_ON) | ||
357 | -// { | ||
358 | -// JZsdk_GrayCheckisBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, &dealInfo->GrayPixelNum); | ||
359 | -// JZsdk_GrayBadPixelCheck_flag = JZ_FLAGCODE_OFF; | ||
360 | -// } | ||
361 | - | ||
362 | -// //JZsdk_CutBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, dealInfo->GrayPixelNum,dealInfo->GrayPixelExtern, 1); | ||
363 | - | ||
364 | -// //灰度图转伪彩rgb888 | ||
365 | -// ret = PseudoColor_Gray2Rgb(GrayImage, &RgbImage, &RgbImageLen, dealInfo->PixelNum); | ||
366 | -// if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
367 | -// { | ||
368 | -// IRC_GrayTo_RGB(GrayImage, &RgbImage, &RgbImageLen,dealInfo); | ||
369 | -// } | ||
370 | - | ||
371 | -// } | ||
372 | -// break; | ||
373 | - | ||
374 | -// case 2: //气体色彩增强输出模式 | ||
375 | -// { | ||
376 | -// //进行前需要自动打开单点纠正模式 | ||
377 | -// //u16转换为灰度图 | ||
378 | -// //IRC_Histogram_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo); | ||
379 | -// JZsdk_vKT(u16_CorrentData, &GrayImage, &GrayImageLen, dealInfo); | ||
380 | - | ||
381 | -// // if (JZsdk_GrayBadPixelCheck_flag == JZ_FLAGCODE_ON) | ||
382 | -// // { | ||
383 | -// // JZsdk_GrayCheckisBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, &dealInfo->GrayPixelNum); | ||
384 | -// // JZsdk_GrayBadPixelCheck_flag = JZ_FLAGCODE_OFF; | ||
385 | -// // } | ||
386 | -// // JZsdk_CutBadPixel_U8(GrayImage, dealInfo->Width, dealInfo->Height, dealInfo->GrayPixel, dealInfo->GrayPixelNum,dealInfo->GrayPixelExtern, 1); | ||
387 | - | ||
388 | -// //转为rgb | ||
389 | -// IRC_GrayTo_RGB(GrayImage, &RgbImage, &RgbImageLen,dealInfo); | ||
390 | - | ||
391 | -// //灰度图转气体增强rgb888 | ||
392 | -// IRC_DynamicGasesColorEnhance(RgbImage, u16_RawData, dealInfo); | ||
393 | -// } | ||
394 | -// break; | ||
395 | - | ||
396 | -// default: | ||
397 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
398 | -// break; | ||
399 | -// } | ||
400 | - | ||
401 | -// // 在rgb图上画图形 | ||
402 | -// IRC_WriteGraphical(RgbImage, dealInfo); | ||
403 | - | ||
404 | -// /***************** | ||
405 | -// * | ||
406 | -// * | ||
407 | -// * 如果码流类型要求为yuv420p | ||
408 | -// * | ||
409 | -// * **********************/ | ||
410 | -// if (rawType == 0) | ||
411 | -// { | ||
412 | -// //rgb888转yuv | ||
413 | -// U8_t *yuv_frame = (U8_t *)malloc(dealInfo->Width*dealInfo->Height*3/2 ); | ||
414 | -// if (yuv_frame == NULL) | ||
415 | -// { | ||
416 | -// printf("内存注册失败\n"); | ||
417 | -// if (GrayImage != NULL) | ||
418 | -// { | ||
419 | -// free(GrayImage); | ||
420 | -// GrayImage = NULL; | ||
421 | -// } | ||
422 | -// if (RgbImage != NULL) | ||
423 | -// { | ||
424 | -// free(RgbImage); | ||
425 | -// RgbImage = NULL; | ||
426 | -// } | ||
427 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
428 | -// } | ||
429 | - | ||
430 | -// // 调用转换函数 | ||
431 | -// Stream_rgb888_to_yuv420p(RgbImage,dealInfo->Width,dealInfo->Height,yuv_frame); | ||
432 | - | ||
433 | -// // 释放临时缓冲区,保留yuv_frame | ||
434 | -// if (GrayImage != NULL) | ||
435 | -// { | ||
436 | -// free(GrayImage); | ||
437 | -// GrayImage = NULL; | ||
438 | -// } | ||
439 | -// if (RgbImage != NULL) | ||
440 | -// { | ||
441 | -// free(RgbImage); | ||
442 | -// RgbImage = NULL; | ||
443 | -// } | ||
444 | - | ||
445 | -// *raw_data = yuv_frame; | ||
446 | -// *raw_data_len = dealInfo->Width*dealInfo->Height*3/2; | ||
447 | -// } | ||
448 | - | ||
449 | -// /***************** | ||
450 | -// * | ||
451 | -// * | ||
452 | -// * 如果码流类型要求为rgb888 | ||
453 | -// * | ||
454 | -// * **********************/ | ||
455 | -// if (rawType == 1) | ||
456 | -// { | ||
457 | -// // 释放临时缓冲区 | ||
458 | -// if (GrayImage != NULL) | ||
459 | -// { | ||
460 | -// free(GrayImage); | ||
461 | -// GrayImage = NULL; | ||
462 | -// } | ||
463 | - | ||
464 | -// *raw_data = RgbImage; | ||
465 | -// *raw_data_len = dealInfo->Width*dealInfo->Height*3; | ||
466 | -// } | ||
467 | - | ||
468 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
469 | -// } | ||
470 | - | ||
471 | - | ||
472 | - | ||
473 | /****** | 205 | /****** |
474 | * | 206 | * |
475 | * 单点矫正 | 207 | * 单点矫正 |
@@ -556,7 +288,7 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo) | @@ -556,7 +288,7 @@ T_JZsdkReturnCode JZIrcLib_TPC(U16_t *ImageData,struct IRC_param *dealInfo) | ||
556 | // 应用两点校正公式 | 288 | // 应用两点校正公式 |
557 | for (int i = 0; i < dealInfo->PixelNum; i++) | 289 | for (int i = 0; i < dealInfo->PixelNum; i++) |
558 | { | 290 | { |
559 | - ImageData[i] = (int)(dealInfo->TPC_Slope[i] * ImageData[i] + dealInfo->TPC_Diff[i]); | 291 | + ImageData[i] = (int)(dealInfo->TPC_Gain[i] * ImageData[i] + dealInfo->TPC_Offset[i]); |
560 | if (ImageData[i] < 0) | 292 | if (ImageData[i] < 0) |
561 | { | 293 | { |
562 | ImageData[i] = 0; | 294 | ImageData[i] = 0; |
@@ -590,12 +322,12 @@ static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealIn | @@ -590,12 +322,12 @@ static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealIn | ||
590 | int allZeroSlope_flag = 1, allZeroDiff_flag = 1; | 322 | int allZeroSlope_flag = 1, allZeroDiff_flag = 1; |
591 | for (int i = 0; i < dealInfo->PixelNum; i++) | 323 | for (int i = 0; i < dealInfo->PixelNum; i++) |
592 | { | 324 | { |
593 | - if (dealInfo->TPC_Slope[i] != 0) | 325 | + if (dealInfo->TPC_Gain[i] != 0) |
594 | { | 326 | { |
595 | allZeroSlope_flag = 0; | 327 | allZeroSlope_flag = 0; |
596 | } | 328 | } |
597 | 329 | ||
598 | - if (dealInfo->TPC_Diff[i] != 0) | 330 | + if (dealInfo->TPC_Offset[i] != 0) |
599 | { | 331 | { |
600 | allZeroDiff_flag = 0; | 332 | allZeroDiff_flag = 0; |
601 | } | 333 | } |
@@ -619,17 +351,61 @@ static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealIn | @@ -619,17 +351,61 @@ static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation(struct IRC_param *dealIn | ||
619 | { | 351 | { |
620 | if (dealInfo->HighT_NineFrame_Avg[i] > dealInfo->LowT_NineFrame_Avg[i]) | 352 | if (dealInfo->HighT_NineFrame_Avg[i] > dealInfo->LowT_NineFrame_Avg[i]) |
621 | { | 353 | { |
622 | - dealInfo->TPC_Slope[i] = (AvgSingleFrame_HighT - AvgSingleFrame_LowT) / (dealInfo->HighT_NineFrame_Avg[i] - dealInfo->LowT_NineFrame_Avg[i]); | 354 | + dealInfo->TPC_Gain[i] = (AvgSingleFrame_HighT - AvgSingleFrame_LowT) / (dealInfo->HighT_NineFrame_Avg[i] - dealInfo->LowT_NineFrame_Avg[i]); |
623 | } | 355 | } |
624 | else | 356 | else |
625 | { | 357 | { |
626 | - dealInfo->TPC_Slope[i] = 0; | 358 | + dealInfo->TPC_Gain[i] = 0; |
627 | } | 359 | } |
628 | - dealInfo->TPC_Diff[i] = AvgSingleFrame_LowT - dealInfo->TPC_Slope[i] * dealInfo->LowT_NineFrame_Avg[i]; | 360 | + dealInfo->TPC_Offset[i] = AvgSingleFrame_LowT - dealInfo->TPC_Gain[i] * dealInfo->LowT_NineFrame_Avg[i]; |
629 | } | 361 | } |
630 | } | 362 | } |
631 | } | 363 | } |
632 | 364 | ||
365 | +/******************* | ||
366 | + * | ||
367 | + * 两点校正斜率计算 | ||
368 | + * | ||
369 | + * | ||
370 | + * *******************/ | ||
371 | +static T_JZsdkReturnCode JZIrcLib_TPC_Slope_Calculation2(struct IRC_param *dealInfo) | ||
372 | +{ | ||
373 | + //判断是否存在结构体 | ||
374 | + if (dealInfo == NULL) | ||
375 | + { | ||
376 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
377 | + } | ||
378 | + | ||
379 | + //计算像元平均响应 | ||
380 | + double AvgSingleFrame_LowT = 0, AvgSingleFrame_HighT = 0; | ||
381 | + | ||
382 | + for (int i = 0; i < dealInfo->PixelNum; i++) | ||
383 | + { | ||
384 | + AvgSingleFrame_LowT += dealInfo->LowT_NineFrame_Avg[i]; | ||
385 | + AvgSingleFrame_HighT += dealInfo->HighT_NineFrame_Avg[i]; | ||
386 | + } | ||
387 | + | ||
388 | + AvgSingleFrame_HighT = AvgSingleFrame_HighT / dealInfo->PixelNum; | ||
389 | + AvgSingleFrame_LowT = AvgSingleFrame_LowT / dealInfo->PixelNum; | ||
390 | + | ||
391 | + for (int i = 0; i < dealInfo->PixelNum; i++) | ||
392 | + { | ||
393 | + if (dealInfo->HighT_NineFrame_Avg[i] != dealInfo->LowT_NineFrame_Avg[i]) | ||
394 | + { | ||
395 | + dealInfo->TPC_Gain[i] = (AvgSingleFrame_HighT - AvgSingleFrame_LowT) / (dealInfo->HighT_NineFrame_Avg[i] - dealInfo->LowT_NineFrame_Avg[i]); | ||
396 | + dealInfo->TPC_Offset[i] = AvgSingleFrame_LowT - dealInfo->TPC_Gain[i] * dealInfo->LowT_NineFrame_Avg[i]; | ||
397 | + } | ||
398 | + else | ||
399 | + { | ||
400 | + dealInfo->TPC_Gain[i] = 1; | ||
401 | + dealInfo->TPC_Offset[i] = 0; | ||
402 | + } | ||
403 | + } | ||
404 | + | ||
405 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
406 | +} | ||
407 | + | ||
408 | + | ||
633 | /*计算直方图均衡化并转换为8位灰度值 | 409 | /*计算直方图均衡化并转换为8位灰度值 |
634 | U16_t in_str 输入的数据 | 410 | U16_t in_str 输入的数据 |
635 | int in_str_len 输入的数据长度 | 411 | int in_str_len 输入的数据长度 |
@@ -845,8 +621,11 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | @@ -845,8 +621,11 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | ||
845 | // 如果打开了两点校正 | 621 | // 如果打开了两点校正 |
846 | if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC) | 622 | if (dealInfo->FrameCorrectMode == IRC_CORRCTION_TPC) |
847 | { | 623 | { |
848 | - //计算两点校正的斜率 | ||
849 | - JZIrcLib_TPC_Slope_Calculation(dealInfo); | 624 | + if (dealInfo->TPC_ResetFlag == JZ_FLAGCODE_ON) |
625 | + { | ||
626 | + //计算两点校正的斜率 | ||
627 | + JZIrcLib_TPC_Slope_Calculation2(dealInfo); | ||
628 | + } | ||
850 | 629 | ||
851 | //对数据进行两点校正 | 630 | //对数据进行两点校正 |
852 | ret = JZIrcLib_TPC(u16_CorrentData, dealInfo); | 631 | ret = JZIrcLib_TPC(u16_CorrentData, dealInfo); |
@@ -32,7 +32,7 @@ typedef enum CameraParam | @@ -32,7 +32,7 @@ typedef enum CameraParam | ||
32 | CAMERA_CORRCTION_MODE = 0x000004, //纠正模式 | 32 | CAMERA_CORRCTION_MODE = 0x000004, //纠正模式 |
33 | CAMERA_GAS_ENHANCEMENT_COLOR = 0x000005, //气体增强颜色 | 33 | CAMERA_GAS_ENHANCEMENT_COLOR = 0x000005, //气体增强颜色 |
34 | CAMERA_GAS_ENHANCEMENT_CORRCTION = 0x000006, //气体增强纠正 | 34 | CAMERA_GAS_ENHANCEMENT_CORRCTION = 0x000006, //气体增强纠正 |
35 | - | 35 | + CAMERA_RESIZE= 0x000007, //相机缩放图像 |
36 | }CameraParam; | 36 | }CameraParam; |
37 | 37 | ||
38 | typedef enum IRC_CorrectionMode | 38 | typedef enum IRC_CorrectionMode |
@@ -10,7 +10,7 @@ | @@ -10,7 +10,7 @@ | ||
10 | 10 | ||
11 | #include "JZsdkLib.h" | 11 | #include "JZsdkLib.h" |
12 | 12 | ||
13 | -// 将RGB888格式转换为YUV420P格式 | 13 | +// 将RGB888格式转换为YUV420P格(I420) |
14 | T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height, U8_t *yuv_data) | 14 | T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height, U8_t *yuv_data) |
15 | { | 15 | { |
16 | // YUV420P格式的大小:Y平面后面跟着U和V平面,它们的高度和宽度都是原图像的一半 | 16 | // YUV420P格式的大小:Y平面后面跟着U和V平面,它们的高度和宽度都是原图像的一半 |
@@ -55,6 +55,80 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height | @@ -55,6 +55,80 @@ T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height | ||
55 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 55 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
56 | } | 56 | } |
57 | 57 | ||
58 | +//rgb888 转yuv420sp(NV12) | ||
59 | +T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int height, U8_t *yuv_data) | ||
60 | +{ | ||
61 | + // YUV420SP(NV12)格式的大小:Y平面后面跟着一个交织的UV平面 | ||
62 | + int y_size = width * height; | ||
63 | + int uv_size = (width / 2) * (height / 2) * 2; // UV平面交织存储,所以大小是U或V平面的两倍 | ||
64 | + | ||
65 | + // YUV420SP的各个平面 | ||
66 | + U8_t *y_plane = yuv_data; | ||
67 | + U8_t *uv_plane = yuv_data + y_size; | ||
68 | + | ||
69 | + // 用于存储每个2x2块的U和V值的临时变量 | ||
70 | + int u_temp = 0, v_temp = 0; | ||
71 | + int u_count = 0, v_count = 0; | ||
72 | + | ||
73 | + // RGB888到YUV420SP的转换 | ||
74 | + for (int j = 0; j < height; j++) { | ||
75 | + for (int i = 0; i < width; i++) { | ||
76 | + // 计算Y分量的索引 | ||
77 | + int y_idx = j * width + i; | ||
78 | + | ||
79 | + // 提取RGB分量 | ||
80 | + U8_t r = rgb_data[y_idx * 3]; | ||
81 | + U8_t g = rgb_data[y_idx * 3 + 1]; | ||
82 | + U8_t b = rgb_data[y_idx * 3 + 2]; | ||
83 | + | ||
84 | + // 将RGB转换为YUV | ||
85 | + int y = ((66 * r + 129 * g + 25 * b + 128) >> 8); | ||
86 | + int u = ((-38 * r - 74 * g + 112 * b + 128) >> 8) + 128; | ||
87 | + int v = ((112 * r - 94 * g - 18 * b + 128) >> 8) + 128; | ||
88 | + | ||
89 | + // 存储Y分量 | ||
90 | + y_plane[y_idx] = (U8_t)y; | ||
91 | + | ||
92 | + // 对于U和V分量,我们每4个RGB像素(2x2块)存储一次 | ||
93 | + if ((i & 1) == 0 && (j & 1) == 0) { | ||
94 | + // 初始化临时变量(对于每个2x2块的第一个像素) | ||
95 | + u_temp = u; | ||
96 | + v_temp = v; | ||
97 | + u_count = 0; | ||
98 | + v_count = 0; | ||
99 | + } | ||
100 | + | ||
101 | + // 更新UV计数器和临时变量(对于2x2块中的每个像素) | ||
102 | + u_count++; | ||
103 | + v_count++; | ||
104 | + | ||
105 | + // 在2x2块的右下角像素处存储U和V分量 | ||
106 | + if (u_count == 2 && v_count == 2) { | ||
107 | + // 计算UV分量的索引(交织存储) | ||
108 | + int uv_idx = ((j / 2) * (width / 2) + (i / 2)) * 2; | ||
109 | + | ||
110 | + // 存储U分量 | ||
111 | + uv_plane[uv_idx] = (U8_t)u_temp; | ||
112 | + | ||
113 | + // 存储V分量 | ||
114 | + uv_plane[uv_idx + 1] = (U8_t)v_temp; | ||
115 | + | ||
116 | + // 重置临时变量和计数器(为下一个2x2块做准备) | ||
117 | + u_temp = 0; | ||
118 | + v_temp = 0; | ||
119 | + u_count = 0; | ||
120 | + v_count = 0; | ||
121 | + } | ||
122 | + } | ||
123 | + } | ||
124 | + | ||
125 | + // 注意:如果图像的宽度或高度不是偶数,上面的代码可能无法正确处理最后一行或一列。 | ||
126 | + // 在实际应用中,通常需要确保图像的尺寸是2的倍数,或者添加适当的边界处理代码。 | ||
127 | + | ||
128 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
129 | +} | ||
130 | + | ||
131 | + | ||
58 | /************************* | 132 | /************************* |
59 | * | 133 | * |
60 | * /rgb888图片画框 | 134 | * /rgb888图片画框 |
@@ -26,6 +26,7 @@ extern "C" { | @@ -26,6 +26,7 @@ extern "C" { | ||
26 | 26 | ||
27 | /* Exported functions --------------------------------------------------------*/ | 27 | /* Exported functions --------------------------------------------------------*/ |
28 | T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height, U8_t *yuv_data); | 28 | T_JZsdkReturnCode Stream_rgb888_to_yuv420p(U8_t *rgb_data, int width, int height, U8_t *yuv_data); |
29 | +T_JZsdkReturnCode Stream_rgb888_to_yuv420sp(U8_t *rgb_data, int width, int height, U8_t *yuv_data); | ||
29 | T_JZsdkReturnCode Stream_rgb888_WriteRectangle(U8_t *rgb_data, int width, int height, int Point1_X, int Point1_Y, int Point2_X, int Point2_Y, int R_Color,int G_Color, int B_Color, int DrawWidth); | 30 | T_JZsdkReturnCode Stream_rgb888_WriteRectangle(U8_t *rgb_data, int width, int height, int Point1_X, int Point1_Y, int Point2_X, int Point2_Y, int R_Color,int G_Color, int B_Color, int DrawWidth); |
30 | T_JZsdkReturnCode Stream_rgb888_WriteCross(U8_t *rgb_data, int width, int height, int PointX, int PointY, int R_Color,int G_Color, int B_Color, int DrawWidth, int DrawHeight); | 31 | T_JZsdkReturnCode Stream_rgb888_WriteCross(U8_t *rgb_data, int width, int height, int PointX, int PointY, int R_Color,int G_Color, int B_Color, int DrawWidth, int DrawHeight); |
31 | 32 |
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | #include "JZsdkLib.h" | 7 | #include "JZsdkLib.h" |
8 | #include "./RTK_mmp_dec.h" | 8 | #include "./RTK_mmp_dec.h" |
9 | 9 | ||
10 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | 10 | +#ifdef RTK_MPP_STATUS_ON |
11 | #include "rockchip/mpp_common.h" //这个.h能在mpp的源码中找到 | 11 | #include "rockchip/mpp_common.h" //这个.h能在mpp的源码中找到 |
12 | #include "rockchip/mpp_packet.h" | 12 | #include "rockchip/mpp_packet.h" |
13 | #include "rockchip/rk_mpi.h" | 13 | #include "rockchip/rk_mpi.h" |
@@ -93,39 +93,39 @@ void dump_frame(MppFrame frame, FILE *out_fp) | @@ -93,39 +93,39 @@ void dump_frame(MppFrame frame, FILE *out_fp) | ||
93 | 93 | ||
94 | } | 94 | } |
95 | 95 | ||
96 | -void dump_frame_to_file(MppCtx ctx, MppApi *mpi, MppFrame frame, FILE *out_fp) | ||
97 | -{ | ||
98 | - printf("decode_and_dump_to_file\n"); | ||
99 | - | ||
100 | - MPP_RET ret; | ||
101 | - | ||
102 | - if (mpp_frame_get_info_change(frame)) { | ||
103 | - printf("mpp_frame_get_info_change\n"); | ||
104 | - /** | ||
105 | - * 第一次解码会到这个分支,需要为解码器设置缓冲区. | ||
106 | - * 解码器缓冲区支持3种模式。参考【图像内存分配以及交互模式】Rockchip_Developer_Guide_MPP_CN.pdf | ||
107 | - * 这里使用纯内部模式。 | ||
108 | - */ | ||
109 | - ret = mpi->control(ctx, MPP_DEC_SET_INFO_CHANGE_READY, NULL); | ||
110 | - if (ret) { | ||
111 | - printf("mpp_frame_get_info_change mpi->control error" | ||
112 | - "MPP_DEC_SET_INFO_CHANGE_READY %d\n", ret); | ||
113 | - } | ||
114 | - return; | ||
115 | - } | ||
116 | - | ||
117 | - RK_U32 err_info = mpp_frame_get_errinfo(frame); | ||
118 | - RK_U32 discard = mpp_frame_get_discard(frame); | ||
119 | - printf("err_info: %u discard: %u\n", err_info, discard); | ||
120 | - | ||
121 | - if (err_info) { | ||
122 | - return; | ||
123 | - } | 96 | +// void dump_frame_to_file(MppCtx ctx, MppApi *mpi, MppFrame frame, FILE *out_fp) |
97 | +// { | ||
98 | +// printf("decode_and_dump_to_file\n"); | ||
99 | + | ||
100 | +// MPP_RET ret; | ||
101 | + | ||
102 | +// if (mpp_frame_get_info_change(frame)) { | ||
103 | +// printf("mpp_frame_get_info_change\n"); | ||
104 | +// /** | ||
105 | +// * 第一次解码会到这个分支,需要为解码器设置缓冲区. | ||
106 | +// * 解码器缓冲区支持3种模式。参考【图像内存分配以及交互模式】Rockchip_Developer_Guide_MPP_CN.pdf | ||
107 | +// * 这里使用纯内部模式。 | ||
108 | +// */ | ||
109 | +// ret = mpi->control(ctx, MPP_DEC_SET_INFO_CHANGE_READY, NULL); | ||
110 | +// if (ret) { | ||
111 | +// printf("mpp_frame_get_info_change mpi->control error" | ||
112 | +// "MPP_DEC_SET_INFO_CHANGE_READY %d\n", ret); | ||
113 | +// } | ||
114 | +// return; | ||
115 | +// } | ||
116 | + | ||
117 | +// RK_U32 err_info = mpp_frame_get_errinfo(frame); | ||
118 | +// RK_U32 discard = mpp_frame_get_discard(frame); | ||
119 | +// printf("err_info: %u discard: %u\n", err_info, discard); | ||
120 | + | ||
121 | +// if (err_info) { | ||
122 | +// return; | ||
123 | +// } | ||
124 | 124 | ||
125 | - // save | ||
126 | - dump_frame(frame, out_fp); | ||
127 | - return; | ||
128 | -} | 125 | +// // save |
126 | +// dump_frame(frame, out_fp); | ||
127 | +// return; | ||
128 | +// } | ||
129 | 129 | ||
130 | 130 | ||
131 | //rtk解码器初始化 | 131 | //rtk解码器初始化 |
@@ -298,8 +298,10 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | @@ -298,8 +298,10 @@ T_JZsdkReturnCode RTK_mmp_dec_Init(void **index, MppCodingType int_type, MppFram | ||
298 | } | 298 | } |
299 | 299 | ||
300 | //输出的码流格式 | 300 | //输出的码流格式 |
301 | - param = &out_format; | ||
302 | - ret = DecConfigInput->mpi->control(DecConfigInput->ctx, MPP_DEC_SET_OUTPUT_FORMAT, param); | 301 | + //param = &out_format; |
302 | + //也不知道为什么只能设420sp没法设420p | ||
303 | + MppFrameFormat format = out_format; | ||
304 | + ret = DecConfigInput->mpi->control(DecConfigInput->ctx, MPP_DEC_SET_OUTPUT_FORMAT, &format); | ||
303 | if (ret == MPP_OK) | 305 | if (ret == MPP_OK) |
304 | { | 306 | { |
305 | printf("输出格式正确\n"); | 307 | printf("输出格式正确\n"); |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | 3 | ||
4 | #include "version_choose.h" | 4 | #include "version_choose.h" |
5 | 5 | ||
6 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | 6 | +#ifdef RTK_MPP_STATUS_ON |
7 | 7 | ||
8 | #include "rockchip/rk_type.h" | 8 | #include "rockchip/rk_type.h" |
9 | #include "rockchip/mpp_frame.h" | 9 | #include "rockchip/mpp_frame.h" |
@@ -5,7 +5,7 @@ | @@ -5,7 +5,7 @@ | ||
5 | #include "JZsdkLib.h" | 5 | #include "JZsdkLib.h" |
6 | #include "./RTK_mmp_enc.h" | 6 | #include "./RTK_mmp_enc.h" |
7 | 7 | ||
8 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | 8 | +#ifdef RTK_MPP_STATUS_ON |
9 | #include "rockchip/mpp_packet.h" | 9 | #include "rockchip/mpp_packet.h" |
10 | #include "rockchip/rk_mpi.h" | 10 | #include "rockchip/rk_mpi.h" |
11 | #include "rockchip/mpp_env.h" //这个.h能在mpp的源码中找到 | 11 | #include "rockchip/mpp_env.h" //这个.h能在mpp的源码中找到 |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | 3 | ||
4 | #include "version_choose.h" | 4 | #include "version_choose.h" |
5 | 5 | ||
6 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | 6 | +#ifdef RTK_MPP_STATUS_ON |
7 | 7 | ||
8 | #include "rockchip/rk_type.h" | 8 | #include "rockchip/rk_type.h" |
9 | #include "rockchip/mpp_frame.h" | 9 | #include "rockchip/mpp_frame.h" |
@@ -58,7 +58,7 @@ void **JZsdk_RtkMmpGetEncHandleAddr(int CameraIndex) | @@ -58,7 +58,7 @@ void **JZsdk_RtkMmpGetEncHandleAddr(int CameraIndex) | ||
58 | //昆腾相机设置下一帧为I帧 | 58 | //昆腾相机设置下一帧为I帧 |
59 | T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex) | 59 | T_JZsdkReturnCode JZsdk_Kt_CamMMPenc_SetNextFrame_IDR(int CameraIndex) |
60 | { | 60 | { |
61 | -#if RTK_MPP_STATUS == VERSION_SWITCH_ON | 61 | +#ifdef RTK_MPP_STATUS_ON |
62 | if (CameraIndex == 0) | 62 | if (CameraIndex == 0) |
63 | { | 63 | { |
64 | RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(0)); | 64 | RTK_mmp_enc_SetNextFrame_IDR(JZsdk_RtkMmpGetEncHandleAddr(0)); |
Module/MediaProc/RgaProc/RK_Rga/RK_Rga.c
0 → 100644
1 | + | ||
2 | +#include <stdint.h> | ||
3 | +#include <stdlib.h> | ||
4 | +#include <stdio.h> | ||
5 | +#include <string.h> | ||
6 | + | ||
7 | +#include "BaseConfig.h" | ||
8 | +#include "JZsdkLib.h" | ||
9 | + | ||
10 | +#include "./RK_Rga.h" | ||
11 | +#include "MediaProc/RgaProc/RgaParam.h" | ||
12 | + | ||
13 | +#ifdef RTK_RGA_STATUS_ON | ||
14 | + | ||
15 | +float get_bpp_from_format(int format) | ||
16 | +{ | ||
17 | + float bpp = 0; | ||
18 | + | ||
19 | + switch (format) | ||
20 | + { | ||
21 | + case RK_FORMAT_RGBA2BPP: | ||
22 | + return 0.25; | ||
23 | + case RK_FORMAT_Y4: | ||
24 | + bpp = 0.5; | ||
25 | + break; | ||
26 | + case RK_FORMAT_BPP1: | ||
27 | + case RK_FORMAT_BPP2: | ||
28 | + case RK_FORMAT_BPP4: | ||
29 | + case RK_FORMAT_BPP8: | ||
30 | + case RK_FORMAT_YCbCr_400: | ||
31 | + bpp = 1; | ||
32 | + break; | ||
33 | + case RK_FORMAT_YCbCr_420_SP: | ||
34 | + case RK_FORMAT_YCbCr_420_P: | ||
35 | + case RK_FORMAT_YCrCb_420_P: | ||
36 | + case RK_FORMAT_YCrCb_420_SP: | ||
37 | + bpp = 1.5; | ||
38 | + break; | ||
39 | + case RK_FORMAT_RGB_565: | ||
40 | + case RK_FORMAT_RGBA_5551: | ||
41 | + case RK_FORMAT_RGBA_4444: | ||
42 | + case RK_FORMAT_BGR_565: | ||
43 | + case RK_FORMAT_BGRA_5551: | ||
44 | + case RK_FORMAT_BGRA_4444: | ||
45 | + case RK_FORMAT_ARGB_5551: | ||
46 | + case RK_FORMAT_ARGB_4444: | ||
47 | + case RK_FORMAT_ABGR_5551: | ||
48 | + case RK_FORMAT_ABGR_4444: | ||
49 | + case RK_FORMAT_YCbCr_422_SP: | ||
50 | + case RK_FORMAT_YCbCr_422_P: | ||
51 | + case RK_FORMAT_YCrCb_422_SP: | ||
52 | + case RK_FORMAT_YCrCb_422_P: | ||
53 | + /* yuyv */ | ||
54 | + case RK_FORMAT_YVYU_422: | ||
55 | + case RK_FORMAT_VYUY_422: | ||
56 | + case RK_FORMAT_YUYV_422: | ||
57 | + case RK_FORMAT_UYVY_422: | ||
58 | + case RK_FORMAT_YVYU_420: | ||
59 | + case RK_FORMAT_VYUY_420: | ||
60 | + case RK_FORMAT_YUYV_420: | ||
61 | + case RK_FORMAT_UYVY_420: | ||
62 | + bpp = 2; | ||
63 | + break; | ||
64 | + /*RK encoder requires alignment of odd multiples of 256.*/ | ||
65 | + /*Here bpp=2 guarantee to read complete data.*/ | ||
66 | + case RK_FORMAT_YCbCr_420_SP_10B: | ||
67 | + case RK_FORMAT_YCrCb_420_SP_10B: | ||
68 | + bpp = 2; | ||
69 | + break; | ||
70 | + case RK_FORMAT_YCbCr_422_10b_SP: | ||
71 | + case RK_FORMAT_YCrCb_422_10b_SP: | ||
72 | + bpp = 2.5; | ||
73 | + break; | ||
74 | + case RK_FORMAT_BGR_888: | ||
75 | + case RK_FORMAT_RGB_888: | ||
76 | + bpp = 3; | ||
77 | + break; | ||
78 | + case RK_FORMAT_RGBA_8888: | ||
79 | + case RK_FORMAT_RGBX_8888: | ||
80 | + case RK_FORMAT_BGRA_8888: | ||
81 | + case RK_FORMAT_BGRX_8888: | ||
82 | + case RK_FORMAT_ARGB_8888: | ||
83 | + case RK_FORMAT_XRGB_8888: | ||
84 | + case RK_FORMAT_ABGR_8888: | ||
85 | + case RK_FORMAT_XBGR_8888: | ||
86 | + bpp = 4; | ||
87 | + break; | ||
88 | + default: | ||
89 | + printf("Is unsupport format now, please fix \n"); | ||
90 | + return 0; | ||
91 | + } | ||
92 | + | ||
93 | + return bpp; | ||
94 | +} | ||
95 | + | ||
96 | +T_JZsdkReturnCode RK_Rga_ImageInit(struct RK_RgaImage **RgaImage, int width, int height, int format, | ||
97 | + int Rect_x, int Rect_y, int Rect_w, int Rect_h) | ||
98 | +{ | ||
99 | + if ((*RgaImage) != NULL) | ||
100 | + { | ||
101 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
102 | + } | ||
103 | + | ||
104 | + (*RgaImage) = (struct RK_RgaImage *)malloc(sizeof(struct RK_RgaImage)); | ||
105 | + if ((*RgaImage) == NULL) | ||
106 | + { | ||
107 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
108 | + } | ||
109 | + | ||
110 | + (*RgaImage)->width = width; | ||
111 | + (*RgaImage)->height = height; | ||
112 | + (*RgaImage)->format = format; | ||
113 | + | ||
114 | + | ||
115 | + (*RgaImage)->buf_size = width * height * get_bpp_from_format(format); | ||
116 | + (*RgaImage)->buf = (unsigned char *)malloc((*RgaImage)->buf_size * sizeof(unsigned char)); | ||
117 | + if ((*RgaImage)->buf == NULL) | ||
118 | + { | ||
119 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
120 | + } | ||
121 | + | ||
122 | + (*RgaImage)->handle_param.width = width; | ||
123 | + (*RgaImage)->handle_param.height = height; | ||
124 | + (*RgaImage)->handle_param.format = format; | ||
125 | + | ||
126 | + (*RgaImage)->handle = importbuffer_virtualaddr((*RgaImage)->buf, &(*RgaImage)->handle_param); | ||
127 | + if ((*RgaImage)->handle == 0) | ||
128 | + { | ||
129 | + printf("importbuffer_virtualaddr failed\n"); | ||
130 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
131 | + } | ||
132 | + | ||
133 | + memset(&(*RgaImage)->img, 0, sizeof((*RgaImage)->img)); | ||
134 | + (*RgaImage)->img = wrapbuffer_handle((*RgaImage)->handle, (*RgaImage)->width, (*RgaImage)->height, (*RgaImage)->format); | ||
135 | + | ||
136 | + (*RgaImage)->rect.x = Rect_x; | ||
137 | + (*RgaImage)->rect.y = Rect_y; | ||
138 | + (*RgaImage)->rect.width = Rect_w; | ||
139 | + (*RgaImage)->rect.height = Rect_h; | ||
140 | + | ||
141 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
142 | +} | ||
143 | + | ||
144 | +T_JZsdkReturnCode RK_Rga_ImageDeInit(struct RK_RgaImage **RgaImage) | ||
145 | +{ | ||
146 | + if ((*RgaImage)->handle != 0) | ||
147 | + { | ||
148 | + releasebuffer_handle((*RgaImage)->handle); | ||
149 | + (*RgaImage)->handle = 0; | ||
150 | + } | ||
151 | + | ||
152 | + if ((*RgaImage)->buf != NULL) | ||
153 | + { | ||
154 | + free((*RgaImage)->buf); | ||
155 | + (*RgaImage)->buf = NULL; | ||
156 | + } | ||
157 | + | ||
158 | + if((*RgaImage) != NULL) | ||
159 | + { | ||
160 | + free((*RgaImage)); | ||
161 | + (*RgaImage) = NULL; | ||
162 | + } | ||
163 | + | ||
164 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
165 | +} | ||
166 | + | ||
167 | +#endif |
Module/MediaProc/RgaProc/RK_Rga/RK_Rga.h
0 → 100644
1 | +#ifndef RK_RGA_H | ||
2 | +#define RK_RGA_H | ||
3 | + | ||
4 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
5 | +#include "BaseConfig.h" | ||
6 | + | ||
7 | +#ifdef RTK_RGA_STATUS_ON | ||
8 | + | ||
9 | +#include "rga.h" | ||
10 | +#include "RgaUtils.h" | ||
11 | +#include "im2d.hpp" | ||
12 | +#include "im2d_type.h" | ||
13 | + | ||
14 | +typedef struct RK_RgaImage | ||
15 | +{ | ||
16 | + int width; //图像的宽度 | ||
17 | + int height; //图像的高度 | ||
18 | + int format; //图像的格式 | ||
19 | + unsigned char *buf; //图像的缓冲区 | ||
20 | + int buf_size; //图像缓冲区的大小 | ||
21 | + | ||
22 | + rga_buffer_t img; //图像处理区 | ||
23 | + rga_buffer_handle_t handle; //图像处理区句柄 | ||
24 | + im_handle_param_t handle_param; //图像处理区参数 | ||
25 | + | ||
26 | + im_rect rect; //处理的区域 | ||
27 | +}RK_RgaImage; | ||
28 | + | ||
29 | + | ||
30 | +T_JZsdkReturnCode RK_Rga_ImageInit(struct RK_RgaImage **RgaImage, int width, int height, int format, | ||
31 | + int Rect_x, int Rect_y, int Rect_w, int Rect_h); | ||
32 | + | ||
33 | +T_JZsdkReturnCode RK_Rga_ImageDeInit(struct RK_RgaImage **RgaImage); | ||
34 | + | ||
35 | +#endif | ||
36 | + | ||
37 | +#endif |
Module/MediaProc/RgaProc/RgaParam.h
0 → 100644
1 | +#ifndef RGA_PARAM_H | ||
2 | +#define RGA_PARAM_H | ||
3 | + | ||
4 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
5 | +#include "BaseConfig.h" | ||
6 | + | ||
7 | +typedef enum RGA_PARAM_PROCESSING_TYPE | ||
8 | +{ | ||
9 | + RGA_NO_PROCESSING = 0x0000, //无处理类型 | ||
10 | + RGA_CROP = 0x0001, //裁剪类型 | ||
11 | + RGA_RESIZE = 0x0002, //缩放类型 | ||
12 | + | ||
13 | +}RGA_PARAM_PROCESSING_TYPE; | ||
14 | + | ||
15 | +#endif |
@@ -764,7 +764,7 @@ T_JZsdkReturnCode Megaphone_RealTimeMP2_trans(unsigned char *getdata, int len) | @@ -764,7 +764,7 @@ T_JZsdkReturnCode Megaphone_RealTimeMP2_trans(unsigned char *getdata, int len) | ||
764 | * | 764 | * |
765 | **********/ | 765 | **********/ |
766 | T_JZsdkReturnCode Megaphone_RealTimeMP2_stop() | 766 | T_JZsdkReturnCode Megaphone_RealTimeMP2_stop() |
767 | -{ | 767 | +{ |
768 | //关闭MP2实时喊话 | 768 | //关闭MP2实时喊话 |
769 | T_JZsdkReturnCode ret = RealTimeMP2_Close(); | 769 | T_JZsdkReturnCode ret = RealTimeMP2_Close(); |
770 | if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 770 | if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
@@ -96,6 +96,8 @@ T_JZsdkReturnCode RealTimeMP2_start() | @@ -96,6 +96,8 @@ T_JZsdkReturnCode RealTimeMP2_start() | ||
96 | return ret; | 96 | return ret; |
97 | } | 97 | } |
98 | 98 | ||
99 | + JZSDK_LOG_INFO("MP2实时喊话初始化成功"); | ||
100 | + | ||
99 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 101 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
100 | } | 102 | } |
101 | 103 | ||
@@ -130,6 +132,9 @@ T_JZsdkReturnCode RealTimeMP2_Close() | @@ -130,6 +132,9 @@ T_JZsdkReturnCode RealTimeMP2_Close() | ||
130 | int amplifier = JZ_FLAGCODE_OFF; | 132 | int amplifier = JZ_FLAGCODE_OFF; |
131 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &lifier); | 133 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &lifier); |
132 | 134 | ||
135 | + //关闭音频库 | ||
136 | + AudioDeal_StopDeal(); | ||
137 | + | ||
133 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 138 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
134 | } | 139 | } |
135 | 140 | ||
@@ -164,9 +169,14 @@ static T_JZsdkReturnCode RealTimeMP2_Play_init() | @@ -164,9 +169,14 @@ static T_JZsdkReturnCode RealTimeMP2_Play_init() | ||
164 | //解码并播放 | 169 | //解码并播放 |
165 | static T_JZsdkReturnCode RealTimeMP2_PlayData(unsigned char *data,int len) | 170 | static T_JZsdkReturnCode RealTimeMP2_PlayData(unsigned char *data,int len) |
166 | { | 171 | { |
167 | - AudioDeal_Mp3DataInput(8000, data, len); | 172 | + unsigned char playFile[len]; |
173 | + | ||
174 | + //清空 | ||
175 | + memset(playFile, 0, len); | ||
176 | + | ||
177 | + memcpy(playFile, data, len); | ||
168 | 178 | ||
169 | - printf("播放结束\n"); | 179 | + AudioDeal_Mp3DataInput(8000, playFile, len); |
170 | 180 | ||
171 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 181 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
172 | } | 182 | } |
@@ -196,7 +206,7 @@ static void *RealTimeMP2_LoopPlay(void *arg) | @@ -196,7 +206,7 @@ static void *RealTimeMP2_LoopPlay(void *arg) | ||
196 | { | 206 | { |
197 | if(RealTimeMP2_PlayData_LoopHead!=RealTimeMP2_PlayData_LoopEnd) | 207 | if(RealTimeMP2_PlayData_LoopHead!=RealTimeMP2_PlayData_LoopEnd) |
198 | { | 208 | { |
199 | - printf("播放线程执行中\n"); | 209 | + //printf("播放线程执行中\n"); |
200 | 210 | ||
201 | ret = RealTimeMP2_PlayData(RealTimeMP2_PlayData_Loop[RealTimeMP2_PlayData_LoopHead],128); | 211 | ret = RealTimeMP2_PlayData(RealTimeMP2_PlayData_Loop[RealTimeMP2_PlayData_LoopHead],128); |
202 | RealTimeMP2_PlayData_LoopHead++; | 212 | RealTimeMP2_PlayData_LoopHead++; |
@@ -274,7 +284,7 @@ static void *RealTimeMP2_WriteData_Task(void *arg) | @@ -274,7 +284,7 @@ static void *RealTimeMP2_WriteData_Task(void *arg) | ||
274 | { | 284 | { |
275 | 285 | ||
276 | int ret; | 286 | int ret; |
277 | - printf("MP2实施喊话,输入数据缓冲线程建立\n"); | 287 | + JZSDK_LOG_DEBUG("MP2实施喊话,输入数据缓冲线程建立"); |
278 | RealTimeMP2_WriteFlag = JZ_FLAGCODE_ON; | 288 | RealTimeMP2_WriteFlag = JZ_FLAGCODE_ON; |
279 | 289 | ||
280 | while(RealTimeMP2_WriteFlag == JZ_FLAGCODE_ON) | 290 | while(RealTimeMP2_WriteFlag == JZ_FLAGCODE_ON) |
@@ -284,7 +294,7 @@ static void *RealTimeMP2_WriteData_Task(void *arg) | @@ -284,7 +294,7 @@ static void *RealTimeMP2_WriteData_Task(void *arg) | ||
284 | 294 | ||
285 | if(RealTimeMP2_WriteData_LoopHead!=RealTimeMP2_WriteData_LoopEnd) | 295 | if(RealTimeMP2_WriteData_LoopHead!=RealTimeMP2_WriteData_LoopEnd) |
286 | { | 296 | { |
287 | - printf("缓冲线程写入中\n"); | 297 | + //printf("缓冲线程写入中\n"); |
288 | 298 | ||
289 | //将输入缓冲池的数据放入播放缓冲池 | 299 | //将输入缓冲池的数据放入播放缓冲池 |
290 | RealTimeMP2_Put_WriteData_In_PlayLoop(); | 300 | RealTimeMP2_Put_WriteData_In_PlayLoop(); |
@@ -173,11 +173,15 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | @@ -173,11 +173,15 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | ||
173 | //转换 | 173 | //转换 |
174 | opus_int16 TempPcm[WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS]; | 174 | opus_int16 TempPcm[WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS]; |
175 | 175 | ||
176 | + | ||
177 | + | ||
176 | for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) | 178 | for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) |
177 | { | 179 | { |
178 | TempPcm[i] = out[i] & 0xFF | (out[i] >> 8) << 8; | 180 | TempPcm[i] = out[i] & 0xFF | (out[i] >> 8) << 8; |
179 | - TempPcm[i] = PcmNoiseReduction(TempPcm[i]); | ||
180 | 181 | ||
182 | +#if SPECIAL_VERSION == SPECIAL_DAOTONG | ||
183 | + TempPcm[i] = PcmNoiseReduction(TempPcm[i]); | ||
184 | +#endif | ||
181 | pcm_bytes[2 * i] = TempPcm[i] & 0xFF; | 185 | pcm_bytes[2 * i] = TempPcm[i] & 0xFF; |
182 | pcm_bytes[2 * i + 1] = (TempPcm[i] >> 8) & 0xFF; | 186 | pcm_bytes[2 * i + 1] = (TempPcm[i] >> 8) & 0xFF; |
183 | } | 187 | } |
@@ -543,11 +547,15 @@ T_JZsdkReturnCode Opus_RealTimeVoice_Close() | @@ -543,11 +547,15 @@ T_JZsdkReturnCode Opus_RealTimeVoice_Close() | ||
543 | 547 | ||
544 | JZSDK_LOG_DEBUG("解码器释放完毕"); | 548 | JZSDK_LOG_DEBUG("解码器释放完毕"); |
545 | 549 | ||
550 | + //产生标志位 | ||
546 | Megaphone_MegDataGenFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_OFF); | 551 | Megaphone_MegDataGenFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_OFF); |
547 | Megaphone_MegDataGenFinshFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_OFF); | 552 | Megaphone_MegDataGenFinshFlag(JZ_FLAGCODE_SET, JZ_FLAGCODE_OFF); |
548 | 553 | ||
549 | int amplifier = JZ_FLAGCODE_OFF; | 554 | int amplifier = JZ_FLAGCODE_OFF; |
550 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &lifier); | 555 | Megaphone_Amplifier_param(JZ_FLAGCODE_SET, &lifier); |
551 | 556 | ||
557 | + //关闭音频库 | ||
558 | + AudioDeal_StopDeal(); | ||
559 | + | ||
552 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 560 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
553 | } | 561 | } |
@@ -230,6 +230,7 @@ static T_JZsdkReturnCode UI_control_WidgetSet(int type, int value) | @@ -230,6 +230,7 @@ static T_JZsdkReturnCode UI_control_WidgetSet(int type, int value) | ||
230 | case JZSDK_WIDGET_SPC_AUTO_TIME: | 230 | case JZSDK_WIDGET_SPC_AUTO_TIME: |
231 | case JZSDK_WIDGET_TPC_MODE: | 231 | case JZSDK_WIDGET_TPC_MODE: |
232 | case JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE: | 232 | case JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE: |
233 | + case JZSDK_WIDGET_ZOOM_SIZE: | ||
233 | UI_control_WidgetArraySet(index, value); | 234 | UI_control_WidgetArraySet(index, value); |
234 | break; | 235 | break; |
235 | 236 | ||
@@ -1329,6 +1330,24 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PixelColorMode(int wheather_ChangeWidget, | @@ -1329,6 +1330,24 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PixelColorMode(int wheather_ChangeWidget, | ||
1329 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1330 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
1330 | } | 1331 | } |
1331 | 1332 | ||
1333 | +// psdk 变焦 | ||
1334 | +T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_ZoomSize(int wheather_ChangeWidget, int wheather_control, int value) | ||
1335 | +{ | ||
1336 | + //如果修改控件 | ||
1337 | + if (wheather_ChangeWidget == JZ_FLAGCODE_ON) | ||
1338 | + { | ||
1339 | + UI_control_WidgetSet(JZSDK_WIDGET_ZOOM_SIZE, value); | ||
1340 | + } | ||
1341 | + | ||
1342 | + //如果进行控制 | ||
1343 | + if (wheather_control == JZ_FLAGCODE_ON) | ||
1344 | + { | ||
1345 | + UIcontrol_Set_ZoomSize(DEVICE_PSDK, value); | ||
1346 | + } | ||
1347 | + | ||
1348 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1349 | +} | ||
1350 | + | ||
1332 | // psdk 气体增强颜色 | 1351 | // psdk 气体增强颜色 |
1333 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_GasEnhancementColor(int wheather_ChangeWidget, int wheather_control, int value) | 1352 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_GasEnhancementColor(int wheather_ChangeWidget, int wheather_control, int value) |
1334 | { | 1353 | { |
@@ -147,6 +147,8 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_ShutterSwitch(int wheather_ChangeWidget, | @@ -147,6 +147,8 @@ T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_ShutterSwitch(int wheather_ChangeWidget, | ||
147 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PseudoColor(int wheather_ChangeWidget, int wheather_control, int value); | 147 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PseudoColor(int wheather_ChangeWidget, int wheather_control, int value); |
148 | // psdk 像素色彩模式 | 148 | // psdk 像素色彩模式 |
149 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PixelColorMode(int wheather_ChangeWidget, int wheather_control, int value); | 149 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_PixelColorMode(int wheather_ChangeWidget, int wheather_control, int value); |
150 | +T_JZsdkReturnCode JZsdk_Psdk_UI_io_Set_ZoomSize(int wheather_ChangeWidget, int wheather_control, int value); | ||
151 | + | ||
150 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_BadPixelSwitch(int wheather_ChangeWidget, int wheather_control, int value); | 152 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_BadPixelSwitch(int wheather_ChangeWidget, int wheather_control, int value); |
151 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_SPC_ResetSwitch(int wheather_ChangeWidget, int wheather_control, int value); | 153 | T_JZsdkReturnCode JZsdk_Psdk_UI_io_Camera_SPC_ResetSwitch(int wheather_ChangeWidget, int wheather_control, int value); |
152 | 154 |
@@ -1957,6 +1957,30 @@ T_JZsdkReturnCode UIcontrol_Set_PixelColorMode(int DeviceName, int value) | @@ -1957,6 +1957,30 @@ T_JZsdkReturnCode UIcontrol_Set_PixelColorMode(int DeviceName, int value) | ||
1957 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1957 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
1958 | } | 1958 | } |
1959 | 1959 | ||
1960 | +/********************* | ||
1961 | + * | ||
1962 | + * 设置变焦尺寸 | ||
1963 | + * | ||
1964 | + * | ||
1965 | + * **************************/ | ||
1966 | +T_JZsdkReturnCode UIcontrol_Set_ZoomSize(int DeviceName, int value) | ||
1967 | +{ | ||
1968 | + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
1969 | +#if MEDIA_PROC_CONFIG_STATUS == VERSION_SWITCH_ON | ||
1970 | + | ||
1971 | + //1、设置变焦值 | ||
1972 | + ret = Camera_param(JZ_FLAGCODE_SET, CAMERA_RESIZE, &value); | ||
1973 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
1974 | + { | ||
1975 | + return ret; | ||
1976 | + } | ||
1977 | + | ||
1978 | + //无须另外通知其他设备变化 | ||
1979 | + | ||
1980 | +#endif | ||
1981 | + return ret; | ||
1982 | +} | ||
1983 | + | ||
1960 | /********* | 1984 | /********* |
1961 | * | 1985 | * |
1962 | * 气体增强的颜色 | 1986 | * 气体增强的颜色 |
@@ -109,6 +109,8 @@ T_JZsdkReturnCode UIcontrol_Camera_BadPixelSwitch(int DeviceName, int value); | @@ -109,6 +109,8 @@ T_JZsdkReturnCode UIcontrol_Camera_BadPixelSwitch(int DeviceName, int value); | ||
109 | T_JZsdkReturnCode UIcontrol_Camera_SPC_ResetSwitch(int DeviceName, int value); | 109 | T_JZsdkReturnCode UIcontrol_Camera_SPC_ResetSwitch(int DeviceName, int value); |
110 | T_JZsdkReturnCode UIcontrol_FreezeVideo(int DeviceName, int value); | 110 | T_JZsdkReturnCode UIcontrol_FreezeVideo(int DeviceName, int value); |
111 | T_JZsdkReturnCode UIcontrol_Set_PseudoColor(int DeviceName, int value); | 111 | T_JZsdkReturnCode UIcontrol_Set_PseudoColor(int DeviceName, int value); |
112 | +T_JZsdkReturnCode UIcontrol_Set_ZoomSize(int DeviceName, int value); | ||
113 | + | ||
112 | T_JZsdkReturnCode UIcontrol_Set_PixelColorMode(int DeviceName, int value); | 114 | T_JZsdkReturnCode UIcontrol_Set_PixelColorMode(int DeviceName, int value); |
113 | T_JZsdkReturnCode UIcontrol_CameraRegionbox(int DeviceName, int value1, int value2); | 115 | T_JZsdkReturnCode UIcontrol_CameraRegionbox(int DeviceName, int value1, int value2); |
114 | T_JZsdkReturnCode UIcontrol_CameraCorrectionMode(int DeviceName, int value); | 116 | T_JZsdkReturnCode UIcontrol_CameraCorrectionMode(int DeviceName, int value); |
@@ -69,8 +69,8 @@ static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value) | @@ -69,8 +69,8 @@ static int WidgetMgMT_Control_WorkFuntion(int Inscode, int value) | ||
69 | JZsdk_Psdk_UI_io_Set_PixelColorMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value); | 69 | JZsdk_Psdk_UI_io_Set_PixelColorMode(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value); |
70 | break; | 70 | break; |
71 | 71 | ||
72 | - case JZSDK_WIDGET_FOCAL_LENGTH: | ||
73 | - printf("未设置"); | 72 | + case JZSDK_WIDGET_ZOOM_SIZE: |
73 | + JZsdk_Psdk_UI_io_Set_ZoomSize(JZ_FLAGCODE_ON, JZ_FLAGCODE_ON, value); | ||
74 | break; | 74 | break; |
75 | 75 | ||
76 | case JZSDK_WIDGET_SPC_RESET: | 76 | case JZSDK_WIDGET_SPC_RESET: |
@@ -66,7 +66,7 @@ static T_JZsdkReturnCode JZSDK_WidgetMgMT_DJI_GetWidgetIndex(int tpye, int *inde | @@ -66,7 +66,7 @@ static T_JZsdkReturnCode JZSDK_WidgetMgMT_DJI_GetWidgetIndex(int tpye, int *inde | ||
66 | } | 66 | } |
67 | break; | 67 | break; |
68 | 68 | ||
69 | - case JZSDK_WIDGET_FOCAL_LENGTH: | 69 | + case JZSDK_WIDGET_ZOOM_SIZE: |
70 | { | 70 | { |
71 | ReturnIndex1 = 5; | 71 | ReturnIndex1 = 5; |
72 | } | 72 | } |
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | #include "gimbal_emu/test_payload_gimbal_emu.h" | 35 | #include "gimbal_emu/test_payload_gimbal_emu.h" |
36 | 36 | ||
37 | #include "Psdk_UI_io.h" | 37 | #include "Psdk_UI_io.h" |
38 | - | 38 | +#include "BaseConfig.h" |
39 | 39 | ||
40 | /* Private constants ---------------------------------------------------------*/ | 40 | /* Private constants ---------------------------------------------------------*/ |
41 | #define PAYLOAD_CAMERA_EMU_TASK_FREQ (100) | 41 | #define PAYLOAD_CAMERA_EMU_TASK_FREQ (100) |
@@ -50,8 +50,8 @@ | @@ -50,8 +50,8 @@ | ||
50 | #define ZOOM_DIGITAL_BASE_FACTOR (1.0) | 50 | #define ZOOM_DIGITAL_BASE_FACTOR (1.0) |
51 | #define ZOOM_DIGITAL_STEP_FACTOR (0.1) | 51 | #define ZOOM_DIGITAL_STEP_FACTOR (0.1) |
52 | #define ZOOM_DIGITAL_MAX_FACTOR (6.0) | 52 | #define ZOOM_DIGITAL_MAX_FACTOR (6.0) |
53 | -#define FOCUS_MAX_RINGVALUE (1000) | ||
54 | -#define FOCUS_MID_RINGVALUE (500) | 53 | +#define FOCUS_MAX_RINGVALUE (3) //0~3 |
54 | +#define FOCUS_MID_RINGVALUE (0) | ||
55 | #define IMAGE_SENSOR_X_SIZE (88.0f) // unit: 0.1mm | 55 | #define IMAGE_SENSOR_X_SIZE (88.0f) // unit: 0.1mm |
56 | #define IMAGE_SENSOR_Y_SIZE (66.0f) // unit: 0.1mm | 56 | #define IMAGE_SENSOR_Y_SIZE (66.0f) // unit: 0.1mm |
57 | #define CENTER_POINT_IN_SCREEN_X_VALUE (0.5f) | 57 | #define CENTER_POINT_IN_SCREEN_X_VALUE (0.5f) |
@@ -653,9 +653,13 @@ static T_DjiReturnCode GetFocusAssistantSettings(T_DjiCameraFocusAssistantSettin | @@ -653,9 +653,13 @@ static T_DjiReturnCode GetFocusAssistantSettings(T_DjiCameraFocusAssistantSettin | ||
653 | return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 653 | return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
654 | } | 654 | } |
655 | 655 | ||
656 | +//设置对焦值 | ||
656 | static T_DjiReturnCode SetFocusRingValue(uint32_t value) | 657 | static T_DjiReturnCode SetFocusRingValue(uint32_t value) |
657 | { | 658 | { |
658 | USER_LOG_INFO("set focus ring value:%d", value); | 659 | USER_LOG_INFO("set focus ring value:%d", value); |
660 | + | ||
661 | + //有x1~x16 | ||
662 | + UIcontrol_Set_ZoomSize(DEVICE_PSDK, value); | ||
659 | s_cameraFocusRingValue = value; | 663 | s_cameraFocusRingValue = value; |
660 | 664 | ||
661 | return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 665 | return DJI_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
@@ -69,6 +69,8 @@ extern int height_Volume_lock; | @@ -69,6 +69,8 @@ extern int height_Volume_lock; | ||
69 | extern int SpeakerWidgetUseLock; | 69 | extern int SpeakerWidgetUseLock; |
70 | extern char Jz_SerialNumber[128]; //设备序列号 | 70 | extern char Jz_SerialNumber[128]; //设备序列号 |
71 | extern float g_height_value; | 71 | extern float g_height_value; |
72 | +extern int Widget_RealTimeOpusFlag; //用于标志ui里的实时语音开关 | ||
73 | + | ||
72 | 74 | ||
73 | /* Private types -------------------------------------------------------------*/ | 75 | /* Private types -------------------------------------------------------------*/ |
74 | 76 | ||
@@ -253,7 +255,10 @@ T_DjiReturnCode DjiTest_WidgetStartService(void) | @@ -253,7 +255,10 @@ T_DjiReturnCode DjiTest_WidgetStartService(void) | ||
253 | if (JZsdk_check_file_exists("/root/ShakedownTest") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 255 | if (JZsdk_check_file_exists("/root/ShakedownTest") == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
254 | { | 256 | { |
255 | JZSDK_LOG_INFO("开启调试模式"); | 257 | JZSDK_LOG_INFO("开启调试模式"); |
256 | - JZsdk_delete_file("/root/ShakedownTest"); | 258 | + if(JZsdk_delete_file("/root/ShakedownTest") != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
259 | + { | ||
260 | + JZSDK_LOG_ERROR("关闭调试模式失败"); | ||
261 | + } | ||
257 | memset(curFileDirPath, 0, WIDGET_DIR_PATH_LEN_MAX); | 262 | memset(curFileDirPath, 0, WIDGET_DIR_PATH_LEN_MAX); |
258 | snprintf(curFileDirPath, WIDGET_DIR_PATH_LEN_MAX, "%s/debug",WIDGET_FILE_DIR); | 263 | snprintf(curFileDirPath, WIDGET_DIR_PATH_LEN_MAX, "%s/debug",WIDGET_FILE_DIR); |
259 | } | 264 | } |
@@ -556,12 +561,15 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | @@ -556,12 +561,15 @@ static T_JZsdkReturnCode Megphone_Widget(unsigned int index, unsigned int value) | ||
556 | 561 | ||
557 | switch(value){ | 562 | switch(value){ |
558 | case 0: | 563 | case 0: |
564 | + Widget_RealTimeOpusFlag = JZ_FLAGCODE_OFF; | ||
559 | Opus_PlayMode = 0; | 565 | Opus_PlayMode = 0; |
560 | break; | 566 | break; |
561 | case 1: | 567 | case 1: |
568 | + Widget_RealTimeOpusFlag = JZ_FLAGCODE_ON; | ||
562 | Opus_PlayMode = 1; | 569 | Opus_PlayMode = 1; |
563 | break; | 570 | break; |
564 | default: | 571 | default: |
572 | + Widget_RealTimeOpusFlag = JZ_FLAGCODE_OFF; | ||
565 | Opus_PlayMode = 0; | 573 | Opus_PlayMode = 0; |
566 | break; | 574 | break; |
567 | } | 575 | } |
@@ -806,20 +814,21 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value) | @@ -806,20 +814,21 @@ static T_JZsdkReturnCode Irc_Widget(unsigned int index, unsigned int value) | ||
806 | break; | 814 | break; |
807 | } | 815 | } |
808 | 816 | ||
817 | + //该功能移动到media管理中 | ||
809 | case 5://画面放大 | 818 | case 5://画面放大 |
810 | { | 819 | { |
811 | - if (value == 1) | ||
812 | - { | ||
813 | - EnlargeScreen+=1; | ||
814 | - if (EnlargeScreen >= 5) | ||
815 | - { | ||
816 | - EnlargeScreen = JZ_FLAGCODE_OFF; | ||
817 | - } | 820 | + // if (value == 1) |
821 | + // { | ||
822 | + // EnlargeScreen+=1; | ||
823 | + // if (EnlargeScreen >= 4) | ||
824 | + // { | ||
825 | + // EnlargeScreen = JZ_FLAGCODE_OFF; | ||
826 | + // } | ||
818 | 827 | ||
819 | - JZSDK_LOG_DEBUG("画面放大%d",EnlargeScreen); | 828 | + // JZSDK_LOG_DEBUG("画面变焦%d",EnlargeScreen); |
820 | 829 | ||
821 | - //JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_FOCAL_LENGTH, value); | ||
822 | - } | 830 | + // JZSDK_WidgetMgMT_ConrtrolInputTask(JZSDK_WIDGET_ZOOM_SIZE, value); |
831 | + // } | ||
823 | 832 | ||
824 | break; | 833 | break; |
825 | } | 834 | } |
-
请 注册 或 登录 后发表评论