blob: 945938a099033a07a129fbfa8c67da1f23ffda15 [file] [log] [blame] [view] [edit]
Project: /youtube/cobalt/_project.yaml
Book: /youtube/cobalt/_book.yaml
# Starboard Module Reference: `image.h`
API for hardware accelerated image decoding. This module allows for the client
to feed in raw, encoded data to be decoded directly into an SbDecodeTarget. It
also provides an interface for the client to query what combinations of encoded
image formats and SbDecodeTargetFormats are supported or not.
All functions in this module are safe to call from any thread at any point in
time.
## SbImageIsDecodeSupported and SbImageDecode Example
```
SbDecodeTargetProvider* provider = GetProviderFromSomewhere();
void* data = GetCompressedJPEGFromSomewhere();
int data_size = GetCompressedJPEGSizeFromSomewhere();
const char* mime_type = "image/jpeg";
SbDecodeTargetFormat format = kSbDecodeTargetFormat1PlaneRGBA;
if (!SbImageIsDecodeSupported(mime_type, format)) {
return;
}
SbDecodeTarget result_target = SbImageDecode(provider, data, data_size,
mime_type, format);
```
## Functions
### SbImageDecode
Attempt to decode encoded `mime_type` image data `data` of size `data_size` into
an SbDecodeTarget of SbDecodeFormatType `format`, possibly using
SbDecodeTargetProvider `provider`, if it is non-null. Thus, four following
scenarios regarding the provider may happen:
1. The provider is required by the `SbImageDecode` implementation and no
provider is given. The implementation should gracefully fail by immediately
returning kSbDecodeTargetInvalid.
1. The provider is required and is passed in. The implementation will proceed
forward, using the SbDecodeTarget from the provider.
1. The provider is not required and is passed in. The provider will NOT be
called, and the implementation will proceed to decoding however it desires.
1. The provider is not required and is not passed in. The implementation will
proceed forward. The `data` pointer must not be NULL. The `mime_type` string
must not be NULL. Thus, it is NOT safe for clients of this API to assume
that the `provider` it passes in will be called. Finally, if the decode
succeeds, a new SbDecodeTarget will be allocated. If `mime_type` image
decoding for the requested format is not supported or the decode fails,
kSbDecodeTargetInvalid will be returned, with any intermediate allocations
being cleaned up in the implementation.
#### Declaration
```
SbDecodeTarget SbImageDecode(SbDecodeTargetGraphicsContextProvider *context_provider, void *data, int data_size, const char *mime_type, SbDecodeTargetFormat format)
```
### SbImageIsDecodeSupported
Whether the current platform supports hardware accelerated decoding an image of
mime type `mime_type` into SbDecodeTargetFormat `format`. The `mime_type` must
not be NULL. The result of this function must not change over the course of the
program, which means that the results of this function may be cached
indefinitely.
#### Declaration
```
bool SbImageIsDecodeSupported(const char *mime_type, SbDecodeTargetFormat format)
```