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