X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontent%2Fbrowser%2Fmedia%2Fcapture%2Fdesktop_capture_device_aura.cc;h=4939b62dbc5424a2c27184b51d7a8ed5438c3805;hb=4a1a0bdd01eef90b0826a0e761d3379d3715c10f;hp=08aec1eba2e6976f0c02edad56aefe0dfde5abe8;hpb=b1be5ca53587d23e7aeb77b26861fdc0a181ffd8;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/content/browser/media/capture/desktop_capture_device_aura.cc b/src/content/browser/media/capture/desktop_capture_device_aura.cc index 08aec1e..4939b62 100644 --- a/src/content/browser/media/capture/desktop_capture_device_aura.cc +++ b/src/content/browser/media/capture/desktop_capture_device_aura.cc @@ -14,7 +14,6 @@ #include "content/browser/media/capture/desktop_capture_device_uma_types.h" #include "content/common/gpu/client/gl_helper.h" #include "content/public/browser/browser_thread.h" -#include "media/base/bind_to_current_loop.h" #include "media/base/video_util.h" #include "media/video/capture/video_capture_types.h" #include "skia/ext/image_operations.h" @@ -215,7 +214,7 @@ bool DesktopVideoCaptureMachine::Start( desktop_window_->GetHost()->compositor()->AddObserver(this); // Starts timer. - timer_.Start(FROM_HERE, oracle_proxy_->capture_period(), + timer_.Start(FROM_HERE, oracle_proxy_->min_capture_period(), base::Bind(&DesktopVideoCaptureMachine::Capture, AsWeakPtr(), false)); @@ -246,8 +245,15 @@ void DesktopVideoCaptureMachine::UpdateCaptureSize() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (oracle_proxy_ && desktop_window_) { ui::Layer* layer = desktop_window_->layer(); - oracle_proxy_->UpdateCaptureSize(ui::ConvertSizeToPixel( - layer, layer->bounds().size())); + gfx::Size capture_size = + ui::ConvertSizeToPixel(layer, layer->bounds().size()); +#if defined(OS_CHROMEOS) + // Pad desktop capture size to multiples of 16 pixels to accommodate HW + // encoder. TODO(hshi): remove this hack. See http://crbug.com/402151 + capture_size.SetSize((capture_size.width() + 15) & ~15, + (capture_size.height() + 15) & ~15); +#endif + oracle_proxy_->UpdateCaptureSize(capture_size); } ClearCursorState(); } @@ -267,15 +273,13 @@ void DesktopVideoCaptureMachine::Capture(bool dirty) { dirty ? VideoCaptureOracle::kCompositorUpdate : VideoCaptureOracle::kTimerPoll; if (oracle_proxy_->ObserveEventAndDecideCapture( - event, start_time, &frame, &capture_frame_cb)) { + event, gfx::Rect(), start_time, &frame, &capture_frame_cb)) { scoped_ptr request = cc::CopyOutputRequest::CreateRequest( base::Bind(&DesktopVideoCaptureMachine::DidCopyOutput, AsWeakPtr(), frame, start_time, capture_frame_cb)); - gfx::Rect window_rect = - ui::ConvertRectToPixel(desktop_window_->layer(), - gfx::Rect(desktop_window_->bounds().width(), - desktop_window_->bounds().height())); + gfx::Rect window_rect = gfx::Rect(desktop_window_->bounds().width(), + desktop_window_->bounds().height()); request->set_area(window_rect); desktop_window_->layer()->RequestCopyOfOutput(request.Pass()); } @@ -296,14 +300,8 @@ void CopyOutputFinishedForVideo( } void RunSingleReleaseCallback(scoped_ptr cb, - const std::vector& sync_points) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - GLHelper* gl_helper = ImageTransportFactory::GetInstance()->GetGLHelper(); - DCHECK(gl_helper); - for (unsigned i = 0; i < sync_points.size(); i++) - gl_helper->WaitSyncPoint(sync_points[i]); - uint32 new_sync_point = gl_helper->InsertSyncPoint(); - cb->Run(new_sync_point, false); + uint32 sync_point) { + cb->Run(sync_point, false); } void DesktopVideoCaptureMachine::DidCopyOutput( @@ -330,7 +328,7 @@ void DesktopVideoCaptureMachine::DidCopyOutput( } else { IncrementDesktopCaptureCounter(succeeded ? FIRST_WINDOW_CAPTURE_SUCCEEDED - : FIRST_WINDOW_CAPTURE_SUCCEEDED); + : FIRST_WINDOW_CAPTURE_FAILED); } } } @@ -357,8 +355,7 @@ bool DesktopVideoCaptureMachine::ProcessCopyOutputResponse( make_scoped_ptr(new gpu::MailboxHolder(texture_mailbox.mailbox(), texture_mailbox.target(), texture_mailbox.sync_point())), - media::BindToCurrentLoop(base::Bind(&RunSingleReleaseCallback, - base::Passed(&release_callback))), + base::Bind(&RunSingleReleaseCallback, base::Passed(&release_callback)), result->size(), gfx::Rect(result->size()), result->size(), @@ -523,7 +520,7 @@ media::VideoCaptureDevice* DesktopCaptureDeviceAura::Create( const DesktopMediaID& source) { IncrementDesktopCaptureCounter(source.type == DesktopMediaID::TYPE_SCREEN ? SCREEN_CAPTURER_CREATED - : WINDOW_CATPTURER_CREATED); + : WINDOW_CAPTURER_CREATED); return new DesktopCaptureDeviceAura(source); }