mirror of https://github.com/Genymobile/scrcpy
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.5 KiB
Java
79 lines
2.5 KiB
Java
package com.genymobile.scrcpy;
|
|
|
|
import android.media.MediaCodecInfo;
|
|
import android.media.MediaCodecList;
|
|
import android.media.MediaFormat;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
public final class CodecUtils {
|
|
|
|
public static final class DeviceEncoder {
|
|
private final Codec codec;
|
|
private final MediaCodecInfo info;
|
|
|
|
DeviceEncoder(Codec codec, MediaCodecInfo info) {
|
|
this.codec = codec;
|
|
this.info = info;
|
|
}
|
|
|
|
public Codec getCodec() {
|
|
return codec;
|
|
}
|
|
|
|
public MediaCodecInfo getInfo() {
|
|
return info;
|
|
}
|
|
}
|
|
|
|
private CodecUtils() {
|
|
// not instantiable
|
|
}
|
|
|
|
public static void setCodecOption(MediaFormat format, String key, Object value) {
|
|
if (value instanceof Integer) {
|
|
format.setInteger(key, (Integer) value);
|
|
} else if (value instanceof Long) {
|
|
format.setLong(key, (Long) value);
|
|
} else if (value instanceof Float) {
|
|
format.setFloat(key, (Float) value);
|
|
} else if (value instanceof String) {
|
|
format.setString(key, (String) value);
|
|
}
|
|
}
|
|
|
|
private static MediaCodecInfo[] getEncoders(MediaCodecList codecs, String mimeType) {
|
|
List<MediaCodecInfo> result = new ArrayList<>();
|
|
for (MediaCodecInfo codecInfo : codecs.getCodecInfos()) {
|
|
if (codecInfo.isEncoder() && Arrays.asList(codecInfo.getSupportedTypes()).contains(mimeType)) {
|
|
result.add(codecInfo);
|
|
}
|
|
}
|
|
return result.toArray(new MediaCodecInfo[result.size()]);
|
|
}
|
|
|
|
public static List<DeviceEncoder> listVideoEncoders() {
|
|
List<DeviceEncoder> encoders = new ArrayList<>();
|
|
MediaCodecList codecs = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
|
|
for (VideoCodec codec : VideoCodec.values()) {
|
|
for (MediaCodecInfo info : getEncoders(codecs, codec.getMimeType())) {
|
|
encoders.add(new DeviceEncoder(codec, info));
|
|
}
|
|
}
|
|
return encoders;
|
|
}
|
|
|
|
public static List<DeviceEncoder> listAudioEncoders() {
|
|
List<DeviceEncoder> encoders = new ArrayList<>();
|
|
MediaCodecList codecs = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
|
|
for (AudioCodec codec : AudioCodec.values()) {
|
|
for (MediaCodecInfo info : getEncoders(codecs, codec.getMimeType())) {
|
|
encoders.add(new DeviceEncoder(codec, info));
|
|
}
|
|
}
|
|
return encoders;
|
|
}
|
|
}
|