| 1 | /* --------------------------------------------------------------------------- |
| 2 | ** This software is in the public domain, furnished "as is", without technical |
| 3 | ** support, and with no warranty, express or implied, as to its usefulness for |
| 4 | ** any purpose. |
| 5 | ** |
| 6 | ** ALSACapture.h |
| 7 | ** |
| 8 | ** V4L2 RTSP streamer |
| 9 | ** |
| 10 | ** ALSA capture overide of V4l2Capture |
| 11 | ** |
| 12 | ** -------------------------------------------------------------------------*/ |
| 13 | |
| 14 | #ifndef ALSA_CAPTURE |
| 15 | #define ALSA_CAPTURE |
| 16 | |
| 17 | #include <list> |
| 18 | |
| 19 | #include <alsa/asoundlib.h> |
| 20 | #include "logger.h" |
| 21 | |
| 22 | struct ALSACaptureParameters |
| 23 | { |
| 24 | ALSACaptureParameters(const char* devname, const std::list<snd_pcm_format_t> & formatList, unsigned int sampleRate, unsigned int channels, int verbose) : |
| 25 | m_devName(devname), m_formatList(formatList), m_sampleRate(sampleRate), m_channels(channels), m_verbose(verbose) { |
| 26 | |
| 27 | } |
| 28 | |
| 29 | std::string m_devName; |
| 30 | std::list<snd_pcm_format_t> m_formatList; |
| 31 | unsigned int m_sampleRate; |
| 32 | unsigned int m_channels; |
| 33 | int m_verbose; |
| 34 | }; |
| 35 | |
| 36 | class ALSACapture |
| 37 | { |
| 38 | public: |
| 39 | static ALSACapture* createNew(const ALSACaptureParameters & params) ; |
| 40 | virtual ~ALSACapture(); |
| 41 | void close(); |
| 42 | |
| 43 | protected: |
| 44 | ALSACapture(const ALSACaptureParameters & params); |
| 45 | int configureFormat(snd_pcm_hw_params_t *hw_params); |
| 46 | |
| 47 | public: |
| 48 | virtual size_t read(char* buffer, size_t bufferSize); |
| 49 | virtual int getFd(); |
| 50 | |
| 51 | virtual unsigned long getBufferSize() { return m_bufferSize; }; |
| 52 | virtual int getWidth() {return -1;} |
| 53 | virtual int getHeight() {return -1;} |
| 54 | virtual int getCaptureFormat() {return -1;} |
| 55 | |
| 56 | unsigned long getSampleRate() { return m_params.m_sampleRate; } |
| 57 | unsigned long getChannels () { return m_params.m_channels; } |
| 58 | snd_pcm_format_t getFormat () { return m_fmt; } |
| 59 | |
| 60 | private: |
| 61 | snd_pcm_t* m_pcm; |
| 62 | unsigned long m_bufferSize; |
| 63 | unsigned long m_periodSize; |
| 64 | ALSACaptureParameters m_params; |
| 65 | snd_pcm_format_t m_fmt; |
| 66 | }; |
| 67 | |
| 68 | #endif |
| 69 | |
| 70 | |
| 71 | |