~ubuntu-branches/ubuntu/intrepid/gstreamer0.10-ffmpeg/intrepid

« back to all changes in this revision

Viewing changes to gst-libs/ext/ffmpeg/libavcodec/liba52/resample_c.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2005-12-17 23:59:34 UTC
  • Revision ID: james.westby@ubuntu.com-20051217235934-qu7f84arvb9r3id3
Tags: upstream-0.10.0
ImportĀ upstreamĀ versionĀ 0.10.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// this code is based on a52dec/libao/audio_out_oss.c
 
2
 
 
3
static inline int16_t convert (int32_t i)
 
4
{
 
5
    if (i > 0x43c07fff)
 
6
        return 32767;
 
7
    else if (i < 0x43bf8000)
 
8
        return -32768;
 
9
    else
 
10
        return i - 0x43c00000;
 
11
}
 
12
 
 
13
static int a52_resample_MONO_to_5_C(float * _f, int16_t * s16){
 
14
    int i;
 
15
    int32_t * f = (int32_t *) _f;
 
16
        for (i = 0; i < 256; i++) {
 
17
            s16[5*i] = s16[5*i+1] = s16[5*i+2] = s16[5*i+3] = 0;
 
18
            s16[5*i+4] = convert (f[i]);
 
19
        }
 
20
    return 5*256;
 
21
}
 
22
 
 
23
static int a52_resample_MONO_to_1_C(float * _f, int16_t * s16){
 
24
    int i;
 
25
    int32_t * f = (int32_t *) _f;
 
26
        for (i = 0; i < 256; i++) {
 
27
            s16[i] = convert (f[i]);
 
28
        }
 
29
    return 1*256;
 
30
}
 
31
 
 
32
static int a52_resample_STEREO_to_2_C(float * _f, int16_t * s16){
 
33
    int i;
 
34
    int32_t * f = (int32_t *) _f;
 
35
        for (i = 0; i < 256; i++) {
 
36
            s16[2*i] = convert (f[i]);
 
37
            s16[2*i+1] = convert (f[i+256]);
 
38
        }
 
39
    return 2*256;
 
40
}
 
41
 
 
42
static int a52_resample_3F_to_5_C(float * _f, int16_t * s16){
 
43
    int i;
 
44
    int32_t * f = (int32_t *) _f;
 
45
        for (i = 0; i < 256; i++) {
 
46
            s16[5*i] = convert (f[i]);
 
47
            s16[5*i+1] = convert (f[i+512]);
 
48
            s16[5*i+2] = s16[5*i+3] = 0;
 
49
            s16[5*i+4] = convert (f[i+256]);
 
50
        }
 
51
    return 5*256;
 
52
}
 
53
 
 
54
static int a52_resample_2F_2R_to_4_C(float * _f, int16_t * s16){
 
55
    int i;
 
56
    int32_t * f = (int32_t *) _f;
 
57
        for (i = 0; i < 256; i++) {
 
58
            s16[4*i] = convert (f[i]);
 
59
            s16[4*i+1] = convert (f[i+256]);
 
60
            s16[4*i+2] = convert (f[i+512]);
 
61
            s16[4*i+3] = convert (f[i+768]);
 
62
        }
 
63
    return 4*256;
 
64
}
 
65
 
 
66
static int a52_resample_3F_2R_to_5_C(float * _f, int16_t * s16){
 
67
    int i;
 
68
    int32_t * f = (int32_t *) _f;
 
69
        for (i = 0; i < 256; i++) {
 
70
            s16[5*i] = convert (f[i]);
 
71
            s16[5*i+1] = convert (f[i+512]);
 
72
            s16[5*i+2] = convert (f[i+768]);
 
73
            s16[5*i+3] = convert (f[i+1024]);
 
74
            s16[5*i+4] = convert (f[i+256]);
 
75
        }
 
76
    return 5*256;
 
77
}
 
78
 
 
79
static int a52_resample_MONO_LFE_to_6_C(float * _f, int16_t * s16){
 
80
    int i;
 
81
    int32_t * f = (int32_t *) _f;
 
82
        for (i = 0; i < 256; i++) {
 
83
            s16[6*i] = s16[6*i+1] = s16[6*i+2] = s16[6*i+3] = 0;
 
84
            s16[6*i+4] = convert (f[i+256]);
 
85
            s16[6*i+5] = convert (f[i]);
 
86
        }
 
87
    return 6*256;
 
88
}
 
