xref: /OK3568_Linux_fs/external/rknpu2/examples/3rdparty/zlmediakit/include/mk_track.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_TRACK_H
12 #define ZLMEDIAKIT_MK_TRACK_H
13 
14 #include "mk_common.h"
15 #include "mk_frame.h"
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 //音视频轨道
22 typedef void* mk_track;
23 //输出frame回调
24 typedef void(API_CALL *on_mk_frame_out)(void *user_data, mk_frame frame);
25 
26 //track创建参数
27 typedef union {
28     struct {
29         int width;
30         int height;
31         int fps;
32     } video;
33 
34     struct {
35         int channels;
36         int sample_rate;
37     } audio;
38 } codec_args;
39 
40 /**
41  * 创建track对象引用
42  * @param codec_id 请参考MKCodecXXX 常量定义
43  * @param args 视频或音频参数
44  * @return track对象引用
45  */
46 API_EXPORT mk_track API_CALL mk_track_create(int codec_id, codec_args *args);
47 
48 /**
49  * 减引用track对象
50  * @param track track对象
51  */
52 API_EXPORT void API_CALL mk_track_unref(mk_track track);
53 
54 /**
55  * 引用track对象
56  * @param track track对象
57  * @return 新的track引用对象
58  */
59 API_EXPORT mk_track API_CALL mk_track_ref(mk_track track);
60 
61 /**
62  * 获取track 编码codec类型,请参考MKCodecXXX定义
63  */
64 API_EXPORT int API_CALL mk_track_codec_id(mk_track track);
65 
66 /**
67  * 获取编码codec名称
68  */
69 API_EXPORT const char* API_CALL mk_track_codec_name(mk_track track);
70 
71 /**
72  * 获取比特率信息
73  */
74 API_EXPORT int API_CALL mk_track_bit_rate(mk_track track);
75 
76 /**
77  * 监听frame输出事件
78  * @param track track对象
79  * @param cb frame输出回调
80  * @param user_data frame输出回调用户指针参数
81  */
82 API_EXPORT void *API_CALL mk_track_add_delegate(mk_track track, on_mk_frame_out cb, void *user_data);
83 
84 /**
85  * 取消frame输出事件监听
86  * @param track track对象
87  * @param tag mk_track_add_delegate返回值
88  */
89 API_EXPORT void API_CALL mk_track_del_delegate(mk_track track, void *tag);
90 
91 /**
92  * 输入frame到track,通常你不需要调用此api
93  */
94 API_EXPORT void API_CALL mk_track_input_frame(mk_track track, mk_frame frame);
95 
96 /**
97  * track是否为视频
98  */
99 API_EXPORT int API_CALL mk_track_is_video(mk_track track);
100 
101 /**
102  * 获取视频宽度
103  */
104 API_EXPORT int API_CALL mk_track_video_width(mk_track track);
105 
106 /**
107  * 获取视频高度
108  */
109 API_EXPORT int API_CALL mk_track_video_height(mk_track track);
110 
111 /**
112  * 获取视频帧率
113  */
114 API_EXPORT int API_CALL mk_track_video_fps(mk_track track);
115 
116 /**
117  * 获取音频采样率
118  */
119 API_EXPORT int API_CALL mk_track_audio_sample_rate(mk_track track);
120 
121 /**
122  * 获取音频通道数
123  */
124 API_EXPORT int API_CALL mk_track_audio_channel(mk_track track);
125 
126 /**
127  * 获取音频位数,一般为16bit
128  */
129 API_EXPORT int API_CALL mk_track_audio_sample_bit(mk_track track);
130 
131 #ifdef __cplusplus
132 }
133 #endif
134 
135 #endif //ZLMEDIAKIT_MK_TRACK_H