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 {
initAudioEncoderMap()41         initAudioEncoderMap();
initVideoEncoderMap()42         initVideoEncoderMap();
43     };
44 
getVideoEncoders()45     public static List<VideoEncoderCap> getVideoEncoders() {
46         return videoEncoders;
47     }
48 
getAudioEncoders()49     public static List<AudioEncoderCap> getAudioEncoders() {
50         return audioEncoders;
51     }
52 
getDeviceType()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 
getWMAEnable()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 
getWMVEnable()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 
getVideoCodecName(int videoEncoder)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 
getAudioCodecName(int audioEncoder)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             audioEncoder != MediaRecorder.AudioEncoder.AAC_ELD) {
93             throw new IllegalArgumentException("Unsupported audio encodeer " + audioEncoder);
94         }
95         return audioEncoderMap.get(audioEncoder);
96     }
97 
getMinFrameRateForCodec(int codec)98     public static int getMinFrameRateForCodec(int codec) {
99         return getMinOrMaxFrameRateForCodec(codec, false);
100     }
101 
getMaxFrameRateForCodec(int codec)102     public static int getMaxFrameRateForCodec(int codec) {
103         return getMinOrMaxFrameRateForCodec(codec, true);
104     }
105 
getMinOrMaxFrameRateForCodec(int codec, boolean max)106     private static int getMinOrMaxFrameRateForCodec(int codec, boolean max) {
107         for (VideoEncoderCap cap: videoEncoders) {
108             if (cap.mCodec == codec) {
109                 if (max) return cap.mMaxFrameRate;
110                 else return cap.mMinFrameRate;
111             }
112         }
113         // Should never reach here
114         throw new IllegalArgumentException("Unsupported video codec " + codec);
115     }
116 
MediaProfileReader()117     private MediaProfileReader() {} // Don't call me
118 
initVideoEncoderMap()119     private static void initVideoEncoderMap() {
120         // video encoders
121         videoEncoderMap.put(MediaRecorder.VideoEncoder.H263, "h263");
122         videoEncoderMap.put(MediaRecorder.VideoEncoder.H264, "h264");
123         videoEncoderMap.put(MediaRecorder.VideoEncoder.MPEG_4_SP, "m4v");
124     }
125 
initAudioEncoderMap()126     private static void initAudioEncoderMap() {
127         // audio encoders
128         audioEncoderMap.put(MediaRecorder.AudioEncoder.AMR_NB, "amrnb");
129         audioEncoderMap.put(MediaRecorder.AudioEncoder.AMR_WB, "amrwb");
130         audioEncoderMap.put(MediaRecorder.AudioEncoder.AAC, "aac");
131         audioEncoderMap.put(MediaRecorder.AudioEncoder.HE_AAC, "heaac");
132         audioEncoderMap.put(MediaRecorder.AudioEncoder.AAC_ELD, "aaceld");
133     }
134 }
135