| // Copyright 2016 The Cobalt Authors. All Rights Reserved. |
| // |
| // 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. |
| |
| // Module Overview: Starboard Image Decoding Module |
| // |
| // 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 |
| // |
| // Let's assume that we're on a Blitter platform. |
| // |
| // 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 = SbDecodeImage(provider, data, data_size, |
| // mime_type, format); |
| // SbBlitterSurface surface = |
| // SbDecodeTargetGetPlane(target, kSbDecodeTargetPlaneRGBA); |
| // // Do stuff with surface... |
| // |
| |
| #ifndef STARBOARD_IMAGE_H_ |
| #define STARBOARD_IMAGE_H_ |
| |
| #include "starboard/configuration.h" |
| #include "starboard/decode_target.h" |
| #include "starboard/export.h" |
| #include "starboard/types.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // Whether the current platform supports hardware accelerated decoding an |
| // image of mime type |mime_type| into SbDecodeTargetFormat |format|. 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. |
| SB_EXPORT bool SbImageIsDecodeSupported(const char* mime_type, |
| SbDecodeTargetFormat format); |
| |
| // 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. |
| // 2. The provider is required and is passed in. The implementation will |
| // proceed forward, using the SbDecodeTarget from the provider. |
| // 3. 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. |
| // 4. The provider is not required and is not passed in. The implementation |
| // will proceed forward. |
| // |
| // 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. |
| SB_EXPORT SbDecodeTarget SbImageDecode( |
| SbDecodeTargetGraphicsContextProvider* context_provider, |
| void* data, |
| int data_size, |
| const char* mime_type, |
| SbDecodeTargetFormat format); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // STARBOARD_IMAGE_H_ |