| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 _requestedCapability(), | 82 _requestedCapability(), |
| 83 _lastProcessTimeNanos(rtc::TimeNanos()), | 83 _lastProcessTimeNanos(rtc::TimeNanos()), |
| 84 _lastFrameRateCallbackTimeNanos(rtc::TimeNanos()), | 84 _lastFrameRateCallbackTimeNanos(rtc::TimeNanos()), |
| 85 _dataCallBack(NULL), | 85 _dataCallBack(NULL), |
| 86 _lastProcessFrameTimeNanos(rtc::TimeNanos()), | 86 _lastProcessFrameTimeNanos(rtc::TimeNanos()), |
| 87 _rotateFrame(kVideoRotation_0), | 87 _rotateFrame(kVideoRotation_0), |
| 88 apply_rotation_(false) { | 88 apply_rotation_(false) { |
| 89 _requestedCapability.width = kDefaultWidth; | 89 _requestedCapability.width = kDefaultWidth; |
| 90 _requestedCapability.height = kDefaultHeight; | 90 _requestedCapability.height = kDefaultHeight; |
| 91 _requestedCapability.maxFPS = 30; | 91 _requestedCapability.maxFPS = 30; |
| 92 _requestedCapability.rawType = kVideoI420; | 92 _requestedCapability.videoType = VideoType::kI420; |
| 93 memset(_incomingFrameTimesNanos, 0, sizeof(_incomingFrameTimesNanos)); | 93 memset(_incomingFrameTimesNanos, 0, sizeof(_incomingFrameTimesNanos)); |
| 94 } | 94 } |
| 95 | 95 |
| 96 VideoCaptureImpl::~VideoCaptureImpl() | 96 VideoCaptureImpl::~VideoCaptureImpl() |
| 97 { | 97 { |
| 98 DeRegisterCaptureDataCallback(); | 98 DeRegisterCaptureDataCallback(); |
| 99 if (_deviceUniqueId) | 99 if (_deviceUniqueId) |
| 100 delete[] _deviceUniqueId; | 100 delete[] _deviceUniqueId; |
| 101 } | 101 } |
| 102 | 102 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 127 int64_t captureTime/*=0*/) | 127 int64_t captureTime/*=0*/) |
| 128 { | 128 { |
| 129 rtc::CritScope cs(&_apiCs); | 129 rtc::CritScope cs(&_apiCs); |
| 130 | 130 |
| 131 const int32_t width = frameInfo.width; | 131 const int32_t width = frameInfo.width; |
| 132 const int32_t height = frameInfo.height; | 132 const int32_t height = frameInfo.height; |
| 133 | 133 |
| 134 TRACE_EVENT1("webrtc", "VC::IncomingFrame", "capture_time", captureTime); | 134 TRACE_EVENT1("webrtc", "VC::IncomingFrame", "capture_time", captureTime); |
| 135 | 135 |
| 136 // Not encoded, convert to I420. | 136 // Not encoded, convert to I420. |
| 137 const VideoType commonVideoType = | 137 if (frameInfo.videoType != VideoType::kMJPEG && |
| 138 RawVideoTypeToCommonVideoVideoType(frameInfo.rawType); | 138 CalcBufferSize(frameInfo.videoType, width, abs(height)) != |
| 139 | |
| 140 if (frameInfo.rawType != kVideoMJPEG && | |
| 141 CalcBufferSize(commonVideoType, width, abs(height)) != | |
| 142 videoFrameLength) { | 139 videoFrameLength) { |
| 143 LOG(LS_ERROR) << "Wrong incoming frame length."; | 140 LOG(LS_ERROR) << "Wrong incoming frame length."; |
| 144 return -1; | 141 return -1; |
| 145 } | 142 } |
| 146 | 143 |
| 147 int stride_y = width; | 144 int stride_y = width; |
| 148 int stride_uv = (width + 1) / 2; | 145 int stride_uv = (width + 1) / 2; |
| 149 int target_width = width; | 146 int target_width = width; |
| 150 int target_height = height; | 147 int target_height = height; |
| 151 | 148 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 162 } | 159 } |
| 163 | 160 |
| 164 // Setting absolute height (in case it was negative). | 161 // Setting absolute height (in case it was negative). |
| 165 // In Windows, the image starts bottom left, instead of top left. | 162 // In Windows, the image starts bottom left, instead of top left. |
| 166 // Setting a negative source height, inverts the image (within LibYuv). | 163 // Setting a negative source height, inverts the image (within LibYuv). |
| 167 | 164 |
| 168 // TODO(nisse): Use a pool? | 165 // TODO(nisse): Use a pool? |
| 169 rtc::scoped_refptr<I420Buffer> buffer = I420Buffer::Create( | 166 rtc::scoped_refptr<I420Buffer> buffer = I420Buffer::Create( |
| 170 target_width, abs(target_height), stride_y, stride_uv, stride_uv); | 167 target_width, abs(target_height), stride_y, stride_uv, stride_uv); |
| 171 const int conversionResult = ConvertToI420( | 168 const int conversionResult = ConvertToI420( |
| 172 commonVideoType, videoFrame, 0, 0, // No cropping | 169 frameInfo.videoType, videoFrame, 0, 0, // No cropping |
| 173 width, height, videoFrameLength, | 170 width, height, videoFrameLength, |
| 174 apply_rotation ? _rotateFrame : kVideoRotation_0, buffer.get()); | 171 apply_rotation ? _rotateFrame : kVideoRotation_0, buffer.get()); |
| 175 if (conversionResult < 0) { | 172 if (conversionResult < 0) { |
| 176 LOG(LS_ERROR) << "Failed to convert capture frame from type " | 173 LOG(LS_ERROR) << "Failed to convert capture frame from type " |
| 177 << frameInfo.rawType << "to I420."; | 174 << static_cast<int>(frameInfo.videoType) << "to I420."; |
| 178 return -1; | 175 return -1; |
| 179 } | 176 } |
| 180 | 177 |
| 181 VideoFrame captureFrame(buffer, 0, rtc::TimeMillis(), | 178 VideoFrame captureFrame(buffer, 0, rtc::TimeMillis(), |
| 182 !apply_rotation ? _rotateFrame : kVideoRotation_0); | 179 !apply_rotation ? _rotateFrame : kVideoRotation_0); |
| 183 captureFrame.set_ntp_time_ms(captureTime); | 180 captureFrame.set_ntp_time_ms(captureTime); |
| 184 | 181 |
| 185 DeliverCapturedFrame(captureFrame); | 182 DeliverCapturedFrame(captureFrame); |
| 186 | 183 |
| 187 return 0; | 184 return 0; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 rtc::kNumNanosecsPerMillisec; | 228 rtc::kNumNanosecsPerMillisec; |
| 232 if (diff > 0) { | 229 if (diff > 0) { |
| 233 return uint32_t((nrOfFrames * 1000.0f / diff) + 0.5f); | 230 return uint32_t((nrOfFrames * 1000.0f / diff) + 0.5f); |
| 234 } | 231 } |
| 235 } | 232 } |
| 236 | 233 |
| 237 return nrOfFrames; | 234 return nrOfFrames; |
| 238 } | 235 } |
| 239 } // namespace videocapturemodule | 236 } // namespace videocapturemodule |
| 240 } // namespace webrtc | 237 } // namespace webrtc |
| OLD | NEW |