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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 natural_size.width() > limits::kMaxDimension || | 114 natural_size.width() > limits::kMaxDimension || |
115 natural_size.height() > limits::kMaxDimension) | 115 natural_size.height() > limits::kMaxDimension) |
116 return false; | 116 return false; |
117 | 117 |
118 // TODO(mcasas): Remove parameter |storage_type| when the opaque storage types | 118 // TODO(mcasas): Remove parameter |storage_type| when the opaque storage types |
119 // comply with the checks below. Right now we skip them. | 119 // comply with the checks below. Right now we skip them. |
120 if (!IsStorageTypeMappable(storage_type)) | 120 if (!IsStorageTypeMappable(storage_type)) |
121 return true; | 121 return true; |
122 | 122 |
123 // Make sure new formats are properly accounted for in the method. | 123 // Make sure new formats are properly accounted for in the method. |
124 static_assert(PIXEL_FORMAT_MAX == 21, | 124 static_assert(PIXEL_FORMAT_MAX == 23, |
125 "Added pixel format, please review IsValidConfig()"); | 125 "Added pixel format, please review IsValidConfig()"); |
126 | 126 |
127 if (format == PIXEL_FORMAT_UNKNOWN) { | 127 if (format == PIXEL_FORMAT_UNKNOWN) { |
128 return coded_size.IsEmpty() && visible_rect.IsEmpty() && | 128 return coded_size.IsEmpty() && visible_rect.IsEmpty() && |
129 natural_size.IsEmpty(); | 129 natural_size.IsEmpty(); |
130 } | 130 } |
131 | 131 |
132 // Check that software-allocated buffer formats are not empty. | 132 // Check that software-allocated buffer formats are not empty. |
133 return !coded_size.IsEmpty() && !visible_rect.IsEmpty() && | 133 return !coded_size.IsEmpty() && !visible_rect.IsEmpty() && |
134 !natural_size.IsEmpty(); | 134 !natural_size.IsEmpty(); |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 // static | 502 // static |
503 size_t VideoFrame::NumPlanes(VideoPixelFormat format) { | 503 size_t VideoFrame::NumPlanes(VideoPixelFormat format) { |
504 switch (format) { | 504 switch (format) { |
505 case PIXEL_FORMAT_UYVY: | 505 case PIXEL_FORMAT_UYVY: |
506 case PIXEL_FORMAT_YUY2: | 506 case PIXEL_FORMAT_YUY2: |
507 case PIXEL_FORMAT_ARGB: | 507 case PIXEL_FORMAT_ARGB: |
508 case PIXEL_FORMAT_XRGB: | 508 case PIXEL_FORMAT_XRGB: |
509 case PIXEL_FORMAT_RGB24: | 509 case PIXEL_FORMAT_RGB24: |
510 case PIXEL_FORMAT_RGB32: | 510 case PIXEL_FORMAT_RGB32: |
511 case PIXEL_FORMAT_MJPEG: | 511 case PIXEL_FORMAT_MJPEG: |
| 512 case PIXEL_FORMAT_Y8: |
| 513 case PIXEL_FORMAT_Y16: |
512 return 1; | 514 return 1; |
513 case PIXEL_FORMAT_NV12: | 515 case PIXEL_FORMAT_NV12: |
514 case PIXEL_FORMAT_NV21: | 516 case PIXEL_FORMAT_NV21: |
515 case PIXEL_FORMAT_MT21: | 517 case PIXEL_FORMAT_MT21: |
516 return 2; | 518 return 2; |
517 case PIXEL_FORMAT_I420: | 519 case PIXEL_FORMAT_I420: |
518 case PIXEL_FORMAT_YV12: | 520 case PIXEL_FORMAT_YV12: |
519 case PIXEL_FORMAT_YV16: | 521 case PIXEL_FORMAT_YV16: |
520 case PIXEL_FORMAT_YV24: | 522 case PIXEL_FORMAT_YV24: |
521 case PIXEL_FORMAT_YUV420P9: | 523 case PIXEL_FORMAT_YUV420P9: |
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1032 return gfx::Size(2, 2); | 1034 return gfx::Size(2, 2); |
1033 | 1035 |
1034 case PIXEL_FORMAT_UNKNOWN: | 1036 case PIXEL_FORMAT_UNKNOWN: |
1035 case PIXEL_FORMAT_UYVY: | 1037 case PIXEL_FORMAT_UYVY: |
1036 case PIXEL_FORMAT_YUY2: | 1038 case PIXEL_FORMAT_YUY2: |
1037 case PIXEL_FORMAT_ARGB: | 1039 case PIXEL_FORMAT_ARGB: |
1038 case PIXEL_FORMAT_XRGB: | 1040 case PIXEL_FORMAT_XRGB: |
1039 case PIXEL_FORMAT_RGB24: | 1041 case PIXEL_FORMAT_RGB24: |
1040 case PIXEL_FORMAT_RGB32: | 1042 case PIXEL_FORMAT_RGB32: |
1041 case PIXEL_FORMAT_MJPEG: | 1043 case PIXEL_FORMAT_MJPEG: |
| 1044 case PIXEL_FORMAT_Y8: |
| 1045 case PIXEL_FORMAT_Y16: |
1042 break; | 1046 break; |
1043 } | 1047 } |
1044 } | 1048 } |
1045 NOTREACHED(); | 1049 NOTREACHED(); |
1046 return gfx::Size(); | 1050 return gfx::Size(); |
1047 } | 1051 } |
1048 | 1052 |
1049 // static | 1053 // static |
1050 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) { | 1054 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) { |
1051 DCHECK(IsValidPlane(plane, format)); | 1055 DCHECK(IsValidPlane(plane, format)); |
1052 switch (format) { | 1056 switch (format) { |
1053 case PIXEL_FORMAT_ARGB: | 1057 case PIXEL_FORMAT_ARGB: |
1054 case PIXEL_FORMAT_XRGB: | 1058 case PIXEL_FORMAT_XRGB: |
1055 case PIXEL_FORMAT_RGB32: | 1059 case PIXEL_FORMAT_RGB32: |
1056 return 4; | 1060 return 4; |
1057 case PIXEL_FORMAT_RGB24: | 1061 case PIXEL_FORMAT_RGB24: |
1058 return 3; | 1062 return 3; |
| 1063 case PIXEL_FORMAT_Y16: |
1059 case PIXEL_FORMAT_UYVY: | 1064 case PIXEL_FORMAT_UYVY: |
1060 case PIXEL_FORMAT_YUY2: | 1065 case PIXEL_FORMAT_YUY2: |
1061 case PIXEL_FORMAT_YUV420P9: | 1066 case PIXEL_FORMAT_YUV420P9: |
1062 case PIXEL_FORMAT_YUV422P9: | 1067 case PIXEL_FORMAT_YUV422P9: |
1063 case PIXEL_FORMAT_YUV444P9: | 1068 case PIXEL_FORMAT_YUV444P9: |
1064 case PIXEL_FORMAT_YUV420P10: | 1069 case PIXEL_FORMAT_YUV420P10: |
1065 case PIXEL_FORMAT_YUV422P10: | 1070 case PIXEL_FORMAT_YUV422P10: |
1066 case PIXEL_FORMAT_YUV444P10: | 1071 case PIXEL_FORMAT_YUV444P10: |
1067 return 2; | 1072 return 2; |
1068 case PIXEL_FORMAT_NV12: | 1073 case PIXEL_FORMAT_NV12: |
1069 case PIXEL_FORMAT_NV21: | 1074 case PIXEL_FORMAT_NV21: |
1070 case PIXEL_FORMAT_MT21: { | 1075 case PIXEL_FORMAT_MT21: { |
1071 static const int bytes_per_element[] = {1, 2}; | 1076 static const int bytes_per_element[] = {1, 2}; |
1072 DCHECK_LT(plane, arraysize(bytes_per_element)); | 1077 DCHECK_LT(plane, arraysize(bytes_per_element)); |
1073 return bytes_per_element[plane]; | 1078 return bytes_per_element[plane]; |
1074 } | 1079 } |
1075 case PIXEL_FORMAT_YV12: | 1080 case PIXEL_FORMAT_YV12: |
1076 case PIXEL_FORMAT_I420: | 1081 case PIXEL_FORMAT_I420: |
1077 case PIXEL_FORMAT_YV16: | 1082 case PIXEL_FORMAT_YV16: |
1078 case PIXEL_FORMAT_YV12A: | 1083 case PIXEL_FORMAT_YV12A: |
1079 case PIXEL_FORMAT_YV24: | 1084 case PIXEL_FORMAT_YV24: |
| 1085 case PIXEL_FORMAT_Y8: |
1080 return 1; | 1086 return 1; |
1081 case PIXEL_FORMAT_MJPEG: | 1087 case PIXEL_FORMAT_MJPEG: |
1082 return 0; | 1088 return 0; |
1083 case PIXEL_FORMAT_UNKNOWN: | 1089 case PIXEL_FORMAT_UNKNOWN: |
1084 break; | 1090 break; |
1085 } | 1091 } |
1086 NOTREACHED(); | 1092 NOTREACHED(); |
1087 return 0; | 1093 return 0; |
1088 } | 1094 } |
1089 | 1095 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1128 if (zero_initialize_memory) | 1134 if (zero_initialize_memory) |
1129 memset(data, 0, data_size); | 1135 memset(data, 0, data_size); |
1130 | 1136 |
1131 for (size_t plane = 0; plane < NumPlanes(format_); ++plane) | 1137 for (size_t plane = 0; plane < NumPlanes(format_); ++plane) |
1132 data_[plane] = data + offset[plane]; | 1138 data_[plane] = data + offset[plane]; |
1133 | 1139 |
1134 AddDestructionObserver(base::Bind(&base::AlignedFree, data)); | 1140 AddDestructionObserver(base::Bind(&base::AlignedFree, data)); |
1135 } | 1141 } |
1136 | 1142 |
1137 } // namespace media | 1143 } // namespace media |
OLD | NEW |