Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1356)

Unified Diff: content/renderer/pepper/pepper_platform_image_capture.cc

Issue 848863002: PPAPI: implement GetSupportedPreviewSizes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile error on Linux build Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/pepper/pepper_platform_image_capture.cc
diff --git a/content/renderer/pepper/pepper_platform_video_capture.cc b/content/renderer/pepper/pepper_platform_image_capture.cc
similarity index 52%
copy from content/renderer/pepper/pepper_platform_video_capture.cc
copy to content/renderer/pepper/pepper_platform_image_capture.cc
index 0d011f3fdc4217392897e9975df7cadd9f6eb66e..2e4c4295c4807f427ce1c2b7980f96041a38c1c4 100644
--- a/content/renderer/pepper/pepper_platform_video_capture.cc
+++ b/content/renderer/pepper/pepper_platform_image_capture.cc
@@ -1,27 +1,29 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 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 "content/renderer/pepper/pepper_platform_video_capture.h"
+#include "content/renderer/pepper/pepper_platform_image_capture.h"
#include "base/bind.h"
+#include "base/callback_helpers.h"
#include "base/logging.h"
#include "base/message_loop/message_loop_proxy.h"
#include "content/renderer/media/video_capture_impl_manager.h"
+#include "content/renderer/pepper/pepper_image_capture_host.h"
#include "content/renderer/pepper/pepper_media_device_manager.h"
-#include "content/renderer/pepper/pepper_video_capture_host.h"
#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_thread_impl.h"
#include "media/base/bind_to_current_loop.h"
+#include "content/renderer/pepper/gfx_conversion.h"
#include "url/gurl.h"
namespace content {
-PepperPlatformVideoCapture::PepperPlatformVideoCapture(
+PepperPlatformImageCapture::PepperPlatformImageCapture(
int render_frame_id,
const std::string& device_id,
const GURL& document_url,
- PepperVideoCaptureHost* handler)
+ PepperImageCaptureHost* handler)
: render_frame_id_(render_frame_id),
device_id_(device_id),
session_id_(0),
@@ -34,47 +36,33 @@ PepperPlatformVideoCapture::PepperPlatformVideoCapture(
PepperMediaDeviceManager* const device_manager = GetMediaDeviceManager();
if (device_manager) {
pending_open_device_id_ = device_manager->OpenDevice(
- PP_DEVICETYPE_DEV_VIDEOCAPTURE,
+ PP_DEVICETYPE_DEV_VIDEOCAPTURE, // TODO(jchuang): add new type?
wuchengli 2015/01/19 14:05:03 I don't think we need to add a new type. Remove TO
Justin Chuang 2015/01/26 15:00:50 Done.
device_id,
document_url,
- base::Bind(&PepperPlatformVideoCapture::OnDeviceOpened,
+ base::Bind(&PepperPlatformImageCapture::OnDeviceOpened,
weak_factory_.GetWeakPtr()));
pending_open_device_ = true;
}
}
-void PepperPlatformVideoCapture::StartCapture(
- const media::VideoCaptureParams& params) {
+void PepperPlatformImageCapture::GetPreviewSizes() {
DCHECK(thread_checker_.CalledOnValidThread());
- if (!stop_capture_cb_.is_null())
- return;
+
VideoCaptureImplManager* manager =
RenderThreadImpl::current()->video_capture_impl_manager();
- stop_capture_cb_ =
- manager->StartCapture(session_id_,
- params,
- media::BindToCurrentLoop(base::Bind(
- &PepperPlatformVideoCapture::OnStateUpdate,
- weak_factory_.GetWeakPtr())),
- media::BindToCurrentLoop(base::Bind(
- &PepperPlatformVideoCapture::OnFrameReady,
- weak_factory_.GetWeakPtr())));
-}
-
-void PepperPlatformVideoCapture::StopCapture() {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (stop_capture_cb_.is_null())
- return;
- stop_capture_cb_.Run();
- stop_capture_cb_.Reset();
+ manager->GetDeviceSupportedFormats(
+ session_id_,
+ media::BindToCurrentLoop(
+ base::Bind(
+ &PepperPlatformImageCapture::OnDeviceSupportedFormatsEnumerated,
+ weak_factory_.GetWeakPtr())));
}
-void PepperPlatformVideoCapture::DetachEventHandler() {
+void PepperPlatformImageCapture::DetachEventHandler() {
handler_ = NULL;
- StopCapture();
+
if (!release_device_cb_.is_null()) {
- release_device_cb_.Run();
- release_device_cb_.Reset();
+ base::ResetAndReturn(&release_device_cb_).Run();
}
if (!label_.empty()) {
PepperMediaDeviceManager* const device_manager = GetMediaDeviceManager();
@@ -91,16 +79,20 @@ void PepperPlatformVideoCapture::DetachEventHandler() {
}
}
-PepperPlatformVideoCapture::~PepperPlatformVideoCapture() {
- DCHECK(stop_capture_cb_.is_null());
+PepperPlatformImageCapture::~PepperPlatformImageCapture() {
DCHECK(release_device_cb_.is_null());
DCHECK(label_.empty());
DCHECK(!pending_open_device_);
}
-void PepperPlatformVideoCapture::OnDeviceOpened(int request_id,
+void PepperPlatformImageCapture::OnDeviceOpened(int request_id,
bool succeeded,
const std::string& label) {
+ if (!handler_) {
+ NOTREACHED();
wuchengli 2015/01/19 14:05:03 I'd prefer following PepperPlatformVideoCapture::O
Justin Chuang 2015/01/26 15:00:50 I think the code is correct. handler_ is deregiste
wuchengli 2015/01/29 13:52:14 You are right. PepperPlatformImageCapture::DetachE
Justin Chuang 2015/02/02 08:43:44 Done.
+ return;
+ }
+
pending_open_device_ = false;
pending_open_device_id_ = -1;
@@ -109,50 +101,37 @@ void PepperPlatformVideoCapture::OnDeviceOpened(int request_id,
if (succeeded) {
label_ = label;
session_id_ = device_manager->GetSessionID(
- PP_DEVICETYPE_DEV_VIDEOCAPTURE, label);
+ PP_DEVICETYPE_DEV_VIDEOCAPTURE, label); // TODO: new device type?
wuchengli 2015/01/19 14:05:03 Remove TODO.
Justin Chuang 2015/01/26 15:00:50 Done.
VideoCaptureImplManager* manager =
RenderThreadImpl::current()->video_capture_impl_manager();
release_device_cb_ = manager->UseDevice(session_id_);
}
- if (handler_)
- handler_->OnInitialized(succeeded);
+ handler_->OnPlatformInitialized(succeeded);
}
-void PepperPlatformVideoCapture::OnStateUpdate(VideoCaptureState state) {
- if (!handler_)
+void PepperPlatformImageCapture::OnDeviceSupportedFormatsEnumerated(
+ const media::VideoCaptureFormats& formats) {
+ if (!handler_) {
+ NOTREACHED();
wuchengli 2015/01/19 14:05:03 PepperPlatformVideoCapture::OnStateUpdate doesn't
Justin Chuang 2015/01/26 15:00:50 dittos. The pointer to this object is passed as we
wuchengli 2015/01/29 13:52:14 That's correct. Then this can be changed to DCHECK
Justin Chuang 2015/02/02 08:43:44 Done.
return;
- switch (state) {
- case VIDEO_CAPTURE_STATE_STARTED:
- handler_->OnStarted();
- break;
- case VIDEO_CAPTURE_STATE_STOPPED:
- handler_->OnStopped();
- break;
- case VIDEO_CAPTURE_STATE_PAUSED:
- handler_->OnPaused();
- break;
- case VIDEO_CAPTURE_STATE_ERROR:
- handler_->OnError();
- break;
- default:
- NOTREACHED() << "Unexpected state: " << state << ".";
}
-}
-void PepperPlatformVideoCapture::OnFrameReady(
- const scoped_refptr<media::VideoFrame>& frame,
- const media::VideoCaptureFormat& format,
- const base::TimeTicks& estimated_capture_time) {
- if (handler_ && !stop_capture_cb_.is_null())
- handler_->OnFrameReady(frame, format);
+ // TODO(jchuang): Do we need fallback if the device doesn't support format
wuchengli 2015/01/19 14:05:03 Remove TODO. VideoCaptureImpl::GetDeviceSupportedF
Justin Chuang 2015/01/26 15:00:50 Why it won't happen on CrOS? It depends on how the
+ // enumeration (when formats.size() == 0)?
+ std::vector<PP_Size> sizes;
+ for (media::VideoCaptureFormats::const_iterator it = formats.begin();
+ it != formats.end(); it++) {
+ sizes.push_back(PP_FromGfxSize(it->frame_size));
wuchengli 2015/01/19 14:05:03 We should du-dup here. Right? Some frame sizes wil
Justin Chuang 2015/01/26 15:00:50 Thanks. Can you paste result with dup? I don't see
wuchengli 2015/01/29 13:52:14 Sorry. By dup I meant same frame size but differen
+ }
+ handler_->OnPlatformPreviewSizesEnumerated(sizes);
}
-PepperMediaDeviceManager* PepperPlatformVideoCapture::GetMediaDeviceManager() {
+PepperMediaDeviceManager* PepperPlatformImageCapture::GetMediaDeviceManager() {
RenderFrameImpl* const render_frame =
RenderFrameImpl::FromRoutingID(render_frame_id_);
- return render_frame ?
- PepperMediaDeviceManager::GetForRenderFrame(render_frame).get() : NULL;
+ return render_frame
+ ? PepperMediaDeviceManager::GetForRenderFrame(render_frame).get() : NULL;
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698