blob: 931b07cebd3154ab5e54eef4f68d57195913c9b5 [file] [log] [blame]
// Copyright 2022 Google LLC
// SPDX-License-Identifier: BSD-2-Clause
package org.aomedia.avif.android;
import android.graphics.Bitmap;
import java.nio.ByteBuffer;
/** An AVIF Decoder. AVIF Specification: https://aomediacodec.github.io/av1-avif/. */
@SuppressWarnings("CatchAndPrintStackTrace")
public class AvifDecoder {
static {
try {
System.loadLibrary("avif_android");
} catch (UnsatisfiedLinkError exception) {
exception.printStackTrace();
}
}
// This is a utility class and cannot be instantiated.
private AvifDecoder() {}
/** Contains information about the AVIF Image. */
public static class Info {
public int width;
public int height;
public int depth;
}
/**
* Returns true if the bytes in the buffer seem like an AVIF image.
*
* @param buffer The encoded image. buffer.position() must be 0.
* @return true if the bytes seem like an AVIF image, false otherwise.
*/
public static boolean isAvifImage(ByteBuffer buffer) {
return AvifDecoder.isAvifImage(buffer, buffer.remaining());
}
private static native boolean isAvifImage(ByteBuffer encoded, int length);
/**
* Parses the AVIF header and populates the Info.
*
* @param encoded The encoded AVIF image. encoded.position() must be 0.
* @param length Length of the encoded buffer.
* @param info Output parameter whose fields will be populated.
* @return true on success and false on failure.
*/
public static native boolean getInfo(ByteBuffer encoded, int length, Info info);
/**
* Decodes the AVIF image into the bitmap.
*
* @param encoded The encoded AVIF image. encoded.position() must be 0.
* @param length Length of the encoded buffer.
* @param bitmap The decoded pixels will be copied into the bitmap.
* @return true on success and false on failure. A few possible reasons for failure are: 1) Input
* was not valid AVIF. 2) Bitmap was not large enough to store the decoded image.
*/
public static native boolean decode(ByteBuffer encoded, int length, Bitmap bitmap);
}