You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
3.1 KiB

/*
* 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