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.
91 lines
3.0 KiB
91 lines
3.0 KiB
7 years ago
|
/*
|
||
|
frame.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 FRAME_H
|
||
|
#define FRAME_H
|
||
|
|
||
|
#define MAXFRAMESIZE 3456 // max = 1728
|
||
|
#define NUM_CHANNELS 2
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
short bits;
|
||
|
short d;
|
||
|
} al_table_t;
|
||
|
|
||
|
// the output buffer, used to be pcm_sample, pcm_point and audiobufsize
|
||
|
typedef struct outbuffer_s
|
||
|
{
|
||
|
byte *data; // main data pointer, aligned
|
||
|
byte *p; // read pointer
|
||
|
size_t fill; // fill from read pointer
|
||
|
size_t size;
|
||
|
byte *rdata; // unaligned base pointer
|
||
|
} outbuffer_t;
|
||
|
|
||
|
typedef struct audioformat_s
|
||
|
{
|
||
|
int encoding; // final encoding, after post-processing.
|
||
|
int encsize; // size of one sample in bytes, plain int should be fine here...
|
||
|
int dec_enc; // encoding of decoder synth.
|
||
|
int dec_encsize; // size of one decoder sample.
|
||
|
int channels;
|
||
|
int rate;
|
||
|
} audioformat_t;
|
||
|
|
||
|
typedef struct mpg123_parm_s
|
||
|
{
|
||
|
int verbose; // verbose level
|
||
|
long flags; // combination of above
|
||
|
int down_sample;
|
||
|
int rva; // (which) rva to do: 0: nothing, 1: radio/mix/track 2: album/audiophile
|
||
|
long halfspeed;
|
||
|
long doublespeed;
|
||
|
long timeout;
|
||
|
|
||
|
char audio_caps[NUM_CHANNELS][MPG123_RATES+1][MPG123_ENCODINGS];
|
||
|
double outscale;
|
||
|
long resync_limit;
|
||
|
long index_size; // Long, because: negative values have a meaning.
|
||
|
long preframes;
|
||
|
long feedpool;
|
||
|
long feedbuffer;
|
||
|
} mpg123_parm_t;
|
||
|
|
||
|
// generic init, does not include dynamic buffers
|
||
|
void frame_init( mpg123_handle_t *fr );
|
||
|
void frame_init_par( mpg123_handle_t *fr, mpg123_parm_t *mp );
|
||
|
int frame_outbuffer( mpg123_handle_t *fr );
|
||
|
int frame_output_format( mpg123_handle_t *fr );
|
||
|
int frame_buffers( mpg123_handle_t *fr );
|
||
|
int frame_reset( mpg123_handle_t *fr );
|
||
|
int frame_buffers_reset( mpg123_handle_t *fr );
|
||
|
void frame_exit( mpg123_handle_t *fr );
|
||
|
int frame_index_setup( mpg123_handle_t *fr );
|
||
|
mpg_off_t frame_expect_outsamples( mpg123_handle_t *fr );
|
||
|
mpg_off_t frame_offset( mpg123_handle_t *fr, mpg_off_t outs );
|
||
|
void frame_gapless_init( mpg123_handle_t *fr, mpg_off_t framecount, mpg_off_t bskip, mpg_off_t eskip );
|
||
|
void frame_gapless_realinit( mpg123_handle_t *fr );
|
||
|
void frame_gapless_update( mpg123_handle_t *fr, mpg_off_t total_samples );
|
||
|
mpg_off_t frame_index_find( mpg123_handle_t *fr, mpg_off_t want_frame, mpg_off_t* get_frame );
|
||
|
mpg_off_t frame_outs( mpg123_handle_t *fr, mpg_off_t num );
|
||
|
void frame_set_seek( mpg123_handle_t *fr, mpg_off_t sp );
|
||
|
void frame_set_frameseek( mpg123_handle_t *fr, mpg_off_t fe );
|
||
|
int frame_fill_toc( mpg123_handle_t *fr, byte *in );
|
||
|
void frame_skip( mpg123_handle_t *fr );
|
||
|
void do_rva( mpg123_handle_t *fr );
|
||
|
|
||
|
#endif//FRAME_H
|