|  | /* Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | * 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); | 
|  | }; |