blob: ecaa61af3c8b9cd29125b698d19a58d8dfc4f3b4 [file] [log] [blame] [edit]
// Copyright 2022 The Chromium Authors
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FAKE_SURFACE_H_
#define FAKE_SURFACE_H_
#include <va/va.h>
#include <memory>
#include <vector>
#include "scoped_bo_mapping_factory.h"
namespace libvafake {
// Class used for tracking a VASurface and all information relevant to it.
//
// The metadata (ID, format, fourcc, dimensions, and attribute list) of a
// FakeSurface is immutable. The accessors for such metadata are thread-safe.
// The contents of the backing buffer object (if applicable) are mutable, but
// the reference to that buffer object is immutable, i.e., the backing buffer
// object is always the same, but the contents may change. Thus, while the
// accessor for the mapped buffer object is thread-safe, writes and reads to
// this mapping must be synchronized externally.
class FakeSurface {
public:
using IdType = VASurfaceID;
FakeSurface(const FakeSurface&) = delete;
FakeSurface& operator=(const FakeSurface&) = delete;
~FakeSurface();
// Note: |scoped_bo_mapping_factory| must outlive the `FakeSurface` since
// it's used to unmap the backing buffer object (if applicable).
static std::unique_ptr<FakeSurface> Create(
IdType id,
unsigned int format,
unsigned int width,
unsigned int height,
std::vector<VASurfaceAttrib> attrib_list,
ScopedBOMappingFactory& scoped_bo_mapping_factory);
IdType GetID() const;
unsigned int GetFormat() const;
uint32_t GetVAFourCC() const;
unsigned int GetWidth() const;
unsigned int GetHeight() const;
const std::vector<VASurfaceAttrib>& GetSurfaceAttribs() const;
const ScopedBOMapping& GetMappedBO() const;
private:
FakeSurface(IdType id,
unsigned int format,
uint32_t va_fourcc,
unsigned int width,
unsigned int height,
std::vector<VASurfaceAttrib> attrib_list,
ScopedBOMapping mapped_bo);
const IdType id_;
const unsigned int format_;
const uint32_t va_fourcc_;
const unsigned int width_;
const unsigned int height_;
const std::vector<VASurfaceAttrib> attrib_list_;
ScopedBOMapping mapped_bo_;
};
} // namespace libvafake
#endif // FAKE_SURFACE_H_