作者 ookk303

1、更新了红外相机kt库

2、更新了m30滤波
3、增加文件信息帧
4、修改了部分型号的音量
5、增加了外置的超时输入
6、增加了文件校验功能
7、优化了喊话器温控后音量跳转的问题
正在显示 47 个修改的文件 包含 2473 行增加780 行删除

要显示太多修改。

为保证性能只显示 47 of 47+ 个文件。

@@ -17,7 +17,30 @@ @@ -17,7 +17,30 @@
17 "jzsdk_uart_input.h": "c", 17 "jzsdk_uart_input.h": "c",
18 "jzsdk_inscode.h": "c", 18 "jzsdk_inscode.h": "c",
19 "psdk_ui_io.h": "c", 19 "psdk_ui_io.h": "c",
20 - "lighting_inandout.h": "c" 20 + "lighting_inandout.h": "c",
  21 + "pseudocolor.h": "c",
  22 + "sidelaser.h": "c",
  23 + "ktv330_cpp.h": "c",
  24 + "kt_irc_deal.h": "c",
  25 + "badpixelproc.h": "c",
  26 + "irc_funtion.h": "c",
  27 + "jzsdk_usb_bulk.h": "c",
  28 + "ircut.h": "c",
  29 + "irc_param.h": "c",
  30 + "ktlibproc.h": "c",
  31 + "mediaproc_param.h": "c",
  32 + "irc_data_deal.h": "c",
  33 + "jzsdk_returncode.h": "c",
  34 + "jzsdk_filetype.h": "c",
  35 + "jzsdk_widgetcode.h": "c",
  36 + "jzsdk_fs_standards.h": "c",
  37 + "audiofile_param.h": "c",
  38 + "checksum_src.h": "c",
  39 + "jzsdk_logger.h": "c",
  40 + "paramterparsing.h": "c",
  41 + "megtempcontrol.h": "c",
  42 + "jzsdk_uart_send.h": "c",
  43 + "espeak_tts.h": "c"
21 }, 44 },
22 "Codegeex.GenerationPreference": "automatic" 45 "Codegeex.GenerationPreference": "automatic"
23 } 46 }
1 # 编译链的配置 1 # 编译链的配置
2 2
3 #1、编译链与设备类型的选择 3 #1、编译链与设备类型的选择
4 -set(DEVICE_NAME JZ_H1T) 4 +set(DEVICE_NAME JZ_U3S)
5 #上一行为禁止修改行 5 #上一行为禁止修改行
6 6
7 if("${DEVICE_NAME}" STREQUAL "JZ_H1E") 7 if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
@@ -28,6 +28,9 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") @@ -28,6 +28,9 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3")
28 elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") 28 elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
29 set(MAKE_COMPILER ARM_CORTEXA9_LINUX) 29 set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
30 set(DEVICE_TYPE MEGAPHONE) 30 set(DEVICE_TYPE MEGAPHONE)
  31 +elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D")
  32 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  33 + set(DEVICE_TYPE MEGAPHONE)
31 elseif("${DEVICE_NAME}" STREQUAL "TF_A1") 34 elseif("${DEVICE_NAME}" STREQUAL "TF_A1")
32 set(MAKE_COMPILER ARM_CORTEXA9_LINUX) 35 set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
33 set(DEVICE_TYPE MEGAPHONE) 36 set(DEVICE_TYPE MEGAPHONE)
@@ -53,6 +53,26 @@ set(UI_CONTROL_MODULE VERSION_SWITCH_ON) @@ -53,6 +53,26 @@ set(UI_CONTROL_MODULE VERSION_SWITCH_ON)
53 ##################################################################### 53 #####################################################################
54 54
55 if("${DEVICE_NAME}" STREQUAL "JZ_H1E") 55 if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
  56 + # 添加AudioDeal 音频处理模块
  57 + set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
  58 +
  59 + # 添加Gimbal 云台处理模块
  60 + set(GIMBAL_MODULE VERSION_SWITCH_ON)
  61 +
  62 + # 添加IRCUT 引脚处理模块
  63 + set(IRCUT_MODULE VERSION_SWITCH_ON)
  64 +
  65 + # 添加LIGHTING 光源处理模块
  66 + set(LIGHTING_MODULE VERSION_SWITCH_ON)
  67 +
  68 + # 添加喊话器模块
  69 + set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
  70 +
  71 + # 添加电源管理模块
  72 + set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
  73 +
  74 + # 添加FFMPEG及其附属模块
  75 + set(FFMPEG_MODULE VERSION_SWITCH_ON)
56 76
57 elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") 77 elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
58 78
@@ -103,6 +123,29 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") @@ -103,6 +123,29 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
103 # 添加激光模块 123 # 添加激光模块
104 set(SIDE_LASER_MODULE VERSION_SWITCH_ON) 124 set(SIDE_LASER_MODULE VERSION_SWITCH_ON)
105 125
  126 +elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D")
  127 +
  128 + # 添加AudioDeal 音频处理模块
  129 + set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
  130 +
  131 + # 添加Gimbal 云台处理模块
  132 + set(GIMBAL_MODULE VERSION_SWITCH_ON)
  133 +
  134 + # 添加IRCUT 引脚处理模块
  135 + set(IRCUT_MODULE VERSION_SWITCH_ON)
  136 +
  137 + # 添加LIGHTING 光源处理模块
  138 + set(LIGHTING_MODULE VERSION_SWITCH_ON)
  139 +
  140 + # 添加喊话器模块
  141 + set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
  142 +
  143 + # 添加电源管理模块
  144 + set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
  145 +
  146 + # 添加FFMPEG及其附属模块
  147 + set(FFMPEG_MODULE VERSION_SWITCH_ON)
  148 +
106 elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") 149 elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
107 150
108 # 添加Gimbal 云台处理模块 151 # 添加Gimbal 云台处理模块
@@ -122,6 +165,9 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") @@ -122,6 +165,9 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
122 165
123 # 添加红外相机模块 166 # 添加红外相机模块
124 set(IRC_MODULE VERSION_SWITCH_ON) 167 set(IRC_MODULE VERSION_SWITCH_ON)
  168 +
  169 + # 添加昆腾模块
  170 + set(LIB_KT_MODULE VERSION_SWITCH_ON)
125 endif() 171 endif()
126 172
127 message("模组模块已加载\n") 173 message("模组模块已加载\n")
@@ -161,3 +161,14 @@ if(${LIB_USB} STREQUAL "VERSION_SWITCH_ON") @@ -161,3 +161,14 @@ if(${LIB_USB} STREQUAL "VERSION_SWITCH_ON")
161 ${ROOT_DIRS}/ThirdParty/udev/aarch64-none-linux-gnu/lib/libudev.so.1.6.3 161 ${ROOT_DIRS}/ThirdParty/udev/aarch64-none-linux-gnu/lib/libudev.so.1.6.3
162 ) 162 )
163 endif() 163 endif()
  164 +
  165 +#kt_IRC库
  166 +if(${LIB_KT_IRC} STREQUAL "VERSION_SWITCH_ON")
  167 + message("ktIRC库已加载\n")
  168 + include_directories(${ROOT_DIRS}/ThirdParty/KT_IRC/include)
  169 + target_link_libraries(
  170 + ${PROJECT_NAME}
  171 + ${ROOT_DIRS}/ThirdParty/KT_IRC/aarch64-none-linux-gnu/lib/libktlib.so
  172 + )
  173 +endif()
  174 +
@@ -6,6 +6,7 @@ set(ALSALIB_MODULE VERSION_SWITCH_OFF) @@ -6,6 +6,7 @@ set(ALSALIB_MODULE VERSION_SWITCH_OFF)
6 set(OPUS_MODULE VERSION_SWITCH_OFF) 6 set(OPUS_MODULE VERSION_SWITCH_OFF)
7 set(LIB_RTK_MMP VERSION_SWITCH_OFF) 7 set(LIB_RTK_MMP VERSION_SWITCH_OFF)
8 set(LIB_USB VERSION_SWITCH_OFF) 8 set(LIB_USB VERSION_SWITCH_OFF)
  9 +set(LIB_KT_IRC VERSION_SWITCH_OFF)
9 10
10 add_definitions(-D COMPILE_MODE_MODULE) #设置代码为编译模式 11 add_definitions(-D COMPILE_MODE_MODULE) #设置代码为编译模式
11 12
@@ -38,9 +39,13 @@ if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON") @@ -38,9 +39,13 @@ if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON")
38 39
39 message("\n媒体管理模块已加载") 40 message("\n媒体管理模块已加载")
40 add_definitions(-DMACRO_MEDIA_PROC_MODULE) 41 add_definitions(-DMACRO_MEDIA_PROC_MODULE)
41 - 42 + if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON")
  43 + set(LIB_KT_IRC VERSION_SWITCH_ON)
  44 + endif()
42 endif() 45 endif()
43 46
  47 +
  48 +
