Add support for AAC audio codec

Add option --audio-codec=aac.

PR #3757 <https://github.com/Genymobile/scrcpy/pull/3757>
This commit is contained in:
Romain Vimont 2023-02-18 19:30:36 +01:00
parent 839b842aa7
commit 4601735e51
8 changed files with 17 additions and 6 deletions

View file

@ -73,7 +73,7 @@ _scrcpy() {
return return
;; ;;
--audio-codec) --audio-codec)
COMPREPLY=($(compgen -W 'opus' -- "$cur")) COMPREPLY=($(compgen -W 'opus aac' -- "$cur"))
return return
;; ;;
--lock-video-orientation) --lock-video-orientation)

View file

@ -10,7 +10,7 @@ local arguments
arguments=( arguments=(
'--always-on-top[Make scrcpy window always on top \(above other windows\)]' '--always-on-top[Make scrcpy window always on top \(above other windows\)]'
'--audio-bit-rate=[Encode the audio at the given bit-rate]' '--audio-bit-rate=[Encode the audio at the given bit-rate]'
'--audio-codec=[Select the audio codec]:codec:(opus)' '--audio-codec=[Select the audio codec]:codec:(opus aac)'
{-b,--video-bit-rate=}'[Encode the video at the given bit-rate]' {-b,--video-bit-rate=}'[Encode the video at the given bit-rate]'
'--crop=[\[width\:height\:x\:y\] Crop the device screen on the server]' '--crop=[\[width\:height\:x\:y\] Crop the device screen on the server]'
{-d,--select-usb}'[Use USB device]' {-d,--select-usb}'[Use USB device]'

View file

@ -27,7 +27,7 @@ Default is 128K (128000).
.TP .TP
.BI "\-\-audio\-codec " name .BI "\-\-audio\-codec " name
Select an audio codec (opus). Select an audio codec (opus or aac).
Default is opus. Default is opus.

View file

@ -119,7 +119,7 @@ static const struct sc_option options[] = {
.longopt_id = OPT_AUDIO_CODEC, .longopt_id = OPT_AUDIO_CODEC,
.longopt = "audio-codec", .longopt = "audio-codec",
.argdesc = "name", .argdesc = "name",
.text = "Select an audio codec (opus).\n" .text = "Select an audio codec (opus or aac).\n"
"Default is opus.", "Default is opus.",
}, },
{ {
@ -1466,7 +1466,11 @@ parse_audio_codec(const char *optarg, enum sc_codec *codec) {
*codec = SC_CODEC_OPUS; *codec = SC_CODEC_OPUS;
return true; return true;
} }
LOGE("Unsupported audio codec: %s (expected opus)", optarg); if (!strcmp(optarg, "aac")) {
*codec = SC_CODEC_AAC;
return true;
}
LOGE("Unsupported audio codec: %s (expected opus or aac)", optarg);
return false; return false;
} }

View file

@ -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_H265 UINT32_C(0x68323635) // "h265" in ASCII
#define SC_CODEC_ID_AV1 UINT32_C(0x00617631) // "av1" 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_OPUS UINT32_C(0x6f707573) // "opus" in ASCII
#define SC_CODEC_ID_AAC UINT32_C(0x00616163) // "aac in ASCII"
switch (codec_id) { switch (codec_id) {
case SC_CODEC_ID_H264: case SC_CODEC_ID_H264:
return AV_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; return AV_CODEC_ID_AV1;
case SC_CODEC_ID_OPUS: case SC_CODEC_ID_OPUS:
return AV_CODEC_ID_OPUS; return AV_CODEC_ID_OPUS;
case SC_CODEC_ID_AAC:
return AV_CODEC_ID_AAC;
default: default:
LOGE("Unknown codec id 0x%08" PRIx32, codec_id); LOGE("Unknown codec id 0x%08" PRIx32, codec_id);
return AV_CODEC_ID_NONE; return AV_CODEC_ID_NONE;

View file

@ -28,6 +28,7 @@ enum sc_codec {
SC_CODEC_H265, SC_CODEC_H265,
SC_CODEC_AV1, SC_CODEC_AV1,
SC_CODEC_OPUS, SC_CODEC_OPUS,
SC_CODEC_AAC,
}; };
enum sc_lock_video_orientation { enum sc_lock_video_orientation {

View file

@ -167,6 +167,8 @@ sc_server_get_codec_name(enum sc_codec codec) {
return "av1"; return "av1";
case SC_CODEC_OPUS: case SC_CODEC_OPUS:
return "opus"; return "opus";
case SC_CODEC_AAC:
return "aac";
default: default:
return NULL; return NULL;
} }

View file

@ -3,7 +3,8 @@ package com.genymobile.scrcpy;
import android.media.MediaFormat; import android.media.MediaFormat;
public enum AudioCodec implements Codec { 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 int id; // 4-byte ASCII representation of the name
private final String name; private final String name;