正在显示
45 个修改的文件
包含
1341 行增加
和
420 行删除
| @@ -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,35 +21,62 @@ static const AVCodec *codec; | @@ -21,35 +21,62 @@ 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 | ||
| 57 | + JZSDK_LOG_INFO("file stream init complete"); | ||
| 58 | + | ||
| 59 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +//输入mp3的实时数据,以及本次数据的长度 | ||
| 63 | +T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, unsigned int in_sampleRate, unsigned char *data, int dataSize) | ||
| 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 | + | ||
| 77 | + //将数据输入到 | ||
| 78 | + while(databufSize > 0) | ||
| 79 | + { | ||
| 53 | //如果解码器不存在,初始化解码器 | 80 | //如果解码器不存在,初始化解码器 |
| 54 | if (!decoded_frame) | 81 | if (!decoded_frame) |
| 55 | { | 82 | { |
| @@ -59,14 +86,6 @@ int File_Stream_deal_Init(enum AVCodecID id) | @@ -59,14 +86,6 @@ int File_Stream_deal_Init(enum AVCodecID id) | ||
| 59 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 86 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 60 | } | 87 | } |
| 61 | } | 88 | } |
| 62 | -} | ||
| 63 | - | ||
| 64 | -//输入mp3的实时数据,以及本次数据的长度 | ||
| 65 | -T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, unsigned int in_sampleRate, unsigned char *data, int dataSize) | ||
| 66 | -{ | ||
| 67 | - //将数据输入到 | ||
| 68 | - while(dataSize > 0) | ||
| 69 | - { | ||
| 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 | 101 | ||
| 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 | - | ||
| 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); |
| @@ -135,6 +156,8 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | @@ -135,6 +156,8 @@ T_JZsdkReturnCode Stream_Player_decode(struct AudioDealInfo *AD_Info, AVCodecCon | ||
| 135 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 156 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 136 | } | 157 | } |
| 137 | 158 | ||
| 159 | + //printf("输出了:%d的数据\n",frame->nb_samples); | ||
| 160 | + | ||
| 138 | int out_nb_samples = 0; | 161 | int out_nb_samples = 0; |
| 139 | 162 | ||
| 140 | //重采样解码后的数据 | 163 | //重采样解码后的数据 |
| @@ -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 | + | ||
| 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; | ||
| 182 | } | 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; |
| 359 | + } | ||
| 360 | + dealInfo->TPC_Offset[i] = AvgSingleFrame_LowT - dealInfo->TPC_Gain[i] * dealInfo->LowT_NineFrame_Avg[i]; | ||
| 361 | + } | ||
| 362 | + } | ||
| 363 | +} | ||
| 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]; | ||
| 627 | } | 386 | } |
| 628 | - dealInfo->TPC_Diff[i] = AvgSingleFrame_LowT - dealInfo->TPC_Slope[i] * dealInfo->LowT_NineFrame_Avg[i]; | 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; | ||
| 629 | } | 402 | } |
| 630 | } | 403 | } |
| 404 | + | ||
| 405 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 631 | } | 406 | } |
| 632 | 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 | { |
| 624 | + if (dealInfo->TPC_ResetFlag == JZ_FLAGCODE_ON) | ||
| 625 | + { | ||
| 848 | //计算两点校正的斜率 | 626 | //计算两点校正的斜率 |
| 849 | - JZIrcLib_TPC_Slope_Calculation(dealInfo); | 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 | - } | ||
| 124 | - | ||
| 125 | - // save | ||
| 126 | - dump_frame(frame, out_fp); | ||
| 127 | - return; | ||
| 128 | -} | 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 | + | ||
| 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 |
| @@ -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 | } |
-
请 注册 或 登录 后发表评论