1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef PPAPI_PROXY_VIDEO_DESTINATION_RESOURCE_H_
6#define PPAPI_PROXY_VIDEO_DESTINATION_RESOURCE_H_
7
8#include <string>
9
10#include "ppapi/c/pp_var.h"
11#include "ppapi/proxy/connection.h"
12#include "ppapi/proxy/plugin_resource.h"
13#include "ppapi/proxy/ppapi_proxy_export.h"
14#include "ppapi/thunk/ppb_video_destination_private_api.h"
15
16struct PP_VideoFrame_Private;
17
18namespace ppapi {
19
20class TrackedCallback;
21
22namespace proxy {
23
24class PPAPI_PROXY_EXPORT VideoDestinationResource
25    : public PluginResource,
26      public thunk::PPB_VideoDestination_Private_API {
27 public:
28  VideoDestinationResource(Connection connection,
29                           PP_Instance instance);
30  virtual ~VideoDestinationResource();
31
32  // Resource overrides.
33  virtual thunk::PPB_VideoDestination_Private_API*
34      AsPPB_VideoDestination_Private_API() OVERRIDE;
35
36  // PPB_VideoDestination_Private_API implementation.
37  virtual int32_t Open(
38      const PP_Var& stream_url,
39      scoped_refptr<TrackedCallback> callback) OVERRIDE;
40  virtual int32_t PutFrame(const PP_VideoFrame_Private& frame) OVERRIDE;
41  virtual void Close() OVERRIDE;
42
43 private:
44  void OnPluginMsgOpenComplete(
45      const ResourceMessageReplyParams& params);
46
47  scoped_refptr<TrackedCallback> open_callback_;
48  bool is_open_;
49
50  DISALLOW_COPY_AND_ASSIGN(VideoDestinationResource);
51};
52
53}  // namespace proxy
54}  // namespace ppapi
55
56#endif  // PPAPI_PROXY_VIDEO_DESTINATION_RESOURCE_H_
57