15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This file defines the <code>PPB_VideoDecoder_Dev</code> interface.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)label Chrome {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  M14 = 0.16
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Video decoder interface.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Typical usage:
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Use Create() to create & configure a new PPB_VideoDecoder_Dev resource.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Call Decode() to decode some video data.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Receive ProvidePictureBuffers callback
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Supply the decoder with textures using AssignPictureBuffers.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - Receive PictureReady callbacks
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   - Hand the textures back to the decoder using ReusePictureBuffer.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - To signal EOS to the decoder: call Flush() and wait for NotifyFlushDone
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   callback.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - To reset the decoder (e.g. to implement Seek): call Reset() and wait for
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *   NotifyResetDone callback.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - To tear down the decoder call Destroy().
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See PPP_VideoDecoder_Dev for the notifications the decoder may send the
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * plugin.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)interface PPB_VideoDecoder_Dev {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Creates & initializes a video decoder.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |instance| pointer to the plugin instance.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |context| a PPB_Graphics3D resource in which decoding will happen.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |profile| the video stream's format profile.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * The created decoder is returned as PP_Resource. 0 means failure.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource Create(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Instance instance,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource context,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_VideoDecoder_Profile profile);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Tests whether |resource| is a video decoder created through Create
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * function of this interface.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |resource| is handle to resource to test.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Returns true if is a video decoder, false otherwise.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool IsVideoDecoder(
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource resource);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Dispatches bitstream buffer to the decoder.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |video_decoder| is the previously created handle to the decoder resource.
651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   *   |bitstream_buffer| is the bitstream buffer that contains at most one
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)   *   input frame.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |callback| will be called when |bitstream_buffer| has been processed by
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   the decoder.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Returns an error code from pp_errors.h.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t Decode(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource video_decoder,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_VideoBitstreamBuffer_Dev bitstream_buffer,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_CompletionCallback callback);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Provides the decoder with texture-backed picture buffers for video
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * decoding.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * This function should be called when the plugin has its
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * ProvidePictureBuffers method called.  The decoder will stall until it has
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * received all the buffers it's asked for.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |video_decoder| is the previously created handle to the decoder resource.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |no_of_buffers| how many buffers are behind picture buffer pointer.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |buffers| contains the reference to the picture buffer that was
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   allocated.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AssignPictureBuffers(
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource video_decoder,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] uint32_t no_of_buffers,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in, size_as=no_of_buffers] PP_PictureBuffer_Dev[] buffers);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Tells the decoder to reuse the given picture buffer. Typical use of this
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * function is to call from PictureReady callback to recycle picture buffer
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * back to the decoder after blitting the image so that decoder can use the
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * image for output again.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |video_decoder| is the previously created handle to the decoder resource.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |picture_buffer_id| contains the id of the picture buffer that was
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   processed.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReusePictureBuffer(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource video_decoder,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] int32_t picture_buffer_id);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Flush input and output buffers in the decoder.  Any pending inputs are
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * decoded and pending outputs are delivered to the plugin.  Once done
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * flushing, the decoder will call |callback|.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |video_decoder| is the previously created handle to the decoder resource.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |callback| is one-time callback that will be called once the flushing
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   request has been completed.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Returns an error code from pp_errors.h.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t Flush(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource video_decoder,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_CompletionCallback callback);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Reset the decoder as quickly as possible.  Pending inputs and outputs are
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * dropped and the decoder is put back into a state ready to receive further
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Decode() calls.  |callback| will be called when the reset is done.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |video_decoder| is the previously created handle to the decoder resource.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |callback| is one-time callback that will be called once the reset
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   request has been completed.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Returns an error code from pp_errors.h.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t Reset(
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource video_decoder,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_CompletionCallback callback);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Tear down the decoder as quickly as possible.  Pending inputs and outputs
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * are dropped and the decoder frees all of its resources.  Although resources
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * may be freed asynchronously, after this method returns no more callbacks
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * will be made on the client.  Any resources held by the client at that point
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * may be freed.
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Parameters:
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   |video_decoder| is the previously created handle to the decoder resource.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Destroy(
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      [in] PP_Resource video_decoder);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
156