hc
2023-03-13 2ec15ae1cb4be1b4fcb56c6d621123d7ebdaad6c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * Copyright 2019 Rockchip Electronics Co. LTD
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Author: martin.cheng@rock-chips.com
 *   Date: 2019/03/10
 *   Task: build player streamline with node bus.
 */
 
#ifndef SRC_RT_PLAYER_RTPLAYERDEF_H_
#define SRC_RT_PLAYER_RTPLAYERDEF_H_
 
#include "rt_type.h" // NOLINT
 
#define DEBUG_LEVEL_HIGH 1
#define DEBUG_LEVEL_LOW  0
 
enum RTMediaState {
    RT_STATE_ERROR              = 0,
    RT_STATE_IDLE               = 1 << 0,
    RT_STATE_INITIALIZED        = 1 << 1,
    RT_STATE_PREPARING          = 1 << 2,
    RT_STATE_PREPARED           = 1 << 3,
    RT_STATE_STARTED            = 1 << 4,
    RT_STATE_PAUSED             = 1 << 5,
    RT_STATE_STOPPED            = 1 << 6,
    RT_STATE_COMPLETE           = 1 << 7
};
 
enum RTMediaInfo {
    // 0xx
    RT_INFO_UNKNOWN = 1,
    // The player was started because it was used as the next player for another
    // player, which just completed playback
    RT_INFO_STARTED_AS_NEXT = 2,
    // The player just pushed the very first video frame for rendering
    RT_INFO_RENDERING_START = 3,
 
    // 7xx
    // The video is too complex for the decoder: it can't decode frames fast
    // enough. Possibly only the audio plays fine at this stage.
    RT_INFO_VIDEO_TRACK_LAGGING = 700,
    // pause playback internally in order to buffer more data.
    RT_INFO_BUFFERING_START = 701,
    // resume playback after filling enough buffers.
    RT_INFO_BUFFERING_END = 702,
    // Bandwidth in recent past
    RT_INFO_NETWORK_BANDWIDTH = 703,
    // buffering percent of demuxer
    RT_INFO_BUFFERING_PERCENT = 705,
    // loading percent of demuxer
    RT_INFO_LOADING_PERCENT = 706,
 
    // 8xx
    // Bad interleaving means that a media has been improperly interleaved or not
    // interleaved at all, e.g has all the video samples first then all the audio
    // ones. Video is playing but a lot of disk seek may be happening.
    RT_INFO_BAD_INTERLEAVING = 800,
    // The media is not seekable (e.g live stream).
    RT_INFO_NOT_SEEKABLE     = 801,
    // New media metadata is available.
    RT_INFO_METADATA_UPDATE  = 802,
 
    // 9xx
    RT_INFO_TIMED_TEXT_ERROR = 900,
    RT_INFO_PLAYING_START    = 901,
};
 
enum RTMediaError {
    // 0xx
    RT_MEDIA_ERROR_UNKNOWN = 1,
    // 1xx
    RT_MEDIA_ERROR_SERVER_DIED = 100,
    // 2xx
    RT_MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200,
    // 3xx
};
 
enum RTSeekType {
    RT_SEEK_NO         = 0,
    RT_SEEK_DOING,
    RT_SEEK_VIDEO_ONLY,
    RT_SEEK_DONE,
    RT_SEEK_MAX,
};
 
typedef struct _RTMediaUri {
    char  *mUri;
    INT32  mUriLength;
    char   mHeaders[4096];
    char   mVersion[32];
    void  *mDataSource;
} RTMediaUri;
 
enum RTWriteDataType {
    RT_WRITEDATA_PCM = 0,
    RT_WRITEDATA_TS,
    RT_WRITEDATA_ES,
};
 
typedef enum  _RTInvokeIds {
    RT_INVOKE_ID_GET_TRACK_INFO = 1,
    RT_INVOKE_ID_ADD_EXTERNAL_SOURCE = 2,
    RT_INVOKE_ID_ADD_EXTERNAL_SOURCE_FD = 3,
    RT_INVOKE_ID_SELECT_TRACK = 4,
    RT_INVOKE_ID_UNSELECT_TRACK = 5,
    RT_INVOKE_ID_SET_VIDEO_SCALING_MODE = 6,
    RT_INVOKE_ID_GET_SELECTED_TRACK = 7,
 
    // rockit private key, must keep sync with rockit client
    RT_INVOKE_PRIVATE_KEY = 10000,
    RT_INVOKE_SET_PLAY_SPEED = RT_INVOKE_PRIVATE_KEY,
    RT_INVOKE_GET_PLAY_SPEED,
    RT_INVOKE_SET_SUB_VISIBLE,
} RTInvokeIds;
 
class RTPlayerUtil {
 public:
    static const char*  getStateName(UINT32 player_state);
    static void         dumpStateError(UINT32 state, const char* caller);
};
 
#endif  // SRC_RT_PLAYER_RTPLAYERDEF_H_