Commit 7741135d authored by piman@google.com's avatar piman@google.com

C++ wrappers for PPB_VideoCapture_Dev

BUG=None
TEST=VideoCapture sample (in a later CL)

Review URL: http://codereview.chromium.org/7528006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95942 0039d316-1c4b-4281-b951-d872f2087c98
parent ca492c65
......@@ -27,6 +27,11 @@ Buffer_Dev::Buffer_Dev(const Buffer_Dev& other)
Init();
}
Buffer_Dev::Buffer_Dev(PP_Resource resource)
: Resource(resource) {
Init();
}
Buffer_Dev::Buffer_Dev(Instance* instance, uint32_t size)
: data_(NULL),
size_(0) {
......
......@@ -16,6 +16,7 @@ class Buffer_Dev : public Resource {
// Creates an is_null() Buffer object.
Buffer_Dev();
Buffer_Dev(const Buffer_Dev& other);
explicit Buffer_Dev(PP_Resource resource);
// Creates & Maps a new Buffer in the browser with the given size. The
// resulting object will be is_null() if either Create() or Map() fails.
......
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ppapi/cpp/dev/video_capture_client_dev.h"
#include "ppapi/c/dev/ppp_video_capture_dev.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
namespace pp {
namespace {
const char kPPPVideoCaptureInterface[] = PPP_VIDEO_CAPTURE_DEV_INTERFACE;
void OnDeviceInfo(PP_Instance instance,
PP_Resource resource,
const struct PP_VideoCaptureDeviceInfo_Dev* info,
uint32_t buffer_count,
const PP_Resource* buffers) {
VideoCaptureClient_Dev* client = static_cast<VideoCaptureClient_Dev*>(
Instance::GetPerInstanceObject(instance, kPPPVideoCaptureInterface));
if (!client)
return;
std::vector<Buffer_Dev> buffer_list;
buffer_list.reserve(buffer_count);
for (uint32_t i = 0; i < buffer_count; ++i)
buffer_list.push_back(Buffer_Dev(buffers[i]));
client->OnDeviceInfo(resource, *info, buffer_list);
}
void OnStatus(PP_Instance instance, PP_Resource resource, uint32_t status) {
VideoCaptureClient_Dev* client = static_cast<VideoCaptureClient_Dev*>(
Instance::GetPerInstanceObject(instance, kPPPVideoCaptureInterface));
if (client)
client->OnStatus(resource, status);
}
void OnError(PP_Instance instance, PP_Resource resource, uint32_t error_code) {
VideoCaptureClient_Dev* client = static_cast<VideoCaptureClient_Dev*>(
Instance::GetPerInstanceObject(instance, kPPPVideoCaptureInterface));
if (client)
client->OnError(resource, error_code);
}
void OnBufferReady(PP_Instance instance,
PP_Resource resource,
uint32_t buffer) {
VideoCaptureClient_Dev* client = static_cast<VideoCaptureClient_Dev*>(
Instance::GetPerInstanceObject(instance, kPPPVideoCaptureInterface));
if (client)
client->OnBufferReady(resource, buffer);
}
PPP_VideoCapture_Dev ppp_video_capture = {
OnDeviceInfo,
OnStatus,
OnError,
OnBufferReady
};
} // namespace
VideoCaptureClient_Dev::VideoCaptureClient_Dev(Instance* instance)
: instance_(instance) {
pp::Module::Get()->AddPluginInterface(kPPPVideoCaptureInterface,
&ppp_video_capture);
instance_->AddPerInstanceObject(kPPPVideoCaptureInterface, this);
}
VideoCaptureClient_Dev::~VideoCaptureClient_Dev() {
instance_->RemovePerInstanceObject(kPPPVideoCaptureInterface, this);
}
} // namespace pp
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PPAPI_CPP_DEV_VIDEO_CAPTURE_CLIENT_DEV_H_
#define PPAPI_CPP_DEV_VIDEO_CAPTURE_CLIENT_DEV_H_
#include <vector>
#include "ppapi/c/dev/pp_video_capture_dev.h"
#include "ppapi/cpp/dev/buffer_dev.h"
#include "ppapi/cpp/resource.h"
namespace pp {
class Instance;
class VideoCaptureClient_Dev {
public:
explicit VideoCaptureClient_Dev(Instance* instance);
virtual ~VideoCaptureClient_Dev();
virtual void OnDeviceInfo(PP_Resource video_capture,
const PP_VideoCaptureDeviceInfo_Dev& info,
const std::vector<Buffer_Dev>& buffers) = 0;
virtual void OnStatus(PP_Resource video_capture, uint32_t status) = 0;
virtual void OnError(PP_Resource video_capture, uint32_t error) = 0;
virtual void OnBufferReady(PP_Resource video_capture, uint32_t buffer) = 0;
private:
Instance* instance_;
};
} // namespace pp
#endif // PPAPI_CPP_DEV_VIDEO_CAPTURE_CLIENT_DEV_H_
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ppapi/cpp/dev/video_capture_dev.h"
#include "ppapi/c/dev/ppb_video_capture_dev.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/module_impl.h"
namespace pp {
namespace {
template <> const char* interface_name<PPB_VideoCapture_Dev>() {
return PPB_VIDEO_CAPTURE_DEV_INTERFACE;
}
} // namespace
VideoCapture_Dev::VideoCapture_Dev(const Instance& instance) {
if (!has_interface<PPB_VideoCapture_Dev>())
return;
PassRefFromConstructor(get_interface<PPB_VideoCapture_Dev>()->Create(
instance.pp_instance()));
}
VideoCapture_Dev::VideoCapture_Dev(PP_Resource resource) : Resource(resource) {
}
VideoCapture_Dev::VideoCapture_Dev(const VideoCapture_Dev& other)
: Resource(other) {
}
int32_t VideoCapture_Dev::StartCapture(
const PP_VideoCaptureDeviceInfo_Dev& requested_info,
uint32_t buffer_count) {
if (!has_interface<PPB_VideoCapture_Dev>())
return PP_ERROR_FAILED;
return get_interface<PPB_VideoCapture_Dev>()->StartCapture(
pp_resource(), &requested_info, buffer_count);
}
int32_t VideoCapture_Dev::ReuseBuffer(uint32_t buffer) {
if (!has_interface<PPB_VideoCapture_Dev>())
return PP_ERROR_FAILED;
return get_interface<PPB_VideoCapture_Dev>()->ReuseBuffer(
pp_resource(), buffer);
}
int32_t VideoCapture_Dev::StopCapture(){
if (!has_interface<PPB_VideoCapture_Dev>())
return PP_ERROR_FAILED;
return get_interface<PPB_VideoCapture_Dev>()->StopCapture(pp_resource());
}
} // namespace pp
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PPAPI_CPP_DEV_VIDEO_CAPTURE_DEV_H_
#define PPAPI_CPP_DEV_VIDEO_CAPTURE_DEV_H_
#include "ppapi/c/dev/pp_video_capture_dev.h"
#include "ppapi/cpp/resource.h"
namespace pp {
class Instance;
class VideoCapture_Dev : public Resource {
public:
explicit VideoCapture_Dev(const Instance& instance);
VideoCapture_Dev(PP_Resource resource);
VideoCapture_Dev(const VideoCapture_Dev& other);
int32_t StartCapture(const PP_VideoCaptureDeviceInfo_Dev& requested_info,
uint32_t buffer_count);
int32_t ReuseBuffer(uint32_t buffer);
int32_t StopCapture();
};
} // namespace pp
#endif // PPAPI_CPP_DEV_VIDEO_CAPTURE_DEV_H_
......@@ -212,6 +212,10 @@
'cpp/dev/surface_3d_dev.h',
'cpp/dev/url_util_dev.cc',
'cpp/dev/url_util_dev.h',
'cpp/dev/video_capture_client_dev.cc',
'cpp/dev/video_capture_client_dev.h',
'cpp/dev/video_capture_dev.cc',
'cpp/dev/video_capture_dev.h',
'cpp/dev/video_decoder_client_dev.cc',
'cpp/dev/video_decoder_client_dev.h',
'cpp/dev/video_decoder_dev.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment