- if (ctx->sample_fmt == AV_SAMPLE_FMT_FLTP) {
- audio_frame->format = AV_SAMPLE_FMT_FLTP;
- planar_samples.reset(new float[num_samples * 2]);
- avcodec_fill_audio_frame(audio_frame, 2, AV_SAMPLE_FMT_FLTP, (const uint8_t*)planar_samples.get(), num_samples * 2 * sizeof(float), 0);
- for (size_t i = 0; i < num_samples; ++i) {
- planar_samples[i] = audio[i * 2 + 0];
- planar_samples[i + num_samples] = audio[i * 2 + 1];
- }
- } else {
- assert(ctx->sample_fmt == AV_SAMPLE_FMT_S32);
- int_samples.reset(new int32_t[num_samples * 2]);
- int ret = avcodec_fill_audio_frame(audio_frame, 2, AV_SAMPLE_FMT_S32, (const uint8_t*)int_samples.get(), num_samples * 2 * sizeof(int32_t), 1);
- if (ret < 0) {
- fprintf(stderr, "avcodec_fill_audio_frame() failed with %d\n", ret);
- exit(1);
- }
- for (size_t i = 0; i < num_samples * 2; ++i) {
- if (audio[i] >= 1.0f) {
- int_samples[i] = 2147483647;
- } else if (audio[i] <= -1.0f) {
- int_samples[i] = -2147483647;
- } else {
- int_samples[i] = lrintf(audio[i] * 2147483647.0f);
- }
- }
+ if (avresample_convert(resampler, audio_frame->data, 0, num_samples,
+ (uint8_t **)&audio, 0, num_samples) < 0) {
+ fprintf(stderr, "Audio conversion failed.\n");
+ exit(1);