Fix wav audio recording

Always use `av_wrte_trailer()` even for audio recordings, because an
invalid wav file was generated otherwise.
This commit is contained in:
Ruben 2024-01-24 11:39:48 +11:00 committed by GitHub
parent f915ec5972
commit 2ad7dd1a79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 11 deletions

View File

@ -339,34 +339,34 @@ recording::MediaRet recording::MediaRecorder::Record(const char *fname, int widt
ret = setup_common(fname);
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
// video stream
ret = setup_video_stream_info(width, height, depth);
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
ret = setup_video_stream(width, height);
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
// audio stream
ret = setup_audio_stream();
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
// last details
ret = finish_setup(fname);
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
return MRET_OK;
@ -409,12 +409,12 @@ recording::MediaRet recording::MediaRecorder::AddFrame(const uint8_t *vid)
return MRET_OK;
}
void recording::MediaRecorder::Stop()
void recording::MediaRecorder::Stop(bool initSuccess)
{
if (oc)
{
// write the trailer; must be called before av_codec_close()
if (!audioOnlyRecording)
if (initSuccess) // only call av_write_trailer() if initialization went ok
av_write_trailer(oc);
}
isRecording = false;
@ -521,21 +521,21 @@ recording::MediaRet recording::MediaRecorder::Record(const char *fname)
ret = setup_common(fname);
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
// audio stream
ret = setup_audio_stream();
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
// last details
ret = finish_setup(fname);
if (ret != MRET_OK)
{
Stop();
Stop(false);
return ret;
}
return MRET_OK;

View File

@ -67,7 +67,7 @@ class MediaRecorder
// start audio only
MediaRet Record(const char *fname);
// stop both
void Stop();
void Stop(bool initSuccess = true);
bool IsRecording()
{
return isRecording;