Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / android / core / src / org / xwalk / core / extension / api / device_capabilities / MediaCodec.java
1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.xwalk.core.extension.api.device_capabilities;
6
7 import java.util.HashSet;
8
9 import org.json.JSONArray;
10 import org.json.JSONException;
11 import org.json.JSONObject;
12
13 class MediaCodec extends XWalkMediaCodec {
14     public MediaCodec(DeviceCapabilities instance) {
15         mDeviceCapabilities = instance;
16
17         mAudioCodecsSet = new HashSet<AudioCodecElement>();
18         mVideoCodecsSet = new HashSet<VideoCodecElement>();
19
20         // Suppose the codecs that MediaCodec reports won't change during runtime,
21         // so initialize in constructor.
22         getCodecsList();
23     }
24
25     @Override
26     public JSONObject getCodecsInfo() {
27         JSONObject outputObject = new JSONObject();
28         JSONArray audioCodecsArray = new JSONArray();
29         JSONArray videoCodecsArray = new JSONArray();
30
31         try {
32             for (AudioCodecElement codecToAdd : mAudioCodecsSet) {
33                 JSONObject codecsObject = new JSONObject();
34                 codecsObject.put("format", codecToAdd.codecName);
35                 audioCodecsArray.put(codecsObject);
36             }
37             for (VideoCodecElement codecToAdd : mVideoCodecsSet) {
38                 JSONObject codecsObject = new JSONObject();
39                 codecsObject.put("format", codecToAdd.codecName);
40                 codecsObject.put("encode", codecToAdd.isEncoder);
41                 codecsObject.put("hwAccel", codecToAdd.hwAccel);
42                 videoCodecsArray.put(codecsObject);
43             }
44
45             outputObject.put("audioCodecs", audioCodecsArray);
46             outputObject.put("videoCodecs", videoCodecsArray);
47         } catch (JSONException e) {
48             return mDeviceCapabilities.setErrorMessage(e.toString());
49         }
50
51         return outputObject;
52     }
53
54     public void getCodecsList() {
55         int numCodecs = android.media.MediaCodecList.getCodecCount();
56         for (int i = 0; i < numCodecs; i++) {
57             android.media.MediaCodecInfo codecInfo =
58                     android.media.MediaCodecList.getCodecInfoAt(i);
59             String name = codecInfo.getName().toUpperCase();
60             boolean hasAdded = false;
61
62             for (String nameListElement : AUDIO_CODEC_NAMES) {
63                 if (name.contains(nameListElement)) {
64                     mAudioCodecsSet.add(new AudioCodecElement(nameListElement));
65                     hasAdded = true;
66                     break;
67                 }
68             }
69
70             if (hasAdded) {
71                 continue;
72             }
73
74             for (String nameListElement : VIDEO_CODEC_NAMES) {
75                 if (name.contains(nameListElement)) {
76                     boolean isEncoder = codecInfo.isEncoder();
77                     // FIXME(fyraimar): Get the right hwAccel value.
78                     mVideoCodecsSet.add(new VideoCodecElement(
79                             nameListElement, isEncoder, false));
80                     break;
81                 }
82             }
83         }
84     }
85 }