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

Side by Side Diff: media/gpu/vaapi_video_encode_accelerator.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/vaapi_video_encode_accelerator.h" 5 #include "media/gpu/vaapi_video_encode_accelerator.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 target_data, buffer->shm->size(), &data_size)) { 548 target_data, buffer->shm->size(), &data_size)) {
549 NOTIFY_ERROR(kPlatformFailureError, "Failed downloading coded buffer"); 549 NOTIFY_ERROR(kPlatformFailureError, "Failed downloading coded buffer");
550 return; 550 return;
551 } 551 }
552 552
553 DVLOGF(3) << "Returning bitstream buffer " 553 DVLOGF(3) << "Returning bitstream buffer "
554 << (encode_job->keyframe ? "(keyframe)" : "") 554 << (encode_job->keyframe ? "(keyframe)" : "")
555 << " id: " << buffer->id << " size: " << data_size; 555 << " id: " << buffer->id << " size: " << data_size;
556 556
557 child_task_runner_->PostTask( 557 child_task_runner_->PostTask(
558 FROM_HERE, base::Bind(&Client::BitstreamBufferReady, client_, buffer->id, 558 FROM_HERE,
559 data_size, encode_job->keyframe)); 559 base::Bind(&Client::BitstreamBufferReady, client_, buffer->id, data_size,
560 encode_job->keyframe,
561 base::TimeDelta::FromMicroseconds(encode_job->timestamp)));
560 } 562 }
561 563
562 void VaapiVideoEncodeAccelerator::Encode( 564 void VaapiVideoEncodeAccelerator::Encode(
563 const scoped_refptr<media::VideoFrame>& frame, 565 const scoped_refptr<media::VideoFrame>& frame,
564 bool force_keyframe) { 566 bool force_keyframe) {
565 DVLOGF(3) << "Frame timestamp: " << frame->timestamp().InMilliseconds() 567 DVLOGF(3) << "Frame timestamp: " << frame->timestamp().InMilliseconds()
566 << " force_keyframe: " << force_keyframe; 568 << " force_keyframe: " << force_keyframe;
567 DCHECK(child_task_runner_->BelongsToCurrentThread()); 569 DCHECK(child_task_runner_->BelongsToCurrentThread());
568 570
569 encoder_thread_task_runner_->PostTask( 571 encoder_thread_task_runner_->PostTask(
570 FROM_HERE, base::Bind(&VaapiVideoEncodeAccelerator::EncodeTask, 572 FROM_HERE, base::Bind(&VaapiVideoEncodeAccelerator::EncodeTask,
571 base::Unretained(this), frame, force_keyframe)); 573 base::Unretained(this), frame, force_keyframe));
572 } 574 }
573 575
574 bool VaapiVideoEncodeAccelerator::PrepareNextJob() { 576 bool VaapiVideoEncodeAccelerator::PrepareNextJob() {
575 if (available_va_surface_ids_.size() < kMinSurfacesToEncode) 577 if (available_va_surface_ids_.size() < kMinSurfacesToEncode)
576 return false; 578 return false;
577 579
578 DCHECK(!current_encode_job_); 580 DCHECK(!current_encode_job_);
579 current_encode_job_.reset(new EncodeJob()); 581 current_encode_job_.reset(new EncodeJob());
580 582
581 if (!vaapi_wrapper_->CreateCodedBuffer(output_buffer_byte_size_, 583 if (!vaapi_wrapper_->CreateCodedBuffer(output_buffer_byte_size_,
582 &current_encode_job_->coded_buffer)) { 584 &current_encode_job_->coded_buffer)) {
583 NOTIFY_ERROR(kPlatformFailureError, "Failed creating coded buffer"); 585 NOTIFY_ERROR(kPlatformFailureError, "Failed creating coded buffer");
584 return false; 586 return false;
585 } 587 }
586 588
589 current_encode_job_->timestamp =
590 encoder_input_queue_.front()->frame->InMicroseconds();
Pawel Osciak 2016/05/26 07:39:23 I would prefer not accessing encoder_input_queue_
shenghao 2016/05/26 10:38:20 Done.
591
587 current_encode_job_->input_surface = new VASurface( 592 current_encode_job_->input_surface = new VASurface(
588 available_va_surface_ids_.back(), coded_size_, 593 available_va_surface_ids_.back(), coded_size_,
589 vaapi_wrapper_->va_surface_format(), va_surface_release_cb_); 594 vaapi_wrapper_->va_surface_format(), va_surface_release_cb_);
590 available_va_surface_ids_.pop_back(); 595 available_va_surface_ids_.pop_back();
591 596
592 current_encode_job_->recon_surface = new VASurface( 597 current_encode_job_->recon_surface = new VASurface(
593 available_va_surface_ids_.back(), coded_size_, 598 available_va_surface_ids_.back(), coded_size_,
594 vaapi_wrapper_->va_surface_format(), va_surface_release_cb_); 599 vaapi_wrapper_->va_surface_format(), va_surface_release_cb_);
595 available_va_surface_ids_.pop_back(); 600 available_va_surface_ids_.pop_back();
596 601
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1052 client_ptr_factory_.reset(); 1057 client_ptr_factory_.reset();
1053 } 1058 }
1054 } 1059 }
1055 1060
1056 VaapiVideoEncodeAccelerator::EncodeJob::EncodeJob() 1061 VaapiVideoEncodeAccelerator::EncodeJob::EncodeJob()
1057 : coded_buffer(VA_INVALID_ID), keyframe(false) {} 1062 : coded_buffer(VA_INVALID_ID), keyframe(false) {}
1058 1063
1059 VaapiVideoEncodeAccelerator::EncodeJob::~EncodeJob() {} 1064 VaapiVideoEncodeAccelerator::EncodeJob::~EncodeJob() {}
1060 1065
1061 } // namespace media 1066 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698