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

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

Issue 688423003: [Cast] VideoFrameFactory interface to vend frames with encoder affinity. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 1 month 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/sender/video_sender.cc
diff --git a/media/cast/sender/video_sender.cc b/media/cast/sender/video_sender.cc
index 16b7159befe1fd001ceb676d9ba1596a1ca90d99..7895d6c4429dc2464168d71eb3f6d6376efc3f12 100644
--- a/media/cast/sender/video_sender.cc
+++ b/media/cast/sender/video_sender.cc
@@ -15,6 +15,7 @@
#include "media/cast/net/cast_transport_config.h"
#include "media/cast/sender/external_video_encoder.h"
#include "media/cast/sender/video_encoder_impl.h"
+#include "media/cast/sender/video_frame_factory_pool_impl.h"
namespace media {
namespace cast {
@@ -47,22 +48,23 @@ VideoSender::VideoSender(
CastTransportSender* const transport_sender,
const PlayoutDelayChangeCB& playout_delay_change_cb)
: FrameSender(
- cast_environment,
- false,
- transport_sender,
- base::TimeDelta::FromMilliseconds(video_config.rtcp_interval),
- kVideoFrequency,
- video_config.ssrc,
- video_config.max_frame_rate,
- video_config.min_playout_delay,
- video_config.max_playout_delay,
- video_config.use_external_encoder ?
- NewFixedCongestionControl(
- (video_config.min_bitrate + video_config.max_bitrate) / 2) :
- NewAdaptiveCongestionControl(cast_environment->Clock(),
- video_config.max_bitrate,
- video_config.min_bitrate,
- video_config.max_frame_rate)),
+ cast_environment,
+ false,
+ transport_sender,
+ base::TimeDelta::FromMilliseconds(video_config.rtcp_interval),
+ kVideoFrequency,
+ video_config.ssrc,
+ video_config.max_frame_rate,
+ video_config.min_playout_delay,
+ video_config.max_playout_delay,
+ video_config.use_external_encoder
+ ? NewFixedCongestionControl(
+ (video_config.min_bitrate + video_config.max_bitrate) / 2)
+ : NewAdaptiveCongestionControl(cast_environment->Clock(),
+ video_config.max_bitrate,
+ video_config.min_bitrate,
+ video_config.max_frame_rate)),
+ video_frame_factory_(new VideoFrameFactoryPoolImpl(video_config)),
frames_in_encoder_(0),
last_bitrate_(0),
playout_delay_change_cb_(playout_delay_change_cb),
@@ -80,14 +82,12 @@ VideoSender::VideoSender(
} else {
// Software encoder is initialized immediately.
video_encoder_.reset(new VideoEncoderImpl(cast_environment, video_config));
- cast_initialization_status_ = STATUS_VIDEO_INITIALIZED;
- }
-
- if (cast_initialization_status_ == STATUS_VIDEO_INITIALIZED) {
- cast_environment->PostTask(
- CastEnvironment::MAIN,
- FROM_HERE,
- base::Bind(initialization_cb, cast_initialization_status_));
+ cast_environment->PostTask(CastEnvironment::MAIN,
+ FROM_HERE,
+ base::Bind(&VideoSender::OnEncoderInitialized,
+ weak_factory_.GetWeakPtr(),
+ initialization_cb,
+ STATUS_VIDEO_INITIALIZED));
}
media::cast::CastTransportRtpConfig transport_config;
@@ -215,6 +215,13 @@ void VideoSender::OnEncoderInitialized(
const CastInitializationCallback& initialization_cb,
CastInitializationStatus status) {
cast_initialization_status_ = status;
+ if (status == STATUS_VIDEO_INITIALIZED) {
+ DCHECK(video_encoder_.get()) << "Invalid state";
+ auto video_frame_factory = video_encoder_->GetVideoFrameFactory();
+ if (video_frame_factory.get()) {
+ video_frame_factory_ = video_frame_factory;
+ }
+ }
initialization_cb.Run(status);
}

Powered by Google App Engine
This is Rietveld 408576698