resample.h 2.85 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/* Resampling library
 * Copyright (C) <2001> David Schleef <ds@schleef.org>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or any later version.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */


#ifndef __RESAMPLE_H__
#define __RESAMPLE_H__

24 25
#include "functable.h"
#include "buffer.h"
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

typedef enum {
	RESAMPLE_FORMAT_S16 = 0,
	RESAMPLE_FORMAT_S32,
	RESAMPLE_FORMAT_F32,
        RESAMPLE_FORMAT_F64
} ResampleFormat;

typedef void (*ResampleCallback) (void *);

typedef struct _ResampleState ResampleState;

struct _ResampleState {
	/* parameters */

	int n_channels;
	ResampleFormat format;

	int filter_length;

	double i_rate;
	double o_rate;

        int method;

	/* internal parameters */

        int need_reinit;

	double halftaps;

	/* filter state */

        void *o_buf;
        int o_size;

        AudioresampleBufferQueue *queue;
        int eos;
        int started;

	int sample_size;

	void *buffer;
	int buffer_len;
70
	int buffer_filled;
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

	double i_start;
	double o_start;

	double i_inc;
	double o_inc;

        double sinc_scale;

	double i_end;
	double o_end;

	int i_samples;
	int o_samples;

	//void *i_buf;

        Functable *ft;

        double *out_tmp;
};

93 94
void resample_init (void);
void resample_cleanup (void);
95 96 97 98 99 100 101

ResampleState *resample_new (void);
void resample_free (ResampleState *state);

void resample_add_input_data (ResampleState * r, void *data, int size,
    ResampleCallback free_func, void *closure);
void resample_input_eos (ResampleState *r);
102 103
void resample_input_flush (ResampleState *r);
void resample_input_pushthrough (ResampleState *r);
104 105

int resample_get_output_size_for_input (ResampleState * r, int size);
106 107
int resample_get_input_size_for_output (ResampleState * r, int size);

108 109 110 111 112 113 114 115 116 117 118 119 120
int resample_get_output_size (ResampleState *r);
int resample_get_output_data (ResampleState *r, void *data, int size);

void resample_set_filter_length (ResampleState *r, int length);
void resample_set_input_rate (ResampleState *r, double rate);
void resample_set_output_rate (ResampleState *r, double rate);
void resample_set_n_channels (ResampleState *r, int n_channels);
void resample_set_format (ResampleState *r, ResampleFormat format);
void resample_set_method (ResampleState *r, int method);
int resample_format_size (ResampleFormat format);

#endif /* __RESAMPLE_H__ */