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:
parent
839b842aa7
commit
4601735e51
8 changed files with 17 additions and 6 deletions
|
@ -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)
|
||||||
|
|
|
@ -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]'
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue