MCPcopy Create free account
hub / github.com/HandBrake/HandBrake / hb_audio_resample

Function hb_audio_resample

libhb/audio_resample.c:244–317  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

242}
243
244hb_buffer_t* hb_audio_resample(hb_audio_resample_t *resample,
245 const uint8_t **samples, int nsamples)
246{
247 if (resample == NULL)
248 {
249 hb_error("hb_audio_resample: resample is NULL");
250 return NULL;
251 }
252 if (resample->resample_needed && resample->swresample == NULL)
253 {
254 hb_error("hb_audio_resample: resample needed but libswresample context "
255 "is NULL");
256 return NULL;
257 }
258
259 hb_buffer_t *out;
260 int out_size, out_samples;
261
262 if (resample->resample_needed)
263 {
264 out_samples = nsamples * resample->out.sample_rate /
265 resample->in.sample_rate + 1;
266 out_size = av_samples_get_buffer_size(NULL, resample->out.ch_layout.nb_channels,
267 out_samples,
268 resample->out.sample_fmt, 0);
269 out = hb_buffer_init(out_size);
270 out_samples = swr_convert(resample->swresample, &out->data, out_samples,
271 samples, nsamples);
272
273 if (out_samples <= 0)
274 {
275 if (out_samples < 0)
276 {
277 hb_log("hb_audio_resample: swr_convert() failed");
278 }
279 // don't send empty buffers downstream (EOF)
280 hb_buffer_close(&out);
281 return NULL;
282 }
283 out->size = (out_samples *
284 resample->out.sample_size * resample->out.ch_layout.nb_channels);
285 }
286 else
287 {
288 out_samples = nsamples;
289 out_size = (out_samples *
290 resample->out.sample_size * resample->out.ch_layout.nb_channels);
291 out = hb_buffer_init(out_size);
292 memcpy(out->data, samples[0], out_size);
293 }
294
295 /*
296 * Dual Mono to Mono.
297 *
298 * Copy all left or right samples to the first half of the buffer and halve
299 * the buffer size.
300 */
301 if (resample->dual_mono_downmix)

Callers 3

FilterAudioFrameFunction · 0.85
DecodeFunction · 0.85
decodeAudioFunction · 0.85

Calls 4

hb_errorFunction · 0.85
hb_buffer_initFunction · 0.85
hb_logFunction · 0.85
hb_buffer_closeFunction · 0.85

Tested by

no test coverage detected