/*
|
* Copyright 2018 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: Hery.Xu@rock-chips.com
|
* date: 20181102
|
* author: martin.cheng@rock-chips.com
|
* date: 20181126
|
*/
|
|
#ifndef SRC_RT_TASK_INCLUDE_RT_MESSAGE_H_
|
#define SRC_RT_TASK_INCLUDE_RT_MESSAGE_H_
|
|
#include "rt_header.h" // NOLINT
|
#include "rt_thread.h" // NOLINT
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
// events from integration(player) layer.
|
enum RTMediaEvent {
|
// mediaplayer msg
|
RT_MEDIA_NOP = 0, // interface test message
|
RT_MEDIA_PREPARED = 1,
|
RT_MEDIA_PLAYBACK_COMPLETE = 2,
|
RT_MEDIA_BUFFERING_UPDATE = 3,
|
RT_MEDIA_SEEK_COMPLETE = 4,
|
RT_MEDIA_SET_VIDEO_SIZE = 5,
|
RT_MEDIA_STARTED = 6,
|
RT_MEDIA_PAUSED = 7,
|
RT_MEDIA_STOPPED = 8,
|
RT_MEDIA_SKIPPED = 9,
|
RT_MEDIA_TIMED_TEXT = 99,
|
RT_MEDIA_ERROR = 100,
|
RT_MEDIA_INFO = 200,
|
RT_MEDIA_SUBTITLE_DATA = 201,
|
RT_MEDIA_SEEK_ASYNC = 14,
|
};
|
|
// commands used by integration(player) layer.
|
enum RTMediaCmd {
|
RT_MEDIA_CMD_NOP = 512,
|
RT_MEDIA_CMD_SET_DATASOURCE,
|
RT_MEDIA_CMD_PREPARE,
|
RT_MEDIA_CMD_SEEKTO,
|
RT_MEDIA_CMD_START,
|
RT_MEDIA_CMD_STOP,
|
RT_MEDIA_CMD_PAUSE,
|
RT_MEDIA_CMD_RESET,
|
RT_MEDIA_CMD_INVOKE,
|
RT_MEDIA_CMD_MAX,
|
};
|
|
// events from node layer.
|
enum RTNodeEvent {
|
RT_NODE_OK = 1024,
|
RT_NODE_ERR_CODEC,
|
RT_NODE_ERR_CODEC_VIDEO,
|
RT_NODE_ERR_CODEC_AUDIO,
|
|
// sub-events start
|
RT_NODE_ERR_TINY_BASE = 1128,
|
RT_NODE_ERR_CODEC_NONE,
|
RT_NODE_ERR_FRAME,
|
RT_NODE_ERR_SINK,
|
RT_NODE_ERR_TINY_MAX,
|
|
RT_NODE_ERR_FATAL_BASE = 1256,
|
RT_NODE_ERR_PIXFORMAT,
|
RT_NODE_ERR_CP_VCODEC,
|
RT_NODE_ERR_HTTP,
|
RT_NODE_ERR_INIT,
|
RT_NODE_ERR_IO,
|
RT_NODE_ERR_RUNTIME,
|
RT_NODE_ERR_FATAL_MAX,
|
RT_NODE_ERR_MAX,
|
// sub-events end
|
|
RT_NODE_INFO_BASE = 2048,
|
RT_NODE_INFO_CACHE,
|
RT_NODE_INFO_EOS_VIDEO,
|
RT_NODE_INFO_EOS_AUDIO,
|
RT_NODE_INFO_FIRST_FRAME,
|
RT_NODE_INFO_SYNC,
|
RT_NODE_INFO_RESTART_VIDEO,
|
RT_NODE_INFO_RESTART_AUDIO,
|
RT_NODE_INFO_RESTART_SUBTE,
|
RT_NODE_INFO_SET_SPEED,
|
RT_NODE_INFO_MAX,
|
};
|
|
enum RTNodeRequest {
|
RT_NODE_REQ_BASE = 0,
|
RT_NODE_REQ_RETRY_ONCE,
|
RT_NODE_REQ_RETRY_NONE,
|
RT_NODE_REQ_MAX,
|
};
|
|
typedef struct _rt_media_event {
|
UINT32 cmd;
|
const char *name;
|
} rt_media_event;
|
|
|
static const rt_media_event mMediaEvents[] = {
|
{ RT_MEDIA_NOP, "EVENT_NOP" },
|
{ RT_MEDIA_PREPARED, "EVENT_PREPARED" },
|
{ RT_MEDIA_PLAYBACK_COMPLETE, "EVENT_COMPLETE" },
|
{ RT_MEDIA_BUFFERING_UPDATE, "EVENT_BUFFERING_UPDATE" },
|
{ RT_MEDIA_SEEK_COMPLETE, "EVENT_SEEK_COMPLETE" },
|
{ RT_MEDIA_SET_VIDEO_SIZE, "EVENT_SET_VIDEO_SIZE" },
|
{ RT_MEDIA_STARTED, "EVENT_STARTED" },
|
{ RT_MEDIA_PAUSED, "EVENT_PAUSED" },
|
{ RT_MEDIA_STOPPED, "EVENT_STOPPED" },
|
{ RT_MEDIA_SKIPPED, "EVENT_SKIPPED" },
|
{ RT_MEDIA_TIMED_TEXT, "EVENT_TIMED_TEXT" },
|
{ RT_MEDIA_ERROR, "EVENT_ERROR" },
|
{ RT_MEDIA_INFO, "EVENT_INFO" },
|
{ RT_MEDIA_SUBTITLE_DATA, "SUBTITLE_DATA" },
|
{ RT_MEDIA_SEEK_ASYNC, "SEEK_ASYNC" },
|
};
|
|
static const rt_media_event mMediaCmds[] = {
|
{ RT_MEDIA_CMD_NOP, "NOP" },
|
{ RT_MEDIA_CMD_SET_DATASOURCE, "SET_DATASOURCE" },
|
{ RT_MEDIA_CMD_PREPARE, "PREPARE" },
|
{ RT_MEDIA_CMD_SEEKTO, "SEEKTO" },
|
{ RT_MEDIA_CMD_START, "START" },
|
{ RT_MEDIA_CMD_STOP, "STOP" },
|
{ RT_MEDIA_CMD_PAUSE, "PAUSE" },
|
{ RT_MEDIA_CMD_RESET, "RESET" },
|
{ RT_MEDIA_CMD_INVOKE, "INVOKE" },
|
};
|
|
struct RTMsgHandler;
|
struct RTMsgLooper;
|
|
struct RTMessage {
|
struct RTMsgData {
|
INT32 mWhat;
|
UINT64 mWhenUs;
|
UINT32 mArgU32;
|
UINT64 mArgU64;
|
RT_PTR mArgPtr;
|
INT32 mResult;
|
};
|
|
public:
|
RTMessage();
|
RTMessage(UINT32 what, UINT32 arg32, UINT64 arg64, struct RTMsgHandler* handler = RT_NULL);
|
RTMessage(UINT32 what, RT_PTR data, struct RTMsgHandler* handler = RT_NULL);
|
~RTMessage();
|
|
void setWhat(UINT32 what);
|
const UINT32 getWhat();
|
void setData(RT_PTR data);
|
const RT_PTR getData();
|
void setWhenUs(UINT64 when);
|
const UINT64 getWhenUs();
|
void setResult(INT32 result);
|
INT32 getResult();
|
void setTarget(struct RTMsgHandler* handler);
|
struct RTMsgHandler *getTarget() {
|
return mHandler;
|
}
|
|
RTMessage* dup(); // performs message deep copy
|
const char* toString();
|
|
struct RTMsgData mData;
|
|
private:
|
void initialize();
|
RT_RET deliver();
|
|
private:
|
friend struct RTMsgLooper; // deliver()
|
|
struct RTMsgHandler *mHandler;
|
RtCondition *mMsgCond;
|
RT_BOOL mSync;
|
};
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif // SRC_RT_TASK_INCLUDE_RT_MESSAGE_H_
|