Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(877)

Unified Diff: webrtc/modules/video_capture/video_capture_impl.cc

Issue 2772033002: Add content type information to encoded images and corresponding rtp extension header (Closed)
Patch Set: Fix android CE Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/video_capture/video_capture_impl.cc
diff --git a/webrtc/modules/video_capture/video_capture_impl.cc b/webrtc/modules/video_capture/video_capture_impl.cc
index ead2b1568a52e9a1dec8d8d346710a2fa6b71b25..94ca02b27ae2387a59cabc975ca5c901a9392cd9 100644
--- a/webrtc/modules/video_capture/video_capture_impl.cc
+++ b/webrtc/modules/video_capture/video_capture_impl.cc
@@ -33,9 +33,8 @@ rtc::scoped_refptr<VideoCaptureModule> VideoCaptureImpl::Create(
return implementation;
}
-const char* VideoCaptureImpl::CurrentDeviceName() const
-{
- return _deviceUniqueId;
+const char* VideoCaptureImpl::CurrentDeviceName() const {
+ return _deviceUniqueId;
}
// static
@@ -96,13 +95,12 @@ VideoCaptureImpl::VideoCaptureImpl()
memset(_incomingFrameTimesNanos, 0, sizeof(_incomingFrameTimesNanos));
}
-VideoCaptureImpl::~VideoCaptureImpl()
-{
- DeRegisterCaptureDataCallback();
- delete &_apiCs;
+VideoCaptureImpl::~VideoCaptureImpl() {
+ DeRegisterCaptureDataCallback();
+ delete &_apiCs;
- if (_deviceUniqueId)
- delete[] _deviceUniqueId;
+ if (_deviceUniqueId)
+ delete[] _deviceUniqueId;
}
void VideoCaptureImpl::RegisterCaptureDataCallback(
@@ -125,74 +123,68 @@ int32_t VideoCaptureImpl::DeliverCapturedFrame(VideoFrame& captureFrame) {
return 0;
}
-int32_t VideoCaptureImpl::IncomingFrame(
- uint8_t* videoFrame,
- size_t videoFrameLength,
- const VideoCaptureCapability& frameInfo,
- int64_t captureTime/*=0*/)
-{
- CriticalSectionScoped cs(&_apiCs);
+int32_t VideoCaptureImpl::IncomingFrame(uint8_t* videoFrame,
+ size_t videoFrameLength,
+ const VideoCaptureCapability& frameInfo,
+ int64_t captureTime /*=0*/) {
+ CriticalSectionScoped cs(&_apiCs);
- const int32_t width = frameInfo.width;
- const int32_t height = frameInfo.height;
+ const int32_t width = frameInfo.width;
+ const int32_t height = frameInfo.height;
- TRACE_EVENT1("webrtc", "VC::IncomingFrame", "capture_time", captureTime);
+ TRACE_EVENT1("webrtc", "VC::IncomingFrame", "capture_time", captureTime);
- // Not encoded, convert to I420.
- const VideoType commonVideoType =
- RawVideoTypeToCommonVideoVideoType(frameInfo.rawType);
+ // Not encoded, convert to I420.
+ const VideoType commonVideoType =
+ RawVideoTypeToCommonVideoVideoType(frameInfo.rawType);
- if (frameInfo.rawType != kVideoMJPEG &&
- CalcBufferSize(commonVideoType, width,
- abs(height)) != videoFrameLength)
- {
- LOG(LS_ERROR) << "Wrong incoming frame length.";
- return -1;
- }
+ if (frameInfo.rawType != kVideoMJPEG &&
+ CalcBufferSize(commonVideoType, width, abs(height)) != videoFrameLength) {
+ LOG(LS_ERROR) << "Wrong incoming frame length.";
+ return -1;
+ }
- int stride_y = width;
- int stride_uv = (width + 1) / 2;
- int target_width = width;
- int target_height = height;
-
- // SetApplyRotation doesn't take any lock. Make a local copy here.
- bool apply_rotation = apply_rotation_;
-
- if (apply_rotation) {
- // Rotating resolution when for 90/270 degree rotations.
- if (_rotateFrame == kVideoRotation_90 ||
- _rotateFrame == kVideoRotation_270) {
- target_width = abs(height);
- target_height = width;
- }
- }
+ int stride_y = width;
+ int stride_uv = (width + 1) / 2;
+ int target_width = width;
+ int target_height = height;
+
+ // SetApplyRotation doesn't take any lock. Make a local copy here.
+ bool apply_rotation = apply_rotation_;
- // Setting absolute height (in case it was negative).
- // In Windows, the image starts bottom left, instead of top left.
- // Setting a negative source height, inverts the image (within LibYuv).
-
- // TODO(nisse): Use a pool?
- rtc::scoped_refptr<I420Buffer> buffer = I420Buffer::Create(
- target_width, abs(target_height), stride_y, stride_uv, stride_uv);
- const int conversionResult = ConvertToI420(
- commonVideoType, videoFrame, 0, 0, // No cropping
- width, height, videoFrameLength,
- apply_rotation ? _rotateFrame : kVideoRotation_0, buffer.get());
- if (conversionResult < 0)
- {
- LOG(LS_ERROR) << "Failed to convert capture frame from type "
- << frameInfo.rawType << "to I420.";
- return -1;
+ if (apply_rotation) {
+ // Rotating resolution when for 90/270 degree rotations.
+ if (_rotateFrame == kVideoRotation_90 ||
+ _rotateFrame == kVideoRotation_270) {
+ target_width = abs(height);
+ target_height = width;
}
+ }
- VideoFrame captureFrame(
- buffer, 0, rtc::TimeMillis(),
- !apply_rotation ? _rotateFrame : kVideoRotation_0);
- captureFrame.set_ntp_time_ms(captureTime);
+ // Setting absolute height (in case it was negative).
+ // In Windows, the image starts bottom left, instead of top left.
+ // Setting a negative source height, inverts the image (within LibYuv).
+
+ // TODO(nisse): Use a pool?
+ rtc::scoped_refptr<I420Buffer> buffer = I420Buffer::Create(
+ target_width, abs(target_height), stride_y, stride_uv, stride_uv);
+ const int conversionResult = ConvertToI420(
+ commonVideoType, videoFrame, 0, 0, // No cropping
+ width, height, videoFrameLength,
+ apply_rotation ? _rotateFrame : kVideoRotation_0, buffer.get());
+ if (conversionResult < 0) {
+ LOG(LS_ERROR) << "Failed to convert capture frame from type "
+ << frameInfo.rawType << "to I420.";
+ return -1;
+ }
+
+ VideoFrame captureFrame(buffer, 0, rtc::TimeMillis(),
+ !apply_rotation ? _rotateFrame : kVideoRotation_0);
+ captureFrame.set_ntp_time_ms(captureTime);
- DeliverCapturedFrame(captureFrame);
+ DeliverCapturedFrame(captureFrame);
- return 0;
+ return 0;
}
int32_t VideoCaptureImpl::SetCaptureRotation(VideoRotation rotation) {
@@ -209,52 +201,40 @@ bool VideoCaptureImpl::SetApplyRotation(bool enable) {
return true;
}
-void VideoCaptureImpl::UpdateFrameCount()
-{
- if (_incomingFrameTimesNanos[0] / rtc::kNumNanosecsPerMicrosec == 0)
- {
- // first no shift
- }
- else
- {
- // shift
- for (int i = (kFrameRateCountHistorySize - 2); i >= 0; i--)
- {
- _incomingFrameTimesNanos[i + 1] = _incomingFrameTimesNanos[i];
- }
+void VideoCaptureImpl::UpdateFrameCount() {
+ if (_incomingFrameTimesNanos[0] / rtc::kNumNanosecsPerMicrosec == 0) {
+ // first no shift
+ } else {
+ // shift
+ for (int i = (kFrameRateCountHistorySize - 2); i >= 0; i--) {
+ _incomingFrameTimesNanos[i + 1] = _incomingFrameTimesNanos[i];
}
- _incomingFrameTimesNanos[0] = rtc::TimeNanos();
+ }
+ _incomingFrameTimesNanos[0] = rtc::TimeNanos();
}
-uint32_t VideoCaptureImpl::CalculateFrameRate(int64_t now_ns)
-{
- int32_t num = 0;
- int32_t nrOfFrames = 0;
- for (num = 1; num < (kFrameRateCountHistorySize - 1); num++)
- {
- if (_incomingFrameTimesNanos[num] <= 0 ||
- (now_ns - _incomingFrameTimesNanos[num]) /
- rtc::kNumNanosecsPerMillisec >
- kFrameRateHistoryWindowMs) // don't use data older than 2sec
- {
- break;
- }
- else
- {
- nrOfFrames++;
- }
+uint32_t VideoCaptureImpl::CalculateFrameRate(int64_t now_ns) {
+ int32_t num = 0;
+ int32_t nrOfFrames = 0;
+ for (num = 1; num < (kFrameRateCountHistorySize - 1); num++) {
+ if (_incomingFrameTimesNanos[num] <= 0 ||
+ (now_ns - _incomingFrameTimesNanos[num]) /
+ rtc::kNumNanosecsPerMillisec >
+ kFrameRateHistoryWindowMs) { // don't use data older than 2sec
+ break;
+ } else {
+ nrOfFrames++;
}
- if (num > 1)
- {
- int64_t diff = (now_ns - _incomingFrameTimesNanos[num - 1]) /
- rtc::kNumNanosecsPerMillisec;
- if (diff > 0)
- {
- return uint32_t((nrOfFrames * 1000.0f / diff) + 0.5f);
- }
+ }
+ if (num > 1) {
+ int64_t diff = (now_ns - _incomingFrameTimesNanos[num - 1]) /
+ rtc::kNumNanosecsPerMillisec;
+ if (diff > 0) {
+ return uint32_t((nrOfFrames * 1000.0f / diff) + 0.5f);
}
+ }
- return nrOfFrames;
+ return nrOfFrames;
}
} // namespace videocapturemodule
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698