diff --git a/app/audio/audiomanager.cpp b/app/audio/audiomanager.cpp index 8fac9bd65..f22319f42 100644 --- a/app/audio/audiomanager.cpp +++ b/app/audio/audiomanager.cpp @@ -189,7 +189,7 @@ void AudioManager::HardReset() Pa_Initialize(); } -bool AudioManager::StartRecording(const EncodingParams ¶ms) +bool AudioManager::StartRecording(const EncodingParams ¶ms, QString *error_str) { if (input_device_ == paNoDevice) { return false; @@ -203,12 +203,19 @@ bool AudioManager::StartRecording(const EncodingParams ¶ms) PaStreamParameters p = GetPortAudioParams(params.audio_params(), input_device_); - if (Pa_OpenStream(&input_stream_, &p, nullptr, params.audio_params().sample_rate(), paFramesPerBufferUnspecified, paNoFlag, InputCallback, input_encoder_) == paNoError) { - if (Pa_StartStream(input_stream_) == paNoError) { + PaError r = Pa_OpenStream(&input_stream_, &p, nullptr, params.audio_params().sample_rate(), paFramesPerBufferUnspecified, paNoFlag, InputCallback, input_encoder_); + if (r == paNoError) { + //const PaStreamInfo* info = Pa_GetStreamInfo(input_stream_); + r = Pa_StartStream(input_stream_); + if (r == paNoError) { return true; } } + if (error_str) { + *error_str = Pa_GetErrorText(r); + } + StopRecording(); return false; } diff --git a/app/audio/audiomanager.h b/app/audio/audiomanager.h index bf71e2223..c9400316c 100644 --- a/app/audio/audiomanager.h +++ b/app/audio/audiomanager.h @@ -74,7 +74,7 @@ public: void HardReset(); - bool StartRecording(const EncodingParams ¶ms); + bool StartRecording(const EncodingParams ¶ms, QString *error_str = nullptr); void StopRecording(); diff --git a/app/codec/ffmpeg/ffmpegencoder.cpp b/app/codec/ffmpeg/ffmpegencoder.cpp index 19db89732..8a0462e2d 100644 --- a/app/codec/ffmpeg/ffmpegencoder.cpp +++ b/app/codec/ffmpeg/ffmpegencoder.cpp @@ -285,7 +285,7 @@ bool FFmpegEncoder::WriteAudio(SampleBufferPtr audio) } } - result = WriteAudioData(audio->audio_params(), const_cast(input_data), input_sample_count); + result = WriteAudioData(audio ? audio->audio_params() : params().audio_params(), const_cast(input_data), input_sample_count); if (input_data) { av_freep(&input_data[0]); diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 80fe1a444..d404fb5ed 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -1190,12 +1190,13 @@ void ViewerWidget::Play(bool in_to_out_only) encode_param.SetFilename(recording_filename_); encode_param.set_audio_bit_rate(OLIVE_CONFIG("AudioRecordingBitRate").toInt() * 1000); - if (AudioManager::instance()->StartRecording(encode_param)) { + QString error; + if (AudioManager::instance()->StartRecording(encode_param, &error)) { recording_ = true; controls_->SetPauseButtonRecordingState(true); recording_callback_->EnableRecordingOverlay(TimelineCoordinate(recording_range_.in(), recording_track_)); } else { - QMessageBox::critical(this, tr("Audio Recording"), tr("Failed to start audio recording")); + QMessageBox::critical(this, tr("Audio Recording"), tr("Failed to start audio recording: %1").arg(error)); return; } }