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

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

Issue 1117423002: media: Let VideoFrame carry more than one native texture. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_device_client.h" 5 #include "content/browser/renderer_host/media/video_capture_device_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "content/browser/compositor/image_transport_factory.h" 10 #include "content/browser/compositor/image_transport_factory.h"
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 << " Rotation must be a multiple of 90, now: " << rotation; 236 << " Rotation must be a multiple of 90, now: " << rotation;
237 libyuv::RotationMode rotation_mode = libyuv::kRotate0; 237 libyuv::RotationMode rotation_mode = libyuv::kRotate0;
238 if (rotation == 90) 238 if (rotation == 90)
239 rotation_mode = libyuv::kRotate90; 239 rotation_mode = libyuv::kRotate90;
240 else if (rotation == 180) 240 else if (rotation == 180)
241 rotation_mode = libyuv::kRotate180; 241 rotation_mode = libyuv::kRotate180;
242 else if (rotation == 270) 242 else if (rotation == 270)
243 rotation_mode = libyuv::kRotate270; 243 rotation_mode = libyuv::kRotate270;
244 244
245 const gfx::Size dimensions(destination_width, destination_height); 245 const gfx::Size dimensions(destination_width, destination_height);
246 if (!VideoFrame::IsValidConfig(VideoFrame::I420, 246 if (!VideoFrame::IsValidConfig(VideoFrame::I420, VideoFrame::TEXTURE_NONE,
247 dimensions, 247 dimensions, gfx::Rect(dimensions),
248 gfx::Rect(dimensions),
249 dimensions)) { 248 dimensions)) {
250 return; 249 return;
251 } 250 }
252 251
253 scoped_ptr<Buffer> buffer( 252 scoped_ptr<Buffer> buffer(
254 ReserveOutputBuffer(media::PIXEL_FORMAT_I420, dimensions)); 253 ReserveOutputBuffer(media::PIXEL_FORMAT_I420, dimensions));
255 if (!buffer.get()) 254 if (!buffer.get())
256 return; 255 return;
257 256
258 uint8* const yplane = reinterpret_cast<uint8*>(buffer->data()); 257 uint8* const yplane = reinterpret_cast<uint8*>(buffer->data());
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 GL_BGRA_EXT); 541 GL_BGRA_EXT);
543 DCHECK(image_id); 542 DCHECK(image_id);
544 543
545 GLuint texture_id = gl_helper_->CreateTexture(); 544 GLuint texture_id = gl_helper_->CreateTexture();
546 DCHECK(texture_id); 545 DCHECK(texture_id);
547 { 546 {
548 content::ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl, texture_id); 547 content::ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl, texture_id);
549 gl->BindTexImage2DCHROMIUM(GL_TEXTURE_2D, image_id); 548 gl->BindTexImage2DCHROMIUM(GL_TEXTURE_2D, image_id);
550 } 549 }
551 550
552 scoped_ptr<gpu::MailboxHolder> mailbox_holder(new gpu::MailboxHolder( 551 const gpu::MailboxHolder& mailbox_holder(
553 gl_helper_->ProduceMailboxHolderFromTexture(texture_id))); 552 gl_helper_->ProduceMailboxHolderFromTexture(texture_id));
554 DCHECK(!mailbox_holder->mailbox.IsZero()); 553 DCHECK(!mailbox_holder.mailbox.IsZero());
555 DCHECK(mailbox_holder->mailbox.Verify()); 554 DCHECK(mailbox_holder.mailbox.Verify());
556 DCHECK(mailbox_holder->texture_target); 555 DCHECK(mailbox_holder.texture_target);
557 DCHECK(mailbox_holder->sync_point); 556 DCHECK(mailbox_holder.sync_point);
558 557
559 scoped_refptr<media::VideoFrame> video_frame = 558 scoped_refptr<media::VideoFrame> video_frame =
560 media::VideoFrame::WrapNativeTexture( 559 media::VideoFrame::WrapNativeTexture(
561 mailbox_holder.Pass(), 560 mailbox_holder,
562 media::BindToCurrentLoop( 561 media::BindToCurrentLoop(base::Bind(
563 base::Bind(&VideoCaptureDeviceClient::TextureWrapHelper:: 562 &VideoCaptureDeviceClient::TextureWrapHelper::ReleaseCallback,
564 ReleaseCallback, 563 this, image_id, texture_id)),
565 this, image_id, texture_id)), 564 frame_format.frame_size, gfx::Rect(frame_format.frame_size),
566 frame_format.frame_size, 565 frame_format.frame_size, base::TimeDelta(), true /* allow_overlay */);
567 gfx::Rect(frame_format.frame_size),
568 frame_format.frame_size,
569 base::TimeDelta(),
570 true /* allow_overlay */);
571 video_frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE, 566 video_frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE,
572 frame_format.frame_rate); 567 frame_format.frame_rate);
573 568
574 BrowserThread::PostTask( 569 BrowserThread::PostTask(
575 BrowserThread::IO, FROM_HERE, 570 BrowserThread::IO, FROM_HERE,
576 base::Bind( 571 base::Bind(
577 &VideoCaptureController::DoIncomingCapturedVideoFrameOnIOThread, 572 &VideoCaptureController::DoIncomingCapturedVideoFrameOnIOThread,
578 controller_, base::Passed(&buffer), video_frame, timestamp)); 573 controller_, base::Passed(&buffer), video_frame, timestamp));
579 } 574 }
580 575
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 void VideoCaptureDeviceClient::TextureWrapHelper::OnError( 659 void VideoCaptureDeviceClient::TextureWrapHelper::OnError(
665 const std::string& message) { 660 const std::string& message) {
666 DCHECK(capture_task_runner_->BelongsToCurrentThread()); 661 DCHECK(capture_task_runner_->BelongsToCurrentThread());
667 DLOG(ERROR) << message; 662 DLOG(ERROR) << message;
668 BrowserThread::PostTask( 663 BrowserThread::PostTask(
669 BrowserThread::IO, FROM_HERE, 664 BrowserThread::IO, FROM_HERE,
670 base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_)); 665 base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_));
671 } 666 }
672 667
673 } // namespace content 668 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698