• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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