linuxOS_D21X/source/artinchip/awtk-ui/awtk/src/base/graphic_buffer.h

204 lines
6.4 KiB
C
Raw Normal View History

2024-11-29 08:23:11 +00:00
/**
* File: graphic_buffer.h
* Author: AWTK Develop Team
* Brief: graphic_buffer
*
* Copyright (c) 2019 - 2023 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2019-10-30 Li XianJing <xianjimli@hotmail.com> created
*
*/
#ifndef TK_GRAPHIC_BUFFER_H
#define TK_GRAPHIC_BUFFER_H
#include "base/types_def.h"
BEGIN_C_DECLS
struct _graphic_buffer_t;
typedef struct _graphic_buffer_t graphic_buffer_t;
typedef uint8_t* (*graphic_buffer_lock_for_read_t)(graphic_buffer_t* buffer);
typedef uint8_t* (*graphic_buffer_lock_for_write_t)(graphic_buffer_t* buffer);
typedef uint32_t (*graphic_buffer_get_physical_width_t)(graphic_buffer_t* buffer);
typedef uint32_t (*graphic_buffer_get_physical_height_t)(graphic_buffer_t* buffer);
typedef uint32_t (*graphic_buffer_get_physical_line_length_t)(graphic_buffer_t* buffer);
typedef ret_t (*graphic_buffer_unlock_t)(graphic_buffer_t* buffer);
typedef ret_t (*graphic_buffer_attach_t)(graphic_buffer_t* buffer, void* data, uint32_t w,
uint32_t h);
typedef bool_t (*graphic_buffer_is_valid_for_t)(graphic_buffer_t* buffer, bitmap_t* bitmap);
typedef ret_t (*graphic_buffer_destroy_t)(graphic_buffer_t* buffer);
typedef enum _graphic_buffer_options_t {
GRAPHIC_BUFFER_SW_READ_NEVER = 1,
GRAPHIC_BUFFER_SW_READ_RARELY = (1 << 1),
GRAPHIC_BUFFER_SW_READ_OFTEN = (1 << 2),
GRAPHIC_BUFFER_SW_READ_MASK = (1 << 3),
GRAPHIC_BUFFER_SW_WRITE_NEVER = (1 << 4),
GRAPHIC_BUFFER_SW_WRITE_RARELY = (1 << 5),
GRAPHIC_BUFFER_SW_WRITE_OFTEN = (1 << 6),
GRAPHIC_BUFFER_SW_WRITE_MASK = (1 << 7),
GRAPHIC_BUFFER_SOFTWARE_MASK = (1 << 8),
GRAPHIC_BUFFER_PROTECTED = (1 << 9),
GRAPHIC_BUFFER_HW_TEXTURE = (1 << 10),
GRAPHIC_BUFFER_HW_RENDER = (1 << 11),
GRAPHIC_BUFFER_HW_2D = (1 << 12),
GRAPHIC_BUFFER_HW_COMPOSER = (1 << 13),
GRAPHIC_BUFFER_HW_VIDEO_ENCODER = (1 << 14),
GRAPHIC_BUFFER_HW_MASK = (1 << 15)
} graphic_buffer_options_t;
typedef struct _graphic_buffer_vtable_t {
graphic_buffer_lock_for_read_t lock_for_read;
graphic_buffer_lock_for_write_t lock_for_write;
graphic_buffer_unlock_t unlock;
graphic_buffer_attach_t attach;
graphic_buffer_is_valid_for_t is_valid_for;
graphic_buffer_destroy_t destroy;
graphic_buffer_get_physical_width_t get_width;
graphic_buffer_get_physical_height_t get_height;
graphic_buffer_get_physical_line_length_t get_line_length;
} graphic_buffer_vtable_t;
/**
* @class graphic_buffer_t
* graphic_buffer
*/
struct _graphic_buffer_t {
const graphic_buffer_vtable_t* vt;
};
/**
* @method graphic_buffer_create_for_bitmap
*
* @param {bitmap_t*} bitmap
*
* @return {ret_t} RET_OK表示成功
*/
ret_t graphic_buffer_create_for_bitmap(bitmap_t* bitmap);
/**
* @method graphic_buffer_create_with_data
*
*
* > raw图像
* @param {const uint8_t*} data
* @param {uint32_t} w
* @param {uint32_t} h
* @param {bitmap_format_t} format
*
* @return {graphic_buffer_t*}
*/
graphic_buffer_t* graphic_buffer_create_with_data(const uint8_t* data, uint32_t w, uint32_t h,
bitmap_format_t format);
/**
* @method graphic_buffer_lock_for_read
*
* @param {graphic_buffer_t*} buffer
*
* @return {uint8_t*}
*/
uint8_t* graphic_buffer_lock_for_read(graphic_buffer_t* buffer);
/**
* @method graphic_buffer_lock_for_write
*
* @param {graphic_buffer_t*} buffer
*
* @return {uint8_t*}
*/
uint8_t* graphic_buffer_lock_for_write(graphic_buffer_t* buffer);
/**
* @method graphic_buffer_unlock
*
* @param {graphic_buffer_t*} buffer
*
* @return {ret_t} RET_OK表示成功
*/
ret_t graphic_buffer_unlock(graphic_buffer_t* buffer);
/**
* @method graphic_buffer_attach
*
* @param {graphic_buffer_t*} buffer
* @param {void*} data
* @param {uint32_t} w
* @param {uint32_t} h
*
* @return {ret_t} RET_OK表示成功
*/
ret_t graphic_buffer_attach(graphic_buffer_t* buffer, void* data, uint32_t w, uint32_t h);
/**
* @method graphic_buffer_is_valid_for
* graphic buffer的有效性
*
* @param {graphic_buffer_t*} buffer
* @param {bitmap_t*} bitmap
*
* @return {bool_t} TRUE表示有效
*/
bool_t graphic_buffer_is_valid_for(graphic_buffer_t* buffer, bitmap_t* bitmap);
/**
* @method graphic_buffer_get_physical_width
* graphic_buffer
*
* @param {graphic_buffer_t*} buffer
*
* @return {uint32_t}
*/
uint32_t graphic_buffer_get_physical_width(graphic_buffer_t* buffer);
/**
* @method graphic_buffer_get_physical_height
* graphic_buffer
*
* @param {graphic_buffer_t*} buffer
*
* @return {uint32_t}
*/
uint32_t graphic_buffer_get_physical_height(graphic_buffer_t* buffer);
/**
* @method graphic_buffer_get_physical_line_length
* graphic_buffer
*
* @param {graphic_buffer_t*} buffer
*
* @return {uint32_t}
*/
uint32_t graphic_buffer_get_physical_line_length(graphic_buffer_t* buffer);
/**
* @method graphic_buffer_destroy
*
* @param {graphic_buffer_t*} buffer
*
* @return {ret_t} RET_OK表示成功
*/
ret_t graphic_buffer_destroy(graphic_buffer_t* buffer);
#define GRAPHIC_BUFFER(buffer) ((graphic_buffer_t*)(buffer))
#define GRAPHIC_BUFFER_CREATE_FOR_BITMAP(bitmap) graphic_buffer_create_for_bitmap(bitmap)
#define GRAPHIC_BUFFER_CREATE_WITH_DATA(data, w, h, format) \
graphic_buffer_create_with_data(data, w, h, format)
END_C_DECLS
#endif /*TK_GRAPHIC_BUFFER_H*/