15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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)#ifndef PPAPI_PROXY_PPB_VIDEO_DECODER_PROXY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_PROXY_PPB_VIDEO_DECODER_PROXY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/interface_proxy.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/proxy_completion_callback_factory.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppb_video_decoder_shared.h" 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ppapi/thunk/ppb_video_decoder_dev_api.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/utility/completion_callback_factory.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace proxy { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PPB_VideoDecoder_Proxy : public InterfaceProxy { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PPB_VideoDecoder_Proxy(Dispatcher* dispatcher); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PPB_VideoDecoder_Proxy(); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a VideoDecoder object in the plugin process. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static PP_Resource CreateProxyResource( 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource graphics_context, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_VideoDecoder_Profile profile); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InterfaceProxy implementation. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ApiID kApiID = API_ID_PPB_VIDEO_DECODER_DEV; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers in the renderer process to receive messages from the 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // plugin process. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgCreate(PP_Instance instance, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::HostResource& graphics_context, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_VideoDecoder_Profile profile, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::HostResource* result); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgDecode( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::HostResource& decoder, 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ppapi::HostResource& buffer, int32 id, uint32 size); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgAssignPictureBuffers( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::HostResource& decoder, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<PP_PictureBuffer_Dev>& buffers); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgReusePictureBuffer( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::HostResource& decoder, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 picture_buffer_id); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgFlush(const ppapi::HostResource& decoder); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgReset(const ppapi::HostResource& decoder); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgDestroy(const ppapi::HostResource& decoder); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a message from the renderer process to the plugin process to tell it 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to run its callback. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendMsgEndOfBitstreamACKToPlugin( 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t result, const ppapi::HostResource& decoder, int32 id); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendMsgFlushACKToPlugin( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t result, const ppapi::HostResource& decoder); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendMsgResetACKToPlugin( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t result, const ppapi::HostResource& decoder); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers in the plugin process to receive messages from the 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer process. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgEndOfBitstreamACK(const ppapi::HostResource& decoder, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t id, int32_t result); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgFlushACK(const ppapi::HostResource& decoder, int32_t result); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnMsgResetACK(const ppapi::HostResource& decoder, int32_t result); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyCompletionCallbackFactory<PPB_VideoDecoder_Proxy> callback_factory_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Proxy); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace proxy 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ppapi 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // PPAPI_PROXY_PPB_VIDEO_DECODER_PROXY_H_ 79