/* 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. */ /* From dev/ppb_video_decoder_dev.idl modified Tue Oct 29 00:32:59 2013. */ #ifndef PPAPI_C_DEV_PPB_VIDEO_DECODER_DEV_H_ #define PPAPI_C_DEV_PPB_VIDEO_DECODER_DEV_H_ #include "ppapi/c/dev/pp_video_dev.h" #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_macros.h" #include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_size.h" #include "ppapi/c/pp_stdint.h" #define PPB_VIDEODECODER_DEV_INTERFACE_0_16 "PPB_VideoDecoder(Dev);0.16" #define PPB_VIDEODECODER_DEV_INTERFACE PPB_VIDEODECODER_DEV_INTERFACE_0_16 /** * @file * This file defines the <code>PPB_VideoDecoder_Dev</code> interface. */ /** * @addtogroup Interfaces * @{ */ /** * 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. */ struct PPB_VideoDecoder_Dev_0_16 { /** * 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)(PP_Instance instance, PP_Resource context, 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)(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)(PP_Resource video_decoder, const struct PP_VideoBitstreamBuffer_Dev* bitstream_buffer, struct 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)(PP_Resource video_decoder, uint32_t no_of_buffers, const struct 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)(PP_Resource video_decoder, 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)(PP_Resource video_decoder, struct 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)(PP_Resource video_decoder, struct 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)(PP_Resource video_decoder); }; typedef struct PPB_VideoDecoder_Dev_0_16 PPB_VideoDecoder_Dev; /** * @} */ #endif /* PPAPI_C_DEV_PPB_VIDEO_DECODER_DEV_H_ */