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

Side by Side Diff: media/gpu/vt_video_encode_accelerator_mac.cc

Issue 1996453003: RTC Video Encoder: Use capturer timestamp (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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "media/gpu/vt_video_encode_accelerator_mac.h" 5 #include "media/gpu/vt_video_encode_accelerator_mac.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/mac/mac_util.h" 9 #include "base/mac/mac_util.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 437
438 void VTVideoEncodeAccelerator::ReturnBitstreamBuffer( 438 void VTVideoEncodeAccelerator::ReturnBitstreamBuffer(
439 std::unique_ptr<EncodeOutput> encode_output, 439 std::unique_ptr<EncodeOutput> encode_output,
440 std::unique_ptr<VTVideoEncodeAccelerator::BitstreamBufferRef> buffer_ref) { 440 std::unique_ptr<VTVideoEncodeAccelerator::BitstreamBufferRef> buffer_ref) {
441 DVLOG(3) << __FUNCTION__; 441 DVLOG(3) << __FUNCTION__;
442 DCHECK(encoder_thread_task_runner_->BelongsToCurrentThread()); 442 DCHECK(encoder_thread_task_runner_->BelongsToCurrentThread());
443 443
444 if (encode_output->info & VideoToolboxGlue::kVTEncodeInfo_FrameDropped) { 444 if (encode_output->info & VideoToolboxGlue::kVTEncodeInfo_FrameDropped) {
445 DVLOG(2) << " frame dropped"; 445 DVLOG(2) << " frame dropped";
446 client_task_runner_->PostTask( 446 client_task_runner_->PostTask(
447 FROM_HERE, base::Bind(&Client::BitstreamBufferReady, client_, 447 FROM_HERE,
448 buffer_ref->id, 0, false)); 448 base::Bind(&Client::BitstreamBufferReady, client_, buffer_ref->id, 0,
449 false, base::Time::Now() - base::Time()));
449 return; 450 return;
450 } 451 }
451 452
452 auto sample_attachments = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex( 453 auto sample_attachments = static_cast<CFDictionaryRef>(CFArrayGetValueAtIndex(
453 CoreMediaGlue::CMSampleBufferGetSampleAttachmentsArray( 454 CoreMediaGlue::CMSampleBufferGetSampleAttachmentsArray(
454 encode_output->sample_buffer.get(), true), 455 encode_output->sample_buffer.get(), true),
455 0)); 456 0));
456 const bool keyframe = !CFDictionaryContainsKey( 457 const bool keyframe = !CFDictionaryContainsKey(
457 sample_attachments, CoreMediaGlue::kCMSampleAttachmentKey_NotSync()); 458 sample_attachments, CoreMediaGlue::kCMSampleAttachmentKey_NotSync());
458 459
459 size_t used_buffer_size = 0; 460 size_t used_buffer_size = 0;
460 const bool copy_rv = media::video_toolbox::CopySampleBufferToAnnexBBuffer( 461 const bool copy_rv = media::video_toolbox::CopySampleBufferToAnnexBBuffer(
461 encode_output->sample_buffer.get(), keyframe, buffer_ref->size, 462 encode_output->sample_buffer.get(), keyframe, buffer_ref->size,
462 reinterpret_cast<char*>(buffer_ref->shm->memory()), &used_buffer_size); 463 reinterpret_cast<char*>(buffer_ref->shm->memory()), &used_buffer_size);
463 if (!copy_rv) { 464 if (!copy_rv) {
464 DLOG(ERROR) << "Cannot copy output from SampleBuffer to AnnexBBuffer."; 465 DLOG(ERROR) << "Cannot copy output from SampleBuffer to AnnexBBuffer.";
465 used_buffer_size = 0; 466 used_buffer_size = 0;
466 } 467 }
467 bitrate_adjuster_.Update(used_buffer_size); 468 bitrate_adjuster_.Update(used_buffer_size);
468 469
469 client_task_runner_->PostTask( 470 client_task_runner_->PostTask(
470 FROM_HERE, base::Bind(&Client::BitstreamBufferReady, client_, 471 FROM_HERE,
471 buffer_ref->id, used_buffer_size, keyframe)); 472 base::Bind(&Client::BitstreamBufferReady, client_, buffer_ref->id,
473 used_buffer_size, keyframe, base::Time::Now() - base::Time()));
472 } 474 }
473 475
474 bool VTVideoEncodeAccelerator::ResetCompressionSession() { 476 bool VTVideoEncodeAccelerator::ResetCompressionSession() {
475 DCHECK(thread_checker_.CalledOnValidThread()); 477 DCHECK(thread_checker_.CalledOnValidThread());
476 478
477 DestroyCompressionSession(); 479 DestroyCompressionSession();
478 480
479 CFTypeRef attributes_keys[] = {kCVPixelBufferOpenGLCompatibilityKey, 481 CFTypeRef attributes_keys[] = {kCVPixelBufferOpenGLCompatibilityKey,
480 kCVPixelBufferIOSurfacePropertiesKey, 482 kCVPixelBufferIOSurfacePropertiesKey,
481 kCVPixelBufferPixelFormatTypeKey}; 483 kCVPixelBufferPixelFormatTypeKey};
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 (encoder_thread_.IsRunning() && 579 (encoder_thread_.IsRunning() &&
578 encoder_thread_task_runner_->BelongsToCurrentThread())); 580 encoder_thread_task_runner_->BelongsToCurrentThread()));
579 581
580 if (compression_session_) { 582 if (compression_session_) {
581 videotoolbox_glue_->VTCompressionSessionInvalidate(compression_session_); 583 videotoolbox_glue_->VTCompressionSessionInvalidate(compression_session_);
582 compression_session_.reset(); 584 compression_session_.reset();
583 } 585 }
584 } 586 }
585 587
586 } // namespace media 588 } // namespace media
OLDNEW
« no previous file with comments | « media/gpu/video_encode_accelerator_unittest.cc ('k') | media/video/fake_video_encode_accelerator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698