44 if(${SIDE_LASER_MODULE} STREQUAL "VERSION_SWITCH_ON") 49 if(${SIDE_LASER_MODULE} STREQUAL "VERSION_SWITCH_ON")
45 message("加载侧面激光模块") 50 message("加载侧面激光模块")
46 add_definitions(-DMACRO_SIDE_LASER_MODULE) 51 add_definitions(-DMACRO_SIDE_LASER_MODULE)
@@ -23,6 +23,7 @@ extern "C" { @@ -23,6 +23,7 @@ extern "C" {
23 #include "JZsdk_Delay/JZsdk_Delay.h" 23 #include "JZsdk_Delay/JZsdk_Delay.h"
24 #include "JZsdk_Code/JZsdk_FLagCode.h" 24 #include "JZsdk_Code/JZsdk_FLagCode.h"
25 #include "JZsdk_Osal/JZsdk_MemoryAdapter.h" 25 #include "JZsdk_Osal/JZsdk_MemoryAdapter.h"
  26 +#include "JZsdk_Osal/JZsdk_CheckSum/JZsdk_CheckSum.h"
26 27
27 /* Exported types ------------------------------------------------------------*/ 28 /* Exported types ------------------------------------------------------------*/
28 29
@@ -23,6 +23,7 @@ extern "C" { @@ -23,6 +23,7 @@ extern "C" {
23 #include "./JZsdk_FLagCode.h" 23 #include "./JZsdk_FLagCode.h"
24 #include "./JZsdk_ReturnCode.h" 24 #include "./JZsdk_ReturnCode.h"
25 #include "./JZsdk_FileType.h" 25 #include "./JZsdk_FileType.h"
  26 +#include "./JZsdk_WidgetCode.h"
26 27
27 /* Exported types ------------------------------------------------------------*/ 28 /* Exported types ------------------------------------------------------------*/
28 29
@@ -55,6 +55,14 @@ typedef enum { @@ -55,6 +55,14 @@ typedef enum {
55 JZ_ERRORCODE_GIMBAL_INVALID_ROLL = 0x4002, 55 JZ_ERRORCODE_GIMBAL_INVALID_ROLL = 0x4002,
56 56
57 } JZ_Gimbal_ErrorCode; 57 } JZ_Gimbal_ErrorCode;
  58 +
  59 +
  60 +typedef enum {
  61 + JZ_ERROR_CHECKCODE_CHECK_ERROR = 0x5000, //校验码错误
  62 + JZ_ERROR_CHECKCODE_DECODE_ERROR = 0x5001, //解码错误
  63 +
  64 +} JZ_CheckCode; //检查校验码
  65 +
58 /* Exported functions --------------------------------------------------------*/ 66 /* Exported functions --------------------------------------------------------*/
59 67
60 #ifdef __cplusplus 68 #ifdef __cplusplus
@@ -39,10 +39,12 @@ typedef enum { @@ -39,10 +39,12 @@ typedef enum {
39 JZ_INSCODE_5AFRAME_REALTIMEMP2_STOP = 0x10000202, //结束实时MP2 39 JZ_INSCODE_5AFRAME_REALTIMEMP2_STOP = 0x10000202, //结束实时MP2
40 JZ_INSCODE_5AFRAME_REALTIMEMP2_LIMIT_TRANSMISSION = 0x10000203, //有限制传输MP2 40 JZ_INSCODE_5AFRAME_REALTIMEMP2_LIMIT_TRANSMISSION = 0x10000203, //有限制传输MP2
41 41
  42 +
42 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_START = 0x10000300, //打开音频文件上传 43 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_START = 0x10000300, //打开音频文件上传
43 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_UNLIMIT_TRANSMISSION = 0x10000301, //无限制传输音频文件 44 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_UNLIMIT_TRANSMISSION = 0x10000301, //无限制传输音频文件
44 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP = 0x10000302, //关闭音频文件上传 45 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP = 0x10000302, //关闭音频文件上传
45 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_LIMIT_TRANSMISSION = 0x10000303, //定长传输音频文件 46 JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_LIMIT_TRANSMISSION = 0x10000303, //定长传输音频文件
  47 + JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP_AND_CHECK = 0x10000304, //关闭音频文件上传并校验
46 48
47 JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE = 0x10000400, //播放指定音频 49 JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE = 0x10000400, //播放指定音频
48 JZ_INSCODE_5AFRAME_AUDIO_CONTINUE = 0x10000401, //音频继续播放 50 JZ_INSCODE_5AFRAME_AUDIO_CONTINUE = 0x10000401, //音频继续播放
@@ -69,6 +71,8 @@ typedef enum { @@ -69,6 +71,8 @@ typedef enum {
69 JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAYFILENAME = 0x10000624, //查询播放文件名 71 JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAYFILENAME = 0x10000624, //查询播放文件名
70 JZ_INSCODE_5AFRAME_CHECKSTATUS_SOFTWAREVERSION = 0x10000625, //查询软件版本号 72 JZ_INSCODE_5AFRAME_CHECKSTATUS_SOFTWAREVERSION = 0x10000625, //查询软件版本号
71 JZ_INSCODE_5AFRAME_CHECKSTATUS_LOOPPLAY = 0x10000626, //查询是否打开循环 73 JZ_INSCODE_5AFRAME_CHECKSTATUS_LOOPPLAY = 0x10000626, //查询是否打开循环
  74 + JZ_INSCODE_5AFRAME_CHECKSTATUS_ADUIO_LOOP_INTERVAL = 0x10000639, //查询音频循环间隔
  75 +
72 JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSTONE = 0x10000627, //查询音色 76 JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSTONE = 0x10000627, //查询音色
73 JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSSPEED = 0x10000628, //查询语速 77 JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSSPEED = 0x10000628, //查询语速
74 JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE = 0x10000629, //查询探照灯 灯3个属性 78 JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE = 0x10000629, //查询探照灯 灯3个属性
@@ -81,9 +85,11 @@ typedef enum { @@ -81,9 +85,11 @@ typedef enum {
81 JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS = 0x10000635, //查询警灯状态 85 JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS = 0x10000635, //查询警灯状态
82 JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR = 0x10000636, //查询警灯颜色 86 JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR = 0x10000636, //查询警灯颜色
83 JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER = 0x10000637, //查询序列号 87 JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER = 0x10000637, //查询序列号
  88 + JZ_INSCODE_5AFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE = 0x10000638, //查询音频详细信息
84 89
85 90
86 JZ_INSCODE_5AFRAME_PLAY_LOOP = 0x10000690, //开启关闭循环 91 JZ_INSCODE_5AFRAME_PLAY_LOOP = 0x10000690, //开启关闭循环
  92 + JZ_INSCODE_5AFRAME_ADUIO_PLAY_LOOP_INTERVAL = 0x10000691, //设置音频循环间隔
87 93
88 JZ_INSCODE_5AFRAME_DELETE_AUDIO = 0x10000700, //删除音频 94 JZ_INSCODE_5AFRAME_DELETE_AUDIO = 0x10000700, //删除音频
89 JZ_INSCODE_5AFRAME_DELETE_VOICE_RECORD = 0x10000710, //删除录音 95 JZ_INSCODE_5AFRAME_DELETE_VOICE_RECORD = 0x10000710, //删除录音
@@ -102,6 +108,7 @@ typedef enum { @@ -102,6 +108,7 @@ typedef enum {
102 JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION = 0x10000903, //opus传输中 108 JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION = 0x10000903, //opus传输中
103 109
104 JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP = 0x10000902, //opus传输结束 110 JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP = 0x10000902, //opus传输结束
  111 + JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP_AND_CHECK = 0x10000904, //opus传输结束并校验
105 112
106 JZ_INSCODE_5AFRAME_OPUS_PLAY = 0x10000910, //opus播放 113 JZ_INSCODE_5AFRAME_OPUS_PLAY = 0x10000910, //opus播放
107 114
@@ -142,7 +149,9 @@ typedef enum { @@ -142,7 +149,9 @@ typedef enum {
142 JZ_INSCODE_5BFRAME_DEVICE_MESSAGE = 0x10004107, //设备信息 149 JZ_INSCODE_5BFRAME_DEVICE_MESSAGE = 0x10004107, //设备信息
143 150
144 JZ_INSCODE_5BFRAME_SUCESS = 0x10004200, //操作成功 151 JZ_INSCODE_5BFRAME_SUCESS = 0x10004200, //操作成功
145 - JZ_INSCODE_5BFRAME_DEFEAT = 0x10004201, //操作失败 152 + JZ_INSCODE_5BFRAME_FILE_CHECK_DEFEAT = 0x10004201, //校验失败
  153 + JZ_INSCODE_5BFRAME_FILE_DECODE_DEFEAT = 0x10004202, //解码失败
  154 + JZ_INSCODE_5BFRAME_DEFEAT = 0x100042FF, //操作失败
146 155
147 JZ_INSCODE_5BFRAME_MUSICLIST_START = 0x10004300, //开启发送音乐列表帧 156 JZ_INSCODE_5BFRAME_MUSICLIST_START = 0x10004300, //开启发送音乐列表帧
148 JZ_INSCODE_5BFRAME_MUSICLIST_TRANS = 0x10004301, //发送音乐列表帧 157 JZ_INSCODE_5BFRAME_MUSICLIST_TRANS = 0x10004301, //发送音乐列表帧
@@ -156,6 +165,7 @@ typedef enum { @@ -156,6 +165,7 @@ typedef enum {
156 JZ_INSCODE_5BFRAME_TTS_TONE = 0x10004402, //发送tts音色 165 JZ_INSCODE_5BFRAME_TTS_TONE = 0x10004402, //发送tts音色
157 JZ_INSCODE_5BFRAME_TTS_SPEED = 0x10004403, //发送tts语速 166 JZ_INSCODE_5BFRAME_TTS_SPEED = 0x10004403, //发送tts语速
158 JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME = 0x10004404, //当前播放的音频名字 167 JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME = 0x10004404, //当前播放的音频名字
  168 + JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE = 0x10004405, //查询音频详细信息
159 169
160 170
161 JZ_INSCODE_5BFRAME_GIMBAL_PITCH = 0x10004500, //云台俯仰角度 171 JZ_INSCODE_5BFRAME_GIMBAL_PITCH = 0x10004500, //云台俯仰角度
@@ -182,6 +192,7 @@ typedef enum { @@ -182,6 +192,7 @@ typedef enum {
182 JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10004900, //对外供电查询 192 JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10004900, //对外供电查询
183 193
184 JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS = 0x10005000, //opus解码状态 194 JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS = 0x10005000, //opus解码状态
  195 + JZ_INSCODE_5BFRAME_OPUS_TRANS_STOP_AND_CHECK = 0x10000904, //opus传输结束并校验
185 196
186 197
187 //6A类 198 //6A类
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_WidgetCode.h
  4 + * 用于控件线程的的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_WIDGET_CODE_H
  11 +#define JZSDK_WIDGET_CODE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +typedef enum JZsdk_Widget_Control
  22 +{
  23 + // 控件类
  24 + JZSDK_WIDGET_LASTSONG = 0x0000, // 控件上一曲
  25 + JZSDK_WIDGET_NEXTSONG = 0x0001, // 控件下一曲
  26 + JZSDK_WIDGET_PLAYANDSTOP = 0x0002, // 控件播放暂停
  27 +
  28 + JZSDK_WIDGET_SIDE_LASER_MODE = 0x0020,
  29 +
  30 + JZSDK_WIDGET_VIDEOPUSH_INDEX = 0x0021, //切换视频流
  31 + JZSDK_WIDGET_TEMP_MEASUREMENT_MODE = 0x0022, //测温
  32 + JZSDK_WIDGET_SHUTTER_SWITCH = 0x0023, //快门开关
  33 + JZSDK_WIDGET_FREEZE_VIDEO = 0x0024, //冻结视频流
  34 + JZSDK_WIDGET_PSEUDO_MODE = 0x0025, //色彩输出模式
  35 + JZSDK_WIDGET_FOCAL_LENGTH = 0x0026, //焦距
  36 + JZSDK_WIDGET_SPC_RESET = 0x0027, //spc重置
  37 + JZSDK_WIDGET_PSEUDO_COLOR = 0x0028, //伪彩颜色
  38 + JZSDK_WIDGET_CAMERA_CORRECT_MODE = 0x0029, //相机纠正模式
  39 + JZSDK_WIDGET_GAS_ENHANCEMENT_COLOR = 0x0030, //气体增强颜色
  40 +
  41 + JZSDK_WIDGET_SPC_MODE = 0x0031, //单点纠正模式
  42 + JZSDK_WIDGET_SPC_AUTO_TIME = 0x0032, //自动单点纠正间隔
  43 +
  44 + JZSDK_WIDGET_TPC_MODE = 0x0033, //tpc模式
  45 +
  46 + JZSDK_WIDGET_BAD_PIXEL_CORRECT_MODE = 0x0034, //坏点纠正模式
  47 + JZSDK_WIDGET_BAD_PIXEL_CORRECT = 0x0035, //开启纠正
  48 +
  49 +
  50 + JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT = 0x0036, //气体增强纠正
  51 +
  52 + JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_HIGH_CALIBRATION = 0x0037, //气体增强纠正高温校准
  53 + JZSDK_WIDGET_GAS_ENHANCEMENT_CORRECT_LOW_CALIBRATION = 0x0038, //气体增强纠正低温校准
  54 +
  55 +
  56 +
  57 +
  58 +
  59 +}JZsdk_Widget_Control;
  60 +
  61 +
  62 +/* Exported types ------------------------------------------------------------*/
  63 +
  64 +
  65 +/* Exported functions --------------------------------------------------------*/
  66 +
  67 +#ifdef __cplusplus
  68 +}
  69 +#endif
  70 +
  71 +#endif
@@ -93,6 +93,11 @@ static int Comparison_5AFRAME_FirstLevelCode_0x51(char *getdata) @@ -93,6 +93,11 @@ static int Comparison_5AFRAME_FirstLevelCode_0x51(char *getdata)
93 return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP; 93 return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP;
94 break; 94 break;
95 95
  96 + //关闭音频文件上传并校验
  97 + case 0x04:
  98 + return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP_AND_CHECK;
  99 + break;
  100 +
96 default: 101 default:
97 return JZ_ERROR_SYSTEM_FRAME_ERROR; 102 return JZ_ERROR_SYSTEM_FRAME_ERROR;
98 break; 103 break;
@@ -248,6 +253,11 @@ static int Comparison_5AFRAME_FirstLevelCode_0x55(char *getdata) @@ -248,6 +253,11 @@ static int Comparison_5AFRAME_FirstLevelCode_0x55(char *getdata)
248 return JZ_INSCODE_5AFRAME_PLAY_LOOP; 253 return JZ_INSCODE_5AFRAME_PLAY_LOOP;
249 break; 254 break;
250 255
  256 + //设置循环播放间隔
  257 + case 0x01:
  258 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_ADUIO_LOOP_INTERVAL;
  259 + break;
  260 +
251 default: 261 default:
252 return JZ_ERROR_SYSTEM_FRAME_ERROR; 262 return JZ_ERROR_SYSTEM_FRAME_ERROR;
253 break; 263 break;
@@ -309,6 +319,11 @@ static int Comparison_5AFRAME_FirstLevelCode_0x58(char *getdata) @@ -309,6 +319,11 @@ static int Comparison_5AFRAME_FirstLevelCode_0x58(char *getdata)
309 return JZ_INSCODE_5AFRAME_AUDIO_GETMUSICLIST; 319 return JZ_INSCODE_5AFRAME_AUDIO_GETMUSICLIST;
310 break; 320 break;
311 321
  322 + //查询歌曲类音频详细信息
  323 + case 0x03:
  324 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE;
  325 + break;
  326 +
312 default: 327 default:
313 break; 328 break;
314 } 329 }
@@ -330,6 +345,10 @@ static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata) @@ -330,6 +345,10 @@ static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata)
330 return JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP; 345 return JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP;
331 break; 346 break;
332 347
  348 + case 0xF4:
  349 + return JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP_AND_CHECK;
  350 + break;
  351 +
333 //opus定长传输 352 //opus定长传输
334 case 0xF3: 353 case 0xF3:
335 return JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION; 354 return JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION;
@@ -138,6 +138,11 @@ static int Comparison_5BFRAME_FirstLevelCode_0x58(char *getdata) @@ -138,6 +138,11 @@ static int Comparison_5BFRAME_FirstLevelCode_0x58(char *getdata)
138 return JZ_INSCODE_5BFRAME_MUSICLIST_TRANS; 138 return JZ_INSCODE_5BFRAME_MUSICLIST_TRANS;
139 break; 139 break;
140 140
  141 + //查询歌曲类音频详细信息
  142 + case 0x03:
  143 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE;
  144 + break;
  145 +
141 //结束列表返回 146 //结束列表返回
142 case 0xff: 147 case 0xff:
143 return JZ_INSCODE_5BFRAME_MUSICLIST_STOP; 148 return JZ_INSCODE_5BFRAME_MUSICLIST_STOP;
@@ -284,6 +284,20 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) @@ -284,6 +284,20 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
284 } 284 }
285 break; 285 break;
286 286
  287 + case JZ_INSCODE_5BFRAME_FILE_CHECK_DEFEAT:
  288 + {
  289 + char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0xf0, 0x00, 0x00, 0x23};
  290 + memcpy(str, sendbuf, 12);
  291 + *str_len = 12;
  292 + }
  293 +
  294 + case JZ_INSCODE_5BFRAME_FILE_DECODE_DEFEAT:
  295 + {
  296 + char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0xf1, 0x00, 0x00, 0x23};
  297 + memcpy(str, sendbuf, 12);
  298 + *str_len = 12;
  299 + }
  300 +
287 case JZ_INSCODE_5BFRAME_DEFEAT: 301 case JZ_INSCODE_5BFRAME_DEFEAT:
288 { 302 {
289 char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0xff, 0x00, 0x00, 0x23}; 303 char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0xff, 0x00, 0x00, 0x23};
@@ -383,14 +397,22 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) @@ -383,14 +397,22 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
383 } 397 }
384 break; 398 break;
385 399
386 - case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS: 400 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE:
387 { 401 {
388 - char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x23}; 402 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23};
389 memcpy(str, sendbuf, 12); 403 memcpy(str, sendbuf, 12);
390 *str_len = 12; 404 *str_len = 12;
391 } 405 }
392 break; 406 break;
393 407
  408 + case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS:
  409 + {
  410 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x00, 0x23};
  411 + memcpy(str, sendbuf, 13);
  412 + *str_len = 13;
  413 + }
  414 + break;
  415 +
394 case JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER: 416 case JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER:
395 { 417 {
396 char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0C, 0x00, 0x00, 0x5A, 0x02, 0x00, 0x00, 0x23}; 418 char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0C, 0x00, 0x00, 0x5A, 0x02, 0x00, 0x00, 0x23};
  1 +#include <stdio.h>
  2 +#include "JZsdkLib.h"
  3 +
  4 +
  5 +#include "./CheckSum_Src.h"
  6 +
  7 +
  8 +
  9 +static const U8_t c_crc4_itu_lk[] =
  10 +{
  11 + 0x00,0x07,0x0E,0x09,0x05,0x02,0x0B,0x0C,0x0A,0x0D,0x04,0x03,0x0F,0x08,0x01,0x06,
  12 + 0x0D,0x0A,0x03,0x04,0x08,0x0F,0x06,0x01,0x07,0x00,0x09,0x0E,0x02,0x05,0x0C,0x0B,
  13 + 0x03,0x04,0x0D,0x0A,0x06,0x01,0x08,0x0F,0x09,0x0E,0x07,0x00,0x0C,0x0B,0x02,0x05,
  14 + 0x0E,0x09,0x00,0x07,0x0B,0x0C,0x05,0x02,0x04,0x03,0x0A,0x0D,0x01,0x06,0x0F,0x08,
  15 + 0x06,0x01,0x08,0x0F,0x03,0x04,0x0D,0x0A,0x0C,0x0B,0x02,0x05,0x09,0x0E,0x07,0x00,
  16 + 0x0B,0x0C,0x05,0x02,0x0E,0x09,0x00,0x07,0x01,0x06,0x0F,0x08,0x04,0x03,0x0A,0x0D,
  17 + 0x05,0x02,0x0B,0x0C,0x00,0x07,0x0E,0x09,0x0F,0x08,0x01,0x06,0x0A,0x0D,0x04,0x03,
  18 + 0x08,0x0F,0x06,0x01,0x0D,0x0A,0x03,0x04,0x02,0x05,0x0C,0x0B,0x07,0x00,0x09,0x0E,
  19 + 0x0C,0x0B,0x02,0x05,0x09,0x0E,0x07,0x00,0x06,0x01,0x08,0x0F,0x03,0x04,0x0D,0x0A,
  20 + 0x01,0x06,0x0F,0x08,0x04,0x03,0x0A,0x0D,0x0B,0x0C,0x05,0x02,0x0E,0x09,0x00,0x07,
  21 + 0x0F,0x08,0x01,0x06,0x0A,0x0D,0x04,0x03,0x05,0x02,0x0B,0x0C,0x00,0x07,0x0E,0x09,
  22 + 0x02,0x05,0x0C,0x0B,0x07,0x00,0x09,0x0E,0x08,0x0F,0x06,0x01,0x0D,0x0A,0x03,0x04,
  23 + 0x0A,0x0D,0x04,0x03,0x0F,0x08,0x01,0x06,0x00,0x07,0x0E,0x09,0x05,0x02,0x0B,0x0C,
  24 + 0x07,0x00,0x09,0x0E,0x02,0x05,0x0C,0x0B,0x0D,0x0A,0x03,0x04,0x08,0x0F,0x06,0x01,
  25 + 0x09,0x0E,0x07,0x00,0x0C,0x0B,0x02,0x05,0x03,0x04,0x0D,0x0A,0x06,0x01,0x08,0x0F,
  26 + 0x04,0x03,0x0A,0x0D,0x01,0x06,0x0F,0x08,0x0E,0x09,0x00,0x07,0x0B,0x0C,0x05,0x02,
  27 +};
  28 +
  29 +/******************************************************************************
  30 + * Name: CRC-4/ITU with lookup table x4+x+1
  31 + * Poly: 0x03
  32 + * Init: 0x00
  33 + * Refin: True
  34 + * Refout: True
  35 + * Xorout: 0x00
  36 + * Note:
  37 + *****************************************************************************/
  38 +U8_t crc4_itu_lk(U8_t *data, unsigned int length)
  39 +{
  40 + U8_t i;
  41 + U8_t crc = 0; // Initial value
  42 + while(length--)
  43 + {
  44 + crc ^= *data++; // crc ^= *data; data++;
  45 + crc = c_crc4_itu_lk[crc];
  46 + }
  47 + return crc;
  48 +}
  49 +
  50 +
  51 +/******************************************************************************
  52 + * Name: CRC-4/ITU x4+x+1
  53 + * Poly: 0x03
  54 + * Init: 0x00
  55 + * Refin: True
  56 + * Refout: True
  57 + * Xorout: 0x00
  58 + * Note:
  59 + *****************************************************************************/
  60 +U8_t crc4_itu(U8_t *data, unsigned int length)
  61 +{
  62 + U8_t i;
  63 + U8_t crc = 0; // Initial value
  64 + while(length--)
  65 + {
  66 + crc ^= *data++; // crc ^= *data; data++;
  67 + for (i = 0; i < 8; ++i)
  68 + {
  69 + if (crc & 1)
  70 + crc = (crc >> 1) ^ 0x0C;// 0x0C = (reverse 0x03)>>(8-4)
  71 + else
  72 + crc = (crc >> 1);
  73 + }
  74 + }
  75 + return crc;
  76 +}
  77 +
  78 +/******************************************************************************
  79 + * Name: CRC-5/EPC x5+x3+1
  80 + * Poly: 0x09
  81 + * Init: 0x09
  82 + * Refin: False
  83 + * Refout: False
  84 + * Xorout: 0x00
  85 + * Note:
  86 + *****************************************************************************/
  87 +U8_t crc5_epc(U8_t *data, unsigned int length)
  88 +{
  89 + U8_t i;
  90 + U8_t crc = 0x48; // Initial value: 0x48 = 0x09<<(8-5)
  91 + while(length--)
  92 + {
  93 + crc ^= *data++; // crc ^= *data; data++;
  94 + for ( i = 0; i < 8; i++ )
  95 + {
  96 + if ( crc & 0x80 )
  97 + crc = (crc << 1) ^ 0x48; // 0x48 = 0x09<<(8-5)
  98 + else
  99 + crc <<= 1;
  100 + }
  101 + }
  102 + return crc >> 3;
  103 +}
  104 +
  105 +/******************************************************************************
  106 + * Name: CRC-5/ITU x5+x4+x2+1
  107 + * Poly: 0x15
  108 + * Init: 0x00
  109 + * Refin: True
  110 + * Refout: True
  111 + * Xorout: 0x00
  112 + * Note:
  113 + *****************************************************************************/
  114 +U8_t crc5_itu(U8_t *data, unsigned int length)
  115 +{
  116 + U8_t i;
  117 + U8_t crc = 0; // Initial value
  118 + while(length--)
  119 + {
  120 + crc ^= *data++; // crc ^= *data; data++;
  121 + for (i = 0; i < 8; ++i)
  122 + {
  123 + if (crc & 1)
  124 + crc = (crc >> 1) ^ 0x15;// 0x15 = (reverse 0x15)>>(8-5)
  125 + else
  126 + crc = (crc >> 1);
  127 + }
  128 + }
  129 + return crc;
  130 +}
  131 +
  132 +/******************************************************************************
  133 + * Name: CRC-5/USB x5+x2+1
  134 + * Poly: 0x05
  135 + * Init: 0x1F
  136 + * Refin: True
  137 + * Refout: True
  138 + * Xorout: 0x1F
  139 + * Note:
  140 + *****************************************************************************/
  141 +U8_t crc5_usb(U8_t *data, unsigned int length)
  142 +{
  143 + U8_t i;
  144 + U8_t crc = 0x1F; // Initial value
  145 + while(length--)
  146 + {
  147 + crc ^= *data++; // crc ^= *data; data++;
  148 + for (i = 0; i < 8; ++i)
  149 + {
  150 + if (crc & 1)
  151 + crc = (crc >> 1) ^ 0x14;// 0x14 = (reverse 0x05)>>(8-5)
  152 + else
  153 + crc = (crc >> 1);
  154 + }
  155 + }
  156 + return crc ^ 0x1F;
  157 +}
  158 +
  159 +/******************************************************************************
  160 + * Name: CRC-6/ITU x6+x+1
  161 + * Poly: 0x03
  162 + * Init: 0x00
  163 + * Refin: True
  164 + * Refout: True
  165 + * Xorout: 0x00
  166 + * Note:
  167 + *****************************************************************************/
  168 +U8_t crc6_itu(U8_t *data, unsigned int length)
  169 +{
  170 + U8_t i;
  171 + U8_t crc = 0; // Initial value
  172 + while(length--)
  173 + {
  174 + crc ^= *data++; // crc ^= *data; data++;
  175 + for (i = 0; i < 8; ++i)
  176 + {
  177 + if (crc & 1)
  178 + crc = (crc >> 1) ^ 0x30;// 0x30 = (reverse 0x03)>>(8-6)
  179 + else
  180 + crc = (crc >> 1);
  181 + }
  182 + }
  183 + return crc;
  184 +}
  185 +
  186 +/******************************************************************************
  187 + * Name: CRC-7/MMC x7+x3+1
  188 + * Poly: 0x09
  189 + * Init: 0x00
  190 + * Refin: False
  191 + * Refout: False
  192 + * Xorout: 0x00
  193 + * Use: MultiMediaCard,SD,ect.
  194 + *****************************************************************************/
  195 +U8_t crc7_mmc(U8_t *data, unsigned int length)
  196 +{
  197 + U8_t i;
  198 + U8_t crc = 0; // Initial value
  199 + while(length--)
  200 + {
  201 + crc ^= *data++; // crc ^= *data; data++;
  202 + for ( i = 0; i < 8; i++ )
  203 + {
  204 + if ( crc & 0x80 )
  205 + crc = (crc << 1) ^ 0x12; // 0x12 = 0x09<<(8-7)
  206 + else
  207 + crc <<= 1;
  208 + }
  209 + }
  210 + return crc >> 1;
  211 +}
  212 +
  213 +/******************************************************************************
  214 + * Name: CRC-8 x8+x2+x+1
  215 + * Poly: 0x07
  216 + * Init: 0x00
  217 + * Refin: False
  218 + * Refout: False
  219 + * Xorout: 0x00
  220 + * Note:
  221 + *****************************************************************************/
  222 +U8_t crc8(U8_t *data, unsigned int length)
  223 +{
  224 + U8_t i;
  225 + U8_t crc = 0; // Initial value
  226 + while(length--)
  227 + {
  228 + crc ^= *data++; // crc ^= *data; data++;
  229 + for ( i = 0; i < 8; i++ )
  230 + {
  231 + if ( crc & 0x80 )
  232 + crc = (crc << 1) ^ 0x07;
  233 + else
  234 + crc <<= 1;
  235 + }
  236 + }
  237 + return crc;
  238 +}
  239 +
  240 +/******************************************************************************
  241 + * Name: CRC-8/ITU x8+x2+x+1
  242 + * Poly: 0x07
  243 + * Init: 0x00
  244 + * Refin: False
  245 + * Refout: False
  246 + * Xorout: 0x55
  247 + * Alias: CRC-8/ATM
  248 + *****************************************************************************/
  249 +U8_t crc8_itu(U8_t *data, unsigned int length)
  250 +{
  251 + U8_t i;
  252 + U8_t crc = 0; // Initial value
  253 + while(length--)
  254 + {
  255 + crc ^= *data++; // crc ^= *data; data++;
  256 + for ( i = 0; i < 8; i++ )
  257 + {
  258 + if ( crc & 0x80 )
  259 + crc = (crc << 1) ^ 0x07;
  260 + else
  261 + crc <<= 1;
  262 + }
  263 + }
  264 + return crc ^ 0x55;
  265 +}
  266 +
  267 +/******************************************************************************
  268 + * Name: CRC-8/ROHC x8+x2+x+1
  269 + * Poly: 0x07
  270 + * Init: 0xFF
  271 + * Refin: True
  272 + * Refout: True
  273 + * Xorout: 0x00
  274 + * Note:
  275 + *****************************************************************************/
  276 +U8_t crc8_rohc(U8_t *data, unsigned int length)
  277 +{
  278 + U8_t i;
  279 + U8_t crc = 0xFF; // Initial value
  280 + while(length--)
  281 + {
  282 + crc ^= *data++; // crc ^= *data; data++;
  283 + for (i = 0; i < 8; ++i)
  284 + {
  285 + if (crc & 1)
  286 + crc = (crc >> 1) ^ 0xE0; // 0xE0 = reverse 0x07
  287 + else
  288 + crc = (crc >> 1);
  289 + }
  290 + }
  291 + return crc;
  292 +}
  293 +
  294 +/******************************************************************************
  295 + * Name: CRC-8/MAXIM x8+x5+x4+1
  296 + * Poly: 0x31
  297 + * Init: 0x00
  298 + * Refin: True
  299 + * Refout: True
  300 + * Xorout: 0x00
  301 + * Alias: DOW-CRC,CRC-8/IBUTTON
  302 + * Use: Maxim(Dallas)'s some devices,e.g. DS18B20
  303 + *****************************************************************************/
  304 +U8_t crc8_maxim(U8_t *data, unsigned int length)
  305 +{
  306 + U8_t i;
  307 + U8_t crc = 0; // Initial value
  308 + while(length--)
  309 + {
  310 + crc ^= *data++; // crc ^= *data; data++;
  311 + for (i = 0; i < 8; i++)
  312 + {
  313 + if (crc & 1)
  314 + crc = (crc >> 1) ^ 0x8C; // 0x8C = reverse 0x31
  315 + else
  316 + crc >>= 1;
  317 + }
  318 + }
  319 + return crc;
  320 +}
  321 +
  322 +/******************************************************************************
  323 + * Name: CRC-16/IBM x16+x15+x2+1
  324 + * Poly: 0x8005
  325 + * Init: 0x0000
  326 + * Refin: True
  327 + * Refout: True
  328 + * Xorout: 0x0000
  329 + * Alias: CRC-16,CRC-16/ARC,CRC-16/LHA
  330 + *****************************************************************************/
  331 +uint16_t crc16_ibm(U8_t *data, unsigned int length)
  332 +{
  333 + U8_t i;
  334 + uint16_t crc = 0; // Initial value
  335 + while(length--)
  336 + {
  337 + crc ^= *data++; // crc ^= *data; data++;
  338 + for (i = 0; i < 8; ++i)
  339 + {
  340 + if (crc & 1)
  341 + crc = (crc >> 1) ^ 0xA001; // 0xA001 = reverse 0x8005
  342 + else
  343 + crc = (crc >> 1);
  344 + }
  345 + }
  346 + return crc;
  347 +}
  348 +
  349 +/******************************************************************************
  350 + * Name: CRC-16/MAXIM x16+x15+x2+1
  351 + * Poly: 0x8005
  352 + * Init: 0x0000
  353 + * Refin: True
  354 + * Refout: True
  355 + * Xorout: 0xFFFF
  356 + * Note:
  357 + *****************************************************************************/
  358 +uint16_t crc16_maxim(U8_t *data, unsigned int length)
  359 +{
  360 + U8_t i;
  361 + uint16_t crc = 0; // Initial value
  362 + while(length--)
  363 + {
  364 + crc ^= *data++; // crc ^= *data; data++;
  365 + for (i = 0; i < 8; ++i)
  366 + {
  367 + if (crc & 1)
  368 + crc = (crc >> 1) ^ 0xA001; // 0xA001 = reverse 0x8005
  369 + else
  370 + crc = (crc >> 1);
  371 + }
  372 + }
  373 + return ~crc; // crc^0xffff
  374 +}
  375 +
  376 +/******************************************************************************
  377 + * Name: CRC-16/USB x16+x15+x2+1
  378 + * Poly: 0x8005
  379 + * Init: 0xFFFF
  380 + * Refin: True
  381 + * Refout: True
  382 + * Xorout: 0xFFFF
  383 + * Note:
  384 + *****************************************************************************/
  385 +uint16_t crc16_usb(U8_t *data, unsigned int length)
  386 +{
  387 + U8_t i;
  388 + uint16_t crc = 0xffff; // Initial value
  389 + while(length--)
  390 + {
  391 + crc ^= *data++; // crc ^= *data; data++;
  392 + for (i = 0; i < 8; ++i)
  393 + {
  394 + if (crc & 1)
  395 + crc = (crc >> 1) ^ 0xA001; // 0xA001 = reverse 0x8005
  396 + else
  397 + crc = (crc >> 1);
  398 + }
  399 + }
  400 + return ~crc; // crc^0xffff
  401 +}
  402 +
  403 +/******************************************************************************
  404 + * Name: CRC-16/MODBUS x16+x15+x2+1
  405 + * Poly: 0x8005
  406 + * Init: 0xFFFF
  407 + * Refin: True
  408 + * Refout: True
  409 + * Xorout: 0x0000
  410 + * Note:
  411 + *****************************************************************************/
  412 +uint16_t crc16_modbus(U8_t *data, unsigned int length)
  413 +{
  414 + U8_t i;
  415 + uint16_t crc = 0xffff; // Initial value
  416 + while(length--)
  417 + {
  418 + crc ^= *data++; // crc ^= *data; data++;
  419 + for (i = 0; i < 8; ++i)
  420 + {
  421 + if (crc & 1)
  422 + crc = (crc >> 1) ^ 0xA001; // 0xA001 = reverse 0x8005
  423 + else
  424 + crc = (crc >> 1);
  425 + }
  426 + }
  427 + return crc;
  428 +}
  429 +
  430 +/******************************************************************************
  431 + * Name: CRC-16/CCITT x16+x12+x5+1
  432 + * Poly: 0x1021
  433 + * Init: 0x0000
  434 + * Refin: True
  435 + * Refout: True
  436 + * Xorout: 0x0000
  437 + * Alias: CRC-CCITT,CRC-16/CCITT-TRUE,CRC-16/KERMIT
  438 + *****************************************************************************/
  439 +uint16_t crc16_ccitt(U8_t *data, unsigned int length)
  440 +{
  441 + U8_t i;
  442 + uint16_t crc = 0; // Initial value
  443 + while(length--)
  444 + {
  445 + crc ^= *data++; // crc ^= *data; data++;
  446 + for (i = 0; i < 8; ++i)
  447 + {
  448 + if (crc & 1)
  449 + crc = (crc >> 1) ^ 0x8408; // 0x8408 = reverse 0x1021
  450 + else
  451 + crc = (crc >> 1);
  452 + }
  453 + }
  454 + return crc;
  455 +}
  456 +
  457 +/******************************************************************************
  458 + * Name: CRC-16/CCITT-FALSE x16+x12+x5+1
  459 + * Poly: 0x1021
  460 + * Init: 0xFFFF
  461 + * Refin: False
  462 + * Refout: False
  463 + * Xorout: 0x0000
  464 + * Note:
  465 + *****************************************************************************/
  466 +uint16_t crc16_ccitt_false(U8_t *data, unsigned int length)
  467 +{
  468 + U8_t i;
  469 + uint16_t crc = 0xffff; //Initial value
  470 + while(length--)
  471 + {
  472 + crc ^= (uint16_t)(*data++) << 8; // crc ^= (uint6_t)(*data)<<8; data++;
  473 + for (i = 0; i < 8; ++i)
  474 + {
  475 + if ( crc & 0x8000 )
  476 + crc = (crc << 1) ^ 0x1021;
  477 + else
  478 + crc <<= 1;
  479 + }
  480 + }
  481 + return crc;
  482 +}
  483 +
  484 +/******************************************************************************
  485 + * Name: CRC-16/X25 x16+x12+x5+1
  486 + * Poly: 0x1021
  487 + * Init: 0xFFFF
  488 + * Refin: True
  489 + * Refout: True
  490 + * Xorout: 0XFFFF
  491 + * Note:
  492 + *****************************************************************************/
  493 +uint16_t crc16_x25(U8_t *data, unsigned int length)
  494 +{
  495 + U8_t i;
  496 + uint16_t crc = 0xffff; // Initial value
  497 + while(length--)
  498 + {
  499 + crc ^= *data++; // crc ^= *data; data++;
  500 + for (i = 0; i < 8; ++i)
  501 + {
  502 + if (crc & 1)
  503 + crc = (crc >> 1) ^ 0x8408; // 0x8408 = reverse 0x1021
  504 + else
  505 + crc = (crc >> 1);
  506 + }
  507 + }
  508 + return ~crc; // crc^Xorout
  509 +}
  510 +
  511 +/******************************************************************************
  512 + * Name: CRC-16/XMODEM x16+x12+x5+1
  513 + * Poly: 0x1021
  514 + * Init: 0x0000
  515 + * Refin: False
  516 + * Refout: False
  517 + * Xorout: 0x0000
  518 + * Alias: CRC-16/ZMODEM,CRC-16/ACORN
  519 + *****************************************************************************/
  520 +uint16_t crc16_xmodem(U8_t *data, unsigned int length)
  521 +{
  522 + U8_t i;
  523 + uint16_t crc = 0; // Initial value
  524 + while(length--)
  525 + {
  526 + crc ^= (uint16_t)(*data++) << 8; // crc ^= (uint16_t)(*data)<<8; data++;
  527 + for (i = 0; i < 8; ++i)
  528 + {
  529 + if ( crc & 0x8000 )
  530 + crc = (crc << 1) ^ 0x1021;
  531 + else
  532 + crc <<= 1;
  533 + }
  534 + }
  535 + return crc;
  536 +}
  537 +
  538 +/******************************************************************************
  539 + * Name: CRC-16/DNP x16+x13+x12+x11+x10+x8+x6+x5+x2+1
  540 + * Poly: 0x3D65
  541 + * Init: 0x0000
  542 + * Refin: True
  543 + * Refout: True
  544 + * Xorout: 0xFFFF
  545 + * Use: M-Bus,ect.
  546 + *****************************************************************************/
  547 +uint16_t crc16_dnp(U8_t *data, unsigned int length)
  548 +{
  549 + U8_t i;
  550 + uint16_t crc = 0; // Initial value
  551 + while(length--)
  552 + {
  553 + crc ^= *data++; // crc ^= *data; data++;
  554 + for (i = 0; i < 8; ++i)
  555 + {
  556 + if (crc & 1)
  557 + crc = (crc >> 1) ^ 0xA6BC; // 0xA6BC = reverse 0x3D65
  558 + else
  559 + crc = (crc >> 1);
  560 + }
  561 + }
  562 + return ~crc; // crc^Xorout
  563 +}
  564 +
  565 +/******************************************************************************
  566 + * Name: CRC-32 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
  567 + * Poly: 0x4C11DB7
  568 + * Init: 0xFFFFFFF
  569 + * Refin: True
  570 + * Refout: True
  571 + * Xorout: 0xFFFFFFF
  572 + * Alias: CRC_32/ADCCP
  573 + * Use: WinRAR,ect.
  574 + *****************************************************************************/
  575 +T_JZsdkReturnCode CheckSum_crc32(U8_t *data, unsigned int length, U32_t *ReturnCheckSum)
  576 +{
  577 + U8_t i;
  578 + U32_t crc = 0xffffffff; // Initial value
  579 + while(length--)
  580 + {
  581 + crc ^= *data++; // crc ^= *data; data++;
  582 + for (i = 0; i < 8; ++i)
  583 + {
  584 + if (crc & 1)
  585 + crc = (crc >> 1) ^ 0xEDB88320;// 0xEDB88320= reverse 0x04C11DB7
  586 + else
  587 + crc = (crc >> 1);
  588 + }
  589 + }
  590 +
  591 + *ReturnCheckSum = ~crc; // crc^Xorout
  592 +
  593 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  594 +}
  595 +
  596 +/******************************************************************************
  597 + * Name: CRC-32/MPEG-2 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
  598 + * Poly: 0x4C11DB7
  599 + * Init: 0xFFFFFFF
  600 + * Refin: False
  601 + * Refout: False
  602 + * Xorout: 0x0000000
  603 + * Note:
  604 + *****************************************************************************/
  605 +U32_t crc32_mpeg_2(U8_t *data, unsigned int length)
  606 +{
  607 + U8_t i;
  608 + U32_t crc = 0xffffffff; // Initial value
  609 + while(length--)
  610 + {
  611 + crc ^= (U32_t)(*data++) << 24;// crc ^=(U32_t)(*data)<<24; data++;
  612 + for (i = 0; i < 8; ++i)
  613 + {
  614 + if ( crc & 0x80000000 )
  615 + crc = (crc << 1) ^ 0x04C11DB7;
  616 + else
  617 + crc <<= 1;
  618 + }
  619 + }
  620 + return crc;
  621 +}
  622 +/*---------------------------------------------------------------------------*/
  1 +
  2 +
  3 +/**
  4 + ********************************************************************
  5 + * @file JZsdk_FileSystem.h
  6 + * 用于文件系统操作
  7 + *
  8 + *********************************************************************
  9 + */
  10 +
  11 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  12 +#ifndef CHECK_SUM_H
  13 +#define CHECK_SUM_H
  14 +
  15 +/* Includes ------------------------------------------------------------------*/
  16 +#include "../../JZsdk_Code/JZsdk_Code.h"
  17 +
  18 +#ifdef __cplusplus
  19 +extern "C" {
  20 +#endif
  21 +
  22 +/* Exported constants --------------------------------------------------------*/
  23 +/* 常亮定义*/
  24 +
  25 +/* Exported types ------------------------------------------------------------*/
  26 +
  27 +
  28 +/* Exported functions --------------------------------------------------------*/
  29 +T_JZsdkReturnCode CheckSum_crc32(U8_t *data, unsigned int length, U32_t *ReturnCheckSum);
  30 +T_JZsdkReturnCode CheckSum_crc32(U8_t *data, unsigned int length, U32_t *ReturnCheckSum);
  31 +
  32 +#ifdef __cplusplus
  33 +}
  34 +#endif
  35 +
  36 +#endif
  37 +/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <string.h>
  4 +#include "sys/stat.h"
  5 +#include "stdint.h"
  6 +#include "JZsdkLib.h"
  7 +
  8 +#include "./CheckSum_Src.h"
  9 +#include "./JZsdk_CheckSum.h"
  10 +
  11 +
  12 +static T_JZsdkReturnCode JZsdk_Check_Src32(unsigned char *DIR, unsigned char *checksum, unsigned int checksum_len)
  13 +{
  14 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  15 + //1、计算得到校验码
  16 + U32_t LocalCheckSum = 0;
  17 +
  18 + //2、将数据读取出来
  19 + FILE* fp = NULL;
  20 + unsigned char* pbuf = NULL;
  21 + struct stat st;
  22 +
  23 + if (stat(DIR, &st) != 0)
  24 + {
  25 + JZSDK_LOG_ERROR("stat file error\n");
  26 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  27 + }
  28 + fflush(stdout);
  29 +
  30 + pbuf = (unsigned char*)malloc(st.st_size);
  31 + if (pbuf == NULL)
  32 + {
  33 + JZSDK_LOG_ERROR("malloc error [%ld]\n", st.st_size);
  34 + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
  35 + }
  36 +
  37 + fp = fopen(DIR, "rb");
  38 + if (fp == NULL)
  39 + {
  40 + printf("open file error %s\n", DIR);
  41 + free(pbuf);
  42 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  43 + }
  44 +
  45 + fread(pbuf, 1, st.st_size, fp);
  46 +
  47 + CheckSum_crc32((U8_t*)pbuf, st.st_size, &LocalCheckSum);
  48 +
  49 + fclose(fp);
  50 +
  51 + //3、校验
  52 + //将unsigned char的码值转换成U32_t
  53 + U32_t CheckSum = 0;
  54 + memcpy(&CheckSum, checksum, checksum_len);
  55 + if (CheckSum != LocalCheckSum)
  56 + {
  57 + JZSDK_LOG_ERROR("checksum error\n");
  58 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  59 + }
  60 + else
  61 + {
  62 + JZSDK_LOG_INFO("checksum success\n");
  63 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  64 + }
  65 +
  66 + free(pbuf);
  67 +
  68 + return ret;
  69 +}
  70 +
  71 +static T_JZsdkReturnCode JZsdk_Check_Md5(unsigned char *DIR, unsigned char *checksum, unsigned int checksum_len)
  72 +{
  73 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  74 +
  75 + //1、获取文件的md5校验码
  76 + unsigned char cmd[256];
  77 + unsigned char md5[32];
  78 + memset(cmd,0,sizeof(cmd));
  79 + snprintf(cmd, sizeof(cmd), "md5sum %s", DIR);
  80 + JZsdk_RunSystemCmd_ReturnResult_Str(cmd, md5);
  81 +
  82 + //对比校验码
  83 + if (memcmp(md5, checksum, 21) != 0)
  84 + {
  85 + JZSDK_LOG_ERROR("checksum error\n");
  86 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  87 + }
  88 +
  89 + return ret;
  90 +}
  91 +
  92 +T_JZsdkReturnCode JZsdk_CheckSum(T_JZsdkCheckSumType CheckSumType, unsigned char *DIR, unsigned char *checksum, unsigned int checksum_len)
  93 +{
  94 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  95 +
  96 + switch (CheckSumType)
  97 + {
  98 + case JZSDK_CHECK_SUM_TYPE_MD5:
  99 + return JZsdk_Check_Md5(DIR, checksum, checksum_len);
  100 + break;
  101 +
  102 + case JZSDK_CHECK_SUM_TYPE_SRC32:
  103 + return JZsdk_Check_Src32(DIR, checksum, checksum_len);
  104 + break;
  105 +
  106 + default:
  107 + break;
  108 + }
  109 +
  110 +
  111 + return ret;
  112 +}
  1 +
  2 +
  3 +/**
  4 + ********************************************************************
  5 + * @file JZsdk_CheckSum.h
  6 + *
  7 + *
  8 + *********************************************************************
  9 + */
  10 +
  11 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  12 +#ifndef JZSDK_CHECK_SUM_H
  13 +#define JZSDK_CHECK_SUM_H
  14 +
  15 +/* Includes ------------------------------------------------------------------*/
  16 +#include "../../JZsdk_Code/JZsdk_Code.h"
  17 +
  18 +#ifdef __cplusplus
  19 +extern "C" {
  20 +#endif
  21 +
  22 +/* Exported constants --------------------------------------------------------*/
  23 +/* 常亮定义*/
  24 +typedef enum T_JZsdkCheckSumType
  25 +{
  26 + JZSDK_CHECK_SUM_TYPE_NONE = 0x0000,
  27 + JZSDK_CHECK_SUM_TYPE_MD5 = 0x0001,
  28 + JZSDK_CHECK_SUM_TYPE_SRC32 = 0x0002,
  29 +}T_JZsdkCheckSumType;
  30 +
  31 +/* Exported types ------------------------------------------------------------*/
  32 +
  33 +
  34 +/* Exported functions --------------------------------------------------------*/
  35 +T_JZsdkReturnCode JZsdk_CheckSum(T_JZsdkCheckSumType CheckSumType, unsigned char *DIR, unsigned char *checksum, unsigned int checksum_len);
  36 +
  37 +
  38 +#ifdef __cplusplus
  39 +}
  40 +#endif
  41 +
  42 +#endif
  43 +/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 12
13 #define JZSDK_FILENAME_SIZE (128) //文件名最大长度128 13 #define JZSDK_FILENAME_SIZE (128) //文件名最大长度128
14 #define JZSDK_CMD_SIZE (256) //cmd指令最大长度 14 #define JZSDK_CMD_SIZE (256) //cmd指令最大长度
  15 +#define JZSDK_DIR_SIZE (256) //目录名最大长度
15 16
16 17
17 #endif 18 #endif
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 #include <stdbool.h> 4 #include <stdbool.h>
5 #include <string.h> 5 #include <string.h>
6 #include <unistd.h> 6 #include <unistd.h>
  7 +#include <math.h>
7 #include <sys/types.h> 8 #include <sys/types.h>
8 #include <sys/stat.h> 9 #include <sys/stat.h>
9 #include "JZsdkLib.h" 10 #include "JZsdkLib.h"
@@ -49,17 +50,58 @@ T_JZsdkReturnCode JZsdk_RunSystemCmd(char *systemCmd) @@ -49,17 +50,58 @@ T_JZsdkReturnCode JZsdk_RunSystemCmd(char *systemCmd)
49 运行命令 并读取返回值 50 运行命令 并读取返回值
50 51
51 */ 52 */
52 -// FILE* JZsdk_RunSystemCmd_ReturnFilePointer(char *systemCmd)  
53 -// {  
54 -// FILE *fp; 53 +T_JZsdkReturnCode JZsdk_RunSystemCmd_ReturnResult(char *systemCmd, unsigned int *result)
  54 +{
  55 + FILE *fp;
  56 + double temp = 0;
  57 +
  58 + fp = popen(systemCmd, "r");
  59 + if (fp == NULL) {
  60 + printf("Failed to run command\n");
  61 + }
  62 +
  63 + // 读取并转换时长(这里假设ffprobe的输出只有一行)
  64 + if (fscanf(fp, "%lf", &temp) != 1)
  65 + {
  66 + pclose(fp);
  67 + printf("Failed to read duration\n");
  68 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  69 + }
  70 +
  71 + pclose(fp);
  72 +
  73 + *result = (unsigned int)ceil(temp);
55 74
56 -// fp = popen(systemCmd, "r"); 75 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  76 +}
57 77
58 -// pclose(fp);  
59 78
60 -// return fp;  
61 -// } 79 +/*
62 80
  81 + 运行命令 并读取返回值
  82 +
  83 +*/
  84 +T_JZsdkReturnCode JZsdk_RunSystemCmd_ReturnResult_Str(char *systemCmd, unsigned char *str)
  85 +{
  86 + FILE *fp;
  87 + double temp = 0;
  88 +
  89 + fp = popen(systemCmd, "r");
  90 + if (fp == NULL) {
  91 + printf("Failed to run command\n");
  92 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  93 + }
  94 +
  95 + // 读取命令的输出
  96 + while (fgets(str, sizeof(str)-1, fp) != NULL)
  97 + {
  98 + printf("%s", str);
  99 + }
  100 +
  101 + pclose(fp);
  102 +
  103 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  104 +}
63 105
64 /********************************** 106 /**********************************
65 * 107 *
@@ -371,14 +413,34 @@ T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *File @@ -371,14 +413,34 @@ T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *File
371 int result = stat(FilePath, &statbuf); 413 int result = stat(FilePath, &statbuf);
372 414
373 if (result == -1) { 415 if (result == -1) {
  416 + // 检查 errno 以确定错误原因
  417 + if (errno == EACCES)
  418 + {
  419 + // 没有读取文件的权限
  420 + JZSDK_LOG_ERROR("无权限");
374 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 421 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
375 } 422 }
  423 + else if (errno == ENOENT)
  424 + {
  425 + // 文件不存在
  426 + JZSDK_LOG_ERROR("无文件");
  427 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  428 + }
  429 + else {
  430 + // 其他错误
  431 + JZSDK_LOG_ERROR("读取错误");
  432 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  433 + }
  434 + }
  435 +
  436 + //JZSDK_LOG_DEBUG("%s %d",FilePath, statbuf.st_size);
376 437
377 *FileSize = statbuf.st_size; 438 *FileSize = statbuf.st_size;
378 439
379 if (*FileSize == 0) 440 if (*FileSize == 0)
380 { 441 {
381 // 文件大小为0,可能是空文件 442 // 文件大小为0,可能是空文件
  443 + JZSDK_LOG_ERROR("文件大小为空");
382 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 444 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
383 } 445 }
384 446
@@ -37,10 +37,11 @@ T_JZsdkReturnCode JZsdk_create_hardlink(const char* target_path, const char* lin @@ -37,10 +37,11 @@ T_JZsdkReturnCode JZsdk_create_hardlink(const char* target_path, const char* lin
37 T_JZsdkReturnCode JZsdk_check_directory_exists_posix(const char* directory_path); 37 T_JZsdkReturnCode JZsdk_check_directory_exists_posix(const char* directory_path);
38 T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *FileSize); 38 T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *FileSize);
39 T_JZsdkReturnCode JZsdk_copy_file_byC(const char* source_path, const char* dest_path); 39 T_JZsdkReturnCode JZsdk_copy_file_byC(const char* source_path, const char* dest_path);
  40 +T_JZsdkReturnCode JZsdk_RunSystemCmd_ReturnResult(char *systemCmd, unsigned int *result);
  41 +T_JZsdkReturnCode JZsdk_RunSystemCmd_ReturnResult_Str(char *systemCmd, unsigned char *str);
40 42
41 #ifdef __cplusplus 43 #ifdef __cplusplus
42 } 44 }
43 #endif 45 #endif
44 46
45 #endif 47 #endif
46 -/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/  
@@ -14,6 +14,7 @@ @@ -14,6 +14,7 @@
14 #include "BaseConfig.h" 14 #include "BaseConfig.h"
15 #include "Psdk_UI_io.h" 15 #include "Psdk_UI_io.h"
16 16
  17 +
17 #include "Lighting_InAndOut.h" 18 #include "Lighting_InAndOut.h"
18 #include "JZsdk_network/JZsdk_network.h" 19 #include "JZsdk_network/JZsdk_network.h"
19 20
@@ -32,7 +33,7 @@ @@ -32,7 +33,7 @@
32 #include "Megaphone/Megaphone.h" 33 #include "Megaphone/Megaphone.h"
33 #endif 34 #endif
34 35
35 -#if SIDE_LASER_STATUS_ON 36 +#ifdef SIDE_LASER_STATUS_ON
36 #include "SideLaser/SideLaser.h" 37 #include "SideLaser/SideLaser.h"
37 #endif 38 #endif
38 39
@@ -77,7 +78,7 @@ T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode) @@ -77,7 +78,7 @@ T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode)
77 Megaphone_StopPlay(JZ_FLAGCODE_OFF); 78 Megaphone_StopPlay(JZ_FLAGCODE_OFF);
78 79
79 //修改滤波 80 //修改滤波
80 - AudioDeal_FilterReset(0x01); 81 + AudioDeal_SetFilterMode(0x01);
81 } 82 }
82 else 83 else
83 { 84 {
@@ -85,7 +86,7 @@ T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode) @@ -85,7 +86,7 @@ T_JZsdkReturnCode Main_M30_all_filter_mode(int *mode)
85 Megaphone_StopPlay(JZ_FLAGCODE_OFF); 86 Megaphone_StopPlay(JZ_FLAGCODE_OFF);
86 87
87 //修改滤波 88 //修改滤波
88 - AudioDeal_FilterReset(0x00); 89 + AudioDeal_SetFilterMode(0x00);
89 } 90 }
90 91
91 } 92 }
@@ -147,14 +148,12 @@ T_JZsdkReturnCode Main_APP_Psdk() @@ -147,14 +148,12 @@ T_JZsdkReturnCode Main_APP_Psdk()
147 JZsdk_data_transmisson_Receive_Init(); 148 JZsdk_data_transmisson_Receive_Init();
148 149
149 //喊话器功能被打开时 150 //喊话器功能被打开时
150 - if (MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON)  
151 - { 151 +#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
  152 +
152 //音频库初始化 153 //音频库初始化
153 AudioDeal_Init(); 154 AudioDeal_Init();
154 155
155 - //  
156 - }  
157 - 156 +#endif
158 157
159 if (DEVICE_VERSION == TF_A1) 158 if (DEVICE_VERSION == TF_A1)
160 { 159 {
@@ -290,7 +289,7 @@ T_JZsdkReturnCode Main_APP_Psdk() @@ -290,7 +289,7 @@ T_JZsdkReturnCode Main_APP_Psdk()
290 289
291 //灯类初始化 290 //灯类初始化
292 Lighting_Init(); 291 Lighting_Init();
293 -#if SIDE_LASER_STATUS_ON 292 +#ifdef SIDE_LASER_STATUS_ON
294 //侧边激光初始化 293 //侧边激光初始化
295 SideLaser_Init(); 294 SideLaser_Init();
296 #endif 295 #endif
@@ -300,6 +299,29 @@ T_JZsdkReturnCode Main_APP_Psdk() @@ -300,6 +299,29 @@ T_JZsdkReturnCode Main_APP_Psdk()
300 JZsdk_Uart_Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON); 299 JZsdk_Uart_Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
301 } 300 }
302 301
  302 + else if (DEVICE_VERSION == JZ_U3D)
  303 + {
  304 + //串口设备1初始化
  305 + //JZsdk_Uart_Init(UART_DEV_1);
  306 +
  307 + //串口设备2初始化
  308 + JZsdk_Uart_Init(UART_DEV_2);
  309 +
  310 + //喊话器初始化
  311 + Megaphone_Init();
  312 +
  313 + //云台初始化
  314 + Gimbal_Init();
  315 +
  316 + //灯类初始化
  317 + Lighting_Init();
  318 +
  319 + delayMs(1000);
  320 +
  321 + //消息订阅初始化
  322 + JZsdk_Uart_Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
  323 + }
  324 +
303 else if (DEVICE_VERSION == JZ_C1) 325 else if (DEVICE_VERSION == JZ_C1)
304 { 326 {
305 //引脚初始化 327 //引脚初始化
@@ -339,13 +361,11 @@ int Main_APP_Uart() @@ -339,13 +361,11 @@ int Main_APP_Uart()
339 Main_WorkMode(); 361 Main_WorkMode();
340 362
341 //喊话器功能被打开时 363 //喊话器功能被打开时
342 - if (MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON)  
343 - { 364 +#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
344 //音频库初始化 365 //音频库初始化
345 AudioDeal_Init(); 366 AudioDeal_Init();
346 367
347 - //  
348 - } 368 +#endif
349 369
350 if (DEVICE_VERSION == JZ_H1E) 370 if (DEVICE_VERSION == JZ_H1E)
351 { 371 {
@@ -465,6 +485,63 @@ int Main_APP_Uart() @@ -465,6 +485,63 @@ int Main_APP_Uart()
465 485
466 } 486 }
467 487
  488 + else if (DEVICE_VERSION == JZ_U3S)
  489 + {
  490 + //串口设备1初始化
  491 + JZsdk_Uart_Init(UART_DEV_1);
  492 +
  493 + //串口设备2初始化
  494 + JZsdk_Uart_Init(UART_DEV_2);
  495 +
  496 + //喊话器初始化
  497 + Megaphone_Init();
  498 +
  499 + //云台初始化
  500 + Gimbal_Init();
  501 +
  502 + //灯类初始化
  503 + Lighting_Init();
  504 +#ifdef SIDE_LASER_STATUS_ON
  505 + //侧边激光初始化
  506 + SideLaser_Init();
  507 +#endif
  508 + delayMs(1000);
  509 +
  510 + //消息订阅初始化
  511 + JZsdk_Uart_Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
  512 + }
  513 +
  514 + else if (DEVICE_VERSION == JZ_U3D)
  515 + {
  516 + //串口设备1初始化
  517 + JZsdk_Uart_Init(UART_DEV_1);
  518 +
  519 + //串口设备2初始化
  520 + JZsdk_Uart_Init(UART_DEV_2);
  521 +
  522 + //喊话器初始化
  523 + Megaphone_Init();
  524 +
  525 + //云台初始化
  526 + Gimbal_Init();
  527 +
  528 + //灯类初始化
  529 + Lighting_Init();
  530 +
  531 + delayMs(1000);
  532 +
  533 + //消息订阅初始化
  534 + JZsdk_Uart_Send_MessageSubcription_Control(UART_DEV_2, JZ_FLAGCODE_ON);
  535 +
  536 + // delayS(3);
  537 +
  538 + // JZSDK_LOG_INFO("开起发光");
  539 +
  540 + // //开灯
  541 + // UIcontrol_SearchLightControl(UART_DEV_1, 0x02);
  542 + // UIcontrol_Set_SearchLightLumen(UART_DEV_1, 1, 100, 100);
  543 +
  544 + }
468 545
469 546
470 if (DEVICE_VERSION == TF_A1) 547 if (DEVICE_VERSION == TF_A1)
@@ -598,11 +675,13 @@ static void *Main_WorkModeTask(void *arg) @@ -598,11 +675,13 @@ static void *Main_WorkModeTask(void *arg)
598 int start_voice_flag = JZ_FLAGCODE_OFF; 675 int start_voice_flag = JZ_FLAGCODE_OFF;
599 676
600 #if APP_VERSION == APP_UART 677 #if APP_VERSION == APP_UART
601 - for (i = 0; i < 60; i++) 678 + for (i = 0; i < JZsdk_ParamterParsing_GetTimeOutTime() ; i++)
  679 + {
  680 + if (JZsdk_ParamterParsing_GetTimeOutFlag() == JZ_FLAGCODE_OFF)
602 { 681 {
603 -#if CONNECTION_TIMED_OUT == VERSION_SWITCH_OFF  
604 break; 682 break;
605 -#endif 683 + }
  684 +
606 685
607 delayMs(1000);//延迟一秒钟 686 delayMs(1000);//延迟一秒钟
608 printf("计数%d\n",i); 687 printf("计数%d\n",i);
@@ -622,9 +701,9 @@ static void *Main_WorkModeTask(void *arg) @@ -622,9 +701,9 @@ static void *Main_WorkModeTask(void *arg)
622 } 701 }
623 } 702 }
624 703
625 - if(i==60 && WorkMode == JZ_FLAGCODE_OFF && CONNECTION_TIMED_OUT == VERSION_SWITCH_ON) 704 + if( i==JZsdk_ParamterParsing_GetTimeOutTime() && WorkMode == JZ_FLAGCODE_OFF && JZsdk_ParamterParsing_GetTimeOutFlag() == VERSION_SWITCH_ON)
626 { 705 {
627 - printf("串口连接超时,回到连接psdk"); 706 + JZSDK_LOG_ERROR("串口连接超时,回到连接psdk");
628 exit(0); 707 exit(0);
629 } 708 }
630 #elif APP_VERSION == APP_PSDK 709 #elif APP_VERSION == APP_PSDK
@@ -13,6 +13,8 @@ @@ -13,6 +13,8 @@
13 /* Includes ------------------------------------------------------------------*/ 13 /* Includes ------------------------------------------------------------------*/
14 #include "version_choose.h" 14 #include "version_choose.h"
15 #include "JZsdkLib.h" 15 #include "JZsdkLib.h"
  16 +#include "./ParamterParsing.h"
  17 +
16 #ifdef __cplusplus 18 #ifdef __cplusplus
17 extern "C" { 19 extern "C" {
18 #endif 20 #endif
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <string.h>
  4 +#include <unistd.h> // 包含getopt函数
  5 +#include <ctype.h>
  6 +
  7 +#include "JZsdkLib.h"
  8 +#include "./ParamterParsing.h"
  9 +
  10 +static int Timeout_flag = JZ_FLAGCODE_OFF; //超时标记位,默认关闭
  11 +static int Timeout_time = 60; //超时时间
  12 +
  13 +
  14 +int JZsdk_ParamterParsing_GetTimeOutFlag()
  15 +{
  16 + return Timeout_flag;
  17 +}
  18 +
  19 +int JZsdk_ParamterParsing_GetTimeOutTime()
  20 +{
  21 + return Timeout_time;
  22 +}
  23 +
  24 +/*************************************
  25 + *
  26 + * * 程序参数解析
  27 + * * 输入:参数字符串
  28 + *
  29 + *
  30 + * ********************************/
  31 +T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[])
  32 +{
  33 + JZSDK_LOG_INFO("参数解析");
  34 +
  35 + int c;
  36 +
  37 + // getopt_long 需要长选项,但这里我们只使用短选项
  38 + // getopt循环将逐个处理选项,直到没有更多选项
  39 + while ((c = getopt(argc, argv, "f:t:")) != -1)
  40 + {
  41 + switch (c) {
  42 + case 'f': //超时标记位
  43 + Timeout_flag = atoi(optarg);
  44 + break;
  45 + case 't': //超时时间
  46 + Timeout_time = atoi(optarg);
  47 + break;
  48 + case '?':
  49 + // 如果getopt遇到一个它不认识的选项,它会打印一个消息到stderr
  50 + // 并返回'?'。然后我们可以选择退出或给出更多帮助。
  51 + if (isprint(optopt))
  52 + JZSDK_LOG_ERROR("Unknown option `-%c'.", optopt);
  53 + else
  54 + JZSDK_LOG_ERROR("Unknown option character `\\x%x'.", optopt);
  55 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  56 + default:
  57 + break;
  58 + }
  59 + }
  60 +
  61 + JZSDK_LOG_INFO("参数解析成功");
  62 +
  63 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  64 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file ParamterParsing.h
  4 + * 用于文件系统操作
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_PARAMTERPARSING_H
  11 +#define JZSDK_PARAMTERPARSING_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 +/* Exported types ------------------------------------------------------------*/
  24 +
  25 +
  26 +/* Exported functions --------------------------------------------------------*/
  27 +T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[]);
  28 +int JZsdk_ParamterParsing_GetTimeOutFlag();
  29 +int JZsdk_ParamterParsing_GetTimeOutTime();
  30 +
  31 +#ifdef __cplusplus
  32 +}
  33 +#endif
  34 +
  35 +#endif
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 #define VERSION_CHOOSE_H 7 #define VERSION_CHOOSE_H
8 #include "./ConfigParams.h" 8 #include "./ConfigParams.h"
9 //1~10行 除了D可以修改版本选择 禁止动任何东西 9 //1~10行 除了D可以修改版本选择 禁止动任何东西
10 -#define DEVICE_VERSION JZ_H1T 10 +#define DEVICE_VERSION JZ_U3S
11 11
12 //禁止修改行 选择是串口程序 还是 psdk程序 12 //禁止修改行 选择是串口程序 还是 psdk程序
13 #define APP_VERSION APP_UART 13 #define APP_VERSION APP_UART
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 #define MAJOR_VERSION 0x00 19 #define MAJOR_VERSION 0x00
20 #define MINOR_VERSION 0x00 20 #define MINOR_VERSION 0x00
21 #define MODIFY_VERSION 0x02 21 #define MODIFY_VERSION 0x02
22 -#define DEBUG_VERSION 0x06 22 +#define DEBUG_VERSION 0x07
23 23
24 //禁止修改行 滤波方式 24 //禁止修改行 滤波方式
25 #define FILTERING_TYPE HIGH_PASS_FILTERING 25 #define FILTERING_TYPE HIGH_PASS_FILTERING
@@ -18,6 +18,11 @@ @@ -18,6 +18,11 @@
18 #include "Megaphone/Megaphone.h" 18 #include "Megaphone/Megaphone.h"
19 #include "DeviceInfo/DeviceInfo.h" 19 #include "DeviceInfo/DeviceInfo.h"
20 20
  21 +#if (MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON)
  22 + #include "Megaphone/Megaphone.h"
  23 + #include "Megaphone/AudioFile/Megaphone_AudioFile.h"
  24 +#endif
  25 +
21 static int UartRecvMode = 0; 26 static int UartRecvMode = 0;
22 static int SecondaryDeviceName = 0x00; // 从设备名,用于多设备相连时通知控制端 从机设备名 27 static int SecondaryDeviceName = 0x00; // 从设备名,用于多设备相连时通知控制端 从机设备名
23 28
@@ -552,7 +557,7 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_LimitTransmission(int Port, @@ -552,7 +557,7 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_LimitTransmission(int Port,
552 **********/ 557 **********/
553 static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop(int Port, char *getbuf) 558 static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop(int Port, char *getbuf)
554 { 559 {
555 - JZSDK_LOG_INFO("%s,开始传输的音频文件保存",RecvDeal_GetPortName(Port)); 560 + JZSDK_LOG_INFO("%s,传输的音频文件保存",RecvDeal_GetPortName(Port));
556 561
557 //获取帧的序列号 562 //获取帧的序列号
558 int FrameSequence = JZsdk_Get_FrameSequence(getbuf); 563 int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
@@ -567,7 +572,7 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop(int Port, char *getbuf @@ -567,7 +572,7 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop(int Port, char *getbuf
567 572
568 //1、保存音频数据 573 //1、保存音频数据
569 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON 574 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
570 - Megaphone_SaveAudioFileStop(); 575 + Megaphone_SaveAudioFileStop(JZ_FLAGCODE_OFF, NULL);
571 #endif 576 #endif
572 577
573 //3、调整接收模式为音频文件传输 578 //3、调整接收模式为音频文件传输
@@ -577,6 +582,87 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop(int Port, char *getbuf @@ -577,6 +582,87 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop(int Port, char *getbuf
577 JZsdk_Uart_SendDeal_Reply_Sucesss(Port, FrameSequence); 582 JZsdk_Uart_SendDeal_Reply_Sucesss(Port, FrameSequence);
578 } 583 }
579 584
  585 +
  586 +/*********
  587 + *
  588 + * 关闭音频文件上传, 并校验
  589 + *
  590 + *
  591 +**********/
  592 +static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, char *getbuf)
  593 +{
  594 + T_JZsdkReturnCode ret;
  595 + JZSDK_LOG_INFO("%s,传输的音频文件保存并校验",RecvDeal_GetPortName(Port));
  596 +
  597 + //获取帧的序列号
  598 + int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
  599 +
  600 + if (UartRecvMode != JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_UNLIMIT_TRANSMISSION)
  601 + {
  602 + //回复操作失败
  603 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  604 + JZSDK_LOG_ERROR("关闭音频文件上传失败,音频文件上传未开始,无法关闭");
  605 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  606 + }
  607 +
  608 + unsigned char checkCode[128];
  609 + int frameLenth = ((int)getbuf[3]) << 8 | (int)getbuf[4];
  610 + int CodeLenth = frameLenth - 10 - 2;
  611 + if (CodeLenth != 0)
  612 + {
  613 + memcpy(checkCode, &getbuf[10], CodeLenth);
  614 + JZSDK_LOG_INFO("checkCode :%s", checkCode);
  615 + }
  616 + else
  617 + {
  618 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  619 + JZSDK_LOG_ERROR("关闭音频文件上传失败,校验码长度为0");
  620 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  621 + }
  622 +
  623 + //获取校验方式
  624 + int checkType = 0;
  625 + if (getbuf[9] == 0)
  626 + {
  627 + checkType = JZSDK_CHECK_SUM_TYPE_MD5;
  628 + }
  629 + else if (getbuf[9] == 1)
  630 + {
  631 + checkType = JZSDK_CHECK_SUM_TYPE_SRC32;
  632 + }
  633 + else
  634 + {
  635 + checkType = JZSDK_CHECK_SUM_TYPE_MD5;
  636 + }
  637 +
  638 + //1、保存音频数据
  639 +#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
  640 + ret = Megaphone_SaveAudioFileStop(checkType, checkCode);
  641 + if (ret == JZ_ERROR_CHECKCODE_CHECK_ERROR)
  642 + {
  643 + JZsdk_Uart_SendDeal_Reply_CheckError(Port, FrameSequence);
  644 + }
  645 + else if (ret == JZ_ERROR_CHECKCODE_DECODE_ERROR)
  646 + {
  647 + JZsdk_Uart_SendDeal_Reply_DecodeError(Port, FrameSequence);
  648 + }
  649 + else if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  650 + {
  651 + //回复操作成功
  652 + JZsdk_Uart_SendDeal_Reply_Sucesss(Port, FrameSequence);
  653 + }
  654 + else
  655 + {
  656 + //回复操作失败
  657 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  658 + }
  659 +#endif
  660 +
  661 + //3、调整接收模式为音频文件传输
  662 + JZsdk_Uart_RecvDeal_Set_UartReceiveMode(Port, JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP);
  663 +}
  664 +
  665 +
580 /********* 666 /*********
581 * 667 *
582 * 播放指定音频 668 * 播放指定音频
@@ -798,6 +884,125 @@ static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf) @@ -798,6 +884,125 @@ static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf)
798 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 884 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
799 } 885 }
800 886
  887 +/*************
  888 + *
  889 + * 获取音频详细信息
  890 + *
  891 + *
  892 +**************/
  893 +static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char *getbuf)
  894 +{
  895 + T_JZsdkReturnCode ret;
  896 + JZSDK_LOG_INFO("%s,获取音频详细信息",RecvDeal_GetPortName(Port));
  897 +
  898 + //获取帧的序列号
  899 + int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
  900 +
  901 + //解析帧
  902 + //1、解析列表归属
  903 + int ListBelong = getbuf[9];
  904 + //2、解析查询的内容
  905 + int QueryContent = getbuf[10];
  906 + //3、解析长度
  907 + int frameLenth = ((int)getbuf[3]) << 8 | (int)getbuf[4];
  908 +
  909 + //4、解析音频名字
  910 + char AudioName[128];
  911 + int AudioNameLength = 0;
  912 + AudioNameLength = frameLenth - 9 - 2;
  913 + memcpy(AudioName, getbuf + 9, AudioNameLength);
  914 +
  915 +#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
  916 +
  917 +if (ListBelong == 0)
  918 +{
  919 + //1、检查歌曲是否存在
  920 + ret = AudioFile_CheckFile_WhetherInList(AudioName,AudioNameLength);
  921 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  922 + {
  923 + //回复操作失败
  924 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  925 +
  926 + return ret;
  927 + }
  928 +
  929 + //2、获取歌曲详细信息
  930 + struct AudioMange_audio_struct AudioDetailMessage;
  931 + ret = AudioFile_GetAudioInfo(AudioName, AudioNameLength,&AudioDetailMessage);
  932 + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  933 + {
  934 + //回复操作失败
  935 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  936 +
  937 + return ret;
  938 + }
  939 +
  940 + //获取文件的md5码
  941 + unsigned char md5[16];
  942 + unsigned char cmd[256];
  943 + snprintf(cmd, sizeof(cmd), "md5sum /root/sdcard/audio/%s", AudioDetailMessage.FileName);
  944 + JZsdk_RunSystemCmd_ReturnResult_Str(cmd, md5);
  945 +
  946 + //3、发送歌曲详细信息
  947 + // JZSDK_LOG_INFO("即将发送%s, %d, %d, %s",
  948 + // AudioDetailMessage.FileName, AudioDetailMessage.FileSize, AudioDetailMessage.Time, md5);
  949 +
  950 + //要求所有信息
  951 + if (QueryContent == 0)
  952 + {
  953 + //发送名字
  954 + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x00, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen);
  955 +
  956 + //文件大小
  957 + unsigned char str1[4];
  958 + str1[0] = (AudioDetailMessage.FileSize >> 24) & 0xFF;
  959 + str1[1] = (AudioDetailMessage.FileSize >> 16) & 0xFF;
  960 + str1[2] = (AudioDetailMessage.FileSize >> 8) & 0xFF;
  961 + str1[3] = AudioDetailMessage.FileSize & 0xFF;
  962 +
  963 + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x01, str1, sizeof(str1));
  964 +
  965 + //播放时间
  966 + unsigned char str2[4];
  967 + str2[0] = (AudioDetailMessage.Time >> 8) & 0xFF;
  968 + str2[1] = AudioDetailMessage.Time & 0xFF;
  969 +
  970 + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x02, str2, sizeof(str2));
  971 + }
  972 + else if (QueryContent == 0x01)
  973 + {
  974 + //文件大小
  975 + unsigned char str1[4];
  976 + str1[0] = (AudioDetailMessage.FileSize >> 24) & 0xFF;
  977 + str1[1] = (AudioDetailMessage.FileSize >> 16) & 0xFF;
  978 + str1[2] = (AudioDetailMessage.FileSize >> 8) & 0xFF;
  979 + str1[3] = AudioDetailMessage.FileSize & 0xFF;
  980 +
  981 + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x01, str1, sizeof(str1));
  982 + }
  983 + else if (QueryContent == 0x02)
  984 + {
  985 + //播放时间
  986 + unsigned char str2[4];
  987 + str2[0] = (AudioDetailMessage.Time >> 8) & 0xFF;
  988 + str2[1] = AudioDetailMessage.Time & 0xFF;
  989 +
  990 + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x02, str2, sizeof(str2));
  991 + }
  992 + else if (QueryContent == 0x20)
  993 + {
  994 + //发送md5码
  995 + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x20, md5, sizeof(md5));
  996 + }
  997 +
  998 +}
  999 +
  1000 +
  1001 +
  1002 +#endif
  1003 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  1004 +}
  1005 +
801 /********* 1006 /*********
802 * 1007 *
803 * 强制关闭功放 1008 * 强制关闭功放
@@ -1190,6 +1395,30 @@ static int RecvDeal_PlayLoop(int Port, char *getbuf) @@ -1190,6 +1395,30 @@ static int RecvDeal_PlayLoop(int Port, char *getbuf)
1190 1395
1191 /********* 1396 /*********
1192 * 1397 *
  1398 + * 设置循环时间
  1399 + *
  1400 + *
  1401 +**********/
  1402 +static int RecvDeal_PlayLoopInterval(int Port, char *getbuf)
  1403 +{
  1404 + JZSDK_LOG_INFO("%s,设置循环时间, %d",RecvDeal_GetPortName(Port),getbuf[9]);
  1405 +
  1406 + //获取帧的序列号
  1407 + int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
  1408 +
  1409 + int mode;
  1410 +
  1411 + int LoopInterval = ((int)getbuf[9] << 8) + (int)getbuf[10];
  1412 +
  1413 + UIcontrol_Set_AudioPlayLoopInterval(Port, LoopInterval);
  1414 +
  1415 + //回复操作成功
  1416 + JZsdk_Uart_SendDeal_Reply_Sucesss(Port, FrameSequence);
  1417 +}
  1418 +
  1419 +
  1420 +/*********
  1421 + *
1193 * 删除音频 1422 * 删除音频
1194 * 1423 *
1195 * 1424 *
@@ -1539,6 +1768,13 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_LimitTransmission(int Port, char *ge @@ -1539,6 +1768,13 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_LimitTransmission(int Port, char *ge
1539 { 1768 {
1540 JZSDK_LOG_INFO("%s,传输opus定长音频文件中",RecvDeal_GetPortName(Port)); 1769 JZSDK_LOG_INFO("%s,传输opus定长音频文件中",RecvDeal_GetPortName(Port));
1541 1770
  1771 + if (UartRecvMode != JZ_INSCODE_5AFRAME_OPUS_TRAN_UNLIMIT_TRANSMISSION)
  1772 + {
  1773 + JZSDK_LOG_ERROR("不处于opus传输模式,无法接收opus定长音频文件");
  1774 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  1775 + }
  1776 +
  1777 +
1542 T_JZsdkReturnCode ret; 1778 T_JZsdkReturnCode ret;
1543 1779
1544 //提取出数据 1780 //提取出数据
@@ -1579,7 +1815,7 @@ static int RecvDeal_OpusTrans_stop(int Port, char *getbuf) @@ -1579,7 +1815,7 @@ static int RecvDeal_OpusTrans_stop(int Port, char *getbuf)
1579 1815
1580 1816
1581 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON 1817 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
1582 - Megaphone_SaveOpusStop(); 1818 + Megaphone_SaveOpusStop(JZ_FLAGCODE_OFF, NULL);
1583 #endif 1819 #endif
1584 1820
1585 JZsdk_Uart_RecvDeal_Set_UartReceiveMode(Port, JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP); 1821 JZsdk_Uart_RecvDeal_Set_UartReceiveMode(Port, JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP);
@@ -1589,6 +1825,91 @@ static int RecvDeal_OpusTrans_stop(int Port, char *getbuf) @@ -1589,6 +1825,91 @@ static int RecvDeal_OpusTrans_stop(int Port, char *getbuf)
1589 //回复操作成功 1825 //回复操作成功
1590 JZsdk_Uart_SendDeal_Reply_Sucesss(Port, FrameSequence); 1826 JZsdk_Uart_SendDeal_Reply_Sucesss(Port, FrameSequence);
1591 } 1827 }
  1828 +
  1829 +
  1830 +/*********
  1831 + *
  1832 + * opus结束传输并校验
  1833 + *
  1834 + *
  1835 +**********/
  1836 +static int RecvDeal_OpusTrans_stop_and_check(int Port, char *getbuf)
  1837 +{
  1838 + T_JZsdkReturnCode ret;
  1839 +
  1840 + JZSDK_LOG_INFO("%s,传输的opus文件保存并校验",RecvDeal_GetPortName(Port));
  1841 +
  1842 + //获取帧的序列号
  1843 + int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
  1844 +
  1845 + if (UartRecvMode != JZ_INSCODE_5AFRAME_OPUS_TRAN_UNLIMIT_TRANSMISSION)
  1846 + {
  1847 + //回复操作失败
  1848 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  1849 + JZSDK_LOG_ERROR("关闭音频文件上传失败,音频文件上传未开始,无法关闭");
  1850 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  1851 + }
  1852 +
  1853 + unsigned char checkCode[128];
  1854 + int frameLenth = ((int)getbuf[3]) << 8 | (int)getbuf[4];
  1855 + int CodeLenth = frameLenth - 10 - 2;
  1856 + if (CodeLenth != 0)
  1857 + {
  1858 + memcpy(checkCode, &getbuf[10], CodeLenth);
  1859 + JZSDK_LOG_INFO("checkCode :%s", checkCode);
  1860 + }
  1861 + else
  1862 + {
  1863 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  1864 + JZSDK_LOG_ERROR("关闭音频文件上传失败,校验码长度为0");
  1865 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  1866 + }
  1867 +
  1868 + //获取校验方式
  1869 + int checkType = 0;
  1870 + if (getbuf[9] == 0)
  1871 + {
  1872 + checkType = JZSDK_CHECK_SUM_TYPE_MD5;
  1873 + }
  1874 + else if (getbuf[9] == 1)
  1875 + {
  1876 + checkType = JZSDK_CHECK_SUM_TYPE_SRC32;
  1877 + }
  1878 + else
  1879 + {
  1880 + checkType = JZSDK_CHECK_SUM_TYPE_MD5;
  1881 + }
  1882 +
  1883 + //1、保存音频数据
  1884 +#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
  1885 + ret = Megaphone_SaveOpusStop(checkType, checkCode);
  1886 + if (ret == JZ_ERROR_CHECKCODE_CHECK_ERROR)
  1887 + {
  1888 + JZsdk_Uart_SendDeal_Reply_CheckError(Port, FrameSequence);
  1889 + }
  1890 + else if (ret == JZ_ERROR_CHECKCODE_DECODE_ERROR)
  1891 + {
  1892 + JZsdk_Uart_SendDeal_Reply_DecodeError(Port, FrameSequence);
  1893 + }
  1894 + else if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  1895 + {
  1896 + //回复操作成功
  1897 + JZsdk_Uart_SendDeal_Reply_Sucesss(Port, FrameSequence);
  1898 + }
  1899 + else
  1900 + {
  1901 + //回复操作失败
  1902 + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence);
  1903 + }
  1904 +
  1905 +#endif
  1906 +
  1907 + //3、调整接收模式为音频文件传输
  1908 + JZsdk_Uart_RecvDeal_Set_UartReceiveMode(Port, JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP);
  1909 +
  1910 +}
  1911 +
  1912 +
