* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef INTERFACES_INNERKITS_SURFACE_ICONSUMER_SURFACE_H
#define INTERFACES_INNERKITS_SURFACE_ICONSUMER_SURFACE_H
#include <refbase.h>
#include "ibuffer_consumer_listener.h"
#include "ibuffer_producer.h"
#include "surface.h"
#include "surface_buffer.h"
#include "surface_type.h"
#include "surface_tunnel_handle.h"
namespace OHOS {
class IConsumerSurface : public Surface {
public:
using AcquireBufferReturnValue = struct {
sptr<SurfaceBuffer> buffer;
sptr<SyncFence> fence;
int64_t timestamp;
std::vector<Rect> damages;
};
static sptr<IConsumerSurface> Create(std::string name = "noname");
virtual ~IConsumerSurface() = default;
virtual bool IsConsumer() const
{
return true;
}
virtual sptr<IBufferProducer> GetProducer() const
{
return nullptr;
}
virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence,
int64_t ×tamp, Rect &damage)
{
(void)buffer;
(void)fence;
(void)timestamp;
(void)damage;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence)
{
(void)buffer;
(void)fence;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
int64_t ×tamp, Rect &damage)
{
(void)buffer;
(void)fence;
(void)timestamp;
(void)damage;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)
{
(void)buffer;
(void)fence;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer)
{
(void)buffer;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer)
{
(void)buffer;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual uint32_t GetQueueSize()
{
return 0;
}
virtual GSError SetQueueSize(uint32_t queueSize)
{
(void)queueSize;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height)
{
(void)width;
(void)height;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual int32_t GetDefaultWidth()
{
return 0;
}
virtual int32_t GetDefaultHeight()
{
return 0;
}
virtual GSError SetDefaultUsage(uint64_t usage)
{
(void)usage;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual uint64_t GetDefaultUsage()
{
return 0;
}
virtual GSError SetUserData(const std::string &key, const std::string &val)
{
(void)key;
(void)val;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual std::string GetUserData(const std::string &key)
{
(void)key;
return "";
}
virtual const std::string& GetName() = 0;
virtual uint64_t GetUniqueId() const
{
return 0;
}
virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)
{
(void)listener;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener)
{
(void)listener;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError UnregisterConsumerListener()
{
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GoBackground()
{
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetTransform(GraphicTransformType transform)
{
(void)transform;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GraphicTransformType GetTransform() const
{
return GraphicTransformType::GRAPHIC_ROTATE_NONE;
}
virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode)
{
(void)sequence;
(void)scalingMode;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode)
{
(void)sequence;
(void)scalingMode;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetVideoDimensionType(uint32_t sequence, VideoDimType &videoDimType)
{
(void)sequence;
(void)videoDimType;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData)
{
(void)sequence;
(void)metaData;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
const std::vector<uint8_t> &metaData)
{
(void)sequence;
(void)key;
(void)metaData;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const
{
(void)sequence;
(void)type;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const
{
(void)sequence;
(void)metaData;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
std::vector<uint8_t> &metaData) const
{
(void)sequence;
(void)key;
(void)metaData;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle)
{
(void)handle;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const
{
return nullptr;
}
virtual GSError NotifyLayerStateChanged(LayerStateChange state)
{
(void)state;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp)
{
(void)sequence;
(void)timestamp;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual void Dump(std::string &result) const
{
(void)result;
return;
}
virtual void DumpCurrentFrameLayer() const
{
return;
}
virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
int64_t ×tamp, std::vector<Rect> &damages, bool isLppMode = false)
{
(void)buffer;
(void)fence;
(void)timestamp;
(void)damages;
(void)isLppMode;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError AcquireBuffer(AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp,
bool isUsingAutoTimestamp)
{
(void)returnValue;
(void)expectPresentTimestamp;
(void)isUsingAutoTimestamp;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut)
{
(void)buffer;
(void)timeOut;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client)
{
(void)client;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError UnregisterSurfaceDelegator()
{
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual void ConsumerRequestCpuAccess(bool on)
{
(void)on;
}
virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer)
{
(void)buffer;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, bool isReserveSlot = false)
{
(void)buffer;
(void)isReserveSlot;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual bool IsBufferHold()
{
return false;
}
virtual GSError SetScalingMode(ScalingMode scalingMode)
{
(void)scalingMode;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual float GetHdrWhitePointBrightness() const
{
return 0;
}
virtual float GetSdrWhitePointBrightness() const
{
return 0;
}
virtual GSError GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer, GraphicTransformType *transformType)
{
(void)buffer;
(void)transformType;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache)
{
(void)seqNum;
(void)isInCache;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetGlobalAlpha(int32_t &alpha)
{
(void)alpha;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual uint32_t GetAvailableBufferCount() const
{
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetLastFlushedDesiredPresentTimeStamp(
[[maybe_unused]] int64_t &lastFlushedDesiredPresentTimeStamp) const
{
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetBufferSupportFastCompose([[maybe_unused]] bool &bufferSupportFastCompose)
{
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetBufferName(const std::string &name)
{
(void)name;
return GSERROR_NOT_SUPPORT;
}
virtual GSError PreAllocBuffers(const BufferRequestConfig &config, uint32_t allocBufferCount)
{
(void)config;
(void)allocBufferCount;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetLastConsumeTime(int64_t &lastConsumeTime) const
{
(void)lastConsumeTime;
return GSERROR_NOT_SUPPORT;
}
virtual GSError SetMaxQueueSize(uint32_t queueSize)
{
(void)queueSize;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetMaxQueueSize(uint32_t &queueSize) const
{
(void)queueSize;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetLppDrawSource(bool isShbSource, bool isRsSource)
{
(void)isShbSource;
(void)isRsSource;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetFrontDesiredPresentTimeStamp(int64_t &desiredPresentTimeStamp, bool &isAutoTimeStamp) const
{
(void)desiredPresentTimeStamp;
(void)isAutoTimeStamp;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError SetIsPriorityAlloc(bool isPriorityAlloc)
{
(void)isPriorityAlloc;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetAvailableBufferCount(uint32_t &count)
{
(void)count;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual bool IsCached(uint32_t bufferSeqNum) const
{
(void)bufferSeqNum;
return false;
}
* @brief Set the Drop Frame Level for the buffer queue.
* When dirty list size exceeds this level, oldest buffers will be dropped during acquire.
* Default implementation returns NOT_SUPPORT for backward compatibility.
* @param level The drop frame level (0 means no drop, >0 means keep latest N frames)
* @return {@link GSERROR_OK} 0 - Success.
* {@link SURFACE_ERROR_NOT_SUPPORT} - Not supported by implementation.
*/
virtual GSError SetDropFrameLevel(int32_t level)
{
(void)level;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual GSError GetTunnelLayerInfo(TunnelLayerState& info)
{
(void)info;
return SURFACE_ERROR_NOT_SUPPORT;
}
virtual SingleBufferMode GetAndResetSingleBufferMode()
{
return SingleBufferMode::SINGLE_BUFFER_MODE_NONE;
}
protected:
IConsumerSurface() = default;
};
}
#endif