Report recorder errors

Stop scrcpy on recorder errors.

It was previously indirectly stopped by the demuxer, which failed to
push packets to a recorder in error. Report it directly instead:
 - it avoids to wait for the next demuxer call;
 - it will allow to open the target file from a separate thread and stop
   immediately on any I/O error.
This commit is contained in:
Romain Vimont
2023-02-10 18:10:24 +01:00
parent 0704441b16
commit 2517c9c31e
4 changed files with 41 additions and 8 deletions

View File

@@ -240,6 +240,9 @@ run_recorder(void *data) {
LOGD("Recorder thread ended");
recorder->cbs->on_ended(recorder, !recorder->failed,
recorder->cbs_userdata);
return 0;
}
@@ -387,10 +390,10 @@ sc_recorder_packet_sink_push(struct sc_packet_sink *sink,
}
bool
sc_recorder_init(struct sc_recorder *recorder,
const char *filename,
sc_recorder_init(struct sc_recorder *recorder, const char *filename,
enum sc_record_format format,
struct sc_size declared_frame_size) {
struct sc_size declared_frame_size,
const struct sc_recorder_callbacks *cbs, void *cbs_userdata) {
recorder->filename = strdup(filename);
if (!recorder->filename) {
LOG_OOM();
@@ -400,6 +403,10 @@ sc_recorder_init(struct sc_recorder *recorder,
recorder->format = format;
recorder->declared_frame_size = declared_frame_size;
assert(cbs && cbs->on_ended);
recorder->cbs = cbs;
recorder->cbs_userdata = cbs_userdata;
static const struct sc_packet_sink_ops ops = {
.open = sc_recorder_packet_sink_open,
.close = sc_recorder_packet_sink_close,