• Home
  • Raw
  • Download

Lines Matching full:s

32 int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map){  in swr_set_channel_mapping()  argument
33 if(!s || s->in_convert) // s needs to be allocated but not initialized in swr_set_channel_mapping()
35 s->channel_map = channel_map; in swr_set_channel_mapping()
41 struct SwrContext *swr_alloc_set_opts(struct SwrContext *s, in swr_alloc_set_opts() argument
45 if(!s) s= swr_alloc(); in swr_alloc_set_opts()
46 if(!s) return NULL; in swr_alloc_set_opts()
48 s->log_level_offset= log_offset; in swr_alloc_set_opts()
49 s->log_ctx= log_ctx; in swr_alloc_set_opts()
51 if (av_opt_set_int(s, "ocl", out_ch_layout, 0) < 0) in swr_alloc_set_opts()
54 if (av_opt_set_int(s, "osf", out_sample_fmt, 0) < 0) in swr_alloc_set_opts()
57 if (av_opt_set_int(s, "osr", out_sample_rate, 0) < 0) in swr_alloc_set_opts()
60 if (av_opt_set_int(s, "icl", in_ch_layout, 0) < 0) in swr_alloc_set_opts()
63 if (av_opt_set_int(s, "isf", in_sample_fmt, 0) < 0) in swr_alloc_set_opts()
66 if (av_opt_set_int(s, "isr", in_sample_rate, 0) < 0) in swr_alloc_set_opts()
69 if (av_opt_set_int(s, "ich", av_get_channel_layout_nb_channels(s-> user_in_ch_layout), 0) < 0) in swr_alloc_set_opts()
72 if (av_opt_set_int(s, "och", av_get_channel_layout_nb_channels(s->user_out_ch_layout), 0) < 0) in swr_alloc_set_opts()
75 av_opt_set_int(s, "uch", 0, 0); in swr_alloc_set_opts()
76 return s; in swr_alloc_set_opts()
78 av_log(s, AV_LOG_ERROR, "Failed to set option\n"); in swr_alloc_set_opts()
79 swr_free(&s); in swr_alloc_set_opts()
89 struct SwrContext *s = *ps; in swr_alloc_set_opts2() local
92 if (!s) s = swr_alloc(); in swr_alloc_set_opts2()
93 if (!s) return AVERROR(ENOMEM); in swr_alloc_set_opts2()
95 *ps = s; in swr_alloc_set_opts2()
97 s->log_level_offset = log_offset; in swr_alloc_set_opts2()
98 s->log_ctx = log_ctx; in swr_alloc_set_opts2()
100 if ((ret = av_opt_set_chlayout(s, "ochl", out_ch_layout, 0)) < 0) in swr_alloc_set_opts2()
103 if ((ret = av_opt_set_int(s, "osf", out_sample_fmt, 0)) < 0) in swr_alloc_set_opts2()
106 if ((ret = av_opt_set_int(s, "osr", out_sample_rate, 0)) < 0) in swr_alloc_set_opts2()
109 if ((ret = av_opt_set_chlayout(s, "ichl", in_ch_layout, 0)) < 0) in swr_alloc_set_opts2()
112 if ((ret = av_opt_set_int(s, "isf", in_sample_fmt, 0)) < 0) in swr_alloc_set_opts2()
115 if ((ret = av_opt_set_int(s, "isr", in_sample_rate, 0)) < 0) in swr_alloc_set_opts2()
118 av_opt_set_int(s, "uch", 0, 0); in swr_alloc_set_opts2()
122 av_opt_set_int(s, "icl", 0, 0); in swr_alloc_set_opts2()
123 av_opt_set_int(s, "ocl", 0, 0); in swr_alloc_set_opts2()
124 av_opt_set_int(s, "ich", 0, 0); in swr_alloc_set_opts2()
125 av_opt_set_int(s, "och", 0, 0); in swr_alloc_set_opts2()
130 av_log(s, AV_LOG_ERROR, "Failed to set option\n"); in swr_alloc_set_opts2()
148 static void clear_context(SwrContext *s){ in clear_context() argument
149 s->in_buffer_index= 0; in clear_context()
150 s->in_buffer_count= 0; in clear_context()
151 s->resample_in_constraint= 0; in clear_context()
152 memset(s->in.ch, 0, sizeof(s->in.ch)); in clear_context()
153 memset(s->out.ch, 0, sizeof(s->out.ch)); in clear_context()
154 free_temp(&s->postin); in clear_context()
155 free_temp(&s->midbuf); in clear_context()
156 free_temp(&s->preout); in clear_context()
157 free_temp(&s->in_buffer); in clear_context()
158 free_temp(&s->silence); in clear_context()
159 free_temp(&s->drop_temp); in clear_context()
160 free_temp(&s->dither.noise); in clear_context()
161 free_temp(&s->dither.temp); in clear_context()
162 av_channel_layout_uninit(&s->in_ch_layout); in clear_context()
163 av_channel_layout_uninit(&s->out_ch_layout); in clear_context()
164 swri_audio_convert_free(&s-> in_convert); in clear_context()
165 swri_audio_convert_free(&s->out_convert); in clear_context()
166 swri_audio_convert_free(&s->full_convert); in clear_context()
167 swri_rematrix_free(s); in clear_context()
169 s->delayed_samples_fixup = 0; in clear_context()
170 s->flushed = 0; in clear_context()
174 SwrContext *s= *ss; in swr_free() local
175 if(s){ in swr_free()
176 clear_context(s); in swr_free()
177 av_channel_layout_uninit(&s->user_in_chlayout); in swr_free()
178 av_channel_layout_uninit(&s->user_out_chlayout); in swr_free()
180 if (s->resampler) in swr_free()
181 s->resampler->free(&s->resample); in swr_free()
187 av_cold void swr_close(SwrContext *s){ in swr_close() argument
188 clear_context(s); in swr_close()
191 av_cold int swr_init(struct SwrContext *s){ in swr_init() argument
195 clear_context(s); in swr_init()
197 if(s-> in_sample_fmt >= AV_SAMPLE_FMT_NB){ in swr_init()
198 av_log(s, AV_LOG_ERROR, "Requested input sample format %d is invalid\n", s->in_sample_fmt); in swr_init()
201 if(s->out_sample_fmt >= AV_SAMPLE_FMT_NB){ in swr_init()
202 … av_log(s, AV_LOG_ERROR, "Requested output sample format %d is invalid\n", s->out_sample_fmt); in swr_init()
206 if(s-> in_sample_rate <= 0){ in swr_init()
207 av_log(s, AV_LOG_ERROR, "Requested input sample rate %d is invalid\n", s->in_sample_rate); in swr_init()
210 if(s->out_sample_rate <= 0){ in swr_init()
211 av_log(s, AV_LOG_ERROR, "Requested output sample rate %d is invalid\n", s->out_sample_rate); in swr_init()
214 s->used_ch_count = s->user_used_ch_count; in swr_init()
216 s->out.ch_count = s-> user_out_ch_count; in swr_init()
217 s-> in.ch_count = s-> user_in_ch_count; in swr_init()
220 if ((s->user_in_ch_count && s->user_in_ch_count != s->user_in_chlayout.nb_channels) || in swr_init()
221 (s->user_in_ch_layout && (s->user_in_chlayout.order != AV_CHANNEL_ORDER_NATIVE || in swr_init()
222 s->user_in_chlayout.u.mask != s->user_in_ch_layout))) { in swr_init()
223 av_channel_layout_uninit(&s->in_ch_layout); in swr_init()
224 if (s->user_in_ch_layout) in swr_init()
225 av_channel_layout_from_mask(&s->in_ch_layout, s->user_in_ch_layout); in swr_init()
227 s->in_ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; in swr_init()
228 s->in_ch_layout.nb_channels = s->user_in_ch_count; in swr_init()
230 } else if (av_channel_layout_check(&s->user_in_chlayout)) in swr_init()
231 av_channel_layout_copy(&s->in_ch_layout, &s->user_in_chlayout); in swr_init()
233 if ((s->user_out_ch_count && s->user_out_ch_count != s->user_out_chlayout.nb_channels) || in swr_init()
234 (s->user_out_ch_layout && (s->user_out_chlayout.order != AV_CHANNEL_ORDER_NATIVE || in swr_init()
235 s->user_out_chlayout.u.mask != s->user_out_ch_layout))) { in swr_init()
236 av_channel_layout_uninit(&s->out_ch_layout); in swr_init()
237 if (s->user_out_ch_layout) in swr_init()
238 av_channel_layout_from_mask(&s->out_ch_layout, s->user_out_ch_layout); in swr_init()
240 s->out_ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; in swr_init()
241 s->out_ch_layout.nb_channels = s->user_out_ch_count; in swr_init()
243 } else if (av_channel_layout_check(&s->user_out_chlayout)) in swr_init()
244 av_channel_layout_copy(&s->out_ch_layout, &s->user_out_chlayout); in swr_init()
246 if (!s->out.ch_count && !s->user_out_ch_layout) in swr_init()
247 s->out.ch_count = s->out_ch_layout.nb_channels; in swr_init()
248 if (!s-> in.ch_count && !s-> user_in_ch_layout) in swr_init()
249 s-> in.ch_count = s->in_ch_layout.nb_channels; in swr_init()
251 …if (!(ret = av_channel_layout_check(&s->in_ch_layout)) || s->in_ch_layout.nb_channels > SWR_CH_MAX… in swr_init()
253 av_channel_layout_describe(&s->in_ch_layout, l1, sizeof(l1)); in swr_init()
254 …av_log(s, AV_LOG_WARNING, "Input channel layout \"%s\" is invalid or unsupported.\n", ret ? l1 : "… in swr_init()
258 …if (!(ret = av_channel_layout_check(&s->out_ch_layout)) || s->out_ch_layout.nb_channels > SWR_CH_M… in swr_init()
260 av_channel_layout_describe(&s->out_ch_layout, l2, sizeof(l2)); in swr_init()
261 …av_log(s, AV_LOG_WARNING, "Output channel layout \"%s\" is invalid or unsupported.\n", ret ? l2 : … in swr_init()
265 s->out.ch_count = s-> user_out_chlayout.nb_channels; in swr_init()
266 s-> in.ch_count = s-> user_in_chlayout.nb_channels; in swr_init()
268 …if (!(ret = av_channel_layout_check(&s->user_in_chlayout)) || s->user_in_chlayout.nb_channels > SW… in swr_init()
270 av_channel_layout_describe(&s->user_in_chlayout, l1, sizeof(l1)); in swr_init()
271 …av_log(s, AV_LOG_WARNING, "Input channel layout \"%s\" is invalid or unsupported.\n", ret ? l1 : "… in swr_init()
275 …if (!(ret = av_channel_layout_check(&s->user_out_chlayout)) || s->user_out_chlayout.nb_channels > … in swr_init()
277 av_channel_layout_describe(&s->user_out_chlayout, l2, sizeof(l2)); in swr_init()
278 …av_log(s, AV_LOG_WARNING, "Output channel layout \"%s\" is invalid or unsupported.\n", ret ? l2 : … in swr_init()
282 ret = av_channel_layout_copy(&s->in_ch_layout, &s->user_in_chlayout); in swr_init()
283 ret |= av_channel_layout_copy(&s->out_ch_layout, &s->user_out_chlayout); in swr_init()
288 s->int_sample_fmt= s->user_int_sample_fmt; in swr_init()
290 s->dither.method = s->user_dither_method; in swr_init()
292 switch(s->engine){ in swr_init()
294 case SWR_ENGINE_SOXR: s->resampler = &swri_soxr_resampler; break; in swr_init()
296 case SWR_ENGINE_SWR : s->resampler = &swri_resampler; break; in swr_init()
298 av_log(s, AV_LOG_ERROR, "Requested resampling engine is unavailable\n"); in swr_init()
302 if(!s->used_ch_count) in swr_init()
303 s->used_ch_count= s->in.ch_count; in swr_init()
305 …if (s->used_ch_count && s->in_ch_layout.order != AV_CHANNEL_ORDER_UNSPEC && s->used_ch_count != s-… in swr_init()
306 …av_log(s, AV_LOG_WARNING, "Input channel layout has a different number of channels than the number… in swr_init()
307 av_channel_layout_uninit(&s->in_ch_layout); in swr_init()
310 if (s->in_ch_layout.order == AV_CHANNEL_ORDER_UNSPEC) in swr_init()
311 av_channel_layout_default(&s->in_ch_layout, s->used_ch_count); in swr_init()
312 if (s->out_ch_layout.order == AV_CHANNEL_ORDER_UNSPEC) in swr_init()
313 av_channel_layout_default(&s->out_ch_layout, s->out.ch_count); in swr_init()
315 s->rematrix = av_channel_layout_compare(&s->out_ch_layout, &s->in_ch_layout) || in swr_init()
316 s->rematrix_volume!=1.0 || in swr_init()
317 s->rematrix_custom; in swr_init()
319 if(s->int_sample_fmt == AV_SAMPLE_FMT_NONE){ in swr_init()
320 if( av_get_bytes_per_sample(s-> in_sample_fmt) <= 2 in swr_init()
321 && av_get_bytes_per_sample(s->out_sample_fmt) <= 2){ in swr_init()
322 s->int_sample_fmt= AV_SAMPLE_FMT_S16P; in swr_init()
323 }else if( av_get_bytes_per_sample(s-> in_sample_fmt) <= 2 in swr_init()
324 && !s->rematrix in swr_init()
325 && s->out_sample_rate==s->in_sample_rate in swr_init()
326 && !(s->flags & SWR_FLAG_RESAMPLE)){ in swr_init()
327 s->int_sample_fmt= AV_SAMPLE_FMT_S16P; in swr_init()
328 }else if( av_get_planar_sample_fmt(s-> in_sample_fmt) == AV_SAMPLE_FMT_S32P in swr_init()
329 && av_get_planar_sample_fmt(s->out_sample_fmt) == AV_SAMPLE_FMT_S32P in swr_init()
330 && !s->rematrix in swr_init()
331 && s->out_sample_rate == s->in_sample_rate in swr_init()
332 && !(s->flags & SWR_FLAG_RESAMPLE) in swr_init()
333 && s->engine != SWR_ENGINE_SOXR){ in swr_init()
334 s->int_sample_fmt= AV_SAMPLE_FMT_S32P; in swr_init()
335 }else if(av_get_bytes_per_sample(s->in_sample_fmt) <= 4){ in swr_init()
336 s->int_sample_fmt= AV_SAMPLE_FMT_FLTP; in swr_init()
338 s->int_sample_fmt= AV_SAMPLE_FMT_DBLP; in swr_init()
341 …av_log(s, AV_LOG_DEBUG, "Using %s internally between filters\n", av_get_sample_fmt_name(s->int_sam… in swr_init()
343 if( s->int_sample_fmt != AV_SAMPLE_FMT_S16P in swr_init()
344 &&s->int_sample_fmt != AV_SAMPLE_FMT_S32P in swr_init()
345 &&s->int_sample_fmt != AV_SAMPLE_FMT_S64P in swr_init()
346 &&s->int_sample_fmt != AV_SAMPLE_FMT_FLTP in swr_init()
347 &&s->int_sample_fmt != AV_SAMPLE_FMT_DBLP){ in swr_init()
348 …v_log(s, AV_LOG_ERROR, "Requested sample format %s is not supported internally, s16p/s32p/s64p/flt… in swr_init()
352 set_audiodata_fmt(&s-> in, s-> in_sample_fmt); in swr_init()
353 set_audiodata_fmt(&s->out, s->out_sample_fmt); in swr_init()
355 if (s->firstpts_in_samples != AV_NOPTS_VALUE) { in swr_init()
356 if (!s->async && s->min_compensation >= FLT_MAX/2) in swr_init()
357 s->async = 1; in swr_init()
358 s->firstpts = in swr_init()
359 s->outpts = s->firstpts_in_samples * s->out_sample_rate; in swr_init()
361 s->firstpts = AV_NOPTS_VALUE; in swr_init()
363 if (s->async) { in swr_init()
364 if (s->min_compensation >= FLT_MAX/2) in swr_init()
365 s->min_compensation = 0.001; in swr_init()
366 if (s->async > 1.0001) { in swr_init()
367 s->max_soft_compensation = s->async / (double) s->in_sample_rate; in swr_init()
371 if (s->out_sample_rate!=s->in_sample_rate || (s->flags & SWR_FLAG_RESAMPLE)){ in swr_init()
372s->resample = s->resampler->init(s->resample, s->out_sample_rate, s->in_sample_rate, s->filter_siz… in swr_init()
373 if (!s->resample) { in swr_init()
374 av_log(s, AV_LOG_ERROR, "Failed to initialize resampler\n"); in swr_init()
378 s->resampler->free(&s->resample); in swr_init()
379 if( s->int_sample_fmt != AV_SAMPLE_FMT_S16P in swr_init()
380 && s->int_sample_fmt != AV_SAMPLE_FMT_S32P in swr_init()
381 && s->int_sample_fmt != AV_SAMPLE_FMT_FLTP in swr_init()
382 && s->int_sample_fmt != AV_SAMPLE_FMT_DBLP in swr_init()
383 && s->resample){ in swr_init()
384 av_log(s, AV_LOG_ERROR, "Resampling only supported with internal s16p/s32p/fltp/dblp\n"); in swr_init()
390 if(!s-> in.ch_count) in swr_init()
391 s-> in.ch_count = s->in_ch_layout.nb_channels; in swr_init()
392 if(!s->used_ch_count) in swr_init()
393 s->used_ch_count= s->in.ch_count; in swr_init()
394 if(!s->out.ch_count) in swr_init()
395 s->out.ch_count = s->out_ch_layout.nb_channels; in swr_init()
397 if(!s-> in.ch_count){ in swr_init()
398 av_assert0(s->in_ch_layout.order == AV_CHANNEL_ORDER_UNSPEC); in swr_init()
399 av_log(s, AV_LOG_ERROR, "Input channel count and layout are unset\n"); in swr_init()
404 av_channel_layout_describe(&s->out_ch_layout, l2, sizeof(l2)); in swr_init()
406 …if (s->out_ch_layout.order != AV_CHANNEL_ORDER_UNSPEC && s->out.ch_count != s->out_ch_layout.nb_ch… in swr_init()
407 …av_log(s, AV_LOG_ERROR, "Output channel layout %s mismatches specified channel count %d\n", l2, s-… in swr_init()
412 av_channel_layout_describe(&s->in_ch_layout, l1, sizeof(l1)); in swr_init()
413 …if (s->in_ch_layout.order != AV_CHANNEL_ORDER_UNSPEC && s->used_ch_count != s->in_ch_layout.nb_cha… in swr_init()
414 …av_log(s, AV_LOG_ERROR, "Input channel layout %s mismatches specified channel count %d\n", l1, s->… in swr_init()
419 if (( s->out_ch_layout.order == AV_CHANNEL_ORDER_UNSPEC in swr_init()
420 …|| s-> in_ch_layout.order == AV_CHANNEL_ORDER_UNSPEC) && s->used_ch_count != s->out.ch_count && !s in swr_init()
421 av_log(s, AV_LOG_ERROR, "Rematrix is needed between %s and %s " in swr_init()
427 av_assert0(s->used_ch_count); in swr_init()
428 av_assert0(s->out.ch_count); in swr_init()
429s->resample_first= RSC*s->out.ch_count/s->used_ch_count - RSC < s->out_sample_rate/(float)s-> in_s… in swr_init()
431 s->in_buffer= s->in; in swr_init()
432 s->silence = s->in; in swr_init()
433 s->drop_temp= s->out; in swr_init()
435 if ((ret = swri_dither_init(s, s->out_sample_fmt, s->int_sample_fmt)) < 0) in swr_init()
438 if(!s->resample && !s->rematrix && !s->channel_map && !s->dither.method){ in swr_init()
439 s->full_convert = swri_audio_convert_alloc(s->out_sample_fmt, in swr_init()
440 s-> in_sample_fmt, s-> in.ch_count, NULL, 0); in swr_init()
444 s->in_convert = swri_audio_convert_alloc(s->int_sample_fmt, in swr_init()
445s-> in_sample_fmt, s->used_ch_count, s->channel_map, 0); in swr_init()
446 s->out_convert= swri_audio_convert_alloc(s->out_sample_fmt, in swr_init()
447 s->int_sample_fmt, s->out.ch_count, NULL, 0); in swr_init()
449 if (!s->in_convert || !s->out_convert) { in swr_init()
454 s->postin= s->in; in swr_init()
455 s->preout= s->out; in swr_init()
456 s->midbuf= s->in; in swr_init()
458 if(s->channel_map){ in swr_init()
459 s->postin.ch_count= in swr_init()
460 s->midbuf.ch_count= s->used_ch_count; in swr_init()
461 if(s->resample) in swr_init()
462 s->in_buffer.ch_count= s->used_ch_count; in swr_init()
464 if(!s->resample_first){ in swr_init()
465 s->midbuf.ch_count= s->out.ch_count; in swr_init()
466 if(s->resample) in swr_init()
467 s->in_buffer.ch_count = s->out.ch_count; in swr_init()
470 set_audiodata_fmt(&s->postin, s->int_sample_fmt); in swr_init()
471 set_audiodata_fmt(&s->midbuf, s->int_sample_fmt); in swr_init()
472 set_audiodata_fmt(&s->preout, s->int_sample_fmt); in swr_init()
474 if(s->resample){ in swr_init()
475 set_audiodata_fmt(&s->in_buffer, s->int_sample_fmt); in swr_init()
478 av_assert0(!s->preout.count); in swr_init()
479 s->dither.noise = s->preout; in swr_init()
480 s->dither.temp = s->preout; in swr_init()
481 if (s->dither.method > SWR_DITHER_NS) { in swr_init()
482 s->dither.noise.bps = 4; in swr_init()
483 s->dither.noise.fmt = AV_SAMPLE_FMT_FLTP; in swr_init()
484 s->dither.noise_scale = 1; in swr_init()
487 if(s->rematrix || s->dither.method) { in swr_init()
488 ret = swri_rematrix_init(s); in swr_init()
495 swr_close(s); in swr_init()
587 static int resample(SwrContext *s, AudioData *out_param, int out_count, in resample() argument
592 int padless = ARCH_X86 && s->engine == SWR_ENGINE_SWR ? 7 : 0; in resample()
594 av_assert1(s->in_buffer.ch_count == in_param->ch_count); in resample()
595 av_assert1(s->in_buffer.planar == in_param->planar); in resample()
596 av_assert1(s->in_buffer.fmt == in_param->fmt); in resample()
601 border = s->resampler->invert_initial_buffer(s->resample, &s->in_buffer, in resample()
602 &in, in_count, &s->in_buffer_index, &s->in_buffer_count); in resample()
610 s->resample_in_constraint = 0; in resample()
615 if(!s->resample_in_constraint && s->in_buffer_count){ in resample()
616 buf_set(&tmp, &s->in_buffer, s->in_buffer_index); in resample()
617 …ret= s->resampler->multiple_resample(s->resample, &out, out_count, &tmp, s->in_buffer_count, &cons… in resample()
621 s->in_buffer_count -= consumed; in resample()
622 s->in_buffer_index += consumed; in resample()
626 if(s->in_buffer_count <= border){ in resample()
627 buf_set(&in, &in, -s->in_buffer_count); in resample()
628 in_count += s->in_buffer_count; in resample()
629 s->in_buffer_count=0; in resample()
630 s->in_buffer_index=0; in resample()
635 if((s->flushed || in_count > padless) && !s->in_buffer_count){ in resample()
636 s->in_buffer_index=0; in resample()
637 …ret= s->resampler->multiple_resample(s->resample, &out, out_count, &in, FFMAX(in_count-padless, 0)… in resample()
646 size= s->in_buffer_index + s->in_buffer_count + in_count; in resample()
647 if( size > s->in_buffer.count in resample()
648 && s->in_buffer_count + in_count <= s->in_buffer_index){ in resample()
649 buf_set(&tmp, &s->in_buffer, s->in_buffer_index); in resample()
650 copy(&s->in_buffer, &tmp, s->in_buffer_count); in resample()
651 s->in_buffer_index=0; in resample()
653 if((ret=swri_realloc_audio(&s->in_buffer, size)) < 0) in resample()
658 … if(s->in_buffer_count && s->in_buffer_count+2 < count && out_count) count= s->in_buffer_count+2; in resample()
660 buf_set(&tmp, &s->in_buffer, s->in_buffer_index + s->in_buffer_count); in resample()
662 s->in_buffer_count += count; in resample()
666 s->resample_in_constraint= 0; in resample()
667 if(s->in_buffer_count != count || in_count) in resample()
677 s->resample_in_constraint= !!out_count; in resample()
682 static int swr_convert_internal(struct SwrContext *s, AudioData *out, int out_count, in swr_convert_internal() argument
688 if(s->full_convert){ in swr_convert_internal()
689 av_assert0(!s->resample); in swr_convert_internal()
690 swri_audio_convert(s->full_convert, out, in, in_count); in swr_convert_internal()
694 // in_max= out_count*(int64_t)s->in_sample_rate / s->out_sample_rate + resample_filter_taps; in swr_convert_internal()
695 // in_count= FFMIN(in_count, in_in + 2 - s->hist_buffer_count); in swr_convert_internal()
697 if((ret=swri_realloc_audio(&s->postin, in_count))<0) in swr_convert_internal()
699 if(s->resample_first){ in swr_convert_internal()
700 av_assert0(s->midbuf.ch_count == s->used_ch_count); in swr_convert_internal()
701 if((ret=swri_realloc_audio(&s->midbuf, out_count))<0) in swr_convert_internal()
704 av_assert0(s->midbuf.ch_count == s->out.ch_count); in swr_convert_internal()
705 if((ret=swri_realloc_audio(&s->midbuf, in_count))<0) in swr_convert_internal()
708 if((ret=swri_realloc_audio(&s->preout, out_count))<0) in swr_convert_internal()
711 postin= &s->postin; in swr_convert_internal()
713 midbuf_tmp= s->midbuf; in swr_convert_internal()
715 preout_tmp= s->preout; in swr_convert_internal()
718 if(s->int_sample_fmt == s-> in_sample_fmt && s->in.planar && !s->channel_map) in swr_convert_internal()
721 if(s->resample_first ? !s->resample : !s->rematrix) in swr_convert_internal()
724 if(s->resample_first ? !s->rematrix : !s->resample) in swr_convert_internal()
727 if(s->int_sample_fmt == s->out_sample_fmt && s->out.planar in swr_convert_internal()
728 && !(s->out_sample_fmt==AV_SAMPLE_FMT_S32P && (s->dither.output_sample_bits&31))){ in swr_convert_internal()
731 …av_assert0(s->in.planar); //we only support planar internally so it has to be, we support copying … in swr_convert_internal()
741 swri_audio_convert(s->in_convert, postin, in, in_count); in swr_convert_internal()
744 if(s->resample_first){ in swr_convert_internal()
746 if ((out_count = resample(s, midbuf, out_count, postin, in_count)) < 0) in swr_convert_internal()
749 swri_rematrix(s, preout, midbuf, out_count, preout==out); in swr_convert_internal()
752 swri_rematrix(s, midbuf, postin, in_count, midbuf==out); in swr_convert_internal()
754 if ((out_count = resample(s, preout, out_count, midbuf, in_count)) < 0) in swr_convert_internal()
760 if(s->dither.method){ in swr_convert_internal()
765 conv_src = &s->dither.temp; in swr_convert_internal()
766 if((ret=swri_realloc_audio(&s->dither.temp, dither_count))<0) in swr_convert_internal()
770 if((ret=swri_realloc_audio(&s->dither.noise, dither_count))<0) in swr_convert_internal()
773 for(ch=0; ch<s->dither.noise.ch_count; ch++) in swr_convert_internal()
774 …if((ret=swri_get_dither(s, s->dither.noise.ch[ch], s->dither.noise.count, (12345678913579ULL*ch + … in swr_convert_internal()
776 av_assert0(s->dither.noise.ch_count == preout->ch_count); in swr_convert_internal()
778 if(s->dither.noise_pos + out_count > s->dither.noise.count) in swr_convert_internal()
779 s->dither.noise_pos = 0; in swr_convert_internal()
781 if (s->dither.method < SWR_DITHER_NS){ in swr_convert_internal()
782 if (s->mix_2_1_simd) { in swr_convert_internal()
788s->mix_2_1_simd(conv_src->ch[ch], preout->ch[ch], s->dither.noise.ch[ch] + s->dither.noise.bps * s in swr_convert_internal()
791s->mix_2_1_f(conv_src->ch[ch] + off, preout->ch[ch] + off, s->dither.noise.ch[ch] + s->dither.nois… in swr_convert_internal()
794s->mix_2_1_f(conv_src->ch[ch], preout->ch[ch], s->dither.noise.ch[ch] + s->dither.noise.bps * s->d… in swr_convert_internal()
797 switch(s->int_sample_fmt) { in swr_convert_internal()
798 …case AV_SAMPLE_FMT_S16P :swri_noise_shaping_int16(s, conv_src, preout, &s->dither.noise, out_count… in swr_convert_internal()
799 …case AV_SAMPLE_FMT_S32P :swri_noise_shaping_int32(s, conv_src, preout, &s->dither.noise, out_count… in swr_convert_internal()
800 …case AV_SAMPLE_FMT_FLTP :swri_noise_shaping_float(s, conv_src, preout, &s->dither.noise, out_count… in swr_convert_internal()
801 …case AV_SAMPLE_FMT_DBLP :swri_noise_shaping_double(s,conv_src, preout, &s->dither.noise, out_count… in swr_convert_internal()
804 s->dither.noise_pos += out_count; in swr_convert_internal()
807 swri_audio_convert(s->out_convert, out, conv_src, out_count); in swr_convert_internal()
812 int swr_is_initialized(struct SwrContext *s) { in swr_is_initialized() argument
813 return !!s->in_buffer.ch_count; in swr_is_initialized()
816 int attribute_align_arg swr_convert(struct SwrContext *s, in swr_convert() argument
820 AudioData * in= &s->in; in swr_convert()
821 AudioData *out= &s->out; in swr_convert()
824 if (!swr_is_initialized(s)) { in swr_convert()
825 av_log(s, AV_LOG_ERROR, "Context has not been initialized\n"); in swr_convert()
829 max_output = swr_get_out_samples(s, in_count); in swr_convert()
832 while(s->drop_output > 0){ in swr_convert()
836 if((ret=swri_realloc_audio(&s->drop_temp, FFMIN(s->drop_output, MAX_DROP_STEP)))<0) in swr_convert()
839 reversefill_audiodata(&s->drop_temp, tmp_arg); in swr_convert()
840 s->drop_output *= -1; //FIXME find a less hackish solution in swr_convert()
841 …ret = swr_convert(s, tmp_arg, FFMIN(-s->drop_output, MAX_DROP_STEP), in_arg, in_count); //FIXME op… in swr_convert()
842 s->drop_output *= -1; in swr_convert()
845 s->drop_output -= ret; in swr_convert()
846 if (!s->drop_output && !out_arg) in swr_convert()
851 av_assert0(s->drop_output); in swr_convert()
856 if(s->resample){ in swr_convert()
857 if (!s->flushed) in swr_convert()
858 s->resampler->flush(s); in swr_convert()
859 s->resample_in_constraint = 0; in swr_convert()
860 s->flushed = 1; in swr_convert()
861 }else if(!s->in_buffer_count){ in swr_convert()
869 if(s->resample){ in swr_convert()
870 int ret = swr_convert_internal(s, out, out_count, in, in_count); in swr_convert()
871 if(ret>0 && !s->drop_output) in swr_convert()
872 s->outpts += ret * (int64_t)s->in_sample_rate; in swr_convert()
881 size = FFMIN(out_count, s->in_buffer_count); in swr_convert()
883 buf_set(&tmp, &s->in_buffer, s->in_buffer_index); in swr_convert()
884 ret= swr_convert_internal(s, out, size, &tmp, size); in swr_convert()
888 s->in_buffer_count -= ret; in swr_convert()
889 s->in_buffer_index += ret; in swr_convert()
892 if(!s->in_buffer_count) in swr_convert()
893 s->in_buffer_index = 0; in swr_convert()
897 size= s->in_buffer_index + s->in_buffer_count + in_count - out_count; in swr_convert()
900 if( size > s->in_buffer.count in swr_convert()
901 && s->in_buffer_count + in_count - out_count <= s->in_buffer_index){ in swr_convert()
902 buf_set(&tmp, &s->in_buffer, s->in_buffer_index); in swr_convert()
903 copy(&s->in_buffer, &tmp, s->in_buffer_count); in swr_convert()
904 s->in_buffer_index=0; in swr_convert()
906 if((ret=swri_realloc_audio(&s->in_buffer, size)) < 0) in swr_convert()
912 ret= swr_convert_internal(s, out, size, in, size); in swr_convert()
920 buf_set(&tmp, &s->in_buffer, s->in_buffer_index + s->in_buffer_count); in swr_convert()
922 s->in_buffer_count += in_count; in swr_convert()
925 if(ret2>0 && !s->drop_output) in swr_convert()
926 s->outpts += ret2 * (int64_t)s->in_sample_rate; in swr_convert()
932 int swr_drop_output(struct SwrContext *s, int count){ in swr_drop_output() argument
934 s->drop_output += count; in swr_drop_output()
936 if(s->drop_output <= 0) in swr_drop_output()
939 av_log(s, AV_LOG_VERBOSE, "discarding %d audio samples\n", count); in swr_drop_output()
940 return swr_convert(s, NULL, s->drop_output, tmp_arg, 0); in swr_drop_output()
943 int swr_inject_silence(struct SwrContext *s, int count){ in swr_inject_silence() argument
952 if ((ret = swr_inject_silence(s, MAX_SILENCE_STEP)) < 0) in swr_inject_silence()
957 if((ret=swri_realloc_audio(&s->silence, count))<0) in swr_inject_silence()
960 if(s->silence.planar) for(i=0; i<s->silence.ch_count; i++) { in swr_inject_silence()
961 memset(s->silence.ch[i], s->silence.bps==1 ? 0x80 : 0, count*s->silence.bps); in swr_inject_silence()
963 … memset(s->silence.ch[0], s->silence.bps==1 ? 0x80 : 0, count*s->silence.bps*s->silence.ch_count); in swr_inject_silence()
965 reversefill_audiodata(&s->silence, tmp_arg); in swr_inject_silence()
966 av_log(s, AV_LOG_VERBOSE, "adding %d audio samples of silence\n", count); in swr_inject_silence()
967 ret = swr_convert(s, NULL, 0, (const uint8_t**)tmp_arg, count); in swr_inject_silence()
971 int64_t swr_get_delay(struct SwrContext *s, int64_t base){ in swr_get_delay() argument
972 if (s->resampler && s->resample){ in swr_get_delay()
973 return s->resampler->get_delay(s, base); in swr_get_delay()
975 return (s->in_buffer_count*base + (s->in_sample_rate>>1))/ s->in_sample_rate; in swr_get_delay()
979 int swr_get_out_samples(struct SwrContext *s, int in_samples) in swr_get_out_samples() argument
986 if (s->resampler && s->resample) { in swr_get_out_samples()
987 if (!s->resampler->get_out_samples) in swr_get_out_samples()
989 out_samples = s->resampler->get_out_samples(s, in_samples); in swr_get_out_samples()
991 out_samples = s->in_buffer_count + in_samples; in swr_get_out_samples()
992 av_assert0(s->out_sample_rate == s->in_sample_rate); in swr_get_out_samples()
1001 int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance){ in swr_set_compensation() argument
1004 if (!s || compensation_distance < 0) in swr_set_compensation()
1008 if (!s->resample) { in swr_set_compensation()
1009 s->flags |= SWR_FLAG_RESAMPLE; in swr_set_compensation()
1010 ret = swr_init(s); in swr_set_compensation()
1014 if (!s->resampler->set_compensation){ in swr_set_compensation()
1017 return s->resampler->set_compensation(s->resample, sample_delta, compensation_distance); in swr_set_compensation()
1021 int64_t swr_next_pts(struct SwrContext *s, int64_t pts){ in swr_next_pts() argument
1023 return s->outpts; in swr_next_pts()
1025 if (s->firstpts == AV_NOPTS_VALUE) in swr_next_pts()
1026 s->outpts = s->firstpts = pts; in swr_next_pts()
1028 if(s->min_compensation >= FLT_MAX) { in swr_next_pts()
1029 … return (s->outpts = pts - swr_get_delay(s, s->in_sample_rate * (int64_t)s->out_sample_rate)); in swr_next_pts()
1031 …_t delta = pts - swr_get_delay(s, s->in_sample_rate * (int64_t)s->out_sample_rate) - s->outpts + s in swr_next_pts()
1032 double fdelta = delta /(double)(s->in_sample_rate * (int64_t)s->out_sample_rate); in swr_next_pts()
1034 if(fabs(fdelta) > s->min_compensation) { in swr_next_pts()
1035 if(s->outpts == s->firstpts || fabs(fdelta) > s->min_hard_compensation){ in swr_next_pts()
1037 if(delta > 0) ret = swr_inject_silence(s, delta / s->out_sample_rate); in swr_next_pts()
1038 else ret = swr_drop_output (s, -delta / s-> in_sample_rate); in swr_next_pts()
1040 … av_log(s, AV_LOG_ERROR, "Failed to compensate for timestamp delta of %f\n", fdelta); in swr_next_pts()
1042 } else if(s->soft_compensation_duration && s->max_soft_compensation) { in swr_next_pts()
1043 int duration = s->out_sample_rate * s->soft_compensation_duration; in swr_next_pts()
1044 …double max_soft_compensation = s->max_soft_compensation / (s->max_soft_compensation < 0 ? -s->in_s… in swr_next_pts()
1046 …av_log(s, AV_LOG_VERBOSE, "compensating audio timestamp drift:%f compensation:%d in:%d\n", fdelta,… in swr_next_pts()
1047 swr_set_compensation(s, comp, duration); in swr_next_pts()
1051 return s->outpts; in swr_next_pts()