From 042af5ca492052a292bf5bdbe22e539f3a770640 Mon Sep 17 00:00:00 2001 From: Eugen Pechanec Date: Sat, 25 Jun 2022 13:41:42 +0200 Subject: [PATCH] Extract MediaCodecListCompat.getEncoderInfosForType --- .../genymobile/scrcpy/MediaCodecListCompat.java | 14 ++++++++++++++ .../com/genymobile/scrcpy/ScreenEncoder.java | 16 ++-------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/MediaCodecListCompat.java b/server/src/main/java/com/genymobile/scrcpy/MediaCodecListCompat.java index 1b5e50eb..07ecfd8f 100644 --- a/server/src/main/java/com/genymobile/scrcpy/MediaCodecListCompat.java +++ b/server/src/main/java/com/genymobile/scrcpy/MediaCodecListCompat.java @@ -5,7 +5,9 @@ import android.media.MediaCodecList; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import static android.media.MediaCodecList.REGULAR_CODECS; import static android.os.Build.VERSION.SDK_INT; @@ -36,6 +38,18 @@ abstract class MediaCodecListCompat { @NonNull abstract MediaCodecInfo[] getCodecInfos(); + @NonNull + final MediaCodecInfo[] getEncoderInfosForType(@NonNull String mimeType) { + List result = new ArrayList<>(); + MediaCodecInfo[] codecInfos = MediaCodecListCompat.regular().getCodecInfos(); + for (MediaCodecInfo codecInfo : codecInfos) { + if (codecInfo.isEncoder() && Arrays.asList(codecInfo.getSupportedTypes()).contains(mimeType)) { + result.add(codecInfo); + } + } + return result.toArray(new MediaCodecInfo[result.size()]); + } + @SuppressWarnings("deprecation") private static class Backport extends MediaCodecListCompat { private final MediaCodecInfo[] mCodecInfos; diff --git a/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java b/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java index 8381edc2..8e561a0c 100644 --- a/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java +++ b/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java @@ -13,8 +13,6 @@ import android.view.Surface; import java.io.FileDescriptor; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -201,24 +199,14 @@ public class ScreenEncoder implements Device.RotationListener { IO.writeFully(fd, headerBuffer); } - private static MediaCodecInfo[] listEncoders() { - List result = new ArrayList<>(); - MediaCodecInfo[] codecInfos = MediaCodecListCompat.regular().getCodecInfos(); - for (MediaCodecInfo codecInfo : codecInfos) { - if (codecInfo.isEncoder() && Arrays.asList(codecInfo.getSupportedTypes()).contains(MediaFormat.MIMETYPE_VIDEO_AVC)) { - result.add(codecInfo); - } - } - return result.toArray(new MediaCodecInfo[result.size()]); - } - private static MediaCodec createCodec(String encoderName) throws IOException { if (encoderName != null) { Ln.d("Creating encoder by name: '" + encoderName + "'"); try { return MediaCodec.createByCodecName(encoderName); } catch (IllegalArgumentException e) { - MediaCodecInfo[] encoders = listEncoders(); + MediaCodecInfo[] encoders = MediaCodecListCompat.regular() + .getEncoderInfosForType(MediaFormat.MIMETYPE_VIDEO_AVC); throw new InvalidEncoderException(encoderName, encoders); } }