From acff5b005ce9f2efae80adad09d2e77ba3052460 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Thu, 24 Oct 2024 23:50:54 +0200 Subject: [PATCH] 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 --- .../com/genymobile/scrcpy/util/LogUtils.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java b/server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java index f2837f40..2b780caf 100644 --- a/server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java +++ b/server/src/main/java/com/genymobile/scrcpy/util/LogUtils.java @@ -1,5 +1,6 @@ package com.genymobile.scrcpy.util; +import com.genymobile.scrcpy.AndroidVersions; import com.genymobile.scrcpy.audio.AudioCodec; import com.genymobile.scrcpy.device.Device; import com.genymobile.scrcpy.device.DeviceApp; @@ -10,6 +11,7 @@ import com.genymobile.scrcpy.wrappers.DisplayManager; import com.genymobile.scrcpy.wrappers.ServiceManager; import android.annotation.SuppressLint; +import android.annotation.TargetApi; import android.graphics.Rect; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; @@ -18,6 +20,7 @@ import android.hardware.camera2.params.StreamConfigurationMap; import android.media.MediaCodec; import android.media.MediaCodecInfo; import android.media.MediaCodecList; +import android.os.Build; import android.util.Range; import java.util.Collections; @@ -38,8 +41,25 @@ public final class LogUtils { for (Codec codec : codecs) { MediaCodecInfo[] encoders = CodecUtils.getEncoders(codecList, codec.getMimeType()); for (MediaCodecInfo info : encoders) { + int lineStart = builder.length(); builder.append("\n --").append(type).append("-codec=").append(codec.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()); } + @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() { StringBuilder builder = new StringBuilder("List of displays:"); DisplayManager displayManager = ServiceManager.getDisplayManager();