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

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

Issue 2093823002: Consider non-keyframes for RTCVideoEncoder error counter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/renderer/media/rtc_video_decoder.h" 5 #include "content/renderer/media/rtc_video_decoder.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 gfx::Size prev_frame_size = frame_size_; 229 gfx::Size prev_frame_size = frame_size_;
230 frame_size_ = new_frame_size; 230 frame_size_ = new_frame_size;
231 if (!kVDACanHandleMidstreamResize && !prev_frame_size.IsEmpty() && 231 if (!kVDACanHandleMidstreamResize && !prev_frame_size.IsEmpty() &&
232 prev_frame_size != frame_size_) { 232 prev_frame_size != frame_size_) {
233 need_to_reset_for_midstream_resize = true; 233 need_to_reset_for_midstream_resize = true;
234 } 234 }
235 } else if (IsFirstBufferAfterReset(next_bitstream_buffer_id_, 235 } else if (IsFirstBufferAfterReset(next_bitstream_buffer_id_,
236 reset_bitstream_buffer_id_)) { 236 reset_bitstream_buffer_id_)) {
237 // TODO(wuchengli): VDA should handle it. Remove this when 237 // TODO(wuchengli): VDA should handle it. Remove this when
238 // http://crosbug.com/p/21913 is fixed. 238 // http://crosbug.com/p/21913 is fixed.
239 DVLOG(1) << "The first frame should be a key frame. Drop this."; 239 DVLOG(1) << "The first frame should be a key frame. Drop this.";
mcasas 2016/06/30 18:07:25 This DVLOG() goes with l.243 now.
emircan 2016/06/30 20:39:17 Done.
240 if (vda_error_counter_)
241 ++vda_error_counter_;
mcasas 2016/06/30 18:07:25 I'd write this instead: // If we're are in an err
emircan 2016/06/30 20:39:17 Done.
242
240 return WEBRTC_VIDEO_CODEC_ERROR; 243 return WEBRTC_VIDEO_CODEC_ERROR;
241 } 244 }
242 245
243 // Create buffer metadata. 246 // Create buffer metadata.
244 BufferData buffer_data(next_bitstream_buffer_id_, 247 BufferData buffer_data(next_bitstream_buffer_id_,
245 inputImage._timeStamp, 248 inputImage._timeStamp,
246 inputImage._length, 249 inputImage._length,
247 gfx::Rect(frame_size_)); 250 gfx::Rect(frame_size_));
248 // Mask against 30 bits, to avoid (undefined) wraparound on signed integer. 251 // Mask against 30 bits, to avoid (undefined) wraparound on signed integer.
249 next_bitstream_buffer_id_ = (next_bitstream_buffer_id_ + 1) & ID_LAST; 252 next_bitstream_buffer_id_ = (next_bitstream_buffer_id_ + 1) & ID_LAST;
(...skipping 12 matching lines...) Expand all
262 // Better to drop any pending buffers and start afresh to catch up faster. 265 // Better to drop any pending buffers and start afresh to catch up faster.
263 DVLOG(1) << "Exceeded maximum pending buffer count, dropping"; 266 DVLOG(1) << "Exceeded maximum pending buffer count, dropping";
264 ClearPendingBuffers(); 267 ClearPendingBuffers();
265 return WEBRTC_VIDEO_CODEC_ERROR; 268 return WEBRTC_VIDEO_CODEC_ERROR;
266 } 269 }
267 270
268 if (need_to_reset_for_midstream_resize) { 271 if (need_to_reset_for_midstream_resize) {
269 base::AutoUnlock auto_unlock(lock_); 272 base::AutoUnlock auto_unlock(lock_);
270 Release(); 273 Release();
271 } 274 }
272
273 TryResetVDAErrorCounter_Locked();
274 return WEBRTC_VIDEO_CODEC_OK; 275 return WEBRTC_VIDEO_CODEC_OK;
275 } 276 }
276 277
277 SaveToDecodeBuffers_Locked(inputImage, std::move(shm_buffer), buffer_data); 278 SaveToDecodeBuffers_Locked(inputImage, std::move(shm_buffer), buffer_data);
278 factories_->GetTaskRunner()->PostTask( 279 factories_->GetTaskRunner()->PostTask(
279 FROM_HERE, 280 FROM_HERE,
280 base::Bind(&RTCVideoDecoder::RequestBufferDecode, 281 base::Bind(&RTCVideoDecoder::RequestBufferDecode,
281 weak_factory_.GetWeakPtr())); 282 weak_factory_.GetWeakPtr()));
282 TryResetVDAErrorCounter_Locked();
283 return WEBRTC_VIDEO_CODEC_OK; 283 return WEBRTC_VIDEO_CODEC_OK;
284 } 284 }
285 285
286 int32_t RTCVideoDecoder::RegisterDecodeCompleteCallback( 286 int32_t RTCVideoDecoder::RegisterDecodeCompleteCallback(
287 webrtc::DecodedImageCallback* callback) { 287 webrtc::DecodedImageCallback* callback) {
288 DVLOG(2) << "RegisterDecodeCompleteCallback"; 288 DVLOG(2) << "RegisterDecodeCompleteCallback";
289 DCHECK(callback); 289 DCHECK(callback);
290 base::AutoLock auto_lock(lock_); 290 base::AutoLock auto_lock(lock_);
291 decode_complete_callback_ = callback; 291 decode_complete_callback_ = callback;
292 return WEBRTC_VIDEO_CODEC_OK; 292 return WEBRTC_VIDEO_CODEC_OK;
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 437
438 // Invoke decode callback. WebRTC expects no callback after Release. 438 // Invoke decode callback. WebRTC expects no callback after Release.
439 { 439 {
440 base::AutoLock auto_lock(lock_); 440 base::AutoLock auto_lock(lock_);
441 DCHECK(decode_complete_callback_); 441 DCHECK(decode_complete_callback_);
442 if (IsBufferAfterReset(picture.bitstream_buffer_id(), 442 if (IsBufferAfterReset(picture.bitstream_buffer_id(),
443 reset_bitstream_buffer_id_)) { 443 reset_bitstream_buffer_id_)) {
444 decode_complete_callback_->Decoded(decoded_image); 444 decode_complete_callback_->Decoded(decoded_image);
445 } 445 }
446 } 446 }
447 TryResetVDAErrorCounter();
447 } 448 }
448 449
449 scoped_refptr<media::VideoFrame> RTCVideoDecoder::CreateVideoFrame( 450 scoped_refptr<media::VideoFrame> RTCVideoDecoder::CreateVideoFrame(
450 const media::Picture& picture, 451 const media::Picture& picture,
451 const media::PictureBuffer& pb, 452 const media::PictureBuffer& pb,
452 uint32_t timestamp, 453 uint32_t timestamp,
453 const gfx::Rect& visible_rect, 454 const gfx::Rect& visible_rect,
454 media::VideoPixelFormat pixel_format) { 455 media::VideoPixelFormat pixel_format) {
455 DCHECK(decoder_texture_target_); 456 DCHECK(decoder_texture_target_);
456 // Convert timestamp from 90KHz to ms. 457 // Convert timestamp from 90KHz to ms.
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 DCHECK(factories_->GetTaskRunner()->BelongsToCurrentThread()); 883 DCHECK(factories_->GetTaskRunner()->BelongsToCurrentThread());
883 } 884 }
884 885
885 void RTCVideoDecoder::ClearPendingBuffers() { 886 void RTCVideoDecoder::ClearPendingBuffers() {
886 // Delete WebRTC input buffers. 887 // Delete WebRTC input buffers.
887 for (const auto& pending_buffer : pending_buffers_) 888 for (const auto& pending_buffer : pending_buffers_)
888 delete[] pending_buffer.first._buffer; 889 delete[] pending_buffer.first._buffer;
889 pending_buffers_.clear(); 890 pending_buffers_.clear();
890 } 891 }
891 892
892 void RTCVideoDecoder::TryResetVDAErrorCounter_Locked() { 893 void RTCVideoDecoder::TryResetVDAErrorCounter() {
893 lock_.AssertAcquired(); 894 base::AutoLock auto_lock(lock_);
894 895
895 if (vda_error_counter_ == 0) 896 if (vda_error_counter_ == 0)
896 return; 897 return;
897 vda_error_counter_ = 0; 898 vda_error_counter_ = 0;
898 } 899 }
899 900
900 } // namespace content 901 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698