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 */
52struct 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
162typedef 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