OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 } | 72 } |
73 | 73 |
74 int WebRtcVideoFrame::width() const { | 74 int WebRtcVideoFrame::width() const { |
75 return video_frame_buffer_ ? video_frame_buffer_->width() : 0; | 75 return video_frame_buffer_ ? video_frame_buffer_->width() : 0; |
76 } | 76 } |
77 | 77 |
78 int WebRtcVideoFrame::height() const { | 78 int WebRtcVideoFrame::height() const { |
79 return video_frame_buffer_ ? video_frame_buffer_->height() : 0; | 79 return video_frame_buffer_ ? video_frame_buffer_->height() : 0; |
80 } | 80 } |
81 | 81 |
82 const uint8_t* WebRtcVideoFrame::GetYPlane() const { | |
83 return video_frame_buffer_ ? video_frame_buffer_->DataY() : nullptr; | |
84 } | |
85 | |
86 const uint8_t* WebRtcVideoFrame::GetUPlane() const { | |
87 return video_frame_buffer_ ? video_frame_buffer_->DataU() : nullptr; | |
88 } | |
89 | |
90 const uint8_t* WebRtcVideoFrame::GetVPlane() const { | |
91 return video_frame_buffer_ ? video_frame_buffer_->DataV() : nullptr; | |
92 } | |
93 | |
94 uint8_t* WebRtcVideoFrame::GetYPlane() { | |
95 return video_frame_buffer_ ? video_frame_buffer_->MutableData(kYPlane) | |
96 : nullptr; | |
97 } | |
98 | |
99 uint8_t* WebRtcVideoFrame::GetUPlane() { | |
100 return video_frame_buffer_ ? video_frame_buffer_->MutableData(kUPlane) | |
101 : nullptr; | |
102 } | |
103 | |
104 uint8_t* WebRtcVideoFrame::GetVPlane() { | |
105 return video_frame_buffer_ ? video_frame_buffer_->MutableData(kVPlane) | |
106 : nullptr; | |
107 } | |
108 | |
109 int32_t WebRtcVideoFrame::GetYPitch() const { | |
110 return video_frame_buffer_ ? video_frame_buffer_->StrideY() : 0; | |
111 } | |
112 | |
113 int32_t WebRtcVideoFrame::GetUPitch() const { | |
114 return video_frame_buffer_ ? video_frame_buffer_->StrideU() : 0; | |
115 } | |
116 | |
117 int32_t WebRtcVideoFrame::GetVPitch() const { | |
118 return video_frame_buffer_ ? video_frame_buffer_->StrideV() : 0; | |
119 } | |
120 | |
121 bool WebRtcVideoFrame::IsExclusive() const { | 82 bool WebRtcVideoFrame::IsExclusive() const { |
122 return video_frame_buffer_->IsMutable(); | 83 return video_frame_buffer_->IsMutable(); |
123 } | 84 } |
124 | 85 |
125 void* WebRtcVideoFrame::GetNativeHandle() const { | 86 void* WebRtcVideoFrame::GetNativeHandle() const { |
126 return video_frame_buffer_ ? video_frame_buffer_->native_handle() : nullptr; | 87 return video_frame_buffer_ ? video_frame_buffer_->native_handle() : nullptr; |
127 } | 88 } |
128 | 89 |
129 rtc::scoped_refptr<webrtc::VideoFrameBuffer> | 90 const rtc::scoped_refptr<webrtc::VideoFrameBuffer>& |
130 WebRtcVideoFrame::video_frame_buffer() const { | 91 WebRtcVideoFrame::video_frame_buffer() const { |
131 return video_frame_buffer_; | 92 return video_frame_buffer_; |
132 } | 93 } |
133 | 94 |
134 VideoFrame* WebRtcVideoFrame::Copy() const { | 95 VideoFrame* WebRtcVideoFrame::Copy() const { |
135 return new WebRtcVideoFrame(video_frame_buffer_, rotation_, timestamp_us_); | 96 return new WebRtcVideoFrame(video_frame_buffer_, rotation_, timestamp_us_); |
136 } | 97 } |
137 | 98 |
138 size_t WebRtcVideoFrame::ConvertToRgbBuffer(uint32_t to_fourcc, | 99 size_t WebRtcVideoFrame::ConvertToRgbBuffer(uint32_t to_fourcc, |
139 uint8_t* buffer, | 100 uint8_t* buffer, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 rotation_ = apply_rotation ? webrtc::kVideoRotation_0 : rotation; | 135 rotation_ = apply_rotation ? webrtc::kVideoRotation_0 : rotation; |
175 | 136 |
176 int horiz_crop = ((w - dw) / 2) & ~1; | 137 int horiz_crop = ((w - dw) / 2) & ~1; |
177 // ARGB on Windows has negative height. | 138 // ARGB on Windows has negative height. |
178 // The sample's layout in memory is normal, so just correct crop. | 139 // The sample's layout in memory is normal, so just correct crop. |
179 int vert_crop = ((abs(h) - dh) / 2) & ~1; | 140 int vert_crop = ((abs(h) - dh) / 2) & ~1; |
180 // Conversion functions expect negative height to flip the image. | 141 // Conversion functions expect negative height to flip the image. |
181 int idh = (h < 0) ? -dh : dh; | 142 int idh = (h < 0) ? -dh : dh; |
182 int r = libyuv::ConvertToI420( | 143 int r = libyuv::ConvertToI420( |
183 sample, sample_size, | 144 sample, sample_size, |
184 GetYPlane(), GetYPitch(), | 145 video_frame_buffer_->MutableDataY(), |
185 GetUPlane(), GetUPitch(), | 146 video_frame_buffer_->StrideY(), |
186 GetVPlane(), GetVPitch(), | 147 video_frame_buffer_->MutableDataU(), |
| 148 video_frame_buffer_->StrideU(), |
| 149 video_frame_buffer_->MutableDataV(), |
| 150 video_frame_buffer_->StrideV(), |
187 horiz_crop, vert_crop, | 151 horiz_crop, vert_crop, |
188 w, h, | 152 w, h, |
189 dw, idh, | 153 dw, idh, |
190 static_cast<libyuv::RotationMode>( | 154 static_cast<libyuv::RotationMode>( |
191 apply_rotation ? rotation : webrtc::kVideoRotation_0), | 155 apply_rotation ? rotation : webrtc::kVideoRotation_0), |
192 format); | 156 format); |
193 if (r) { | 157 if (r) { |
194 LOG(LS_ERROR) << "Error parsing format: " << GetFourccName(format) | 158 LOG(LS_ERROR) << "Error parsing format: " << GetFourccName(format) |
195 << " return code : " << r; | 159 << " return code : " << r; |
196 return false; | 160 return false; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 rotated_width = orig_height; | 209 rotated_width = orig_height; |
246 rotated_height = orig_width; | 210 rotated_height = orig_width; |
247 } | 211 } |
248 | 212 |
249 rotated_frame_.reset( | 213 rotated_frame_.reset( |
250 CreateEmptyFrame(rotated_width, rotated_height, timestamp_us_)); | 214 CreateEmptyFrame(rotated_width, rotated_height, timestamp_us_)); |
251 | 215 |
252 // TODO(guoweis): Add a function in webrtc_libyuv.cc to convert from | 216 // TODO(guoweis): Add a function in webrtc_libyuv.cc to convert from |
253 // VideoRotation to libyuv::RotationMode. | 217 // VideoRotation to libyuv::RotationMode. |
254 int ret = libyuv::I420Rotate( | 218 int ret = libyuv::I420Rotate( |
255 GetYPlane(), GetYPitch(), GetUPlane(), GetUPitch(), GetVPlane(), | 219 video_frame_buffer_->DataY(), video_frame_buffer_->StrideY(), |
256 GetVPitch(), rotated_frame_->GetYPlane(), rotated_frame_->GetYPitch(), | 220 video_frame_buffer_->DataU(), video_frame_buffer_->StrideU(), |
257 rotated_frame_->GetUPlane(), rotated_frame_->GetUPitch(), | 221 video_frame_buffer_->DataV(), video_frame_buffer_->StrideV(), |
258 rotated_frame_->GetVPlane(), rotated_frame_->GetVPitch(), | 222 rotated_frame_->video_frame_buffer()->MutableDataY(), |
| 223 rotated_frame_->video_frame_buffer()->StrideY(), |
| 224 rotated_frame_->video_frame_buffer()->MutableDataU(), |
| 225 rotated_frame_->video_frame_buffer()->StrideU(), |
| 226 rotated_frame_->video_frame_buffer()->MutableDataV(), |
| 227 rotated_frame_->video_frame_buffer()->StrideV(), |
259 orig_width, orig_height, | 228 orig_width, orig_height, |
260 static_cast<libyuv::RotationMode>(rotation())); | 229 static_cast<libyuv::RotationMode>(rotation())); |
261 if (ret == 0) { | 230 if (ret == 0) { |
262 return rotated_frame_.get(); | 231 return rotated_frame_.get(); |
263 } | 232 } |
264 return nullptr; | 233 return nullptr; |
265 } | 234 } |
266 | 235 |
267 } // namespace cricket | 236 } // namespace cricket |
OLD | NEW |