audiomanager: fix crash and return error text if applicable

This commit is contained in:
itsmattkc
2022-05-05 11:47:53 -07:00
parent fd692e6910
commit 591d02bdd6
4 changed files with 15 additions and 7 deletions
+10 -3
View File
@@ -189,7 +189,7 @@ void AudioManager::HardReset()
Pa_Initialize(); Pa_Initialize();
} }
bool AudioManager::StartRecording(const EncodingParams &params) bool AudioManager::StartRecording(const EncodingParams &params, QString *error_str)
{ {
if (input_device_ == paNoDevice) { if (input_device_ == paNoDevice) {
return false; return false;
@@ -203,12 +203,19 @@ bool AudioManager::StartRecording(const EncodingParams &params)
PaStreamParameters p = GetPortAudioParams(params.audio_params(), input_device_); 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) { PaError r = Pa_OpenStream(&input_stream_, &p, nullptr, params.audio_params().sample_rate(), paFramesPerBufferUnspecified, paNoFlag, InputCallback, input_encoder_);
if (Pa_StartStream(input_stream_) == paNoError) { if (r == paNoError) {
//const PaStreamInfo* info = Pa_GetStreamInfo(input_stream_);
r = Pa_StartStream(input_stream_);
if (r == paNoError) {
return true; return true;
} }
} }
if (error_str) {
*error_str = Pa_GetErrorText(r);
}
StopRecording(); StopRecording();
return false; return false;
} }
+1 -1
View File
@@ -74,7 +74,7 @@ public:
void HardReset(); void HardReset();
bool StartRecording(const EncodingParams &params); bool StartRecording(const EncodingParams &params, QString *error_str = nullptr);
void StopRecording(); void StopRecording();
+1 -1
View File
@@ -285,7 +285,7 @@ bool FFmpegEncoder::WriteAudio(SampleBufferPtr audio)
} }
} }
result = WriteAudioData(audio->audio_params(), const_cast<const uint8_t**>(input_data), input_sample_count); result = WriteAudioData(audio ? audio->audio_params() : params().audio_params(), const_cast<const uint8_t**>(input_data), input_sample_count);
if (input_data) { if (input_data) {
av_freep(&input_data[0]); av_freep(&input_data[0]);
+3 -2
View File
@@ -1190,12 +1190,13 @@ void ViewerWidget::Play(bool in_to_out_only)
encode_param.SetFilename(recording_filename_); encode_param.SetFilename(recording_filename_);
encode_param.set_audio_bit_rate(OLIVE_CONFIG("AudioRecordingBitRate").toInt() * 1000); 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; recording_ = true;
controls_->SetPauseButtonRecordingState(true); controls_->SetPauseButtonRecordingState(true);
recording_callback_->EnableRecordingOverlay(TimelineCoordinate(recording_range_.in(), recording_track_)); recording_callback_->EnableRecordingOverlay(TimelineCoordinate(recording_range_.in(), recording_track_));
} else { } 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; return;
} }
} }