| OLD | NEW |
| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 frame_buffer_pool_->ReleaseBufferHold(buffer_id_); | 138 frame_buffer_pool_->ReleaseBufferHold(buffer_id_); |
| 139 max_consumer_utilization_ = | 139 max_consumer_utilization_ = |
| 140 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded; | 140 media::VideoFrameConsumerFeedbackObserver::kNoUtilizationRecorded; |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 | 143 |
| 144 bool VideoCaptureController::BufferState::HasZeroConsumerHoldCount() { | 144 bool VideoCaptureController::BufferState::HasZeroConsumerHoldCount() { |
| 145 return consumer_hold_count_ == 0; | 145 return consumer_hold_count_ == 0; |
| 146 } | 146 } |
| 147 | 147 |
| 148 void VideoCaptureController::BufferState::SetFrameFeedbackId(int id) { |
| 149 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 150 frame_feedback_id_ = id; |
| 151 } |
| 152 |
| 148 void VideoCaptureController::BufferState::SetConsumerFeedbackObserver( | 153 void VideoCaptureController::BufferState::SetConsumerFeedbackObserver( |
| 149 media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer) { | 154 media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer) { |
| 150 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 155 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 151 consumer_feedback_observer_ = consumer_feedback_observer; | 156 consumer_feedback_observer_ = consumer_feedback_observer; |
| 152 } | 157 } |
| 153 | 158 |
| 154 void VideoCaptureController::BufferState::SetFrameBufferPool( | 159 void VideoCaptureController::BufferState::SetFrameBufferPool( |
| 155 media::FrameBufferPool* frame_buffer_pool) { | 160 media::FrameBufferPool* frame_buffer_pool) { |
| 156 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 161 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 157 frame_buffer_pool_ = frame_buffer_pool; | 162 frame_buffer_pool_ = frame_buffer_pool; |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 } | 375 } |
| 371 | 376 |
| 372 void VideoCaptureController::OnIncomingCapturedVideoFrame( | 377 void VideoCaptureController::OnIncomingCapturedVideoFrame( |
| 373 media::VideoCaptureDevice::Client::Buffer buffer, | 378 media::VideoCaptureDevice::Client::Buffer buffer, |
| 374 scoped_refptr<VideoFrame> frame) { | 379 scoped_refptr<VideoFrame> frame) { |
| 375 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 380 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 376 const int buffer_id = buffer.id(); | 381 const int buffer_id = buffer.id(); |
| 377 DCHECK_NE(buffer_id, media::VideoCaptureBufferPool::kInvalidId); | 382 DCHECK_NE(buffer_id, media::VideoCaptureBufferPool::kInvalidId); |
| 378 | 383 |
| 379 // Insert if not exists. | 384 // Insert if not exists. |
| 380 const auto it = | 385 const auto insert_result = buffer_id_to_state_map_.insert(std::make_pair( |
| 381 buffer_id_to_state_map_ | 386 buffer_id, BufferState(buffer_id, buffer.frame_feedback_id(), |
| 382 .insert(std::make_pair( | 387 consumer_feedback_observer_.get(), |
| 383 buffer_id, BufferState(buffer_id, buffer.frame_feedback_id(), | 388 frame_buffer_pool_.get()))); |
| 384 consumer_feedback_observer_.get(), | 389 BufferState& buffer_state = insert_result.first->second; |
| 385 frame_buffer_pool_.get()))) | |
| 386 .first; | |
| 387 BufferState& buffer_state = it->second; | |
| 388 DCHECK(buffer_state.HasZeroConsumerHoldCount()); | 390 DCHECK(buffer_state.HasZeroConsumerHoldCount()); |
| 391 // If a BufferState for |buffer_id| already existed, we must update the |
| 392 // |frame_feedback_id| of the existing entry. |
| 393 if (!insert_result.second) |
| 394 buffer_state.SetFrameFeedbackId(buffer.frame_feedback_id()); |
| 389 | 395 |
| 390 if (state_ == VIDEO_CAPTURE_STATE_STARTED) { | 396 if (state_ == VIDEO_CAPTURE_STATE_STARTED) { |
| 391 if (!frame->metadata()->HasKey(VideoFrameMetadata::FRAME_RATE)) { | 397 if (!frame->metadata()->HasKey(VideoFrameMetadata::FRAME_RATE)) { |
| 392 frame->metadata()->SetDouble(VideoFrameMetadata::FRAME_RATE, | 398 frame->metadata()->SetDouble(VideoFrameMetadata::FRAME_RATE, |
| 393 video_capture_format_.frame_rate); | 399 video_capture_format_.frame_rate); |
| 394 } | 400 } |
| 395 std::unique_ptr<base::DictionaryValue> metadata = | 401 std::unique_ptr<base::DictionaryValue> metadata = |
| 396 frame->metadata()->CopyInternalValues(); | 402 frame->metadata()->CopyInternalValues(); |
| 397 | 403 |
| 398 // Only I420 and Y16 pixel formats are currently supported. | 404 // Only I420 and Y16 pixel formats are currently supported. |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 int session_id, | 519 int session_id, |
| 514 const ControllerClients& clients) { | 520 const ControllerClients& clients) { |
| 515 for (const auto& client : clients) { | 521 for (const auto& client : clients) { |
| 516 if (client->session_id == session_id) | 522 if (client->session_id == session_id) |
| 517 return client.get(); | 523 return client.get(); |
| 518 } | 524 } |
| 519 return nullptr; | 525 return nullptr; |
| 520 } | 526 } |
| 521 | 527 |
| 522 } // namespace content | 528 } // namespace content |
| OLD | NEW |