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

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: error handling when bits_per_channel == 16 Created 4 years, 5 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 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 return gfx::Size(2, 2); 1036 return gfx::Size(2, 2);
1035 1037
1036 case PIXEL_FORMAT_UNKNOWN: 1038 case PIXEL_FORMAT_UNKNOWN:
1037 case PIXEL_FORMAT_UYVY: 1039 case PIXEL_FORMAT_UYVY:
1038 case PIXEL_FORMAT_YUY2: 1040 case PIXEL_FORMAT_YUY2:
1039 case PIXEL_FORMAT_ARGB: 1041 case PIXEL_FORMAT_ARGB:
1040 case PIXEL_FORMAT_XRGB: 1042 case PIXEL_FORMAT_XRGB:
1041 case PIXEL_FORMAT_RGB24: 1043 case PIXEL_FORMAT_RGB24:
1042 case PIXEL_FORMAT_RGB32: 1044 case PIXEL_FORMAT_RGB32:
1043 case PIXEL_FORMAT_MJPEG: 1045 case PIXEL_FORMAT_MJPEG:
1046 case PIXEL_FORMAT_Y8:
1047 case PIXEL_FORMAT_Y16:
1044 break; 1048 break;
1045 } 1049 }
1046 } 1050 }
1047 NOTREACHED(); 1051 NOTREACHED();
1048 return gfx::Size(); 1052 return gfx::Size();
1049 } 1053 }
1050 1054
1051 // static 1055 // static
1052 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) { 1056 int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) {
1053 DCHECK(IsValidPlane(plane, format)); 1057 DCHECK(IsValidPlane(plane, format));
1054 switch (format) { 1058 switch (format) {
1055 case PIXEL_FORMAT_ARGB: 1059 case PIXEL_FORMAT_ARGB:
1056 case PIXEL_FORMAT_XRGB: 1060 case PIXEL_FORMAT_XRGB:
1057 case PIXEL_FORMAT_RGB32: 1061 case PIXEL_FORMAT_RGB32:
1058 return 4; 1062 return 4;
1059 case PIXEL_FORMAT_RGB24: 1063 case PIXEL_FORMAT_RGB24:
1060 return 3; 1064 return 3;
1065 case PIXEL_FORMAT_Y16:
1061 case PIXEL_FORMAT_UYVY: 1066 case PIXEL_FORMAT_UYVY:
1062 case PIXEL_FORMAT_YUY2: 1067 case PIXEL_FORMAT_YUY2:
1063 case PIXEL_FORMAT_YUV420P9: 1068 case PIXEL_FORMAT_YUV420P9:
1064 case PIXEL_FORMAT_YUV422P9: 1069 case PIXEL_FORMAT_YUV422P9:
1065 case PIXEL_FORMAT_YUV444P9: 1070 case PIXEL_FORMAT_YUV444P9:
1066 case PIXEL_FORMAT_YUV420P10: 1071 case PIXEL_FORMAT_YUV420P10:
1067 case PIXEL_FORMAT_YUV422P10: 1072 case PIXEL_FORMAT_YUV422P10:
1068 case PIXEL_FORMAT_YUV444P10: 1073 case PIXEL_FORMAT_YUV444P10:
1069 return 2; 1074 return 2;
1070 case PIXEL_FORMAT_NV12: 1075 case PIXEL_FORMAT_NV12:
1071 case PIXEL_FORMAT_NV21: 1076 case PIXEL_FORMAT_NV21:
1072 case PIXEL_FORMAT_MT21: { 1077 case PIXEL_FORMAT_MT21: {
1073 static const int bytes_per_element[] = {1, 2}; 1078 static const int bytes_per_element[] = {1, 2};
1074 DCHECK_LT(plane, arraysize(bytes_per_element)); 1079 DCHECK_LT(plane, arraysize(bytes_per_element));
1075 return bytes_per_element[plane]; 1080 return bytes_per_element[plane];
1076 } 1081 }
1077 case PIXEL_FORMAT_YV12: 1082 case PIXEL_FORMAT_YV12:
1078 case PIXEL_FORMAT_I420: 1083 case PIXEL_FORMAT_I420:
1079 case PIXEL_FORMAT_YV16: 1084 case PIXEL_FORMAT_YV16:
1080 case PIXEL_FORMAT_YV12A: 1085 case PIXEL_FORMAT_YV12A:
1081 case PIXEL_FORMAT_YV24: 1086 case PIXEL_FORMAT_YV24:
1087 case PIXEL_FORMAT_Y8:
1082 return 1; 1088 return 1;
1083 case PIXEL_FORMAT_MJPEG: 1089 case PIXEL_FORMAT_MJPEG:
1084 return 0; 1090 return 0;
1085 case PIXEL_FORMAT_UNKNOWN: 1091 case PIXEL_FORMAT_UNKNOWN:
1086 break; 1092 break;
1087 } 1093 }
1088 NOTREACHED(); 1094 NOTREACHED();
1089 return 0; 1095 return 0;
1090 } 1096 }
1091 1097
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 if (zero_initialize_memory) 1136 if (zero_initialize_memory)
1131 memset(data, 0, data_size); 1137 memset(data, 0, data_size);
1132 1138
1133 for (size_t plane = 0; plane < NumPlanes(format_); ++plane) 1139 for (size_t plane = 0; plane < NumPlanes(format_); ++plane)
1134 data_[plane] = data + offset[plane]; 1140 data_[plane] = data + offset[plane];
1135 1141
1136 AddDestructionObserver(base::Bind(&base::AlignedFree, data)); 1142 AddDestructionObserver(base::Bind(&base::AlignedFree, data));
1137 } 1143 }
1138 1144
1139 } // namespace media 1145 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698