1 /* 2 * Copyright (C) 2015-2020 Alibaba Group Holding Limited 3 * 4 */ 5 6 #ifndef __NET_CACHE_H__ 7 #define __NET_CACHE_H__ 8 9 10 enum cache_type { 11 CACHE_NONE = 0, 12 CACHE_FILE, 13 CACHE_MEM, 14 }; 15 16 enum cache_event { 17 CACHE_EV_CACHE_CPLT = 0, 18 CACHE_EV_SEEK_DONE, 19 CACHE_EV_READ_BLOCK, 20 }; 21 22 struct cache_file { 23 os_file_t fp; 24 uint32_t wr_pos; 25 uint32_t rd_pos; 26 uint32_t rd_len; 27 uint8_t rd_waiting:1; 28 uint8_t rd_start:1; 29 os_sem_t rd_sem; 30 }; 31 32 struct cache_mem { 33 uvoice_ringbuff_t rb; 34 uint8_t *pool; 35 int pool_size; 36 int wr_len; 37 int rd_len; 38 uint8_t wr_waiting:1; 39 uint8_t rd_waiting:1; 40 uint8_t rd_start:1; 41 os_sem_t wr_sem; 42 os_sem_t rd_sem; 43 }; 44 45 typedef struct { 46 uint8_t *buffer; 47 int32_t buffer_size; 48 int32_t head_data_size; 49 int32_t offset; 50 cache_config_t cache_config; 51 uint8_t cache_running:1; 52 uint8_t cache_stop:1; 53 uint8_t cache_cplt:1; 54 uint8_t cplt_waiting:1; 55 uint8_t rebuild:1; 56 uint8_t download:1; 57 uint8_t sequence:1; 58 char filename[64]; 59 int32_t content_length; 60 int32_t load_length; 61 int32_t seek_offset; 62 void *cache; 63 int (*cache_load)(void *priv, uint8_t *buffer, int nbytes); 64 int (*cache_read)(void *priv, uint8_t *buffer, int nbytes); 65 int (*event)(void *priv, enum cache_event event, void *arg); 66 void *priv; 67 os_sem_t cplt_sem; 68 os_mutex_t lock; 69 os_task_t cache_task; 70 } net_cache_t; 71 72 int net_get_cacheinfo(net_cache_t *nc, cache_info_t *info); 73 int net_get_mediainfo(net_cache_t *nc, media_info_t *info, media_format_t format); 74 int net_cache_reset(net_cache_t *nc); 75 int net_cache_seek(net_cache_t *nc, int offset); 76 int net_cache_pause(net_cache_t *nc); 77 int net_cache_resume(net_cache_t *nc); 78 int net_cache_start(net_cache_t *nc); 79 int net_cache_stop(net_cache_t *nc); 80 net_cache_t *net_cache_create(int read_size, cache_config_t *config, bool sequence); 81 int net_cache_release(net_cache_t *nc); 82 83 84 #endif /* __NET_CACHE_H__ */