Skip to content

Commit 4768d3f

Browse files
committed
Extract unknown encoder error message
This will allow to reuse the same code for audio encoder selection. PR #3757 <Genymobile/scrcpy#3757>
1 parent d558c1c commit 4768d3f

File tree

2 files changed

+26
-27
lines changed

2 files changed

+26
-27
lines changed

server/src/main/java/com/genymobile/scrcpy/CodecUtils.java

+25
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,29 @@ public static void setCodecOption(MediaFormat format, String key, Object value)
2525
format.setString(key, (String) value);
2626
}
2727
}
28+
29+
public static String buildUnknownEncoderMessage(Codec codec, String encoderName) {
30+
StringBuilder msg = new StringBuilder("Encoder '").append(encoderName).append("' for ").append(codec.getName()).append(" not found");
31+
MediaCodecInfo[] encoders = listEncoders(codec.getMimeType());
32+
if (encoders != null && encoders.length > 0) {
33+
msg.append("\nTry to use one of the available encoders:");
34+
String codecOption = codec.getType() == Codec.Type.VIDEO ? "video-codec" : "audio-codec";
35+
for (MediaCodecInfo encoder : encoders) {
36+
msg.append("\n scrcpy --").append(codecOption).append("=").append(codec.getName());
37+
msg.append(" --encoder='").append(encoder.getName()).append("'");
38+
}
39+
}
40+
return msg.toString();
41+
}
42+
43+
private static MediaCodecInfo[] listEncoders(String mimeType) {
44+
List<MediaCodecInfo> result = new ArrayList<>();
45+
MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
46+
for (MediaCodecInfo codecInfo : list.getCodecInfos()) {
47+
if (codecInfo.isEncoder() && Arrays.asList(codecInfo.getSupportedTypes()).contains(mimeType)) {
48+
result.add(codecInfo);
49+
}
50+
}
51+
return result.toArray(new MediaCodecInfo[result.size()]);
52+
}
2853
}

server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java

+1-27
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import android.graphics.Rect;
66
import android.media.MediaCodec;
77
import android.media.MediaCodecInfo;
8-
import android.media.MediaCodecList;
98
import android.media.MediaFormat;
109
import android.os.Build;
1110
import android.os.IBinder;
@@ -14,8 +13,6 @@
1413

1514
import java.io.IOException;
1615
import java.nio.ByteBuffer;
17-
import java.util.ArrayList;
18-
import java.util.Arrays;
1916
import java.util.List;
2017
import java.util.concurrent.atomic.AtomicBoolean;
2118

@@ -199,24 +196,13 @@ private boolean encode(MediaCodec codec, Streamer streamer) throws IOException {
199196
return !eof;
200197
}
201198

202-
private static MediaCodecInfo[] listEncoders(String videoMimeType) {
203-
List<MediaCodecInfo> result = new ArrayList<>();
204-
MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
205-
for (MediaCodecInfo codecInfo : list.getCodecInfos()) {
206-
if (codecInfo.isEncoder() && Arrays.asList(codecInfo.getSupportedTypes()).contains(videoMimeType)) {
207-
result.add(codecInfo);
208-
}
209-
}
210-
return result.toArray(new MediaCodecInfo[result.size()]);
211-
}
212-
213199
private static MediaCodec createMediaCodec(Codec codec, String encoderName) throws IOException, ConfigurationException {
214200
if (encoderName != null) {
215201
Ln.d("Creating encoder by name: '" + encoderName + "'");
216202
try {
217203
return MediaCodec.createByCodecName(encoderName);
218204
} catch (IllegalArgumentException e) {
219-
Ln.e(buildUnknownEncoderMessage(codec, encoderName));
205+
Ln.e(CodecUtils.buildUnknownEncoderMessage(codec, encoderName));
220206
throw new ConfigurationException("Unknown encoder: " + encoderName);
221207
}
222208
}
@@ -225,18 +211,6 @@ private static MediaCodec createMediaCodec(Codec codec, String encoderName) thro
225211
return mediaCodec;
226212
}
227213

228-
private static String buildUnknownEncoderMessage(Codec codec, String encoderName) {
229-
StringBuilder msg = new StringBuilder("Encoder '").append(encoderName).append("' for ").append(codec.getName()).append(" not found");
230-
MediaCodecInfo[] encoders = listEncoders(codec.getMimeType());
231-
if (encoders != null && encoders.length > 0) {
232-
msg.append("\nTry to use one of the available encoders:");
233-
for (MediaCodecInfo encoder : encoders) {
234-
msg.append("\n scrcpy --video-codec=").append(codec.getName()).append(" --encoder='").append(encoder.getName()).append("'");
235-
}
236-
}
237-
return msg.toString();
238-
}
239-
240214
private static MediaFormat createFormat(String videoMimeType, int bitRate, int maxFps, List<CodecOption> codecOptions) {
241215
MediaFormat format = new MediaFormat();
242216
format.setString(MediaFormat.KEY_MIME, videoMimeType);

0 commit comments

Comments
 (0)