Fix writing "PCM device not found" for file player

This commit is contained in:
badaix 2021-04-30 10:39:45 +02:00
parent 376ca7ff9e
commit c88b2d170b
3 changed files with 22 additions and 2 deletions

View file

@ -33,6 +33,19 @@ namespace player
static constexpr auto LOG_TAG = "FilePlayer"; static constexpr auto LOG_TAG = "FilePlayer";
static constexpr auto kDefaultBuffer = 50ms; static constexpr auto kDefaultBuffer = 50ms;
static constexpr auto kDescription = "Raw PCM file output";
std::vector<PcmDevice> FilePlayer::pcm_list(const std::string& parameter)
{
auto params = utils::string::split_pairs(parameter, ',', '=');
string filename;
if (params.find("filename") != params.end())
filename = params["filename"];
if (filename.empty())
filename = "stdout";
return {PcmDevice{0, filename, kDescription}};
}
FilePlayer::FilePlayer(boost::asio::io_context& io_context, const ClientSettings::Player& settings, std::shared_ptr<Stream> stream) FilePlayer::FilePlayer(boost::asio::io_context& io_context, const ClientSettings::Player& settings, std::shared_ptr<Stream> stream)
: Player(io_context, settings, stream), timer_(io_context), file_(nullptr) : Player(io_context, settings, stream), timer_(io_context), file_(nullptr)

View file

@ -40,6 +40,9 @@ public:
void start() override; void start() override;
void stop() override; void stop() override;
/// List the dummy file PCM device
static std::vector<PcmDevice> pcm_list(const std::string& parameter);
protected: protected:
void requestAudio(); void requestAudio();
void loop(); void loop();

View file

@ -59,6 +59,8 @@ static constexpr auto LOG_TAG = "Snapclient";
PcmDevice getPcmDevice(const std::string& player, const std::string& parameter, const std::string& soundcard) PcmDevice getPcmDevice(const std::string& player, const std::string& parameter, const std::string& soundcard)
{ {
LOG(DEBUG, LOG_TAG) << "Trying to get PCM device for player: " << player << ", parameter: "
<< ", card: " << soundcard << "\n";
#if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI) #if defined(HAS_ALSA) || defined(HAS_PULSE) || defined(HAS_WASAPI)
vector<PcmDevice> pcm_devices; vector<PcmDevice> pcm_devices;
#if defined(HAS_ALSA) #if defined(HAS_ALSA)
@ -73,6 +75,8 @@ PcmDevice getPcmDevice(const std::string& player, const std::string& parameter,
if (player == player::WASAPI) if (player == player::WASAPI)
pcm_devices = WASAPIPlayer::pcm_list(); pcm_devices = WASAPIPlayer::pcm_list();
#endif #endif
if (player == player::FILE)
return FilePlayer::pcm_list(parameter).front();
try try
{ {
int soundcardIdx = cpt::stoi(soundcard); int soundcardIdx = cpt::stoi(soundcard);
@ -386,8 +390,8 @@ int main(int argc, char** argv)
#if defined(HAS_ALSA) #if defined(HAS_ALSA)
if (settings.player.pcm_device.idx == -1) if (settings.player.pcm_device.idx == -1)
{ {
cout << "PCM device \"" << pcm_device << "\" not found\n"; LOG(ERROR, LOG_TAG) << "PCM device \"" << pcm_device << "\" not found\n";
// exit(EXIT_FAILURE); // exit(EXIT_FAILURE);
} }
#endif #endif