001/*
002 * Copyright (C) 2015 Zhang Rui <bbcallen@gmail.com>
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package com.baidu.cloud.media.player.misc;
018
019import android.annotation.TargetApi;
020import android.media.MediaFormat;
021import android.media.MediaPlayer;
022import android.os.Build;
023
024public class AndroidTrackInfo implements ITrackInfo {
025    private final MediaPlayer.TrackInfo mTrackInfo;
026
027    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
028    public static AndroidTrackInfo[] fromMediaPlayer(MediaPlayer mp) {
029        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
030            return fromTrackInfo(mp.getTrackInfo());
031        }
032
033        return null;
034    }
035
036    private static AndroidTrackInfo[] fromTrackInfo(MediaPlayer.TrackInfo[] trackInfos) {
037        if (trackInfos == null) {
038            return null;
039        }
040
041        AndroidTrackInfo androidTrackInfo[] = new AndroidTrackInfo[trackInfos.length];
042        for (int i = 0; i < trackInfos.length; ++i) {
043            androidTrackInfo[i] = new AndroidTrackInfo(trackInfos[i]);
044        }
045
046        return androidTrackInfo;
047    }
048
049    private AndroidTrackInfo(MediaPlayer.TrackInfo trackInfo) {
050        mTrackInfo = trackInfo;
051    }
052
053    @TargetApi(Build.VERSION_CODES.KITKAT)
054    @Override
055    public IMediaFormat getFormat() {
056        if (mTrackInfo == null) {
057            return null;
058        }
059
060        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
061            return null;
062        }
063
064        MediaFormat mediaFormat = mTrackInfo.getFormat();
065        if (mediaFormat == null) {
066            return null;
067        }
068
069        return new AndroidMediaFormat(mediaFormat);
070    }
071
072    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
073    @Override
074    public String getLanguage() {
075        if (mTrackInfo == null) {
076            return "und";
077        }
078
079        return mTrackInfo.getLanguage();
080    }
081
082    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
083    @Override
084    public int getTrackType() {
085        if (mTrackInfo == null) {
086            return MEDIA_TRACK_TYPE_UNKNOWN;
087        }
088
089        return mTrackInfo.getTrackType();
090    }
091
092    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
093    @Override
094    public String toString() {
095        StringBuilder out = new StringBuilder(128);
096        out.append(getClass().getSimpleName());
097        out.append('{');
098        if (mTrackInfo != null) {
099            out.append(mTrackInfo.toString());
100        } else {
101            out.append("null");
102        }
103        out.append('}');
104        return out.toString();
105    }
106
107    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
108    @Override
109    public String getInfoInline() {
110        if (mTrackInfo != null) {
111            return mTrackInfo.toString();
112        } else {
113            return "null";
114        }
115    }
116}