OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/video_sender/video_sender.h" | 5 #include "media/cast/video_sender/video_sender.h" |
6 | 6 |
7 #include <cstring> | 7 #include <cstring> |
8 #include <list> | 8 #include <list> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 TRACE_EVENT_INSTANT2( | 149 TRACE_EVENT_INSTANT2( |
150 "cast_perf_test", "InsertRawVideoFrame", | 150 "cast_perf_test", "InsertRawVideoFrame", |
151 TRACE_EVENT_SCOPE_THREAD, | 151 TRACE_EVENT_SCOPE_THREAD, |
152 "timestamp", capture_time.ToInternalValue(), | 152 "timestamp", capture_time.ToInternalValue(), |
153 "rtp_timestamp", GetVideoRtpTimestamp(capture_time)); | 153 "rtp_timestamp", GetVideoRtpTimestamp(capture_time)); |
154 | 154 |
155 if (video_encoder_->EncodeVideoFrame( | 155 if (video_encoder_->EncodeVideoFrame( |
156 video_frame, | 156 video_frame, |
157 capture_time, | 157 capture_time, |
158 base::Bind(&VideoSender::SendEncodedVideoFrameMainThread, | 158 base::Bind(&VideoSender::SendEncodedVideoFrameMainThread, |
159 weak_factory_.GetWeakPtr()))) { | 159 weak_factory_.GetWeakPtr(), |
| 160 current_requested_bitrate_))) { |
160 frames_in_encoder_++; | 161 frames_in_encoder_++; |
161 UpdateFramesInFlight(); | 162 UpdateFramesInFlight(); |
162 } | 163 } |
163 } | 164 } |
164 | 165 |
165 void VideoSender::SendEncodedVideoFrameMainThread( | 166 void VideoSender::SendEncodedVideoFrameMainThread( |
| 167 int requested_bitrate_before_encode, |
166 scoped_ptr<transport::EncodedVideoFrame> encoded_frame, | 168 scoped_ptr<transport::EncodedVideoFrame> encoded_frame, |
167 const base::TimeTicks& capture_time) { | 169 const base::TimeTicks& capture_time) { |
168 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 170 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
169 last_send_time_ = cast_environment_->Clock()->NowTicks(); | 171 last_send_time_ = cast_environment_->Clock()->NowTicks(); |
170 if (encoded_frame->key_frame) { | 172 if (encoded_frame->key_frame) { |
171 VLOG(1) << "Send encoded key frame; frame_id:" | 173 VLOG(1) << "Send encoded key frame; frame_id:" |
172 << static_cast<int>(encoded_frame->frame_id); | 174 << static_cast<int>(encoded_frame->frame_id); |
173 } | 175 } |
174 | 176 |
175 DCHECK_GT(frames_in_encoder_, 0); | 177 DCHECK_GT(frames_in_encoder_, 0); |
176 frames_in_encoder_--; | 178 frames_in_encoder_--; |
177 uint32 frame_id = encoded_frame->frame_id; | 179 uint32 frame_id = encoded_frame->frame_id; |
178 cast_environment_->Logging()->InsertEncodedFrameEvent( | 180 cast_environment_->Logging()->InsertEncodedFrameEvent( |
179 last_send_time_, FRAME_ENCODED, VIDEO_EVENT, encoded_frame->rtp_timestamp, | 181 last_send_time_, FRAME_ENCODED, VIDEO_EVENT, encoded_frame->rtp_timestamp, |
180 frame_id, static_cast<int>(encoded_frame->data.size()), | 182 frame_id, static_cast<int>(encoded_frame->data.size()), |
181 encoded_frame->key_frame, | 183 encoded_frame->key_frame, |
182 current_requested_bitrate_); | 184 requested_bitrate_before_encode); |
183 | 185 |
184 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc | 186 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc |
185 TRACE_EVENT_INSTANT1( | 187 TRACE_EVENT_INSTANT1( |
186 "cast_perf_test", "VideoFrameEncoded", | 188 "cast_perf_test", "VideoFrameEncoded", |
187 TRACE_EVENT_SCOPE_THREAD, | 189 TRACE_EVENT_SCOPE_THREAD, |
188 "rtp_timestamp", GetVideoRtpTimestamp(capture_time)); | 190 "rtp_timestamp", GetVideoRtpTimestamp(capture_time)); |
189 | 191 |
190 // Only use lowest 8 bits as key. | 192 // Only use lowest 8 bits as key. |
191 frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp; | 193 frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp; |
192 | 194 |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 void VideoSender::UpdateBitrate(int new_bitrate) { | 438 void VideoSender::UpdateBitrate(int new_bitrate) { |
437 new_bitrate /= current_bitrate_divider_; | 439 new_bitrate /= current_bitrate_divider_; |
438 // Make sure we don't set the bitrate too insanely low. | 440 // Make sure we don't set the bitrate too insanely low. |
439 DCHECK_GT(new_bitrate, 1000); | 441 DCHECK_GT(new_bitrate, 1000); |
440 video_encoder_->SetBitRate(new_bitrate); | 442 video_encoder_->SetBitRate(new_bitrate); |
441 current_requested_bitrate_ = new_bitrate; | 443 current_requested_bitrate_ = new_bitrate; |
442 } | 444 } |
443 | 445 |
444 } // namespace cast | 446 } // namespace cast |
445 } // namespace media | 447 } // namespace media |
OLD | NEW |