1592 /********* 1913 /*********
1593 * 1914 *
1594 * opus播放 1915 * opus播放
@@ -2007,11 +2328,11 @@ static int RecvDeal_SearchLight_SubscriptionControl(int Port, char *getbuf) @@ -2007,11 +2328,11 @@ static int RecvDeal_SearchLight_SubscriptionControl(int Port, char *getbuf)
2007 2328
2008 if (Port == UART_DEV_2) 2329 if (Port == UART_DEV_2)
2009 { 2330 {
2010 - JZsdk_Uart_SendDeal_MessageSubcription_Control(UART_DEV_1, value); 2331 + //JZsdk_Uart_SendDeal_MessageSubcription_Control(UART_DEV_1, value);
2011 } 2332 }
2012 else if (Port == UART_DEV_1) 2333 else if (Port == UART_DEV_1)
2013 { 2334 {
2014 - JZsdk_Uart_SendDeal_MessageSubcription_Control(UART_DEV_2, value); 2335 + //JZsdk_Uart_SendDeal_MessageSubcription_Control(UART_DEV_2, value);
2015 } 2336 }
2016 else 2337 else
2017 { 2338 {
@@ -3129,6 +3450,12 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in @@ -3129,6 +3450,12 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in
3129 return 0; 3450 return 0;
3130 break; 3451 break;
3131 3452
  3453 + //关闭音频文件上传并校验
  3454 + case JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP_AND_CHECK:
  3455 + RecvDeal_SaveAudioFileTrans_stop_and_check(Port,getbuf);
  3456 + return 0;
  3457 + break;
  3458 +
3132 //播放指定音频 3459 //播放指定音频
3133 case JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE: 3460 case JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE:
3134 RecvDeal_audio_PlayFile(Port,getbuf); 3461 RecvDeal_audio_PlayFile(Port,getbuf);
@@ -3237,6 +3564,11 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in @@ -3237,6 +3564,11 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in
3237 return 0; 3564 return 0;
3238 break; 3565 break;
3239 3566
  3567 + //设置循环间隔
  3568 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_ADUIO_LOOP_INTERVAL:
  3569 + RecvDeal_PlayLoopInterval(Port,getbuf);
  3570 + return 0;
  3571 + break;
3240 3572
3241 //删除音频 3573 //删除音频
3242 case JZ_INSCODE_5AFRAME_DELETE_AUDIO: 3574 case JZ_INSCODE_5AFRAME_DELETE_AUDIO:
@@ -3278,6 +3610,13 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in @@ -3278,6 +3610,13 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in
3278 RecvDeal_OpusTrans_stop(Port,getbuf); 3610 RecvDeal_OpusTrans_stop(Port,getbuf);
3279 return 0; 3611 return 0;
3280 break; 3612 break;
  3613 +
  3614 + //关闭opus传输并校验
  3615 + case JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP_AND_CHECK:
  3616 + RecvDeal_OpusTrans_stop_and_check(Port,getbuf);
  3617 + return 0;
  3618 + break;
  3619 +
3281 //播放opus 3620 //播放opus
3282 case JZ_INSCODE_5AFRAME_OPUS_PLAY: 3621 case JZ_INSCODE_5AFRAME_OPUS_PLAY:
3283 RecvDeal_OpusPlay(Port,getbuf); 3622 RecvDeal_OpusPlay(Port,getbuf);
@@ -3360,8 +3699,11 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in @@ -3360,8 +3699,11 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in
3360 RecvDeal_audio_GetMusicList(Port,getbuf); 3699 RecvDeal_audio_GetMusicList(Port,getbuf);
3361 return 0; 3700 return 0;
3362 break; 3701 break;
3363 -  
3364 - 3702 + //查询音频详细信息
  3703 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE:
  3704 + RecvDeal_CheckStatus_AudioDetailMessage(Port,getbuf);
  3705 + return 0;
  3706 + break;
3365 3707
3366 //爆闪频率设置 3708 //爆闪频率设置
3367 case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY: 3709 case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY:
@@ -193,6 +193,38 @@ int JZsdk_Uart_SendDeal_Reply_Failure(int Uartport ,int FrameSequence) @@ -193,6 +193,38 @@ int JZsdk_Uart_SendDeal_Reply_Failure(int Uartport ,int FrameSequence)
193 JZsdk_Uart_UartSend(Uartport ,sendbuf, send_buf_len); 193 JZsdk_Uart_UartSend(Uartport ,sendbuf, send_buf_len);
194 } 194 }
195 195
  196 +//发送校验失败帧
  197 +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Reply_CheckError(int Uartport ,int FrameSequence)
  198 +{
  199 + unsigned char sendbuf[256];
  200 + int send_buf_len;
  201 +
  202 + //1、获取帧样板
  203 + JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_FILE_CHECK_DEFEAT , sendbuf, &send_buf_len);
  204 +
  205 + //2、写入数据
  206 + sendbuf[6] = FrameSequence; //帧序列
  207 +
  208 + //3、发送帧
  209 + JZsdk_Uart_UartSend(Uartport ,sendbuf, send_buf_len);
  210 +}
  211 +
  212 +//发送解码失败帧
  213 +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Reply_DecodeError(int Uartport ,int FrameSequence)
  214 +{
  215 + unsigned char sendbuf[256];
  216 + int send_buf_len;
  217 +
  218 + //1、获取帧样板
  219 + JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_FILE_DECODE_DEFEAT , sendbuf, &send_buf_len);
  220 +
  221 + //2、写入数据
  222 + sendbuf[6] = FrameSequence; //帧序列
  223 +
  224 + //3、发送帧
  225 + JZsdk_Uart_UartSend(Uartport ,sendbuf, send_buf_len);
  226 +}
  227 +
196 //发送当前从设备名 228 //发送当前从设备名
197 int JZsdk_Uart_SendDeal_Reply_SecondaryDeviceName(int Uartport , int device_name, int FrameSequence) 229 int JZsdk_Uart_SendDeal_Reply_SecondaryDeviceName(int Uartport , int device_name, int FrameSequence)
198 { 230 {
@@ -390,6 +422,33 @@ T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSeq @@ -390,6 +422,33 @@ T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSeq
390 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 422 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
391 } 423 }
392 424
  425 +//发送音频详细信息帧
  426 +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport, int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen)
  427 +{
  428 + printf("发送播放状态结束帧\n");
  429 + unsigned char sendbuf[256];
  430 + int send_buf_len;
  431 +
  432 + //1、获取帧样板
  433 + JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE , sendbuf, &send_buf_len);
  434 +
  435 + //2、写入数据
  436 + send_buf_len = send_buf_len -1 + datalen;
  437 +
  438 + sendbuf[3] = (unsigned char)( (send_buf_len >> 8) & 0xFF); //帧长度
  439 + sendbuf[4] = (unsigned char)(send_buf_len & 0xFF); //帧长度
  440 + sendbuf[6] = FrameSequence; //帧序列
  441 + sendbuf[9] = type;
  442 + memcpy(&sendbuf[10],data,datalen);
  443 + sendbuf[send_buf_len-2] = 0x00;
  444 + sendbuf[send_buf_len-1] = 0x23;
  445 +
  446 + //3、发送帧
  447 + JZsdk_Uart_UartSend(Uartport ,sendbuf, send_buf_len);
  448 +
  449 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  450 +}
  451 +
393 //发送播放状态结束帧 452 //发送播放状态结束帧
394 int JZsdk_Uart_SendDeal_Send_PlayStatus_end(int Uartport) 453 int JZsdk_Uart_SendDeal_Send_PlayStatus_end(int Uartport)
395 { 454 {
@@ -39,8 +39,15 @@ int JZsdk_Uart_SendDeal_QuerySecondaryDeviceName(int Uartport ,int FrameSequence @@ -39,8 +39,15 @@ int JZsdk_Uart_SendDeal_QuerySecondaryDeviceName(int Uartport ,int FrameSequence
39 39
40 40
41 int JZsdk_Uart_SendDeal_Reply_Sucesss(int Uartport ,int FrameSequence); 41 int JZsdk_Uart_SendDeal_Reply_Sucesss(int Uartport ,int FrameSequence);
  42 +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Reply_CheckError(int Uartport ,int FrameSequence);
  43 +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Reply_DecodeError(int Uartport ,int FrameSequence);
  44 +
  45 +
  46 +
42 int JZsdk_Uart_SendDeal_Reply_Failure(int Uartport ,int FrameSequence); 47 int JZsdk_Uart_SendDeal_Reply_Failure(int Uartport ,int FrameSequence);
43 T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSequence, int music_sum ,char **MusicName ,int *MusicNameLength); 48 T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSequence, int music_sum ,char **MusicName ,int *MusicNameLength);
  49 +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport,int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen);
  50 +
44 int JZsdk_Uart_SendDeal_Send_PlayStatus_end(int Uartport); 51 int JZsdk_Uart_SendDeal_Send_PlayStatus_end(int Uartport);
45 int JZsdk_Uart_SendDeal_Send_PlayStatus(int Uartport ,int num); 52 int JZsdk_Uart_SendDeal_Send_PlayStatus(int Uartport ,int num);
46 int JZsdk_Uart_SendDeal_Reply_MusicName(int Uartport ,char *music_name, int music_name_len); 53 int JZsdk_Uart_SendDeal_Reply_MusicName(int Uartport ,char *music_name, int music_name_len);
@@ -74,12 +74,20 @@ T_JZsdkReturnCode AudioDeal_Init() @@ -74,12 +74,20 @@ T_JZsdkReturnCode AudioDeal_Init()
74 JZSDK_LOG_INFO("MODULE_AUDIODEL_INIT_COMPLETE"); 74 JZSDK_LOG_INFO("MODULE_AUDIODEL_INIT_COMPLETE");
75 } 75 }
76 76
77 -T_JZsdkReturnCode AudioDeal_FilterReset(int mode) 77 +/*
  78 +
  79 + 设置滤波模式
  80 + 0x00 默认滤波 0x01 M30滤波
  81 +
  82 +
  83 +*/
  84 +T_JZsdkReturnCode AudioDeal_SetFilterMode(int mode)
