android.media.MediaCodecList# getCodecInfoAt ( ) 源码实例Demo

下面列出了android.media.MediaCodecList# getCodecInfoAt ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: haven   文件: VideoEncoder.java

/**
 * Returns the first codec capable of encoding the specified MIME type, or
 * null if no match was found.
 */
private static MediaCodecInfo selectCodec(String mimeType)
{
    int numCodecs = MediaCodecList.getCodecCount();
    for (int i = 0; i < numCodecs; i++)
    {
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        if (!codecInfo.isEncoder())
        {
            continue;
        }
        String[] types = codecInfo.getSupportedTypes();
        for (int j = 0; j < types.length; j++)
        {
            if (types[j].equalsIgnoreCase(mimeType))
            {
                return codecInfo;
            }
        }
    }
    return null;
}
 

/**
 * select the first codec that match a specific MIME type
 *
 * @param mimeType
 * @return
 */
private static final MediaCodecInfo selectAudioCodec(final String mimeType) {
    if (DEBUG) Log.v(TAG, "selectAudioCodec:");

    MediaCodecInfo result = null;
    // get the list of available codecs
    final int numCodecs = MediaCodecList.getCodecCount();
    LOOP:
    for (int i = 0; i < numCodecs; i++) {
        final MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        if (!codecInfo.isEncoder()) {    // skipp decoder
            continue;
        }
        final String[] types = codecInfo.getSupportedTypes();
        for (int j = 0; j < types.length; j++) {
            if (DEBUG) Log.i(TAG, "supportedType:" + codecInfo.getName() + ",MIME=" + types[j]);
            if (types[j].equalsIgnoreCase(mimeType)) {
                if (result == null) {
                    result = codecInfo;
                    break LOOP;
                }
            }
        }
    }
    return result;
}
 
源代码3 项目: prettygoodmusicplayer   文件: Utils.java

/**
 * Retrieve decodeable media types in the system
 * @return A set containing the supported media types
 */
private static Set<String> getSupportedTypes() {
	// These MediaCodecList methods are deprecated in API 21, but the newer
	// ones aren't supported in API < 21
	int numCodecs = MediaCodecList.getCodecCount();
	Set<String> supportedMediaTypes = new HashSet<>();

	for (int codec = 0; codec < numCodecs; codec++) {
		MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(codec);

		if (codecInfo.isEncoder()) {
			continue;
		}

		String[] codecTypes = codecInfo.getSupportedTypes();
		for (int type = 0; type < codecTypes.length; type++) {
			if (isMediaAudio(codecTypes[type]) && !supportedMediaTypes.contains(codecTypes[type])) {
				Log.d(TAG, codecTypes[type] + " is decodeable by " + codecInfo.getName());
				supportedMediaTypes.add(codecTypes[type]);
			}
		}
	}
	return supportedMediaTypes;
}
 
源代码4 项目: AndroidPlayground   文件: MainActivity.java

private static MediaCodecInfo selectCodec(String mimeType) {
    int numCodecs = MediaCodecList.getCodecCount();
    for (int i = 0; i < numCodecs; i++) {
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);

        if (!codecInfo.isEncoder()) {
            continue;
        }

        String[] types = codecInfo.getSupportedTypes();
        for (int j = 0; j < types.length; j++) {
            if (types[j].equalsIgnoreCase(mimeType)) {
                return codecInfo;
            }
        }
    }
    return null;
}
 
源代码5 项目: Telegram   文件: MediaController.java

@SuppressLint("NewApi")
public static MediaCodecInfo selectCodec(String mimeType) {
    int numCodecs = MediaCodecList.getCodecCount();
    MediaCodecInfo lastCodecInfo = null;
    for (int i = 0; i < numCodecs; i++) {
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        if (!codecInfo.isEncoder()) {
            continue;
        }
        String[] types = codecInfo.getSupportedTypes();
        for (String type : types) {
            if (type.equalsIgnoreCase(mimeType)) {
                lastCodecInfo = codecInfo;
                String name = lastCodecInfo.getName();
                if (name != null) {
                    if (!name.equals("OMX.SEC.avc.enc")) {
                        return lastCodecInfo;
                    } else if (name.equals("OMX.SEC.AVC.Encoder")) {
                        return lastCodecInfo;
                    }
                }
            }
        }
    }
    return lastCodecInfo;
}
 
