MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / av_resample

Function av_resample

libavcodec/resample2.c:214–302  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

212}
213
214int av_resample(AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx){
215 int dst_index, i;
216 int index= c->index;
217 int frac= c->frac;
218 int dst_incr_frac= c->dst_incr % c->src_incr;
219 int dst_incr= c->dst_incr / c->src_incr;
220 int compensation_distance= c->compensation_distance;
221
222 if(compensation_distance == 0 && c->filter_length == 1 && c->phase_shift==0){
223 int64_t index2= ((int64_t)index)<<32;
224 int64_t incr= (1LL<<32) * c->dst_incr / c->src_incr;
225 dst_size= FFMIN(dst_size, (src_size-1-index) * (int64_t)c->src_incr / c->dst_incr);
226
227 for(dst_index=0; dst_index < dst_size; dst_index++){
228 dst[dst_index] = src[index2>>32];
229 index2 += incr;
230 }
231 frac += dst_index * dst_incr_frac;
232 index += dst_index * dst_incr;
233 index += frac / c->src_incr;
234 frac %= c->src_incr;
235 }else{
236 for(dst_index=0; dst_index < dst_size; dst_index++){
237 FELEM *filter= c->filter_bank + c->filter_length*(index & c->phase_mask);
238 int sample_index= index >> c->phase_shift;
239 FELEM2 val=0;
240
241 if(sample_index < 0){
242 for(i=0; i<c->filter_length; i++)
243 val += src[FFABS(sample_index + i) % src_size] * filter[i];
244 }else if(sample_index + c->filter_length > src_size){
245 break;
246 }else if(c->linear){
247 FELEM2 v2=0;
248 for(i=0; i<c->filter_length; i++){
249 val += src[sample_index + i] * (FELEM2)filter[i];
250 v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_length];
251 }
252 val+=(v2-val)*(FELEML)frac / c->src_incr;
253 }else{
254 for(i=0; i<c->filter_length; i++){
255 val += src[sample_index + i] * (FELEM2)filter[i];
256 }
257 }
258
259#ifdef CONFIG_RESAMPLE_AUDIOPHILE_KIDDY_MODE
260 dst[dst_index] = av_clip_int16(lrintf(val));
261#else
262 val = (val + (1<<(FILTER_SHIFT-1)))>>FILTER_SHIFT;
263 dst[dst_index] = (unsigned)(val + 32768) > 65535 ? (val>>31) ^ 32767 : val;
264#endif
265
266 frac += dst_incr_frac;
267 index += dst_incr;
268 if(frac >= c->src_incr){
269 frac -= c->src_incr;
270 index++;
271 }

Callers 1

audio_resampleFunction · 0.85

Calls 4

av_clip_int16Function · 0.85
lrintfFunction · 0.85
av_resample_compensateFunction · 0.85
av_logFunction · 0.85

Tested by

no test coverage detected