Index: media/base/video_frame.cc |
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc |
index 41273b8fa2f497e4762c464d954f07df964a1722..f2d11bd2e131acd7bb0b85b003f3d9703ef50ecd 100644 |
--- a/media/base/video_frame.cc |
+++ b/media/base/video_frame.cc |
@@ -92,6 +92,45 @@ static bool AreValidPixelFormatsForWrap(VideoPixelFormat source_format, |
target_format == PIXEL_FORMAT_I420; |
} |
+// If it is required to allocate aligned to multiple-of-two size overall for the |
+// frame of pixel |format|. |
+bool RequiresEvenSizeAllocation(VideoPixelFormat format) { |
+ switch (format) { |
+ case PIXEL_FORMAT_ARGB: |
+ case PIXEL_FORMAT_XRGB: |
+ case PIXEL_FORMAT_RGB24: |
+ case PIXEL_FORMAT_RGB32: |
+ case PIXEL_FORMAT_Y8: |
+ case PIXEL_FORMAT_Y16: |
+ return false; |
+ case PIXEL_FORMAT_NV12: |
+ case PIXEL_FORMAT_NV21: |
+ case PIXEL_FORMAT_MT21: |
+ case PIXEL_FORMAT_I420: |
+ case PIXEL_FORMAT_MJPEG: |
+ case PIXEL_FORMAT_YUY2: |
+ case PIXEL_FORMAT_YV12: |
+ case PIXEL_FORMAT_YV16: |
+ case PIXEL_FORMAT_YV24: |
+ case PIXEL_FORMAT_YUV420P9: |
+ case PIXEL_FORMAT_YUV422P9: |
+ case PIXEL_FORMAT_YUV444P9: |
+ case PIXEL_FORMAT_YUV420P10: |
+ case PIXEL_FORMAT_YUV422P10: |
+ case PIXEL_FORMAT_YUV444P10: |
+ case PIXEL_FORMAT_YUV420P12: |
+ case PIXEL_FORMAT_YUV422P12: |
+ case PIXEL_FORMAT_YUV444P12: |
+ case PIXEL_FORMAT_YV12A: |
+ case PIXEL_FORMAT_UYVY: |
+ return true; |
+ case PIXEL_FORMAT_UNKNOWN: |
+ break; |
+ } |
+ NOTREACHED() << "Unsupported video frame format: " << format; |
+ return false; |
+} |
+ |
// static |
bool VideoFrame::IsValidConfig(VideoPixelFormat format, |
StorageType storage_type, |
@@ -515,7 +554,7 @@ gfx::Size VideoFrame::PlaneSize(VideoPixelFormat format, |
int width = coded_size.width(); |
int height = coded_size.height(); |
- if (format != PIXEL_FORMAT_ARGB) { |
+ if (RequiresEvenSizeAllocation(format)) { |
// Align to multiple-of-two size overall. This ensures that non-subsampled |
// planes can be addressed by pixel with the same scaling as the subsampled |
// planes. |