DJI Onboard SDK  4.0
dji_file_mgr_internal_define.hpp
Go to the documentation of this file.
1 
29 #ifndef _DJI_FILE_INTERNAL_DEFINE_HPP_
30 #define _DJI_FILE_INTERNAL_DEFINE_HPP_
31 
32 #include <stdint.h>
33 
34 // 下载文件失败返回值
35 typedef enum
36 {
37  DJI_DOWNLOAD_FILE_ABORT_ERROR = 1, // 下载错误
38  DJI_DOWNLOAD_FILE_ABORT_FORCE = 2, // 强制退出
39  DJI_DOWNLOAD_FILE_ABORT_ERROR_FLASH = 3, // FLASH 介质问题导致读取文件错误
40  DJI_DOWNLOAD_FILE_ABORT_SESSION_REALLOC = 4, // Session 重复
41  DJI_DOWNLOAD_FILE_ABORT_SESSION_BUSY = 5, // Seesion 资源分配错误
42  DJI_DOWNLOAD_FILE_ABORT_ERROR_OTHER = 4294967295, // 未知错误
43 } DJI_DOWNLOAD_FILE_ABORT_ERROR_CODE;
44 
45 typedef enum : uint32_t {
46  TransAbortReasonError = 0,
47  TransAbortReasonForce,
48  TransAbortReasonSizeError,
49  TransAbortReasonReadFailed,
50 } TransAbortReason;
51 
52 typedef enum : uint8_t {
53  DJI_CAMERA_VIDEO_FRAME_RATE_15FPS = 0, // 14.985
54  DJI_CAMERA_VIDEO_FRAME_RATE_24FPS = 1, // 23.976
55  DJI_CAMERA_VIDEO_FRAME_RATE_25FPS = 2, // 25.000
56  DJI_CAMERA_VIDEO_FRAME_RATE_30FPS = 3, // 29.970
57  DJI_CAMERA_VIDEO_FRAME_RATE_48FPS = 4, // 47.952
58  DJI_CAMERA_VIDEO_FRAME_RATE_50FPS = 5, // 50FPS
59  DJI_CAMERA_VIDEO_FRAME_RATE_60FPS = 6, // 59.940
60  DJI_CAMERA_VIDEO_FRAME_RATE_120FPS = 7, // 119.880
61  DJI_CAMERA_VIDEO_FRAME_RATE_240FPS = 8, // 239.760
62  DJI_CAMERA_VIDEO_FRAME_RATE_480FPS = 9, // 479.520
63  DJI_CAMERA_VIDEO_FRAME_RATE_100PS = 10, // 100PS
64  DJI_CAMERA_VIDEO_FRAME_RATE_96FPS = 11, // 95.904
65  DJI_CAMERA_VIDEO_FRAME_RATE_180FPS = 12, // 179.820
66  DJI_CAMERA_VIDEO_FRAME_RATE_TRUE24FPS = 13, // 24
67  DJI_CAMERA_VIDEO_FRAME_RATE_TRUE30FPS = 14, // 30
68  DJI_CAMERA_VIDEO_FRAME_RATE_TRUE48FPS = 15, // 48
69  DJI_CAMERA_VIDEO_FRAME_RATE_TRUE60FPS = 16, // 60
70  DJI_CAMERA_VIDEO_FRAME_RATE_90FPS = 17, // 89.910
71  DJI_CAMERA_VIDEO_FRAME_RATE_192FPS = 18, // 191.808
72  DJI_CAMERA_VIDEO_FRAME_RATE_200FPS = 19, // 200FPS
73  DJI_CAMERA_VIDEO_FRAME_RATE_400FPS = 20, // 400FPS
74  DJI_CAMERA_VIDEO_FRAME_RATE_8FPS = 21, // 7.5fps(for flir camera)
75  DJI_CAMERA_VIDEO_FRAME_RATE_20FPS = 22, // 20
76  DJI_CAMERA_VIDEO_FRAME_RATE_8_DOT_8FPS = 23, // 8.8fps
77 } DJI_CAMERA_VIDEO_FRAME_RATE;
78 
79 // 多媒体素材(照片,视频)旋转方向(顺时针旋转)
80 typedef enum : uint8_t {
81  DJI_ROTATE_0 = 0, // 旋转角度0°
82  DJI_ROTATE_90 = 1, // 旋转角度90°
83  DJI_ROTATE_180 = 2, // 旋转角度180°
84  DJI_ROTATE_270 = 3, // 旋转角度270°
85 } DJI_MULTIMEDIA_ROTATE;
86 
87 typedef enum : uint8_t {
88  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_REQ = 0, // 请求
89  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_DATA = 1, // 数据
90  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_ACK = 2, // 应答
91  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_PUSH = 3, // 催促
92  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_ABORT = 4, // 退出
93  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_DEL = 5, // 删除
94  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_PAUSE = 6, // 暂停
95  DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE_RESUME = 7, // 继续
96 } DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE;
97 
98 typedef enum : uint8_t {
99  DJI_GENERAL_DOWNLOAD_FILE_TASK_TYPE_LIST = 0, // 文件列表
100  DJI_GENERAL_DOWNLOAD_FILE_TASK_TYPE_FILE = 1, // 文件
101  DJI_GENERAL_DOWNLOAD_FILE_TASK_TYPE_STREAM = 2, // 流
102  DJI_GENERAL_DOWNLOAD_FILE_TASK_TYPE_MULTI_STREAM =
103  3, // 多类型流,可以是H264、H265、MJPEG等。该类型相比于GENERAL_DOWNLOAD_FILE_TASK_TYPE_STREAM,响应数据段增加了头部信息
104 } DJI_GENERAL_DOWNLOAD_FILE_TASK_TYPE;
105 
106 typedef enum : uint8_t {
107  DJI_CAMERA_VIDEO_RESOLUTION_640X480P = 0, // 640X480P
108  DJI_CAMERA_VIDEO_RESOLUTION_640X480I = 1, // 640X480I
109  DJI_CAMERA_VIDEO_RESOLUTION_1280X640P = 2, // 1280X640P
110  DJI_CAMERA_VIDEO_RESOLUTION_1280X640I = 3, // 1280X640I
111  DJI_CAMERA_VIDEO_RESOLUTION_1280X720P = 4, // 1280X720P
112  DJI_CAMERA_VIDEO_RESOLUTION_1280X720I = 5, // 1280X720I
113  DJI_CAMERA_VIDEO_RESOLUTION_1280X960P = 6, // 1280X960P
114  DJI_CAMERA_VIDEO_RESOLUTION_1280X960I = 7, // 1280X960I
115  DJI_CAMERA_VIDEO_RESOLUTION_1920X960P = 8, // 1920X960P
116  DJI_CAMERA_VIDEO_RESOLUTION_1920X960I = 9, // 1920X960I
117  DJI_CAMERA_VIDEO_RESOLUTION_1920X1080P = 10, // 1920X1080P
118  DJI_CAMERA_VIDEO_RESOLUTION_1920X1080I = 11, // 1920X1080I
119  DJI_CAMERA_VIDEO_RESOLUTION_1920X1440P = 12, // 1920X1440P
120  DJI_CAMERA_VIDEO_RESOLUTION_1920X1440I = 13, // 1920X1440I
121  DJI_CAMERA_VIDEO_RESOLUTION_3840X1920P = 14, // 3840X1920P
122  DJI_CAMERA_VIDEO_RESOLUTION_3840X1920I = 15, // 3840X1920I
123  DJI_CAMERA_VIDEO_RESOLUTION_3840X2160P = 16, // 3840X2160P
124  DJI_CAMERA_VIDEO_RESOLUTION_3840X2160I = 17, // 3840X2160I
125  DJI_CAMERA_VIDEO_RESOLUTION_3840X2880P = 18, // 3840X2880P
126  DJI_CAMERA_VIDEO_RESOLUTION_3840X2280I = 19, // 3840X2280I
127  DJI_CAMERA_VIDEO_RESOLUTION_4096X2048P = 20, // 4096X2048P
128  DJI_CAMERA_VIDEO_RESOLUTION_4960X2048I = 21, // 4960X2048I
129  DJI_CAMERA_VIDEO_RESOLUTION_4096X2160P = 22, // 4096X2160P
130  DJI_CAMERA_VIDEO_RESOLUTION_4096X2160I = 23, // 4096X2160I
131  DJI_CAMERA_VIDEO_RESOLUTION_2704X1520P_16COLON9 = 24, // 2704X1520P,16:9
132  DJI_CAMERA_VIDEO_RESOLUTION_640X512P_FLIR = 26, // 640X512P_FLIR
133  DJI_CAMERA_VIDEO_RESOLUTION_4608X2160 = 27, // 4608X2160
134  DJI_CAMERA_VIDEO_RESOLUTION_4608X2592 = 28, // 4608X2592
135  DJI_CAMERA_VIDEO_RESOLUTION_2720X1530P = 31, // 2720X1530P
136  DJI_CAMERA_VIDEO_RESOLUTION_5280X2160P = 32, // 5280X2160P
137  DJI_CAMERA_VIDEO_RESOLUTION_5280X2970P = 33, // 5280X2970P
138  DJI_CAMERA_VIDEO_RESOLUTION_3840X1572P = 34, // 3840X1572P
139  DJI_CAMERA_VIDEO_RESOLUTION_5760X3240P = 35, // 5760X3240P
140  DJI_CAMERA_VIDEO_RESOLUTION_6016X3200P = 36, // 6016X3200P
141  DJI_CAMERA_VIDEO_RESOLUTION_2048X1080P = 37, // 2048X1080P
142  DJI_CAMERA_VIDEO_RESOLUTION_336X256P_FLIR = 38, // 336X256P_FLIR
143  DJI_CAMERA_VIDEO_RESOLUTION_5120X2880P = 39, // 5120x2880P
144  DJI_CAMERA_VIDEO_RESOLUTION_4096X2160P_RAW14 = 40, // 4096X2160P_RAW14
145  DJI_CAMERA_VIDEO_RESOLUTION_3840X2160P_RAW14 = 41, // 3840X2160P_RAW14
146  DJI_CAMERA_VIDEO_RESOLUTION_2720X1530P_RAW14 = 42, // 2720X1530P_RAW14
147  DJI_CAMERA_VIDEO_RESOLUTION_1920X1080P_RAW14 = 43, // 1920X1080P_RAW14
148  DJI_CAMERA_VIDEO_RESOLUTION_5440X2880P = 44, // 5440X2880P
149  DJI_CAMERA_VIDEO_RESOLUTION_2688X1512P = 45, // 2688X1512P
150  DJI_CAMERA_VIDEO_RESOLUTION_640X360P = 46, // 640X360P
151  DJI_CAMERA_VIDEO_RESOLUTION_4000X3000P = 48, // 4000X3000P
152  DJI_CAMERA_VIDEO_RESOLUTION_4000X3000I = 49, // 4000X3000I
153  DJI_CAMERA_VIDEO_RESOLUTION_2880X1620P = 50, // 2880X1620P
154  DJI_CAMERA_VIDEO_RESOLUTION_2880X1620I = 51, // 2880X1620I
155  DJI_CAMERA_VIDEO_RESOLUTION_2720X2040P = 52, // 2720X2040P
156  DJI_CAMERA_VIDEO_RESOLUTION_2720X2040I = 53, // 2720X2040I
157  DJI_CAMERA_VIDEO_RESOLUTION_720X576 = 54, // 720X576
158  DJI_CAMERA_VIDEO_RESOLUTION_MAX = 253, // MAX
159  DJI_CAMERA_VIDEO_RESOLUTION_UNSET = 254, // UNSET
160  DJI_CAMERA_VIDEO_RESOLUTION_KNOWN = 255, // KNOWN
161 } DJI_CAMERA_VIDEO_RESOLUTION;
162 
163 typedef enum : uint8_t {
164  DJI_CAMERA_FILE_TYPE_JPEG = 0,
165  DJI_CAMERA_FILE_TYPE_DNG = 1,
166  DJI_CAMERA_FILE_TYPE_MOV = 2,
167  DJI_CAMERA_FILE_TYPE_MP4 = 3,
168  DJI_CAMERA_FILE_TYPE_PANORAMA = 4,
169  DJI_CAMERA_FILE_TYPE_TIFF = 5,
170  DJI_CAMERA_FILE_TYPE_SEQ = 8, // (for XT2 Camera use)
171  DJI_CAMERA_FILE_TYPE_TIFFSEQ = 9, // (for XT2 Camera use)
172  DJI_CAMERA_FILE_TYPE_AUDIO = 10, // for WM245 accessory
173  DJI_CAMERA_FILE_TYPE_SURVEY = 12,
174  DJI_CAMERA_FILE_TYPE_USER_CTRL_INFO = 13, // 用户操作信息的原始文件类型
175  DJI_CAMERA_FILE_TYPE_USER_CTRL_INFO_LZ4 = 14, // 用户操作信息使用LZ4压缩后类型
176  DJI_CAMERA_FILE_TYPE_JSON = 15, // JSON文件
177  DJI_CAMERA_FILE_TYPE_PHOTO_FOLDER = 16, // 照片文件夹
178  DJI_CAMERA_FILE_TYPE_VIDEO_FOLDER = 17, // 视频文件夹
179 } DJI_CAMERA_FILE_TYPE;
180 
181 // 视频传输数据流格式,app告诉camera想要什么格式的视频流。
182 typedef enum : uint8_t {
183  DJI_TRANS_VIDEO_STREAM_ORG = 0, // 原片码流格式
184  DJI_TRANS_VIDEO_STREAM_H264 = 1, // h264
185  DJI_TRANS_VIDEO_STREAM_H265 = 2, // h265
186  DJI_TRANS_VIDEO_STREAM_MJPEG = 3, // motion jpeg
187 } DJI_TRANS_VIDEO_STREAM_FORMAT;
188 
189 // 请求下载的文件子类型
190 typedef enum : uint8_t {
191  DJI_DOWNLOAD_FILE_ORG = 0, // 原文件
192  DJI_DOWNLOAD_FILE_THM = 1, // 缩略图
193  DJI_DOWNLOAD_FILE_SCR = 2, // 截屏图
194  DJI_DOWNLOAD_FILE_CLIP = 3, // 视频剪辑
195  DJI_DOWNLOAD_FILE_STREAM = 4, // 流传输
196  DJI_DOWNLOAD_FILE_PANO = 5, // 全景照片
197  DJI_DOWNLOAD_FILE_PANO_SCR = 6, // 全景照片截屏图
198  DJI_DOWNLOAD_FILE_PANO_THM = 7, // 全景照片缩略图
199  DJI_DOWNLOAD_FILE_TIMELAPES = 8, // Timelapse照片
200  DJI_DOWNLOAD_FILE_2ND_STREAM = 9, // 第二路码流文件
201  DJI_DOWNLOAD_FILE_RESERVED = 10, // 预留
202  DJI_DOWNLOAD_FILE_PHOTO_METADATA = 11, // 照片元数据
203  DJI_DOWNLOAD_FILE_USER_CTRL_INFO = 12, // 用户操作信息数据
204  DJI_DOWNLOAD_FILE_JSON = 13, // JSON文件
205 } DJI_DOWNLOAD_FILE_SUBTYPE;
206 
207 // 文件列表扩展数据信息类型
208 typedef enum : uint8_t {
209  DJI_EXT_TYPE_UUID = 1, // 视频UUID
210  DJI_EXT_TYPE_P_TID = 2, // 照片类型和ID
211  DJI_EXT_TYPE_STAR = 3, // 星标
212  DJI_EXT_TYPE_V_TID = 4, // 视频类型信息
213  DJI_EXT_TYPE_FUSION = 5, // 合成照片Group信息
214  DJI_EXT_TYPE_V_FILE_SYNC = 6, // 文件信息同步
215  DJI_EXT_TYPE_ORIGIN = 7, // 原片信息
216  DJI_EXT_TYPE_EXIF = 8, // EXIF信息
217  DJI_EXT_TYPE_AUDIO = 9, // 音频信息
218  DJI_EXT_TYPE_VIDEO_MISCINFO = 10, // 视频附加类型信息
219  DJI_EXT_TYPE_CUSTOMIZE_DCF_INFO = 11, // 自定义DCF照片信息
220  DJI_EXT_TYPE_FILE_NAME = 13, // 文件名信息
221  DJI_EXT_TYPE_FILE_MD5 = 14, // 文件MD5值
222 } DJI_FILE_LIST_EXT_TYPE;
223 
224 typedef enum : uint8_t {
225  DJI_all = 0, // 喜欢不喜欢全都要
226  DJI_like = 1, // 喜欢
227  DJI_dislike = 2, // 不喜欢
228  DJI_unknown = 255, // 未知
229 } DJI_FILE_LIST_FILTER_LIKE;
230 
231 typedef enum : uint8_t {
232  DJI_MEDIA = 0, // 媒体文件
233  DJI_THUMBNAIL = 1, // 缩略图
234  DJI_SCREENNAIL = 2, // 截屏图
235  DJI_VIDEO_CLIP = 3, // 视频剪辑
236  DJI_LOG = 12, // 固件日志文件
237  DJI_MEDIA_GROUP = 13, // 相机自动成组的媒体文件
238  // 逻辑:
239  // 成组逻辑包括 AEB、Burst、Interval、视频大于 4G 自动分段、Pano
240  // 1. 相机根据 Index 和 ReqCount 推送相应数量的素材信息,遇到 Group 照片、分段视频等,则只推送组内第一个文件信息
241  // 2. AEB、Burst 的张数显示在 0x27 的 dji_ext_fusion 的字段 amount,最大 9999 张
242  // 3. 分段视频相机自动计算所有分段合并后的总时长填充到视频 attribute_video_duration 字段
243  DJI_PSDK_WIDGET =
244  14, // PSDK 自定义控件配置,包括配置文件和图标文件,存储在第三方负载中。DJI Pilot 拉取配置文件和图标文件后可以显示控件,用于显示第三方负载状态数据并控制第三方负载。
245 } DJI_DOWNLOAD_FILE_LIST_TYPE;
246 
247 typedef enum : uint8_t {
248  MAJOR_CAMERA = 0,
249  MAJOR_RADAR = 1,
250  MAJOR_PSDK = 2,
251 } MAJOR_TYPE;
252 
253 typedef enum : uint8_t {
254  MINOR_CAMERA = 0,
255  MINOR_PSDK = 2,
256 } MINOR_TYPE;
257 
258 #pragma pack(1)
259 
261 // 文件下载请求,由 App 向相机发出的文件下载请求。
262 typedef struct {
263  // 报文头长度
264  uint8_t header_length:6;
265  // 传输协议版本号
266  uint8_t version :2;
267  // 传输协议类型
268  uint8_t func_id:5; // enum-type: DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE
269  // 子业务ID
270  uint8_t task_id:3; // enum-type: DJI_GENERAL_DOWNLOAD_FILE_TASK_TYPE
271  // 报文总长度
272  uint16_t msg_length:12;
273  // 标志,最低位为1代表是最后一个包
274  uint16_t msg_flag :4;
275  // 回话ID
276  uint16_t session_id;
277  // 报文在业务中的编号
278  uint32_t seq;
279  // 消息数据
280  // dji_file_list_download_req : 文件列表下载请求
281  // dji_file_download_req : 文件下载请求
282  // dji_stream_download_req : 流下载请求
283  // dji_download_ack : 下载应答
284  uint8_t data[1];
286 
287 // 文件列表过滤器 - 视频
288 // 各素材类型比特位如果为 **1** 表示需要过滤出该类型素材,为 **0** 则不过滤出来
289 typedef struct {
290  // 普通录像
291  uint32_t video_nomal :1;
292  // 慢动作录像
293  uint32_t video_slowmotion:1;
294  // 延时视频(拍照合成方式)
295  uint32_t video_timelapse :1;
296  // Hyperlapse
297  uint32_t video_hyperlapse:1;
298  // HDR录像
299  uint32_t video_hdr :1;
300  // 循环录像
301  uint32_t video_loop :1;
302  // 保留位
303  uint32_t reserved :26;
304 } dji_file_list_filter_video;
305 
306 // 文件列表过滤器 - 照片
307 // 各素材类型比特位如果为 **1** 表示需要过滤出该类型素材,为 **0** 则不过滤出来
308 typedef struct {
309  // 普通照片
310  uint32_t photo_normal :1;
311  // HDR 照片
312  uint32_t photo_hdr :1;
313  // AEB 照片
314  uint32_t photo_aeb :1;
315  // 定时拍
316  uint32_t photo_interval:1;
317  // Burst 照片
318  uint32_t photo_burst :1;
319  // 全景照片
320  uint32_t photo_pano :1;
321  // 保留位
322  uint32_t reserved :26;
323 } dji_file_list_filter_photo;
324 
325 // **文件列表下载过滤器**
326 // <br/>
327 // 过滤器组合规则:
328 // 1. **like** 过滤器作用于后续所有过滤器的结果,进行**逻辑与**运算;
329 // 2. **video**、**photo** 等 过滤器内部通过**逻辑或**运算取值,各过滤器结果取并集
330 // ```
331 // like && ((video) U (photo))
332 // 如:
333 // like = 1
334 // video = 1
335 // photo = 3
336 // 即表示过滤:所有(普通录像、普通照片、HDR 照片)中 被 like 的文件。
337 // ```
338 typedef struct {
339  // 媒体文件是否被喜欢加星
340  uint8_t like; // enum-type: DJI_FILE_LIST_FILTER_LIKE
341  // 视频素材过滤器,按位或取值
342  dji_file_list_filter_video video;
343  // 照片素材过滤器,按位或取值
344  dji_file_list_filter_photo photo;
345 } dji_download_file_list_filter;
346 
347 // 文件index 定义
348 typedef struct {
349  // 文件index 信息
350  uint32_t index:30;
351  // 逻辑分区信息, 表示逻辑分区0 - 逻辑分区3
352  uint32_t drive:2;
353 } dji_file_index_t;
354 
355 // 文件列表下载请求
356 typedef struct {
357  // 起始文件Index(UINT32,LSB在前,MSB在后)。
358  // 注:=1表示从第一个文件开始
359  dji_file_index_t index;
360  // 文件个数(UINT16,LSB在前,MSB在后)
361  // 注:=0xFFFF表示传之后所有的列表信息
362  uint16_t count;
363  // 请求下载信息的文件子类型
364  uint8_t type; // enum-type: DJI_DOWNLOAD_FILE_LIST_TYPE
365  // **type == DJI_MEDIA_GROUP 时生效**
366  // <br/><br/>
367  // filter_enable 为 `0` 时,表示不启用过滤器,从所有素材中进行文件列表拉取。<br/>
368  // filter_enable 为 `1` 时,表示启用过滤器,根据 filters 过滤规则进行文件过滤。
369  uint8_t filter_enable;
370  // **文件列表筛选过滤器**
371  // <br/>
372  // filter_enable 为 `1` 时生效
373  // download_file_list_filter
374  dji_download_file_list_filter filters;
375 } dji_file_list_download_req;
376 
377 // 消息数据 – 文件下载请求(由App向相机发出的文件下载请求)
378 typedef struct {
379  // 起始文件Index(UINT32,LSB在前,MSB在后)。
380  dji_file_index_t index;
381  // 请求下载的文件个数(UINT16,LSB在前,MSB在后)。
382  // 注:
383  // 当为0xffff时为传之后所有的文件
384  // 当前只支持1
385  uint16_t count;
386  // 请求下载的文件子类型
387  uint8_t type; // enum-type: DJI_DOWNLOAD_FILE_SUBTYPE
388  // 请求下载的文件子索引
389  // 当此字段为0xFF时,使用扩展文件子索引字段
390  uint8_t sub_index;
391  // 请求下载的文件数据偏移(UINT32,LSB在前,MSB在后)。
392  uint32_t offset;
393  // 请求下载的文件数据大小(UINT32,LSB在前,MSB在后)
394  uint32_t size;
395  // 扩展文件子索引
396  uint32_t ext_sub_index;
397  // 扩展分段文件子索引
398  uint16_t seg_sub_index;
399 } dji_file_download_req;
400 
401 // 流数据传输
402 typedef struct {
403  // 流文件Index
404  dji_file_index_t index;
405  // 请求传输的流起始时间,单位ms
406  uint32_t offset;
407  union {
408  // 请求传输的流时长,单位ms, -1表示传输至本文件流结束,-2表示跨文件一直传输直到后续的所有文件流结束
409  int32_t duration;
410  // 请求传输的文件个数, -1表示传输之后的所有文件,目前只有video_type=DJI_TRANS_VIDEO_STREAM_MJPEG时使用
411  int32_t count;
412  };
413  // 请求传输的流子类型:视频码流格式
414  uint8_t video_type:4; // enum-type: DJI_TRANS_VIDEO_STREAM_FORMAT
415  // 请求传输的流子类型:音频开关及码流格式。0表示不需要音频,1表示原片码流格式的音频
416  uint8_t audio_type:4;
417  // 请求传输的流子索引(用于扩展)
418  uint8_t subindex;
419  // 播放速率控制。
420  // [7] – 加速/减速标志
421  // [6:0] – 变速倍数
422  uint8_t speed_ctrl;
423  // 视频分辨率
424  uint8_t resolution; // enum-type: DJI_CAMERA_VIDEO_RESOLUTION
425  // 视频码率
426  uint16_t bitrate;
427 } dji_stream_download_req;
428 
429 // 丢失分片描述
430 typedef struct {
431  // 起始分片序号
432  uint32_t seq;
433  // 分片个数
434  uint32_t cnt;
435 } dji_loss_desc;
436 
437 // 文件下载应答消息
438 typedef struct {
439  // 期望收到的分片序号,表示已收到expect_seq之前的所有分片。
440  uint32_t expect_seq;
441  // 丢包信息个数
442  uint8_t loss_nr;
443  // 丢包信息
444  dji_loss_desc loss_desc[1];
445 } dji_download_ack;
446 
447 typedef struct {
448  // Return code
449  uint8_t ret_code;
450 } dji_general_transfer_msg_rsp;
452 
455 // 文件列表扩展数据——照片类型和ID
456 typedef struct {
457 // 照片类型
458  uint8_t type; // enum-type: DJI_EXT_P_TID_TYPE
459 // 照片ID,同一组照片使用相同的照片ID,普通单拍的情况下设置成0
460  uint16_t id;
461 } dji_ext_p_tid;
462 
463 // 文件列表扩展数据——视频UUID
464 typedef struct {
465 // 视频UUID
466  uint32_t uuid;
467 } dji_ext_video_uuid;
468 
469 // 文件列表扩展数据——星标
470 typedef struct {
471 // 星标数值
472  uint8_t star;
473 } dji_ext_star;
474 
475 // 文件列表扩展数据内容——视频类型信息
476 typedef struct {
477 // 视频类型
478  uint8_t type; // enum-type: DJI_EXT_V_TID_TYPE
479 // 视频子类型
480 // 当视频类型 = 变速视频时:
481 // 0 = 慢速视频
482 // 1 = 快速视频
483 // 其他 = 保留
484 // 当视频类型 = 一键短片时:
485 // 0 = 保留
486 // 1 = 环绕
487 // 2 = 斜飞
488 // 3 = 螺旋
489 // 4 = 火箭
490 // 其他 = 保留
491 // 当视频类型 = hyperlapse视频时:
492 // 0 = hyperlapse with interval
493 // 1 = hyperlapse with speed ratio
494 // 其他 = 保留
495  uint8_t subtype;
496 // 编码格式
497 // 0 = H.264
498 // 1 = H.265
499 // 其他 = 保留
500  uint8_t encode_format;
501 // 变速视频播放倍速(仅对变速视频有效)
502 // 对于慢速视频:
503 // 0 = default
504 // 1 = 1倍速
505 // 2 = 1/2倍速
506 // N = 1/N倍速
507 // 对于快速视频:
508 // 0 = default
509 // 1 = 1倍速
510 // 2 = 2倍速
511 // N = N倍速
512  uint8_t speed;
513 // 保留
514  uint8_t reserved;
515 } dji_ext_v_tid;
516 
517 // 文件列表扩展数据内容—合成照片Group信息,用于相机端使用子文件夹方式存放原照片的情况
518 typedef struct {
519 // 照片子类型
520 // 对于全景照片:
521 // 0 = 保留
522 // 1 = 360 Panorama
523 // 2 = Ball Panorama
524 // 3 = Vertical Panorama
525 // 4 = 180 Panorama(云台横拍状态)
526 // 5 = Wide Panorama(云台横拍状态)
527 // 6 = 180 Panorama(云台竖拍状态)
528 // 7 = Wide Panorama(云台竖拍状态)
529 // 其他 = 保留
530 // 对于OSMO(X3X5系列)对于全景照片:
531 // 0 = 保留
532 // 1 = 360 Panorama
533 // 2 = Ball Panorama
534 // 3 = Self Panorama
535 // 4 = Manual Panorama
536 // 5 =180 Panorama
537 // 6 = Vertical Panorama
538 // 7 = Sectorial Panorama
539 // 其他 = 保留
540  uint8_t subtype;
541 // 原片张数(0~9999)
542  uint16_t amount:14;
543 // 机内合成结果,APP合成忽略此字段
544 // 0 = 保留
545 // 1 = 成功
546 // 2 = 失败
547 // 3 = 中止
548  uint16_t result:2;
549 } dji_ext_fusion;
550 
551 // 文件列表扩展数据——文件同步,用于合成的全景图从APP反向下载到相机的同步指示
552 typedef struct {
553 // 1 - 已同步
554 // 其他 - 保留
555  uint8_t sync;
556 } dji_ext_file_sync;
557 
558 // 文件列表扩展数据——原片信息
559 typedef struct {
560 // 是否有原片
561 // 0 -- 不存在
562 // 1 -- 存在
563  uint8_t exist_flag:2;
564 // 保留
565  uint8_t reserved :6;
566 } dji_ext_origin;
567 
568 // 文件扩展数据——exif信息
569 typedef struct {
570 // exposure_time是否有效
571  uint8_t enable_exposure_time :1;
572 // fnumber是否有效
573  uint8_t enable_fnumber :1;
574 // exposure_program是否有效
575  uint8_t enable_exposure_program :1;
576 // iso是否有效
577  uint8_t enable_iso :1;
578 // exposure_compensation是否有效
579  uint8_t enable_exposure_compensation :1;
580 // metering_mode是否有效
581  uint8_t enable_metering_mode :1;
582 // light_source是否有效
583  uint8_t enable_light_source :1;
584 // focal_length_35mm_format是否有效
585  uint8_t enable_focal_length_35mm_format:1;
586 // exposure_time分子
587  uint32_t exposure_time_num;
588 // exposure_time分母
589  uint32_t exposure_time_den;
590 // fnumber分子
591  uint32_t fnumber_num;
592 // fnumber分母
593  uint32_t fnumber_den;
594 // exposure_program
595  uint16_t exposure_program;
596 // iso
597  uint16_t iso;
598 // exposure_compensation分子
599  int32_t exposure_compensation_num;
600 // exposure_compensation分母
601  int32_t exposure_compensation_den;
602 // metering_mode
603  uint16_t metering_mode;
604 // light_source
605  uint16_t light_source;
606 // focal_length_35mm_format
607  uint16_t focal_length_35mm_format;
608 } dji_ext_exif;
609 
610 // 文件列表扩展数据——视频杂项信息
611 typedef struct {
612 // 分段视频子索引
613  uint16_t seg_idx;
614 // 视频时长(毫秒单位)
615  uint32_t video_time_in_ms;
616  union
617  {
618 // 当视频类型为1 = 延时视频,或视频类型为5(hyperlapse)且视频子类型是0(hyperlapse with interval)时, 表示延时视频帧间隔(单位:100ms)
619  uint32_t video_timelapse_interval_100ms;
620 // 当视频类型为5(hyperlapse),且视频子类型是1(hyperlapse with speed ratio)时,表示hyperlapse视频倍速值
621  uint32_t video_hyperlapse_speed_ratio;
622 // 其他视频类型时, 此字段保留
623  uint32_t reserved;
624  };
625 } dji_ext_misc_video;
626 
627 // 描述照片或者视频文件的来源,设置拍照或录像要保存的流请参考capture_recording_streams
628 typedef struct
629 {
630  // 文件来源
631  uint8_t file_source; // enum-type: DJI_DCF_EXT_FILE_SOURCE
632  // 如果是相机原始照片,这里表明相机来源,不是原始照片时,值为0(DJI_DEFAULT_CAM)
633  uint8_t source_camera; // enum-type: DJI_STREAM_SOURCE_CAMERA
634 } dji_dcf_ext_file_source;
635 // 飞机起飞时间
636 
637 typedef struct
638 {
639  // 保留位
640  uint32_t reserved:5;
641  // 分
642  uint32_t minute :6;
643  // 时
644  uint32_t hour :5;
645  // 日
646  uint32_t day :5;
647  // 月
648  uint32_t month :4;
649  // 年(从1980年开始)
650  uint32_t year :7;
651 } dji_departure_time;
652 
653 // 自定义DCF文件信息
654 typedef struct {
655 // 用户标示信息
656  uint8_t customKey[8];
657 // 自定义dcf文件来源
658  dji_dcf_ext_file_source dcf_ext_file_source;
659 // 起飞时间
660  dji_departure_time departure_time;
661 // 自定义dcf文件所在目录Index
662  uint8_t dcf_directory_index;
663 // 自定义dcf文件文件Index
664  uint32_t dcf_file_index;
665 // 自定义dcf文件所在集合Id
666  uint32_t dcf_file_setId;
667 } dji_ext_customize_dcf_info;
668 
669 // 媒体文件文件名信息
670 typedef struct {
671 // 文件名长度
672  uint8_t file_name_len;
673 // 文件名字符串(不包括空字符)
674  uint8_t file_name[1];
675 } dji_ext_file_name;
676 
677 // 文件MD5值信息
678 typedef struct {
679 // MD5值校验,用于DJI Pilot 校验PSDK 自定义控件配置文件。DJI Pilot 会在本地缓存PSDK 自定义控件配置文件,如果MD5不一致才会重新拉取配置文件。
680  uint8_t file_md5[16];
681 } dji_ext_file_md5;
682 
683 // 扩展数据描述符
684 typedef struct {
685  // 扩展信息数据类型
686  uint8_t id; // enum-type: DJI_FILE_LIST_EXT_TYPE
687  // 扩展信息数据内容
688  // ext_video_uuid : 视频UUID
689  // ext_p_tid : 照片类型和ID
690  // ext_star : 星标
691  // ext_v_tid : 视频类型信息
692  // ext_fusion : 合成照片Group信息
693  // ext_file_sync : 文件同步
694  // ext_origin : 原片信息
695  // ext_exif : EXIF信息
696  // ext_misc_video : 视频杂项信息
697  // ext_customize_dcf_info : 自定义DCF格式文件信息
698  // ext_file_name : 文件名信息
699  // ext_file_md5 : 文件MD5值校验
700  uint8_t data[1];
701 } dji_ext_info_descriptor;
702 
703 // 文件列表扩展信息
704 typedef struct {
705  // 扩展信息项,注意新增扩展信息项时必须从尾部开始添加
706  dji_ext_info_descriptor ext_info_item[1];
707  // 扩展数据结束标记。固定为'\0'
708  uint8_t eof;
709 } dji_file_list_ext_info;
710 
711 // file create time
712 typedef struct {
713  // 双秒(实际值 = 双秒 x 2)
714  uint32_t second:5;
715  // 分
716  uint32_t minute:6;
717  // 时
718  uint32_t hour :5;
719  // 日
720  uint32_t day :5;
721  // 月
722  uint32_t month :4;
723  // 年(从1980年开始)
724  uint32_t year :7;
725 } dji_file_create_time;
726 
727 // 文件列表信息描述符
728 typedef struct {
729  // 文件的创建时间
730  dji_file_create_time create_time;
731  // 文件大小
732  uint32_t size;
733  // 文件索引
734  uint32_t index;
735  union {
736  struct video_attribute_type {
737  // 视频时长,单位(秒)
738  uint32_t attribute_video_duration :16;
739  // 视频帧率
740  uint32_t
741  attribute_video_framerate :6;// enum-type: DJI_CAMERA_VIDEO_FRAME_RATE
742  // 视频旋转方向
743  uint32_t attribute_video_rotation :2;// enum-type: DJI_MULTIMEDIA_ROTATE
744  // 视频分辨率
745  uint32_t
746  attribute_video_resolution:8;// enum-type: DJI_CAMERA_VIDEO_RESOLUTION
747  } video_attribute;
748  struct photo_attribute_type {
749  // 保留位
750  uint32_t attribute_photo_reserved:22;
751  // 照片旋转方向
752  uint32_t attribute_photo_rotation:2; // enum-type: DJI_MULTIMEDIA_ROTATE
753  // 照片宽高比
754  uint32_t attribute_photo_ratio :8; // enum-type: DJI_CAMERA_PHOTO_RATIO
755  } photo_attribute;
756  } attribute;
757  // 文件类型
758  uint8_t type; // enum-type: DJI_CAMERA_FILE_TYPE
759  // 扩展数据长度
760  uint8_t ext_size;
761  // 扩展数据内容,可以包含多项数据,每项数据包括数据类型(1字节)和数据内容(N字节)。
762  // 在最后一个扩展数据末尾添加1字节的’\0’结尾。
763  // 不同类型的文件的扩展数据长度保持一致,长度不足时在末端补’\0’。
764  dji_file_list_ext_info ext_data;
765 } dji_list_info_descriptor;
766 
767 // 文件列表应答
768 typedef struct {
769  // 文件总数
770  uint32_t amount;
771  // 文件列表信息长度,包括文件总数字段
772  uint32_t len;
773  // 文件列表信息描述符
774  dji_list_info_descriptor list_info[1];
775 } dji_file_list_download_resp;
776 
777 // camera发给app的stream数据包的头信息。
778 typedef struct {
779  // stream的格式
780  uint8_t format :6; // enum-type: DJI_TRANS_STREAM_FORMAT
781  // 版本号
782  uint8_t version:2;
783  // 该数据所在的流文件Index
784  dji_file_index_t index;
785  // 时间戳,单位us
786  int64_t timestamp;
787  // 数据的长度,不包含本头信息
788  uint32_t length;
789  // 数据
790  uint8_t data[1];
791 } dji_multi_stream_download_rsp;
792 
793 // 0x00 0x27 文件下载返回结构体定义
794 typedef struct {
795  union {
796  // 文件列表应答数据
797  dji_file_list_download_resp file_list_download_rsp;
798  // 多类型流传输应答数据,单一码流无header信息(H264流)
799  dji_multi_stream_download_rsp multi_stream_download_rsp;
800  // 错误码
801  uint32_t abort_rsp; // enum-type: DJI_DOWNLOAD_FILE_ABORT_ERROR_CODE
802  };
803 } dji_download_file_ack_data;
804 
805 // 文件下载请求的ack,由相机向App发出
806 typedef struct {
807  // 报文头长度
808  uint8_t header_length:6;
809  // 传输协议版本号
810  uint8_t version :2;
811  // 传输协议类型
812  uint8_t func_id:5; // enum-type: DJI_GENERAL_DOWNLOAD_FILE_FUNC_TYPE
813  // 子业务ID
814  uint8_t task_id:3; // enum-type: DJI_GENERAL_DOWNLOAD_FILE_TASK_TYPE
815  // 报文总长度
816  uint16_t msg_length:12;
817  // 标志,最低位为1代表是最后一个包
818  uint16_t msg_flag :4;
819  // 回话ID
820  uint16_t session_id;
821  // 报文在业务中的编号
822  uint32_t seq;
823  // 消息数据
824  // dji_download_file_ack_data : 返回数据定义
825  uint8_t data[1];
826 } dji_general_transfer_msg_ack;
828 
829 typedef struct {
830  uint32_t reserve;
831  uint32_t size;
832  uint32_t index;
833  uint8_t is_next_valid; //not used ,set to 0
834  uint8_t file_data[1];
835 } dji_file_data_download_resp;
836 
837 #pragma pack()
838 
839 #endif //_DJI_FILE_INTERNAL_DEFINE_HPP_
Definition: dji_file_mgr_internal_define.hpp:262
Definition: dji_file_mgr_internal_define.hpp:456