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