Detect codec/encoder mismatch
Fail with an explicit error when the requested encoder does not match the requested codec. Refs #5066 <https://github.com/Genymobile/scrcpy/issues/5066>
This commit is contained in:
parent
f69ac40534
commit
0cc6f6aa09
@ -287,7 +287,13 @@ public final class AudioEncoder implements AsyncProcessor {
|
||||
if (encoderName != null) {
|
||||
Ln.d("Creating audio encoder by name: '" + encoderName + "'");
|
||||
try {
|
||||
return MediaCodec.createByCodecName(encoderName);
|
||||
MediaCodec mediaCodec = MediaCodec.createByCodecName(encoderName);
|
||||
String mimeType = Codec.getMimeType(mediaCodec);
|
||||
if (!codec.getMimeType().equals(mimeType)) {
|
||||
Ln.e("Audio encoder type for \"" + encoderName + "\" (" + mimeType + ") does not match codec type (" + codec.getMimeType() + ")");
|
||||
throw new ConfigurationException("Incorrect encoder type: " + encoderName);
|
||||
}
|
||||
return mediaCodec;
|
||||
} catch (IllegalArgumentException e) {
|
||||
Ln.e("Audio encoder '" + encoderName + "' for " + codec.getName() + " not found\n" + LogUtils.buildAudioEncoderListMessage());
|
||||
throw new ConfigurationException("Unknown encoder: " + encoderName);
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.genymobile.scrcpy.util;
|
||||
|
||||
import android.media.MediaCodec;
|
||||
|
||||
public interface Codec {
|
||||
|
||||
enum Type {
|
||||
@ -14,4 +16,9 @@ public interface Codec {
|
||||
String getName();
|
||||
|
||||
String getMimeType();
|
||||
|
||||
static String getMimeType(MediaCodec codec) {
|
||||
String[] types = codec.getCodecInfo().getSupportedTypes();
|
||||
return types.length > 0 ? types[0] : null;
|
||||
}
|
||||
}
|
||||
|
@ -205,7 +205,13 @@ public class SurfaceEncoder implements AsyncProcessor {
|
||||
if (encoderName != null) {
|
||||
Ln.d("Creating encoder by name: '" + encoderName + "'");
|
||||
try {
|
||||
return MediaCodec.createByCodecName(encoderName);
|
||||
MediaCodec mediaCodec = MediaCodec.createByCodecName(encoderName);
|
||||
String mimeType = Codec.getMimeType(mediaCodec);
|
||||
if (!codec.getMimeType().equals(mimeType)) {
|
||||
Ln.e("Video encoder type for \"" + encoderName + "\" (" + mimeType + ") does not match codec type (" + codec.getMimeType() + ")");
|
||||
throw new ConfigurationException("Incorrect encoder type: " + encoderName);
|
||||
}
|
||||
return mediaCodec;
|
||||
} catch (IllegalArgumentException e) {
|
||||
Ln.e("Video encoder '" + encoderName + "' for " + codec.getName() + " not found\n" + LogUtils.buildVideoEncoderListMessage());
|
||||
throw new ConfigurationException("Unknown encoder: " + encoderName);
|
||||
|
Loading…
x
Reference in New Issue
Block a user