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

Side by Side Diff: content/renderer/media/video_capture_impl.cc

Issue 1413723014: Handle MJPEG HW Decode case in VideoCaptureImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // Notes about usage of this object by VideoCaptureImplManager. 5 // Notes about usage of this object by VideoCaptureImplManager.
6 // 6 //
7 // VideoCaptureImplManager access this object by using a Unretained() 7 // VideoCaptureImplManager access this object by using a Unretained()
8 // binding and tasks on the IO thread. It is then important that 8 // binding and tasks on the IO thread. It is then important that
9 // VideoCaptureImpl never post task to itself. All operations must be 9 // VideoCaptureImpl never post task to itself. All operations must be
10 // synchronous. 10 // synchronous.
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 handles[media::VideoFrame::kYPlane], 352 handles[media::VideoFrame::kYPlane],
353 handles[media::VideoFrame::kUPlane], 353 handles[media::VideoFrame::kUPlane],
354 handles[media::VideoFrame::kVPlane], 354 handles[media::VideoFrame::kVPlane],
355 timestamp - first_frame_timestamp_); 355 timestamp - first_frame_timestamp_);
356 DCHECK(frame); 356 DCHECK(frame);
357 buffer_finished_callback = media::BindToCurrentLoop( 357 buffer_finished_callback = media::BindToCurrentLoop(
358 base::Bind(&VideoCaptureImpl::OnClientBufferFinished2, 358 base::Bind(&VideoCaptureImpl::OnClientBufferFinished2,
359 weak_factory_.GetWeakPtr(), buffer_id, buffer)); 359 weak_factory_.GetWeakPtr(), buffer_id, buffer));
360 } else { 360 } else {
361 scoped_refptr<ClientBuffer> buffer; 361 scoped_refptr<ClientBuffer> buffer;
362 if (storage_type == media::VideoFrame::STORAGE_UNOWNED_MEMORY) { 362 if (storage_type == media::VideoFrame::STORAGE_OPAQUE) {
363 DCHECK(mailbox_holder.mailbox.Verify());
364 DCHECK_EQ(media::PIXEL_FORMAT_ARGB, pixel_format);
365 frame = media::VideoFrame::WrapNativeTexture(
366 pixel_format,
367 mailbox_holder,
368 base::Bind(&SaveReleaseSyncToken, release_sync_token.get()),
369 coded_size,
370 gfx::Rect(coded_size),
371 coded_size,
372 timestamp - first_frame_timestamp_);
373 }
374 else {
375 DCHECK(storage_type == media::VideoFrame::STORAGE_UNOWNED_MEMORY ||
376 storage_type == media::VideoFrame::STORAGE_SHMEM);
363 DCHECK_EQ(media::PIXEL_FORMAT_I420, pixel_format); 377 DCHECK_EQ(media::PIXEL_FORMAT_I420, pixel_format);
364 const auto& iter = client_buffers_.find(buffer_id); 378 const auto& iter = client_buffers_.find(buffer_id);
365 DCHECK(iter != client_buffers_.end()); 379 DCHECK(iter != client_buffers_.end());
366 buffer = iter->second; 380 buffer = iter->second;
367 frame = media::VideoFrame::WrapExternalSharedMemory( 381 frame = media::VideoFrame::WrapExternalSharedMemory(
368 pixel_format, 382 pixel_format,
369 coded_size, 383 coded_size,
370 visible_rect, 384 visible_rect,
371 gfx::Size(visible_rect.width(), 385 gfx::Size(visible_rect.width(),
372 visible_rect.height()), 386 visible_rect.height()),
373 reinterpret_cast<uint8*>(buffer->buffer()->memory()), 387 reinterpret_cast<uint8*>(buffer->buffer()->memory()),
374 buffer->buffer_size(), 388 buffer->buffer_size(),
375 buffer->buffer()->handle(), 389 buffer->buffer()->handle(),
376 0 /* shared_memory_offset */, 390 0 /* shared_memory_offset */,
377 timestamp - first_frame_timestamp_); 391 timestamp - first_frame_timestamp_);
378 } else {
379 DCHECK_EQ(storage_type, media::VideoFrame::STORAGE_OPAQUE);
380 DCHECK(mailbox_holder.mailbox.Verify());
381 DCHECK_EQ(media::PIXEL_FORMAT_ARGB, pixel_format);
382 frame = media::VideoFrame::WrapNativeTexture(
383 pixel_format, mailbox_holder,
384 base::Bind(&SaveReleaseSyncToken, release_sync_token.get()),
385 coded_size, gfx::Rect(coded_size), coded_size,
386 timestamp - first_frame_timestamp_);
387 } 392 }
393 DCHECK(frame);
Pawel Osciak 2015/11/05 23:49:26 nullptr is a valid return value from Wrap*() metho
388 buffer_finished_callback = media::BindToCurrentLoop( 394 buffer_finished_callback = media::BindToCurrentLoop(
389 base::Bind(&VideoCaptureImpl::OnClientBufferFinished, 395 base::Bind(&VideoCaptureImpl::OnClientBufferFinished,
390 weak_factory_.GetWeakPtr(), buffer_id, buffer)); 396 weak_factory_.GetWeakPtr(), buffer_id, buffer));
391 } 397 }
392 frame->metadata()->SetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME, 398 frame->metadata()->SetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME,
393 timestamp); 399 timestamp);
394 frame->AddDestructionObserver( 400 frame->AddDestructionObserver(
395 base::Bind(&VideoCaptureImpl::DidFinishConsumingFrame, frame->metadata(), 401 base::Bind(&VideoCaptureImpl::DidFinishConsumingFrame, frame->metadata(),
396 base::Passed(&release_sync_token), buffer_finished_callback)); 402 base::Passed(&release_sync_token), buffer_finished_callback));
397 403
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 double consumer_resource_utilization = -1.0; 566 double consumer_resource_utilization = -1.0;
561 if (!metadata->GetDouble(media::VideoFrameMetadata::RESOURCE_UTILIZATION, 567 if (!metadata->GetDouble(media::VideoFrameMetadata::RESOURCE_UTILIZATION,
562 &consumer_resource_utilization)) { 568 &consumer_resource_utilization)) {
563 consumer_resource_utilization = -1.0; 569 consumer_resource_utilization = -1.0;
564 } 570 }
565 571
566 callback_to_io_thread.Run(*release_sync_token, consumer_resource_utilization); 572 callback_to_io_thread.Run(*release_sync_token, consumer_resource_utilization);
567 } 573 }
568 574
569 } // namespace content 575 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698