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