move audio fonctions

pull/296/head
mpromonet 2 years ago
parent 737c4f88d9
commit 59cfcf6f32

1
.gitignore vendored

@ -13,3 +13,4 @@ install_manifest.txt
*.deb
#live
live/
live555-latest.tar.gz

@ -87,6 +87,9 @@ class V4l2RTSPServer {
StreamReplicator* CreateAudioReplicator(
const std::string& audioDev, const std::list<snd_pcm_format_t>& 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
// -----------------------------------------

@ -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

@ -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;

@ -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<std::string,std::string> 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<snd_pcm_format_t>& audioFmtList, int audioFreq, int audioNbChannels, int verbose,
int queueSize, V4L2DeviceSource::CaptureMode captureMode) {

Loading…
Cancel
Save