Home | History | Annotate | Download | only in dev
      1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 /* From dev/ppb_video_decoder_dev.idl modified Tue Oct 29 00:32:59 2013. */
      7 
      8 #ifndef PPAPI_C_DEV_PPB_VIDEO_DECODER_DEV_H_
      9 #define PPAPI_C_DEV_PPB_VIDEO_DECODER_DEV_H_
     10 
     11 #include "ppapi/c/dev/pp_video_dev.h"
     12 #include "ppapi/c/pp_bool.h"
     13 #include "ppapi/c/pp_completion_callback.h"
     14 #include "ppapi/c/pp_instance.h"
     15 #include "ppapi/c/pp_macros.h"
     16 #include "ppapi/c/pp_resource.h"
     17 #include "ppapi/c/pp_size.h"
     18 #include "ppapi/c/pp_stdint.h"
     19 
     20 #define PPB_VIDEODECODER_DEV_INTERFACE_0_16 "PPB_VideoDecoder(Dev);0.16"
     21 #define PPB_VIDEODECODER_DEV_INTERFACE PPB_VIDEODECODER_DEV_INTERFACE_0_16
     22 
     23 /**
     24  * @file
     25  * This file defines the <code>PPB_VideoDecoder_Dev</code> interface.
     26  */
     27 
     28 
     29 /**
     30  * @addtogroup Interfaces
     31  * @{
     32  */
     33 /**
     34  * Video decoder interface.
     35  *
     36  * Typical usage:
     37  * - Use Create() to create & configure a new PPB_VideoDecoder_Dev resource.
     38  * - Call Decode() to decode some video data.
     39  * - Receive ProvidePictureBuffers callback
     40  *   - Supply the decoder with textures using AssignPictureBuffers.
     41  * - Receive PictureReady callbacks
     42  *   - Hand the textures back to the decoder using ReusePictureBuffer.
     43  * - To signal EOS to the decoder: call Flush() and wait for NotifyFlushDone
     44  *   callback.
     45  * - To reset the decoder (e.g. to implement Seek): call Reset() and wait for
     46  *   NotifyResetDone callback.
     47  * - To tear down the decoder call Destroy().
     48  *
     49  * See PPP_VideoDecoder_Dev for the notifications the decoder may send the
     50  * plugin.
     51  */
     52 struct PPB_VideoDecoder_Dev_0_16 {
     53   /**
     54    * Creates & initializes a video decoder.
     55    *
     56    * Parameters:
     57    *   |instance| pointer to the plugin instance.
     58    *   |context| a PPB_Graphics3D resource in which decoding will happen.
     59    *   |profile| the video stream's format profile.
     60    *
     61    * The created decoder is returned as PP_Resource. 0 means failure.
     62    */
     63   PP_Resource (*Create)(PP_Instance instance,
     64                         PP_Resource context,
     65                         PP_VideoDecoder_Profile profile);
     66   /**
     67    * Tests whether |resource| is a video decoder created through Create
     68    * function of this interface.
     69    *
     70    * Parameters:
     71    *   |resource| is handle to resource to test.
     72    *
     73    * Returns true if is a video decoder, false otherwise.
     74    */
     75   PP_Bool (*IsVideoDecoder)(PP_Resource resource);
     76   /**
     77    * Dispatches bitstream buffer to the decoder.
     78    *
     79    * Parameters:
     80    *   |video_decoder| is the previously created handle to the decoder resource.
     81    *   |bitstream_buffer| is the bitstream buffer that contains at most one
     82    *   input frame.
     83    *   |callback| will be called when |bitstream_buffer| has been processed by
     84    *   the decoder.
     85    *
     86    * Returns an error code from pp_errors.h.
     87    */
     88   int32_t (*Decode)(PP_Resource video_decoder,
     89                     const struct PP_VideoBitstreamBuffer_Dev* bitstream_buffer,
     90                     struct PP_CompletionCallback callback);
     91   /**
     92    * Provides the decoder with texture-backed picture buffers for video
     93    * decoding.
     94    *
     95    * This function should be called when the plugin has its
     96    * ProvidePictureBuffers method called.  The decoder will stall until it has
     97    * received all the buffers it's asked for.
     98    *
     99    * Parameters:
    100    *   |video_decoder| is the previously created handle to the decoder resource.
    101    *   |no_of_buffers| how many buffers are behind picture buffer pointer.
    102    *   |buffers| contains the reference to the picture buffer that was
    103    *   allocated.
    104    */
    105   void (*AssignPictureBuffers)(PP_Resource video_decoder,
    106                                uint32_t no_of_buffers,
    107                                const struct PP_PictureBuffer_Dev buffers[]);
    108   /**
    109    * Tells the decoder to reuse the given picture buffer. Typical use of this
    110    * function is to call from PictureReady callback to recycle picture buffer
    111    * back to the decoder after blitting the image so that decoder can use the
    112    * image for output again.
    113    *
    114    * Parameters:
    115    *   |video_decoder| is the previously created handle to the decoder resource.
    116    *   |picture_buffer_id| contains the id of the picture buffer that was
    117    *   processed.
    118    */
    119   void (*ReusePictureBuffer)(PP_Resource video_decoder,
    120                              int32_t picture_buffer_id);
    121   /**
    122    * Flush input and output buffers in the decoder.  Any pending inputs are
    123    * decoded and pending outputs are delivered to the plugin.  Once done
    124    * flushing, the decoder will call |callback|.
    125    *
    126    * Parameters:
    127    *   |video_decoder| is the previously created handle to the decoder resource.
    128    *   |callback| is one-time callback that will be called once the flushing
    129    *   request has been completed.
    130    *
    131    * Returns an error code from pp_errors.h.
    132    */
    133   int32_t (*Flush)(PP_Resource video_decoder,
    134                    struct PP_CompletionCallback callback);
    135   /**
    136    * Reset the decoder as quickly as possible.  Pending inputs and outputs are
    137    * dropped and the decoder is put back into a state ready to receive further
    138    * Decode() calls.  |callback| will be called when the reset is done.
    139    *
    140    * Parameters:
    141    *   |video_decoder| is the previously created handle to the decoder resource.
    142    *   |callback| is one-time callback that will be called once the reset
    143    *   request has been completed.
    144    *
    145    * Returns an error code from pp_errors.h.
    146    */
    147   int32_t (*Reset)(PP_Resource video_decoder,
    148                    struct PP_CompletionCallback callback);
    149   /**
    150    * Tear down the decoder as quickly as possible.  Pending inputs and outputs
    151    * are dropped and the decoder frees all of its resources.  Although resources
    152    * may be freed asynchronously, after this method returns no more callbacks
    153    * will be made on the client.  Any resources held by the client at that point
    154    * may be freed.
    155    *
    156    * Parameters:
    157    *   |video_decoder| is the previously created handle to the decoder resource.
    158    */
    159   void (*Destroy)(PP_Resource video_decoder);
    160 };
    161 
    162 typedef struct PPB_VideoDecoder_Dev_0_16 PPB_VideoDecoder_Dev;
    163 /**
    164  * @}
    165  */
    166 
    167 #endif  /* PPAPI_C_DEV_PPB_VIDEO_DECODER_DEV_H_ */
    168 
    169