blob: d6ff4b7846ad7c48a958185c4ce7d0bea91838ca [file] [log] [blame]
jchuangadd2f052015-02-17 10:10:501// Copyright 2015 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
jchuangfa1f1432015-02-20 08:22:305#ifndef PPAPI_PROXY_CAMERA_DEVICE_RESOURCE_H_
6#define PPAPI_PROXY_CAMERA_DEVICE_RESOURCE_H_
jchuangadd2f052015-02-17 10:10:507
avie029c4132015-12-23 06:45:228#include <stdint.h>
9
10#include "base/macros.h"
jchuangadd2f052015-02-17 10:10:5011#include "ppapi/c/pp_size.h"
jchuang512b0a0d2015-02-20 03:42:4912#include "ppapi/c/private/pp_video_capture_format.h"
jchuangadd2f052015-02-17 10:10:5013#include "ppapi/proxy/connection.h"
14#include "ppapi/proxy/plugin_resource.h"
15#include "ppapi/proxy/ppapi_proxy_export.h"
16#include "ppapi/shared_impl/resource.h"
jchuangfa1f1432015-02-20 08:22:3017#include "ppapi/thunk/ppb_camera_device_api.h"
jchuangadd2f052015-02-17 10:10:5018
19namespace ppapi {
20namespace proxy {
21
22class CameraCapabilitiesResource;
jchuangadd2f052015-02-17 10:10:5023
jchuangfa1f1432015-02-20 08:22:3024class PPAPI_PROXY_EXPORT CameraDeviceResource
jchuangadd2f052015-02-17 10:10:5025 : public PluginResource,
jchuangfa1f1432015-02-20 08:22:3026 public thunk::PPB_CameraDevice_API {
jchuangadd2f052015-02-17 10:10:5027 public:
jchuangfa1f1432015-02-20 08:22:3028 CameraDeviceResource(Connection connection, PP_Instance instance);
29 ~CameraDeviceResource() override;
jchuangadd2f052015-02-17 10:10:5030
31 // Resource overrides:
jchuangfa1f1432015-02-20 08:22:3032 thunk::PPB_CameraDevice_API* AsPPB_CameraDevice_API() override {
jchuangadd2f052015-02-17 10:10:5033 return this;
34 }
35
jchuangfa1f1432015-02-20 08:22:3036 // PPB_CameraDevice_API implementation.
jchuangadd2f052015-02-17 10:10:5037 int32_t Open(PP_Var device_id,
38 const scoped_refptr<TrackedCallback>& callback) override;
39 void Close() override;
40 int32_t GetCameraCapabilities(
41 PP_Resource* capabilities,
42 const scoped_refptr<TrackedCallback>& callback) override;
43
44 private:
45 enum class OpenState { BEFORE_OPEN, OPENED, CLOSED };
46
jchuang512b0a0d2015-02-20 03:42:4947 void OnPluginMsgGetVideoCaptureFormatsReply(
jchuangadd2f052015-02-17 10:10:5048 PP_Resource* capabilities_output,
49 const ResourceMessageReplyParams& params,
jchuang512b0a0d2015-02-20 03:42:4950 const std::vector<PP_VideoCaptureFormat>& formats);
51
jchuangadd2f052015-02-17 10:10:5052 void OnPluginMsgOpenReply(const ResourceMessageReplyParams& params);
53
54 bool is_opened() const { return open_state_ == OpenState::OPENED; }
55
56 // Holds a reference of the callback so that Close() can cancel it.
57 scoped_refptr<TrackedCallback> open_callback_;
58 OpenState open_state_;
59
60 scoped_refptr<TrackedCallback> get_capabilities_callback_;
61 scoped_refptr<CameraCapabilitiesResource> camera_capabilities_;
62
jchuangfa1f1432015-02-20 08:22:3063 DISALLOW_COPY_AND_ASSIGN(CameraDeviceResource);
jchuangadd2f052015-02-17 10:10:5064};
65
66} // namespace proxy
67} // namespace ppapi
68
jchuangfa1f1432015-02-20 08:22:3069#endif // PPAPI_PROXY_CAMERA_DEVICE_RESOURCE_H_