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

159 lines
5.3 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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.19内核里面没这个format要从linux 主线 5.2 以后里面反向porting 回来。4.19和5.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__ */