| 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 |