From d6bcde565f8155b6a51ce4682ada367fe62d5a18 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sun, 7 May 2023 12:23:51 +0200 Subject: [PATCH] Accept .m4a and .mka These are just aliases for mp4 and mkv when there is no video stream. PR #3978 --- app/src/cli.c | 12 ++++++++++++ app/src/options.h | 8 ++++++++ app/src/recorder.c | 11 ++++++++--- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/src/cli.c b/app/src/cli.c index 4b895cd2..40fe242e 100644 --- a/app/src/cli.c +++ b/app/src/cli.c @@ -1487,6 +1487,12 @@ get_record_format(const char *name) { if (!strcmp(name, "mkv")) { return SC_RECORD_FORMAT_MKV; } + if (!strcmp(name, "m4a")) { + return SC_RECORD_FORMAT_M4A; + } + if (!strcmp(name, "mka")) { + return SC_RECORD_FORMAT_MKA; + } return 0; } @@ -1974,6 +1980,12 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[], LOGW("Recording does not support RAW audio codec"); return false; } + + if (opts->video + && sc_record_format_is_audio_only(opts->record_format)) { + LOGE("Audio container does not support video stream"); + return false; + } } if (opts->audio_codec == SC_CODEC_RAW) { diff --git a/app/src/options.h b/app/src/options.h index 4edf3f32..2424638f 100644 --- a/app/src/options.h +++ b/app/src/options.h @@ -21,8 +21,16 @@ enum sc_record_format { SC_RECORD_FORMAT_AUTO, SC_RECORD_FORMAT_MP4, SC_RECORD_FORMAT_MKV, + SC_RECORD_FORMAT_M4A, + SC_RECORD_FORMAT_MKA, }; +static inline bool +sc_record_format_is_audio_only(enum sc_record_format fmt) { + return fmt == SC_RECORD_FORMAT_M4A + || fmt == SC_RECORD_FORMAT_MKA; +} + enum sc_codec { SC_CODEC_H264, SC_CODEC_H265, diff --git a/app/src/recorder.c b/app/src/recorder.c index 5cbe6873..10102ec4 100644 --- a/app/src/recorder.c +++ b/app/src/recorder.c @@ -60,9 +60,14 @@ sc_recorder_queue_clear(struct sc_recorder_queue *queue) { static const char * sc_recorder_get_format_name(enum sc_record_format format) { switch (format) { - case SC_RECORD_FORMAT_MP4: return "mp4"; - case SC_RECORD_FORMAT_MKV: return "matroska"; - default: return NULL; + case SC_RECORD_FORMAT_MP4: + case SC_RECORD_FORMAT_M4A: + return "mp4"; + case SC_RECORD_FORMAT_MKV: + case SC_RECORD_FORMAT_MKA: + return "matroska"; + default: + return NULL; } }