源代码6 项目: VideoCompressor   文件: VideoController.java

public static MediaCodecInfo selectCodec(String mimeType) {
    int numCodecs = MediaCodecList.getCodecCount();
    MediaCodecInfo lastCodecInfo = null;
    for (int i = 0; i < numCodecs; i++) {
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        if (!codecInfo.isEncoder()) {
            continue;
        }
        String[] types = codecInfo.getSupportedTypes();
        for (String type : types) {
            if (type.equalsIgnoreCase(mimeType)) {
                lastCodecInfo = codecInfo;
                if (!lastCodecInfo.getName().equals("OMX.SEC.avc.enc")) {
                    return lastCodecInfo;
                } else if (lastCodecInfo.getName().equals("OMX.SEC.AVC.Encoder")) {
                    return lastCodecInfo;
                }
            }
        }
    }
    return lastCodecInfo;
}
 
源代码7 项目: In77Camera   文件: MediaVideoEncoder.java

/**
 * select the first codec that match a specific MIME type
 * @param mimeType
 * @return null if no codec matched
 */
protected static final MediaCodecInfo selectVideoCodec(final String mimeType) {
	if (DEBUG) Log.v(TAG, "selectVideoCodec:");

	// get the list of available codecs
    final int numCodecs = MediaCodecList.getCodecCount();
    for (int i = 0; i < numCodecs; i++) {
    	final MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);

        if (!codecInfo.isEncoder()) {	// skipp decoder
            continue;
        }
        // select first codec that match a specific MIME type and color format
        final String[] types = codecInfo.getSupportedTypes();
        for (int j = 0; j < types.length; j++) {
            if (types[j].equalsIgnoreCase(mimeType)) {
            	if (DEBUG) Log.i(TAG, "codec:" + codecInfo.getName() + ",MIME=" + types[j]);
        		final int format = selectColorFormat(codecInfo, mimeType);
            	if (format > 0) {
            		return codecInfo;
            	}
            }
        }
    }
    return null;
}
 

@SuppressWarnings("deprecation")
protected final MediaCodecInfo selectVideoCodec(final String mimeType) {
   	if (DEBUG) Log.v(TAG, "selectVideoCodec:");

   	// get the list of available codecs
       final int numCodecs = MediaCodecList.getCodecCount();
       for (int i = 0; i < numCodecs; i++) {
       	final MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);

           if (!codecInfo.isEncoder()) {	// skipp decoder
               continue;
           }
           // select first codec that match a specific MIME type and color format
           final String[] types = codecInfo.getSupportedTypes();
           for (int j = 0; j < types.length; j++) {
               if (types[j].equalsIgnoreCase(mimeType)) {
               	if (DEBUG) Log.i(TAG, "codec:" + codecInfo.getName() + ",MIME=" + types[j]);
           		final int format = selectColorFormat(codecInfo, mimeType);
               	if (format > 0) {
               		mColorFormat = format;
               		return codecInfo;
               	}
               }
           }
       }
       return null;
   }
 

/**
 * Get a list of supported android codec mimes.
 */
@CalledByNative
private static CodecInfo[] getCodecsInfo() {
    Map<String, CodecInfo> CodecInfoMap = new HashMap<String, CodecInfo>();
    int count = MediaCodecList.getCodecCount();
    for (int i = 0; i < count; ++i) {
        MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);
        if (info.isEncoder()) {
            continue;
        }

        boolean secureDecoderSupported = false;
        String codecString = info.getName();
        // ".secure" codecs sometimes crash instead of throwing on pre-JBMR2
        // platforms, but this code isn't run on them anyway (MediaDrm
        // unavailable) so we side-step the issue.  http://crbug.com/314868
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            String secureCodecName = codecString + ".secure";
            try {
                MediaCodec secureCodec = MediaCodec.createByCodecName(secureCodecName);
                if (secureCodec != null) {
                    secureDecoderSupported = true;
                    secureCodec.release();
                }
            } catch (Exception e) {
                Log.e(TAG, "Failed to create " + secureCodecName);
            }
        }

        String[] supportedTypes = info.getSupportedTypes();
        for (int j = 0; j < supportedTypes.length; ++j) {
            if (!CodecInfoMap.containsKey(supportedTypes[j]) || secureDecoderSupported) {
                CodecInfoMap.put(supportedTypes[j], new CodecInfo(
                    supportedTypes[j], codecString, secureDecoderSupported));
            }
        }
    }
    return CodecInfoMap.values().toArray(
        new CodecInfo[CodecInfoMap.size()]);
}
 
