xref: /OK3568_Linux_fs/external/rockit/tgi/sdk/include/RTMediaBuffer.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright 2019 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: martin.cheng@rock-chips.com
17  *   date: 2019/01/04
18  * module: RTMediaBuffer
19  * author: martin.cheng@rock-chips.com
20  *   date: 2019/11/01
21  * module: add RTBufferListener.
22  */
23 
24 #ifndef SRC_RT_MEDIA_INCLUDE_RTMEDIABUFFER_H_
25 #define SRC_RT_MEDIA_INCLUDE_RTMEDIABUFFER_H_
26 
27 #include <map>
28 
29 #include "rt_mutex.h"
30 #include "rt_metadata.h"
31 #include "RTObject.h"
32 #include "RTMediaData.h"
33 #include "RTMediaBufferDef.h"
34 
35 class RTBufferListener {
36  public:
RTBufferListener()37     RTBufferListener() {}
~RTBufferListener()38     virtual ~RTBufferListener() {}
39 
40  public:
41     // buffer callback.
42     virtual void onBufferAvailable(void* buffer) = 0;
43     virtual void onBufferRealloc(void* buffer, UINT32 size) = 0;
onBufferRegister(UINT64 poolCapacity,UINT32 size)44     virtual void onBufferRegister(UINT64 poolCapacity, UINT32 size) {}
45     virtual void onBufferRelease(void* buffer, RT_BOOL render) = 0;
46 };
47 
48 class RTAllocator;
49 class RTMediaBuffer : public RTObject {
50  public:
51     // The underlying data remains the responsibility of the caller!
52     explicit RTMediaBuffer(void* data, UINT32 size);
53     explicit RTMediaBuffer(
54                  void* data,
55                  UINT32 size,
56                  INT32 handle,
57                  INT32 fd,
58                  RTAllocator *alloctor = RT_NULL);
59     explicit RTMediaBuffer(UINT32 size);
60     explicit RTMediaBuffer(const RTMediaBuffer* data);
61     virtual ~RTMediaBuffer();
62     RTMediaBuffer& operator = (const RTMediaBuffer &);
63 
64  public:
65     // override RTObject methods
summary(INT32 fd)66     void  summary(INT32 fd) { }
getName()67     const char* getName() {return "mediabuffer";}
68     virtual RTMediaBufferType getType();
69     virtual RT_BOOL checkType(RTMediaBufferType type);
70 
71  public:
72     virtual void   release(bool debug = false);
73     virtual void   signalBufferAvailable();
74     virtual void   signalBufferRealloc(UINT32 size);
75     virtual void   signalBufferRelease(bool render = false);
76     virtual void   signalBufferRegister(UINT64 poolCapacity, UINT32 size);
77 
78     virtual void*  getData() const;
79     virtual UINT32 getSize() const;
80     virtual UINT32 getRealSize() const;
81     virtual UINT32 getOffset() const;
82     virtual UINT32 getLength() const;
83     virtual INT32  getFd() const;
84     virtual INT32  getHandle() const;
85     virtual UINT32 getPhyAddr() const;
86     virtual INT32  getUniqueID() const;
87     virtual INT32  getBufferSeq() const;
88     virtual INT32  getPoolID() const;
89     virtual UINT64 getModID() const;
90     virtual void*  getUserData() const;
91 
92     virtual void   setData(void* data, UINT32 size);
93     virtual void   setListener(RTBufferListener* listener);
94     virtual void   setPhyAddr(UINT32 phyaddr);
95     virtual void   setRange(UINT32 offset, UINT32 length);
setRealSize(UINT32 real)96     virtual void   setRealSize(UINT32 real) { mRealSize = real;}
97     virtual void   setStatus(RtMediaBufferStatus status);
98     virtual void   setSite(RTMediaBufferSite site);
99     virtual void   setBufferID(void *id);
100     virtual void   setModID(UINT64 modId);
101     virtual void   setBufferSeq(INT32 seq);
102     virtual void   setFd(INT32 fd);
103     virtual void   setHandle(INT32 handle);
104     virtual void   setUniqueID(INT32 uniqueId);
105     virtual void   setPoolID(INT32 poolId);
106     virtual void   setAllocator(RTAllocator *allocator);
107     virtual void   setUserData(void *param, UserDataFree freeFunc = RT_NULL);
108 
109     virtual RT_BOOL hasFlag(INT32 flag) const;
110     virtual void    setFlag(INT32 flag, INT32 value);
111     virtual RtMetaData* getMetaData();
112 
getAllocator()113     RTAllocator *       getAllocator() { return mAllocator; }
114     RtMediaBufferStatus getStatus();
115     RTMediaBufferSite   getSite();
116     RtMetaData*         extraMeta(const INT32 id);
117     void                setExtraMeta(RtMetaData *meta, const INT32 id);
hasMeta(const INT32 id)118     RT_BOOL             hasMeta(const INT32 id) {
119         return mExtraMetas.find(id) != mExtraMetas.end();
120     }
121     void*               getBufferID();
122 
123     void                setRegistered(RT_BOOL registered);
124     RT_BOOL             isRegistered();
125 
126     // refs manage
127     RT_RET              addRefs();
128     INT32               refsCount();
129     // Clears meta data and resets the range to the full extent.
130     virtual void        reset();
131 
132  protected:
133     void                decRefs();
134 
135  private:
136     void                baseInit();
137 
138  protected:
139     void           *mData;
140     UINT32          mSize;
141     UINT32          mRealSize;
142     UINT32          mRangeOffset;
143     UINT32          mRangeLength;
144     INT32           mHandle;
145     INT32           mFd;
146     INT32           mUniqueId;    // all process can using this id
147     INT32           mPoolID;
148     UINT64          mModId;
149     UINT32          mPhyAddr;
150     RT_BOOL         mOwnsData;
151     INT32           mRefCount;
152     void           *mBufferID;
153     INT32           mBufferSeq;
154     RT_BOOL         mRegistered;
155     RT_BOOL         mReleased;
156     INT32           mFlag;
157     RTMBUserData    mUserData;
158     RTAllocator    *mAllocator;
159     RtMutex        *mLock;
160     RtMutex         mListenerLock;
161     RtReference    *mBufObjRef;
162 
163     RtMediaBufferStatus     mStatus;
164     RTMediaBufferSite       mSite;
165     RTBufferListener       *mBufferListener;
166     RtMetaData                     *mMetaData;
167     std::map<INT32, RtMetaData *>   mExtraMetas;
168 };
169 
170 #endif  // SRC_RT_MEDIA_INCLUDE_RTMEDIABUFFER_H_
171