MediaRingBuffer.hpp
1 //
2 // Created by xiong on 2021/7/30.
3 //
4 
5 #ifndef EMX_MediaRingBuffer_HPP
6 #define EMX_MediaRingBuffer_HPP
7 
8 #include <string>
9 #include "core/EmxUtils.hpp"
10 
11 namespace Emx {
18  public:
25  ErrCodeE Create(int32_t key, int32_t size = 0);
26 
30  void Destroy() { m_shm.Destroy(); }
31 
40  int32_t Push(char *data, int32_t size, uint32_t magicId);
41 
50  int32_t GetFreeBuffer(int32_t size, uint32_t magicId, char **data);
51 
52  private:
53  Shm m_shm;
54  char *m_buffer;
55  int32_t m_bufferSize;
56  int32_t m_off = 0;
57  };
58 
61  public:
68  ErrCodeE Create(int32_t key, int32_t size);
69 
74  void Create(int32_t key){Create(key,0);}
75 
79  void Destroy() { m_shm.Destroy(); }
80 
89  ErrCodeE Pop(int32_t off, int32_t size, uint32_t magicId, std::string &data);
90 
91  using OnGetBuffer = std::function<ErrCodeE(ErrCodeE e, const uint8_t *buffer, void *usr,
92  int32_t off, int32_t size, uint32_t magicId)>;
93 
107  ErrCodeE PopDirect(int32_t off, int32_t size, uint32_t magicId, OnGetBuffer cb, void *usr);
108 
116  bool CheckBufferIsDirty(int32_t off, int32_t size, uint32_t magicId);
117 
118  private:
119  int32_t m_key;
120  Shm m_shm;
121  char *m_buffer;
122  int32_t m_bufferSize;
123  };
125 }
126 
127 #endif //EMX_MediaRingBuffer_HPP
媒体环形共享缓冲区读类(注意:所有操作都是非线程安全的)
Definition: MediaRingBuffer.hpp:60
ErrCodeE Create(int32_t key, int32_t size)
创建或关联一个缓冲区
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)
将缓冲去中的数据直接送给注册的回调
void Destroy()
断开缓冲区
Definition: MediaRingBuffer.hpp:79
void Create(int32_t key)
关联一个缓冲区
Definition: MediaRingBuffer.hpp:74
std::function< ErrCodeE(ErrCodeE e, const uint8_t *buffer, void *usr, int32_t off, int32_t size, uint32_t magicId)> OnGetBuffer
Definition: MediaRingBuffer.hpp:92
bool CheckBufferIsDirty(int32_t off, int32_t size, uint32_t magicId)
检查buffer当前是否被覆盖过
媒体环形共享缓冲区写类(注意:所有操作都是非线程安全的)
Definition: MediaRingBuffer.hpp:17
int32_t Push(char *data, int32_t size, uint32_t magicId)
发送数据到缓冲区
void Destroy()
销毁或断开缓冲区
Definition: MediaRingBuffer.hpp:30
int32_t GetFreeBuffer(int32_t size, uint32_t magicId, char **data)
从缓冲区获取一块内存
ErrCodeE Create(int32_t key, int32_t size=0)
创建或关联一个缓冲区
用于共享内存
Definition: Shm.hpp:16
void Destroy()
断开共享内存
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10