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

Unified Diff: webrtc/media/engine/webrtcvideoframe.cc

Issue 2402853002: Revert of Make cricket::VideoFrame inherit webrtc::VideoFrame. (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « webrtc/media/engine/webrtcvideoframe.h ('k') | webrtc/media/engine/webrtcvideoframe_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvideoframe.cc
diff --git a/webrtc/media/engine/webrtcvideoframe.cc b/webrtc/media/engine/webrtcvideoframe.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c478c0a74daff6f3f487c6d43f02c9e243e9eee0
--- /dev/null
+++ b/webrtc/media/engine/webrtcvideoframe.cc
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "webrtc/media/engine/webrtcvideoframe.h"
+
+#include "libyuv/convert.h"
+#include "webrtc/base/logging.h"
+#include "webrtc/media/base/videocapturer.h"
+#include "webrtc/media/base/videocommon.h"
+#include "webrtc/video_frame.h"
+
+namespace cricket {
+
+WebRtcVideoFrame::WebRtcVideoFrame()
+ : timestamp_us_(0), rotation_(webrtc::kVideoRotation_0) {}
+
+WebRtcVideoFrame::WebRtcVideoFrame(
+ const rtc::scoped_refptr<webrtc::VideoFrameBuffer>& buffer,
+ webrtc::VideoRotation rotation,
+ int64_t timestamp_us,
+ uint32_t transport_frame_id)
+ : video_frame_buffer_(buffer),
+ timestamp_us_(timestamp_us),
+ transport_frame_id_(transport_frame_id),
+ rotation_(rotation) {}
+
+WebRtcVideoFrame::WebRtcVideoFrame(
+ const rtc::scoped_refptr<webrtc::VideoFrameBuffer>& buffer,
+ webrtc::VideoRotation rotation,
+ int64_t timestamp_us)
+ : WebRtcVideoFrame(buffer, rotation, timestamp_us, 0) {};
+
+WebRtcVideoFrame::WebRtcVideoFrame(
+ const rtc::scoped_refptr<webrtc::VideoFrameBuffer>& buffer,
+ int64_t time_stamp_ns,
+ webrtc::VideoRotation rotation)
+ : WebRtcVideoFrame(buffer,
+ rotation,
+ time_stamp_ns / rtc::kNumNanosecsPerMicrosec,
+ 0) {}
+
+WebRtcVideoFrame::~WebRtcVideoFrame() {}
+
+bool WebRtcVideoFrame::Init(uint32_t format,
+ int w,
+ int h,
+ int dw,
+ int dh,
+ uint8_t* sample,
+ size_t sample_size,
+ int64_t time_stamp_ns,
+ webrtc::VideoRotation rotation) {
+ return Reset(format, w, h, dw, dh, sample, sample_size,
+ time_stamp_ns / rtc::kNumNanosecsPerMicrosec, rotation,
+ true /*apply_rotation*/);
+}
+
+int WebRtcVideoFrame::width() const {
+ return video_frame_buffer_ ? video_frame_buffer_->width() : 0;
+}
+
+int WebRtcVideoFrame::height() const {
+ return video_frame_buffer_ ? video_frame_buffer_->height() : 0;
+}
+
+const rtc::scoped_refptr<webrtc::VideoFrameBuffer>&
+WebRtcVideoFrame::video_frame_buffer() const {
+ return video_frame_buffer_;
+}
+
+uint32_t WebRtcVideoFrame::transport_frame_id() const {
+ return transport_frame_id_;
+}
+
+int64_t WebRtcVideoFrame::timestamp_us() const {
+ return timestamp_us_;
+}
+
+void WebRtcVideoFrame::set_timestamp_us(int64_t time_us) {
+ timestamp_us_ = time_us;
+}
+
+webrtc::VideoRotation WebRtcVideoFrame::rotation() const {
+ return rotation_;
+}
+
+bool WebRtcVideoFrame::Reset(uint32_t format,
+ int w,
+ int h,
+ int dw,
+ int dh,
+ uint8_t* sample,
+ size_t sample_size,
+ int64_t timestamp_us,
+ webrtc::VideoRotation rotation,
+ bool apply_rotation) {
+ if (!Validate(format, w, h, sample, sample_size)) {
+ return false;
+ }
+ // Translate aliases to standard enums (e.g., IYUV -> I420).
+ format = CanonicalFourCC(format);
+
+ // Set up a new buffer.
+ // TODO(fbarchard): Support lazy allocation.
+ int new_width = dw;
+ int new_height = dh;
+ // If rotated swap width, height.
+ if (apply_rotation && (rotation == 90 || rotation == 270)) {
+ new_width = dh;
+ new_height = dw;
+ }
+
+ rtc::scoped_refptr<webrtc::I420Buffer> buffer =
+ webrtc::I420Buffer::Create(new_width, new_height);
+ video_frame_buffer_ = buffer;
+ rotation_ = apply_rotation ? webrtc::kVideoRotation_0 : rotation;
+
+ int horiz_crop = ((w - dw) / 2) & ~1;
+ // ARGB on Windows has negative height.
+ // The sample's layout in memory is normal, so just correct crop.
+ int vert_crop = ((abs(h) - dh) / 2) & ~1;
+ // Conversion functions expect negative height to flip the image.
+ int idh = (h < 0) ? -dh : dh;
+ int r = libyuv::ConvertToI420(
+ sample, sample_size,
+ buffer->MutableDataY(), buffer->StrideY(),
+ buffer->MutableDataU(), buffer->StrideU(),
+ buffer->MutableDataV(), buffer->StrideV(),
+ horiz_crop, vert_crop, w, h, dw, idh,
+ static_cast<libyuv::RotationMode>(
+ apply_rotation ? rotation : webrtc::kVideoRotation_0),
+ format);
+ if (r) {
+ LOG(LS_ERROR) << "Error parsing format: " << GetFourccName(format)
+ << " return code : " << r;
+ return false;
+ }
+ timestamp_us_ = timestamp_us;
+ return true;
+}
+
+void WebRtcVideoFrame::InitToEmptyBuffer(int w, int h) {
+ video_frame_buffer_ = webrtc::I420Buffer::Create(w, h);
+ rotation_ = webrtc::kVideoRotation_0;
+}
+
+} // namespace cricket
« no previous file with comments | « webrtc/media/engine/webrtcvideoframe.h ('k') | webrtc/media/engine/webrtcvideoframe_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698