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

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: rebase to land Created 4 years, 2 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
« no previous file with comments | « cc/resources/video_resource_updater.cc ('k') | media/base/video_types.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 == 24, 124 static_assert(PIXEL_FORMAT_MAX == 26,
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
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 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 return gfx::Size(2, 2); 1040 return gfx::Size(2, 2);
1039 1041
1040 case PIXEL_FORMAT_UNKNOWN: 1042 case PIXEL_FORMAT_UNKNOWN:
1041 case PIXEL_FORMAT_UYVY: 1043 case PIXEL_FORMAT_UYVY:
1042 case PIXEL_FORMAT_YUY2: 1044 case PIXEL_FORMAT_YUY2:
1043 case PIXEL_FORMAT_ARGB: 1045 case PIXEL_FORMAT_ARGB:
1044 case PIXEL_FORMAT_XRGB: 1046 case PIXEL_FORMAT_XRGB:
1045 case PIXEL_FORMAT_RGB24: 1047 case PIXEL_FORMAT_RGB24:
1046 case PIXEL_FORMAT_RGB32: 1048 case PIXEL_FORMAT_RGB32:
1047 case PIXEL_FORMAT_MJPEG: 1049 case PIXEL_FORMAT_MJPEG:
1050 case PIXEL_FORMAT_Y8:
1051 case PIXEL_FORMAT_Y16:
1048 break; 1052 break;
1049 } 1053 }
1050 } 1054 }
1051 NOTREACHED(); 1055 NOTREACHED();
1052 return gfx::Size(); 1056 return gfx::Size();
1053 } 1057 }
1054 1058
1055 // static 1059 // static
1056 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) { 1060 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) {
1057 DCHECK(IsValidPlane(plane, format)); 1061 DCHECK(IsValidPlane(plane, format));
1058 switch (format) { 1062 switch (format) {
1059 case PIXEL_FORMAT_ARGB: 1063 case PIXEL_FORMAT_ARGB:
1060 case PIXEL_FORMAT_XRGB: 1064 case PIXEL_FORMAT_XRGB:
1061 case PIXEL_FORMAT_RGB32: 1065 case PIXEL_FORMAT_RGB32:
1062 return 4; 1066 return 4;
1063 case PIXEL_FORMAT_RGB24: 1067 case PIXEL_FORMAT_RGB24:
1064 return 3; 1068 return 3;
1069 case PIXEL_FORMAT_Y16:
1065 case PIXEL_FORMAT_UYVY: 1070 case PIXEL_FORMAT_UYVY:
1066 case PIXEL_FORMAT_YUY2: 1071 case PIXEL_FORMAT_YUY2:
1067 case PIXEL_FORMAT_YUV420P9: 1072 case PIXEL_FORMAT_YUV420P9:
1068 case PIXEL_FORMAT_YUV422P9: 1073 case PIXEL_FORMAT_YUV422P9:
1069 case PIXEL_FORMAT_YUV444P9: 1074 case PIXEL_FORMAT_YUV444P9:
1070 case PIXEL_FORMAT_YUV420P10: 1075 case PIXEL_FORMAT_YUV420P10:
1071 case PIXEL_FORMAT_YUV422P10: 1076 case PIXEL_FORMAT_YUV422P10:
1072 case PIXEL_FORMAT_YUV444P10: 1077 case PIXEL_FORMAT_YUV444P10:
1073 case PIXEL_FORMAT_YUV420P12: 1078 case PIXEL_FORMAT_YUV420P12:
1074 case PIXEL_FORMAT_YUV422P12: 1079 case PIXEL_FORMAT_YUV422P12:
1075 case PIXEL_FORMAT_YUV444P12: 1080 case PIXEL_FORMAT_YUV444P12:
1076 return 2; 1081 return 2;
1077 case PIXEL_FORMAT_NV12: 1082 case PIXEL_FORMAT_NV12:
1078 case PIXEL_FORMAT_NV21: 1083 case PIXEL_FORMAT_NV21:
1079 case PIXEL_FORMAT_MT21: { 1084 case PIXEL_FORMAT_MT21: {
1080 static const int bytes_per_element[] = {1, 2}; 1085 static const int bytes_per_element[] = {1, 2};
1081 DCHECK_LT(plane, arraysize(bytes_per_element)); 1086 DCHECK_LT(plane, arraysize(bytes_per_element));
1082 return bytes_per_element[plane]; 1087 return bytes_per_element[plane];
1083 } 1088 }
1084 case PIXEL_FORMAT_YV12: 1089 case PIXEL_FORMAT_YV12:
1085 case PIXEL_FORMAT_I420: 1090 case PIXEL_FORMAT_I420:
1086 case PIXEL_FORMAT_YV16: 1091 case PIXEL_FORMAT_YV16:
1087 case PIXEL_FORMAT_YV12A: 1092 case PIXEL_FORMAT_YV12A:
1088 case PIXEL_FORMAT_YV24: 1093 case PIXEL_FORMAT_YV24:
1094 case PIXEL_FORMAT_Y8:
1089 return 1; 1095 return 1;
1090 case PIXEL_FORMAT_MJPEG: 1096 case PIXEL_FORMAT_MJPEG:
1091 return 0; 1097 return 0;
1092 case PIXEL_FORMAT_UNKNOWN: 1098 case PIXEL_FORMAT_UNKNOWN:
1093 break; 1099 break;
1094 } 1100 }
1095 NOTREACHED(); 1101 NOTREACHED();
1096 return 0; 1102 return 0;
1097 } 1103 }
1098 1104
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1137 if (zero_initialize_memory) 1143 if (zero_initialize_memory)
1138 memset(data, 0, data_size); 1144 memset(data, 0, data_size);
1139 1145
1140 for (size_t plane = 0; plane < NumPlanes(format_); ++plane) 1146 for (size_t plane = 0; plane < NumPlanes(format_); ++plane)
1141 data_[plane] = data + offset[plane]; 1147 data_[plane] = data + offset[plane];
1142 1148
1143 AddDestructionObserver(base::Bind(&base::AlignedFree, data)); 1149 AddDestructionObserver(base::Bind(&base::AlignedFree, data));
1144 } 1150 }
1145 1151
1146 } // namespace media 1152 } // namespace media
OLDNEW
« no previous file with comments | « cc/resources/video_resource_updater.cc ('k') | media/base/video_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698