summaryrefslogtreecommitdiff
path: root/apps/plugins/mpegplayer/disk_buf.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/mpegplayer/disk_buf.h')
-rw-r--r--apps/plugins/mpegplayer/disk_buf.h42
1 files changed, 23 insertions, 19 deletions
diff --git a/apps/plugins/mpegplayer/disk_buf.h b/apps/plugins/mpegplayer/disk_buf.h
index e16939a92e..a5a10cfe69 100644
--- a/apps/plugins/mpegplayer/disk_buf.h
+++ b/apps/plugins/mpegplayer/disk_buf.h
@@ -23,6 +23,10 @@
23#ifndef DISK_BUF_H 23#ifndef DISK_BUF_H
24#define DISK_BUF_H 24#define DISK_BUF_H
25 25
26#ifndef OFF_T_MAX
27#define OFF_T_MAX (~(off_t)1 << (sizeof (off_t)*8 - 1))
28#endif
29
26#define DISK_BUF_PAGE_SHIFT 15 /* 32KB cache lines */ 30#define DISK_BUF_PAGE_SHIFT 15 /* 32KB cache lines */
27#define DISK_BUF_PAGE_SIZE (1 << DISK_BUF_PAGE_SHIFT) 31#define DISK_BUF_PAGE_SIZE (1 << DISK_BUF_PAGE_SHIFT)
28#define DISK_BUF_PAGE_MASK (DISK_BUF_PAGE_SIZE-1) 32#define DISK_BUF_PAGE_MASK (DISK_BUF_PAGE_SIZE-1)
@@ -58,6 +62,19 @@ struct dbuf_range
58 int pg_start; 62 int pg_start;
59}; 63};
60 64
65#define DISK_BUF_L2_CACHE_SHIFT 6
66#define DISK_BUF_L2_CACHE_SIZE (1 << DISK_BUF_L2_CACHE_SHIFT)
67#define DISK_BUF_L2_CACHE_MASK (DISK_BUF_L2_CACHE_SIZE-1)
68
69struct dbuf_l2_cache
70{
71 off_t addr; /* L2 file offset */
72 size_t size; /* Real size */
73 uint8_t data[DISK_BUF_L2_CACHE_SIZE*2]; /* Local data and guard */
74};
75
76void dbuf_l2_init(struct dbuf_l2_cache *l2_p);
77
61/* This object is an extension of the stream manager and handles some 78/* This object is an extension of the stream manager and handles some
62 * playback events as well as buffering */ 79 * playback events as well as buffering */
63struct disk_buf 80struct disk_buf
@@ -88,20 +105,8 @@ struct disk_buf
88 105
89extern struct disk_buf disk_buf SHAREDBSS_ATTR; 106extern struct disk_buf disk_buf SHAREDBSS_ATTR;
90 107
91static inline bool disk_buf_is_data_ready(struct stream_hdr *sh, 108struct stream_hdr;
92 ssize_t margin) 109bool disk_buf_is_data_ready(struct stream_hdr *sh, ssize_t margin);
93{
94 /* Data window available? */
95 off_t right = sh->win_right;
96
97 /* Margins past end-of-file can still return true */
98 if (right > disk_buf.filesize - margin)
99 right = disk_buf.filesize - margin;
100
101 return sh->win_left >= disk_buf.win_left &&
102 right + margin <= disk_buf.win_right;
103}
104
105 110
106bool disk_buf_init(void); 111bool disk_buf_init(void);
107void disk_buf_exit(void); 112void disk_buf_exit(void);
@@ -111,11 +116,10 @@ static inline int disk_buf_status(void)
111 116
112int disk_buf_open(const char *filename); 117int disk_buf_open(const char *filename);
113void disk_buf_close(void); 118void disk_buf_close(void);
114ssize_t _disk_buf_getbuffer(size_t size, void **pp, void **pwrap, 119ssize_t disk_buf_getbuffer(size_t size, void **pp, void **pwrap,
115 size_t *sizewrap); 120 size_t *sizewrap);
116#define disk_buf_getbuffer(size, pp, pwrap, sizewrap) \ 121ssize_t disk_buf_getbuffer_l2(struct dbuf_l2_cache *l2,
117 _disk_buf_getbuffer((size), PUN_PTR(void **, (pp)), \ 122 size_t size, void **pp);
118 PUN_PTR(void **, (pwrap)), (sizewrap))
119ssize_t disk_buf_read(void *buffer, size_t size); 123ssize_t disk_buf_read(void *buffer, size_t size);
120ssize_t disk_buf_lseek(off_t offset, int whence); 124ssize_t disk_buf_lseek(off_t offset, int whence);
121 125