89
 
 
90
static int a52_resample_STEREO_LFE_to_6_C(float * _f, int16_t * s16){
 
91
    int i;
 
92
    int32_t * f = (int32_t *) _f;
 
93
        for (i = 0; i < 256; i++) {
 
94
            s16[6*i] = convert (f[i+256]);
 
95
            s16[6*i+1] = convert (f[i+512]);
 
96
            s16[6*i+2] = s16[6*i+3] = s16[6*i+4] = 0;
 
97
            s16[6*i+5] = convert (f[i]);
 
98
        }
 
99
    return 6*256;
 
100
}
 
101
 
 
102
static int a52_resample_3F_LFE_to_6_C(float * _f, int16_t * s16){
 
103
    int i;
 
104
    int32_t * f = (int32_t *) _f;
 
105
        for (i = 0; i < 256; i++) {
 
106
            s16[6*i] = convert (f[i+256]);
 
107
            s16[6*i+1] = convert (f[i+768]);
 
108
            s16[6*i+2] = s16[6*i+3] = 0;
 
109
            s16[6*i+4] = convert (f[i+512]);
 
110
            s16[6*i+5] = convert (f[i]);
 
111
        }
 
112
    return 6*256;
 
113
}
 
114
 
 
115
static int a52_resample_2F_2R_LFE_to_6_C(float * _f, int16_t * s16){
 
116
    int i;
 
117
    int32_t * f = (int32_t *) _f;
 
118
        for (i = 0; i < 256; i++) {
 
119
            s16[6*i] = convert (f[i+256]);
 
120
            s16[6*i+1] = convert (f[i+512]);
 
121
            s16[6*i+2] = convert (f[i+768]);
 
122
            s16[6*i+3] = convert (f[i+1024]);
 
123
            s16[6*i+4] = 0;
 
124
            s16[6*i+5] = convert (f[i]);
 
125
        }
 
126
    return 6*256;
 
127
}
 
128
 
 
129
static int a52_resample_3F_2R_LFE_to_6_C(float * _f, int16_t * s16){
 
130
    int i;
 
131
    int32_t * f = (int32_t *) _f;
 
132
        for (i = 0; i < 256; i++) {
 
133
            s16[6*i] = convert (f[i+256]);
 
134
            s16[6*i+1] = convert (f[i+768]);
 
135
            s16[6*i+2] = convert (f[i+1024]);
 
136
            s16[6*i+3] = convert (f[i+1280]);
 
137
            s16[6*i+4] = convert (f[i+512]);
 
138
            s16[6*i+5] = convert (f[i]);
 
139
        }
 
140
    return 6*256;
 
141
}
 
142
 
 
143
 
 
144
static void* a52_resample_C(int flags, int ch){
 
145
    switch (flags) {
 
146
    case A52_MONO:
 
147
        if(ch==5) return a52_resample_MONO_to_5_C;
 
148
        if(ch==1) return a52_resample_MONO_to_1_C;
 
149
        break;
 
150
    case A52_CHANNEL:
 
151
    case A52_STEREO:
 
152
    case A52_DOLBY:
 
153
        if(ch==2) return a52_resample_STEREO_to_2_C;
 
154
        break;
 
155
    case A52_3F:
 
156
        if(ch==5) return a52_resample_3F_to_5_C;
 
157
        break;
 
158
    case A52_2F2R:
 
159
        if(ch==4) return a52_resample_2F_2R_to_4_C;
 
160
        break;
 
161
    case A52_3F2R:
 
162
        if(ch==5) return a52_resample_3F_2R_to_5_C;
 
163
        break;
 
164
    case A52_MONO | A52_LFE:
 
165
        if(ch==6) return a52_resample_MONO_LFE_to_6_C;
 
166
        break;
 
167
    case A52_CHANNEL | A52_LFE:
 
168
    case A52_STEREO | A52_LFE:
 
169
    case A52_DOLBY | A52_LFE:
 
170
        if(ch==6) return a52_resample_STEREO_LFE_to_6_C;
 
171
        break;
 
172
    case A52_3F | A52_LFE:
 
173
        if(ch==6) return a52_resample_3F_LFE_to_6_C;
 
174
        break;
 
175
    case A52_2F2R | A52_LFE:
 
176
        if(ch==6) return a52_resample_2F_2R_LFE_to_6_C;
 
177
        break;
 
178
    case A52_3F2R | A52_LFE:
 
179
        if(ch==6) return a52_resample_3F_2R_LFE_to_6_C;
 
180
        break;
 
181
    }
 
182
    return NULL;
 
183
}