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.
5 package org.xwalk.core.extension.api.device_capabilities;
7 import java.util.HashSet;
9 import org.json.JSONArray;
10 import org.json.JSONException;
11 import org.json.JSONObject;
13 class MediaCodec extends XWalkMediaCodec {
14 public MediaCodec(DeviceCapabilities instance) {
15 mDeviceCapabilities = instance;
17 mAudioCodecsSet = new HashSet<AudioCodecElement>();
18 mVideoCodecsSet = new HashSet<VideoCodecElement>();
20 // Suppose the codecs that MediaCodec reports won't change during runtime,
21 // so initialize in constructor.
26 public JSONObject getCodecsInfo() {
27 JSONObject outputObject = new JSONObject();
28 JSONArray audioCodecsArray = new JSONArray();
29 JSONArray videoCodecsArray = new JSONArray();
32 for (AudioCodecElement codecToAdd : mAudioCodecsSet) {
33 JSONObject codecsObject = new JSONObject();
34 codecsObject.put("format", codecToAdd.codecName);
35 audioCodecsArray.put(codecsObject);
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);
45 outputObject.put("audioCodecs", audioCodecsArray);
46 outputObject.put("videoCodecs", videoCodecsArray);
47 } catch (JSONException e) {
48 return mDeviceCapabilities.setErrorMessage(e.toString());
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;
62 for (String nameListElement : AUDIO_CODEC_NAMES) {
63 if (name.contains(nameListElement)) {
64 mAudioCodecsSet.add(new AudioCodecElement(nameListElement));
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));