diff --git a/app/scrcpy.1 b/app/scrcpy.1 index 359bac84..a845d128 100644 --- a/app/scrcpy.1 +++ b/app/scrcpy.1 @@ -27,7 +27,7 @@ Default is 196K (196000). .TP .BI "\-\-audio\-codec " name -Select an audio codec (opus). +Select an audio codec (opus or aac). Default is opus. diff --git a/app/src/cli.c b/app/src/cli.c index 678862ed..c69abc38 100644 --- a/app/src/cli.c +++ b/app/src/cli.c @@ -113,7 +113,7 @@ static const struct sc_option options[] = { .longopt_id = OPT_AUDIO_CODEC, .longopt = "audio-codec", .argdesc = "name", - .text = "Select an audio codec (opus).\n" + .text = "Select an audio codec (opus or aac).\n" "Default is opus.", }, { @@ -1433,6 +1433,10 @@ parse_audio_codec(const char *optarg, enum sc_codec *codec) { *codec = SC_CODEC_OPUS; return true; } + if (!strcmp(optarg, "aac")) { + *codec = SC_CODEC_AAC; + return true; + } LOGE("Unsupported audio codec: %s (expected opus)", optarg); return false; } diff --git a/app/src/demuxer.c b/app/src/demuxer.c index 482f2e04..64bf30a3 100644 --- a/app/src/demuxer.c +++ b/app/src/demuxer.c @@ -24,6 +24,7 @@ sc_demuxer_to_avcodec_id(uint32_t codec_id) { #define SC_CODEC_ID_H265 UINT32_C(0x68323635) // "h265" in ASCII #define SC_CODEC_ID_AV1 UINT32_C(0x00617631) // "av1" in ASCII #define SC_CODEC_ID_OPUS UINT32_C(0x6f707573) // "opus" in ASCII +#define SC_CODEC_ID_AAC UINT32_C(0x00616163) // "aac in ASCII" switch (codec_id) { case SC_CODEC_ID_H264: return AV_CODEC_ID_H264; @@ -33,6 +34,8 @@ sc_demuxer_to_avcodec_id(uint32_t codec_id) { return AV_CODEC_ID_AV1; case SC_CODEC_ID_OPUS: return AV_CODEC_ID_OPUS; + case SC_CODEC_ID_AAC: + return AV_CODEC_ID_AAC; default: LOGE("Unknown codec id 0x%08" PRIx32, codec_id); return AV_CODEC_ID_NONE; diff --git a/app/src/options.h b/app/src/options.h index f2ce1d89..e96f62cb 100644 --- a/app/src/options.h +++ b/app/src/options.h @@ -28,6 +28,7 @@ enum sc_codec { SC_CODEC_H265, SC_CODEC_AV1, SC_CODEC_OPUS, + SC_CODEC_AAC, }; enum sc_lock_video_orientation { diff --git a/app/src/server.c b/app/src/server.c index 53573954..a7b23591 100644 --- a/app/src/server.c +++ b/app/src/server.c @@ -167,6 +167,8 @@ sc_server_get_codec_name(enum sc_codec codec) { return "av1"; case SC_CODEC_OPUS: return "opus"; + case SC_CODEC_AAC: + return "aac"; default: return NULL; } diff --git a/server/src/main/java/com/genymobile/scrcpy/AudioCodec.java b/server/src/main/java/com/genymobile/scrcpy/AudioCodec.java index 4d9e3201..dc000e98 100644 --- a/server/src/main/java/com/genymobile/scrcpy/AudioCodec.java +++ b/server/src/main/java/com/genymobile/scrcpy/AudioCodec.java @@ -3,7 +3,8 @@ package com.genymobile.scrcpy; import android.media.MediaFormat; public enum AudioCodec implements Codec { - OPUS(0x6f_70_75_73, "opus", MediaFormat.MIMETYPE_AUDIO_OPUS); + OPUS(0x6f_70_75_73, "opus", MediaFormat.MIMETYPE_AUDIO_OPUS), + AAC(0x00_61_61_63, "aac", MediaFormat.MIMETYPE_AUDIO_AAC); private final int id; // 4-byte ASCII representation of the name private final String name;