/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.exoplayer2.ext.ffmpeg; import com.google.android.exoplayer2.util.LibraryLoader; import com.google.android.exoplayer2.util.MimeTypes; /** * This class is based on com.google.android.exoplayer2.ext.ffmpeg.FfmpegLibrary from ExoPlayer2 * in order to support mp2 decoder. * Configures and queries the underlying native library. */ public final class FfmpegLibrary { private static final LibraryLoader LOADER = new LibraryLoader("avutil", "avresample", "avcodec", "ffmpeg"); private FfmpegLibrary() {} /** * Overrides the names of the FFmpeg native libraries. If an application wishes to call this * method, it must do so before calling any other method defined by this class, and before * instantiating a {@link FfmpegAudioRenderer} instance. */ public static void setLibraries(String... libraries) { LOADER.setLibraries(libraries); } /** * Returns whether the underlying library is available, loading it if necessary. */ public static boolean isAvailable() { return LOADER.isAvailable(); } /** * Returns the version of the underlying library if available, or null otherwise. */ public static String getVersion() { return isAvailable() ? ffmpegGetVersion() : null; } /** * Returns whether the underlying library supports the specified MIME type. */ public static boolean supportsFormat(String mimeType) { if (!isAvailable()) { return false; } String codecName = getCodecName(mimeType); return codecName != null && ffmpegHasDecoder(codecName); } /** * Returns the name of the FFmpeg decoder that could be used to decode {@code mimeType}. */ /* package */ static String getCodecName(String mimeType) { switch (mimeType) { case MimeTypes.AUDIO_MPEG_L2: return "mp2"; case MimeTypes.AUDIO_AC3: return "ac3"; default: return null; } } private static native String ffmpegGetVersion(); private static native boolean ffmpegHasDecoder(String codecName); }