xref: /OK3568_Linux_fs/external/rockit/tgi/sdk/include/rt_message.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright 2018 Rockchip Electronics Co. LTD
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * author: Hery.Xu@rock-chips.com
17  *   date: 20181102
18  * author: martin.cheng@rock-chips.com
19  *   date: 20181126
20  */
21 
22 #ifndef SRC_RT_TASK_INCLUDE_RT_MESSAGE_H_
23 #define SRC_RT_TASK_INCLUDE_RT_MESSAGE_H_
24 
25 #include "rt_header.h" // NOLINT
26 #include "rt_thread.h" // NOLINT
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 // events from integration(player) layer.
33 enum RTMediaEvent {
34     // mediaplayer msg
35     RT_MEDIA_NOP               = 0,  // interface test message
36     RT_MEDIA_PREPARED          = 1,
37     RT_MEDIA_PLAYBACK_COMPLETE = 2,
38     RT_MEDIA_BUFFERING_UPDATE  = 3,
39     RT_MEDIA_SEEK_COMPLETE     = 4,
40     RT_MEDIA_SET_VIDEO_SIZE    = 5,
41     RT_MEDIA_STARTED           = 6,
42     RT_MEDIA_PAUSED            = 7,
43     RT_MEDIA_STOPPED           = 8,
44     RT_MEDIA_SKIPPED           = 9,
45     RT_MEDIA_TIMED_TEXT        = 99,
46     RT_MEDIA_ERROR             = 100,
47     RT_MEDIA_INFO              = 200,
48     RT_MEDIA_SUBTITLE_DATA     = 201,
49     RT_MEDIA_SEEK_ASYNC        = 14,
50 };
51 
52 // commands used by integration(player) layer.
53 enum RTMediaCmd {
54     RT_MEDIA_CMD_NOP              = 512,
55     RT_MEDIA_CMD_SET_DATASOURCE,
56     RT_MEDIA_CMD_PREPARE,
57     RT_MEDIA_CMD_SEEKTO,
58     RT_MEDIA_CMD_START,
59     RT_MEDIA_CMD_STOP,
60     RT_MEDIA_CMD_PAUSE,
61     RT_MEDIA_CMD_RESET,
62     RT_MEDIA_CMD_INVOKE,
63     RT_MEDIA_CMD_MAX,
64 };
65 
66 // events from node layer.
67 enum RTNodeEvent {
68     RT_NODE_OK = 1024,
69     RT_NODE_ERR_CODEC,
70     RT_NODE_ERR_CODEC_VIDEO,
71     RT_NODE_ERR_CODEC_AUDIO,
72 
73     // sub-events start
74     RT_NODE_ERR_TINY_BASE = 1128,
75     RT_NODE_ERR_CODEC_NONE,
76     RT_NODE_ERR_FRAME,
77     RT_NODE_ERR_SINK,
78     RT_NODE_ERR_TINY_MAX,
79 
80     RT_NODE_ERR_FATAL_BASE = 1256,
81     RT_NODE_ERR_PIXFORMAT,
82     RT_NODE_ERR_CP_VCODEC,
83     RT_NODE_ERR_HTTP,
84     RT_NODE_ERR_INIT,
85     RT_NODE_ERR_IO,
86     RT_NODE_ERR_RUNTIME,
87     RT_NODE_ERR_FATAL_MAX,
88     RT_NODE_ERR_MAX,
89     // sub-events end
90 
91     RT_NODE_INFO_BASE = 2048,
92     RT_NODE_INFO_CACHE,
93     RT_NODE_INFO_EOS_VIDEO,
94     RT_NODE_INFO_EOS_AUDIO,
95     RT_NODE_INFO_FIRST_FRAME,
96     RT_NODE_INFO_SYNC,
97     RT_NODE_INFO_RESTART_VIDEO,
98     RT_NODE_INFO_RESTART_AUDIO,
99     RT_NODE_INFO_RESTART_SUBTE,
100     RT_NODE_INFO_SET_SPEED,
101     RT_NODE_INFO_MAX,
102 };
103 
104 enum RTNodeRequest {
105     RT_NODE_REQ_BASE = 0,
106     RT_NODE_REQ_RETRY_ONCE,
107     RT_NODE_REQ_RETRY_NONE,
108     RT_NODE_REQ_MAX,
109 };
110 
111 typedef struct _rt_media_event {
112     UINT32      cmd;
113     const char *name;
114 } rt_media_event;
115 
116 
117 static const rt_media_event mMediaEvents[] = {
118     { RT_MEDIA_NOP,               "EVENT_NOP" },
119     { RT_MEDIA_PREPARED,          "EVENT_PREPARED" },
120     { RT_MEDIA_PLAYBACK_COMPLETE, "EVENT_COMPLETE" },
121     { RT_MEDIA_BUFFERING_UPDATE,  "EVENT_BUFFERING_UPDATE" },
122     { RT_MEDIA_SEEK_COMPLETE,     "EVENT_SEEK_COMPLETE" },
123     { RT_MEDIA_SET_VIDEO_SIZE,    "EVENT_SET_VIDEO_SIZE" },
124     { RT_MEDIA_STARTED,           "EVENT_STARTED" },
125     { RT_MEDIA_PAUSED,            "EVENT_PAUSED" },
126     { RT_MEDIA_STOPPED,           "EVENT_STOPPED" },
127     { RT_MEDIA_SKIPPED,           "EVENT_SKIPPED" },
128     { RT_MEDIA_TIMED_TEXT,        "EVENT_TIMED_TEXT" },
129     { RT_MEDIA_ERROR,             "EVENT_ERROR" },
130     { RT_MEDIA_INFO,              "EVENT_INFO" },
131     { RT_MEDIA_SUBTITLE_DATA,     "SUBTITLE_DATA" },
132     { RT_MEDIA_SEEK_ASYNC,        "SEEK_ASYNC" },
133 };
134 
135 static const rt_media_event mMediaCmds[] = {
136     { RT_MEDIA_CMD_NOP,               "NOP" },
137     { RT_MEDIA_CMD_SET_DATASOURCE,    "SET_DATASOURCE" },
138     { RT_MEDIA_CMD_PREPARE,           "PREPARE" },
139     { RT_MEDIA_CMD_SEEKTO,            "SEEKTO" },
140     { RT_MEDIA_CMD_START,             "START" },
141     { RT_MEDIA_CMD_STOP,              "STOP" },
142     { RT_MEDIA_CMD_PAUSE,             "PAUSE" },
143     { RT_MEDIA_CMD_RESET,             "RESET" },
144     { RT_MEDIA_CMD_INVOKE,            "INVOKE" },
145 };
146 
147 struct RTMsgHandler;
148 struct RTMsgLooper;
149 
150 struct RTMessage {
151     struct RTMsgData {
152         INT32   mWhat;
153         UINT64  mWhenUs;
154         UINT32  mArgU32;
155         UINT64  mArgU64;
156         RT_PTR  mArgPtr;
157         INT32   mResult;
158     };
159 
160  public:
161     RTMessage();
162     RTMessage(UINT32 what, UINT32 arg32, UINT64 arg64, struct RTMsgHandler* handler = RT_NULL);
163     RTMessage(UINT32 what, RT_PTR data, struct RTMsgHandler* handler = RT_NULL);
164     ~RTMessage();
165 
166     void           setWhat(UINT32 what);
167     const UINT32   getWhat();
168     void           setData(RT_PTR data);
169     const RT_PTR   getData();
170     void           setWhenUs(UINT64 when);
171     const UINT64   getWhenUs();
172     void           setResult(INT32 result);
173     INT32          getResult();
174     void           setTarget(struct RTMsgHandler* handler);
getTargetRTMessage175     struct RTMsgHandler *getTarget() {
176         return mHandler;
177     }
178 
179     RTMessage*     dup();      // performs message deep copy
180     const char*    toString();
181 
182     struct RTMsgData mData;
183 
184  private:
185     void           initialize();
186     RT_RET         deliver();
187 
188  private:
189     friend struct RTMsgLooper;  // deliver()
190 
191     struct RTMsgHandler *mHandler;
192     RtCondition         *mMsgCond;
193     RT_BOOL              mSync;
194 };
195 
196 #ifdef __cplusplus
197 }
198 #endif
199 
200 #endif  // SRC_RT_TASK_INCLUDE_RT_MESSAGE_H_
201