xref: /OK3568_Linux_fs/external/rknpu2/examples/3rdparty/zlmediakit/include/mk_frame.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
3  *
4  * This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
5  *
6  * Use of this source code is governed by MIT license that can be found in the
7  * LICENSE file in the root of the source tree. All contributing project authors
8  * may be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef ZLMEDIAKIT_MK_FRAME_H
12 #define ZLMEDIAKIT_MK_FRAME_H
13 
14 #include "mk_common.h"
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 //是否为关键帧
21 #define MK_FRAME_FLAG_IS_KEY (1 << 0)
22 //是否为配置帧(sps/pps/vps等)
23 #define MK_FRAME_FLAG_IS_CONFIG (1 << 1)
24 //是否可丢弃的帧(sei/aud)
25 #define MK_FRAME_FLAG_DROP_ABLE  (1 << 2)
26 //是否不可单独解码的帧(多slice的非vcl帧)
27 #define MK_FRAME_FLAG_NOT_DECODE_ABLE (1 << 3)
28 
29 //codec id常量定义
30 API_EXPORT extern const int MKCodecH264;
31 API_EXPORT extern const int MKCodecH265;
32 API_EXPORT extern const int MKCodecAAC;
33 API_EXPORT extern const int MKCodecG711A;
34 API_EXPORT extern const int MKCodecG711U;
35 API_EXPORT extern const int MKCodecOpus;
36 API_EXPORT extern const int MKCodecL16;
37 API_EXPORT extern const int MKCodecVP8;
38 API_EXPORT extern const int MKCodecVP9;
39 API_EXPORT extern const int MKCodecAV1;
40 API_EXPORT extern const int MKCodecJPEG;
41 
42 typedef void *mk_frame;
43 
44 // 用户自定义free回调函数
45 typedef void(API_CALL *on_mk_frame_data_release)(void *user_data, char *ptr);
46 
47 /**
48  * 创建frame对象,并返回其引用
49  * @param codec_id 编解码类型,请参考MKCodecXXX定义
50  * @param dts 解码时间戳,单位毫秒
51  * @param pts 显示时间戳,单位毫秒
52  * @param data 单帧数据
53  * @param size 单帧数据长度
54  * @param cb data指针free释放回调, 如果为空,内部会拷贝数据
55  * @param user_data data指针free释放回调用户指针
56  * @return frame对象引用
57  */
58 API_EXPORT mk_frame API_CALL mk_frame_create(int codec_id, uint64_t dts, uint64_t pts, const char *data, size_t size,
59                                             on_mk_frame_data_release cb, void *user_data);
60 
61 /**
62  * 减引用frame对象
63  * @param frame 帧对象引用
64  */
65 API_EXPORT void API_CALL mk_frame_unref(mk_frame frame);
66 
67 /**
68  * 引用frame对象
69  * @param frame 被引用的frame对象
70  * @return 新的对象引用
71  */
72 API_EXPORT mk_frame API_CALL mk_frame_ref(mk_frame frame);
73 
74 /**
75  * 获取frame 编码codec类型,请参考MKCodecXXX定义
76  */
77 API_EXPORT int API_CALL mk_frame_codec_id(mk_frame frame);
78 
79 /**
80  * 获取帧编码codec名称
81  */
82 API_EXPORT const char* API_CALL mk_frame_codec_name(mk_frame frame);
83 
84 /**
85  * 帧是否为视频
86  */
87 API_EXPORT int API_CALL mk_frame_is_video(mk_frame frame);
88 
89 /**
90  * 获取帧数据指针
91  */
92 API_EXPORT const char* API_CALL mk_frame_get_data(mk_frame frame);
93 
94 /**
95  * 获取帧数据指针长度
96  */
97 API_EXPORT size_t API_CALL mk_frame_get_data_size(mk_frame frame);
98 
99 /**
100  * 返回帧数据前缀长度,譬如H264/H265前缀一般是0x00 00 00 01,那么本函数返回4
101  */
102 API_EXPORT size_t API_CALL mk_frame_get_data_prefix_size(mk_frame frame);
103 
104 /**
105  * 获取解码时间戳,单位毫秒
106  */
107 API_EXPORT uint64_t API_CALL mk_frame_get_dts(mk_frame frame);
108 
109 /**
110  * 获取显示时间戳,单位毫秒
111  */
112 API_EXPORT uint64_t API_CALL mk_frame_get_pts(mk_frame frame);
113 
114 /**
115  * 获取帧flag,请参考 MK_FRAME_FLAG
116  */
117 API_EXPORT uint32_t API_CALL mk_frame_get_flags(mk_frame frame);
118 
119 #ifdef __cplusplus
120 }
121 #endif
122 
123 #endif //ZLMEDIAKIT_MK_FRAME_H
124