Write trailer from recorder thread
The recorder thread wrote the whole content except the trailer, which
was odd.
@@ -171,25 +171,8 @@ recorder_open(struct recorder *recorder, const AVCodec *input_codec) {
void
recorder_close(struct recorder *recorder) {
- if (recorder->header_written) {
- int ret = av_write_trailer(recorder->ctx);
- if (ret < 0) {
- LOGE("Failed to write trailer to %s", recorder->filename);
- recorder->failed = true;
- }
- } else {
- // the recorded file is empty
- recorder->failed = true;
- }
avio_close(recorder->ctx->pb);
avformat_free_context(recorder->ctx);
-
- if (recorder->failed) {
- LOGE("Recording failed to %s", recorder->filename);
- } else {
- const char *format_name = recorder_get_format_name(recorder->format);
- LOGI("Recording complete to %s file: %s", format_name, recorder->filename);
- }
}
static bool
@@ -317,7 +300,26 @@ run_recorder(void *data) {
sc_mutex_unlock(&recorder->mutex);
break;
}
+ }
+ if (!recorder->failed) {
+ if (recorder->header_written) {
+ int ret = av_write_trailer(recorder->ctx);
+ if (ret < 0) {
+ LOGE("Failed to write trailer to %s", recorder->filename);
+ recorder->failed = true;
+ }
+ } else {
+ // the recorded file is empty
+ recorder->failed = true;
+ }
+ }
+
+ if (recorder->failed) {
+ LOGE("Recording failed to %s", recorder->filename);
+ } else {
+ const char *format_name = recorder_get_format_name(recorder->format);
+ LOGI("Recording complete to %s file: %s", format_name, recorder->filename);
}
LOGD("Recorder thread ended");
