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

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

Issue 2611843002: Specify a default bitrate for VEAEncoder (Closed)
Patch Set: mcasas@ comments. 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/video_track_recorder.h" 5 #include "content/renderer/media/video_track_recorder.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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 46
47 using media::VideoFrame; 47 using media::VideoFrame;
48 using media::VideoFrameMetadata; 48 using media::VideoFrameMetadata;
49 using video_track_recorder::kVEAEncoderMinResolutionWidth; 49 using video_track_recorder::kVEAEncoderMinResolutionWidth;
50 using video_track_recorder::kVEAEncoderMinResolutionHeight; 50 using video_track_recorder::kVEAEncoderMinResolutionHeight;
51 51
52 namespace content { 52 namespace content {
53 53
54 namespace { 54 namespace {
55 55
56 // HW encoders expect a nonzero bitrate, so |kVEADefaultBitratePerPixel| is used
57 // to estimate bits per second for ~30 fps with ~1/16 compression rate.
58 const int kVEADefaultBitratePerPixel = 2;
59 // Number of output buffers used to copy the encoded data coming from HW
60 // encoders.
56 const int kVEAEncoderOutputBufferCount = 4; 61 const int kVEAEncoderOutputBufferCount = 4;
57 62
58 static struct { 63 static struct {
59 VideoTrackRecorder::CodecId codec_id; 64 VideoTrackRecorder::CodecId codec_id;
60 media::VideoCodecProfile min_profile; 65 media::VideoCodecProfile min_profile;
61 media::VideoCodecProfile max_profile; 66 media::VideoCodecProfile max_profile;
62 } const kSupportedVideoCodecIdToProfile[] = { 67 } const kSupportedVideoCodecIdToProfile[] = {
63 {VideoTrackRecorder::CodecId::VP8, 68 {VideoTrackRecorder::CodecId::VP8,
64 media::VP8PROFILE_MIN, 69 media::VP8PROFILE_MIN,
65 media::VP8PROFILE_MAX}, 70 media::VP8PROFILE_MAX},
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 }; 507 };
503 508
504 #endif // #if BUILDFLAG(RTC_USE_H264) 509 #endif // #if BUILDFLAG(RTC_USE_H264)
505 510
506 VEAEncoder::VEAEncoder( 511 VEAEncoder::VEAEncoder(
507 const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback, 512 const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
508 int32_t bits_per_second, 513 int32_t bits_per_second,
509 media::VideoCodecProfile codec, 514 media::VideoCodecProfile codec,
510 const gfx::Size& size) 515 const gfx::Size& size)
511 : Encoder(on_encoded_video_callback, 516 : Encoder(on_encoded_video_callback,
512 bits_per_second, 517 bits_per_second > 0 ? bits_per_second
518 : size.GetArea() * kVEADefaultBitratePerPixel,
513 RenderThreadImpl::current()->GetGpuFactories()->GetTaskRunner()), 519 RenderThreadImpl::current()->GetGpuFactories()->GetTaskRunner()),
514 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), 520 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()),
515 codec_(codec), 521 codec_(codec),
516 error_notified_(false) { 522 error_notified_(false) {
517 DCHECK(gpu_factories_); 523 DCHECK(gpu_factories_);
518 DCHECK_GE(size.width(), kVEAEncoderMinResolutionWidth); 524 DCHECK_GE(size.width(), kVEAEncoderMinResolutionWidth);
519 DCHECK_GE(size.height(), kVEAEncoderMinResolutionHeight); 525 DCHECK_GE(size.height(), kVEAEncoderMinResolutionHeight);
520 526
521 encoding_task_runner_->PostTask( 527 encoding_task_runner_->PostTask(
522 FROM_HERE, base::Bind(&VEAEncoder::ConfigureEncoderOnEncodingTaskRunner, 528 FROM_HERE, base::Bind(&VEAEncoder::ConfigureEncoderOnEncodingTaskRunner,
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 encoding_task_runner_->PostTask( 691 encoding_task_runner_->PostTask(
686 FROM_HERE, 692 FROM_HERE,
687 base::Bind(&media::VideoEncodeAccelerator::Encode, 693 base::Bind(&media::VideoEncodeAccelerator::Encode,
688 base::Unretained(video_encoder_.get()), video_frame, false)); 694 base::Unretained(video_encoder_.get()), video_frame, false));
689 } 695 }
690 696
691 void VEAEncoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) { 697 void VEAEncoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) {
692 DVLOG(3) << __func__; 698 DVLOG(3) << __func__;
693 DCHECK(encoding_task_runner_->BelongsToCurrentThread()); 699 DCHECK(encoding_task_runner_->BelongsToCurrentThread());
694 DCHECK(gpu_factories_->GetTaskRunner()->BelongsToCurrentThread()); 700 DCHECK(gpu_factories_->GetTaskRunner()->BelongsToCurrentThread());
701 DCHECK_GT(bits_per_second_, 0);
695 702
696 input_size_ = size; 703 input_size_ = size;
697 video_encoder_ = gpu_factories_->CreateVideoEncodeAccelerator(); 704 video_encoder_ = gpu_factories_->CreateVideoEncodeAccelerator();
698 if (!video_encoder_ || 705 if (!video_encoder_ ||
699 !video_encoder_->Initialize(media::PIXEL_FORMAT_I420, input_size_, codec_, 706 !video_encoder_->Initialize(media::PIXEL_FORMAT_I420, input_size_, codec_,
700 bits_per_second_, this)) { 707 bits_per_second_, this)) {
701 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError); 708 NotifyError(media::VideoEncodeAccelerator::kPlatformFailureError);
702 } 709 }
703 } 710 }
704 711
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
1156 encoder_->SetPaused(paused_before_init_); 1163 encoder_->SetPaused(paused_before_init_);
1157 1164
1158 // StartFrameEncode() will be called on Render IO thread. 1165 // StartFrameEncode() will be called on Render IO thread.
1159 MediaStreamVideoSink::ConnectToTrack( 1166 MediaStreamVideoSink::ConnectToTrack(
1160 track_, 1167 track_,
1161 base::Bind(&VideoTrackRecorder::Encoder::StartFrameEncode, encoder_), 1168 base::Bind(&VideoTrackRecorder::Encoder::StartFrameEncode, encoder_),
1162 false); 1169 false);
1163 } 1170 }
1164 1171
1165 } // namespace content 1172 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698