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