OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "remoting/protocol/webrtc_dummy_video_encoder.h" | 5 #include "remoting/protocol/webrtc_dummy_video_encoder.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 VLOG(1) << "WebrtcDummyVideoEncoder::SetRates bitrate:framerate " << bitrate | 87 VLOG(1) << "WebrtcDummyVideoEncoder::SetRates bitrate:framerate " << bitrate |
88 << ":" << framerate; | 88 << ":" << framerate; |
89 if (!target_bitrate_cb_.is_null()) | 89 if (!target_bitrate_cb_.is_null()) |
90 target_bitrate_cb_.Run(bitrate); | 90 target_bitrate_cb_.Run(bitrate); |
91 // framerate is not expected to be valid given we never report captured | 91 // framerate is not expected to be valid given we never report captured |
92 // frames | 92 // frames |
93 return WEBRTC_VIDEO_CODEC_OK; | 93 return WEBRTC_VIDEO_CODEC_OK; |
94 } | 94 } |
95 | 95 |
96 webrtc::EncodedImageCallback::Result WebrtcDummyVideoEncoder::SendEncodedFrame( | 96 webrtc::EncodedImageCallback::Result WebrtcDummyVideoEncoder::SendEncodedFrame( |
97 std::unique_ptr<WebrtcVideoEncoder::EncodedFrame> frame, | 97 const WebrtcVideoEncoder::EncodedFrame& frame, |
98 base::TimeTicks capture_time) { | 98 base::TimeTicks capture_time) { |
99 uint8_t* buffer = | 99 uint8_t* buffer = |
100 reinterpret_cast<uint8_t*>(const_cast<char*>(frame->data.data())); | 100 reinterpret_cast<uint8_t*>(const_cast<char*>(frame.data.data())); |
101 size_t buffer_size = frame->data.size(); | 101 size_t buffer_size = frame.data.size(); |
102 base::AutoLock lock(lock_); | 102 base::AutoLock lock(lock_); |
103 if (state_ == kUninitialized) { | 103 if (state_ == kUninitialized) { |
104 LOG(ERROR) << "encoder interface uninitialized"; | 104 LOG(ERROR) << "encoder interface uninitialized"; |
105 return webrtc::EncodedImageCallback::Result( | 105 return webrtc::EncodedImageCallback::Result( |
106 webrtc::EncodedImageCallback::Result::ERROR_SEND_FAILED); | 106 webrtc::EncodedImageCallback::Result::ERROR_SEND_FAILED); |
107 } | 107 } |
108 | 108 |
109 webrtc::EncodedImage encoded_image(buffer, buffer_size, buffer_size); | 109 webrtc::EncodedImage encoded_image(buffer, buffer_size, buffer_size); |
110 encoded_image._encodedWidth = frame->size.width(); | 110 encoded_image._encodedWidth = frame.size.width(); |
111 encoded_image._encodedHeight = frame->size.height(); | 111 encoded_image._encodedHeight = frame.size.height(); |
112 encoded_image._completeFrame = true; | 112 encoded_image._completeFrame = true; |
113 encoded_image._frameType = | 113 encoded_image._frameType = |
114 frame->key_frame ? webrtc::kVideoFrameKey : webrtc::kVideoFrameDelta; | 114 frame.key_frame ? webrtc::kVideoFrameKey : webrtc::kVideoFrameDelta; |
115 int64_t capture_time_ms = (capture_time - base::TimeTicks()).InMilliseconds(); | 115 int64_t capture_time_ms = (capture_time - base::TimeTicks()).InMilliseconds(); |
116 encoded_image.capture_time_ms_ = capture_time_ms; | 116 encoded_image.capture_time_ms_ = capture_time_ms; |
117 encoded_image._timeStamp = static_cast<uint32_t>(capture_time_ms * 90); | 117 encoded_image._timeStamp = static_cast<uint32_t>(capture_time_ms * 90); |
118 encoded_image.playout_delay_.min_ms = 0; | 118 encoded_image.playout_delay_.min_ms = 0; |
119 encoded_image.playout_delay_.max_ms = 0; | 119 encoded_image.playout_delay_.max_ms = 0; |
120 | 120 |
121 webrtc::CodecSpecificInfo codec_specific_info; | 121 webrtc::CodecSpecificInfo codec_specific_info; |
122 memset(&codec_specific_info, 0, sizeof(codec_specific_info)); | 122 memset(&codec_specific_info, 0, sizeof(codec_specific_info)); |
123 codec_specific_info.codecType = webrtc::kVideoCodecVP8; | 123 codec_specific_info.codecType = webrtc::kVideoCodecVP8; |
124 | 124 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 if ((*pos).get() == encoder) { | 199 if ((*pos).get() == encoder) { |
200 encoders_.erase(pos); | 200 encoders_.erase(pos); |
201 return; | 201 return; |
202 } | 202 } |
203 } | 203 } |
204 DCHECK(false) << "Asked to remove encoder not owned by factory"; | 204 DCHECK(false) << "Asked to remove encoder not owned by factory"; |
205 } | 205 } |
206 | 206 |
207 webrtc::EncodedImageCallback::Result | 207 webrtc::EncodedImageCallback::Result |
208 WebrtcDummyVideoEncoderFactory::SendEncodedFrame( | 208 WebrtcDummyVideoEncoderFactory::SendEncodedFrame( |
209 std::unique_ptr<WebrtcVideoEncoder::EncodedFrame> frame, | 209 const WebrtcVideoEncoder::EncodedFrame& frame, |
210 base::TimeTicks capture_time) { | 210 base::TimeTicks capture_time) { |
211 if (encoders_.size() != 1) { | 211 if (encoders_.size() != 1) { |
212 LOG(ERROR) << "Unexpected number of encoders " << encoders_.size(); | 212 LOG(ERROR) << "Unexpected number of encoders " << encoders_.size(); |
213 return webrtc::EncodedImageCallback::Result( | 213 return webrtc::EncodedImageCallback::Result( |
214 webrtc::EncodedImageCallback::Result::ERROR_SEND_FAILED); | 214 webrtc::EncodedImageCallback::Result::ERROR_SEND_FAILED); |
215 } | 215 } |
216 return encoders_.front()->SendEncodedFrame(std::move(frame), capture_time); | 216 return encoders_.front()->SendEncodedFrame(frame, capture_time); |
217 } | 217 } |
218 | 218 |
219 void WebrtcDummyVideoEncoderFactory::SetKeyFrameRequestCallback( | 219 void WebrtcDummyVideoEncoderFactory::SetKeyFrameRequestCallback( |
220 const base::Closure& key_frame_request) { | 220 const base::Closure& key_frame_request) { |
221 base::AutoLock lock(lock_); | 221 base::AutoLock lock(lock_); |
222 key_frame_request_ = key_frame_request; | 222 key_frame_request_ = key_frame_request; |
223 if (encoders_.size() == 1) { | 223 if (encoders_.size() == 1) { |
224 encoders_.front()->SetKeyFrameRequestCallback(key_frame_request); | 224 encoders_.front()->SetKeyFrameRequestCallback(key_frame_request); |
225 } else { | 225 } else { |
226 LOG(ERROR) << "Dropping key frame request callback with unexpected" | 226 LOG(ERROR) << "Dropping key frame request callback with unexpected" |
(...skipping 10 matching lines...) Expand all Loading... |
237 encoders_.front()->SetTargetBitrateCallback(target_bitrate_cb); | 237 encoders_.front()->SetTargetBitrateCallback(target_bitrate_cb); |
238 } else { | 238 } else { |
239 LOG(ERROR) << "Dropping target bitrate request callback with unexpected" | 239 LOG(ERROR) << "Dropping target bitrate request callback with unexpected" |
240 " number of encoders: " | 240 " number of encoders: " |
241 << encoders_.size(); | 241 << encoders_.size(); |
242 } | 242 } |
243 } | 243 } |
244 | 244 |
245 } // namespace protocol | 245 } // namespace protocol |
246 } // namespace remoting | 246 } // namespace remoting |
OLD | NEW |