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 |
11 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" | 11 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" |
12 | 12 |
13 #include <assert.h> | |
14 #include <string.h> | 13 #include <string.h> |
15 | 14 |
| 15 #include "webrtc/base/checks.h" |
| 16 |
16 // NOTE(ajm): Path provided by gyp. | 17 // NOTE(ajm): Path provided by gyp. |
17 #include "libyuv.h" // NOLINT | 18 #include "libyuv.h" // NOLINT |
18 | 19 |
19 namespace webrtc { | 20 namespace webrtc { |
20 | 21 |
21 VideoType RawVideoTypeToCommonVideoVideoType(RawVideoType type) { | 22 VideoType RawVideoTypeToCommonVideoVideoType(RawVideoType type) { |
22 switch (type) { | 23 switch (type) { |
23 case kVideoI420: | 24 case kVideoI420: |
24 return kI420; | 25 return kI420; |
25 case kVideoIYUV: | 26 case kVideoIYUV: |
(...skipping 16 matching lines...) Expand all Loading... |
42 return kUYVY; | 43 return kUYVY; |
43 case kVideoNV21: | 44 case kVideoNV21: |
44 return kNV21; | 45 return kNV21; |
45 case kVideoNV12: | 46 case kVideoNV12: |
46 return kNV12; | 47 return kNV12; |
47 case kVideoBGRA: | 48 case kVideoBGRA: |
48 return kBGRA; | 49 return kBGRA; |
49 case kVideoMJPEG: | 50 case kVideoMJPEG: |
50 return kMJPG; | 51 return kMJPG; |
51 default: | 52 default: |
52 assert(false); | 53 RTC_NOTREACHED(); |
53 } | 54 } |
54 return kUnknown; | 55 return kUnknown; |
55 } | 56 } |
56 | 57 |
57 size_t CalcBufferSize(VideoType type, int width, int height) { | 58 size_t CalcBufferSize(VideoType type, int width, int height) { |
58 assert(width >= 0); | 59 RTC_DCHECK_GE(width, 0); |
59 assert(height >= 0); | 60 RTC_DCHECK_GE(height, 0); |
60 size_t buffer_size = 0; | 61 size_t buffer_size = 0; |
61 switch (type) { | 62 switch (type) { |
62 case kI420: | 63 case kI420: |
63 case kNV12: | 64 case kNV12: |
64 case kNV21: | 65 case kNV21: |
65 case kIYUV: | 66 case kIYUV: |
66 case kYV12: { | 67 case kYV12: { |
67 int half_width = (width + 1) >> 1; | 68 int half_width = (width + 1) >> 1; |
68 int half_height = (height + 1) >> 1; | 69 int half_height = (height + 1) >> 1; |
69 buffer_size = width * height + half_width * half_height * 2; | 70 buffer_size = width * height + half_width * half_height * 2; |
70 break; | 71 break; |
71 } | 72 } |
72 case kARGB4444: | 73 case kARGB4444: |
73 case kRGB565: | 74 case kRGB565: |
74 case kARGB1555: | 75 case kARGB1555: |
75 case kYUY2: | 76 case kYUY2: |
76 case kUYVY: | 77 case kUYVY: |
77 buffer_size = width * height * 2; | 78 buffer_size = width * height * 2; |
78 break; | 79 break; |
79 case kRGB24: | 80 case kRGB24: |
80 buffer_size = width * height * 3; | 81 buffer_size = width * height * 3; |
81 break; | 82 break; |
82 case kBGRA: | 83 case kBGRA: |
83 case kARGB: | 84 case kARGB: |
84 buffer_size = width * height * 4; | 85 buffer_size = width * height * 4; |
85 break; | 86 break; |
86 default: | 87 default: |
87 assert(false); | 88 RTC_NOTREACHED(); |
88 break; | 89 break; |
89 } | 90 } |
90 return buffer_size; | 91 return buffer_size; |
91 } | 92 } |
92 | 93 |
93 static int PrintPlane(const uint8_t* buf, | 94 static int PrintPlane(const uint8_t* buf, |
94 int width, | 95 int width, |
95 int height, | 96 int height, |
96 int stride, | 97 int stride, |
97 FILE* file) { | 98 FILE* file) { |
(...skipping 30 matching lines...) Expand all Loading... |
128 | 129 |
129 int PrintVideoFrame(const VideoFrame& frame, FILE* file) { | 130 int PrintVideoFrame(const VideoFrame& frame, FILE* file) { |
130 if (frame.IsZeroSize()) | 131 if (frame.IsZeroSize()) |
131 return -1; | 132 return -1; |
132 return PrintVideoFrame(*frame.video_frame_buffer(), file); | 133 return PrintVideoFrame(*frame.video_frame_buffer(), file); |
133 } | 134 } |
134 | 135 |
135 int ExtractBuffer(const rtc::scoped_refptr<VideoFrameBuffer>& input_frame, | 136 int ExtractBuffer(const rtc::scoped_refptr<VideoFrameBuffer>& input_frame, |
136 size_t size, | 137 size_t size, |
137 uint8_t* buffer) { | 138 uint8_t* buffer) { |
138 assert(buffer); | 139 RTC_DCHECK(buffer); |
139 if (!input_frame) | 140 if (!input_frame) |
140 return -1; | 141 return -1; |
141 int width = input_frame->width(); | 142 int width = input_frame->width(); |
142 int height = input_frame->height(); | 143 int height = input_frame->height(); |
143 size_t length = CalcBufferSize(kI420, width, height); | 144 size_t length = CalcBufferSize(kI420, width, height); |
144 if (size < length) { | 145 if (size < length) { |
145 return -1; | 146 return -1; |
146 } | 147 } |
147 | 148 |
148 int chroma_width = (width + 1) / 2; | 149 int chroma_width = (width + 1) / 2; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 switch (rotation) { | 194 switch (rotation) { |
194 case kVideoRotation_0: | 195 case kVideoRotation_0: |
195 return libyuv::kRotate0; | 196 return libyuv::kRotate0; |
196 case kVideoRotation_90: | 197 case kVideoRotation_90: |
197 return libyuv::kRotate90; | 198 return libyuv::kRotate90; |
198 case kVideoRotation_180: | 199 case kVideoRotation_180: |
199 return libyuv::kRotate180; | 200 return libyuv::kRotate180; |
200 case kVideoRotation_270: | 201 case kVideoRotation_270: |
201 return libyuv::kRotate270; | 202 return libyuv::kRotate270; |
202 } | 203 } |
203 assert(false); | 204 RTC_NOTREACHED(); |
204 return libyuv::kRotate0; | 205 return libyuv::kRotate0; |
205 } | 206 } |
206 | 207 |
207 int ConvertVideoType(VideoType video_type) { | 208 int ConvertVideoType(VideoType video_type) { |
208 switch (video_type) { | 209 switch (video_type) { |
209 case kUnknown: | 210 case kUnknown: |
210 return libyuv::FOURCC_ANY; | 211 return libyuv::FOURCC_ANY; |
211 case kI420: | 212 case kI420: |
212 return libyuv::FOURCC_I420; | 213 return libyuv::FOURCC_I420; |
213 case kIYUV: // same as KYV12 | 214 case kIYUV: // same as KYV12 |
(...skipping 17 matching lines...) Expand all Loading... |
231 return libyuv::FOURCC_NV12; | 232 return libyuv::FOURCC_NV12; |
232 case kARGB: | 233 case kARGB: |
233 return libyuv::FOURCC_ARGB; | 234 return libyuv::FOURCC_ARGB; |
234 case kBGRA: | 235 case kBGRA: |
235 return libyuv::FOURCC_BGRA; | 236 return libyuv::FOURCC_BGRA; |
236 case kARGB4444: | 237 case kARGB4444: |
237 return libyuv::FOURCC_R444; | 238 return libyuv::FOURCC_R444; |
238 case kARGB1555: | 239 case kARGB1555: |
239 return libyuv::FOURCC_RGBO; | 240 return libyuv::FOURCC_RGBO; |
240 } | 241 } |
241 assert(false); | 242 RTC_NOTREACHED(); |
242 return libyuv::FOURCC_ANY; | 243 return libyuv::FOURCC_ANY; |
243 } | 244 } |
244 | 245 |
245 // TODO(nisse): Delete this wrapper, let callers use libyuv directly. | 246 // TODO(nisse): Delete this wrapper, let callers use libyuv directly. |
246 int ConvertToI420(VideoType src_video_type, | 247 int ConvertToI420(VideoType src_video_type, |
247 const uint8_t* src_frame, | 248 const uint8_t* src_frame, |
248 int crop_x, | 249 int crop_x, |
249 int crop_y, | 250 int crop_y, |
250 int src_width, | 251 int src_width, |
251 int src_height, | 252 int src_height, |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 src_v, src_uv_width, | 442 src_v, src_uv_width, |
442 src_width, src_height, | 443 src_width, src_height, |
443 dst_y, dst_stride_y, | 444 dst_y, dst_stride_y, |
444 dst_u, dst_stride_u, | 445 dst_u, dst_stride_u, |
445 dst_v, dst_stride_v, | 446 dst_v, dst_stride_v, |
446 dst_width, dst_height, | 447 dst_width, dst_height, |
447 libyuv::kFilterBox); | 448 libyuv::kFilterBox); |
448 } | 449 } |
449 | 450 |
450 } // namespace webrtc | 451 } // namespace webrtc |
OLD | NEW |