You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.7 KiB
70 lines
1.7 KiB
/*
|
|
* Copyright (c) Hisilicon Technologies Co., Ltd. 2021-2023. All rights reserved.
|
|
* Description: ImageTarget for output
|
|
* Author: Hisilicon
|
|
* Created: 2021.04.16
|
|
*/
|
|
|
|
#ifndef IMAGEKIT_IMAGE_TARGET_H
|
|
#define IMAGEKIT_IMAGE_TARGET_H
|
|
|
|
#include <atomic>
|
|
|
|
#include "ImageBuf.h"
|
|
#include "ImageTexture.h"
|
|
|
|
namespace PhoenixImage {
|
|
/* *
|
|
* @brief Image Render target class. .
|
|
*/
|
|
class ImageTarget : public ImageTexture {
|
|
public:
|
|
/**
|
|
* @brief ImageTexture constructor, generate fbo internal.
|
|
* @param [in] imageTexture: The ImageTexture bind to the fbo.
|
|
*/
|
|
ImageTarget(BufHolder *buFHolder, int32_t width, int32_t height);
|
|
|
|
/**
|
|
* @brief ImageTexture constructor, using external fbo.
|
|
* @param [in] imageTexture: The ImageTexture bind to the fbo.
|
|
* @param [in] framebuffer: The fbo generated outside.
|
|
*/
|
|
ImageTarget(uint32_t tex, uint32_t textureTarget, int32_t width, int32_t height, uint32_t framebuffer);
|
|
|
|
/**
|
|
* @brief ImageTexture destructor.
|
|
*/
|
|
~ImageTarget();
|
|
|
|
/**
|
|
* @brief acquires the most recently putted buffer by BufHolder, and sets the image contents of the target
|
|
* framebuffer to it .
|
|
*/
|
|
int32_t UpdateTargetImage();
|
|
|
|
/**
|
|
* @brief increase reference count_ of the object.
|
|
*/
|
|
void IncRef()
|
|
{
|
|
count_.fetch_add(1, std::memory_order_relaxed);
|
|
}
|
|
|
|
/**
|
|
* @brief decrease reference count_ of the object, the object will be freed if reference count_ is 0.
|
|
*/
|
|
size_t DecRef()
|
|
{
|
|
return count_.fetch_sub(1, std::memory_order_acq_rel);
|
|
}
|
|
|
|
protected:
|
|
mutable std::atomic_size_t count_;
|
|
uint32_t frameBuffer_;
|
|
bool needFreeFBO_;
|
|
};
|
|
} /* namespace PhoenixImage */
|
|
|
|
#endif
|