blob: 416fc2303799ea0251607db2aba70cf30a6928e9 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/gfx/linux/drm_util_linux.h"
#include <drm_fourcc.h>
#include "base/notreached.h"
namespace ui {
int GetFourCCFormatFromBufferFormat(gfx::BufferFormat format) {
switch (format) {
case gfx::BufferFormat::R_8:
return DRM_FORMAT_R8;
case gfx::BufferFormat::R_16:
return DRM_FORMAT_R16;
case gfx::BufferFormat::RG_88:
return DRM_FORMAT_GR88;
case gfx::BufferFormat::BGR_565:
return DRM_FORMAT_RGB565;
case gfx::BufferFormat::RGBA_4444:
return DRM_FORMAT_INVALID;
case gfx::BufferFormat::RGBA_8888:
return DRM_FORMAT_ABGR8888;
case gfx::BufferFormat::RGBX_8888:
return DRM_FORMAT_XBGR8888;
case gfx::BufferFormat::BGRA_8888:
return DRM_FORMAT_ARGB8888;
case gfx::BufferFormat::BGRX_8888:
return DRM_FORMAT_XRGB8888;
case gfx::BufferFormat::BGRA_1010102:
return DRM_FORMAT_ARGB2101010;
case gfx::BufferFormat::RGBA_1010102:
return DRM_FORMAT_ABGR2101010;
case gfx::BufferFormat::RGBA_F16:
return DRM_FORMAT_INVALID;
case gfx::BufferFormat::YVU_420:
return DRM_FORMAT_YVU420;
case gfx::BufferFormat::YUV_420_BIPLANAR:
return DRM_FORMAT_NV12;
case gfx::BufferFormat::P010:
return DRM_FORMAT_P010;
}
return DRM_FORMAT_INVALID;
}
gfx::BufferFormat GetBufferFormatFromFourCCFormat(int format) {
switch (format) {
case DRM_FORMAT_R8:
return gfx::BufferFormat::R_8;
case DRM_FORMAT_GR88:
return gfx::BufferFormat::RG_88;
case DRM_FORMAT_ABGR8888:
return gfx::BufferFormat::RGBA_8888;
case DRM_FORMAT_XBGR8888:
return gfx::BufferFormat::RGBX_8888;
case DRM_FORMAT_ARGB8888:
return gfx::BufferFormat::BGRA_8888;
case DRM_FORMAT_XRGB8888:
return gfx::BufferFormat::BGRX_8888;
case DRM_FORMAT_ARGB2101010:
return gfx::BufferFormat::BGRA_1010102;
case DRM_FORMAT_ABGR2101010:
return gfx::BufferFormat::RGBA_1010102;
case DRM_FORMAT_RGB565:
return gfx::BufferFormat::BGR_565;
case DRM_FORMAT_NV12:
return gfx::BufferFormat::YUV_420_BIPLANAR;
case DRM_FORMAT_YVU420:
return gfx::BufferFormat::YVU_420;
case DRM_FORMAT_P010:
return gfx::BufferFormat::P010;
default:
NOTREACHED();
return gfx::BufferFormat::BGRA_8888;
}
}
bool IsValidBufferFormat(uint32_t current_format) {
switch (current_format) {
case DRM_FORMAT_R8:
case DRM_FORMAT_GR88:
case DRM_FORMAT_ABGR8888:
case DRM_FORMAT_XBGR8888:
case DRM_FORMAT_ARGB8888:
case DRM_FORMAT_XRGB8888:
case DRM_FORMAT_ARGB2101010:
case DRM_FORMAT_ABGR2101010:
case DRM_FORMAT_RGB565:
case DRM_FORMAT_NV12:
case DRM_FORMAT_YVU420:
case DRM_FORMAT_P010:
return true;
default:
return false;
}
}
} // namespace ui