Skip to content

Commit

Permalink
Merge commit '254c95cdd1b669a722204a4a65974fc2523c8f83'
Browse files Browse the repository at this point in the history
* commit '254c95cdd1b669a722204a4a65974fc2523c8f83':
  resample: split linear into its own function

Merged-by: Michael Niedermayer <[email protected]>
  • Loading branch information
michaelni committed Apr 11, 2014
2 parents 65088b9 + 254c95c commit 662a8d8
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 15 deletions.
8 changes: 4 additions & 4 deletions libavresample/resample.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,22 +181,22 @@ ResampleContext *ff_audio_resample_init(AVAudioResampleContext *avr)

switch (avr->internal_sample_fmt) {
case AV_SAMPLE_FMT_DBLP:
c->resample_one = resample_one_dbl;
c->resample_one = c->linear ? resample_linear_dbl : resample_one_dbl;
c->resample_nearest = resample_nearest_dbl;
c->set_filter = set_filter_dbl;
break;
case AV_SAMPLE_FMT_FLTP:
c->resample_one = resample_one_flt;
c->resample_one = c->linear ? resample_linear_flt : resample_one_flt;
c->resample_nearest = resample_nearest_flt;
c->set_filter = set_filter_flt;
break;
case AV_SAMPLE_FMT_S32P:
c->resample_one = resample_one_s32;
c->resample_one = c->linear ? resample_linear_s32 : resample_one_s32;
c->resample_nearest = resample_nearest_s32;
c->set_filter = set_filter_s32;
break;
case AV_SAMPLE_FMT_S16P:
c->resample_one = resample_one_s16;
c->resample_one = c->linear ? resample_linear_s16 : resample_one_s16;
c->resample_nearest = resample_nearest_s16;
c->set_filter = set_filter_s16;
break;
Expand Down
34 changes: 23 additions & 11 deletions libavresample/resample_template.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,27 @@ static void SET_TYPE(resample_nearest)(void *dst0, int dst_index, const void *sr
dst[dst_index] = src[index];
}

static void SET_TYPE(resample_linear)(ResampleContext *c, void *dst0, int dst_index,
const void *src0, unsigned int index, int frac)
{
FELEM *dst = dst0;
const FELEM *src = src0;
int i;
unsigned int sample_index = index >> c->phase_shift;
FELEM2 val = 0;
FELEM *filter = ((FELEM *)c->filter_bank) +
c->filter_length * (index & c->phase_mask);
FELEM2 v2 = 0;

for (i = 0; i < c->filter_length; i++) {
val += src[sample_index + i] * (FELEM2)filter[i];
v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_length];
}
val += (v2 - val) * (FELEML)frac / c->src_incr;

OUT(dst[dst_index], val);
}

static void SET_TYPE(resample_one)(ResampleContext *c,
void *dst0, int dst_index, const void *src0,
unsigned int index, int frac)
Expand All @@ -73,17 +94,8 @@ static void SET_TYPE(resample_one)(ResampleContext *c,
FELEM *filter = ((FELEM *)c->filter_bank) +
c->filter_length * (index & c->phase_mask);

if (c->linear) {
FELEM2 v2 = 0;
for (i = 0; i < c->filter_length; i++) {
val += src[sample_index + i] * (FELEM2)filter[i];
v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_length];
}
val += (v2 - val) * (FELEML)frac / c->src_incr;
} else {
for (i = 0; i < c->filter_length; i++)
val += src[sample_index + i] * (FELEM2)filter[i];
}
for (i = 0; i < c->filter_length; i++)
val += src[sample_index + i] * (FELEM2)filter[i];

OUT(dst[dst_index], val);
}
Expand Down

0 comments on commit 662a8d8

Please sign in to comment.