source: svn/trunk/newcon3bcm2_21bu/BSEAV/lib/bfile/bfile_cache.h

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 4.3 KB
RevLine 
[2]1/***************************************************************************
2 *     Copyright (c) 2007-2010, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bfile_cache.h $
11 * $brcm_Revision: 9 $
12 * $brcm_Date: 6/25/10 12:00p $
13 *
14 * Module Description:
15 *
16 * Linear file cache
17 *
18 * Revision History:
19 *
20 * $brcm_Log: /BSEAV/lib/bfile/bfile_cache.h $
21 *
22 * 9   6/25/10 12:00p vsilyaev
23 * SW3548-2995: Separate requested reserve size and minimal size for
24 * succesive parsing
25 *
26 * 8   4/8/10 6:53p vsilyaev
27 * SW7405-3773: Use 64-bit integer for segment size
28 *
29 * 7   1/13/10 5:06p vsilyaev
30 * SW3556-913: Remeber file I/O related errors and propagate them
31 *
32 * 6   1/12/10 7:57p vsilyaev
33 * SW3556-913: Separate data and index reads, allow incomplete data reads
34 *
35 * 5   1/11/10 7:35p vsilyaev
36 * SW3556-913: Added function to differentiate between end of cached data
37 * and file error
38 *
39 * 4   11/23/09 4:11p vsilyaev
40 * SW7405-3368: Added parsing of MKV attachments
41 *
42 * 3   8/18/08 12:41p gmohile
43 * PR 42817 : Add support for AVI2.0
44 *
45 * 2   3/3/08 12:22p vsilyaev
46 * PR 39818: Increased segment size
47 *
48 * 1   4/29/07 12:55a vsilyaev
49 * PR 28631: File cache utilities
50 *
51 *
52 *******************************************************************************/
53#ifndef _BFILE_CACHE_H__
54#define _BFILE_CACHE_H__
55
56#include "bfile_io.h"
57#include "bfile_buffer.h"
58
59#ifdef __cplusplus
60extern "C"
61{
62#endif
63
64typedef struct bfile_segment {
65        off_t start;
66        uint64_t len;
67} bfile_segment;
68
69void bfile_segment_clear(bfile_segment *segment);
70void bfile_segment_set(bfile_segment *segment, off_t start, uint64_t len);
71bool bfile_segment_test(const bfile_segment *segment);
72
73typedef struct bfile_cache *bfile_cache_t;
74
75bfile_cache_t bfile_cache_create(bfile_io_read_t fd, const bfile_segment *segment, size_t buf_size, size_t atom_size);
76void bfile_cache_destroy(bfile_cache_t  cache);
77int bfile_cache_seek(bfile_cache_t cache, size_t off);
78const uint8_t *bfile_cache_next(bfile_cache_t cache);
79void bfile_cache_clear( bfile_cache_t  cache);
80bool bfile_cache_is_file_error(bfile_cache_t cache);
81void bfile_segment_reset( bfile_cache_t  cache, bfile_segment *segment);
82
83typedef enum bfile_segment_async_result {
84        bfile_segment_async_result_success,
85        bfile_segment_async_result_async,
86        bfile_segment_async_result_eof,
87        bfile_segment_async_result_no_data,
88        bfile_segment_async_result_error
89} bfile_segment_async_result;
90
91typedef struct bfile_cached_segment {
92        batom_cursor cursor; /* cursor that points to current parsing point in the accumulator */
93        uint64_t accum_offset;
94        batom_accum_t accum;
95        size_t min_read_size;
96        bfile_buffer_t buffer;
97        bfile_segment segment; 
98        bfile_buffer_result last_read_result;
99        struct {
100                size_t accum_size;
101                size_t load_size;
102                void *cntx;
103                void (*read_complete)(void *, bfile_segment_async_result result);
104        } async;
105} bfile_cached_segment;
106
107
108int bfile_cached_segment_init(bfile_cached_segment *segment, bfile_buffer_t buffer, batom_factory_t factory, size_t min_read_size);
109void bfile_cached_segment_shutdown(bfile_cached_segment *segment);
110void bfile_cached_segment_seek(bfile_cached_segment *segment, uint64_t offset);
111uint64_t bfile_cached_segment_tell(bfile_cached_segment *segment);
112void bfile_cached_segment_set(bfile_cached_segment *segment, off_t start, uint64_t len);
113void bfile_cached_segment_async_read_complete(void *cntx, batom_t atom, bfile_buffer_result result);
114bfile_segment_async_result bfile_cached_segment_async_reserve(bfile_cached_segment *segment, size_t reserve_size, void (*read_complete)(void *, bfile_segment_async_result ), void *cntx);
115bool bfile_cached_segment_reserve(bfile_cached_segment *segment, size_t reserve_size);
116bool bfile_cached_segment_reserve_custom_buffer(bfile_cached_segment *segment, size_t reserve_size, bfile_buffer_t buffer);
117bool bfile_cached_segment_reserve_min(bfile_cached_segment *segment, size_t reserve_size, size_t min_size);
118bool bfile_cached_segment_reserve_custom_buffer_min(bfile_cached_segment *segment, size_t reserve_size, size_t min_size, bfile_buffer_t buffer);
119
120
121
122#ifdef __cplusplus
123}
124#endif
125
126
127#endif /* _BFILE_CACHE_H__ */
128
129
Note: See TracBrowser for help on using the repository browser.