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
133 lines
3.1 KiB
7 months ago
|
/*
|
||
|
* 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
|