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

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

Issue 1427543002: Modified old wait sync point functions to also accept new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Folded sync_point into sync_tokens 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
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 private: 131 private:
132 ~AutoReleaseBuffer() override { pool_->RelinquishProducerReservation(id_); } 132 ~AutoReleaseBuffer() override { pool_->RelinquishProducerReservation(id_); }
133 133
134 const int id_; 134 const int id_;
135 const scoped_refptr<VideoCaptureBufferPool> pool_; 135 const scoped_refptr<VideoCaptureBufferPool> pool_;
136 const scoped_ptr<VideoCaptureBufferPool::BufferHandle> buffer_handle_; 136 const scoped_ptr<VideoCaptureBufferPool::BufferHandle> buffer_handle_;
137 }; 137 };
138 138
139 // Internal ref-counted class wrapping an incoming GpuMemoryBuffer into a 139 // Internal ref-counted class wrapping an incoming GpuMemoryBuffer into a
140 // Texture backed VideoFrame. This VideoFrame creation is balanced by a waiting 140 // Texture backed VideoFrame. This VideoFrame creation is balanced by a waiting
141 // on the associated |sync_point|. After VideoFrame consumption the inserted 141 // on the associated |sync_token|. After VideoFrame consumption the inserted
142 // ReleaseCallback() will be called, where the Texture is destroyed. 142 // ReleaseCallback() will be called, where the Texture is destroyed.
143 // 143 //
144 // This class jumps between threads due to GPU-related thread limitations, i.e. 144 // This class jumps between threads due to GPU-related thread limitations, i.e.
145 // some objects cannot be accessed from IO Thread whereas others need to be 145 // some objects cannot be accessed from IO Thread whereas others need to be
146 // constructed on UI Thread. For this reason most of the operations are carried 146 // constructed on UI Thread. For this reason most of the operations are carried
147 // out on Capture Thread (|capture_task_runner_|). 147 // out on Capture Thread (|capture_task_runner_|).
148 class VideoCaptureDeviceClient::TextureWrapHelper final 148 class VideoCaptureDeviceClient::TextureWrapHelper final
149 : public base::RefCountedThreadSafe<TextureWrapHelper> { 149 : public base::RefCountedThreadSafe<TextureWrapHelper> {
150 public: 150 public:
151 TextureWrapHelper( 151 TextureWrapHelper(
(...skipping 13 matching lines...) Expand all
165 165
166 // Creates some necessary members in |capture_task_runner_|. 166 // Creates some necessary members in |capture_task_runner_|.
167 void Init(); 167 void Init();
168 // Runs the bottom half of the GlHelper creation. 168 // Runs the bottom half of the GlHelper creation.
169 void CreateGlHelper( 169 void CreateGlHelper(
170 scoped_refptr<ContextProviderCommandBuffer> capture_thread_context); 170 scoped_refptr<ContextProviderCommandBuffer> capture_thread_context);
171 171
172 // Recycles |memory_buffer|, deletes Image and Texture on VideoFrame release. 172 // Recycles |memory_buffer|, deletes Image and Texture on VideoFrame release.
173 void ReleaseCallback(const std::vector<GLuint>& image_ids, 173 void ReleaseCallback(const std::vector<GLuint>& image_ids,
174 const std::vector<GLuint>& texture_ids, 174 const std::vector<GLuint>& texture_ids,
175 uint32 sync_point); 175 const gpu::SyncToken& sync_token);
176 176
177 // The Command Buffer lost the GL context, f.i. GPU process crashed. Signal 177 // The Command Buffer lost the GL context, f.i. GPU process crashed. Signal
178 // error to our owner so the capture can be torn down. 178 // error to our owner so the capture can be torn down.
179 void LostContextCallback(); 179 void LostContextCallback();
180 180
181 // Prints the error |message| and notifies |controller_| of an error. 181 // Prints the error |message| and notifies |controller_| of an error.
182 void OnError(const std::string& message); 182 void OnError(const std::string& message);
183 183
184 // |controller_| should only be used on IO thread. 184 // |controller_| should only be used on IO thread.
185 const base::WeakPtr<VideoCaptureController> controller_; 185 const base::WeakPtr<VideoCaptureController> controller_;
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 texture_id); 641 texture_id);
642 gl->BindTexImage2DCHROMIUM(GL_TEXTURE_2D, image_id); 642 gl->BindTexImage2DCHROMIUM(GL_TEXTURE_2D, image_id);
643 } 643 }
644 texture_ids.push_back(texture_id); 644 texture_ids.push_back(texture_id);
645 645
646 const gpu::MailboxHolder& mailbox_holder( 646 const gpu::MailboxHolder& mailbox_holder(
647 gl_helper_->ProduceMailboxHolderFromTexture(texture_id)); 647 gl_helper_->ProduceMailboxHolderFromTexture(texture_id));
648 DCHECK(!mailbox_holder.mailbox.IsZero()); 648 DCHECK(!mailbox_holder.mailbox.IsZero());
649 DCHECK(mailbox_holder.mailbox.Verify()); 649 DCHECK(mailbox_holder.mailbox.Verify());
650 DCHECK(mailbox_holder.texture_target); 650 DCHECK(mailbox_holder.texture_target);
651 DCHECK(mailbox_holder.sync_point); 651 DCHECK(mailbox_holder.sync_token.HasData());
652 mailbox_holders.push_back(mailbox_holder); 652 mailbox_holders.push_back(mailbox_holder);
653 } 653 }
654 654
655 scoped_refptr<media::VideoFrame> video_frame = 655 scoped_refptr<media::VideoFrame> video_frame =
656 VideoFrame::WrapYUV420NativeTextures( 656 VideoFrame::WrapYUV420NativeTextures(
657 mailbox_holders[VideoFrame::kYPlane], 657 mailbox_holders[VideoFrame::kYPlane],
658 mailbox_holders[VideoFrame::kUPlane], 658 mailbox_holders[VideoFrame::kUPlane],
659 mailbox_holders[VideoFrame::kVPlane], 659 mailbox_holders[VideoFrame::kVPlane],
660 media::BindToCurrentLoop(base::Bind( 660 media::BindToCurrentLoop(base::Bind(
661 &VideoCaptureDeviceClient::TextureWrapHelper::ReleaseCallback, 661 &VideoCaptureDeviceClient::TextureWrapHelper::ReleaseCallback,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 // At this point, |capture_thread_context| is a cc::ContextProvider. Creation 732 // At this point, |capture_thread_context| is a cc::ContextProvider. Creation
733 // of our GLHelper should happen on Capture Thread. 733 // of our GLHelper should happen on Capture Thread.
734 gl_helper_.reset(new GLHelper(capture_thread_context->ContextGL(), 734 gl_helper_.reset(new GLHelper(capture_thread_context->ContextGL(),
735 capture_thread_context->ContextSupport())); 735 capture_thread_context->ContextSupport()));
736 DCHECK(gl_helper_); 736 DCHECK(gl_helper_);
737 } 737 }
738 738
739 void VideoCaptureDeviceClient::TextureWrapHelper::ReleaseCallback( 739 void VideoCaptureDeviceClient::TextureWrapHelper::ReleaseCallback(
740 const std::vector<GLuint>& image_ids, 740 const std::vector<GLuint>& image_ids,
741 const std::vector<GLuint>& texture_ids, 741 const std::vector<GLuint>& texture_ids,
742 uint32 sync_point) { 742 const gpu::SyncToken& sync_token) {
743 DCHECK(capture_task_runner_->BelongsToCurrentThread()); 743 DCHECK(capture_task_runner_->BelongsToCurrentThread());
744 DCHECK_EQ(image_ids.size(), texture_ids.size()); 744 DCHECK_EQ(image_ids.size(), texture_ids.size());
745 745
746 if (!gl_helper_) 746 if (!gl_helper_)
747 return; 747 return;
748 for (size_t i = 0; i < image_ids.size(); ++i) { 748 for (size_t i = 0; i < image_ids.size(); ++i) {
749 gl_helper_->DeleteTexture(texture_ids[i]); 749 gl_helper_->DeleteTexture(texture_ids[i]);
750 capture_thread_context_->ContextGL()->DestroyImageCHROMIUM(image_ids[i]); 750 capture_thread_context_->ContextGL()->DestroyImageCHROMIUM(image_ids[i]);
751 } 751 }
752 } 752 }
753 753
754 void VideoCaptureDeviceClient::TextureWrapHelper::LostContextCallback() { 754 void VideoCaptureDeviceClient::TextureWrapHelper::LostContextCallback() {
755 DCHECK(capture_task_runner_->BelongsToCurrentThread()); 755 DCHECK(capture_task_runner_->BelongsToCurrentThread());
756 // Prevent incoming frames from being processed while OnError gets groked. 756 // Prevent incoming frames from being processed while OnError gets groked.
757 gl_helper_.reset(); 757 gl_helper_.reset();
758 OnError("GLContext lost"); 758 OnError("GLContext lost");
759 } 759 }
760 760
761 void VideoCaptureDeviceClient::TextureWrapHelper::OnError( 761 void VideoCaptureDeviceClient::TextureWrapHelper::OnError(
762 const std::string& message) { 762 const std::string& message) {
763 DCHECK(capture_task_runner_->BelongsToCurrentThread()); 763 DCHECK(capture_task_runner_->BelongsToCurrentThread());
764 DLOG(ERROR) << message; 764 DLOG(ERROR) << message;
765 BrowserThread::PostTask( 765 BrowserThread::PostTask(
766 BrowserThread::IO, FROM_HERE, 766 BrowserThread::IO, FROM_HERE,
767 base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_)); 767 base::Bind(&VideoCaptureController::DoErrorOnIOThread, controller_));
768 } 768 }
769 769
770 } // namespace content 770 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698