78 { 85 {
79 - FF_Filter_Init(AudioDeakInfo_index, mode); 86 + FF_Filter_Set_FilterMode(mode);
80 } 87 }
81 88
82 89
  90 +
83 /****************************** 91 /******************************
84 * 92 *
85 * 采样器重初始化 93 * 采样器重初始化
@@ -88,11 +96,9 @@ T_JZsdkReturnCode AudioDeal_FilterReset(int mode) @@ -88,11 +96,9 @@ T_JZsdkReturnCode AudioDeal_FilterReset(int mode)
88 * *********************************************/ 96 * *********************************************/
89 T_JZsdkReturnCode AudioDeal_ResampleRest(unsigned int in_sampleRate, AVChannelLayout in_ch_layout, enum AVSampleFormat in_format) 97 T_JZsdkReturnCode AudioDeal_ResampleRest(unsigned int in_sampleRate, AVChannelLayout in_ch_layout, enum AVSampleFormat in_format)
90 { 98 {
91 - Audiodeal_status = JZ_FLAGCODE_OFF;  
92 99
93 FF_Resample_Reset(AudioDeakInfo_index ,in_sampleRate, in_ch_layout, in_format); 100 FF_Resample_Reset(AudioDeakInfo_index ,in_sampleRate, in_ch_layout, in_format);
94 101
95 - Audiodeal_status = JZ_FLAGCODE_ON;  
96 } 102 }
97 103
98 /*************************************************************************************************************************************************** 104 /***************************************************************************************************************************************************
@@ -98,7 +98,7 @@ T_JZsdkReturnCode AudioFile_Stream_DataInput(AVFrame *frame); @@ -98,7 +98,7 @@ T_JZsdkReturnCode AudioFile_Stream_DataInput(AVFrame *frame);
98 T_JZsdkReturnCode AudioDeal_Mp3DataInput(int In_Bitrate, unsigned char *buffer, int bytesRead); 98 T_JZsdkReturnCode AudioDeal_Mp3DataInput(int In_Bitrate, unsigned char *buffer, int bytesRead);
99 T_JZsdkReturnCode AudioDeal_PauseAndContinuePlay(int status); 99 T_JZsdkReturnCode AudioDeal_PauseAndContinuePlay(int status);
100 T_JZsdkReturnCode Get_AudioDealStatus(); 100 T_JZsdkReturnCode Get_AudioDealStatus();
101 -T_JZsdkReturnCode AudioDeal_FilterReset(int mode); 101 +T_JZsdkReturnCode AudioDeal_SetFilterMode(int mode);
102 102
103 #ifdef __cplusplus 103 #ifdef __cplusplus
104 } 104 }
@@ -40,6 +40,9 @@ T_JZsdkReturnCode AudioFile_Stream_Interface_PcmData(struct AudioDealInfo *AD_In @@ -40,6 +40,9 @@ T_JZsdkReturnCode AudioFile_Stream_Interface_PcmData(struct AudioDealInfo *AD_In
40 40
41 //JZSDK_LOG_INFO("滤波已完成"); 41 //JZSDK_LOG_INFO("滤波已完成");
42 42
  43 + //检查滤波器
  44 + FF_Filter_Init(AD_Info, 0x01);
  45 +
43 //滤波 46 //滤波
44 if(AD_Info->FilterMode != JZ_FLAGCODE_OFF) 47 if(AD_Info->FilterMode != JZ_FLAGCODE_OFF)
45 { 48 {
@@ -83,6 +83,9 @@ T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, un @@ -83,6 +83,9 @@ T_JZsdkReturnCode mp3_Stream_Interface_Mp3Data(struct AudioDealInfo *AD_Info, un
83 //重置重采样器 83 //重置重采样器
84 FF_Resample_Reset(AD_Info, in_sampleRate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16); 84 FF_Resample_Reset(AD_Info, in_sampleRate, (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO, AV_SAMPLE_FMT_S16);
85 85
  86 + //检查滤波器
  87 + FF_Filter_Init(AD_Info, 0x01);
  88 +
86 //数据指针 往后一个解析长度 89 //数据指针 往后一个解析长度
87 //长度指针 减少一个被解析数据的长度 90 //长度指针 减少一个被解析数据的长度
88 data += ret; 91 data += ret;
@@ -37,6 +37,9 @@ int PCM_PooL_Interface_PcmData(struct AudioDealInfo *AD_Info,unsigned int in_sam @@ -37,6 +37,9 @@ int PCM_PooL_Interface_PcmData(struct AudioDealInfo *AD_Info,unsigned int in_sam
37 //如果此次输入的音频数据不同于采样的当前设置,重设采样 37 //如果此次输入的音频数据不同于采样的当前设置,重设采样
38 FF_Resample_Reset(AD_Info, in_sampleRate, in_ch_layout, in_format); 38 FF_Resample_Reset(AD_Info, in_sampleRate, in_ch_layout, in_format);
39 39
  40 + //检查滤波器
  41 + FF_Filter_Init(AD_Info, 0x00);
  42 +
40 int out_nb_samples = 0; //重采样输出的数据长度 43 int out_nb_samples = 0; //重采样输出的数据长度
41 int UnDeal_DataSize = dataSize; //未处理的数据长度 44 int UnDeal_DataSize = dataSize; //未处理的数据长度
42 45
@@ -36,7 +36,10 @@ struct FF_Filter @@ -36,7 +36,10 @@ struct FF_Filter
36 36
37 }FF_Filter; 37 }FF_Filter;
38 38
39 -static int FilterFlag = JZ_FLAGCODE_OFF; 39 +static int g_FilterFlag = JZ_FLAGCODE_ON;
  40 +static int FilterParamNumber = 0;
  41 +static int g_FilterMode = 0; //滤波模式 0为默认 1为m30
  42 +static int g_FilterType = 0; //滤波类型 0为默认
40 43
41 static T_JZsdkReturnCode FF_Filter_ParamInit(struct AudioDealInfo *AD_Info, unsigned char *FilterParam) 44 static T_JZsdkReturnCode FF_Filter_ParamInit(struct AudioDealInfo *AD_Info, unsigned char *FilterParam)
42 { 45 {
@@ -278,7 +281,7 @@ T_JZsdkReturnCode FF_Filter_Release(struct AudioDealInfo *AD_Info) @@ -278,7 +281,7 @@ T_JZsdkReturnCode FF_Filter_Release(struct AudioDealInfo *AD_Info)
278 free(FilterInfo); 281 free(FilterInfo);
279 AD_Info->FilterInfo = NULL; 282 AD_Info->FilterInfo = NULL;
280 283
281 - FilterFlag = JZ_FLAGCODE_OFF; 284 + g_FilterFlag = JZ_FLAGCODE_OFF;
282 285
283 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 286 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
284 } 287 }
@@ -286,14 +289,53 @@ T_JZsdkReturnCode FF_Filter_Release(struct AudioDealInfo *AD_Info) @@ -286,14 +289,53 @@ T_JZsdkReturnCode FF_Filter_Release(struct AudioDealInfo *AD_Info)
286 /*********************** 289 /***********************
287 * 290 *
288 * 滤波器初始化 291 * 滤波器初始化
  292 + * AudioType: 0x00 文本类型 0x01 音频类型
289 * 293 *
290 * **************/ 294 * **************/
291 -T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int mode) 295 +T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType)
292 { 296 {
293 T_JZsdkReturnCode ret; 297 T_JZsdkReturnCode ret;
294 298
295 - //如果已经注册过滤波器  
296 - if (FilterFlag == JZ_FLAGCODE_ON) 299 + int NewType = FILTER_NORMAL;
  300 +
  301 + //通过g_FilterMode 与 音频内容 得出滤波类型
  302 + if (g_FilterMode == 0x00) //默认滤波
  303 + {
  304 + //无须管音频类型,直接同一个默认滤波器
  305 + NewType = FILTER_NORMAL;
  306 + }
  307 + else if (g_FilterMode == 0x01) //30M滤波
  308 + {
  309 + if (AudioType == 0x00) //文本类型
  310 + {
  311 + NewType = FILTER_NORMAL_M30_TTS;
  312 + }
  313 + else if (AudioType == 0x01) //音频类型
  314 + {
  315 + NewType = FILTER_NORMAL_M30_AUDIO;
  316 + }
  317 + else
  318 + {
  319 + JZSDK_LOG_ERROR("错误的音频类型");
  320 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  321 + }
  322 + }
  323 + else
  324 + {
  325 + JZSDK_LOG_ERROR("错误的滤波模式");
  326 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  327 + }
  328 +
  329 + //如果当前已经初始化的同样的滤波
  330 + if (g_FilterType == NewType)
  331 + {
  332 + //已经为相同的模式初始化过
  333 + //printf("已初始化同样的滤波\n");
  334 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  335 + }
  336 +
  337 + //如果已经注册过滤波器,则释放滤波器
  338 + if (g_FilterFlag == JZ_FLAGCODE_ON)
297 { 339 {
298 ret = FF_Filter_Release(AD_Info); 340 ret = FF_Filter_Release(AD_Info);
299 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 341 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
@@ -304,18 +346,23 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int mode) @@ -304,18 +346,23 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int mode)
304 } 346 }
305 347
306 //初始化滤波器 348 //初始化滤波器
307 - if(mode == 0x00) 349 + switch (NewType)
308 { 350 {
309 - ret =FF_Filter_ParamInit(AD_Info, FILTER_PARAM); 351 + case FILTER_NORMAL:
  352 + ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL);
  353 + break;
310 354
311 - }  
312 - else if (mode == 0x01)  
313 - {  
314 - ret =FF_Filter_ParamInit(AD_Info, Filter_M30_1);  
315 - }  
316 - else  
317 - {  
318 - ret =FF_Filter_ParamInit(AD_Info, FILTER_PARAM); 355 + case FILTER_NORMAL_M30_TTS:
  356 + ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_M30_TTS);
  357 + break;
  358 +
  359 + case FILTER_NORMAL_M30_AUDIO:
  360 + ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_M30_AUDIO);
  361 + break;
  362 +
  363 + default:
  364 + ret = FF_Filter_ParamInit(AD_Info, FILTER_PARAM_NORMAL);
  365 + break;
