text: // 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::RG_1616:
        return DRM_FORMAT_GR1616;
      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
  