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

Unified Diff: content/browser/renderer_host/media/video_capture_controller.cc

Issue 2659653002: Fix for issue 684766 Old/erroneous frame feedback during tab capture (Closed)
Patch Set: Exercise ResurrectLastOutputBuffer() and apply git cl format Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/video_capture_controller.cc
diff --git a/content/browser/renderer_host/media/video_capture_controller.cc b/content/browser/renderer_host/media/video_capture_controller.cc
index 9902d94dad4e4b80de214b7b342299a6720d697c..5f2136bd6f79bd48fe3c8f4c297772a6a4d3e6e6 100644
--- a/content/browser/renderer_host/media/video_capture_controller.cc
+++ b/content/browser/renderer_host/media/video_capture_controller.cc
@@ -145,6 +145,11 @@ bool VideoCaptureController::BufferState::HasZeroConsumerHoldCount() {
return consumer_hold_count_ == 0;
}
+void VideoCaptureController::BufferState::SetFrameFeedbackId(int id) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ frame_feedback_id_ = id;
+}
+
void VideoCaptureController::BufferState::SetConsumerFeedbackObserver(
media::VideoFrameConsumerFeedbackObserver* consumer_feedback_observer) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -377,15 +382,16 @@ void VideoCaptureController::OnIncomingCapturedVideoFrame(
DCHECK_NE(buffer_id, media::VideoCaptureBufferPool::kInvalidId);
// Insert if not exists.
- const auto it =
- buffer_id_to_state_map_
- .insert(std::make_pair(
- buffer_id, BufferState(buffer_id, buffer.frame_feedback_id(),
- consumer_feedback_observer_.get(),
- frame_buffer_pool_.get())))
- .first;
- BufferState& buffer_state = it->second;
+ const auto insert_result = buffer_id_to_state_map_.insert(std::make_pair(
+ buffer_id, BufferState(buffer_id, buffer.frame_feedback_id(),
+ consumer_feedback_observer_.get(),
+ frame_buffer_pool_.get())));
+ BufferState& buffer_state = insert_result.first->second;
DCHECK(buffer_state.HasZeroConsumerHoldCount());
+ // If a BufferState for |buffer_id| already existed, we must update the
+ // |frame_feedback_id| of the existing entry.
+ if (!insert_result.second)
+ buffer_state.SetFrameFeedbackId(buffer.frame_feedback_id());
if (state_ == VIDEO_CAPTURE_STATE_STARTED) {
if (!frame->metadata()->HasKey(VideoFrameMetadata::FRAME_RATE)) {

Powered by Google App Engine
This is Rietveld 408576698