319 } 366 }
320 367
321 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 368 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
@@ -324,9 +371,12 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int mode) @@ -324,9 +371,12 @@ T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int mode)
324 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 371 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
325 } 372 }
326 373
327 - FilterFlag = JZ_FLAGCODE_ON; 374 + //设置滤波类型
  375 + g_FilterType = NewType;
  376 +
  377 + g_FilterFlag = JZ_FLAGCODE_ON;
328 378
329 - JZSDK_LOG_DEBUG("Filter注册完成\n"); 379 + JZSDK_LOG_DEBUG("Filter注册完成, 当前模式为%d\n", g_FilterType);
330 380
331 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 381 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
332 } 382 }
@@ -368,3 +418,9 @@ T_JZsdkReturnCode FF_Filter_get_frame_from_filter(struct AudioDealInfo *AD_Info @@ -368,3 +418,9 @@ T_JZsdkReturnCode FF_Filter_get_frame_from_filter(struct AudioDealInfo *AD_Info
368 418
369 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 419 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
370 } 420 }
  421 +
  422 +T_JZsdkReturnCode FF_Filter_Set_FilterMode(int mode)
  423 +{
  424 + g_FilterMode = mode;
  425 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  426 +}
@@ -17,9 +17,10 @@ @@ -17,9 +17,10 @@
17 #ifdef __cplusplus 17 #ifdef __cplusplus
18 extern "C" { 18 extern "C" {
19 #endif 19 #endif
20 -T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int mode); 20 +T_JZsdkReturnCode FF_Filter_Init(struct AudioDealInfo *AD_Info, int AudioType);
21 T_JZsdkReturnCode FF_Filter_push_frame_to_fliter(struct AudioDealInfo *AD_Info ,AVFrame* in_frame); 21 T_JZsdkReturnCode FF_Filter_push_frame_to_fliter(struct AudioDealInfo *AD_Info ,AVFrame* in_frame);
22 T_JZsdkReturnCode FF_Filter_get_frame_from_filter(struct AudioDealInfo *AD_Info ,AVFrame* out_frame); 22 T_JZsdkReturnCode FF_Filter_get_frame_from_filter(struct AudioDealInfo *AD_Info ,AVFrame* out_frame);
  23 +T_JZsdkReturnCode FF_Filter_Set_FilterMode(int mode);
23 24
24 /* Exported constants --------------------------------------------------------*/ 25 /* Exported constants --------------------------------------------------------*/
25 /* 常亮定义*/ 26 /* 常亮定义*/
@@ -23,193 +23,8 @@ extern "C" { @@ -23,193 +23,8 @@ extern "C" {
23 23
24 //流程 先用 acompressor 压缩动态范围 会影响声音大小 24 //流程 先用 acompressor 压缩动态范围 会影响声音大小
25 25
26 -#define Filter_No1 "anequalizer=c0 f=2000 w=2000 g=+12 t=2|c1 f=2000 w=2000 g=+12 t=2"  
27 -#define Filter_No2 "acompressor=level_in=1.2:mode=downward:threshold=0.2:ratio=3:attack=50:release=300:makeup=1.2:knee=4:link=average:detection=rms:mix=0.8,highpass=f=300:p=2:mix=1,lowpass=f=5000:p=2:mix=1,lowpass=f=6000:p=2:mix=1,anequalizer=c0 f=2300 w=1500 g=+12 t=2|c1 f=2300 w=1500 g=+12 t=2"  
28 -  
29 -/*  
30 --level_in=1.5:设置输入增益为1.5,这通常用于增加输入信号的响度。  
31 --mode=downward:设置压缩器的工作模式为向下压缩,即仅当信号超过阈值时减少增益。  
32 --threshold=0.5:设置阈值,具体单位取决于该工具的实现,但通常与信号电平相关。  
33 --ratio=3:1:设置压缩比为3:1,意味着每增加3dB的输入电平,输出电平仅增加1dB。  
34 --attack=50ms:设置攻击时间为50毫秒,即信号需要超过阈值50毫秒后才开始压缩。  
35 --release=300ms:设置释放时间为300毫秒,即信号需要低于阈值300毫秒后压缩效果才会逐渐减弱。  
36 --makeup=1.2:设置补偿增益为1.2,用于在压缩后增加信号的总体响度。  
37 --knee=4:设置拐点为4,用于在阈值附近平滑地过渡压缩效果。  
38 --link=average:选择使用所有通道的平均电平来影响压缩,而不是仅使用最响的通道。  
39 --detection=rms:选择使用RMS(均方根)检测来确定信号电平,这通常比峰值检测更平滑。  
40 --mix=0.8:设置混合比例为0.8,意味着在输出中80%使用压缩后的信号,20%使用原始信号(这个参数的具体实现可能因工具而异)。  
41 -  
42 -level_in:原信号的输入增益,相当于前置放大器,默认为1,范围[0.015625, 64]  
43 -mode:压缩模式,有 upward和downward两种模式, 默认为downward  
44 -threshold:如果媒体流信号达到此阈值,会引起增益减少。默认为0.125,范围[0.00097563, 1]  
45 -ratio:信号压缩的比例因子,默认为2,范围[1, 20]  
46 -attack:信号提升到阈值所用的毫秒数,默认为20,范围[0.01, 2000]  
47 -release:信号降低到阈值所用的毫秒数,默认为250,范围[0.01, 9000]  
48 -makeup:在处理后,多少信号被放大. 默认为1,范围[1, 64]  
49 -knee:增益降低的阶数,默认为2.82843,范围[1, 8]  
50 -link:信号衰减的average和maximum两种模式, 默认为average  
51 -detection:采用peak峰值信号或rms均方根信号,默认采用更加平滑的rms  
52 -mix:输出时使用多少压缩信号, 默认为1,范围[0, 1]  
53 -2、acrossfade  
54 -*/  
55 -  
56 -/**  
57 - *  
58 -Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:  
59 -equalizer=f=1000:t=h:width=200:g=-10  
60 -Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:  
61 -equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5  
62 -  
63 -在您给出的例子中,您正在使用 equalizer 滤镜来调整音频信号的特定频率点。这些命令很可能是为了某种音频处理软件或库(如 FFmpeg 的滤镜系统,尽管 FFmpeg 的标准滤镜中可能没有直接名为 equalizer 的滤镜,但这里我们假设它是一个自定义或第三方滤镜)设计的。  
64 -  
65 -第一个例子  
66 -Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:  
67 -  
68 -equalizer=f=1000:t=h:width=200:g=-10  
69 -f=1000 设置滤波器的中心频率为 1000 Hz。  
70 -t=h 或 t=Hz(尽管 t=h 可能是一个简写,但通常更明确的是 t=Hz)指定带宽的单位为 Hz。  
71 -width=200 设置滤波器的带宽为 200 Hz。  
72 -g=-10 设置在中心频率处的增益为 -10 dB,即衰减 10 dB。  
73 -第二个例子  
74 -Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:  
75 -  
76 -equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5  
77 -第一个 equalizer 滤镜设置:  
78 -f=1000 设置中心频率为 1000 Hz。  
79 -t=q 指定带宽的单位为 Q 因子。  
80 -w=1 设置 Q 因子为 1,这会影响滤波器的带宽和尖锐程度。Q 因子越高,带宽越窄,滤波器越尖锐。  
81 -g=2 设置在中心频率处的增益为 2 dB。  
82 -第二个 equalizer 滤镜设置:  
83 -f=100 设置中心频率为 100 Hz。  
84 -同样地,t=q 指定带宽的单位为 Q 因子。  
85 -w=2 设置 Q 因子为 2,这会影响 100 Hz 处的滤波效果。  
86 -g=-5 设置在中心频率处的增益为 -5 dB,即衰减 5 dB。  
87 -请注意,这些命令假设了 equalizer 滤镜能够处理多个实例并应用于同一音频流,且每个实例都独立设置其参数。这在许多音频处理软件中是常见的,但在具体实现时可能会有所不同。  
88 -  
89 -此外,如果您的环境不支持直接以这种方式链接多个滤镜实例(例如,在 FFmpeg 中,您可能需要使用分号 ; 而不是逗号 , 来分隔不同的滤镜,或者将滤镜放入单独的链中),您可能需要调整命令格式以符合您所使用的软件或库的语法要求。然而,在您给出的例子中,逗号 , 被用作分隔符,这通常是在某些特定上下文(如某些音频编辑软件的内部命令或脚本)中使用的。  
90 -  
91 -  
92 -t=h 和t=q的区别是什么 请详细说说  
93 -  
94 -在音频处理或信号处理领域中,t=h 和 t=q 在设置均衡器(equalizer)或滤波器(filter)时代表了不同的带宽(bandwidth)指定方式,它们主要影响滤波器对频率的响应形状和尖锐程度。以下是详细的区别说明:  
95 -  
96 -t=h(或 Hz)  
97 -含义:t=h 或 t=Hz 表示带宽(bandwidth)的单位是赫兹(Hz)。在这种情况下,你直接指定了滤波器频率响应曲线在中心频率两侧下降一定幅度(通常是3dB)所覆盖的频率范围。  
98 -影响:使用Hz作为带宽单位时,滤波器的形状(如峰形滤波器、带通滤波器或带阻滤波器等)在频率轴上的展宽是固定的,不随中心频率的变化而变化。这有助于精确控制滤波器对特定频率范围的影响。  
99 -应用:当你需要精确控制滤波器影响的频率范围时,使用Hz作为带宽单位非常有用。例如,在音频制作中,你可能想要增强或减弱某个特定频率及其附近很小范围内的声音。  
100 -t=q(Q-Factor)  
101 -含义:t=q 表示带宽的指定方式是使用Q因子(Q-Factor)。Q因子是中心频率与滤波器带宽的比值,它描述了滤波器对中心频率的选择性,即滤波器如何尖锐地聚焦于中心频率。  
102 -影响:Q因子越高,滤波器的带宽越窄,滤波器对中心频率的选择性越强,响应曲线越尖锐。相反,Q因子越低,滤波器的带宽越宽,滤波器对中心频率的选择性越弱,响应曲线越平坦。  
103 -应用:当你需要创建一个尖锐的滤波器响应,以便仅影响中心频率附近的非常小的频率范围时,使用Q因子作为带宽指定方式非常合适。例如,在电子音乐制作中,你可能想要创建一个非常尖锐的陷波滤波器来去除某个不想要的频率。  
104 -总结  
105 -t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。  
106 -使用Hz时,你直接指定了滤波器在频率轴上的展宽。  
107 -使用Q因子时,你指定了滤波器对中心频率的选择性,即滤波器的尖锐程度。  
108 -选择哪种方式取决于你的具体需求,比如你需要精确控制哪个频率范围或你想要滤波器有多尖锐。  
109 - *  
110 - *  
111 -*/  
112 -  
113 -// ffmpeg -i 人民警察警歌.mp3 -af "equalizer=f=50:t=q:w=2.0:g=-48, equalizer=f=100:t=q:w=2.0:g=-48, \  
114 -// equalizer=f=250:t=q:w=2.0:g=-48, equalizer=f=500:t=q:w=2.0:g=-24, \  
115 -// equalizer=f=1000:t=q:w=2.0:g=-24, equalizer=f=4000:t=q:w=2.0:g=0, \  
116 -// equalizer=f=8000:t=q:w=2.0:g=0, equalizer=f=16000:t=q:w=2.0:g=0, \  
117 -// anequalizer=c0 f=250 w=500 g=-48 t=2|c1 f=250 w=500 g=-48 t=2" out1.mp3  
118 -  
119 -//无滤波113 114  
120 -  
121 -  
122 -//112.6 111.8  
123 -#define Filter_No3 "equalizer=f=50:t=q:w=2.0:g=-48, \  
124 - equalizer=f=100:t=q:w=2.0:g=-48, \  
125 - equalizer=f=250:t=q:w=2.0:g=-48, \  
126 - equalizer=f=500:t=q:w=2.0:g=-24, \  
127 - equalizer=f=1000:t=q:w=2.0:g=-12, \  
128 - equalizer=f=2000:t=q:w=2.0:g=4, \  
129 - equalizer=f=4000:t=q:w=2.0:g=0, \  
130 - equalizer=f=8000:t=q:w=2.0:g=-12, \  
131 - equalizer=f=16000:t=q:w=2.0:g=-24, \  
132 - equalizer=f=32000:t=q:w=2.0:g=-48, \  
133 - bass=g=-96:f=200:t=q:w=10"  
134 -  
135 -//114 //117 太尖锐了  
136 -#define Filter_No4 "equalizer=f=50:t=q:w=2.0:g=-24, \  
137 - equalizer=f=100:t=q:w=2.0:g=-12, \  
138 - equalizer=f=250:t=q:w=2.0:g=-12, \  
139 - equalizer=f=500:t=q:w=2.0:g=-8, \  
140 - equalizer=f=1000:t=q:w=2.0:g=4, \  
141 - equalizer=f=2000:t=q:w=2.0:g=4, \  
142 - equalizer=f=4000:t=q:w=2.0:g=4, \  
143 - equalizer=f=8000:t=q:w=2.0:g=0, \  
144 - equalizer=f=16000:t=q:w=2.0:g=-6, \  
145 - equalizer=f=32000:t=q:w=2.0:g=-24, \  
146 - bass=g=-96:f=150:t=q:w=10"  
147 -  
148 -//113 //115 还是尖锐  
149 -#define Filter_No5 "equalizer=f=50:t=q:w=2.0:g=-24, \  
150 - equalizer=f=100:t=q:w=2.0:g=-8, \  
151 - equalizer=f=250:t=q:w=2.0:g=-8, \  
152 - equalizer=f=500:t=q:w=2.0:g=-4, \  
153 - equalizer=f=1000:t=q:w=2.0:g=4, \  
154 - equalizer=f=2000:t=q:w=2.0:g=0, \  
155 - equalizer=f=4000:t=q:w=2.0:g=0, \  
156 - equalizer=f=8000:t=q:w=2.0:g=0, \  
157 - equalizer=f=16000:t=q:w=2.0:g=-6, \  
158 - equalizer=f=32000:t=q:w=2.0:g=-24, \  
159 - bass=g=-96:f=130:t=q:w=10"  
160 -  
161 -//113 //115 声音效果跟平常差不多  
162 -#define Filter_No6 "equalizer=f=50:t=q:w=2.0:g=-24, \  
163 - equalizer=f=100:t=q:w=2.0:g=-24, \  
164 - equalizer=f=250:t=q:w=2.0:g=-12, \  
165 - equalizer=f=500:t=q:w=2.0:g=-12, \  
166 - equalizer=f=1000:t=q:w=2.0:g=-6, \  
167 - equalizer=f=2000:t=q:w=2.0:g=0, \  
168 - equalizer=f=4000:t=q:w=2.0:g=0, \  
169 - equalizer=f=8000:t=q:w=2.0:g=0, \  
170 - equalizer=f=16000:t=q:w=2.0:g=-6, \  
171 - equalizer=f=32000:t=q:w=2.0:g=-24"  
172 -  
173 -//  
174 -#define Filter_No7 "equalizer=f=50:t=q:w=2.0:g=-24, \  
175 - equalizer=f=100:t=q:w=2.0:g=-24, \  
176 - equalizer=f=250:t=q:w=2.0:g=-12, \  
177 - equalizer=f=500:t=q:w=2.0:g=-12, \  
178 - equalizer=f=1000:t=q:w=2.0:g=-6, \  
179 - equalizer=f=2000:t=q:w=2.0:g=0, \  
180 - equalizer=f=4000:t=q:w=2.0:g=0, \  
181 - equalizer=f=8000:t=q:w=2.0:g=0, \  
182 - equalizer=f=16000:t=q:w=2.0:g=-6, \  
183 - equalizer=f=32000:t=q:w=2.0:g=-24, \  
184 - bass=g=-96:f=50:t=q:w=8"  
185 -  
186 -//650 那段会影响乐器声 1400那段影响人声  
187 -#define Filter_No8 "equalizer=f=100:t=h:width=100:g=-48, \  
188 - equalizer=f=350:t=h:width=100:g=-36, \  
189 - equalizer=f=650:t=h:width=150:g=-12, \  
190 - equalizer=f=1400:t=h:width=600:g=0, \  
191 - equalizer=f=2500:t=h:width=500:g=0, \  
192 - equalizer=f=3500:t=h:width=600:g=0, \  
193 - equalizer=f=4500:t=h:width=500:g=+4, \  
194 - equalizer=f=5500:t=h:width=500:g=+8, \  
195 - equalizer=f=8000:t=h:width=2000:g=+12, \  
196 - bass=g=-96:f=50:t=q:w=8"  
197 -  
198 -  
199 -//11分钟  
200 -#define OLD_FILTER "equalizer=f=31:t=q:w=2.0:g=-48, \  
201 - equalizer=f=62:t=q:w=2.0:g=-48, \  
202 - equalizer=f=125:t=q:w=2.0:g=-48, \  
203 - equalizer=f=250:t=q:w=2.0:g=-24, \  
204 - equalizer=f=500:t=q:w=2.0:g=-24, \  
205 - equalizer=f=1000:t=q:w=2.0:g=-4, \  
206 - equalizer=f=2000:t=q:w=2.0:g=0, \  
207 - equalizer=f=4000:t=q:w=2.0:g=0, \  
208 - equalizer=f=8000:t=q:w=2.0:g=0, \  
209 - equalizer=f=16000:t=q:w=2.0:g=0"  
210 -  
211 //111.0 111.4 保持46度 26 //111.0 111.4 保持46度
212 -#define Filter_No9 "equalizer=f=31:t=q:w=2.0:g=-48, \ 27 +#define FILTER_FORMAL_1 "equalizer=f=31:t=q:w=2.0:g=-48, \
213 equalizer=f=62:t=q:w=2.0:g=-48, \ 28 equalizer=f=62:t=q:w=2.0:g=-48, \
214 equalizer=f=125:t=q:w=2.0:g=-48, \ 29 equalizer=f=125:t=q:w=2.0:g=-48, \
215 equalizer=f=250:t=q:w=2.0:g=-48, \ 30 equalizer=f=250:t=q:w=2.0:g=-48, \
@@ -220,42 +35,7 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。 @@ -220,42 +35,7 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。
220 equalizer=f=8000:t=q:w=2.0:g=0, \ 35 equalizer=f=8000:t=q:w=2.0:g=0, \
221 equalizer=f=16000:t=q:w=2.0:g=0" 36 equalizer=f=16000:t=q:w=2.0:g=0"
222 37
223 -  
224 -  
225 -  
226 -  
227 -/******  
228 - *  
229 - *  
230 - * loudnorm 标准化音量滤波器  
231 - * I= 最大响度  
232 - * LRA 响度范围 值越小 范围越小  
233 - * TP 音量的最大值  
234 - *  
235 - * 用于将音频都调节到一个音量大小  
236 - *  
237 - *  
238 - * 降低音量的动态范围,用于减少发热  
239 - *  
240 - * *********/  
241 -  
242 -//旧式机115  
243 -/*  
244 -2 37  
245 -4 39  
246 -6 41  
247 -8 43  
248 -11 45  
249 -14 47  
250 -17 49  
251 -21 50  
252 -22 52  
253 -25 55  
254 -27 54  
255 -31 55  
256 -40 57  
257 -*/  
258 -#define Filter_No10 "equalizer=f=31:t=q:w=2.0:g=-48, \ 38 +#define FILTER_FORMAL_2 "equalizer=f=31:t=q:w=2.0:g=-48, \
259 equalizer=f=62:t=q:w=2.0:g=-48, \ 39 equalizer=f=62:t=q:w=2.0:g=-48, \
260 equalizer=f=125:t=q:w=2.0:g=-48, \ 40 equalizer=f=125:t=q:w=2.0:g=-48, \
261 equalizer=f=250:t=q:w=2.0:g=-32, \ 41 equalizer=f=250:t=q:w=2.0:g=-32, \
@@ -266,172 +46,7 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。 @@ -266,172 +46,7 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。
266 equalizer=f=8000:t=q:w=2.0:g=0, \ 46 equalizer=f=8000:t=q:w=2.0:g=0, \
267 equalizer=f=16000:t=q:w=2.0:g=0" 47 equalizer=f=16000:t=q:w=2.0:g=0"
268 48
269 -//半小时49度 但是音量掉到107了  
270 -/*  
271 -00 35  
272 -4 37  
273 -8 39  
274 -13 41  
275 -18 43  
276 -27 45  
277 -36 47  
278 -52 49  
279 -60 49  
280 -*/  
281 -#define Filter_No11 "equalizer=f=31:t=q:w=2.0:g=-48, \  
282 - equalizer=f=62:t=q:w=2.0:g=-48, \  
283 - equalizer=f=125:t=q:w=2.0:g=-48, \  
284 - equalizer=f=250:t=q:w=2.0:g=-32, \  
285 - equalizer=f=500:t=q:w=2.0:g=-24, \  
286 - equalizer=f=1000:t=q:w=2.0:g=-12, \  
287 - equalizer=f=2000:t=q:w=2.0:g=0, \  
288 - equalizer=f=4000:t=q:w=2.0:g=-16, \  
289 - equalizer=f=8000:t=q:w=2.0:g=-24, \  
290 - equalizer=f=16000:t=q:w=2.0:g=-32"  
291 -  
292 -//113.3  
293 -#define Filter_No12 "equalizer=f=31:t=q:w=2.0:g=-42, \  
294 - equalizer=f=62:t=q:w=2.0:g=-42, \  
295 - equalizer=f=125:t=q:w=2.0:g=-42, \  
296 - equalizer=f=250:t=q:w=2.0:g=-28, \  
297 - equalizer=f=500:t=q:w=2.0:g=-16, \  
298 - equalizer=f=1000:t=q:w=2.0:g=0, \  
299 - equalizer=f=2000:t=q:w=2.0:g=0, \  
300 - equalizer=f=4000:t=q:w=2.0:g=-2, \  
301 - equalizer=f=8000:t=q:w=2.0:g=-4, \  
302 - equalizer=f=16000:t=q:w=2.0:g=-8"  
303 -  
304 -//115.6 降低两端 提高中段音量  
305 -/*  
306 -00 35  
307 -01 37  
308 -03 39  
309 -04 41  
310 -05 43  
311 -06 45  
312 -07 47  
313 -09 49 发热过于严重  
314 -*/  
315 -#define Filter_No13 "equalizer=f=31:t=q:w=2.0:g=-48, \  
316 - equalizer=f=62:t=q:w=2.0:g=-48, \  
317 - equalizer=f=125:t=q:w=2.0:g=-48, \  
318 - equalizer=f=250:t=q:w=2.0:g=-32, \  
319 - equalizer=f=500:t=q:w=2.0:g=-24, \  
320 - equalizer=f=1000:t=q:w=2.0:g=+8, \  
321 - equalizer=f=2000:t=q:w=2.0:g=+8, \  
322 - equalizer=f=4000:t=q:w=2.0:g=-4, \  
323 - equalizer=f=8000:t=q:w=2.0:g=-8, \  
324 - equalizer=f=16000:t=q:w=2.0:g=-12"  
325 -  
326 -//111 降低中频 提高低频  
327 -#define Filter_No14 "equalizer=f=31:t=q:w=2.0:g=-48, \  
328 - equalizer=f=62:t=q:w=2.0:g=-48, \  
329 - equalizer=f=125:t=q:w=2.0:g=-48, \  
330 - equalizer=f=250:t=q:w=2.0:g=-18, \  
331 - equalizer=f=500:t=q:w=2.0:g=-12, \  
332 - equalizer=f=1000:t=q:w=2.0:g=-12, \  
333 - equalizer=f=2000:t=q:w=2.0:g=-10, \  
334 - equalizer=f=4000:t=q:w=2.0:g=-2, \  
335 - equalizer=f=8000:t=q:w=2.0:g=-4, \  
336 - equalizer=f=16000:t=q:w=2.0:g=-8"  
337 -  
338 -//112.1 14基础上补偿一点中频  
339 -#define Filter_No15 "equalizer=f=31:t=q:w=2.0:g=-48, \  
340 - equalizer=f=62:t=q:w=2.0:g=-48, \  
341 - equalizer=f=125:t=q:w=2.0:g=-48, \  
342 - equalizer=f=250:t=q:w=2.0:g=-18, \  
343 - equalizer=f=500:t=q:w=2.0:g=-12, \  
344 - equalizer=f=1000:t=q:w=2.0:g=-8, \  
345 - equalizer=f=2000:t=q:w=2.0:g=-6, \  
346 - equalizer=f=4000:t=q:w=2.0:g=-2, \  
347 - equalizer=f=8000:t=q:w=2.0:g=-4, \  
348 - equalizer=f=16000:t=q:w=2.0:g=-8"  
349 -  
350 -//112.5 15基础上补偿一点低频  
351 -#define Filter_No16 "equalizer=f=31:t=q:w=2.0:g=-48, \  
352 - equalizer=f=62:t=q:w=2.0:g=-48, \  
353 - equalizer=f=125:t=q:w=2.0:g=-32, \  
354 - equalizer=f=250:t=q:w=2.0:g=-12, \  
355 - equalizer=f=500:t=q:w=2.0:g=-6, \  
356 - equalizer=f=1000:t=q:w=2.0:g=-8, \  
357 - equalizer=f=2000:t=q:w=2.0:g=-6, \  
358 - equalizer=f=4000:t=q:w=2.0:g=-2, \  
359 - equalizer=f=8000:t=q:w=2.0:g=-4, \  
360 - equalizer=f=16000:t=q:w=2.0:g=-8"  
361 -  
362 -//117 10的基础上,降低中频,补偿高频  
363 -#define Filter_No17 "equalizer=f=31:t=q:w=2.0:g=-48, \  
364 - equalizer=f=62:t=q:w=2.0:g=-48, \  
365 - equalizer=f=125:t=q:w=2.0:g=-48, \  
366 - equalizer=f=250:t=q:w=2.0:g=-32, \  
367 - equalizer=f=500:t=q:w=2.0:g=-24, \  
368 - equalizer=f=1000:t=q:w=2.0:g=-12, \  
369 - equalizer=f=2000:t=q:w=2.0:g=-8, \  
370 - equalizer=f=4000:t=q:w=2.0:g=+8, \  
371 - equalizer=f=8000:t=q:w=2.0:g=+4, \  
372 - equalizer=f=16000:t=q:w=2.0:g=+2"  
373 -  
374 -//115 17的基础上,减少中高频补偿  
375 -#define Filter_No18 "equalizer=f=31:t=q:w=2.0:g=-48, \  
376 - equalizer=f=62:t=q:w=2.0:g=-48, \  
377 - equalizer=f=125:t=q:w=2.0:g=-48, \  
378 - equalizer=f=250:t=q:w=2.0:g=-32, \  
379 - equalizer=f=500:t=q:w=2.0:g=-24, \  
380 - equalizer=f=1000:t=q:w=2.0:g=-12, \  
381 - equalizer=f=2000:t=q:w=2.0:g=-8, \  
382 - equalizer=f=4000:t=q:w=2.0:g=+2, \  
383 - equalizer=f=8000:t=q:w=2.0:g=+4, \  
384 - equalizer=f=16000:t=q:w=2.0:g=+2"  
385 -  
386 -//114.6 18的基础上,减少中高频补偿  
387 -/*  
388 -00 35  
389 -2 37  
390 -6 39  
391 -8 41  
392 -11 43  
393 -14 45  
394 -20 47  
395 -24 49  
396 -30 50  
397 -31 49  
398 -33 50  
399 -39 52  
400 -51 54  
401 -56 55  
402 -57 54  
403 -63 54  
404 -*/  
405 -#define Filter_No19 "equalizer=f=31:t=q:w=2.0:g=-48, \  
406 - equalizer=f=62:t=q:w=2.0:g=-48, \  
407 - equalizer=f=125:t=q:w=2.0:g=-48, \  
408 - equalizer=f=250:t=q:w=2.0:g=-32, \  
409 - equalizer=f=500:t=q:w=2.0:g=-24, \  
410 - equalizer=f=1000:t=q:w=2.0:g=-12, \  
411 - equalizer=f=2000:t=q:w=2.0:g=-8, \  
412 - equalizer=f=4000:t=q:w=2.0:g=+1, \  
413 - equalizer=f=8000:t=q:w=2.0:g=+2, \  
414 - equalizer=f=16000:t=q:w=2.0:g=+2"  
415 -  
416 -// 19的基础上,补偿低频 比10号方案尖一点  
417 -/*  
418 -0 35  
419 -3 37  
420 -5 39  
421 -7 41  
422 -10 43  
423 -14 45  
424 -18 47  
425 -23 49  
426 -27 50  
427 -34 52  
428 -35 50  
429 -36 52  
430 -42 54  
431 -55 55  
432 -63 55  
433 -*/  
434 -#define Filter_No20 "equalizer=f=31:t=q:w=2.0:g=-48, \ 49 +#define FILTER_FORMAL_3 "equalizer=f=31:t=q:w=2.0:g=-48, \
435 equalizer=f=62:t=q:w=2.0:g=-36, \ 50 equalizer=f=62:t=q:w=2.0:g=-36, \
436 equalizer=f=125:t=q:w=2.0:g=-30, \ 51 equalizer=f=125:t=q:w=2.0:g=-30, \
437 equalizer=f=250:t=q:w=2.0:g=-26, \ 52 equalizer=f=250:t=q:w=2.0:g=-26, \
@@ -442,48 +57,75 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。 @@ -442,48 +57,75 @@ t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。
442 equalizer=f=8000:t=q:w=2.0:g=+2, \ 57 equalizer=f=8000:t=q:w=2.0:g=+2, \
443 equalizer=f=16000:t=q:w=2.0:g=+2" 58 equalizer=f=16000:t=q:w=2.0:g=+2"
444 59
445 -// 20的基础上,补偿中低频  
446 -/*  
447 -0 35  
448 -3 37  
449 -5 39  
450 -7 41  
451 -11 43  
452 -13 45  
453 -14 47  
454 -17 49  
455 -19 50  
456 -20 52  
457 -22 50  
458 -23 52  
459 -26 54  
460 -27 55  
461 -*/  
462 -#define Filter_No21 "equalizer=f=31:t=q:w=2.0:g=-48, \ 60 +#define FILTER_FORMAL_1_M30_TTS "equalizer=f=31:t=q:w=2.0:g=-48, \
463 equalizer=f=62:t=q:w=2.0:g=-36, \ 61 equalizer=f=62:t=q:w=2.0:g=-36, \
464 equalizer=f=125:t=q:w=2.0:g=-30, \ 62 equalizer=f=125:t=q:w=2.0:g=-30, \
465 - equalizer=f=250:t=q:w=2.0:g=-24, \  
466 - equalizer=f=500:t=q:w=2.0:g=-16, \ 63 + equalizer=f=250:t=q:w=2.0:g=-26, \
  64 + equalizer=f=500:t=q:w=2.0:g=-20, \
467 equalizer=f=1000:t=q:w=2.0:g=-12, \ 65 equalizer=f=1000:t=q:w=2.0:g=-12, \
468 equalizer=f=2000:t=q:w=2.0:g=-8, \ 66 equalizer=f=2000:t=q:w=2.0:g=-8, \
469 equalizer=f=4000:t=q:w=2.0:g=+1, \ 67 equalizer=f=4000:t=q:w=2.0:g=+1, \
470 equalizer=f=8000:t=q:w=2.0:g=+2, \ 68 equalizer=f=8000:t=q:w=2.0:g=+2, \
471 - equalizer=f=16000:t=q:w=2.0:g=+2" 69 + equalizer=f=16000:t=q:w=2.0:g=+2, \
  70 + anequalizer=c0 f=3800 w=1200 g=-5 t=0|c1 f=3800 w=1200 g=-10 t=0, \
  71 + anequalizer=c0 f=3100 w=600 g=-3 t=0|c1 f=3100 w=600 g=-3 t=0"
472 72
473 -#define Filter_M30_1 "equalizer=f=31:t=q:w=2.0:g=-48, \ 73 +#define FILTER_FORMAL_1_M30_1 "equalizer=f=31:t=q:w=2.0:g=-48, \
474 equalizer=f=62:t=q:w=2.0:g=-36, \ 74 equalizer=f=62:t=q:w=2.0:g=-36, \
475 equalizer=f=125:t=q:w=2.0:g=-30, \ 75 equalizer=f=125:t=q:w=2.0:g=-30, \
476 - equalizer=f=250:t=q:w=2.0:g=-24, \  
477 - equalizer=f=500:t=q:w=2.0:g=-16, \ 76 + equalizer=f=250:t=q:w=2.0:g=-26, \
  77 + equalizer=f=500:t=q:w=2.0:g=-20, \
478 equalizer=f=1000:t=q:w=2.0:g=-12, \ 78 equalizer=f=1000:t=q:w=2.0:g=-12, \
479 equalizer=f=2000:t=q:w=2.0:g=-8, \ 79 equalizer=f=2000:t=q:w=2.0:g=-8, \
480 equalizer=f=4000:t=q:w=2.0:g=+1, \ 80 equalizer=f=4000:t=q:w=2.0:g=+1, \
481 - equalizer=f=8000:t=q:w=2.0:g=+4, \  
482 - equalizer=f=16000:t=q:w=2.0:g=+3, \  
483 - anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \  
484 - anequalizer=c0 f=3700 w=1400 g=-22 t=0|c1 f=3700 w=1400 g=-22 t=0" 81 + equalizer=f=8000:t=q:w=2.0:g=+2, \
  82 + equalizer=f=16000:t=q:w=2.0:g=+2, \
  83 + 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"
  85 +
  86 +/*00 35
  87 +02 37
  88 +05 39
  89 +09 41
  90 +12 43
  91 +30 后是54
  92 +*/
  93 +
  94 +// #define FILTER_FORMAL_1_M30_2 "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  95 +// anequalizer=c0 f=3700 w=1400 g=-22 t=0|c1 f=3700 w=1400 g=-22 t=0"
  96 +
  97 +
  98 +//"anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0" "anequalizer=c0 f=5500 w=1400 g=-22 t=0|c1 f=5500 w=1400 g=-22 t=0" 4-7k出问题
  99 +
  100 +// #define Filter_M30_3 "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0,
  101 +// anequalizer=c0 f=3700 w=1000 g=-22 t=0|c1 f=3700 w=1000 g=-22 t=0" 4-7k出问题
  102 +
  103 +// "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  104 +// anequalizer=c0 f=3700 w=1300 g=-22 t=0|c1 f=3700 w=1300 g=-22 t=0"
  105 +
  106 +// "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  107 +// anequalizer=c0 f=3100 w=1300 g=-22 t=0|c1 f=3100 w=1300 g=-22 t=0"
  108 +
  109 +
  110 +// "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  111 +// anequalizer=c0 f=3100 w=600 g=-22 t=0|c1 f=3100 w=600 g=-22 t=0"
  112 +
  113 +// "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  114 +// anequalizer=c0 f=3100 w=300 g=-22 t=0|c1 f=3100 w=300 g=-22 t=0" 4-7k出问题
  115 +
  116 +#define Filter_M30_3 "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  117 + anequalizer=c0 f=3100 w=600 g=-22 t=0|c1 f=3100 w=600 g=-22 t=0"
  118 +
  119 +
  120 +typedef enum FilterList{
  121 + FILTER_NORMAL = 1,
  122 + FILTER_NORMAL_M30_AUDIO = 5,
  123 + FILTER_NORMAL_M30_TTS = 6,
  124 +}FilterList;
485 125
486 -#define FILTER_PARAM Filter_No20 126 +#define FILTER_PARAM_NORMAL FILTER_FORMAL_3
  127 +#define FILTER_PARAM_M30_TTS FILTER_FORMAL_1_M30_TTS
  128 +#define FILTER_PARAM_M30_AUDIO FILTER_FORMAL_1_M30_1
487 129
488 /* Exported types ------------------------------------------------------------*/ 130 /* Exported types ------------------------------------------------------------*/
489 131
@@ -18,8 +18,186 @@ @@ -18,8 +18,186 @@
18 extern "C" { 18 extern "C" {
19 #endif 19 #endif
20 20
21 -// 比一的发热还高 6分半  
22 -#define OLD_FILTER_2 "equalizer=f=31:t=q:w=2.0:g=-48, \ 21 +/* Exported constants --------------------------------------------------------*/
  22 +/* 常亮定义*/
  23 +
  24 +//流程 先用 acompressor 压缩动态范围 会影响声音大小
  25 +
  26 +#define Filter_No1 "anequalizer=c0 f=2000 w=2000 g=+12 t=2|c1 f=2000 w=2000 g=+12 t=2"
  27 +#define Filter_No2 "acompressor=level_in=1.2:mode=downward:threshold=0.2:ratio=3:attack=50:release=300:makeup=1.2:knee=4:link=average:detection=rms:mix=0.8,highpass=f=300:p=2:mix=1,lowpass=f=5000:p=2:mix=1,lowpass=f=6000:p=2:mix=1,anequalizer=c0 f=2300 w=1500 g=+12 t=2|c1 f=2300 w=1500 g=+12 t=2"
  28 +
  29 +/*
  30 +-level_in=1.5:设置输入增益为1.5,这通常用于增加输入信号的响度。
  31 +-mode=downward:设置压缩器的工作模式为向下压缩,即仅当信号超过阈值时减少增益。
  32 +-threshold=0.5:设置阈值,具体单位取决于该工具的实现,但通常与信号电平相关。
  33 +-ratio=3:1:设置压缩比为3:1,意味着每增加3dB的输入电平,输出电平仅增加1dB。
  34 +-attack=50ms:设置攻击时间为50毫秒,即信号需要超过阈值50毫秒后才开始压缩。
  35 +-release=300ms:设置释放时间为300毫秒,即信号需要低于阈值300毫秒后压缩效果才会逐渐减弱。
  36 +-makeup=1.2:设置补偿增益为1.2,用于在压缩后增加信号的总体响度。
  37 +-knee=4:设置拐点为4,用于在阈值附近平滑地过渡压缩效果。
  38 +-link=average:选择使用所有通道的平均电平来影响压缩,而不是仅使用最响的通道。
  39 +-detection=rms:选择使用RMS(均方根)检测来确定信号电平,这通常比峰值检测更平滑。
  40 +-mix=0.8:设置混合比例为0.8,意味着在输出中80%使用压缩后的信号,20%使用原始信号(这个参数的具体实现可能因工具而异)。
  41 +
  42 +level_in:原信号的输入增益,相当于前置放大器,默认为1,范围[0.015625, 64]
  43 +mode:压缩模式,有 upward和downward两种模式, 默认为downward
  44 +threshold:如果媒体流信号达到此阈值,会引起增益减少。默认为0.125,范围[0.00097563, 1]
  45 +ratio:信号压缩的比例因子,默认为2,范围[1, 20]
  46 +attack:信号提升到阈值所用的毫秒数,默认为20,范围[0.01, 2000]
  47 +release:信号降低到阈值所用的毫秒数,默认为250,范围[0.01, 9000]
  48 +makeup:在处理后,多少信号被放大. 默认为1,范围[1, 64]
  49 +knee:增益降低的阶数,默认为2.82843,范围[1, 8]
  50 +link:信号衰减的average和maximum两种模式, 默认为average
  51 +detection:采用peak峰值信号或rms均方根信号,默认采用更加平滑的rms
  52 +mix:输出时使用多少压缩信号, 默认为1,范围[0, 1]
  53 +2、acrossfade
  54 +*/
  55 +
  56 +/**
  57 + *
  58 +Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:
  59 +equalizer=f=1000:t=h:width=200:g=-10
  60 +Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:
  61 +equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
  62 +
  63 +在您给出的例子中,您正在使用 equalizer 滤镜来调整音频信号的特定频率点。这些命令很可能是为了某种音频处理软件或库(如 FFmpeg 的滤镜系统,尽管 FFmpeg 的标准滤镜中可能没有直接名为 equalizer 的滤镜,但这里我们假设它是一个自定义或第三方滤镜)设计的。
  64 +
  65 +第一个例子
  66 +Attenuate 10 dB at 1000 Hz, with a bandwidth of 200 Hz:
  67 +
  68 +equalizer=f=1000:t=h:width=200:g=-10
  69 +f=1000 设置滤波器的中心频率为 1000 Hz。
  70 +t=h 或 t=Hz(尽管 t=h 可能是一个简写,但通常更明确的是 t=Hz)指定带宽的单位为 Hz。
  71 +width=200 设置滤波器的带宽为 200 Hz。
  72 +g=-10 设置在中心频率处的增益为 -10 dB,即衰减 10 dB。
  73 +第二个例子
  74 +Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2:
  75 +
  76 +equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
  77 +第一个 equalizer 滤镜设置:
  78 +f=1000 设置中心频率为 1000 Hz。
  79 +t=q 指定带宽的单位为 Q 因子。
  80 +w=1 设置 Q 因子为 1,这会影响滤波器的带宽和尖锐程度。Q 因子越高,带宽越窄,滤波器越尖锐。
  81 +g=2 设置在中心频率处的增益为 2 dB。
  82 +第二个 equalizer 滤镜设置:
  83 +f=100 设置中心频率为 100 Hz。
  84 +同样地,t=q 指定带宽的单位为 Q 因子。
  85 +w=2 设置 Q 因子为 2,这会影响 100 Hz 处的滤波效果。
  86 +g=-5 设置在中心频率处的增益为 -5 dB,即衰减 5 dB。
  87 +请注意,这些命令假设了 equalizer 滤镜能够处理多个实例并应用于同一音频流,且每个实例都独立设置其参数。这在许多音频处理软件中是常见的,但在具体实现时可能会有所不同。
  88 +
  89 +此外,如果您的环境不支持直接以这种方式链接多个滤镜实例(例如,在 FFmpeg 中,您可能需要使用分号 ; 而不是逗号 , 来分隔不同的滤镜,或者将滤镜放入单独的链中),您可能需要调整命令格式以符合您所使用的软件或库的语法要求。然而,在您给出的例子中,逗号 , 被用作分隔符,这通常是在某些特定上下文(如某些音频编辑软件的内部命令或脚本)中使用的。
  90 +
  91 +
  92 +t=h 和t=q的区别是什么 请详细说说
  93 +
  94 +在音频处理或信号处理领域中,t=h 和 t=q 在设置均衡器(equalizer)或滤波器(filter)时代表了不同的带宽(bandwidth)指定方式,它们主要影响滤波器对频率的响应形状和尖锐程度。以下是详细的区别说明:
  95 +
  96 +t=h(或 Hz)
  97 +含义:t=h 或 t=Hz 表示带宽(bandwidth)的单位是赫兹(Hz)。在这种情况下,你直接指定了滤波器频率响应曲线在中心频率两侧下降一定幅度(通常是3dB)所覆盖的频率范围。
  98 +影响:使用Hz作为带宽单位时,滤波器的形状(如峰形滤波器、带通滤波器或带阻滤波器等)在频率轴上的展宽是固定的,不随中心频率的变化而变化。这有助于精确控制滤波器对特定频率范围的影响。
  99 +应用:当你需要精确控制滤波器影响的频率范围时,使用Hz作为带宽单位非常有用。例如,在音频制作中,你可能想要增强或减弱某个特定频率及其附近很小范围内的声音。
  100 +t=q(Q-Factor)
  101 +含义:t=q 表示带宽的指定方式是使用Q因子(Q-Factor)。Q因子是中心频率与滤波器带宽的比值,它描述了滤波器对中心频率的选择性,即滤波器如何尖锐地聚焦于中心频率。
  102 +影响:Q因子越高,滤波器的带宽越窄,滤波器对中心频率的选择性越强,响应曲线越尖锐。相反,Q因子越低,滤波器的带宽越宽,滤波器对中心频率的选择性越弱,响应曲线越平坦。
  103 +应用:当你需要创建一个尖锐的滤波器响应,以便仅影响中心频率附近的非常小的频率范围时,使用Q因子作为带宽指定方式非常合适。例如,在电子音乐制作中,你可能想要创建一个非常尖锐的陷波滤波器来去除某个不想要的频率。
  104 +总结
  105 +t=h(或Hz)和t=q的主要区别在于它们如何指定滤波器的带宽。
  106 +使用Hz时,你直接指定了滤波器在频率轴上的展宽。
  107 +使用Q因子时,你指定了滤波器对中心频率的选择性,即滤波器的尖锐程度。
  108 +选择哪种方式取决于你的具体需求,比如你需要精确控制哪个频率范围或你想要滤波器有多尖锐。
  109 + *
  110 + *
  111 +*/
  112 +
  113 +// ffmpeg -i 人民警察警歌.mp3 -af "equalizer=f=50:t=q:w=2.0:g=-48, equalizer=f=100:t=q:w=2.0:g=-48, \
  114 +// equalizer=f=250:t=q:w=2.0:g=-48, equalizer=f=500:t=q:w=2.0:g=-24, \
  115 +// equalizer=f=1000:t=q:w=2.0:g=-24, equalizer=f=4000:t=q:w=2.0:g=0, \
  116 +// equalizer=f=8000:t=q:w=2.0:g=0, equalizer=f=16000:t=q:w=2.0:g=0, \
  117 +// anequalizer=c0 f=250 w=500 g=-48 t=2|c1 f=250 w=500 g=-48 t=2" out1.mp3
  118 +
  119 +//无滤波113 114
  120 +
  121 +
  122 +//112.6 111.8
  123 +#define Filter_No3 "equalizer=f=50:t=q:w=2.0:g=-48, \
  124 + equalizer=f=100:t=q:w=2.0:g=-48, \
  125 + equalizer=f=250:t=q:w=2.0:g=-48, \
  126 + equalizer=f=500:t=q:w=2.0:g=-24, \
  127 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  128 + equalizer=f=2000:t=q:w=2.0:g=4, \
  129 + equalizer=f=4000:t=q:w=2.0:g=0, \
  130 + equalizer=f=8000:t=q:w=2.0:g=-12, \
  131 + equalizer=f=16000:t=q:w=2.0:g=-24, \
  132 + equalizer=f=32000:t=q:w=2.0:g=-48, \
  133 + bass=g=-96:f=200:t=q:w=10"
  134 +
  135 +//114 //117 太尖锐了
  136 +#define Filter_No4 "equalizer=f=50:t=q:w=2.0:g=-24, \
  137 + equalizer=f=100:t=q:w=2.0:g=-12, \
  138 + equalizer=f=250:t=q:w=2.0:g=-12, \
  139 + equalizer=f=500:t=q:w=2.0:g=-8, \
  140 + equalizer=f=1000:t=q:w=2.0:g=4, \
  141 + equalizer=f=2000:t=q:w=2.0:g=4, \
  142 + equalizer=f=4000:t=q:w=2.0:g=4, \
  143 + equalizer=f=8000:t=q:w=2.0:g=0, \
  144 + equalizer=f=16000:t=q:w=2.0:g=-6, \
  145 + equalizer=f=32000:t=q:w=2.0:g=-24, \
  146 + bass=g=-96:f=150:t=q:w=10"
  147 +
  148 +//113 //115 还是尖锐
  149 +#define Filter_No5 "equalizer=f=50:t=q:w=2.0:g=-24, \
  150 + equalizer=f=100:t=q:w=2.0:g=-8, \
  151 + equalizer=f=250:t=q:w=2.0:g=-8, \
  152 + equalizer=f=500:t=q:w=2.0:g=-4, \
  153 + equalizer=f=1000:t=q:w=2.0:g=4, \
  154 + equalizer=f=2000:t=q:w=2.0:g=0, \
  155 + equalizer=f=4000:t=q:w=2.0:g=0, \
  156 + equalizer=f=8000:t=q:w=2.0:g=0, \
  157 + equalizer=f=16000:t=q:w=2.0:g=-6, \
  158 + equalizer=f=32000:t=q:w=2.0:g=-24, \
  159 + bass=g=-96:f=130:t=q:w=10"
  160 +
  161 +//113 //115 声音效果跟平常差不多
  162 +#define Filter_No6 "equalizer=f=50:t=q:w=2.0:g=-24, \
  163 + equalizer=f=100:t=q:w=2.0:g=-24, \
  164 + equalizer=f=250:t=q:w=2.0:g=-12, \
  165 + equalizer=f=500:t=q:w=2.0:g=-12, \
  166 + equalizer=f=1000:t=q:w=2.0:g=-6, \
  167 + equalizer=f=2000:t=q:w=2.0:g=0, \
  168 + equalizer=f=4000:t=q:w=2.0:g=0, \
  169 + equalizer=f=8000:t=q:w=2.0:g=0, \
  170 + equalizer=f=16000:t=q:w=2.0:g=-6, \
  171 + equalizer=f=32000:t=q:w=2.0:g=-24"
  172 +
  173 +//
  174 +#define Filter_No7 "equalizer=f=50:t=q:w=2.0:g=-24, \
  175 + equalizer=f=100:t=q:w=2.0:g=-24, \
  176 + equalizer=f=250:t=q:w=2.0:g=-12, \
  177 + equalizer=f=500:t=q:w=2.0:g=-12, \
  178 + equalizer=f=1000:t=q:w=2.0:g=-6, \
  179 + equalizer=f=2000:t=q:w=2.0:g=0, \
  180 + equalizer=f=4000:t=q:w=2.0:g=0, \
  181 + equalizer=f=8000:t=q:w=2.0:g=0, \
  182 + equalizer=f=16000:t=q:w=2.0:g=-6, \
  183 + equalizer=f=32000:t=q:w=2.0:g=-24, \
  184 + bass=g=-96:f=50:t=q:w=8"
  185 +
  186 +//650 那段会影响乐器声 1400那段影响人声
  187 +#define Filter_No8 "equalizer=f=100:t=h:width=100:g=-48, \
  188 + equalizer=f=350:t=h:width=100:g=-36, \
  189 + equalizer=f=650:t=h:width=150:g=-12, \
  190 + equalizer=f=1400:t=h:width=600:g=0, \
  191 + equalizer=f=2500:t=h:width=500:g=0, \
  192 + equalizer=f=3500:t=h:width=600:g=0, \
  193 + equalizer=f=4500:t=h:width=500:g=+4, \
  194 + equalizer=f=5500:t=h:width=500:g=+8, \
  195 + equalizer=f=8000:t=h:width=2000:g=+12, \
  196 + bass=g=-96:f=50:t=q:w=8"
  197 +
  198 +
  199 +//11分钟
  200 +#define OLD_FILTER "equalizer=f=31:t=q:w=2.0:g=-48, \
23 equalizer=f=62:t=q:w=2.0:g=-48, \ 201 equalizer=f=62:t=q:w=2.0:g=-48, \
24 equalizer=f=125:t=q:w=2.0:g=-48, \ 202 equalizer=f=125:t=q:w=2.0:g=-48, \
25 equalizer=f=250:t=q:w=2.0:g=-24, \ 203 equalizer=f=250:t=q:w=2.0:g=-24, \
@@ -28,20 +206,289 @@ extern "C" { @@ -28,20 +206,289 @@ extern "C" {
28 equalizer=f=2000:t=q:w=2.0:g=0, \ 206 equalizer=f=2000:t=q:w=2.0:g=0, \
29 equalizer=f=4000:t=q:w=2.0:g=0, \ 207 equalizer=f=4000:t=q:w=2.0:g=0, \
30 equalizer=f=8000:t=q:w=2.0:g=0, \ 208 equalizer=f=8000:t=q:w=2.0:g=0, \
31 - equalizer=f=16000:t=q:w=2.0:g=0, \  
32 - bass=g=-96:f=50:t=q:w=8"  
33 -//240 过热  
34 -#define OLD_FILTER_3 "equalizer=f=31:t=q:w=2.0:g=-48, \ 209 + equalizer=f=16000:t=q:w=2.0:g=0"
  210 +
  211 +//111.0 111.4 保持46度
  212 +#define Filter_No9 "equalizer=f=31:t=q:w=2.0:g=-48, \
35 equalizer=f=62:t=q:w=2.0:g=-48, \ 213 equalizer=f=62:t=q:w=2.0:g=-48, \
36 equalizer=f=125:t=q:w=2.0:g=-48, \ 214 equalizer=f=125:t=q:w=2.0:g=-48, \
37 - equalizer=f=250:t=q:w=2.0:g=-24, \ 215 + equalizer=f=250:t=q:w=2.0:g=-48, \
  216 + equalizer=f=500:t=q:w=2.0:g=-48, \
  217 + equalizer=f=1000:t=q:w=2.0:g=-24, \
  218 + equalizer=f=2000:t=q:w=2.0:g=0, \
  219 + equalizer=f=4000:t=q:w=2.0:g=0, \
  220 + equalizer=f=8000:t=q:w=2.0:g=0, \
  221 + equalizer=f=16000:t=q:w=2.0:g=0"
  222 +
  223 +
  224 +
  225 +
  226 +
  227 +/******
  228 + *
  229 + *
  230 + * loudnorm 标准化音量滤波器
  231 + * I= 最大响度
  232 + * LRA 响度范围 值越小 范围越小
  233 + * TP 音量的最大值
  234 + *
  235 + * 用于将音频都调节到一个音量大小
  236 + *
  237 + *
  238 + * 降低音量的动态范围,用于减少发热
  239 + *
  240 + * *********/
  241 +
  242 +//旧式机115
  243 +/*
  244 +2 37
  245 +4 39
  246 +6 41
  247 +8 43
  248 +11 45
  249 +14 47
  250 +17 49
  251 +21 50
  252 +22 52
  253 +25 55
  254 +27 54
  255 +31 55
  256 +40 57
  257 +*/
  258 +#define Filter_No10 "equalizer=f=31:t=q:w=2.0:g=-48, \
  259 + equalizer=f=62:t=q:w=2.0:g=-48, \
  260 + equalizer=f=125:t=q:w=2.0:g=-48, \
  261 + equalizer=f=250:t=q:w=2.0:g=-32, \
38 equalizer=f=500:t=q:w=2.0:g=-24, \ 262 equalizer=f=500:t=q:w=2.0:g=-24, \
39 - equalizer=f=1000:t=q:w=2.0:g=-4, \ 263 + equalizer=f=1000:t=q:w=2.0:g=-12, \
40 equalizer=f=2000:t=q:w=2.0:g=0, \ 264 equalizer=f=2000:t=q:w=2.0:g=0, \
41 equalizer=f=4000:t=q:w=2.0:g=0, \ 265 equalizer=f=4000:t=q:w=2.0:g=0, \
42 equalizer=f=8000:t=q:w=2.0:g=0, \ 266 equalizer=f=8000:t=q:w=2.0:g=0, \
43 - equalizer=f=16000:t=q:w=2.0:g=0, \  
44 - bass=g=-96:f=200:t=h:w=10" 267 + equalizer=f=16000:t=q:w=2.0:g=0"
  268 +
  269 +//半小时49度 但是音量掉到107了
  270 +/*
  271 +00 35
  272 +4 37
  273 +8 39
  274 +13 41
  275 +18 43
  276 +27 45
  277 +36 47
  278 +52 49
  279 +60 49
  280 +*/
  281 +#define Filter_No11 "equalizer=f=31:t=q:w=2.0:g=-48, \
  282 + equalizer=f=62:t=q:w=2.0:g=-48, \
  283 + equalizer=f=125:t=q:w=2.0:g=-48, \
  284 + equalizer=f=250:t=q:w=2.0:g=-32, \
  285 + equalizer=f=500:t=q:w=2.0:g=-24, \
  286 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  287 + equalizer=f=2000:t=q:w=2.0:g=0, \
  288 + equalizer=f=4000:t=q:w=2.0:g=-16, \
  289 + equalizer=f=8000:t=q:w=2.0:g=-24, \
  290 + equalizer=f=16000:t=q:w=2.0:g=-32"
  291 +
  292 +//113.3
  293 +#define Filter_No12 "equalizer=f=31:t=q:w=2.0:g=-42, \
  294 + equalizer=f=62:t=q:w=2.0:g=-42, \
  295 + equalizer=f=125:t=q:w=2.0:g=-42, \
  296 + equalizer=f=250:t=q:w=2.0:g=-28, \
  297 + equalizer=f=500:t=q:w=2.0:g=-16, \
  298 + equalizer=f=1000:t=q:w=2.0:g=0, \
  299 + equalizer=f=2000:t=q:w=2.0:g=0, \
  300 + equalizer=f=4000:t=q:w=2.0:g=-2, \
  301 + equalizer=f=8000:t=q:w=2.0:g=-4, \
  302 + equalizer=f=16000:t=q:w=2.0:g=-8"
  303 +
  304 +//115.6 降低两端 提高中段音量
  305 +/*
  306 +00 35
  307 +01 37
  308 +03 39
  309 +04 41
  310 +05 43
  311 +06 45
  312 +07 47
  313 +09 49 发热过于严重
  314 +*/
  315 +#define Filter_No13 "equalizer=f=31:t=q:w=2.0:g=-48, \
  316 + equalizer=f=62:t=q:w=2.0:g=-48, \
  317 + equalizer=f=125:t=q:w=2.0:g=-48, \
  318 + equalizer=f=250:t=q:w=2.0:g=-32, \
  319 + equalizer=f=500:t=q:w=2.0:g=-24, \
  320 + equalizer=f=1000:t=q:w=2.0:g=+8, \
  321 + equalizer=f=2000:t=q:w=2.0:g=+8, \
  322 + equalizer=f=4000:t=q:w=2.0:g=-4, \
  323 + equalizer=f=8000:t=q:w=2.0:g=-8, \
  324 + equalizer=f=16000:t=q:w=2.0:g=-12"
  325 +
  326 +//111 降低中频 提高低频
  327 +#define Filter_No14 "equalizer=f=31:t=q:w=2.0:g=-48, \
  328 + equalizer=f=62:t=q:w=2.0:g=-48, \
  329 + equalizer=f=125:t=q:w=2.0:g=-48, \
  330 + equalizer=f=250:t=q:w=2.0:g=-18, \
  331 + equalizer=f=500:t=q:w=2.0:g=-12, \
  332 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  333 + equalizer=f=2000:t=q:w=2.0:g=-10, \
  334 + equalizer=f=4000:t=q:w=2.0:g=-2, \
  335 + equalizer=f=8000:t=q:w=2.0:g=-4, \
  336 + equalizer=f=16000:t=q:w=2.0:g=-8"
  337 +
  338 +//112.1 14基础上补偿一点中频
  339 +#define Filter_No15 "equalizer=f=31:t=q:w=2.0:g=-48, \
  340 + equalizer=f=62:t=q:w=2.0:g=-48, \
  341 + equalizer=f=125:t=q:w=2.0:g=-48, \
  342 + equalizer=f=250:t=q:w=2.0:g=-18, \
  343 + equalizer=f=500:t=q:w=2.0:g=-12, \
  344 + equalizer=f=1000:t=q:w=2.0:g=-8, \
  345 + equalizer=f=2000:t=q:w=2.0:g=-6, \
  346 + equalizer=f=4000:t=q:w=2.0:g=-2, \
  347 + equalizer=f=8000:t=q:w=2.0:g=-4, \
  348 + equalizer=f=16000:t=q:w=2.0:g=-8"
  349 +
  350 +//112.5 15基础上补偿一点低频
  351 +#define Filter_No16 "equalizer=f=31:t=q:w=2.0:g=-48, \
  352 + equalizer=f=62:t=q:w=2.0:g=-48, \
  353 + equalizer=f=125:t=q:w=2.0:g=-32, \
  354 + equalizer=f=250:t=q:w=2.0:g=-12, \
  355 + equalizer=f=500:t=q:w=2.0:g=-6, \
  356 + equalizer=f=1000:t=q:w=2.0:g=-8, \
  357 + equalizer=f=2000:t=q:w=2.0:g=-6, \
  358 + equalizer=f=4000:t=q:w=2.0:g=-2, \
  359 + equalizer=f=8000:t=q:w=2.0:g=-4, \
  360 + equalizer=f=16000:t=q:w=2.0:g=-8"
  361 +
  362 +//117 10的基础上,降低中频,补偿高频
  363 +#define Filter_No17 "equalizer=f=31:t=q:w=2.0:g=-48, \
  364 + equalizer=f=62:t=q:w=2.0:g=-48, \
  365 + equalizer=f=125:t=q:w=2.0:g=-48, \
  366 + equalizer=f=250:t=q:w=2.0:g=-32, \
  367 + equalizer=f=500:t=q:w=2.0:g=-24, \
  368 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  369 + equalizer=f=2000:t=q:w=2.0:g=-8, \
  370 + equalizer=f=4000:t=q:w=2.0:g=+8, \
  371 + equalizer=f=8000:t=q:w=2.0:g=+4, \
  372 + equalizer=f=16000:t=q:w=2.0:g=+2"
  373 +
  374 +//115 17的基础上,减少中高频补偿
  375 +#define Filter_No18 "equalizer=f=31:t=q:w=2.0:g=-48, \
  376 + equalizer=f=62:t=q:w=2.0:g=-48, \
  377 + equalizer=f=125:t=q:w=2.0:g=-48, \
  378 + equalizer=f=250:t=q:w=2.0:g=-32, \
  379 + equalizer=f=500:t=q:w=2.0:g=-24, \
  380 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  381 + equalizer=f=2000:t=q:w=2.0:g=-8, \
  382 + equalizer=f=4000:t=q:w=2.0:g=+2, \
  383 + equalizer=f=8000:t=q:w=2.0:g=+4, \
  384 + equalizer=f=16000:t=q:w=2.0:g=+2"
  385 +
  386 +//114.6 18的基础上,减少中高频补偿
  387 +/*
  388 +00 35
  389 +2 37
  390 +6 39
  391 +8 41
  392 +11 43
  393 +14 45
  394 +20 47
  395 +24 49
  396 +30 50
  397 +31 49
  398 +33 50
  399 +39 52
  400 +51 54
  401 +56 55
  402 +57 54
  403 +63 54
  404 +*/
  405 +#define Filter_No19 "equalizer=f=31:t=q:w=2.0:g=-48, \
  406 + equalizer=f=62:t=q:w=2.0:g=-48, \
  407 + equalizer=f=125:t=q:w=2.0:g=-48, \
  408 + equalizer=f=250:t=q:w=2.0:g=-32, \
  409 + equalizer=f=500:t=q:w=2.0:g=-24, \
  410 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  411 + equalizer=f=2000:t=q:w=2.0:g=-8, \
  412 + equalizer=f=4000:t=q:w=2.0:g=+1, \
  413 + equalizer=f=8000:t=q:w=2.0:g=+2, \
  414 + equalizer=f=16000:t=q:w=2.0:g=+2"
  415 +
  416 +// 19的基础上,补偿低频 比10号方案尖一点
  417 +/*
  418 +0 35
  419 +3 37
  420 +5 39
  421 +7 41
  422 +10 43
  423 +14 45
  424 +18 47
  425 +23 49
  426 +27 50
  427 +34 52
  428 +35 50
  429 +36 52
  430 +42 54
  431 +55 55
  432 +63 55
  433 +*/
  434 +#define Filter_No20 "equalizer=f=31:t=q:w=2.0:g=-48, \
  435 + equalizer=f=62:t=q:w=2.0:g=-36, \
  436 + equalizer=f=125:t=q:w=2.0:g=-30, \
  437 + equalizer=f=250:t=q:w=2.0:g=-26, \
  438 + equalizer=f=500:t=q:w=2.0:g=-20, \
  439 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  440 + equalizer=f=2000:t=q:w=2.0:g=-8, \
  441 + equalizer=f=4000:t=q:w=2.0:g=+1, \
  442 + equalizer=f=8000:t=q:w=2.0:g=+2, \
  443 + equalizer=f=16000:t=q:w=2.0:g=+2"
  444 +
  445 +// 20的基础上,补偿中低频
  446 +/*
  447 +0 35
  448 +3 37
  449 +5 39
  450 +7 41
  451 +11 43
  452 +13 45
  453 +14 47
  454 +17 49
  455 +19 50
  456 +20 52
  457 +22 50
  458 +23 52
  459 +26 54
  460 +27 55
  461 +*/
  462 +#define Filter_No21 "equalizer=f=31:t=q:w=2.0:g=-48, \
  463 + equalizer=f=62:t=q:w=2.0:g=-36, \
  464 + equalizer=f=125:t=q:w=2.0:g=-30, \
  465 + equalizer=f=250:t=q:w=2.0:g=-24, \
  466 + equalizer=f=500:t=q:w=2.0:g=-16, \
  467 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  468 + equalizer=f=2000:t=q:w=2.0:g=-8, \
  469 + equalizer=f=4000:t=q:w=2.0:g=+1, \
  470 + equalizer=f=8000:t=q:w=2.0:g=+2, \
  471 + equalizer=f=16000:t=q:w=2.0:g=+2"
  472 +
  473 +#define Filter_M30_1 "equalizer=f=31:t=q:w=2.0:g=-48, \
  474 + equalizer=f=62:t=q:w=2.0:g=-36, \
  475 + equalizer=f=125:t=q:w=2.0:g=-30, \
  476 + equalizer=f=250:t=q:w=2.0:g=-24, \
  477 + equalizer=f=500:t=q:w=2.0:g=-16, \
  478 + equalizer=f=1000:t=q:w=2.0:g=-12, \
  479 + equalizer=f=2000:t=q:w=2.0:g=-8, \
  480 + equalizer=f=4000:t=q:w=2.0:g=+1, \
  481 + equalizer=f=8000:t=q:w=2.0:g=+4, \
  482 + equalizer=f=16000:t=q:w=2.0:g=+3, \
  483 + anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  484 + anequalizer=c0 f=3700 w=1400 g=-22 t=0|c1 f=3700 w=1400 g=-22 t=0"
  485 +
  486 +#define Filter_M30_2 "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0, \
  487 + anequalizer=c0 f=3700 w=1400 g=-22 t=0|c1 f=3700 w=1400 g=-22 t=0"
  488 +
  489 +#define Filter_M30_3 "anequalizer=c0 f=4000 w=1400 g=-22 t=0|c1 f=4000 w=1400 g=-22 t=0"
  490 +
  491 +#define FILTER_PARAM Filter_No20
45 492
46 /* Exported types ------------------------------------------------------------*/ 493 /* Exported types ------------------------------------------------------------*/
47 494
@@ -265,7 +265,6 @@ static T_JZsdkReturnCode DeviceMessage_Enter_Debug(unsigned char *message) @@ -265,7 +265,6 @@ static T_JZsdkReturnCode DeviceMessage_Enter_Debug(unsigned char *message)
265 snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message); 265 snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);
266 } 266 }
267 267
268 -  
269 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON 268 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
270 memset(new_message,0,sizeof(new_message)); 269 memset(new_message,0,sizeof(new_message));
271 memset(old_message,0,sizeof(old_message)); 270 memset(old_message,0,sizeof(old_message));
@@ -284,6 +283,9 @@ static T_JZsdkReturnCode DeviceMessage_Enter_Debug(unsigned char *message) @@ -284,6 +283,9 @@ static T_JZsdkReturnCode DeviceMessage_Enter_Debug(unsigned char *message)
284 snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message); 283 snprintf(message,MESSAGE_MAX_LEN,"%s%s",old_message,new_message);
285 } 284 }
286 #endif 285 #endif
  286 +
  287 +
  288 +
