public class VideoBitmapDecoder extends Object implements ResourceDecoder<ParcelFileDescriptor,Bitmap>
ResourceDecoder
that can decode a thumbnail frame
Bitmap
from a ParcelFileDescriptor
containing a
video.MediaMetadataRetriever
Modifier and Type | Field and Description |
---|---|
static long |
DEFAULT_FRAME
A constant indicating we should use whatever frame we consider best, frequently not the first
frame.
|
static Option<Integer> |
FRAME_OPTION
An integer indicating the frame option used to retrieve a target frame.
|
static Option<Long> |
TARGET_FRAME
A long indicating the time position (in microseconds) of the target frame which will be
retrieved.
|
Constructor and Description |
---|
VideoBitmapDecoder(BitmapPool bitmapPool) |
VideoBitmapDecoder(Context context) |
Modifier and Type | Method and Description |
---|---|
Resource<Bitmap> |
decode(ParcelFileDescriptor resource,
int outWidth,
int outHeight,
Options options)
Returns a decoded resource from the given data or null if no resource could be decoded.
|
boolean |
handles(ParcelFileDescriptor data,
Options options)
Returns
true if this decoder is capable of decoding the given source with the given
options, and false otherwise. |
public static final long DEFAULT_FRAME
public static final Option<Long> TARGET_FRAME
MediaMetadataRetriever.getFrameAtTime(long)
is used to
extract the video frame.
When retrieving the frame at the given time position, there is no guarantee that the data source has a frame located at the position. When this happens, a frame nearby will be returned. If the long is negative, time position and option will ignored, and any frame that the implementation considers as representative may be returned.
public static final Option<Integer> FRAME_OPTION
This option will be ignored if TARGET_FRAME
is not set or is set to
DEFAULT_FRAME
.
public VideoBitmapDecoder(Context context)
public VideoBitmapDecoder(BitmapPool bitmapPool)
public boolean handles(ParcelFileDescriptor data, Options options)
ResourceDecoder
true
if this decoder is capable of decoding the given source with the given
options, and false
otherwise.
Decoders should make a best effort attempt to quickly determine if they are likely to be able to decode data, but should not attempt to completely read the given data. A typical implementation would check the file headers verify they match content the decoder expects to handle (i.e. a GIF decoder should verify that the image contains the GIF header block.
Decoders that return true
from handles
may still return null
from
ResourceDecoder.decode(Object, int, int, Options)
if the data is partial or formatted incorrectly.
handles
in interface ResourceDecoder<ParcelFileDescriptor,Bitmap>
public Resource<Bitmap> decode(ParcelFileDescriptor resource, int outWidth, int outHeight, Options options) throws IOException
ResourceDecoder
The source
is managed by the caller, there's no need to close it. The returned
Resource
will be released
when the engine sees fit.
Note - The width
and height
arguments are hints only, there is no
requirement that the decoded resource exactly match the given dimensions. A typical use case
would be to use the target dimensions to determine how much to downsample Bitmaps by to avoid
overly large allocations.
decode
in interface ResourceDecoder<ParcelFileDescriptor,Bitmap>
resource
- The data the resource should be decoded from.outWidth
- The ideal width in pixels of the decoded resource, or Target.SIZE_ORIGINAL
to indicate the original
resource width.outHeight
- The ideal height in pixels of the decoded resource, or Target.SIZE_ORIGINAL
to indicate the original
resource height.options
- A map of string keys to objects that may or may not contain options available to
this particular implementation. Implementations should not assume that any or
all of their option keys are present. However, implementations may assume that
if one of their option keys is present, it's value is non-null and is of the
expected type.IOException