~ubuntu-branches/ubuntu/utopic/libav/utopic-proposed

« back to all changes in this revision

Viewing changes to libavresample/resample_template.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler, Reinhard Tartler, Rico Tzschichholz
  • Date: 2014-08-30 11:02:45 UTC
  • mfrom: (1.3.47 sid)
  • Revision ID: package-import@ubuntu.com-20140830110245-io3dg7q85wfr7125
Tags: 6:11~beta1-2
[ Reinhard Tartler ]
* Make libavcodec-dev depend on libavresample-dev

[ Rico Tzschichholz ]
* Some fixes and leftovers from soname bumps

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
19
 */
20
20
 
 
21
#include <math.h>
 
22
#include <stdint.h>
 
23
 
 
24
#include "libavutil/common.h"
 
25
#include "internal.h"
 
26
 
21
27
#if defined(CONFIG_RESAMPLE_DBL)
22
28
#define SET_TYPE(func)  func ## _dbl
23
29
#define FELEM         double
48
54
#define DBL_TO_FELEM(d, v) d = av_clip_int16(lrint(v * (1 << 15)))
49
55
#endif
50
56
 
51
 
static void SET_TYPE(resample_one)(ResampleContext *c, int no_filter,
 
57
static void SET_TYPE(resample_nearest)(void *dst0, int dst_index, const void *src0, unsigned int index)
 
58
{
 
59
    FELEM *dst = dst0;
 
60
    const FELEM *src = src0;
 
61
    dst[dst_index] = src[index];
 
62
}
 
63
 
 
64
static void SET_TYPE(resample_linear)(ResampleContext *c, void *dst0, int dst_index,
 
65
                                      const void *src0, unsigned int index, int frac)
 
66
{
 
67
    FELEM *dst = dst0;
 
68
    const FELEM *src = src0;
 
69
    int i;
 
70
    unsigned int sample_index = index >> c->phase_shift;
 
71
    FELEM2 val = 0;
 
72
    FELEM *filter = ((FELEM *)c->filter_bank) +
 
73
                    c->filter_length * (index & c->phase_mask);
 
74
    FELEM2 v2 = 0;
 
75
 
 
76
    for (i = 0; i < c->filter_length; i++) {
 
77
        val += src[sample_index + i] * (FELEM2)filter[i];
 
78
        v2  += src[sample_index + i] * (FELEM2)filter[i + c->filter_length];
 
79
    }
 
80
    val += (v2 - val) * (FELEML)frac / c->src_incr;
 
81
 
 
82
    OUT(dst[dst_index], val);
 
83
}
 
84
 
 
85
static void SET_TYPE(resample_one)(ResampleContext *c,
52
86
                                   void *dst0, int dst_index, const void *src0,
53
 
                                   int src_size, int index, int frac)
 
87
                                   unsigned int index, int frac)
54
88
{
55
89
    FELEM *dst = dst0;
56
90
    const FELEM *src = src0;
57
 
 
58
 
    if (no_filter) {
59
 
        dst[dst_index] = src[index];
60
 
    } else {
61
 
        int i;
62
 
        int sample_index = index >> c->phase_shift;
63
 
        FELEM2 val = 0;
64
 
        FELEM *filter = ((FELEM *)c->filter_bank) +
65
 
                        c->filter_length * (index & c->phase_mask);
66
 
 
67
 
        if (sample_index < 0) {
68
 
            for (i = 0; i < c->filter_length; i++)
69
 
                val += src[FFABS(sample_index + i) % src_size] *
70
 
                       (FELEM2)filter[i];
71
 
        } else if (c->linear) {
72
 
            FELEM2 v2 = 0;
73
 
            for (i = 0; i < c->filter_length; i++) {
74
 
                val += src[abs(sample_index + i)] * (FELEM2)filter[i];
75
 
                v2  += src[abs(sample_index + i)] * (FELEM2)filter[i + c->filter_length];
76
 
            }
77
 
            val += (v2 - val) * (FELEML)frac / c->src_incr;
78
 
        } else {
79
 
            for (i = 0; i < c->filter_length; i++)
80
 
                val += src[sample_index + i] * (FELEM2)filter[i];
81
 
        }
82
 
 
83
 
        OUT(dst[dst_index], val);
84
 
    }
 
91
    int i;
 
92
    unsigned int sample_index = index >> c->phase_shift;
 
93
    FELEM2 val = 0;
 
94
    FELEM *filter = ((FELEM *)c->filter_bank) +
 
95
                    c->filter_length * (index & c->phase_mask);
 
96
 
 
97
    for (i = 0; i < c->filter_length; i++)
 
98
        val += src[sample_index + i] * (FELEM2)filter[i];
 
99
 
 
100
    OUT(dst[dst_index], val);
85
101
}
86
102
 
87
103
static void SET_TYPE(set_filter)(void *filter0, double *tab, int phase,