Check if enough alsa frames are available

This commit is contained in:
badaix 2020-05-07 22:01:04 +02:00
parent 57aa683f93
commit 2c7cbc0d75
4 changed files with 30 additions and 28 deletions

View file

@ -31,6 +31,24 @@
#if defined(HAS_OPUS) #if defined(HAS_OPUS)
#include "decoder/opus_decoder.hpp" #include "decoder/opus_decoder.hpp"
#endif #endif
#ifdef HAS_ALSA
#include "player/alsa_player.hpp"
#include "player/alsa_player_test.hpp"
#endif
#ifdef HAS_OPENSL
#include "player/opensl_player.hpp"
#endif
#ifdef HAS_OBOE
#include "player/oboe_player.hpp"
#endif
#ifdef HAS_COREAUDIO
#include "player/coreaudio_player.hpp"
#endif
#ifdef WINDOWS
#include "player/wasapi_player.h"
#endif
#include "browseZeroConf/browse_mdns.hpp" #include "browseZeroConf/browse_mdns.hpp"
#include "common/aixlog.hpp" #include "common/aixlog.hpp"
#include "common/snap_exception.hpp" #include "common/snap_exception.hpp"

View file

@ -19,31 +19,17 @@
#ifndef CONTROLLER_H #ifndef CONTROLLER_H
#define CONTROLLER_H #define CONTROLLER_H
#include "client_connection.hpp"
#include "client_settings.hpp"
#include "decoder/decoder.hpp" #include "decoder/decoder.hpp"
#include "message/message.hpp" #include "message/message.hpp"
#include "message/server_settings.hpp" #include "message/server_settings.hpp"
#include "message/stream_tags.hpp" #include "message/stream_tags.hpp"
#include "metadata.hpp"
#include "player/player.hpp"
#include "stream.hpp"
#include <atomic> #include <atomic>
#include <thread> #include <thread>
#ifdef HAS_ALSA
#include "player/alsa_player.hpp"
#endif
#ifdef HAS_OPENSL
#include "player/opensl_player.hpp"
#endif
#ifdef HAS_OBOE
#include "player/oboe_player.hpp"
#endif
#ifdef HAS_COREAUDIO
#include "player/coreaudio_player.hpp"
#endif
#ifdef WINDOWS
#include "player/wasapi_player.h"
#endif
#include "client_connection.hpp"
#include "client_settings.hpp"
#include "metadata.hpp"
#include "stream.hpp"
using namespace std::chrono_literals; using namespace std::chrono_literals;

View file

@ -494,6 +494,13 @@ void AlsaPlayer::worker()
} }
} }
if (framesAvail < static_cast<snd_pcm_sframes_t>(frames_))
{
this_thread::sleep_for(10ms);
continue;
}
// LOG(TRACE, LOG_TAG) << "res: " << result << ", framesAvail: " << framesAvail << ", delay: " << framesDelay << ", frames: " << frames_ << "\n";
chronos::usec delay(static_cast<chronos::usec::rep>(1000 * (double)framesDelay / format.msRate())); chronos::usec delay(static_cast<chronos::usec::rep>(1000 * (double)framesDelay / format.msRate()));
// LOG(TRACE, LOG_TAG) << "delay: " << framesDelay << ", delay[ms]: " << delay.count() / 1000 << ", avail: " << framesAvail << "\n"; // LOG(TRACE, LOG_TAG) << "delay: " << framesDelay << ", delay[ms]: " << delay.count() / 1000 << ", avail: " << framesAvail << "\n";

View file

@ -41,15 +41,6 @@ public:
return val; return val;
} }
T front()
{
std::unique_lock<std::mutex> mlock(mutex_);
while (queue_.empty())
cond_.wait(mlock);
return queue_.front();
}
void abort_wait() void abort_wait()
{ {
{ {