blob: d997a6d3b2f27a9d526b62e344fff9eac3f091aa [file] [log] [blame] [edit]
// Copyright 2019 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ARC_VM_LIBVDA_GBM_UTIL_H_
#define ARC_VM_LIBVDA_GBM_UTIL_H_
#include <stdint.h>
#include <memory>
#include <vector>
#include <base/files/scoped_file.h>
#include <gbm.h>
#include "arc/vm/libvda/libvda_common.h"
namespace arc {
// Owns the gdm_device and its underlying file descriptor.
class ScopedGbmDevice {
public:
// Creates the GBM device by searching the default path for renderer node.
static ScopedGbmDevice Create();
ScopedGbmDevice() = default;
~ScopedGbmDevice();
ScopedGbmDevice(ScopedGbmDevice&& rvalue);
ScopedGbmDevice& operator=(ScopedGbmDevice&& rvalue);
ScopedGbmDevice(const ScopedGbmDevice&) = delete;
ScopedGbmDevice& operator=(const ScopedGbmDevice&) = delete;
gbm_device* get();
void reset();
private:
ScopedGbmDevice(gbm_device* device, base::ScopedFD device_fd);
gbm_device* device_ = nullptr;
base::ScopedFD device_fd_;
};
struct GbmBoDeleter {
void operator()(gbm_bo* bo) { gbm_bo_destroy(bo); }
};
using ScopedGbmBoPtr = std::unique_ptr<gbm_bo, GbmBoDeleter>;
// Converts from libvda's pixel format to GBM format.
uint32_t ConvertPixelFormatToGbmFormat(video_pixel_format_t format);
enum GbmUsageType { DECODE, ENCODE };
// Returns a list of supported raw formats. When |encode| is true, it will
// check for formats suitable for encoding, else for decoding.
std::vector<video_pixel_format_t> GetSupportedRawFormats(
GbmUsageType usage_type);
} // namespace arc
#endif // ARC_VM_LIBVDA_GBM_UTIL_H_