From 59cfcf6f32b7a790008fce27d6d94c29e4de5796 Mon Sep 17 00:00:00 2001 From: mpromonet Date: Tue, 4 Oct 2022 13:53:04 +0200 Subject: [PATCH] move audio fonctions --- .gitignore | 1 + inc/V4l2RTSPServer.h | 3 +++ main.cpp | 31 +------------------------------ src/ALSACapture.cpp | 3 +-- src/V4l2RTSPServer.cpp | 29 ++++++++++++++++++++++++++++- 5 files changed, 34 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index 1269c1e..d751bdb 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ install_manifest.txt *.deb #live live/ +live555-latest.tar.gz diff --git a/inc/V4l2RTSPServer.h b/inc/V4l2RTSPServer.h index e9e298e..2842444 100644 --- a/inc/V4l2RTSPServer.h +++ b/inc/V4l2RTSPServer.h @@ -87,6 +87,9 @@ class V4l2RTSPServer { StreamReplicator* CreateAudioReplicator( const std::string& audioDev, const std::list& audioFmtList, int audioFreq, int audioNbChannels, int verbose, int queueSize, V4L2DeviceSource::CaptureMode captureMode); + + static std::string getV4l2Alsa(const std::string& v4l2device); + static snd_pcm_format_t decodeAudioFormat(const std::string& fmt); #endif // ----------------------------------------- diff --git a/main.cpp b/main.cpp index 1c539a8..d3fd1ec 100755 --- a/main.cpp +++ b/main.cpp @@ -88,35 +88,6 @@ std::string getDeviceName(const std::string & devicePath) return deviceName; } -#ifdef HAVE_ALSA -snd_pcm_format_t decodeAudioFormat(const std::string& fmt) -{ - snd_pcm_format_t audioFmt = SND_PCM_FORMAT_UNKNOWN; - if (fmt == "S16_BE") { - audioFmt = SND_PCM_FORMAT_S16_BE; - } else if (fmt == "S16_LE") { - audioFmt = SND_PCM_FORMAT_S16_LE; - } else if (fmt == "S24_BE") { - audioFmt = SND_PCM_FORMAT_S24_BE; - } else if (fmt == "S24_LE") { - audioFmt = SND_PCM_FORMAT_S24_LE; - } else if (fmt == "S32_BE") { - audioFmt = SND_PCM_FORMAT_S32_BE; - } else if (fmt == "S32_LE") { - audioFmt = SND_PCM_FORMAT_S32_LE; - } else if (fmt == "ALAW") { - audioFmt = SND_PCM_FORMAT_A_LAW; - } else if (fmt == "MULAW") { - audioFmt = SND_PCM_FORMAT_MU_LAW; - } else if (fmt == "S8") { - audioFmt = SND_PCM_FORMAT_S8; - } else if (fmt == "MPEG") { - audioFmt = SND_PCM_FORMAT_MPEG; - } - return audioFmt; -} -#endif - // ----------------------------------------- // entry point @@ -205,7 +176,7 @@ int main(int argc, char** argv) #ifdef HAVE_ALSA case 'A': audioFreq = atoi(optarg); break; case 'C': audioNbChannels = atoi(optarg); break; - case 'a': audioFmt = decodeAudioFormat(optarg); if (audioFmt != SND_PCM_FORMAT_UNKNOWN) {audioFmtList.push_back(audioFmt);} ; break; + case 'a': audioFmt = V4l2RTSPServer::decodeAudioFormat(optarg); if (audioFmt != SND_PCM_FORMAT_UNKNOWN) {audioFmtList.push_back(audioFmt);} ; break; #endif // version diff --git a/src/ALSACapture.cpp b/src/ALSACapture.cpp index ac5f3a7..ed52e3c 100644 --- a/src/ALSACapture.cpp +++ b/src/ALSACapture.cpp @@ -128,8 +128,7 @@ size_t ALSACapture::read(char* buffer, size_t bufferSize) int fmt_phys_width_bytes = 0; if (m_pcm != 0) { - int fmt_phys_width_bits = snd_pcm_format_physical_width(m_fmt); - fmt_phys_width_bytes = fmt_phys_width_bits / 8; + fmt_phys_width_bytes = snd_pcm_format_physical_width(m_fmt) / 8; snd_pcm_sframes_t ret = snd_pcm_readi (m_pcm, buffer, m_periodSize*fmt_phys_width_bytes); LOG(DEBUG) << "ALSA buffer in_size:" << m_periodSize*fmt_phys_width_bytes << " read_size:" << ret; diff --git a/src/V4l2RTSPServer.cpp b/src/V4l2RTSPServer.cpp index 92ce8e5..be34451 100644 --- a/src/V4l2RTSPServer.cpp +++ b/src/V4l2RTSPServer.cpp @@ -102,7 +102,7 @@ std::string getDeviceId(const std::string& evt) { return deviceid; } -std::string getV4l2Alsa(const std::string& v4l2device) { +std::string V4l2RTSPServer::getV4l2Alsa(const std::string& v4l2device) { std::string audioDevice(v4l2device); std::map videodevices; @@ -171,6 +171,33 @@ std::string getV4l2Alsa(const std::string& v4l2device) { return audioDevice; } +snd_pcm_format_t V4l2RTSPServer::decodeAudioFormat(const std::string& fmt) +{ + snd_pcm_format_t audioFmt = SND_PCM_FORMAT_UNKNOWN; + if (fmt == "S16_BE") { + audioFmt = SND_PCM_FORMAT_S16_BE; + } else if (fmt == "S16_LE") { + audioFmt = SND_PCM_FORMAT_S16_LE; + } else if (fmt == "S24_BE") { + audioFmt = SND_PCM_FORMAT_S24_BE; + } else if (fmt == "S24_LE") { + audioFmt = SND_PCM_FORMAT_S24_LE; + } else if (fmt == "S32_BE") { + audioFmt = SND_PCM_FORMAT_S32_BE; + } else if (fmt == "S32_LE") { + audioFmt = SND_PCM_FORMAT_S32_LE; + } else if (fmt == "ALAW") { + audioFmt = SND_PCM_FORMAT_A_LAW; + } else if (fmt == "MULAW") { + audioFmt = SND_PCM_FORMAT_MU_LAW; + } else if (fmt == "S8") { + audioFmt = SND_PCM_FORMAT_S8; + } else if (fmt == "MPEG") { + audioFmt = SND_PCM_FORMAT_MPEG; + } + return audioFmt; +} + StreamReplicator* V4l2RTSPServer::CreateAudioReplicator( const std::string& audioDev, const std::list& audioFmtList, int audioFreq, int audioNbChannels, int verbose, int queueSize, V4L2DeviceSource::CaptureMode captureMode) {