diff options
Diffstat (limited to 'apps/plugins/mpegplayer/disk_buf.h')
-rw-r--r-- | apps/plugins/mpegplayer/disk_buf.h | 42 |
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 | |||
69 | struct 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 | |||
76 | void 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 */ |
63 | struct disk_buf | 80 | struct disk_buf |
@@ -88,20 +105,8 @@ struct disk_buf | |||
88 | 105 | ||
89 | extern struct disk_buf disk_buf SHAREDBSS_ATTR; | 106 | extern struct disk_buf disk_buf SHAREDBSS_ATTR; |
90 | 107 | ||
91 | static inline bool disk_buf_is_data_ready(struct stream_hdr *sh, | 108 | struct stream_hdr; |
92 | ssize_t margin) | 109 | bool 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 | ||
106 | bool disk_buf_init(void); | 111 | bool disk_buf_init(void); |
107 | void disk_buf_exit(void); | 112 | void disk_buf_exit(void); |
@@ -111,11 +116,10 @@ static inline int disk_buf_status(void) | |||
111 | 116 | ||
112 | int disk_buf_open(const char *filename); | 117 | int disk_buf_open(const char *filename); |
113 | void disk_buf_close(void); | 118 | void disk_buf_close(void); |
114 | ssize_t _disk_buf_getbuffer(size_t size, void **pp, void **pwrap, | 119 | ssize_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) \ | 121 | ssize_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)) | ||
119 | ssize_t disk_buf_read(void *buffer, size_t size); | 123 | ssize_t disk_buf_read(void *buffer, size_t size); |
120 | ssize_t disk_buf_lseek(off_t offset, int whence); | 124 | ssize_t disk_buf_lseek(off_t offset, int whence); |
121 | 125 | ||