MediaServerAdec.hpp
1 //
2 // Created by xiong on 2020/10/27.
3 //
4 
5 #ifndef EMX_MediaServerAdec_HPP
6 #define EMX_MediaServerAdec_HPP
7 
8 #include "EmxCore.hpp"
9 #include "MediaServerBase.hpp"
10 #include "media/common/MediaInfAdec.hpp"
11 #include <queue>
12 
13 namespace Emx {
17  class AudioDecoder;
18 
20  public:
21  explicit MediaServerAdecChn(int32_t chn) : MediaServerModuleChnBase(MediaModE::Adec, chn) {}
22 
23  ~MediaServerAdecChn() override = default;
24 
25  ErrCodeE LoadParam() override;
26 
27  ErrCodeE SaveParam() override;
28 
29  void *GetParam() override { return &m_param; }
30 
31  void *GetNewParam() override { return &m_paramNew; }
32 
33  void *GetRunningParam() override { return &m_paramRunning; }
34 
35  int GetParamSize() override { return sizeof(Param); }
36 
37  ErrCodeE GetParamDefaultData(std::string &data) override;
38 
39  bool ParamValid() override;
40 
41  ErrCodeE OnRecvReqChn(uint32_t method, const char *data, int32_t size, std::string &out) override;
42 
43  ErrCodeE SetVolumeTemp(int32_t volume) override { return ErrCodeE::Success; }
44 
46 
47  void OnServerDestroy() override;
48 
49  protected:
55  virtual void SendToAo(const int16_t *pcm, int32_t pktNum) = 0;
56 
60  virtual void ClearAoBuffer() {}
61 
65  virtual void PadSilentPcm();
66 
67  protected:
68  void OnGetMsg(uint32_t topic, const char *data, int32_t size);
69 
70  void RunPlayWork();
71 
72  void PlayFile(void *arg);
73 
74  void PlayFileDone(ErrCodeE e, void *arg);
75 
76  void SpkEna(bool ena);
82  void SendToChipAo(const int16_t *pcm, int32_t pktNum);
83 
84  protected:
88  uint32_t m_silentTimeMs = 500;
89  uint32_t m_delayPlayMs = 0;
90  private:
91  EuvLoop m_loopAdec;
93  AudioDecoder *m_decoder;
94  char m_buffer[EMX_AUDIO_MAX_FRAME_SIZE * 2];
95  struct VoiceFile {
96  std::string path;
97  int volume;
98  };
99  std::queue<VoiceFile> m_voiceQue;
100  EuvWork m_playWork;
101  bool m_playQuit;
102  bool m_autoMute;
103  std::list<Gpio *> m_spkGpioList;
104  EuvTimer m_muteTimer;
105  int m_muteCnt;
106  bool m_muting;
107  int m_playCnt;
108  int16_t m_padSilentBuf[320];
109  };
110 
112  public:
114  };
116 }// namespace Emx
117 
118 #endif//EMX_MediaServerAdec_HPP
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
基于EuvLoop的定时器,很有用的一个东西
Definition: EuvTimer.hpp:16
提供在EuvLoop内调用线程池执行阻塞耗时任务的机制
Definition: EuvWork.hpp:18
音频解码
Definition: MediaInfAdec.hpp:16
Definition: MediaServerAdec.hpp:19
void PlayFile(void *arg)
~MediaServerAdecChn() override=default
bool ParamValid() override
void * GetRunningParam() override
Definition: MediaServerAdec.hpp:33
void OnServerDestroy() override
int GetParamSize() override
Definition: MediaServerAdec.hpp:35
ErrCodeE SaveParam() override
virtual void PadSilentPcm()
填充静音数据
void SpkEna(bool ena)
ErrCodeE SetVolumeTemp(int32_t volume) override
Definition: MediaServerAdec.hpp:43
MediaServerAdecChn(int32_t chn)
Definition: MediaServerAdec.hpp:21
void * GetParam() override
Definition: MediaServerAdec.hpp:29
uint32_t m_silentTimeMs
推送静音数据时间 ms
Definition: MediaServerAdec.hpp:88
ErrCodeE OnRecvReqChn(uint32_t method, const char *data, int32_t size, std::string &out) override
void SendToChipAo(const int16_t *pcm, int32_t pktNum)
发送PCM数据到芯片音频输出
virtual void ClearAoBuffer()
清空Ao的缓存buffer
Definition: MediaServerAdec.hpp:60
uint32_t m_delayPlayMs
打开功放后延时播放音频时间 ms
Definition: MediaServerAdec.hpp:89
void * GetNewParam() override
Definition: MediaServerAdec.hpp:31
ErrCodeE LoadParam() override
void PlayFileDone(ErrCodeE e, void *arg)
ErrCodeE GetParamDefaultData(std::string &data) override
ErrCodeE OnServerCreate() override
void OnGetMsg(uint32_t topic, const char *data, int32_t size)
virtual void SendToAo(const int16_t *pcm, int32_t pktNum)=0
发送PCM数据到音频输出
Param m_paramNew
Definition: MediaServerAdec.hpp:86
Param m_param
Definition: MediaServerAdec.hpp:85
Param m_paramRunning
Definition: MediaServerAdec.hpp:87
Definition: MediaServerAdec.hpp:111
MediaServerAdec()
Definition: MediaServerAdec.hpp:113
媒体模块的通用基类
Definition: MediaServerBase.hpp:104
Definition: MediaServerBase.hpp:18
用于Topic的异步订阅
Definition: MsgTopic.hpp:175
MediaModE
Definition: MediaTypedef.hpp:60
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
@ Success
成功
Definition: EmxGpio.hpp:10
音频解码持久化参数
Definition: MediaInfAdec.hpp:19