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 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 cast_environment_->Clock()->NowTicks(), | 144 cast_environment_->Clock()->NowTicks(), |
145 FRAME_CAPTURE_END, VIDEO_EVENT, | 145 FRAME_CAPTURE_END, VIDEO_EVENT, |
146 rtp_timestamp, | 146 rtp_timestamp, |
147 kFrameIdUnknown); | 147 kFrameIdUnknown); |
148 | 148 |
149 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc | 149 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc |
150 TRACE_EVENT_INSTANT2( | 150 TRACE_EVENT_INSTANT2( |
151 "cast_perf_test", "InsertRawVideoFrame", | 151 "cast_perf_test", "InsertRawVideoFrame", |
152 TRACE_EVENT_SCOPE_THREAD, | 152 TRACE_EVENT_SCOPE_THREAD, |
153 "timestamp", capture_time.ToInternalValue(), | 153 "timestamp", capture_time.ToInternalValue(), |
154 "rtp_timestamp", GetVideoRtpTimestamp(capture_time)); | 154 "rtp_timestamp", rtp_timestamp); |
155 | 155 |
156 if (video_encoder_->EncodeVideoFrame( | 156 if (video_encoder_->EncodeVideoFrame( |
157 video_frame, | 157 video_frame, |
158 capture_time, | 158 capture_time, |
159 base::Bind(&VideoSender::SendEncodedVideoFrameMainThread, | 159 base::Bind(&VideoSender::SendEncodedVideoFrameMainThread, |
160 weak_factory_.GetWeakPtr()))) { | 160 weak_factory_.GetWeakPtr()))) { |
161 frames_in_encoder_++; | 161 frames_in_encoder_++; |
162 UpdateFramesInFlight(); | 162 UpdateFramesInFlight(); |
163 } | 163 } |
164 } | 164 } |
165 | 165 |
166 void VideoSender::SendEncodedVideoFrameMainThread( | 166 void VideoSender::SendEncodedVideoFrameMainThread( |
167 scoped_ptr<transport::EncodedVideoFrame> encoded_frame, | 167 scoped_ptr<transport::EncodedFrame> encoded_frame) { |
168 const base::TimeTicks& capture_time) { | |
169 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 168 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
170 last_send_time_ = cast_environment_->Clock()->NowTicks(); | 169 last_send_time_ = cast_environment_->Clock()->NowTicks(); |
171 if (encoded_frame->key_frame) { | 170 const bool is_key_frame = |
172 VLOG(1) << "Send encoded key frame; frame_id:" | 171 (encoded_frame->frame_id == encoded_frame->base_frame_id); |
173 << static_cast<int>(encoded_frame->frame_id); | 172 VLOG_IF(1, is_key_frame) << "Send encoded key frame; frame_id: " |
174 } | 173 << encoded_frame->frame_id; |
175 | 174 |
176 DCHECK_GT(frames_in_encoder_, 0); | 175 DCHECK_GT(frames_in_encoder_, 0); |
177 frames_in_encoder_--; | 176 frames_in_encoder_--; |
178 uint32 frame_id = encoded_frame->frame_id; | 177 uint32 frame_id = encoded_frame->frame_id; |
179 cast_environment_->Logging()->InsertEncodedFrameEvent( | 178 cast_environment_->Logging()->InsertEncodedFrameEvent( |
180 last_send_time_, FRAME_ENCODED, VIDEO_EVENT, encoded_frame->rtp_timestamp, | 179 last_send_time_, FRAME_ENCODED, VIDEO_EVENT, encoded_frame->rtp_timestamp, |
181 frame_id, static_cast<int>(encoded_frame->data.size()), | 180 frame_id, static_cast<int>(encoded_frame->data.size()), |
182 encoded_frame->key_frame, | 181 is_key_frame, |
183 current_requested_bitrate_); | 182 current_requested_bitrate_); |
184 | 183 |
185 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc | 184 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc |
186 TRACE_EVENT_INSTANT1( | 185 TRACE_EVENT_INSTANT1( |
187 "cast_perf_test", "VideoFrameEncoded", | 186 "cast_perf_test", "VideoFrameEncoded", |
188 TRACE_EVENT_SCOPE_THREAD, | 187 TRACE_EVENT_SCOPE_THREAD, |
189 "rtp_timestamp", GetVideoRtpTimestamp(capture_time)); | 188 "rtp_timestamp", encoded_frame->rtp_timestamp); |
190 | 189 |
191 // Only use lowest 8 bits as key. | 190 // Only use lowest 8 bits as key. |
192 frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp; | 191 frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp; |
193 | 192 |
194 last_sent_frame_id_ = static_cast<int>(encoded_frame->frame_id); | 193 last_sent_frame_id_ = static_cast<int>(encoded_frame->frame_id); |
195 transport_sender_->InsertCodedVideoFrame(encoded_frame.get(), capture_time); | 194 transport_sender_->InsertCodedVideoFrame(*encoded_frame); |
196 UpdateFramesInFlight(); | 195 UpdateFramesInFlight(); |
197 InitializeTimers(); | 196 InitializeTimers(); |
198 } | 197 } |
199 | 198 |
200 void VideoSender::IncomingRtcpPacket(scoped_ptr<Packet> packet) { | 199 void VideoSender::IncomingRtcpPacket(scoped_ptr<Packet> packet) { |
201 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 200 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
202 rtcp_->IncomingRtcpPacket(&packet->front(), packet->size()); | 201 rtcp_->IncomingRtcpPacket(&packet->front(), packet->size()); |
203 } | 202 } |
204 | 203 |
205 void VideoSender::ScheduleNextRtcpReport() { | 204 void VideoSender::ScheduleNextRtcpReport() { |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 void VideoSender::UpdateBitrate(int new_bitrate) { | 436 void VideoSender::UpdateBitrate(int new_bitrate) { |
438 new_bitrate /= current_bitrate_divider_; | 437 new_bitrate /= current_bitrate_divider_; |
439 // Make sure we don't set the bitrate too insanely low. | 438 // Make sure we don't set the bitrate too insanely low. |
440 DCHECK_GT(new_bitrate, 1000); | 439 DCHECK_GT(new_bitrate, 1000); |
441 video_encoder_->SetBitRate(new_bitrate); | 440 video_encoder_->SetBitRate(new_bitrate); |
442 current_requested_bitrate_ = new_bitrate; | 441 current_requested_bitrate_ = new_bitrate; |
443 } | 442 } |
444 | 443 |
445 } // namespace cast | 444 } // namespace cast |
446 } // namespace media | 445 } // namespace media |
OLD | NEW |