Factorize codec info listing
Make the listing of video and audio encoders share the same code. PR #5416 <https://github.com/Genymobile/scrcpy/pull/5416>
This commit is contained in:
parent
2c25fd7a80
commit
5474ae6bd6
@ -1,8 +1,5 @@
|
|||||||
package com.genymobile.scrcpy.util;
|
package com.genymobile.scrcpy.util;
|
||||||
|
|
||||||
import com.genymobile.scrcpy.audio.AudioCodec;
|
|
||||||
import com.genymobile.scrcpy.video.VideoCodec;
|
|
||||||
|
|
||||||
import android.media.MediaCodecInfo;
|
import android.media.MediaCodecInfo;
|
||||||
import android.media.MediaCodecList;
|
import android.media.MediaCodecList;
|
||||||
import android.media.MediaFormat;
|
import android.media.MediaFormat;
|
||||||
@ -13,24 +10,6 @@ import java.util.List;
|
|||||||
|
|
||||||
public final class CodecUtils {
|
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() {
|
private CodecUtils() {
|
||||||
// not instantiable
|
// not instantiable
|
||||||
}
|
}
|
||||||
@ -47,7 +26,7 @@ public final class CodecUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MediaCodecInfo[] getEncoders(MediaCodecList codecs, String mimeType) {
|
public static MediaCodecInfo[] getEncoders(MediaCodecList codecs, String mimeType) {
|
||||||
List<MediaCodecInfo> result = new ArrayList<>();
|
List<MediaCodecInfo> result = new ArrayList<>();
|
||||||
for (MediaCodecInfo codecInfo : codecs.getCodecInfos()) {
|
for (MediaCodecInfo codecInfo : codecs.getCodecInfos()) {
|
||||||
if (codecInfo.isEncoder() && Arrays.asList(codecInfo.getSupportedTypes()).contains(mimeType)) {
|
if (codecInfo.isEncoder() && Arrays.asList(codecInfo.getSupportedTypes()).contains(mimeType)) {
|
||||||
@ -56,26 +35,4 @@ public final class CodecUtils {
|
|||||||
}
|
}
|
||||||
return result.toArray(new MediaCodecInfo[result.size()]);
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package com.genymobile.scrcpy.util;
|
package com.genymobile.scrcpy.util;
|
||||||
|
|
||||||
|
import com.genymobile.scrcpy.audio.AudioCodec;
|
||||||
import com.genymobile.scrcpy.device.Device;
|
import com.genymobile.scrcpy.device.Device;
|
||||||
import com.genymobile.scrcpy.device.DeviceApp;
|
import com.genymobile.scrcpy.device.DeviceApp;
|
||||||
import com.genymobile.scrcpy.device.DisplayInfo;
|
import com.genymobile.scrcpy.device.DisplayInfo;
|
||||||
import com.genymobile.scrcpy.device.Size;
|
import com.genymobile.scrcpy.device.Size;
|
||||||
|
import com.genymobile.scrcpy.video.VideoCodec;
|
||||||
import com.genymobile.scrcpy.wrappers.DisplayManager;
|
import com.genymobile.scrcpy.wrappers.DisplayManager;
|
||||||
import com.genymobile.scrcpy.wrappers.ServiceManager;
|
import com.genymobile.scrcpy.wrappers.ServiceManager;
|
||||||
|
|
||||||
@ -14,6 +16,8 @@ import android.hardware.camera2.CameraCharacteristics;
|
|||||||
import android.hardware.camera2.CameraManager;
|
import android.hardware.camera2.CameraManager;
|
||||||
import android.hardware.camera2.params.StreamConfigurationMap;
|
import android.hardware.camera2.params.StreamConfigurationMap;
|
||||||
import android.media.MediaCodec;
|
import android.media.MediaCodec;
|
||||||
|
import android.media.MediaCodecInfo;
|
||||||
|
import android.media.MediaCodecList;
|
||||||
import android.util.Range;
|
import android.util.Range;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -28,32 +32,26 @@ public final class LogUtils {
|
|||||||
// not instantiable
|
// not instantiable
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String buildVideoEncoderListMessage() {
|
private static String buildEncoderListMessage(String type, Codec[] codecs) {
|
||||||
StringBuilder builder = new StringBuilder("List of video encoders:");
|
StringBuilder builder = new StringBuilder("List of ").append(type).append(" encoders:");
|
||||||
List<CodecUtils.DeviceEncoder> videoEncoders = CodecUtils.listVideoEncoders();
|
MediaCodecList codecList = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
|
||||||
if (videoEncoders.isEmpty()) {
|
for (Codec codec : codecs) {
|
||||||
builder.append("\n (none)");
|
MediaCodecInfo[] encoders = CodecUtils.getEncoders(codecList, codec.getMimeType());
|
||||||
} else {
|
for (MediaCodecInfo info : encoders) {
|
||||||
for (CodecUtils.DeviceEncoder encoder : videoEncoders) {
|
builder.append("\n --").append(type).append("-codec=").append(codec.getName());
|
||||||
builder.append("\n --video-codec=").append(encoder.getCodec().getName());
|
builder.append(" --").append(type).append("-encoder=").append(info.getName());
|
||||||
builder.append(" --video-encoder=").append(encoder.getInfo().getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String buildVideoEncoderListMessage() {
|
||||||
|
return buildEncoderListMessage("video", VideoCodec.values());
|
||||||
|
}
|
||||||
|
|
||||||
public static String buildAudioEncoderListMessage() {
|
public static String buildAudioEncoderListMessage() {
|
||||||
StringBuilder builder = new StringBuilder("List of audio encoders:");
|
return buildEncoderListMessage("audio", AudioCodec.values());
|
||||||
List<CodecUtils.DeviceEncoder> audioEncoders = CodecUtils.listAudioEncoders();
|
|
||||||
if (audioEncoders.isEmpty()) {
|
|
||||||
builder.append("\n (none)");
|
|
||||||
} else {
|
|
||||||
for (CodecUtils.DeviceEncoder encoder : audioEncoders) {
|
|
||||||
builder.append("\n --audio-codec=").append(encoder.getCodec().getName());
|
|
||||||
builder.append(" --audio-encoder=").append(encoder.getInfo().getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return builder.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String buildDisplayListMessage() {
|
public static String buildDisplayListMessage() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user