blob: 3ca8b2f620b31147cc28520abf3b994f5b69669f [file] [log] [blame]
Avi Drissmandb497b32022-09-15 19:47:281// Copyright 2015 The Chromium Authors
jchuangadd2f052015-02-17 10:10:502// 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
jchuangadd2f052015-02-17 10:10:5010#include "ppapi/c/pp_size.h"
jchuang512b0a0d2015-02-20 03:42:4911#include "ppapi/c/private/pp_video_capture_format.h"
jchuangadd2f052015-02-17 10:10:5012#include "ppapi/proxy/connection.h"
13#include "ppapi/proxy/plugin_resource.h"
14#include "ppapi/proxy/ppapi_proxy_export.h"
15#include "ppapi/shared_impl/resource.h"
jchuangfa1f1432015-02-20 08:22:3016#include "ppapi/thunk/ppb_camera_device_api.h"
jchuangadd2f052015-02-17 10:10:5017
18namespace ppapi {
19namespace proxy {
20
21class CameraCapabilitiesResource;
jchuangadd2f052015-02-17 10:10:5022
jchuangfa1f1432015-02-20 08:22:3023class PPAPI_PROXY_EXPORT CameraDeviceResource
jchuangadd2f052015-02-17 10:10:5024 : public PluginResource,
jchuangfa1f1432015-02-20 08:22:3025 public thunk::PPB_CameraDevice_API {
jchuangadd2f052015-02-17 10:10:5026 public:
jchuangfa1f1432015-02-20 08:22:3027 CameraDeviceResource(Connection connection, PP_Instance instance);
Peter Boström3d5b3cb2021-09-23 21:35:4528
29 CameraDeviceResource(const CameraDeviceResource&) = delete;
30 CameraDeviceResource& operator=(const CameraDeviceResource&) = delete;
31
jchuangfa1f1432015-02-20 08:22:3032 ~CameraDeviceResource() override;
jchuangadd2f052015-02-17 10:10:5033
34 // Resource overrides:
jchuangfa1f1432015-02-20 08:22:3035 thunk::PPB_CameraDevice_API* AsPPB_CameraDevice_API() override {
jchuangadd2f052015-02-17 10:10:5036 return this;
37 }
38
jchuangfa1f1432015-02-20 08:22:3039 // PPB_CameraDevice_API implementation.
jchuangadd2f052015-02-17 10:10:5040 int32_t Open(PP_Var device_id,
41 const scoped_refptr<TrackedCallback>& callback) override;
42 void Close() override;
43 int32_t GetCameraCapabilities(
44 PP_Resource* capabilities,
45 const scoped_refptr<TrackedCallback>& callback) override;
46
47 private:
48 enum class OpenState { BEFORE_OPEN, OPENED, CLOSED };
49
jchuang512b0a0d2015-02-20 03:42:4950 void OnPluginMsgGetVideoCaptureFormatsReply(
jchuangadd2f052015-02-17 10:10:5051 PP_Resource* capabilities_output,
52 const ResourceMessageReplyParams& params,
jchuang512b0a0d2015-02-20 03:42:4953 const std::vector<PP_VideoCaptureFormat>& formats);
54
jchuangadd2f052015-02-17 10:10:5055 void OnPluginMsgOpenReply(const ResourceMessageReplyParams& params);
56
57 bool is_opened() const { return open_state_ == OpenState::OPENED; }
58
59 // Holds a reference of the callback so that Close() can cancel it.
60 scoped_refptr<TrackedCallback> open_callback_;
61 OpenState open_state_;
62
63 scoped_refptr<TrackedCallback> get_capabilities_callback_;
64 scoped_refptr<CameraCapabilitiesResource> camera_capabilities_;
jchuangadd2f052015-02-17 10:10:5065};
66
67} // namespace proxy
68} // namespace ppapi
69
jchuangfa1f1432015-02-20 08:22:3070#endif // PPAPI_PROXY_CAMERA_DEVICE_RESOURCE_H_