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

Side by Side Diff: content/renderer/media/webrtc/webrtc_video_frame_adapter.cc

Issue 2925313002: Update WebRtcVideoFrameAdapter to new buffer interface (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
« no previous file with comments | « content/renderer/media/webrtc/webrtc_video_frame_adapter.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/renderer/media/webrtc/webrtc_video_frame_adapter.h" 5 #include "content/renderer/media/webrtc/webrtc_video_frame_adapter.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 8
9 namespace { 9 namespace {
10 10
11 class I420Adapter : public webrtc::I420BufferInterface {
12 public:
13 explicit I420Adapter(const scoped_refptr<media::VideoFrame>& frame)
14 : frame_(frame) {}
15
16 private:
17 int width() const override { return frame_->visible_rect().width(); }
18 int height() const override { return frame_->visible_rect().height(); }
19
20 const uint8_t* DataY() const override {
21 return frame_->visible_data(media::VideoFrame::kYPlane);
22 }
23
24 const uint8_t* DataU() const override {
25 return frame_->visible_data(media::VideoFrame::kUPlane);
26 }
27
28 const uint8_t* DataV() const override {
29 return frame_->visible_data(media::VideoFrame::kVPlane);
30 }
31
32 int StrideY() const override {
33 return frame_->stride(media::VideoFrame::kYPlane);
34 }
35
36 int StrideU() const override {
37 return frame_->stride(media::VideoFrame::kUPlane);
38 }
39
40 int StrideV() const override {
41 return frame_->stride(media::VideoFrame::kVPlane);
42 }
43
44 scoped_refptr<media::VideoFrame> frame_;
45 };
46
11 void IsValidFrame(const scoped_refptr<media::VideoFrame>& frame) { 47 void IsValidFrame(const scoped_refptr<media::VideoFrame>& frame) {
12 // Paranoia checks. 48 // Paranoia checks.
13 DCHECK(frame); 49 DCHECK(frame);
14 DCHECK(media::VideoFrame::IsValidConfig( 50 DCHECK(media::VideoFrame::IsValidConfig(
15 frame->format(), frame->storage_type(), frame->coded_size(), 51 frame->format(), frame->storage_type(), frame->coded_size(),
16 frame->visible_rect(), frame->natural_size())); 52 frame->visible_rect(), frame->natural_size()));
17 DCHECK(media::PIXEL_FORMAT_I420 == frame->format() || 53 DCHECK(media::PIXEL_FORMAT_I420 == frame->format() ||
18 media::PIXEL_FORMAT_YV12 == frame->format()); 54 media::PIXEL_FORMAT_YV12 == frame->format());
19 CHECK(reinterpret_cast<void*>(frame->data(media::VideoFrame::kYPlane))); 55 CHECK(reinterpret_cast<void*>(frame->data(media::VideoFrame::kYPlane)));
20 CHECK(reinterpret_cast<void*>(frame->data(media::VideoFrame::kUPlane))); 56 CHECK(reinterpret_cast<void*>(frame->data(media::VideoFrame::kUPlane)));
21 CHECK(reinterpret_cast<void*>(frame->data(media::VideoFrame::kVPlane))); 57 CHECK(reinterpret_cast<void*>(frame->data(media::VideoFrame::kVPlane)));
22 CHECK(frame->stride(media::VideoFrame::kYPlane)); 58 CHECK(frame->stride(media::VideoFrame::kYPlane));
23 CHECK(frame->stride(media::VideoFrame::kUPlane)); 59 CHECK(frame->stride(media::VideoFrame::kUPlane));
24 CHECK(frame->stride(media::VideoFrame::kVPlane)); 60 CHECK(frame->stride(media::VideoFrame::kVPlane));
25 } 61 }
26 62
27 } // anonymous namespace 63 } // anonymous namespace
28 64
29 namespace content { 65 namespace content {
30 66
31 WebRtcVideoFrameAdapter::WebRtcVideoFrameAdapter( 67 WebRtcVideoFrameAdapter::WebRtcVideoFrameAdapter(
32 const scoped_refptr<media::VideoFrame>& frame, 68 const scoped_refptr<media::VideoFrame>& frame,
33 const CopyTextureFrameCallback& copy_texture_callback) 69 const CopyTextureFrameCallback& copy_texture_callback)
34 : frame_(frame), copy_texture_callback_(copy_texture_callback) {} 70 : frame_(frame), copy_texture_callback_(copy_texture_callback) {}
35 71
36 WebRtcVideoFrameAdapter::~WebRtcVideoFrameAdapter() { 72 WebRtcVideoFrameAdapter::~WebRtcVideoFrameAdapter() {
37 } 73 }
38 74
75 webrtc::VideoFrameBuffer::Type WebRtcVideoFrameAdapter::type() const {
76 return Type::kNative;
77 }
78
39 int WebRtcVideoFrameAdapter::width() const { 79 int WebRtcVideoFrameAdapter::width() const {
40 return frame_->visible_rect().width(); 80 return frame_->visible_rect().width();
41 } 81 }
42 82
43 int WebRtcVideoFrameAdapter::height() const { 83 int WebRtcVideoFrameAdapter::height() const {
44 return frame_->visible_rect().height(); 84 return frame_->visible_rect().height();
45 } 85 }
46 86
47 const uint8_t* WebRtcVideoFrameAdapter::DataY() const { 87 const uint8_t* WebRtcVideoFrameAdapter::DataY() const {
48 return frame_->visible_data(media::VideoFrame::kYPlane); 88 return frame_->visible_data(media::VideoFrame::kYPlane);
(...skipping 17 matching lines...) Expand all
66 106
67 void* WebRtcVideoFrameAdapter::native_handle() const { 107 void* WebRtcVideoFrameAdapter::native_handle() const {
68 // Keep native handle for shared memory backed frames, so that we can use 108 // Keep native handle for shared memory backed frames, so that we can use
69 // the existing handle to share for hw encode. 109 // the existing handle to share for hw encode.
70 if (frame_->HasTextures() || 110 if (frame_->HasTextures() ||
71 frame_->storage_type() == media::VideoFrame::STORAGE_SHMEM) 111 frame_->storage_type() == media::VideoFrame::STORAGE_SHMEM)
72 return frame_.get(); 112 return frame_.get();
73 return nullptr; 113 return nullptr;
74 } 114 }
75 115
76 rtc::scoped_refptr<webrtc::VideoFrameBuffer> 116 rtc::scoped_refptr<webrtc::I420BufferInterface>
77 WebRtcVideoFrameAdapter::NativeToI420Buffer() { 117 WebRtcVideoFrameAdapter::ToI420() {
78 if (frame_->storage_type() == media::VideoFrame::STORAGE_SHMEM) {
79 IsValidFrame(frame_);
80 return this;
81 }
82
83 if (frame_->HasTextures()) { 118 if (frame_->HasTextures()) {
emircan 2017/06/10 00:09:27 DCHECK(media::VideoFrame::STORAGE_SHMEM == frame_-
magjed_chromium 2017/06/10 15:45:00 ToI420 is allowed to be called for any storage typ
84 if (copy_texture_callback_.is_null()) { 119 if (copy_texture_callback_.is_null()) {
85 DLOG(ERROR) << "Texture backed frame cannot be copied."; 120 DLOG(ERROR) << "Texture backed frame cannot be copied.";
86 return nullptr; 121 return nullptr;
87 } 122 }
88 123
89 scoped_refptr<media::VideoFrame> new_frame; 124 scoped_refptr<media::VideoFrame> new_frame;
90 copy_texture_callback_.Run(frame_, &new_frame); 125 copy_texture_callback_.Run(frame_, &new_frame);
91 if (!new_frame) 126 if (!new_frame)
92 return nullptr; 127 return nullptr;
93 frame_ = new_frame; 128 frame_ = new_frame;
94 IsValidFrame(frame_);
95 return this;
96 } 129 }
97 130
98 NOTREACHED(); 131 IsValidFrame(frame_);
99 return nullptr; 132 return new rtc::RefCountedObject<I420Adapter>(frame_);
100 } 133 }
101 134
102 } // namespace content 135 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webrtc/webrtc_video_frame_adapter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698