/* Copyright 2012 The Chromium Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* This file defines the <code>PPB_VideoDecoder_Dev</code> interface.
*/
label Chrome {
M14 = 0.16
};
/**
* Video decoder interface.
*
* Typical usage:
* - Use Create() to create & configure a new PPB_VideoDecoder_Dev resource.
* - Call Decode() to decode some video data.
* - Receive ProvidePictureBuffers callback
* - Supply the decoder with textures using AssignPictureBuffers.
* - Receive PictureReady callbacks
* - Hand the textures back to the decoder using ReusePictureBuffer.
* - To signal EOS to the decoder: call Flush() and wait for NotifyFlushDone
* callback.
* - To reset the decoder (e.g. to implement Seek): call Reset() and wait for
* NotifyResetDone callback.
* - To tear down the decoder call Destroy().
*
* See PPP_VideoDecoder_Dev for the notifications the decoder may send the
* plugin.
*/
interface PPB_VideoDecoder_Dev {
/**
* Creates & initializes a video decoder.
*
* Parameters:
* |instance| pointer to the plugin instance.
* |context| a PPB_Graphics3D resource in which decoding will happen.
* |profile| the video stream's format profile.
*
* The created decoder is returned as PP_Resource. 0 means failure.
*/
PP_Resource Create(
[in] PP_Instance instance,
[in] PP_Resource context,
[in] PP_VideoDecoder_Profile profile);
/**
* Tests whether |resource| is a video decoder created through Create
* function of this interface.
*
* Parameters:
* |resource| is handle to resource to test.
*
* Returns true if is a video decoder, false otherwise.
*/
PP_Bool IsVideoDecoder(
[in] PP_Resource resource);
/**
* Dispatches bitstream buffer to the decoder.
*
* Parameters:
* |video_decoder| is the previously created handle to the decoder resource.
* |bitstream_buffer| is the bitstream buffer that contains at most one
* input frame.
* |callback| will be called when |bitstream_buffer| has been processed by
* the decoder.
*
* Returns an error code from pp_errors.h.
*/
int32_t Decode(
[in] PP_Resource video_decoder,
[in] PP_VideoBitstreamBuffer_Dev bitstream_buffer,
[in] PP_CompletionCallback callback);
/**
* Provides the decoder with texture-backed picture buffers for video
* decoding.
*
* This function should be called when the plugin has its
* ProvidePictureBuffers method called. The decoder will stall until it has
* received all the buffers it's asked for.
*
* Parameters:
* |video_decoder| is the previously created handle to the decoder resource.
* |no_of_buffers| how many buffers are behind picture buffer pointer.
* |buffers| contains the reference to the picture buffer that was
* allocated.
*/
void AssignPictureBuffers(
[in] PP_Resource video_decoder,
[in] uint32_t no_of_buffers,
[in, size_as=no_of_buffers] PP_PictureBuffer_Dev[] buffers);
/**
* Tells the decoder to reuse the given picture buffer. Typical use of this
* function is to call from PictureReady callback to recycle picture buffer
* back to the decoder after blitting the image so that decoder can use the
* image for output again.
*
* Parameters:
* |video_decoder| is the previously created handle to the decoder resource.
* |picture_buffer_id| contains the id of the picture buffer that was
* processed.
*/
void ReusePictureBuffer(
[in] PP_Resource video_decoder,
[in] int32_t picture_buffer_id);
/**
* Flush input and output buffers in the decoder. Any pending inputs are
* decoded and pending outputs are delivered to the plugin. Once done
* flushing, the decoder will call |callback|.
*
* Parameters:
* |video_decoder| is the previously created handle to the decoder resource.
* |callback| is one-time callback that will be called once the flushing
* request has been completed.
*
* Returns an error code from pp_errors.h.
*/
int32_t Flush(
[in] PP_Resource video_decoder,
[in] PP_CompletionCallback callback);
/**
* Reset the decoder as quickly as possible. Pending inputs and outputs are
* dropped and the decoder is put back into a state ready to receive further
* Decode() calls. |callback| will be called when the reset is done.
*
* Parameters:
* |video_decoder| is the previously created handle to the decoder resource.
* |callback| is one-time callback that will be called once the reset
* request has been completed.
*
* Returns an error code from pp_errors.h.
*/
int32_t Reset(
[in] PP_Resource video_decoder,
[in] PP_CompletionCallback callback);
/**
* Tear down the decoder as quickly as possible. Pending inputs and outputs
* are dropped and the decoder frees all of its resources. Although resources
* may be freed asynchronously, after this method returns no more callbacks
* will be made on the client. Any resources held by the client at that point
* may be freed.
*
* Parameters:
* |video_decoder| is the previously created handle to the decoder resource.
*/
void Destroy(
[in] PP_Resource video_decoder);
};