| Index: media/base/video_frame.cc
|
| diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc
|
| index 2de6bd36d5cdffb60956aa515a3824671db29b7d..6a5c305916dc90473607e6974bde1ecca3698c7d 100644
|
| --- a/media/base/video_frame.cc
|
| +++ b/media/base/video_frame.cc
|
| @@ -125,7 +125,7 @@ bool VideoFrame::IsValidConfig(VideoPixelFormat format,
|
| return true;
|
|
|
| // Make sure new formats are properly accounted for in the method.
|
| - static_assert(PIXEL_FORMAT_MAX == 21,
|
| + static_assert(PIXEL_FORMAT_MAX == 23,
|
| "Added pixel format, please review IsValidConfig()");
|
|
|
| if (format == PIXEL_FORMAT_UNKNOWN) {
|
| @@ -535,6 +535,8 @@ size_t VideoFrame::NumPlanes(VideoPixelFormat format) {
|
| case PIXEL_FORMAT_RGB24:
|
| case PIXEL_FORMAT_RGB32:
|
| case PIXEL_FORMAT_MJPEG:
|
| + case PIXEL_FORMAT_Y8:
|
| + case PIXEL_FORMAT_Y16:
|
| return 1;
|
| case PIXEL_FORMAT_NV12:
|
| case PIXEL_FORMAT_NV21:
|
| @@ -815,8 +817,10 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalStorage(
|
|
|
| // TODO(miu): This function should support any pixel format.
|
| // http://crbug.com/555909
|
| - if (format != PIXEL_FORMAT_I420) {
|
| - LOG(DFATAL) << "Only PIXEL_FORMAT_I420 format supported: "
|
| + if (format != PIXEL_FORMAT_I420 && format != PIXEL_FORMAT_Y8 &&
|
| + format != PIXEL_FORMAT_Y16) {
|
| + LOG(DFATAL) << "Only PIXEL_FORMAT_I420, PIXEL_FORMAT_Y8 and "
|
| + "PIXEL_FORMAT_Y16 formats are supported: "
|
| << VideoPixelFormatToString(format);
|
| return nullptr;
|
| }
|
| @@ -837,6 +841,15 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalStorage(
|
| frame = new VideoFrame(format, storage_type, coded_size, visible_rect,
|
| natural_size, timestamp);
|
| }
|
| + if (format == PIXEL_FORMAT_Y8 || format == PIXEL_FORMAT_Y16) {
|
| + // TODO(astojilj) Make this code generic for all and move format specifics
|
| + // to static methods.
|
| + DCHECK_EQ(NumPlanes(format), 1);
|
| + const size_t i = 0;
|
| + frame->strides_[i] = coded_size.width() * BytesPerElement(format, i);
|
| + frame->data_[i] = data;
|
| + return frame;
|
| + }
|
| frame->strides_[kYPlane] = coded_size.width();
|
| // TODO(miu): This always rounds widths down, whereas VideoFrame::RowBytes()
|
| // always rounds up. This inconsistency must be resolved. Perhaps a
|
| @@ -1016,6 +1029,7 @@ gfx::Size VideoFrame::SampleSize(VideoPixelFormat format, size_t plane) {
|
| case PIXEL_FORMAT_YV24:
|
| case PIXEL_FORMAT_YUV444P9:
|
| case PIXEL_FORMAT_YUV444P10:
|
| + case PIXEL_FORMAT_Y8:
|
| return gfx::Size(1, 1);
|
|
|
| case PIXEL_FORMAT_YV16:
|
| @@ -1066,6 +1080,7 @@ int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) {
|
| case PIXEL_FORMAT_YUV420P10:
|
| case PIXEL_FORMAT_YUV422P10:
|
| case PIXEL_FORMAT_YUV444P10:
|
| + case PIXEL_FORMAT_Y16:
|
| return 2;
|
| case PIXEL_FORMAT_NV12:
|
| case PIXEL_FORMAT_NV21:
|
| @@ -1079,6 +1094,7 @@ int VideoFrame::BytesPerElement(VideoPixelFormat format, size_t plane) {
|
| case PIXEL_FORMAT_YV16:
|
| case PIXEL_FORMAT_YV12A:
|
| case PIXEL_FORMAT_YV24:
|
| + case PIXEL_FORMAT_Y8:
|
| return 1;
|
| case PIXEL_FORMAT_MJPEG:
|
| return 0;
|
|
|