static bool obs_init_audio(struct audio_info *ai) { struct obs_audio *audio = &obs->audio; int errorcode; /* TODO: sound subsystem */ errorcode = audio_output_open(&audio->audio, obs->media, ai); if (errorcode == AUDIO_OUTPUT_SUCCESS) return true; else if (errorcode == AUDIO_OUTPUT_INVALIDPARAM) blog(LOG_ERROR, "Invalid audio parameters specified"); else blog(LOG_ERROR, "Could not open audio output"); return false; }
// ---------------------------------------------------------------------------- void player::play_from_queue() { if ( play_queue_.size() > 0 ) { auto track = play_queue_.front(); auto src = track.find_source(); if ( !src.is_null() ) { std::cerr << "play_from_queue id=" << track.id() << ", title='" << track.title() << "', source=" << src.name() << std::endl; state_.state = playing; state_.track = std::move(track); state_.source = src.name(); std::cout << "player state=" << state_.state << std::endl; if ( !audio_output_ ) { audio_output_open(); } play_source(src); play_queue_.pop(); } else { std::cerr << "play_from_queue id=" << track.id() << ", title='" << track.title() << "', NO SOURCE!" << std::endl; play_queue_.pop(); play_from_queue(); } } else if ( continuous_playback_ ) { play_queue_.push(ctpb_selector_.next()); play_from_queue(); } else { play_stop(); } }
bool audio_output_update(struct audio_output *ao, const struct audio_format *audio_format, const struct music_pipe *mp) { assert(mp != NULL); g_mutex_lock(ao->mutex); if (ao->enabled && ao->really_enabled) { if (ao->fail_timer == NULL || g_timer_elapsed(ao->fail_timer, NULL) > REOPEN_AFTER) { bool success = audio_output_open(ao, audio_format, mp); g_mutex_unlock(ao->mutex); return success; } } else if (audio_output_is_open(ao)) audio_output_close_locked(ao); g_mutex_unlock(ao->mutex); return false; }