Emx::MediaRingBufferReader类 参考

媒体环形共享缓冲区读类(注意:所有操作都是非线程安全的)

#include "MediaRingBuffer.hpp"

Public 类型

using OnGetBuffer = std::function< ErrCodeE(ErrCodeE e, const uint8_t *buffer, void *usr, int32_t off, int32_t size, uint32_t magicId)>
 

Public 成员函数

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

using Emx::MediaRingBufferReader::OnGetBuffer = std::function<ErrCodeE(ErrCodeE e, const uint8_t *buffer, void *usr, int32_t off, int32_t size, uint32_t magicId)>

成员函数说明

◆ 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
参数
key[in] 缓冲区的识别码

被这些函数引用 Create().

◆ 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