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