/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2009-2019. All rights reserved. * Description: Defines avplay buffer api * Author: Hisilicon * Create: 2009-12-21 * History: */ #ifndef __AVPLAY_BUFFER_H__ #define __AVPLAY_BUFFER_H__ #include "avplay_common.h" #include "avplay_config.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif #define INVALID_MEM_HANDLE EXT_MMZ_INVALID_HANDLE typedef struct { td_u32 size; td_mem_handle_t handle; void *vir_addr; td_bool is_cached; td_bool is_secure; } avplay_mem_info; /* IDLE->WRITING->READY->READING->IDLE */ /* wr_acq wr_rls rd_acq rd_rls */ typedef enum { AVPLAY_BLOCK_IDLE = 0, AVPLAY_BLOCK_WRITING, AVPLAY_BLOCK_READY, AVPLAY_BLOCK_READING } avplay_block_status; typedef struct { td_u32 offset; td_u32 size; avplay_block_status status; } avplay_buffer_block; typedef struct { avplay_mem_info *mem; avplay_buffer_block *blocks; td_u8 *blk_priv_data; td_u32 total_blk_cnt; td_u32 used_blk_cnt; td_u32 blk_priv_len; td_u32 wr_acq; td_u32 wr_rls; td_u32 rd_acq; td_u32 rd_rls; } avplay_buffer_info; typedef enum { AVPLAY_BUF_FLAG_WRITE = 1 << 0, AVPLAY_BUF_FLAG_READ = 1 << 1, AVPLAY_BUF_FLAG_SYNC = 1 << 2, AVPLAY_BUF_FLAG_MAX } avplay_buf_flag; typedef struct { avplay_buffer_info *buffer; avplay_mutex_t mutex; } avplay_es_buffer; typedef struct { avplay_time_t pts; td_bool eof; } avplay_es_priv; typedef struct { void *vir_addr; td_u32 size; td_mem_handle_t handle; td_u32 offset; avplay_es_priv priv_data; } avplay_es_block; typedef struct { td_u32 size; td_u32 used_size; } avplay_buffer_status; typedef struct tag_avplay_frm_buffer { avplay_mem_info frm; avplay_mem_info meta; td_u32 create_elapse; td_u32 destroy_elapse; struct tag_avplay_frm_buffer *next; } avplay_frm_buffer; typedef struct { avplay_frm_buffer *buffer; avplay_frm_buffer *freed; td_u32 id; avplay_mutex_t mutex; } avplay_fb_info; td_s32 avplay_mem_alloc(const td_char *name, td_u32 name_len, avplay_mem_info *mem); td_s32 avplay_mem_free(avplay_mem_info *mem); td_s32 avplay_mem_map(avplay_mem_info *mem); td_s32 avplay_mem_unmap(avplay_mem_info *mem); td_s32 avplay_eb_create(avplay_es_buffer *eb, td_bool secure, td_u32 size); td_s32 avplay_eb_destroy(avplay_es_buffer *eb); td_s32 avplay_eb_reset(avplay_es_buffer *eb); td_s32 avplay_eb_acquire(avplay_es_buffer *eb, avplay_es_block *block, td_u32 flag); td_s32 avplay_eb_release(avplay_es_buffer *eb, const avplay_es_block *block, td_u32 flag); td_s32 avplay_eb_get_status(const avplay_es_buffer *eb, avplay_buffer_status *status); td_s32 avplay_eb_show(const avplay_es_buffer *eb, td_char *show_buf, td_u32 buf_len); void avplay_eb_show_detail(const avplay_es_buffer *eb); void avplay_fb_reset(avplay_fb_info *fb); td_s32 avplay_fb_create(avplay_frm_buffer *fb, td_u32 frm_size, td_u32 meta_size, td_bool secure, td_u32 index); td_s32 avplay_fb_destroy(avplay_frm_buffer *fb); #ifdef __cplusplus #if __cplusplus } #endif #endif #endif