32 #if FF_API_AVCODEC_RESAMPLE 
   34 #ifndef CONFIG_RESAMPLE_HP 
   35 #define FILTER_SHIFT 15 
   38 #define FELEM2 int32_t 
   39 #define FELEML int64_t 
   40 #define FELEM_MAX INT16_MAX 
   41 #define FELEM_MIN INT16_MIN 
   43 #elif !defined(CONFIG_RESAMPLE_AUDIOPHILE_KIDDY_MODE) 
   44 #define FILTER_SHIFT 30 
   47 #define FELEM2 int64_t 
   48 #define FELEML int64_t 
   49 #define FELEM_MAX INT32_MAX 
   50 #define FELEM_MIN INT32_MIN 
   51 #define WINDOW_TYPE 12 
   53 #define FILTER_SHIFT 0 
   58 #define WINDOW_TYPE 24 
   87     for(i=1; v != lastv; i++){
 
  106     const int center= (tap_count-1)/2;
 
  115     for(ph=0;ph<phase_count;ph++) {
 
  117         for(i=0;i<tap_count;i++) {
 
  118             x = 
M_PI * ((double)(i - center) - (double)ph / phase_count) * 
factor;
 
  124                 x = fabs(((
double)(i - center) - (
double)ph / phase_count) * factor);
 
  125                 if(x<1.0) y= 1 - 3*x*x + 2*x*x*x + d*(            -x*x + x*x*x);
 
  126                 else      y=                       d*(-4 + 8*x - 5*x*x + x*x*x);
 
  129                 w = 2.0*x / (factor*tap_count) + 
M_PI;
 
  130                 y *= 0.3635819 - 0.4891775 * cos(w) + 0.1365995 * cos(2*w) - 0.0106411 * cos(3*w);
 
  133                 w = 2.0*x / (factor*tap_count*
M_PI);
 
  143         for(i=0;i<tap_count;i++) {
 
  144 #ifdef CONFIG_RESAMPLE_AUDIOPHILE_KIDDY_MODE 
  145             filter[ph * tap_count + i] = tab[i] / norm;
 
  155         double sine[
LEN + tap_count];
 
  156         double filtered[
LEN];
 
  157         double maxff=-2, minff=2, maxsf=-2, minsf=2;
 
  158         for(i=0; i<
LEN; i++){
 
  159             double ss=0, sf=0, ff=0;
 
  160             for(j=0; j<LEN+tap_count; j++)
 
  161                 sine[j]= cos(i*j*
M_PI/LEN);
 
  162             for(j=0; j<
LEN; j++){
 
  165                 for(k=0; k<tap_count; k++)
 
  166                     sum += filter[ph * tap_count + k] * sine[k+j];
 
  168                 ss+= sine[j + center] * sine[j + center];
 
  169                 ff+= filtered[j] * filtered[j];
 
  170                 sf+= sine[j + center] * filtered[j];
 
  175             maxff= 
FFMAX(maxff, ff);
 
  176             minff= 
FFMIN(minff, ff);
 
  177             maxsf= 
FFMAX(maxsf, sf);
 
  178             minsf= 
FFMIN(minsf, sf);
 
  180                 av_log(
NULL, 
AV_LOG_ERROR, 
"i:%4d ss:%f ff:%13.6e-%13.6e sf:%13.6e-%13.6e\n", i, ss, maxff, minff, maxsf, minsf);
 
  194     double factor= 
FFMIN(out_rate * cutoff / in_rate, 1.0);
 
  195     int phase_count= 1<<phase_shift;
 
  246         int64_t index2= ((int64_t)index)<<32;
 
  250         for(dst_index=0; dst_index < dst_size; dst_index++){
 
  251             dst[dst_index] = src[index2>>32];
 
  254         index += dst_index * dst_incr;
 
  255         index += (frac + dst_index * (int64_t)dst_incr_frac) / c->
src_incr;
 
  256         frac   = (frac + dst_index * (int64_t)dst_incr_frac) % c->
src_incr;
 
  258     for(dst_index=0; dst_index < dst_size; dst_index++){
 
  263         if(sample_index < 0){
 
  265                 val += src[
FFABS(sample_index + i) % src_size] * filter[i];
 
  271                 val += src[sample_index + i] * (
FELEM2)filter[i];
 
  277                 val += src[sample_index + i] * (
FELEM2)filter[i];
 
  281 #ifdef CONFIG_RESAMPLE_AUDIOPHILE_KIDDY_MODE 
  282         dst[dst_index] = av_clip_int16(
lrintf(val));
 
  285         dst[dst_index] = (unsigned)(val + 32768) > 65535 ? (val>>31) ^ 32767 : val;
 
  288         frac += dst_incr_frac;
 
  295         if(dst_index + 1 == compensation_distance){
 
  296             compensation_distance= 0;
 
  305     if(compensation_distance){
 
  306         compensation_distance -= dst_index;
 
const char const char void * val
int av_resample(AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx)
Resample an array of samples using a previously configured context. 
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code. 
void av_resample_close(AVResampleContext *c)
static double bessel(double x)
0th order modified bessel function of the first kind. 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
simple assert() macros that are a bit more flexible than ISO C assert(). 
Libavcodec external API header. 
int compensation_distance
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction. 
void av_resample_compensate(AVResampleContext *c, int sample_delta, int compensation_distance)
Compensate samplerate/timestamp drift. 
static int build_filter(FELEM *filter, double factor, int tap_count, int phase_count, int scale, int type)
Build a polyphase filterbank. 
Describe the class of an AVClass context structure. 
static const int factor[16]
AVResampleContext * av_resample_init(int out_rate, int in_rate, int filter_size, int phase_shift, int linear, double cutoff)
Initialize an audio resampler. 
static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
common internal and external API header 
static const struct twinvq_data tab
static void * av_mallocz_array(size_t nmemb, size_t size)
#define av_malloc_array(a, b)
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...