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

Side by Side Diff: content/browser/renderer_host/media/video_capture_controller.cc

Issue 10035054: Merge VideoCaptureDevice::Capability with media::VideoCaptureCapability (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebased code and addressed scherkus's comments Created 8 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/media/video_capture_controller.h" 5 #include "content/browser/renderer_host/media/video_capture_controller.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "content/browser/renderer_host/media/media_stream_manager.h" 10 #include "content/browser/renderer_host/media/media_stream_manager.h"
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 uint8* target = static_cast<uint8*>(dib->memory()); 281 uint8* target = static_cast<uint8*>(dib->memory());
282 CHECK(dib->created_size() >= static_cast<size_t> (frame_info_.width * 282 CHECK(dib->created_size() >= static_cast<size_t> (frame_info_.width *
283 frame_info_.height * 3) / 283 frame_info_.height * 3) /
284 2); 284 2);
285 uint8* yplane = target; 285 uint8* yplane = target;
286 uint8* uplane = target + frame_info_.width * frame_info_.height; 286 uint8* uplane = target + frame_info_.width * frame_info_.height;
287 uint8* vplane = uplane + (frame_info_.width * frame_info_.height) / 4; 287 uint8* vplane = uplane + (frame_info_.width * frame_info_.height) / 4;
288 288
289 // Do color conversion from the camera format to I420. 289 // Do color conversion from the camera format to I420.
290 switch (frame_info_.color) { 290 switch (frame_info_.color) {
291 case media::VideoCaptureDevice::kColorUnknown: // Color format not set. 291 case media::VideoCaptureCapability::kColorUnknown: // Color format not set.
292 break; 292 break;
293 case media::VideoCaptureDevice::kI420: { 293 case media::VideoCaptureCapability::kI420: {
294 memcpy(target, data, (frame_info_.width * frame_info_.height * 3) / 2); 294 memcpy(target, data, (frame_info_.width * frame_info_.height * 3) / 2);
295 break; 295 break;
296 } 296 }
297 case media::VideoCaptureDevice::kYV12: { 297 case media::VideoCaptureCapability::kYV12: {
298 const uint8* ptr = data; 298 const uint8* ptr = data;
299 memcpy(yplane, ptr, (frame_info_.width * frame_info_.height)); 299 memcpy(yplane, ptr, (frame_info_.width * frame_info_.height));
300 ptr += frame_info_.width * frame_info_.height; 300 ptr += frame_info_.width * frame_info_.height;
301 memcpy(vplane, ptr, (frame_info_.width * frame_info_.height) >> 2); 301 memcpy(vplane, ptr, (frame_info_.width * frame_info_.height) >> 2);
302 ptr += (frame_info_.width * frame_info_.height) >> 2; 302 ptr += (frame_info_.width * frame_info_.height) >> 2;
303 memcpy(uplane, ptr, (frame_info_.width * frame_info_.height) >> 2); 303 memcpy(uplane, ptr, (frame_info_.width * frame_info_.height) >> 2);
304 break; 304 break;
305 } 305 }
306 case media::VideoCaptureDevice::kNV21: { 306 case media::VideoCaptureCapability::kNV21: {
307 media::ConvertNV21ToYUV(data, yplane, uplane, vplane, frame_info_.width, 307 media::ConvertNV21ToYUV(data, yplane, uplane, vplane, frame_info_.width,
308 frame_info_.height); 308 frame_info_.height);
309 break; 309 break;
310 } 310 }
311 case media::VideoCaptureDevice::kYUY2: { 311 case media::VideoCaptureCapability::kYUY2: {
312 media::ConvertYUY2ToYUV(data, yplane, uplane, vplane, frame_info_.width, 312 media::ConvertYUY2ToYUV(data, yplane, uplane, vplane, frame_info_.width,
313 frame_info_.height); 313 frame_info_.height);
314 break; 314 break;
315 } 315 }
316 case media::VideoCaptureDevice::kRGB24: { 316 case media::VideoCaptureCapability::kRGB24: {
317 int ystride = frame_info_.width; 317 int ystride = frame_info_.width;
318 int uvstride = frame_info_.width / 2; 318 int uvstride = frame_info_.width / 2;
319 #if defined(OS_WIN) // RGB on Windows start at the bottom line. 319 #if defined(OS_WIN) // RGB on Windows start at the bottom line.
320 int rgb_stride = -3 * frame_info_.width; 320 int rgb_stride = -3 * frame_info_.width;
321 const uint8* rgb_src = data + 3 * frame_info_.width * 321 const uint8* rgb_src = data + 3 * frame_info_.width *
322 (frame_info_.height -1); 322 (frame_info_.height -1);
323 #else 323 #else
324 int rgb_stride = 3 * frame_info_.width; 324 int rgb_stride = 3 * frame_info_.width;
325 const uint8* rgb_src = data; 325 const uint8* rgb_src = data;
326 #endif 326 #endif
327 media::ConvertRGB24ToYUV(rgb_src, yplane, uplane, vplane, 327 media::ConvertRGB24ToYUV(rgb_src, yplane, uplane, vplane,
328 frame_info_.width, frame_info_.height, 328 frame_info_.width, frame_info_.height,
329 rgb_stride, ystride, uvstride); 329 rgb_stride, ystride, uvstride);
330 break; 330 break;
331 } 331 }
332 case media::VideoCaptureDevice::kARGB: { 332 case media::VideoCaptureCapability::kARGB: {
333 media::ConvertRGB32ToYUV(data, yplane, uplane, vplane, frame_info_.width, 333 media::ConvertRGB32ToYUV(data, yplane, uplane, vplane, frame_info_.width,
334 frame_info_.height, frame_info_.width * 4, 334 frame_info_.height, frame_info_.width * 4,
335 frame_info_.width, frame_info_.width / 2); 335 frame_info_.width, frame_info_.width / 2);
336 break; 336 break;
337 } 337 }
338 default: 338 default:
339 NOTREACHED(); 339 NOTREACHED();
340 } 340 }
341 341
342 BrowserThread::PostTask(BrowserThread::IO, 342 BrowserThread::PostTask(BrowserThread::IO,
343 FROM_HERE, 343 FROM_HERE,
344 base::Bind(&VideoCaptureController::DoIncomingCapturedFrameOnIOThread, 344 base::Bind(&VideoCaptureController::DoIncomingCapturedFrameOnIOThread,
345 this, buffer_id, timestamp)); 345 this, buffer_id, timestamp));
346 } 346 }
347 347
348 void VideoCaptureController::OnError() { 348 void VideoCaptureController::OnError() {
349 video_capture_manager_->Error(current_params_.session_id); 349 video_capture_manager_->Error(current_params_.session_id);
350 BrowserThread::PostTask(BrowserThread::IO, 350 BrowserThread::PostTask(BrowserThread::IO,
351 FROM_HERE, 351 FROM_HERE,
352 base::Bind(&VideoCaptureController::DoErrorOnIOThread, this)); 352 base::Bind(&VideoCaptureController::DoErrorOnIOThread, this));
353 } 353 }
354 354
355 void VideoCaptureController::OnFrameInfo( 355 void VideoCaptureController::OnFrameInfo(
356 const media::VideoCaptureDevice::Capability& info) { 356 const media::VideoCaptureCapability& info) {
357 frame_info_= info; 357 frame_info_= info;
358 BrowserThread::PostTask(BrowserThread::IO, 358 BrowserThread::PostTask(BrowserThread::IO,
359 FROM_HERE, 359 FROM_HERE,
360 base::Bind(&VideoCaptureController::DoFrameInfoOnIOThread, 360 base::Bind(&VideoCaptureController::DoFrameInfoOnIOThread,
361 this, info)); 361 this, info));
362 } 362 }
363 363
364 void VideoCaptureController::DoIncomingCapturedFrameOnIOThread( 364 void VideoCaptureController::DoIncomingCapturedFrameOnIOThread(
365 int buffer_id, base::Time timestamp) { 365 int buffer_id, base::Time timestamp) {
366 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 366 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
(...skipping 25 matching lines...) Expand all
392 client_it != controller_clients_.end(); client_it++) { 392 client_it != controller_clients_.end(); client_it++) {
393 (*client_it)->event_handler->OnError((*client_it)->controller_id); 393 (*client_it)->event_handler->OnError((*client_it)->controller_id);
394 } 394 }
395 for (client_it = pending_clients_.begin(); 395 for (client_it = pending_clients_.begin();
396 client_it != pending_clients_.end(); client_it++) { 396 client_it != pending_clients_.end(); client_it++) {
397 (*client_it)->event_handler->OnError((*client_it)->controller_id); 397 (*client_it)->event_handler->OnError((*client_it)->controller_id);
398 } 398 }
399 } 399 }
400 400
401 void VideoCaptureController::DoFrameInfoOnIOThread( 401 void VideoCaptureController::DoFrameInfoOnIOThread(
402 const media::VideoCaptureDevice::Capability info) { 402 const media::VideoCaptureCapability info) {
403 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 403 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
404 DCHECK(owned_dibs_.empty()) 404 DCHECK(owned_dibs_.empty())
405 << "Device is restarted without releasing shared memory."; 405 << "Device is restarted without releasing shared memory.";
406 406
407 bool frames_created = true; 407 bool frames_created = true;
408 const size_t needed_size = (info.width * info.height * 3) / 2; 408 const size_t needed_size = (info.width * info.height * 3) / 2;
409 { 409 {
410 base::AutoLock lock(lock_); 410 base::AutoLock lock(lock_);
411 for (size_t i = 1; i <= kNoOfDIBS; ++i) { 411 for (size_t i = 1; i <= kNoOfDIBS; ++i) {
412 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); 412 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 } 538 }
539 539
540 void VideoCaptureController::DoDeviceStoppedOnIOThread() { 540 void VideoCaptureController::DoDeviceStoppedOnIOThread() {
541 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 541 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
542 device_in_use_ = false; 542 device_in_use_ = false;
543 if (state_ == video_capture::kStopping) { 543 if (state_ == video_capture::kStopping) {
544 PostStopping(); 544 PostStopping();
545 } 545 }
546 } 546 }
547 547
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698