diff options
Diffstat (limited to 'SDL_Core/mobile/android/AndroidVideoStreaming/src/main/java/com/batutin/android/androidvideostreaming/media/CodecInfoUtils.java')
-rw-r--r-- | SDL_Core/mobile/android/AndroidVideoStreaming/src/main/java/com/batutin/android/androidvideostreaming/media/CodecInfoUtils.java | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/SDL_Core/mobile/android/AndroidVideoStreaming/src/main/java/com/batutin/android/androidvideostreaming/media/CodecInfoUtils.java b/SDL_Core/mobile/android/AndroidVideoStreaming/src/main/java/com/batutin/android/androidvideostreaming/media/CodecInfoUtils.java new file mode 100644 index 000000000..435def48f --- /dev/null +++ b/SDL_Core/mobile/android/AndroidVideoStreaming/src/main/java/com/batutin/android/androidvideostreaming/media/CodecInfoUtils.java @@ -0,0 +1,65 @@ +package com.batutin.android.androidvideostreaming.media; + +import android.media.MediaCodecInfo; +import android.media.MediaCodecList; + +import com.batutin.android.androidvideostreaming.utils.ALog; + +import java.util.ArrayList; +import java.util.List; + +public class CodecInfoUtils { + + public static final String MIME_TYPE = "video/avc"; + + public static MediaCodecInfo selectFirstVideoAvcCodec() throws IllegalArgumentException { + return selectFirstCodec(MIME_TYPE); + } + + /** + * Returns the first codec capable of encoding the specified MIME type, or null if no + * match was found. + */ + public static MediaCodecInfo selectFirstCodec(String mimeType) throws IllegalArgumentException { + ALog.d("start getting MediaCodecInfo"); + List<MediaCodecInfo> infoList = getSupportedMediaCodecInfoList(mimeType); + if (infoList == null || infoList.size() <= 0) { + ALog.e("failed getting MediaCodecInfo"); + throw new IllegalArgumentException("no available codecs"); + } + MediaCodecInfo codecI = infoList.get(0); + ALog.d("MediaCodecInfo " + codecI.toString() + " found"); + return codecI; + } + + public static List<MediaCodecInfo> getSupportedMediaCodecInfoList(String mimeType) throws IllegalArgumentException { + ALog.d("start getting MediaCodecInfo list"); + int numCodecs = MediaCodecList.getCodecCount(); + if (numCodecs <= 0) { + ALog.e("failed getting MediaCodecInfo list"); + throw new IllegalArgumentException("no available codecs"); + } + List<MediaCodecInfo> infoList = new ArrayList<MediaCodecInfo>(1); + for (int i = 0; i < numCodecs; i++) { + MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i); + if (!codecInfo.isEncoder()) { + continue; + } + if (isCodecTypeMimeType(mimeType, codecInfo)) { + infoList.add(codecInfo); + } + } + ALog.d("MediaCodecInfo list " + infoList.toString() + " found"); + return infoList; + } + + private static boolean isCodecTypeMimeType(String mimeType, MediaCodecInfo codecInfo) { + String[] types = codecInfo.getSupportedTypes(); + for (int j = 0; j < types.length; j++) { + if (types[j].equalsIgnoreCase(mimeType)) { + return true; + } + } + return false; + } +}
\ No newline at end of file |