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.
45 lines
1.7 KiB
45 lines
1.7 KiB
/* |
|
index.h - compact version of famous library mpg123 |
|
Copyright (C) 2017 Uncle Mike |
|
|
|
This program is free software: you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation, either version 3 of the License, or |
|
(at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
*/ |
|
|
|
#ifndef INDEX_H |
|
#define INDEX_H |
|
|
|
typedef struct frame_index_s |
|
{ |
|
mpg_off_t *data; // actual data, the frame positions |
|
mpg_off_t step; // advancement in frame number per index point |
|
mpg_off_t next; // frame offset supposed to come next into the index |
|
size_t size; // total number of possible entries |
|
size_t fill; // number of used entries |
|
size_t grow_size;// if > 0: index allowed to grow on need with these steps, instead of lowering resolution |
|
} frame_index_t; |
|
|
|
// the condition for a framenum to be appended to the index. |
|
#define FI_NEXT( fi, framenum ) ((fi).size && framenum == (fi).next) |
|
|
|
// initialize stuff, set things to zero and NULL... |
|
void fi_init( frame_index_t *fi ); |
|
// deallocate/zero things. |
|
void fi_exit( frame_index_t *fi ); |
|
// prepare a given size, preserving current fill, if possible. |
|
int fi_resize( frame_index_t *fi, size_t newsize ); |
|
// append a frame position, reducing index density if needed. |
|
void fi_add( frame_index_t *fi, mpg_off_t pos ); |
|
// replace the frame index |
|
int fi_set( frame_index_t *fi, mpg_off_t *offsets, mpg_off_t step, size_t fill ); |
|
// empty the index (setting fill=0 and step=1), but keep current size. |
|
void fi_reset( frame_index_t *fi ); |
|
|
|
#endif//INDEX_H
|