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

Side by Side Diff: media/base/video_frame.cc

Issue 2113243003: media: Introduce Y8 and Y16 video pixel format (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: improve comments Created 4 years, 3 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
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698