OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/base/video_frame.h" | 5 #include "media/base/video_frame.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <climits> | 8 #include <climits> |
9 | 9 |
10 #include "base/atomic_sequence_num.h" | 10 #include "base/atomic_sequence_num.h" |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 natural_size.width() > limits::kMaxDimension || | 118 natural_size.width() > limits::kMaxDimension || |
119 natural_size.height() > limits::kMaxDimension) | 119 natural_size.height() > limits::kMaxDimension) |
120 return false; | 120 return false; |
121 | 121 |
122 // TODO(mcasas): Remove parameter |storage_type| when the opaque storage types | 122 // TODO(mcasas): Remove parameter |storage_type| when the opaque storage types |
123 // comply with the checks below. Right now we skip them. | 123 // comply with the checks below. Right now we skip them. |
124 if (!IsStorageTypeMappable(storage_type)) | 124 if (!IsStorageTypeMappable(storage_type)) |
125 return true; | 125 return true; |
126 | 126 |
127 // Make sure new formats are properly accounted for in the method. | 127 // Make sure new formats are properly accounted for in the method. |
128 static_assert(PIXEL_FORMAT_MAX == 21, | 128 static_assert(PIXEL_FORMAT_MAX == 23, |
129 "Added pixel format, please review IsValidConfig()"); | 129 "Added pixel format, please review IsValidConfig()"); |
130 | 130 |
131 if (format == PIXEL_FORMAT_UNKNOWN) { | 131 if (format == PIXEL_FORMAT_UNKNOWN) { |
132 return coded_size.IsEmpty() && visible_rect.IsEmpty() && | 132 return coded_size.IsEmpty() && visible_rect.IsEmpty() && |
133 natural_size.IsEmpty(); | 133 natural_size.IsEmpty(); |
134 } | 134 } |
135 | 135 |
136 // Check that software-allocated buffer formats are not empty. | 136 // Check that software-allocated buffer formats are not empty. |
137 return !coded_size.IsEmpty() && !visible_rect.IsEmpty() && | 137 return !coded_size.IsEmpty() && !visible_rect.IsEmpty() && |
138 !natural_size.IsEmpty(); | 138 !natural_size.IsEmpty(); |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 // static | 528 // static |
529 size_t VideoFrame::NumPlanes(VideoPixelFormat format) { | 529 size_t VideoFrame::NumPlanes(VideoPixelFormat format) { |
530 switch (format) { | 530 switch (format) { |
531 case PIXEL_FORMAT_UYVY: | 531 case PIXEL_FORMAT_UYVY: |
532 case PIXEL_FORMAT_YUY2: | 532 case PIXEL_FORMAT_YUY2: |
533 case PIXEL_FORMAT_ARGB: | 533 case PIXEL_FORMAT_ARGB: |
534 case PIXEL_FORMAT_XRGB: | 534 case PIXEL_FORMAT_XRGB: |
535 case PIXEL_FORMAT_RGB24: | 535 case PIXEL_FORMAT_RGB24: |
536 case PIXEL_FORMAT_RGB32: | 536 case PIXEL_FORMAT_RGB32: |
537 case PIXEL_FORMAT_MJPEG: | 537 case PIXEL_FORMAT_MJPEG: |
| 538 case PIXEL_FORMAT_Y8: |
| 539 case PIXEL_FORMAT_Y16: |
538 return 1; | 540 return 1; |
539 case PIXEL_FORMAT_NV12: | 541 case PIXEL_FORMAT_NV12: |
540 case PIXEL_FORMAT_NV21: | 542 case PIXEL_FORMAT_NV21: |
541 case PIXEL_FORMAT_MT21: | 543 case PIXEL_FORMAT_MT21: |
542 return 2; | 544 return 2; |
543 case PIXEL_FORMAT_I420: | 545 case PIXEL_FORMAT_I420: |
544 case PIXEL_FORMAT_YV12: | 546 case PIXEL_FORMAT_YV12: |
545 case PIXEL_FORMAT_YV16: | 547 case PIXEL_FORMAT_YV16: |
546 case PIXEL_FORMAT_YV24: | 548 case PIXEL_FORMAT_YV24: |
547 case PIXEL_FORMAT_YUV420P9: | 549 case PIXEL_FORMAT_YUV420P9: |
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1058 return gfx::Size(2, 2); | 1060 return gfx::Size(2, 2); |
1059 | 1061 |
1060 case PIXEL_FORMAT_UNKNOWN: | 1062 case PIXEL_FORMAT_UNKNOWN: |
1061 case PIXEL_FORMAT_UYVY: | 1063 case PIXEL_FORMAT_UYVY: |
1062 case PIXEL_FORMAT_YUY2: | 1064 case PIXEL_FORMAT_YUY2: |
1063 case PIXEL_FORMAT_ARGB: | 1065 case PIXEL_FORMAT_ARGB: |
1064 case PIXEL_FORMAT_XRGB: | 1066 case PIXEL_FORMAT_XRGB: |
1065 case PIXEL_FORMAT_RGB24: | 1067 case PIXEL_FORMAT_RGB24: |
1066 case PIXEL_FORMAT_RGB32: | 1068 case PIXEL_FORMAT_RGB32: |
1067 case PIXEL_FORMAT_MJPEG: | 1069 case PIXEL_FORMAT_MJPEG: |
| 1070 case PIXEL_FORMAT_Y8: |
| 1071 case PIXEL_FORMAT_Y16: |
1068 break; | 1072 break; |
1069 } | 1073 } |
1070 } | 1074 } |
1071 NOTREACHED(); | 1075 NOTREACHED(); |
1072 return gfx::Size(); | 1076 return gfx::Size(); |
1073 } | 1077 } |
1074 | 1078 |
1075 // static | 1079 // static |
1076 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) { | 1080 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) { |
1077 DCHECK(IsValidPlane(plane, format)); | 1081 DCHECK(IsValidPlane(plane, format)); |
1078 switch (format) { | 1082 switch (format) { |
1079 case PIXEL_FORMAT_ARGB: | 1083 case PIXEL_FORMAT_ARGB: |
1080 case PIXEL_FORMAT_XRGB: | 1084 case PIXEL_FORMAT_XRGB: |
1081 case PIXEL_FORMAT_RGB32: | 1085 case PIXEL_FORMAT_RGB32: |
1082 return 4; | 1086 return 4; |
1083 case PIXEL_FORMAT_RGB24: | 1087 case PIXEL_FORMAT_RGB24: |
1084 return 3; | 1088 return 3; |
| 1089 case PIXEL_FORMAT_Y16: |
1085 case PIXEL_FORMAT_UYVY: | 1090 case PIXEL_FORMAT_UYVY: |
1086 case PIXEL_FORMAT_YUY2: | 1091 case PIXEL_FORMAT_YUY2: |
1087 case PIXEL_FORMAT_YUV420P9: | 1092 case PIXEL_FORMAT_YUV420P9: |
1088 case PIXEL_FORMAT_YUV422P9: | 1093 case PIXEL_FORMAT_YUV422P9: |
1089 case PIXEL_FORMAT_YUV444P9: | 1094 case PIXEL_FORMAT_YUV444P9: |
1090 case PIXEL_FORMAT_YUV420P10: | 1095 case PIXEL_FORMAT_YUV420P10: |
1091 case PIXEL_FORMAT_YUV422P10: | 1096 case PIXEL_FORMAT_YUV422P10: |
1092 case PIXEL_FORMAT_YUV444P10: | 1097 case PIXEL_FORMAT_YUV444P10: |
1093 return 2; | 1098 return 2; |
1094 case PIXEL_FORMAT_NV12: | 1099 case PIXEL_FORMAT_NV12: |
1095 case PIXEL_FORMAT_NV21: | 1100 case PIXEL_FORMAT_NV21: |
1096 case PIXEL_FORMAT_MT21: { | 1101 case PIXEL_FORMAT_MT21: { |
1097 static const int bytes_per_element[] = {1, 2}; | 1102 static const int bytes_per_element[] = {1, 2}; |
1098 DCHECK_LT(plane, arraysize(bytes_per_element)); | 1103 DCHECK_LT(plane, arraysize(bytes_per_element)); |
1099 return bytes_per_element[plane]; | 1104 return bytes_per_element[plane]; |
1100 } | 1105 } |
1101 case PIXEL_FORMAT_YV12: | 1106 case PIXEL_FORMAT_YV12: |
1102 case PIXEL_FORMAT_I420: | 1107 case PIXEL_FORMAT_I420: |
1103 case PIXEL_FORMAT_YV16: | 1108 case PIXEL_FORMAT_YV16: |
1104 case PIXEL_FORMAT_YV12A: | 1109 case PIXEL_FORMAT_YV12A: |
1105 case PIXEL_FORMAT_YV24: | 1110 case PIXEL_FORMAT_YV24: |
| 1111 case PIXEL_FORMAT_Y8: |
1106 return 1; | 1112 return 1; |
1107 case PIXEL_FORMAT_MJPEG: | 1113 case PIXEL_FORMAT_MJPEG: |
1108 return 0; | 1114 return 0; |
1109 case PIXEL_FORMAT_UNKNOWN: | 1115 case PIXEL_FORMAT_UNKNOWN: |
1110 break; | 1116 break; |
1111 } | 1117 } |
1112 NOTREACHED(); | 1118 NOTREACHED(); |
1113 return 0; | 1119 return 0; |
1114 } | 1120 } |
1115 | 1121 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 if (zero_initialize_memory) | 1160 if (zero_initialize_memory) |
1155 memset(data, 0, data_size); | 1161 memset(data, 0, data_size); |
1156 | 1162 |
1157 for (size_t plane = 0; plane < NumPlanes(format_); ++plane) | 1163 for (size_t plane = 0; plane < NumPlanes(format_); ++plane) |
1158 data_[plane] = data + offset[plane]; | 1164 data_[plane] = data + offset[plane]; |
1159 | 1165 |
1160 AddDestructionObserver(base::Bind(&base::AlignedFree, data)); | 1166 AddDestructionObserver(base::Bind(&base::AlignedFree, data)); |
1161 } | 1167 } |
1162 | 1168 |
1163 } // namespace media | 1169 } // namespace media |
OLD | NEW |