A target for decoding image and video data into. This corresponds roughly to an EGLImage, but that extension may not be fully supported on all GL platforms. SbDecodeTarget supports multi-plane targets.
An SbDecodeTarget can be passed into any function which decodes video or image data. This allows the application to allocate fast graphics memory, and have decoding done directly into this memory, avoiding unnecessary memory copies, and also avoiding pushing data between CPU and GPU memory unnecessarily.
- SbDecodeTargetFormat
SbDecodeTargets support several different formats that can be used to decode into and render from. Some formats may be easier to decode into, and others may be easier to render. Some may take less memory. Each decoder needs to support the SbDecodeTargetFormat passed into it, or the decode will produce an error. Each decoder provides a way to check if a given SbDecodeTargetFormat is supported by that decoder.
- SbDecodeTargetGraphicsContextProvider
Some components may need to acquire SbDecodeTargets compatible with a certain rendering context, which may need to be created on a particular thread. The SbDecodeTargetGraphicsContextProvider are passed in to the Starboard implementation from the application and provide information about the rendering context that will be used to render the SbDecodeTarget objects. For GLES renderers, it also provides functionality to enable the Starboard implementation to run arbitrary code on the application's renderer thread with the renderer's EGLContext held current. This may be useful if your SbDecodeTarget creation code needs to execute GLES commands like, for example, glGenTextures().
The primary usage is likely to be the SbPlayer implementation on some platforms.
Macros
kSbDecodeTargetInvalid
Well-defined value for an invalid decode target handle.
Enums
SbDecodeTargetFormat
The list of all possible decoder target formats. An SbDecodeTarget consists of one or more planes of data, each plane corresponding with a surface. For some formats, different planes will be different sizes for the same dimensions.
NOTE: For enumeration entries with an alpha component, the alpha will always be premultiplied unless otherwise explicitly specified.
Values
kSbDecodeTargetFormat1PlaneRGBA
A decoder target format consisting of a single RGBA plane, in that channel order.
kSbDecodeTargetFormat1PlaneBGRA
A decoder target format consisting of a single BGRA plane, in that channel order.
kSbDecodeTargetFormat2PlaneYUVNV12
A decoder target format consisting of Y and interleaved UV planes, in that plane and channel order.
kSbDecodeTargetFormat3PlaneYUVI420
A decoder target format consisting of Y, U, and V planes, in that order.
kSbDecodeTargetFormat3Plane10BitYUVI420
A decoder target format consisting of 10bit Y, U, and V planes, in that order. Each pixel is stored in 16 bits.
kSbDecodeTargetFormat3Plane10BitYUVI420Compact
A decoder target format consisting of 10bit Y, U, and V planes, in that order. The plane data is stored in a compact format. Every three 10-bit pixels are packed into 32 bits.
kSbDecodeTargetFormat1PlaneUYVY
A decoder target format consisting of a single plane with pixels laid out in the format UYVY. Since there are two Y values per sample, but only one U value and only one V value, horizontally the Y resolution is twice the size of both the U and V resolutions. Vertically, the Y, U, and V planes all have the same resolution. This is a YUV 422 format. When using this format with GL platforms, it is expected that the underlying texture will be set to the GL_RGBA format, and the width of the texture will be equal to the number of UYVY tuples per row (e.g. the u/v width resolution). Content region left/right should be specified in u/v width resolution.
kSbDecodeTargetFormatInvalid
An invalid decode target format.
SbDecodeTargetPlane
All the planes supported by SbDecodeTarget.
Values
kSbDecodeTargetPlaneRGBA
The RGBA plane for the RGBA format.
kSbDecodeTargetPlaneBGRA
The BGRA plane for the BGRA format.
kSbDecodeTargetPlaneY
The Y plane for multi-plane YUV formats.
kSbDecodeTargetPlaneUV
The UV plane for 2-plane YUV formats.
kSbDecodeTargetPlaneU
The U plane for 3-plane YUV formats.
kSbDecodeTargetPlaneV
The V plane for 3-plane YUV formats.
Typedefs
SbDecodeTarget
A handle to a target for image data decoding.
Definition
typedef SbDecodeTargetPrivate* SbDecodeTarget
SbDecodeTargetGlesContextRunner
Signature for a function provided by the application to the Starboard implementation that will let the Starboard implementation run arbitrary code on the application's renderer thread with the application's EGLContext held current.
Definition
typedef void(* SbDecodeTargetGlesContextRunner) (struct SbDecodeTargetGraphicsContextProvider *graphics_context_provider, SbDecodeTargetGlesContextRunnerTarget target_function, void *target_function_context)
SbDecodeTargetGlesContextRunnerTarget
Signature for a Starboard implementation function that is to be run by a SbDecodeTargetGlesContextRunner callback.
Definition
typedef void(* SbDecodeTargetGlesContextRunnerTarget) (void *gles_context_runner_target_context)
Structs
SbDecodeTargetGraphicsContextProvider
In general, the SbDecodeTargetGraphicsContextProvider structure provides information about the graphics context that will be used to render SbDecodeTargets. Some Starboard implementations may need to have references to some graphics objects when creating/destroying resources used by SbDecodeTarget. References to SbDecodeTargetGraphicsContextProvider objects should be provided to all Starboard functions that might create SbDecodeTargets.
Members
void * egl_display
A reference to the EGLDisplay object that hosts the EGLContext that will be used to render any produced SbDecodeTargets. Note that it has the type
void*
in order to avoid including the EGL header files here.void * egl_context
The EGLContext object that will be used to render any produced SbDecodeTargets. Note that it has the type
void*
in order to avoid including the EGL header files here.SbDecodeTargetGlesContextRunner gles_context_runner
The
gles_context_runner
function pointer is passed in from the application into the Starboard implementation, and can be invoked by the Starboard implementation to allow running arbitrary code on the renderer's thread with the EGLContext above held current.void * gles_context_runner_context
Context data that is to be passed in to
gles_context_runner
when it is invoked.
SbDecodeTargetInfo
Contains all information about a decode target, including all of its planes. This can be queried via calls to SbDecodeTargetGetInfo().
Members
SbDecodeTargetFormat format
The decode target format, which would dictate how many planes can be expected in
planes
.bool is_opaque
Specifies whether the decode target is opaque. The underlying source of this value is expected to be properly maintained by the Starboard implementation. So, for example, if an opaque only image type were decoded into an SbDecodeTarget, then the implementation would configure things in such a way that this value is set to true. By opaque, it is meant that all alpha values are guaranteed to be 255, if the decode target is of a format that has alpha values. If the decode target is of a format that does not have alpha values, then this value should be set to true. Applications may rely on this value in order to implement certain optimizations such as occlusion culling.
int width
The width of the image represented by this decode target.
int height
The height of the image represented by this decode target.
SbDecodeTargetInfoPlane planes
The image planes (e.g. kSbDecodeTargetPlaneRGBA, or {kSbDecodeTargetPlaneY, kSbDecodeTargetPlaneU, kSbDecodeTargetPlaneV}) associated with this decode target.
SbDecodeTargetInfoContentRegion
Defines a rectangular content region within a SbDecodeTargetInfoPlane structure.
Members
float left
If the texture (width, height) is set to (1, 1), then these values will be interpreted as normalized coordinates, and depending on the platform (for example GLES 2.0 provides no method of obtaining the texture width/height) this may be more natural than specifying absolute pixel offsets.
float top
float right
float bottom
SbDecodeTargetInfoPlane
Defines an image plane within a SbDecodeTargetInfo object.
Members
uint32_t texture
A handle to the GL texture that can be used for rendering.
uint32_t gl_texture_target
The GL texture target that should be used in calls to glBindTexture. Typically this would be GL_TEXTURE_2D, but some platforms may require that it be set to something else like GL_TEXTURE_EXTERNAL_OES.
uint32_t gl_texture_format
For kSbDecodeTargetFormat2PlaneYUVNV12 planes: the format of the texture. Usually, for the luma plane, this is either GL_ALPHA or GL_RED_EXT. For the chroma plane, this is usually GL_LUMINANCE_ALPHA or GL_RG_EXT. Ignored for other plane types.
int width
The width of the texture/surface for this particular plane.
int height
The height of the texture/surface for this particular plane.
SbDecodeTargetInfoContentRegion content_region
The following properties specify a rectangle indicating a region within the texture/surface that contains valid image data. The top-left corner is (0, 0) and increases to the right and to the bottom. The units specified by these parameters are number of pixels. The range for left/right is [0, width], and for top/bottom it is [0, height].
Functions
PrivateDecodeTargetReleaser
This function is just an implementation detail of SbDecodeTargetReleaseInGlesContext() and should not be called directly.
Declaration
static void PrivateDecodeTargetReleaser(void *context)
SbDecodeTargetGetInfo
Writes all information about decode_target
into out_info
. The
decode_target
must not be kSbDecodeTargetInvalid. The out_info
pointer must
not be NULL. Returns false if the provided out_info
structure is not zero
initialized.
Declaration
bool SbDecodeTargetGetInfo(SbDecodeTarget decode_target, SbDecodeTargetInfo *out_info)
SbDecodeTargetIsFormatValid
Returns whether a given format is valid.
Declaration
static bool SbDecodeTargetIsFormatValid(SbDecodeTargetFormat format)
SbDecodeTargetIsValid
Returns whether the given file handle is valid.
Declaration
static bool SbDecodeTargetIsValid(SbDecodeTarget handle)
SbDecodeTargetRelease
Returns ownership of decode_target
to the Starboard implementation. This
function will likely result in the destruction of the SbDecodeTarget and all its
associated surfaces, though in some cases, platforms may simply adjust a
reference count. This function must be called on a thread with the context.
Declaration
void SbDecodeTargetRelease(SbDecodeTarget decode_target)
SbDecodeTargetReleaseInGlesContext
Helper function that is possibly useful to Starboard implementations that will release a decode target on the thread with the GLES context current.
Declaration
static void SbDecodeTargetReleaseInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTarget decode_target)
SbDecodeTargetRunInGlesContext
Inline convenience function to run an arbitrary SbDecodeTargetGlesContextRunnerTarget function through a SbDecodeTargetGraphicsContextProvider . This is intended to be called by Starboard implementations, if it is necessary.
Declaration
static void SbDecodeTargetRunInGlesContext(SbDecodeTargetGraphicsContextProvider *provider, SbDecodeTargetGlesContextRunnerTarget target, void *target_context)