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 VLOG_IF(1, encoded_frame->relationship == transport::EncodedFrame::KEY) |
172 VLOG(1) << "Send encoded key frame; frame_id:" | 171 << "Send encoded key frame; frame_id: " << encoded_frame->frame_id; |
173 << static_cast<int>(encoded_frame->frame_id); | |
174 } | |
175 | 172 |
176 DCHECK_GT(frames_in_encoder_, 0); | 173 DCHECK_GT(frames_in_encoder_, 0); |
177 frames_in_encoder_--; | 174 frames_in_encoder_--; |
178 uint32 frame_id = encoded_frame->frame_id; | 175 uint32 frame_id = encoded_frame->frame_id; |
179 cast_environment_->Logging()->InsertEncodedFrameEvent( | 176 cast_environment_->Logging()->InsertEncodedFrameEvent( |
180 last_send_time_, FRAME_ENCODED, VIDEO_EVENT, encoded_frame->rtp_timestamp, | 177 last_send_time_, FRAME_ENCODED, VIDEO_EVENT, encoded_frame->rtp_timestamp, |
181 frame_id, static_cast<int>(encoded_frame->data.size()), | 178 frame_id, static_cast<int>(encoded_frame->data.size()), |
182 encoded_frame->key_frame, | 179 encoded_frame->relationship == transport::EncodedFrame::KEY, |
183 current_requested_bitrate_); | 180 current_requested_bitrate_); |
184 | 181 |
185 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc | 182 // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc |
186 TRACE_EVENT_INSTANT1( | 183 TRACE_EVENT_INSTANT1( |
187 "cast_perf_test", "VideoFrameEncoded", | 184 "cast_perf_test", "VideoFrameEncoded", |
188 TRACE_EVENT_SCOPE_THREAD, | 185 TRACE_EVENT_SCOPE_THREAD, |
189 "rtp_timestamp", GetVideoRtpTimestamp(capture_time)); | 186 "rtp_timestamp", encoded_frame->rtp_timestamp); |
190 | 187 |
191 // Only use lowest 8 bits as key. | 188 // Only use lowest 8 bits as key. |
192 frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp; | 189 frame_id_to_rtp_timestamp_[frame_id & 0xff] = encoded_frame->rtp_timestamp; |
193 | 190 |
194 last_sent_frame_id_ = static_cast<int>(encoded_frame->frame_id); | 191 last_sent_frame_id_ = static_cast<int>(encoded_frame->frame_id); |
195 transport_sender_->InsertCodedVideoFrame(encoded_frame.get(), capture_time); | 192 transport_sender_->InsertCodedVideoFrame(*encoded_frame); |
196 UpdateFramesInFlight(); | 193 UpdateFramesInFlight(); |
197 InitializeTimers(); | 194 InitializeTimers(); |
198 } | 195 } |
199 | 196 |
200 void VideoSender::IncomingRtcpPacket(scoped_ptr<Packet> packet) { | 197 void VideoSender::IncomingRtcpPacket(scoped_ptr<Packet> packet) { |
201 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); | 198 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
202 rtcp_->IncomingRtcpPacket(&packet->front(), packet->size()); | 199 rtcp_->IncomingRtcpPacket(&packet->front(), packet->size()); |
203 } | 200 } |
204 | 201 |
205 void VideoSender::ScheduleNextRtcpReport() { | 202 void VideoSender::ScheduleNextRtcpReport() { |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 void VideoSender::UpdateBitrate(int new_bitrate) { | 434 void VideoSender::UpdateBitrate(int new_bitrate) { |
438 new_bitrate /= current_bitrate_divider_; | 435 new_bitrate /= current_bitrate_divider_; |
439 // Make sure we don't set the bitrate too insanely low. | 436 // Make sure we don't set the bitrate too insanely low. |
440 DCHECK_GT(new_bitrate, 1000); | 437 DCHECK_GT(new_bitrate, 1000); |
441 video_encoder_->SetBitRate(new_bitrate); | 438 video_encoder_->SetBitRate(new_bitrate); |
442 current_requested_bitrate_ = new_bitrate; | 439 current_requested_bitrate_ = new_bitrate; |
443 } | 440 } |
444 | 441 |
445 } // namespace cast | 442 } // namespace cast |
446 } // namespace media | 443 } // namespace media |
OLD | NEW |