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

Side by Side Diff: media/cast/sender/video_sender.cc

Issue 555563003: Cast: Flow hw encoder initialization error to extensions API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed comments and missing patch" Created 6 years, 3 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/cast/sender/video_sender.h" 5 #include "media/cast/sender/video_sender.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 20 matching lines...) Expand all
31 if (!video_config.use_external_encoder) 31 if (!video_config.use_external_encoder)
32 return 0; 32 return 0;
33 return (video_config.min_bitrate + video_config.max_bitrate) / 2; 33 return (video_config.min_bitrate + video_config.max_bitrate) / 2;
34 } 34 }
35 35
36 } // namespace 36 } // namespace
37 37
38 VideoSender::VideoSender( 38 VideoSender::VideoSender(
39 scoped_refptr<CastEnvironment> cast_environment, 39 scoped_refptr<CastEnvironment> cast_environment,
40 const VideoSenderConfig& video_config, 40 const VideoSenderConfig& video_config,
41 const CastInitializationCallback& initialization_cb,
41 const CreateVideoEncodeAcceleratorCallback& create_vea_cb, 42 const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
42 const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb, 43 const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb,
43 CastTransportSender* const transport_sender) 44 CastTransportSender* const transport_sender)
44 : FrameSender( 45 : FrameSender(
45 cast_environment, 46 cast_environment,
46 transport_sender, 47 transport_sender,
47 base::TimeDelta::FromMilliseconds(video_config.rtcp_interval), 48 base::TimeDelta::FromMilliseconds(video_config.rtcp_interval),
48 kVideoFrequency, 49 kVideoFrequency,
49 video_config.ssrc, 50 video_config.ssrc,
50 video_config.max_frame_rate, 51 video_config.max_frame_rate,
51 video_config.target_playout_delay), 52 video_config.target_playout_delay),
52 fixed_bitrate_(GetFixedBitrate(video_config)), 53 fixed_bitrate_(GetFixedBitrate(video_config)),
53 frames_in_encoder_(0), 54 frames_in_encoder_(0),
54 congestion_control_(cast_environment->Clock(), 55 congestion_control_(cast_environment->Clock(),
55 video_config.max_bitrate, 56 video_config.max_bitrate,
56 video_config.min_bitrate, 57 video_config.min_bitrate,
57 max_unacked_frames_), 58 max_unacked_frames_),
58 weak_factory_(this) { 59 weak_factory_(this) {
59 cast_initialization_status_ = STATUS_VIDEO_UNINITIALIZED; 60 cast_initialization_status_ = STATUS_VIDEO_UNINITIALIZED;
60 VLOG(1) << "max_unacked_frames is " << max_unacked_frames_ 61 VLOG(1) << "max_unacked_frames is " << max_unacked_frames_
61 << " for target_playout_delay=" 62 << " for target_playout_delay="
62 << target_playout_delay_.InMilliseconds() << " ms" 63 << target_playout_delay_.InMilliseconds() << " ms"
63 << " and max_frame_rate=" << video_config.max_frame_rate; 64 << " and max_frame_rate=" << video_config.max_frame_rate;
64 DCHECK_GT(max_unacked_frames_, 0); 65 DCHECK_GT(max_unacked_frames_, 0);
65 66
66 if (video_config.use_external_encoder) { 67 if (video_config.use_external_encoder) {
67 video_encoder_.reset(new ExternalVideoEncoder(cast_environment, 68 video_encoder_.reset(new ExternalVideoEncoder(
68 video_config, 69 cast_environment,
69 create_vea_cb, 70 video_config,
70 create_video_encode_mem_cb)); 71 base::Bind(&VideoSender::OnEncoderInitialized,
72 weak_factory_.GetWeakPtr(), initialization_cb),
73 create_vea_cb,
74 create_video_encode_mem_cb));
71 } else { 75 } else {
76 // Software encoder is initialized immediately.
72 video_encoder_.reset(new VideoEncoderImpl( 77 video_encoder_.reset(new VideoEncoderImpl(
73 cast_environment, video_config, max_unacked_frames_)); 78 cast_environment, video_config, max_unacked_frames_));
79 cast_initialization_status_ = STATUS_VIDEO_INITIALIZED;
74 } 80 }
75 cast_initialization_status_ = STATUS_VIDEO_INITIALIZED; 81
82 if (cast_initialization_status_ == STATUS_VIDEO_INITIALIZED) {
83 cast_environment->PostTask(
84 CastEnvironment::MAIN,
85 FROM_HERE,
86 base::Bind(initialization_cb, cast_initialization_status_));
87 }
76 88
77 media::cast::CastTransportRtpConfig transport_config; 89 media::cast::CastTransportRtpConfig transport_config;
78 transport_config.ssrc = video_config.ssrc; 90 transport_config.ssrc = video_config.ssrc;
79 transport_config.feedback_ssrc = video_config.incoming_feedback_ssrc; 91 transport_config.feedback_ssrc = video_config.incoming_feedback_ssrc;
80 transport_config.rtp_payload_type = video_config.rtp_payload_type; 92 transport_config.rtp_payload_type = video_config.rtp_payload_type;
81 transport_config.stored_frames = max_unacked_frames_; 93 transport_config.stored_frames = max_unacked_frames_;
82 transport_config.aes_key = video_config.aes_key; 94 transport_config.aes_key = video_config.aes_key;
83 transport_config.aes_iv_mask = video_config.aes_iv_mask; 95 transport_config.aes_iv_mask = video_config.aes_iv_mask;
84 96
85 transport_sender->InitializeVideo( 97 transport_sender->InitializeVideo(
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 congestion_control_.SendFrameToTransport( 219 congestion_control_.SendFrameToTransport(
208 frame_id, encoded_frame->data.size() * 8, last_send_time_); 220 frame_id, encoded_frame->data.size() * 8, last_send_time_);
209 221
210 if (send_target_playout_delay_) { 222 if (send_target_playout_delay_) {
211 encoded_frame->new_playout_delay_ms = 223 encoded_frame->new_playout_delay_ms =
212 target_playout_delay_.InMilliseconds(); 224 target_playout_delay_.InMilliseconds();
213 } 225 }
214 transport_sender_->InsertFrame(ssrc_, *encoded_frame); 226 transport_sender_->InsertFrame(ssrc_, *encoded_frame);
215 } 227 }
216 228
229 void VideoSender::OnEncoderInitialized(
230 const CastInitializationCallback& initialization_cb,
231 CastInitializationStatus status) {
232 cast_initialization_status_ = status;
233 initialization_cb.Run(status);
234 }
235
217 void VideoSender::OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback) { 236 void VideoSender::OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback) {
218 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 237 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
219 238
220 base::TimeDelta rtt; 239 base::TimeDelta rtt;
221 base::TimeDelta avg_rtt; 240 base::TimeDelta avg_rtt;
222 base::TimeDelta min_rtt; 241 base::TimeDelta min_rtt;
223 base::TimeDelta max_rtt; 242 base::TimeDelta max_rtt;
224 if (is_rtt_available()) { 243 if (is_rtt_available()) {
225 rtt = rtt_; 244 rtt = rtt_;
226 avg_rtt = avg_rtt_; 245 avg_rtt = avg_rtt_;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 << duration_in_flight.InMicroseconds() << " usec (" 338 << duration_in_flight.InMicroseconds() << " usec ("
320 << (target_playout_delay_ > base::TimeDelta() ? 339 << (target_playout_delay_ > base::TimeDelta() ?
321 100 * duration_in_flight / target_playout_delay_ : 340 100 * duration_in_flight / target_playout_delay_ :
322 kint64max) << "%)"; 341 kint64max) << "%)";
323 return frames_in_flight >= max_unacked_frames_ || 342 return frames_in_flight >= max_unacked_frames_ ||
324 duration_in_flight >= target_playout_delay_; 343 duration_in_flight >= target_playout_delay_;
325 } 344 }
326 345
327 } // namespace cast 346 } // namespace cast
328 } // namespace media 347 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698