vendor/rockchip/hardware/interfaces/vtunnel/common/drmgralloc4.h

159 lines
5.3 KiB
C
Raw Normal View History

2025-08-25 08:12:20 +08:00
/*
* Copyright (C) 2017-2018 RockChip Limited. All rights reserved.
*
* 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.
*/
/* --------------------------------------------------------------------------------------------------------
* File: platform_gralloc4.h
*
* Desc: buffer_handle_t get metadata, import_buffer/free_buffer, lock_buffer/unlock_buffer .
* IMapper 4.0 (gralloc 4.0) .
*
* -----------------------------------------------------------------------------------
* < > :
*
* -----------------------------------------------------------------------------------
* Usage:
*
* Note:
*
* Author: ChenZhen
*
* Log:
* init.
----Fri Aug 28 10:10:14 2020
*
* --------------------------------------------------------------------------------------------------------
*/
#ifndef __DRM_GRALLOC4_H__
#define __DRM_GRALLOC4_H__
/* ---------------------------------------------------------------------------------------------------------
* Include Files
* ---------------------------------------------------------------------------------------------------------
*/
// #include <linux/kernel.h>
#include <stdint.h>
#include <cutils/native_handle.h>
#include <utils/Errors.h>
#include <ui/PixelFormat.h>
/* ---------------------------------------------------------------------------------------------------------
* Macros Definition
* ---------------------------------------------------------------------------------------------------------
*/
namespace gralloc4 {
/*
* 4.19formatlinux 线 5.2 porting 4.195.2
* porting有很多冲突要解决HWC模块去规避这个问题HWC实现如下
* 1.
* DRM_FORMAT_YUV420_10BIT => DRM_FORMAT_NV12_10
* DRM_FORMAT_YUV420_8BIT => DRM_FORMAT_NV12
* DRM_FORMAT_YUYV => DRM_FORMAT_NV16
*
* 2.Byte Stride
* DRM_FORMAT_NV12_10 / DRM_FORMAT_NV12:
* Byte stride = Byte stride / 1.5
*
* DRM_FORMAT_NV16:
* Byte stride = Byte stride / 2
*
* WORKROUND_FOR_VOP2_DRIVER
*/
void set_drm_version(int version);
// 初始化 Gralloc4 系统配置,目前提供的配置如下:
// vendor.hwc.disable_gralloc4_use_vir_height : 1 / 0
// 1: 关闭使用 vir height, get_height 获取到的是应用申请的实高
// 0: 开启使用 vir height, get_height 获取到的是应用申请的虚高
void init_env_property();
/* ---------------------------------------------------------------------------------------------------------
* Types and Structures Definition
* ---------------------------------------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------------------------------------
* Global Functions' Prototype
* ---------------------------------------------------------------------------------------------------------
*/
/*
* 'handle' graphic_buffer internal_format.
*/
uint64_t get_format_modifier(buffer_handle_t handle);
uint32_t get_fourcc_format(buffer_handle_t handle);
int get_width(buffer_handle_t handle, uint64_t* width);
int get_height(buffer_handle_t handle, uint64_t* height);
int get_height_stride(buffer_handle_t handle, uint64_t* height_stride);
int get_bit_per_pixel(buffer_handle_t handle, int* bit_per_pixel);
int get_pixel_stride(buffer_handle_t handle, int* pixel_stride);
int get_byte_stride(buffer_handle_t handle, int* byte_stride);
int get_byte_stride_workround(buffer_handle_t handle, int* byte_stride);
int get_format_requested(buffer_handle_t handle, int* format_requested);
int get_usage(buffer_handle_t handle, uint64_t* usage);
int get_allocation_size(buffer_handle_t handle, uint64_t* usage);
int get_share_fd(buffer_handle_t handle, int* share_fd);
int get_name(buffer_handle_t handle, std::string &name);
int get_buffer_id(buffer_handle_t handle, uint64_t* buffer_id);
using android::status_t;
status_t importBuffer(buffer_handle_t rawHandle, buffer_handle_t* outHandle);
status_t freeBuffer(buffer_handle_t handle);
status_t lock(buffer_handle_t bufferHandle,
uint64_t usage,
int x,
int y,
int w,
int h,
void** outData);
void unlock(buffer_handle_t bufferHandle);
/* ---------------------------------------------------------------------------------------------------------
* Inline Functions Implementation
* ---------------------------------------------------------------------------------------------------------
*/
}
#endif /* __PLATFORM_GRALLOC4_H__ */