源代码10 项目: letv   文件: CodecWrapper.java

public static int getCapbility() {
    int maxProfile = 0;
    int tsType = -1;
    Log.d(LOG_TAG, "getCapbility()->Build.VERSION.SDK_INT:" + String.valueOf(VERSION.SDK_INT));
    if (VERSION.SDK_INT < 16) {
        return -1;
    }
    int mediaCodecListCount = MediaCodecList.getCodecCount();
    for (int i = 0; i < mediaCodecListCount; i++) {
        MediaCodecInfo mediaCodecInfo = MediaCodecList.getCodecInfoAt(i);
        if (!(mediaCodecInfo.isEncoder() || mediaCodecInfo.getName().startsWith("OMX.google") || mediaCodecInfo.getName().startsWith("OMX.TI."))) {
            Log.d(LOG_TAG, "getCapbility()->name:" + mediaCodecInfo.getName());
            for (String type : mediaCodecInfo.getSupportedTypes()) {
                if (type.contains("avc")) {
                    Log.d(LOG_TAG, "getCapbility()->type:" + type);
                    try {
                        CodecCapabilities codecCapabilities = mediaCodecInfo.getCapabilitiesForType(type);
                        for (int colorFormat : codecCapabilities.colorFormats) {
                            Log.d(LOG_TAG, "getCapbility()->Color Format: " + colorFormat + " " + colorFormatToString(colorFormat));
                        }
                        for (CodecProfileLevel codecProfileLevel : codecCapabilities.profileLevels) {
                            String level = "unknown type";
                            String sprofile = "unknown type";
                            Log.d(LOG_TAG, "getCapbility()->Codec Profile Level:" + avcLevelToString(codecProfileLevel.level) + " profile:" + avcProfileToString(codecProfileLevel.profile));
                            if (codecProfileLevel.profile > maxProfile) {
                                maxProfile = codecProfileLevel.profile;
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    Log.d(LOG_TAG, "getCapbility()->Max profile:" + maxProfile + " " + avcProfileToString(maxProfile));
    if (maxProfile >= 8) {
        tsType = 16;
    }
    return tsType;
}
 

private static MediaCodecInfo getCodecInfoAt(int index) {
    return MediaCodecList.getCodecInfoAt(index);
}
 
源代码12 项目: talk-android   文件: IjkMediaPlayer.java

@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public String onMediaCodecSelect(IMediaPlayer mp, String mimeType, int profile, int level) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
        return null;

    if (TextUtils.isEmpty(mimeType))
        return null;

    Log.i(TAG, String.format(Locale.US, "onSelectCodec: mime=%s, profile=%d, level=%d", mimeType, profile, level));
    ArrayList<IjkMediaCodecInfo> candidateCodecList = new ArrayList<IjkMediaCodecInfo>();
    int numCodecs = MediaCodecList.getCodecCount();
    for (int i = 0; i < numCodecs; i++) {
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        Log.d(TAG, String.format(Locale.US, "  found codec: %s", codecInfo.getName()));
        if (codecInfo.isEncoder())
            continue;

        String[] types = codecInfo.getSupportedTypes();
        if (types == null)
            continue;

        for(String type: types) {
            if (TextUtils.isEmpty(type))
                continue;

            Log.d(TAG, String.format(Locale.US, "    mime: %s", type));
            if (!type.equalsIgnoreCase(mimeType))
                continue;

            IjkMediaCodecInfo candidate = IjkMediaCodecInfo.setupCandidate(codecInfo, mimeType);
            if (candidate == null)
                continue;

            candidateCodecList.add(candidate);
            Log.i(TAG, String.format(Locale.US, "candidate codec: %s rank=%d", codecInfo.getName(), candidate.mRank));
            candidate.dumpProfileLevels(mimeType);
        }
    }

    if (candidateCodecList.isEmpty()) {
        return null;
    }

    IjkMediaCodecInfo bestCodec = candidateCodecList.get(0);

    for (IjkMediaCodecInfo codec : candidateCodecList) {
        if (codec.mRank > bestCodec.mRank) {
            bestCodec = codec;
        }
    }

    if (bestCodec.mRank < IjkMediaCodecInfo.RANK_LAST_CHANCE) {
        Log.w(TAG, String.format(Locale.US, "unaccetable codec: %s", bestCodec.mCodecInfo.getName()));
        return null;
    }

    Log.i(TAG, String.format(Locale.US, "selected codec: %s rank=%d", bestCodec.mCodecInfo.getName(), bestCodec.mRank));
    return bestCodec.mCodecInfo.getName();
}
 
源代码13 项目: MediaSDK   文件: MediaCodecUtil.java

@Override
public android.media.MediaCodecInfo getCodecInfoAt(int index) {
  return MediaCodecList.getCodecInfoAt(index);
}
 

private static DecoderProperties findVp8HwDecoder() {
  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
    return null; // MediaCodec.setParameters is missing.

  for (int i = 0; i < MediaCodecList.getCodecCount(); ++i) {
    MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);
    if (info.isEncoder()) {
      continue;
    }
    String name = null;
    for (String mimeType : info.getSupportedTypes()) {
      if (mimeType.equals(VP8_MIME_TYPE)) {
        name = info.getName();
        break;
      }
    }
    if (name == null) {
      continue;  // No VP8 support in this codec; try the next one.
    }
    Log.d(TAG, "Found candidate decoder " + name);
    CodecCapabilities capabilities =
        info.getCapabilitiesForType(VP8_MIME_TYPE);
    for (int colorFormat : capabilities.colorFormats) {
      Log.d(TAG, "   Color: 0x" + Integer.toHexString(colorFormat));
    }

    // Check if this is supported HW decoder
    for (String hwCodecPrefix : supportedHwCodecPrefixes) {
      if (!name.startsWith(hwCodecPrefix)) {
        continue;
      }
      // Check if codec supports either yuv420 or nv12
      for (int supportedColorFormat : supportedColorList) {
        for (int codecColorFormat : capabilities.colorFormats) {
          if (codecColorFormat == supportedColorFormat) {
            // Found supported HW VP8 decoder
            Log.d(TAG, "Found target decoder " + name +
                ". Color: 0x" + Integer.toHexString(codecColorFormat));
            return new DecoderProperties(name, codecColorFormat);
          }
        }
      }
    }
  }
  return null;  // No HW VP8 decoder.
}
 
源代码15 项目: IjkPlayerDemo   文件: IjkMediaPlayer.java

@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public String onMediaCodecSelect(IMediaPlayer mp, String mimeType, int profile, int level) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
        return null;

    if (TextUtils.isEmpty(mimeType))
        return null;

    Log.i(TAG, String.format(Locale.US, "onSelectCodec: mime=%s, profile=%d, level=%d", mimeType, profile, level));
    ArrayList<IjkMediaCodecInfo> candidateCodecList = new ArrayList<IjkMediaCodecInfo>();
    int numCodecs = MediaCodecList.getCodecCount();
    for (int i = 0; i < numCodecs; i++) {
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        Log.d(TAG, String.format(Locale.US, "  found codec: %s", codecInfo.getName()));
        if (codecInfo.isEncoder())
            continue;

        String[] types = codecInfo.getSupportedTypes();
        if (types == null)
            continue;

        for(String type: types) {
            if (TextUtils.isEmpty(type))
                continue;

            Log.d(TAG, String.format(Locale.US, "    mime: %s", type));
            if (!type.equalsIgnoreCase(mimeType))
                continue;

            IjkMediaCodecInfo candidate = IjkMediaCodecInfo.setupCandidate(codecInfo, mimeType);
            if (candidate == null)
                continue;

            candidateCodecList.add(candidate);
            Log.i(TAG, String.format(Locale.US, "candidate codec: %s rank=%d", codecInfo.getName(), candidate.mRank));
            candidate.dumpProfileLevels(mimeType);
        }
    }

    if (candidateCodecList.isEmpty()) {
        return null;
    }

    IjkMediaCodecInfo bestCodec = candidateCodecList.get(0);

    for (IjkMediaCodecInfo codec : candidateCodecList) {
        if (codec.mRank > bestCodec.mRank) {
            bestCodec = codec;
        }
    }

    if (bestCodec.mRank < IjkMediaCodecInfo.RANK_LAST_CHANCE) {
        Log.w(TAG, String.format(Locale.US, "unaccetable codec: %s", bestCodec.mCodecInfo.getName()));
        return null;
    }

    Log.i(TAG, String.format(Locale.US, "selected codec: %s rank=%d", bestCodec.mCodecInfo.getName(), bestCodec.mRank));
    return bestCodec.mCodecInfo.getName();
}
 
源代码16 项目: Telegram   文件: MediaCodecUtil.java

@Override
public android.media.MediaCodecInfo getCodecInfoAt(int index) {
  return MediaCodecList.getCodecInfoAt(index);
}
 
源代码17 项目: Telegram-FOSS   文件: MediaCodecUtil.java

@Override
public android.media.MediaCodecInfo getCodecInfoAt(int index) {
  return MediaCodecList.getCodecInfoAt(index);
}
 
源代码18 项目: phoenix   文件: MediaCodecListCompat.java

private static MediaCodecInfo getCodecInfoAt(int index) {
    return MediaCodecList.getCodecInfoAt(index);
}
 
源代码19 项目: JZVideoDemo   文件: IjkMediaPlayer.java

@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public String onMediaCodecSelect(IMediaPlayer mp, String mimeType, int profile, int level) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
        return null;

    if (TextUtils.isEmpty(mimeType))
        return null;

    Log.i(TAG, String.format(Locale.US, "onSelectCodec: mime=%s, profile=%d, level=%d", mimeType, profile, level));
    ArrayList<IjkMediaCodecInfo> candidateCodecList = new ArrayList<IjkMediaCodecInfo>();
    int numCodecs = MediaCodecList.getCodecCount();
    for (int i = 0; i < numCodecs; i++) {
        MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
        Log.d(TAG, String.format(Locale.US, "  found codec: %s", codecInfo.getName()));
        if (codecInfo.isEncoder())
            continue;

        String[] types = codecInfo.getSupportedTypes();
        if (types == null)
            continue;

        for (String type : types) {
            if (TextUtils.isEmpty(type))
                continue;

            Log.d(TAG, String.format(Locale.US, "    mime: %s", type));
            if (!type.equalsIgnoreCase(mimeType))
                continue;

            IjkMediaCodecInfo candidate = IjkMediaCodecInfo.setupCandidate(codecInfo, mimeType);
            if (candidate == null)
                continue;

            candidateCodecList.add(candidate);
            Log.i(TAG, String.format(Locale.US, "candidate codec: %s rank=%d", codecInfo.getName(), candidate.mRank));
            candidate.dumpProfileLevels(mimeType);
        }
    }

    if (candidateCodecList.isEmpty()) {
        return null;
    }

    IjkMediaCodecInfo bestCodec = candidateCodecList.get(0);

    for (IjkMediaCodecInfo codec : candidateCodecList) {
        if (codec.mRank > bestCodec.mRank) {
            bestCodec = codec;
        }
    }

    if (bestCodec.mRank < IjkMediaCodecInfo.RANK_LAST_CHANCE) {
        Log.w(TAG, String.format(Locale.US, "unaccetable codec: %s", bestCodec.mCodecInfo.getName()));
        return null;
    }

    Log.i(TAG, String.format(Locale.US, "selected codec: %s rank=%d", bestCodec.mCodecInfo.getName(), bestCodec.mRank));
    return bestCodec.mCodecInfo.getName();
}
 

private static MediaCodecInfo getCodecInfoAt(int index) {
    return MediaCodecList.getCodecInfoAt(index);
}