287 } 289 }
288 290
289 291
@@ -27,8 +27,10 @@ T_JZsdkReturnCode FOMAT_Get_FirewareOriginRegion(); @@ -27,8 +27,10 @@ T_JZsdkReturnCode FOMAT_Get_FirewareOriginRegion();
27 typedef enum OriginRegionPlace 27 typedef enum OriginRegionPlace
28 { 28 {
29 ORIGIN_DEFAULT = 0x0000, 29 ORIGIN_DEFAULT = 0x0000,
30 - ORIGIN_CN = 0x0001,  
31 - ORIGIN_EN = 0x0002, 30 + ORIGIN_CN = 0x0001, //中区码
  31 + ORIGIN_EN = 0x0002, //英区码
  32 + ORIGIN_NA = 0x0003, //南美码
  33 + ORIGIN_EU = 0x0004, //欧洲码
32 }OriginRegionPlace; 34 }OriginRegionPlace;
33 35
34 /* Exported functions --------------------------------------------------------*/ 36 /* Exported functions --------------------------------------------------------*/
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 #include <stdio.h> 10 #include <stdio.h>
11 #include <pthread.h> 11 #include <pthread.h>
12 #include <math.h> 12 #include <math.h>
  13 +#include <stdlib.h>
13 #include "JZsdkLib.h" 14 #include "JZsdkLib.h"
14 #include "Gimbal/Gimbal_Param.h" 15 #include "Gimbal/Gimbal_Param.h"
15 #include "Gimbal/Gimbal.h" 16 #include "Gimbal/Gimbal.h"
@@ -19,7 +20,6 @@ @@ -19,7 +20,6 @@
19 20
20 #include "BaseConfig.h" 21 #include "BaseConfig.h"
21 22
22 -  
23 //数值角度记录 23 //数值角度记录
24 static int Gimbal_PitchAngle = 0; //俯仰角度 //控制云台上相机相对于水平面的上下移动。 24 static int Gimbal_PitchAngle = 0; //俯仰角度 //控制云台上相机相对于水平面的上下移动。
25 static int Gimbal_YawAngle = 0; //偏航角度 //个角度控制云台上相机相对于水平面的上下移动。 25 static int Gimbal_YawAngle = 0; //偏航角度 //个角度控制云台上相机相对于水平面的上下移动。
@@ -245,6 +245,17 @@ T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int pitch) @@ -245,6 +245,17 @@ T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int pitch)
245 #if DEVICE_VERSION == JZ_H1T 245 #if DEVICE_VERSION == JZ_H1T
246 JZsdk_Uart_Send_SetGimbalFineTuningPitch(UART_DEV_1, g_MotorFineTuningPitch); 246 JZsdk_Uart_Send_SetGimbalFineTuningPitch(UART_DEV_1, g_MotorFineTuningPitch);
247 #else 247 #else
  248 + //微调值要小于20度
  249 + if (g_MotorFineTuningPitch >= 200)
  250 + {
  251 + g_MotorFineTuningPitch = 200;
  252 + }
  253 +
  254 + if (g_MotorFineTuningPitch <= -200)
  255 + {
  256 + g_MotorFineTuningPitch = -200;
  257 + }
  258 +
