EMIPLIB
|
00001 /* 00002 00003 This file is a part of EMIPLIB, the EDM Media over IP Library. 00004 00005 Copyright (C) 2006-2011 Hasselt University - Expertise Centre for 00006 Digital Media (EDM) (http://www.edm.uhasselt.be) 00007 00008 This library is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Lesser General Public 00010 License as published by the Free Software Foundation; either 00011 version 2.1 of the License, or (at your option) any later version. 00012 00013 This library is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 Lesser General Public License for more details. 00017 00018 You should have received a copy of the GNU Lesser General Public 00019 License along with this library; if not, write to the Free Software 00020 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 00021 USA 00022 00023 */ 00024 00029 #ifndef MIPALSAOUTPUT_H 00030 00031 #define MIPALSAOUTPUT_H 00032 00033 #include "mipconfig.h" 00034 00035 #ifdef MIPCONFIG_SUPPORT_ALSA 00036 00037 #include "mipcomponent.h" 00038 #include "miptime.h" 00039 #include <asoundlib.h> 00040 #include <jthread/jthread.h> 00041 #include <string> 00042 00048 class EMIPLIB_IMPORTEXPORT MIPAlsaOutput : public MIPComponent, private jthread::JThread 00049 { 00050 public: 00051 MIPAlsaOutput(); 00052 ~MIPAlsaOutput(); 00053 00068 bool open(int sampRate, int channels, const std::string device = std::string("plughw:0,0"), 00069 MIPTime blockTime = MIPTime(0.020), 00070 MIPTime arrayTime = MIPTime(10.0), 00071 bool floatSamples = true); 00072 00076 bool close(); 00077 bool push(const MIPComponentChain &chain, int64_t iteration, MIPMessage *pMsg); 00078 bool pull(const MIPComponentChain &chain, int64_t iteration, MIPMessage **pMsg); 00079 private: 00080 void *Thread(); 00081 00082 snd_pcm_t *m_pDevice; 00083 snd_pcm_hw_params_t *m_pHwParameters; 00084 int m_sampRate; 00085 int m_channels; 00086 float *m_pFrameArrayFloat; 00087 uint16_t *m_pFrameArrayInt; 00088 bool m_floatSamples; 00089 size_t m_frameArrayLength; 00090 size_t m_currentPos, m_nextPos; 00091 size_t m_blockLength, m_blockFrames; 00092 MIPTime m_delay; 00093 MIPTime m_distTime, m_blockTime; 00094 jthread::JMutex m_frameMutex, m_stopMutex; 00095 bool m_stopLoop; 00096 }; 00097 00098 #endif // MIPCONFIG_SUPPORT_ALSA 00099 00100 #endif // MIPALSAOUTPUT_H 00101