/* 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