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

Unified Diff: media/cast/video_sender/video_sender.cc

Issue 116623002: Cast: Adding support for GPU accelerated encode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed dependency on content Created 7 years 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: media/cast/video_sender/video_sender.cc
diff --git a/media/cast/video_sender/video_sender.cc b/media/cast/video_sender/video_sender.cc
index aa0e1621b68434106b0b56f6fb382a5aab63d885..12a18c5dd78e196fd86944345c7a9c8a52151016 100644
--- a/media/cast/video_sender/video_sender.cc
+++ b/media/cast/video_sender/video_sender.cc
@@ -13,7 +13,8 @@
#include "crypto/symmetric_key.h"
#include "media/cast/cast_defines.h"
#include "media/cast/pacing/paced_sender.h"
-#include "media/cast/video_sender/video_encoder.h"
+#include "media/cast/video_sender/external_video_encoder.h"
+#include "media/cast/video_sender/video_encoder_impl.h"
namespace media {
namespace cast {
@@ -53,7 +54,7 @@ class LocalRtpVideoSenderStatistics : public RtpSenderStatistics {
VideoSender::VideoSender(
scoped_refptr<CastEnvironment> cast_environment,
const VideoSenderConfig& video_config,
- VideoEncoderController* const video_encoder_controller,
+ const scoped_refptr<GpuVideoAcceleratorFactories>& gpu_factories,
PacedPacketSender* const paced_packet_sender)
: rtp_max_delay_(
base::TimeDelta::FromMilliseconds(video_config.rtp_max_delay_ms)),
@@ -82,12 +83,11 @@ VideoSender::VideoSender(
new LocalRtpVideoSenderStatistics(rtp_sender_.get()));
if (video_config.use_external_encoder) {
- DCHECK(video_encoder_controller) << "Invalid argument";
- video_encoder_controller_ = video_encoder_controller;
+ video_encoder_.reset(new ExternalVideoEncoder(cast_environment,
+ video_config, gpu_factories));
} else {
- video_encoder_.reset(new VideoEncoder(cast_environment, video_config,
+ video_encoder_.reset(new VideoEncoderImpl(cast_environment, video_config,
max_unacked_frames_));
- video_encoder_controller_ = video_encoder_.get();
}
if (video_config.aes_iv_mask.size() == kAesKeySize &&
@@ -99,7 +99,7 @@ VideoSender::VideoSender(
encryptor_->Init(key, crypto::Encryptor::CTR, std::string());
} else if (video_config.aes_iv_mask.size() != 0 ||
video_config.aes_key.size() != 0) {
- DCHECK(false) << "Invalid crypto configuration";
+ NOTREACHED() << "Invalid crypto configuration";
}
rtcp_.reset(new Rtcp(
@@ -141,17 +141,6 @@ void VideoSender::InsertRawVideoFrame(
}
}
-void VideoSender::InsertCodedVideoFrame(const EncodedVideoFrame* encoded_frame,
- const base::TimeTicks& capture_time,
- const base::Closure callback) {
- DCHECK(!video_encoder_.get()) << "Invalid state";
- DCHECK(encoded_frame) << "Invalid argument";
- DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
-
- SendEncodedVideoFrame(encoded_frame, capture_time);
- cast_environment_->PostTask(CastEnvironment::MAIN, FROM_HERE, callback);
-}
-
void VideoSender::SendEncodedVideoFrameMainThread(
scoped_ptr<EncodedVideoFrame> video_frame,
const base::TimeTicks& capture_time) {
@@ -256,7 +245,7 @@ void VideoSender::ResendCheck() {
if (time_since_last_send > rtp_max_delay_) {
if (last_acked_frame_id_ == -1) {
// We have not received any ack, send a key frame.
- video_encoder_controller_->GenerateKeyFrame();
+ video_encoder_->GenerateKeyFrame();
last_acked_frame_id_ = -1;
last_sent_frame_id_ = -1;
UpdateFramesInFlight();
@@ -293,7 +282,7 @@ void VideoSender::ScheduleNextSkippedFramesCheck() {
void VideoSender::SkippedFramesCheck() {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
- int skip_count = video_encoder_controller_->NumberOfSkippedFrames();
+ int skip_count = video_encoder_->NumberOfSkippedFrames();
if (skip_count - last_skip_count_ >
kSkippedFramesThreshold * max_frame_rate_) {
// TODO(pwestin): Propagate this up to the application.
@@ -324,14 +313,14 @@ void VideoSender::OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback) {
int resend_frame = -1;
if (last_sent_frame_id_ == -1) return;
- video_encoder_controller_->LatestFrameIdToReference(
+ video_encoder_->LatestFrameIdToReference(
cast_feedback.ack_frame_id_);
if (static_cast<uint32>(last_acked_frame_id_ + 1) ==
cast_feedback.ack_frame_id_) {
uint32 new_bitrate = 0;
if (congestion_control_.OnAck(rtt, &new_bitrate)) {
- video_encoder_controller_->SetBitRate(new_bitrate);
+ video_encoder_->SetBitRate(new_bitrate);
}
}
if (static_cast<uint32>(last_acked_frame_id_) == cast_feedback.ack_frame_id_
@@ -357,7 +346,7 @@ void VideoSender::OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback) {
uint32 new_bitrate = 0;
if (congestion_control_.OnNack(rtt, &new_bitrate)) {
- video_encoder_controller_->SetBitRate(new_bitrate);
+ video_encoder_->SetBitRate(new_bitrate);
}
}
ReceivedAck(cast_feedback.ack_frame_id_);
@@ -388,11 +377,11 @@ void VideoSender::UpdateFramesInFlight() {
VLOG(1) << "Frames in flight; last sent: " << last_sent_frame_id_
<< " last acked:" << last_acked_frame_id_;
if (frames_in_flight >= max_unacked_frames_) {
- video_encoder_controller_->SkipNextFrame(true);
+ video_encoder_->SkipNextFrame(true);
return;
}
}
- video_encoder_controller_->SkipNextFrame(false);
+ video_encoder_->SkipNextFrame(false);
}
void VideoSender::ResendFrame(uint32 resend_frame_id) {

Powered by Google App Engine
This is Rietveld 408576698