| Index: media/base/video_frame.cc
|
| diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc
|
| index 62b347dca3f953bff4e5184d3b21de374f0ec6c2..5ce090990aad673bf0d9fdbacad9e149ed8376ff 100644
|
| --- a/media/base/video_frame.cc
|
| +++ b/media/base/video_frame.cc
|
| @@ -166,7 +166,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapNativeTextures(
|
| base::TimeDelta timestamp) {
|
| if (format != PIXEL_FORMAT_ARGB && format != PIXEL_FORMAT_XRGB &&
|
| format != PIXEL_FORMAT_UYVY && format != PIXEL_FORMAT_NV12 &&
|
| - format != PIXEL_FORMAT_I420) {
|
| + format != PIXEL_FORMAT_I420 && format != PIXEL_FORMAT_Y16) {
|
| LOG(DFATAL) << "Unsupported pixel format supported, got "
|
| << VideoPixelFormatToString(format);
|
| return nullptr;
|
| @@ -214,6 +214,31 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalSharedMemory(
|
| }
|
|
|
| // static
|
| +scoped_refptr<VideoFrame> VideoFrame::WrapExternalGpuMemoryBuffer(
|
| + VideoPixelFormat format,
|
| + const gfx::Size& coded_size,
|
| + const gfx::Rect& visible_rect,
|
| + const gfx::Size& natural_size,
|
| + uint8_t* data,
|
| + const gfx::GpuMemoryBufferHandle& handle,
|
| + base::TimeDelta timestamp) {
|
| + const StorageType storage = STORAGE_GPU_MEMORY_BUFFERS;
|
| + if (!IsValidConfig(format, storage, coded_size, visible_rect, natural_size)) {
|
| + LOG(DFATAL) << __func__ << " Invalid config."
|
| + << ConfigToString(format, storage, coded_size, visible_rect,
|
| + natural_size);
|
| + return nullptr;
|
| + }
|
| +
|
| + scoped_refptr<VideoFrame> frame(new VideoFrame(
|
| + format, storage, coded_size, visible_rect, natural_size, timestamp));
|
| + frame->strides_[0] = coded_size.width() * BytesPerElement(format, 0);
|
| + frame->data_[0] = data;
|
| + frame->gpu_memory_buffer_handles_.push_back(handle);
|
| + return frame;
|
| +}
|
| +
|
| +// static
|
| scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvData(
|
| VideoPixelFormat format,
|
| const gfx::Size& coded_size,
|
| @@ -623,6 +648,24 @@ void VideoFrame::HashFrameForTesting(base::MD5Context* context,
|
| }
|
| }
|
|
|
| +// static
|
| +gfx::BufferFormat VideoFrame::BufferFormat(VideoPixelFormat format) {
|
| + switch (format) {
|
| + case PIXEL_FORMAT_I420:
|
| + case PIXEL_FORMAT_Y8:
|
| + return gfx::BufferFormat::R_8;
|
| + case PIXEL_FORMAT_NV12:
|
| + return gfx::BufferFormat::YUV_420_BIPLANAR;
|
| + case PIXEL_FORMAT_UYVY:
|
| + return gfx::BufferFormat::UYVY_422;
|
| + case PIXEL_FORMAT_Y16:
|
| + return gfx::BufferFormat::RG_88;
|
| + default:
|
| + NOTREACHED();
|
| + return gfx::BufferFormat::BGRA_8888;
|
| + }
|
| +}
|
| +
|
| bool VideoFrame::IsMappable() const {
|
| return IsStorageTypeMappable(storage_type_);
|
| }
|
| @@ -818,8 +861,9 @@ 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_Y16) {
|
| + LOG(DFATAL) << "Only PIXEL_FORMAT_I420 and PIXEL_FORMAT_Y16 formats are"
|
| + "supported: "
|
| << VideoPixelFormatToString(format);
|
| return nullptr;
|
| }
|
| @@ -840,6 +884,13 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalStorage(
|
| frame = new VideoFrame(format, storage_type, coded_size, visible_rect,
|
| natural_size, timestamp);
|
| }
|
| + if (format == PIXEL_FORMAT_Y16) {
|
| + DCHECK_EQ(NumPlanes(format), 1U);
|
| + 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
|
| @@ -1020,6 +1071,8 @@ gfx::Size VideoFrame::SampleSize(VideoPixelFormat format, size_t plane) {
|
| case PIXEL_FORMAT_YUV444P9:
|
| case PIXEL_FORMAT_YUV444P10:
|
| case PIXEL_FORMAT_YUV444P12:
|
| + case PIXEL_FORMAT_Y8:
|
| + case PIXEL_FORMAT_Y16:
|
| return gfx::Size(1, 1);
|
|
|
| case PIXEL_FORMAT_YV16:
|
| @@ -1047,8 +1100,6 @@ gfx::Size VideoFrame::SampleSize(VideoPixelFormat format, size_t plane) {
|
| case PIXEL_FORMAT_RGB24:
|
| case PIXEL_FORMAT_RGB32:
|
| case PIXEL_FORMAT_MJPEG:
|
| - case PIXEL_FORMAT_Y8:
|
| - case PIXEL_FORMAT_Y16:
|
| break;
|
| }
|
| }
|
|
|