媒体环形共享缓冲区读类(注意:所有操作都是非线程安全的)
#include "MediaRingBuffer.hpp"
|
| using | OnGetBuffer = std::function< ErrCodeE(ErrCodeE e, const uint8_t *buffer, void *usr, int32_t off, int32_t size, uint32_t magicId)> |
| |
|
| ErrCodeE | Create (int32_t key, int32_t size) |
| | 创建或关联一个缓冲区 更多...
|
| |
| void | Create (int32_t key) |
| | 关联一个缓冲区 更多...
|
| |
| void | Destroy () |
| | 断开缓冲区 更多...
|
| |
| ErrCodeE | Pop (int32_t off, int32_t size, uint32_t magicId, std::string &data) |
| | 从缓冲区里读取一块数据 更多...
|
| |
| ErrCodeE | PopDirect (int32_t off, int32_t size, uint32_t magicId, OnGetBuffer cb, void *usr) |
| | 将缓冲去中的数据直接送给注册的回调 更多...
|
| |
| bool | CheckBufferIsDirty (int32_t off, int32_t size, uint32_t magicId) |
| | 检查buffer当前是否被覆盖过 更多...
|
| |
◆ OnGetBuffer
◆ Create() [1/2]
| ErrCodeE Emx::MediaRingBufferReader::Create |
( |
int32_t |
key, |
|
|
int32_t |
size |
|
) |
| |
- 参数
-
| key | [in] 缓冲区的识别码 |
| size | [in] 缓冲区的大小 |
- 返回
- ErrCodeE
◆ Create() [2/2]
| void Emx::MediaRingBufferReader::Create |
( |
int32_t |
key | ) |
|
|
inline |
◆ Destroy()
| void Emx::MediaRingBufferReader::Destroy |
( |
| ) |
|
|
inline |
◆ Pop()
| ErrCodeE Emx::MediaRingBufferReader::Pop |
( |
int32_t |
off, |
|
|
int32_t |
size, |
|
|
uint32_t |
magicId, |
|
|
std::string & |
data |
|
) |
| |
- 参数
-
| off | [in] 读取地址与缓冲区起始地址的的偏移量 |
| size | [in] 读取大小 |
| magicId | [in] 用于判断数据是否被改写,需要与此数据在Push或GetFreeBuffer时填写的magicId一致 |
| data | [out] 读取到的数据 |
- 返回
- ErrCodeE
◆ PopDirect()
| ErrCodeE Emx::MediaRingBufferReader::PopDirect |
( |
int32_t |
off, |
|
|
int32_t |
size, |
|
|
uint32_t |
magicId, |
|
|
OnGetBuffer |
cb, |
|
|
void * |
usr |
|
) |
| |
- 注解
- 这个操作不会像Pop那样将缓冲区中的数据拷贝到data中,而是直接将缓冲区中的数据提供出来 因此,这个函数并不安全,有可能在cb中使用buffer数据的过程中,buffer内的数据就正在被覆盖。 所以,首先cb中对buffer的处理要留意这种况状的发生,并且在使用完buffer后调用CheckBufferIsDirty来确认 刚刚使用buffer的过程中,buffer内的数据有没有被覆盖。PopDirect的主要用途是可以节省内存的开销
- 参数
-
| off | [in] 读取地址与缓冲区起始地址的的偏移量 |
| size | [in] 读取大小 |
| magicId | [in] 用于判断数据是否被改写,需要与此数据在Push或GetFreeBuffer时填写的magicId一致 |
| cb | [in] 读取到数据后用于接收数据的回调,此回调是同步回调 |
| usr | [in] 用户数据 |
- 返回
- ErrCodeE
◆ CheckBufferIsDirty()
| bool Emx::MediaRingBufferReader::CheckBufferIsDirty |
( |
int32_t |
off, |
|
|
int32_t |
size, |
|
|
uint32_t |
magicId |
|
) |
| |
- 参数
-
| off | [in] 读取地址与缓冲区起始地址的的偏移量 |
| size | [in] 读取大小 |
| magicId | [in] 用于判断数据是否被改写,需要与此数据在Push或GetFreeBuffer时填写的magicId一致 |
- 返回
- bool