1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.mediaframeworktest; 18 19 import android.media.MediaRecorder; 20 import android.media.EncoderCapabilities; 21 import android.media.EncoderCapabilities.VideoEncoderCap; 22 import android.media.EncoderCapabilities.AudioEncoderCap; 23 import android.media.DecoderCapabilities; 24 import android.media.DecoderCapabilities.VideoDecoder; 25 import android.media.DecoderCapabilities.AudioDecoder; 26 27 import android.os.SystemProperties; 28 import java.util.List; 29 import java.util.HashMap; 30 31 public class MediaProfileReader 32 { 33 private static final List<VideoDecoder> videoDecoders = DecoderCapabilities.getVideoDecoders(); 34 private static final List<AudioDecoder> audioDecoders = DecoderCapabilities.getAudioDecoders(); 35 private static final List<VideoEncoderCap> videoEncoders = EncoderCapabilities.getVideoEncoders(); 36 private static final List<AudioEncoderCap> audioEncoders = EncoderCapabilities.getAudioEncoders(); 37 private static final HashMap<Integer, String> videoEncoderMap = new HashMap<Integer, String>(); 38 private static final HashMap<Integer, String> audioEncoderMap = new HashMap<Integer, String>(); 39 40 static { 41 initAudioEncoderMap(); 42 initVideoEncoderMap(); 43 }; 44 45 public static List<VideoEncoderCap> getVideoEncoders() { 46 return videoEncoders; 47 } 48 49 public static List<AudioEncoderCap> getAudioEncoders() { 50 return audioEncoders; 51 } 52 53 public static String getDeviceType() { 54 // push all the property into one big table 55 String s; 56 s = SystemProperties.get("ro.product.name"); 57 return s; 58 } 59 60 public static boolean getWMAEnable() { 61 for (AudioDecoder decoder: audioDecoders) { 62 if (decoder == AudioDecoder.AUDIO_DECODER_WMA) { 63 return true; 64 } 65 } 66 return false; 67 } 68 69 public static boolean getWMVEnable(){ 70 for (VideoDecoder decoder: videoDecoders) { 71 if (decoder == VideoDecoder.VIDEO_DECODER_WMV) { 72 return true; 73 } 74 } 75 return false; 76 } 77 78 public static String getVideoCodecName(int videoEncoder) { 79 if (videoEncoder != MediaRecorder.VideoEncoder.H263 && 80 videoEncoder != MediaRecorder.VideoEncoder.H264 && 81 videoEncoder != MediaRecorder.VideoEncoder.MPEG_4_SP) { 82 throw new IllegalArgumentException("Unsupported video encoder " + videoEncoder); 83 } 84 return videoEncoderMap.get(videoEncoder); 85 } 86 87 public static String getAudioCodecName(int audioEncoder) { 88 if (audioEncoder != MediaRecorder.AudioEncoder.AMR_NB && 89 audioEncoder != MediaRecorder.AudioEncoder.AMR_WB && 90 audioEncoder != MediaRecorder.AudioEncoder.AAC && 91 audioEncoder != MediaRecorder.AudioEncoder.HE_AAC) { 92 throw new IllegalArgumentException("Unsupported audio encodeer " + audioEncoder); 93 } 94 return audioEncoderMap.get(audioEncoder); 95 } 96 97 public static int getMinFrameRateForCodec(int codec) { 98 return getMinOrMaxFrameRateForCodec(codec, false); 99 } 100 101 public static int getMaxFrameRateForCodec(int codec) { 102 return getMinOrMaxFrameRateForCodec(codec, true); 103 } 104 105 private static int getMinOrMaxFrameRateForCodec(int codec, boolean max) { 106 for (VideoEncoderCap cap: videoEncoders) { 107 if (cap.mCodec == codec) { 108 if (max) return cap.mMaxFrameRate; 109 else return cap.mMinFrameRate; 110 } 111 } 112 // Should never reach here 113 throw new IllegalArgumentException("Unsupported video codec " + codec); 114 } 115 116 private MediaProfileReader() {} // Don't call me 117 118 private static void initVideoEncoderMap() { 119 // video encoders 120 videoEncoderMap.put(MediaRecorder.VideoEncoder.H263, "h263"); 121 videoEncoderMap.put(MediaRecorder.VideoEncoder.H264, "h264"); 122 videoEncoderMap.put(MediaRecorder.VideoEncoder.MPEG_4_SP, "m4v"); 123 } 124 125 private static void initAudioEncoderMap() { 126 // audio encoders 127 audioEncoderMap.put(MediaRecorder.AudioEncoder.AMR_NB, "amrnb"); 128 audioEncoderMap.put(MediaRecorder.AudioEncoder.AMR_WB, "amrwb"); 129 audioEncoderMap.put(MediaRecorder.AudioEncoder.AAC, "aac"); 130 audioEncoderMap.put(MediaRecorder.AudioEncoder.HE_AAC, "heaac"); 131 } 132 } 133