Extract MediaCodecListCompat.getEncoderInfosForType

This commit is contained in:
Eugen Pechanec 2022-06-25 13:41:42 +02:00
parent 953ba1021f
commit 042af5ca49
No known key found for this signature in database
GPG key ID: 1E110C960179440E
2 changed files with 16 additions and 14 deletions

View file

@ -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<MediaCodecInfo> 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;

View file

@ -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<MediaCodecInfo> 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);
}
}