blob: 61a422107ae2776aeb39a407bf9b2afcc7edabed [file] [log] [blame]
/*
* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
*
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation. nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Changes from Qualcomm Innovation Center are provided under the following license:
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#ifndef __QTIGRALLOCMETADATA_H__
#define __QTIGRALLOCMETADATA_H__
#include <color_metadata.h>
#define QTI_VT_TIMESTAMP 10000
#define QTI_COLOR_METADATA 10001
#define QTI_PP_PARAM_INTERLACED 10002
#define QTI_VIDEO_PERF_MODE 10003
#define QTI_GRAPHICS_METADATA 10004
#define QTI_UBWC_CR_STATS_INFO 10005
#define QTI_REFRESH_RATE 10006
#define QTI_MAP_SECURE_BUFFER 10007
#define QTI_LINEAR_FORMAT 10008
#define QTI_SINGLE_BUFFER_MODE 10009
#define QTI_CVP_METADATA 10010
#define QTI_VIDEO_HISTOGRAM_STATS 10011
// File descriptor for allocated buffer
#define QTI_FD 10012
// Flags from the private handle of the allocated buffer
#define QTI_PRIVATE_FLAGS 10013
// Width of the allocated buffer in pixels
#define QTI_ALIGNED_WIDTH_IN_PIXELS 10014
// Height of the allocated buffer in pixels
#define QTI_ALIGNED_HEIGHT_IN_PIXELS 10015
// Indicates whether metadata is using default value or has been set
#define QTI_STANDARD_METADATA_STATUS 10016
#define QTI_VENDOR_METADATA_STATUS 10017
#define QTI_BUFFER_TYPE 10018
#define QTI_VIDEO_TS_INFO 10019
// This is legacy format
#define QTI_S3D_FORMAT 10020
#define QTI_CUSTOM_DIMENSIONS_STRIDE 10021
#define QTI_CUSTOM_DIMENSIONS_HEIGHT 10022
#define QTI_RGB_DATA_ADDRESS 10023
#define QTI_COLORSPACE 10024
#define QTI_YUV_PLANE_INFO 10025
// Indicates buffer access permission of its client
#define QTI_BUFFER_PERMISSION 10026
#define QTI_MEM_HANDLE 10027
#define QTI_TIMED_RENDERING 10028
#define QTI_CUSTOM_CONTENT_METADATA 10029
// Video transcode metadata stat
#define QTI_VIDEO_TRANSCODE_STATS 10030
// Early Notify line count
#define QTI_EARLYNOTIFY_LINECOUNT 10031
// Heap Name
#define QTI_HEAP_NAME 10032
#define QTI_BUFFER_DEQUEUE_DURATION 10033
// Used to indicate to framework that internal definitions are used instead
#define COMPRESSION_QTI_UBWC 20001
#define INTERLACED_QTI 20002
#define PLANE_COMPONENT_TYPE_RAW 20003
#define PLANE_COMPONENT_TYPE_META 20004
#define MAX_NAME_LEN 256
// GRAPHICS_METADATA
#define GRAPHICS_METADATA_SIZE 4096
#define GRAPHICS_METADATA_SIZE_IN_BYTES (GRAPHICS_METADATA_SIZE * sizeof(uint32_t))
typedef struct GraphicsMetadata {
uint32_t size; //unused in Gralloc4, in Gralloc3 it was never returned on Get()
uint32_t data[GRAPHICS_METADATA_SIZE]; //Clients must set only raw data with Gralloc4
} GraphicsMetadata;
// UBWC_CR_STATS_INFO
#define MAX_UBWC_STATS_LENGTH 32
enum UBWC_Version {
UBWC_UNUSED = 0,
UBWC_1_0 = 0x1,
UBWC_2_0 = 0x2,
UBWC_3_0 = 0x3,
UBWC_4_0 = 0x4,
UBWC_MAX_VERSION = 0xFF,
};
struct UBWC_2_0_Stats {
uint32_t nCRStatsTile32; /**< UBWC Stats info for 32 Byte Tile */
uint32_t nCRStatsTile64; /**< UBWC Stats info for 64 Byte Tile */
uint32_t nCRStatsTile96; /**< UBWC Stats info for 96 Byte Tile */
uint32_t nCRStatsTile128; /**< UBWC Stats info for 128 Byte Tile */
uint32_t nCRStatsTile160; /**< UBWC Stats info for 160 Byte Tile */
uint32_t nCRStatsTile192; /**< UBWC Stats info for 192 Byte Tile */
uint32_t nCRStatsTile256; /**< UBWC Stats info for 256 Byte Tile */
};
struct UBWCStats {
enum UBWC_Version version; /* Union depends on this version. */
uint8_t bDataValid; /* If [non-zero], CR Stats data is valid.
* Consumers may use stats data.
* If [zero], CR Stats data is invalid.
* Consumers *Shall* not use stats data */
union {
struct UBWC_2_0_Stats ubwc_stats;
uint32_t reserved[MAX_UBWC_STATS_LENGTH]; /* This is for future */
};
};
#define UBWC_STATS_ARRAY_SIZE 2
struct CropRectangle_t {
int32_t left;
int32_t top;
int32_t right;
int32_t bottom;
};
// CVP_METADATA
#define CVP_METADATA_SIZE 1024
enum CVPMetadataFlags {
/* bit wise flags */
CVP_METADATA_FLAG_NONE = 0x00000000,
CVP_METADATA_FLAG_REPEAT = 0x00000001,
};
typedef struct CVPMetadata {
uint32_t size; /* payload size in bytes */
uint8_t payload[CVP_METADATA_SIZE];
uint32_t capture_frame_rate;
/* Frame rate in Q16 format.
Eg: fps = 7.5, then
capture_frame_rate = 7 << 16 --> Upper 16 bits to represent 7
capture_frame_rate |= 5 -------> Lower 16 bits to represent 5
If size > 0, framerate is valid
If size = 0, invalid data, so ignore all parameters */
uint32_t cvp_frame_rate;
enum CVPMetadataFlags flags;
uint32_t reserved[8];
} CVPMetadata;
// VIDEO_HISTOGRAM_STATS
#define VIDEO_HISTOGRAM_STATS_SIZE (4 * 1024)
struct VideoHistogramMetadata {
uint32_t stats_info[1024]; /* video stats payload */
uint32_t stat_len; /* Payload size in bytes */
uint32_t frame_type; /* bit mask to indicate frame type */
uint32_t display_width;
uint32_t display_height;
uint32_t decode_width;
uint32_t decode_height;
uint32_t reserved[12];
};
#define VIDEO_TRANSCODE_STATS_SIZE 128 //32 payloads with 4 bytes each: 4x32 = 128
#define VIDEO_TRANSCODE_PAYLOAD_NUM 32
struct VideoTranscodeStatsMetadata {
uint32_t stats_info[VIDEO_TRANSCODE_PAYLOAD_NUM]; /* Transcode stats payload */
uint32_t stat_len; /* Full payload size in bytes */
};
#define VIDEO_TIMESTAMP_INFO_SIZE 16
struct VideoTimestampInfo {
uint32_t enable; /* Enable video timestamp info */
uint32_t frame_number; /* Frame number/counter */
int64_t frame_timestamp_us; /* Frame timestamp in us */
};
#define RESERVED_REGION_SIZE 4096
typedef struct ReservedRegion {
uint32_t size;
uint8_t data[RESERVED_REGION_SIZE];
} ReservedRegion;
#define YCBCR_LAYOUT_ARRAY_SIZE 2
struct qti_ycbcr {
void *y;
void *cb;
void *cr;
uint32_t yStride;
uint32_t cStride;
uint32_t chromaStep;
};
enum BufferClient {
BUFFER_CLIENT_INVALID = -1,
BUFFER_CLIENT_DPU = 0,
BUFFER_CLIENT_UNTRUSTED_VM = 1,
BUFFER_CLIENT_TRUSTED_VM = 2,
BUFFER_CLIENT_MAX,
};
union BufferPermission {
struct {
uint8_t read : 1;
uint8_t write : 1;
uint8_t execute : 1;
};
uint8_t permission;
};
#define METADATA_SET_SIZE 512
#define IS_VENDOR_METADATA_TYPE(x) (x >= QTI_VT_TIMESTAMP)
#define GET_STANDARD_METADATA_STATUS_INDEX(x) x
#define GET_VENDOR_METADATA_STATUS_INDEX(x) x - QTI_VT_TIMESTAMP
#endif //__QTIGRALLOCMETADATA_H__