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();
}
bool AudioManager::StartRecording(const EncodingParams &params)
bool AudioManager::StartRecording(const EncodingParams &params, QString *error_str)
{
if (input_device_ == paNoDevice) {
return false;
@@ -203,12 +203,19 @@ bool AudioManager::StartRecording(const EncodingParams &params)
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;
}
+1 -1
View File
@@ -74,7 +74,7 @@ public:
void HardReset();
bool StartRecording(const EncodingParams &params);
bool StartRecording(const EncodingParams &params, QString *error_str = nullptr);
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) {
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.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;
}
}