Add more details to --list-encoders output

Add more information about each codec (hw/sw, vendor, alias).

Before:

    [server] INFO: List of video encoders:
        --video-codec=h264 --video-encoder=c2.exynos.h264.encoder
        --video-codec=h264 --video-encoder=c2.android.avc.encoder
        --video-codec=h264 --video-encoder=OMX.google.h264.encoder
        --video-codec=h265 --video-encoder=c2.exynos.hevc.encoder
        --video-codec=h265 --video-encoder=c2.android.hevc.encoder
        --video-codec=av1 --video-encoder=c2.google.av1.encoder
        --video-codec=av1 --video-encoder=c2.android.av1.encoder
    // audio encoders omitted

After:

    [server] INFO: List of video encoders:
        --video-codec=h264 --video-encoder=c2.exynos.h264.encoder         (hw) [vendor]
        --video-codec=h264 --video-encoder=c2.android.avc.encoder         (sw)
        --video-codec=h264 --video-encoder=OMX.google.h264.encoder        (sw) (alias for c2.android.avc.encoder)
        --video-codec=h265 --video-encoder=c2.exynos.hevc.encoder         (hw) [vendor]
        --video-codec=h265 --video-encoder=c2.android.hevc.encoder        (sw)
        --video-codec=av1 --video-encoder=c2.google.av1.encoder           (hw) [vendor]
        --video-codec=av1 --video-encoder=c2.android.av1.encoder          (sw)
    // audio encoders omitted

PR #5416 <https://github.com/Genymobile/scrcpy/pull/5416>
This commit is contained in:
Romain Vimont 2024-10-24 23:50:54 +02:00
parent 5474ae6bd6
commit acff5b005c

View File

@ -1,5 +1,6 @@
package com.genymobile.scrcpy.util; package com.genymobile.scrcpy.util;
import com.genymobile.scrcpy.AndroidVersions;
import com.genymobile.scrcpy.audio.AudioCodec; 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;
@ -10,6 +11,7 @@ import com.genymobile.scrcpy.wrappers.DisplayManager;
import com.genymobile.scrcpy.wrappers.ServiceManager; import com.genymobile.scrcpy.wrappers.ServiceManager;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.graphics.Rect; import android.graphics.Rect;
import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraCharacteristics;
@ -18,6 +20,7 @@ import android.hardware.camera2.params.StreamConfigurationMap;
import android.media.MediaCodec; import android.media.MediaCodec;
import android.media.MediaCodecInfo; import android.media.MediaCodecInfo;
import android.media.MediaCodecList; import android.media.MediaCodecList;
import android.os.Build;
import android.util.Range; import android.util.Range;
import java.util.Collections; import java.util.Collections;
@ -38,8 +41,25 @@ public final class LogUtils {
for (Codec codec : codecs) { for (Codec codec : codecs) {
MediaCodecInfo[] encoders = CodecUtils.getEncoders(codecList, codec.getMimeType()); MediaCodecInfo[] encoders = CodecUtils.getEncoders(codecList, codec.getMimeType());
for (MediaCodecInfo info : encoders) { for (MediaCodecInfo info : encoders) {
int lineStart = builder.length();
builder.append("\n --").append(type).append("-codec=").append(codec.getName()); builder.append("\n --").append(type).append("-codec=").append(codec.getName());
builder.append(" --").append(type).append("-encoder=").append(info.getName()); builder.append(" --").append(type).append("-encoder=").append(info.getName());
if (Build.VERSION.SDK_INT >= AndroidVersions.API_29_ANDROID_10) {
int lineLength = builder.length() - lineStart;
final int column = 70;
if (lineLength < column) {
int padding = column - lineLength;
builder.append(String.format("%" + padding + "s", " "));
}
builder.append(" (").append(getHwCodecType(info)).append(')');
if (info.isVendor()) {
builder.append(" [vendor]");
}
if (info.isAlias()) {
builder.append(" (alias for ").append(info.getCanonicalName()).append(')');
}
}
} }
} }
@ -54,6 +74,17 @@ public final class LogUtils {
return buildEncoderListMessage("audio", AudioCodec.values()); return buildEncoderListMessage("audio", AudioCodec.values());
} }
@TargetApi(AndroidVersions.API_29_ANDROID_10)
private static String getHwCodecType(MediaCodecInfo info) {
if (info.isSoftwareOnly()) {
return "sw";
}
if (info.isHardwareAccelerated()) {
return "hw";
}
return "hybrid";
}
public static String buildDisplayListMessage() { public static String buildDisplayListMessage() {
StringBuilder builder = new StringBuilder("List of displays:"); StringBuilder builder = new StringBuilder("List of displays:");
DisplayManager displayManager = ServiceManager.getDisplayManager(); DisplayManager displayManager = ServiceManager.getDisplayManager();