248 //存储到文件 259 //存储到文件
249 MotorFineTuning_WritePitch(g_MotorFineTuningPitch); 260 MotorFineTuning_WritePitch(g_MotorFineTuningPitch);
250 #endif 261 #endif
@@ -26,6 +26,10 @@ extern "C" { @@ -26,6 +26,10 @@ extern "C" {
26 /* Exported functions --------------------------------------------------------*/ 26 /* Exported functions --------------------------------------------------------*/
27 27
28 #if DEVICE_VERSION == JZ_C1 28 #if DEVICE_VERSION == JZ_C1
  29 +#define PITCH_PWM_MAX 0
  30 +#define PITCH_PWM_MIN 0
  31 +#define MAX_PITCH 0
  32 +#define MIN_PITCH 0
29 33
30 #elif DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T 34 #elif DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
31 35
@@ -80,6 +80,7 @@ static int JZsdk_SearchLightGetLimitTemp(int DeviceMode) @@ -80,6 +80,7 @@ static int JZsdk_SearchLightGetLimitTemp(int DeviceMode)
80 case JZ_U3S: 80 case JZ_U3S:
81 return 70; 81 return 70;
82 break; 82 break;
  83 +
83 case JZ_U3D: 84 case JZ_U3D:
84 return 70; 85 return 70;
85 break; 86 break;
@@ -134,6 +134,9 @@ static void *TempControl_TempTask(void *arg) @@ -134,6 +134,9 @@ static void *TempControl_TempTask(void *arg)
134 //控件控制初始化 134 //控件控制初始化
135 T_JZsdkReturnCode JZsdk_SearchLightTemControl_Init() 135 T_JZsdkReturnCode JZsdk_SearchLightTemControl_Init()
136 { 136 {
  137 +#if DEVICE_VERSION == JZ_H1T
  138 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  139 +#endif
137 140
138 pthread_t WriteDataTask; 141 pthread_t WriteDataTask;
139 pthread_attr_t task_attribute; //线程属性 142 pthread_attr_t task_attribute; //线程属性
@@ -10,13 +10,13 @@ @@ -10,13 +10,13 @@
10 #include "BaseConfig.h" 10 #include "BaseConfig.h"
11 #include "./Kt_Irc/Kt_Irc.h" 11 #include "./Kt_Irc/Kt_Irc.h"
12 #include "../ImageProc/PseudoColor/PseudoColor.h" 12 #include "../ImageProc/PseudoColor/PseudoColor.h"
  13 +#include "MediaProc/MediaProc_Param.h"
  14 +
  15 +#include "MediaProc/IRC_funtion/IRC_funtion.h"
  16 +
13 17
14 static int PseudoColor = JZ_FLAGCODE_OFF; //伪彩颜色 18 static int PseudoColor = JZ_FLAGCODE_OFF; //伪彩颜色
15 static int PixelColorMode = JZ_FLAGCODE_OFF; //像素颜色模式 19 static int PixelColorMode = JZ_FLAGCODE_OFF; //像素颜色模式
16 -int JZsdk_RawBadPixelCheck_Flag = JZ_FLAGCODE_OFF; //原始盲点记录标志  
17 -int JZsdk_GrayBadPixelCheck_flag = JZ_FLAGCODE_OFF; //灰度图坏点纠正标志  
18 -int JZsdk_SPCCheck_flag = JZ_FLAGCODE_OFF; // 单点纠正标志  
19 -int JZsdk_GasEnhancementCorrect_flag = JZ_FLAGCODE_ON; //气体增强纠正标志  
20 20
21 static int g_CameraCorrectionMode = JZ_FLAGCODE_OFF; //相机校正模式 21 static int g_CameraCorrectionMode = JZ_FLAGCODE_OFF; //相机校正模式
22 static int g_CameraGasEnhancementColor = 0; //默认红0 绿1 蓝2 22 static int g_CameraGasEnhancementColor = 0; //默认红0 绿1 蓝2
@@ -52,10 +52,10 @@ T_JZsdkReturnCode JZsdk_Camera_ShutterSwitch(int value) @@ -52,10 +52,10 @@ T_JZsdkReturnCode JZsdk_Camera_ShutterSwitch(int value)
52 * 52 *
53 * 53 *
54 * **************************/ 54 * **************************/
55 -T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(int value) 55 +T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch()
56 { 56 {
57 - JZsdk_RawBadPixelCheck_Flag = value; //原始盲点记录标志  
58 - JZsdk_GrayBadPixelCheck_flag = value; //灰度图坏点纠正标志 57 + IRC_SetRawPixel_ResetFlag();
  58 + IRC_SetGrayPixel_ResetFlag();
59 } 59 }
60 60
61 //单点纠正开关 61 //单点纠正开关
@@ -65,9 +65,9 @@ T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(int value) @@ -65,9 +65,9 @@ T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(int value)
65 * 65 *
66 * 66 *
67 * **************************/ 67 * **************************/
68 -T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(int value) 68 +T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch()
69 { 69 {
70 - JZsdk_SPCCheck_flag = value; //单点纠正标志 70 + IRC_SetSPC_ResetFlag();
71 } 71 }
72 72
73 //气体纠正开关 73 //气体纠正开关
@@ -77,12 +77,9 @@ T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(int value) @@ -77,12 +77,9 @@ T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(int value)
77 * 77 *
78 * 78 *
79 * **************************/ 79 * **************************/
80 -T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch(int value) 80 +T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch()
81 { 81 {
82 - value = JZ_FLAGCODE_ON;  
83 - JZsdk_GasEnhancementCorrect_flag = value;  
84 -  
85 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 82 + IRC_SetDGCE_ResetFlag();
86 } 83 }
87 84
88 /******************** 85 /********************
@@ -113,11 +110,17 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) @@ -113,11 +110,17 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY)
113 { 110 {
114 g_CameraRegionBox_FirstPixel[0] = PointX; 111 g_CameraRegionBox_FirstPixel[0] = PointX;
115 g_CameraRegionBox_FirstPixel[1] = PointY; 112 g_CameraRegionBox_FirstPixel[1] = PointY;
  113 +
  114 + IRC_Set_RegionBox(0, PointX, PointY);
  115 + IRC_Set_RegionMode(1);
116 } 116 }
117 else if (g_CameraRegionBox_ClickTime+1 == 2) 117 else if (g_CameraRegionBox_ClickTime+1 == 2)
118 { 118 {
119 g_CameraRegionBox_SecondPixel[0] = PointX; 119 g_CameraRegionBox_SecondPixel[0] = PointX;
120 g_CameraRegionBox_SecondPixel[1] = PointY; 120 g_CameraRegionBox_SecondPixel[1] = PointY;
  121 +
  122 + IRC_Set_RegionBox(1, PointX, PointY);
  123 + IRC_Set_RegionMode(2);
121 } 124 }
122 125
123 g_CameraRegionBox_ClickTime++; 126 g_CameraRegionBox_ClickTime++;
@@ -125,6 +128,7 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) @@ -125,6 +128,7 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY)
125 if (g_CameraRegionBox_ClickTime == 3) 128 if (g_CameraRegionBox_ClickTime == 3)
126 { 129 {
127 g_CameraRegionBox_ClickTime=0; 130 g_CameraRegionBox_ClickTime=0;
  131 + IRC_Set_RegionMode(0);
128 } 132 }
129 133
130 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 134 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
@@ -149,11 +153,11 @@ static T_JZsdkReturnCode Camera_CorrectionMode(int mode) @@ -149,11 +153,11 @@ static T_JZsdkReturnCode Camera_CorrectionMode(int mode)
149 break; 153 break;
150 154
151 case 1: 155 case 1:
152 - RealMode = CAMERA_CORRCTION_SPC; 156 + RealMode = IRC_CORRCTION_SPC;
153 break; 157 break;
154 158
155 case 2: 159 case 2:
156 - RealMode = CAMERA_CORRCTION_TPC; 160 + RealMode = IRC_CORRCTION_TPC;
157 break; 161 break;
158 162
159 default: 163 default:
@@ -162,7 +166,7 @@ static T_JZsdkReturnCode Camera_CorrectionMode(int mode) @@ -162,7 +166,7 @@ static T_JZsdkReturnCode Camera_CorrectionMode(int mode)
162 } 166 }
163 167
164 //设置相机的当前纠正模式 168 //设置相机的当前纠正模式
165 - Kt_Irc_Set_CorrectionMode(RealMode); 169 + IRC_Set_CorrectionMode(RealMode);
166 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 170 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
167 #endif 171 #endif
168 172
@@ -177,22 +181,20 @@ static T_JZsdkReturnCode Camera_CorrectionMode(int mode) @@ -177,22 +181,20 @@ static T_JZsdkReturnCode Camera_CorrectionMode(int mode)
177 * ******************/ 181 * ******************/
178 static T_JZsdkReturnCode Camera_GasEnhancementColor(int mode) 182 static T_JZsdkReturnCode Camera_GasEnhancementColor(int mode)
179 { 183 {
180 - g_CameraCorrectionMode = mode;  
181 -  
182 #if DEVICE_VERSION == JZ_C1 184 #if DEVICE_VERSION == JZ_C1
183 int RealMode = 0; 185 int RealMode = 0;
184 switch (mode) 186 switch (mode)
185 { 187 {
186 case 0: 188 case 0:
187 - RealMode = CAMERA_GAS_ENHANCEMENT_RED; 189 + RealMode = IRC_GAS_ENHANCEMENT_RED;
188 break; 190 break;
189 191
190 case 1: 192 case 1:
191 - RealMode = CAMERA_GAS_ENHANCEMENT_GREEN; 193 + RealMode = IRC_GAS_ENHANCEMENT_GREEN;
192 break; 194 break;
193 195
194 case 2: 196 case 2:
195 - RealMode = CAMERA_GAS_ENHANCEMENT_BLUE; 197 + RealMode = IRC_GAS_ENHANCEMENT_BLUE;
196 break; 198 break;
197 199
198 default: 200 default:
@@ -200,7 +202,9 @@ static T_JZsdkReturnCode Camera_GasEnhancementColor(int mode) @@ -200,7 +202,9 @@ static T_JZsdkReturnCode Camera_GasEnhancementColor(int mode)
200 break; 202 break;
201 } 203 }
202 204
203 - Kt_Irc_Set_GasEnhancementColor(RealMode); 205 + g_CameraGasEnhancementColor = mode;
  206 +
  207 + IRC_Set_GasEnhancementColor(RealMode);
204 208
205 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 209 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
206 #endif 210 #endif
@@ -280,7 +284,7 @@ T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *va @@ -280,7 +284,7 @@ T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *va
280 284
281 case CAMERA_PIXEL_PSEUDO_COLOR_MODE: 285 case CAMERA_PIXEL_PSEUDO_COLOR_MODE:
282 { 286 {
283 - ret = Kt_Irc_Set_OutputPixelColorMode(*value); 287 + ret = IRC_Set_OutputPixelColorMode(*value);
284 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 288 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
285 { 289 {
286 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 290 return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
@@ -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 -#include "Kt_Irc/Kt_Irc.h" 15 +#include "MediaProc/MediaProc_Param.h"
16 16
17 #ifdef __cplusplus 17 #ifdef __cplusplus
18 extern "C" { 18 extern "C" {
@@ -25,36 +25,13 @@ extern "C" { @@ -25,36 +25,13 @@ extern "C" {
25 /* Exported types ------------------------------------------------------------*/ 25 /* Exported types ------------------------------------------------------------*/
26 26
27 27
28 -typedef enum CameraParam  
29 -{  
30 - CAMERA_PSEUDO_COLOR = 0x000001,  
31 - CAMERA_PIXEL_PSEUDO_COLOR_MODE = 0x000002,  
32 - CAMERA_REGION_BOX = 0x000003,  
33 - CAMERA_CORRCTION_MODE = 0x000004,  
34 - CAMERA_GAS_ENHANCEMENT_COLOR = 0x000005,  
35 - CAMERA_GAS_ENHANCEMENT_CORRCTION = 0x000006,  
36 -  
37 -}CameraParam;  
38 -  
39 -typedef enum CameraCorrectionMode  
40 -{  
41 - CAMERA_CORRCTION_SPC = 0x000001, //单点纠正  
42 - CAMERA_CORRCTION_TPC = 0x000002, //两点纠正  
43 -  
44 -}CameraCorrectionMode;  
45 -  
46 -typedef enum GasEnhancementColor  
47 -{  
48 - CAMERA_GAS_ENHANCEMENT_RED = 0x000000, //红  
49 - CAMERA_GAS_ENHANCEMENT_GREEN = 0x000001, //绿  
50 - CAMERA_GAS_ENHANCEMENT_BLUE = 0x000002, //蓝  
51 -}GasEnhancementColor;  
52 -  
53 /* Exported functions --------------------------------------------------------*/ 28 /* Exported functions --------------------------------------------------------*/
54 T_JZsdkReturnCode JZsdk_Camera_ShutterSwitch(int value); 29 T_JZsdkReturnCode JZsdk_Camera_ShutterSwitch(int value);
55 T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *value); 30 T_JZsdkReturnCode Camera_param(int flagcode, enum CameraParam paramflag, int *value);
56 -T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(int value);  
57 -T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(int value); 31 +T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch();
  32 +T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch();
  33 +T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch();
  34 +
58 T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num); 35 T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num);
59 36
60 #ifdef __cplusplus 37 #ifdef __cplusplus
@@ -12,7 +12,6 @@ @@ -12,7 +12,6 @@
12 #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" 12 #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h"
13 #include "../V4L2_camera/V4L2_Record.h" 13 #include "../V4L2_camera/V4L2_Record.h"
14 #include "../../StreamProc/StreamProc.h" 14 #include "../../StreamProc/StreamProc.h"
15 -#include "./Kt_Irc_deal.h"  
16 #include "../../MediaParm.h" 15 #include "../../MediaParm.h"
17 #include "../../VideoMgmt/VideoMgmt.h" 16 #include "../../VideoMgmt/VideoMgmt.h"
18 #include "../../StreamProc/StreamProc.h" 17 #include "../../StreamProc/StreamProc.h"
@@ -20,6 +19,8 @@ @@ -20,6 +19,8 @@
20 #include "../Camera.h" 19 #include "../Camera.h"
21 20
22 #include "UI_control/UI_control.h" 21 #include "UI_control/UI_control.h"
  22 +#include "../../IRC_funtion/IRC_Param.h"
  23 +#include "../../IRC_funtion/IRC_funtion.h"
23 24
24 #define IRC_WIDTH FIRST_WIDTH 25 #define IRC_WIDTH FIRST_WIDTH
25 #define IRC_HEIGHT FIRST_HEIGHT 26 #define IRC_HEIGHT FIRST_HEIGHT
@@ -27,112 +28,32 @@ @@ -27,112 +28,32 @@
27 #define CAMERA_WIDTH SECOND_WIDTH 28 #define CAMERA_WIDTH SECOND_WIDTH
28 #define CAMERA_HEIGHT SECOND_HEIGHT 29 #define CAMERA_HEIGHT SECOND_HEIGHT
29 30
30 -// 定义帧头长度和帧头内容  
31 -//#define FRAME_HEADER_SIZE 6  
32 -#define FRAME_HEADER_SIZE 4  
33 -  
34 -//const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0x02, 0x80, 0x01, 0x00};  
35 - const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, 0xdd};  
36 -  
37 -static void *Irc_usb_index = NULL;  
38 static int Kt_Camera_fd; 31 static int Kt_Camera_fd;
39 32
40 -static Kt_Irc_deal *Kt_Irc_deal_cfg = NULL; 33 +extern IRC_param *g_IRC_Param;
41 34
42 35
43 -//红外数据纠正函数, 暂定全部替换  
44 -static T_JZsdkReturnCode Kt_Irc_DataCorrect(unsigned char *data, unsigned int len, unsigned char *BaseBuffer)  
45 -{  
46 - int fallback_flag = JZ_FLAGCODE_OFF;  
47 - int fallback_num = JZ_FLAGCODE_OFF; //纠正的行数  
48 -  
49 - //像素检查+ 像素修正  
50 - for (int i = 0; i < IRC_HEIGHT; i++)  
51 - {  
52 - int index = 640*i; 36 +#define IRC_WIDTH FIRST_WIDTH
  37 +#define IRC_HEIGHT FIRST_HEIGHT
53 38
54 - //数据检查  
55 - if (data[index+6] != i)  
56 - {  
57 - printf("数据检查不通过\n");  
58 - fallback_flag = JZ_FLAGCODE_ON;  
59 - fallback_num = i;  
60 - break;  
61 - } 39 +// 定义帧头长度和帧头内容
  40 +#define FRAME_HEADER_SIZE 4
62 41
63 - //像素修正  
64 - data[index+0] = data[index+8];  
65 - data[index+1] = data[index+9];  
66 - data[index+2] = data[index+8];  
67 - data[index+3] = data[index+9];  
68 - data[index+4] = data[index+8];  
69 - data[index+5] = data[index+9];  
70 - data[index+6] = data[index+8];  
71 - data[index+7] = data[index+9];  
72 - } 42 +static const unsigned char FRAME_HEADER[FRAME_HEADER_SIZE] = {0xaa, 0xbb, 0xcc, 0xdd};
73 43
74 - if (fallback_flag == JZ_FLAGCODE_ON)  
75 - {  
76 - memcpy(&data[fallback_num*640], &BaseBuffer[fallback_num*640], (len-(fallback_num*640))); //使用回退帧替换该帧  
77 - }  
78 - else  
79 - {  
80 - memcpy(BaseBuffer, data, len); //刷新回退帧  
81 - }  
82 44
83 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
84 -} 45 +static void *Irc_usb_index = NULL;
85 46
86 -//红外数据的处理  
87 -static void *JZsdk_Kt_Irc_DataDeal_Thread(void *args) 47 +//红外数据纠正函数, 暂定全部替换
  48 +T_JZsdkReturnCode Kt_Irc_DataCorrect(unsigned char *data)
88 { 49 {
89 - int DealFrameNum = 0;  
90 - unsigned char BaseBuffer[IRC_WIDTH*2*IRC_HEIGHT];  
91 -  
92 - while (1)  
93 - {  
94 - unsigned char *gary_data = NULL;  
95 - unsigned int gary_data_len;  
96 - //1、从原始流缓冲区中取出raw数据  
97 - VideoMgmt_read_data(&VideoMgmt_FirstRaw_index, &gary_data, &gary_data_len,JZ_FLAGCODE_OFF ,JZ_FLAGCODE_OFF);  
98 -  
99 - //2、红外数据纠正处理,该步暂时没必要了  
100 - //Kt_Irc_DataCorrect(raw_data, raw_data_len, BaseBuffer);  
101 -  
102 - //3、将灰度图数据转换为原始码流数据  
103 - unsigned char *raw_data = NULL;  
104 - int raw_data_len = 0;  
105 - //Kt_Irc_14bitGrayData_to_RawData(gary_data, gary_data_len, &raw_data, &raw_data_len, Kt_Irc_deal_cfg, 1);  
106 - Kt_Irc_14bitGrayData_to_RawData(gary_data, gary_data_len, &raw_data, &raw_data_len, Kt_Irc_deal_cfg, 0);  
107 -  
108 - //4、将原始码流数据转换成h264流,为避免多次复制,这里的h264会直接放入视频流管理的缓冲区  
109 - JZsdk_RTKMMP_RawData_to_h264(raw_data, raw_data_len);  
110 -  
111 - free(raw_data);  
112 - raw_data = NULL;  
113 - free(gary_data);  
114 - gary_data = NULL;  
115 -  
116 - //JZSDK_LOG_INFO("得到了一帧红外h264");  
117 - } 50 + //像素修正
  51 + data[0] = data[5];
  52 + data[1] = data[6];
  53 + data[2] = data[5];
  54 + data[3] = data[6];
118 } 55 }
119 56
120 -//红外相机数据的处理线程  
121 -static T_JZsdkReturnCode JZsdk_Kt_Irc_DataDeal_Init()  
122 -{  
123 - pthread_t ReadDataTask;  
124 - pthread_attr_t task_attribute; //线程属性  
125 - pthread_attr_init(&task_attribute); //初始化线程属性  
126 - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性  
127 - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Kt_Irc_DataDeal_Thread,NULL); //线程  
128 - if(opus_Protection != 0)  
129 - {  
130 - JZSDK_LOG_ERROR("创建红外相机数据的处理线程失败!");  
131 - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;  
132 - }  
133 -  
134 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
135 -}  
136 57
137 //红外数据接收线程 58 //红外数据接收线程
138 static void *JZsdk_Kt_Irc_DataRecv_Thread(void *args) 59 static void *JZsdk_Kt_Irc_DataRecv_Thread(void *args)
@@ -266,7 +187,7 @@ static void *JZsdk_Kt_Irc_DataRecv_Thread(void *args) @@ -266,7 +187,7 @@ static void *JZsdk_Kt_Irc_DataRecv_Thread(void *args)
266 } 187 }
267 188
268 //红外相机数据的初始化 189 //红外相机数据的初始化
269 -static T_JZsdkReturnCode JZsdk_Kt_Irc_Data_Init() 190 +T_JZsdkReturnCode JZsdk_Kt_Irc_Data_Init()
270 { 191 {
271 T_JZsdkReturnCode ret; 192 T_JZsdkReturnCode ret;
272 193
@@ -292,6 +213,57 @@ static T_JZsdkReturnCode JZsdk_Kt_Irc_Data_Init() @@ -292,6 +213,57 @@ static T_JZsdkReturnCode JZsdk_Kt_Irc_Data_Init()
292 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 213 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
293 } 214 }
294 215
  216 +
  217 +//红外数据的处理
  218 +static void *JZsdk_Kt_Irc_DataDeal_Thread(void *args)
  219 +{
  220 + int DealFrameNum = 0;
  221 + unsigned char BaseBuffer[IRC_WIDTH*2*IRC_HEIGHT];
  222 +
  223 + while (1)
  224 + {
  225 + unsigned char *gary_data = NULL;
  226 + unsigned int gary_data_len;
  227 + //1、从原始流缓冲区中取出raw数据
  228 + VideoMgmt_read_data(&VideoMgmt_FirstRaw_index, &gary_data, &gary_data_len,JZ_FLAGCODE_OFF ,JZ_FLAGCODE_OFF);
  229 +
  230 + //2、红外数据纠正处理
  231 + Kt_Irc_DataCorrect(gary_data);
  232 +
  233 + //3、将灰度图数据转换为原始码流数据
  234 + unsigned char *raw_data = NULL;
  235 + int raw_data_len = 0;
  236 + IRC_FrameDeal(gary_data, gary_data_len, &raw_data, &raw_data_len);
  237 +
  238 + //4、将原始码流数据转换成h264流,为避免多次复制,这里的h264会直接放入视频流管理的缓冲区
  239 + JZsdk_RTKMMP_RawData_to_h264(raw_data, raw_data_len);
  240 +
  241 + free(raw_data);
  242 + raw_data = NULL;
  243 + free(gary_data);
  244 + gary_data = NULL;
  245 +
  246 + //JZSDK_LOG_DEBUG("得到了一帧红外h264");
  247 + }
  248 +}
  249 +
  250 +//红外相机数据的处理线程
  251 +static T_JZsdkReturnCode JZsdk_Kt_Irc_DataDeal_Init()
  252 +{
  253 + pthread_t ReadDataTask;
  254 + pthread_attr_t task_attribute; //线程属性
  255 + pthread_attr_init(&task_attribute); //初始化线程属性
  256 + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性
  257 + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Kt_Irc_DataDeal_Thread,NULL); //线程
  258 + if(opus_Protection != 0)
  259 + {
  260 + JZSDK_LOG_ERROR("创建红外相机数据的处理线程失败!");
  261 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  262 + }
  263 +
  264 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  265 +}
  266 +
295 //光学相机数据的处理线程 267 //光学相机数据的处理线程
296 static void *JZsdk_Kt_Cam_DataDeal_Thread(void *args) 268 static void *JZsdk_Kt_Cam_DataDeal_Thread(void *args)
297 { 269 {
@@ -404,7 +376,7 @@ T_JZsdkReturnCode JZsdk_Kt_Irc_Camera_Init() @@ -404,7 +376,7 @@ T_JZsdkReturnCode JZsdk_Kt_Irc_Camera_Init()
404 } 376 }
405 377
406 //2、初始化红外的数据处理 378 //2、初始化红外的数据处理
407 - ret = Kt_Irc_deal_Init(&Kt_Irc_deal_cfg, IRC_HEIGHT, IRC_WIDTH); 379 + ret = IRC_ParamInit(&g_IRC_Param, IRC_HEIGHT, IRC_WIDTH, 25);
408 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 380 if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
409 { 381 {
410 JZSDK_LOG_ERROR("初始化红外的数据处理失败"); 382 JZSDK_LOG_ERROR("初始化红外的数据处理失败");
@@ -453,136 +425,3 @@ T_JZsdkReturnCode JZsdk_Kt_Irc_ShutterSwitch(int value) @@ -453,136 +425,3 @@ T_JZsdkReturnCode JZsdk_Kt_Irc_ShutterSwitch(int value)
453 return ret; 425 return ret;
454 } 426 }
455 427
456 -/***********************************  
457 - *  
458 - * 昆腾的红外相机的像素输出模式修改  
459 - *  
460 - * ***************************************/  
461 -T_JZsdkReturnCode Kt_Irc_Set_OutputPixelColorMode(int value)  
462 -{  
463 - T_JZsdkReturnCode ret;  
464 -  
465 - if (value < 0 || value > 2)  
466 - {  
467 - JZSDK_LOG_ERROR("像素输出模式出错1");  
468 - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;  
469 - }  
470 -  
471 - if (Kt_Irc_deal_cfg == NULL)  
472 - {  
473 - JZSDK_LOG_ERROR("像素输出模式出错2");  
474 - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;  
475 - }  
476 -  
477 - //检查当前模式是否处于单点纠正模式  
478 - if (Kt_Irc_deal_cfg->TPC_flag != JZ_FLAGCODE_ON)  
479 - {  
480 - //设置单点纠正模式  
481 - UIcontrol_CameraCorrectionMode(NO_SPECIFIED, CAMERA_CORRCTION_SPC);  
482 - }  
483 -  
484 - Kt_Irc_deal_cfg->OutputPixelColorMode = value;  
485 -  
486 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
487 -}  
488 -  
489 -/***********************************  
490 - *  
491 - * 昆腾的红外相机的纠正模式修改  
492 - *  
493 - * ***************************************/  
494 -T_JZsdkReturnCode Kt_Irc_Set_CorrectionMode(int mode)  
495 -{  
496 - if (Kt_Irc_deal_cfg == NULL)  
497 - {  
498 - JZSDK_LOG_ERROR("纠正模式修改出错");  
499 - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;  
500 - }  
501 -  
502 - //关闭纠正  
503 - if (mode == JZ_FLAGCODE_OFF)  
504 - {  
505 - Kt_Irc_deal_cfg->SPC_flag = JZ_FLAGCODE_OFF;  
506 - Kt_Irc_deal_cfg->TPC_flag = JZ_FLAGCODE_OFF;  
507 - }  
508 -  
509 - else if (mode == CAMERA_CORRCTION_SPC)  
510 - {  
511 - Kt_Irc_deal_cfg->TPC_flag = JZ_FLAGCODE_OFF;  
512 - Kt_Irc_deal_cfg->SPC_flag = JZ_FLAGCODE_ON;  
513 - }  
514 -  
515 - else if (mode == CAMERA_CORRCTION_TPC)  
516 - {  
517 - Kt_Irc_deal_cfg->SPC_flag = JZ_FLAGCODE_OFF;  
518 - Kt_Irc_deal_cfg->TPC_flag = JZ_FLAGCODE_ON;  
519 - }  
520 - else  
521 - {  
522 - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;  
523 - }  
524 -  
525 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
526 -}  
527 -  
528 -/***********************************  
529 - *  
530 - * 昆腾的红外相机的气体增强模式颜色  
531 - *  
532 - * ***************************************/  
533 -T_JZsdkReturnCode Kt_Irc_Set_GasEnhancementColor(int mode)  
534 -{  
535 - if (Kt_Irc_deal_cfg == NULL)  
536 - {  
537 - JZSDK_LOG_ERROR("气体增强模式颜色出错");  
538 - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;  
539 - }  
540 -  
541 - //关闭纠正  
542 - if (mode == CAMERA_GAS_ENHANCEMENT_RED)  
543 - {  
544 - Kt_Irc_deal_cfg->DGCE_ColorType = CAMERA_GAS_ENHANCEMENT_RED;  
545 - }  
546 -  
547 - else if (mode == CAMERA_GAS_ENHANCEMENT_GREEN)  
548 - {  
549 - Kt_Irc_deal_cfg->DGCE_ColorType = CAMERA_GAS_ENHANCEMENT_GREEN;  
550 - }  
551 -  
552 - else if (mode == CAMERA_GAS_ENHANCEMENT_BLUE)  
553 - {  
554 - Kt_Irc_deal_cfg->DGCE_ColorType = CAMERA_GAS_ENHANCEMENT_BLUE;  
555 - }  
556 - else  
557 - {  
558 - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;  
559 - }  
560 -  
561 - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
562 -}  
563 -  
564 -/**********************  
565 - *  
566 - * 设置高低温标定  
567 - * 0为高 1为低  
568 - *  
569 - * *****************************/  
570 -T_JZsdkReturnCode LowAndHigh_Mark(int mode)  
571 -{  
572 - if (Kt_Irc_deal_cfg == NULL)  
573 - {  
574 - JZSDK_LOG_ERROR("高低温标定出错");  
575 - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;  
576 - }  
577 -  
578 - if (mode == 0)  
579 - {  
580 - JZSDK_LOG_INFO("高温标定");  
581 - Kt_Irc_deal_cfg->HighT_flag = JZ_FLAGCODE_ON;  
582 - }  
583 - else if (mode == 1)  
584 - {  
585 - JZSDK_LOG_INFO("低温标定");  
586 - Kt_Irc_deal_cfg->LowT_flag = JZ_FLAGCODE_ON;  
587 - }  
588 -}  
@@ -26,9 +26,6 @@ extern "C" { @@ -26,9 +26,6 @@ extern "C" {
26 /* Exported functions --------------------------------------------------------*/ 26 /* Exported functions --------------------------------------------------------*/
27 T_JZsdkReturnCode JZsdk_Kt_Irc_Camera_Init(); 27 T_JZsdkReturnCode JZsdk_Kt_Irc_Camera_Init();
28 T_JZsdkReturnCode JZsdk_Kt_Irc_ShutterSwitch(int value); 28 T_JZsdkReturnCode JZsdk_Kt_Irc_ShutterSwitch(int value);
29 -T_JZsdkReturnCode Kt_Irc_Set_OutputPixelColorMode(int value);  
30 -T_JZsdkReturnCode Kt_Irc_Set_CorrectionMode(int mode);  
31 -T_JZsdkReturnCode Kt_Irc_Set_GasEnhancementColor(int mode);  
32 29
33 30
34 #ifdef __cplusplus 31 #ifdef __cplusplus