vorbisdec: allow selecting float output at runtime.
This commit is contained in:
parent
26d5a4b6b4
commit
5aff31b136
@ -1007,12 +1007,9 @@ static av_cold int vorbis_decode_init(AVCodecContext *avccontext)
|
||||
avccontext->channels = vc->audio_channels;
|
||||
avccontext->sample_rate = vc->audio_samplerate;
|
||||
avccontext->frame_size = FFMIN(vc->blocksize[0], vc->blocksize[1]) >> 2;
|
||||
/* ffdshow custom code */
|
||||
#if CONFIG_AUDIO_FLOAT
|
||||
avccontext->sample_fmt = AV_SAMPLE_FMT_FLT;
|
||||
#else
|
||||
avccontext->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
#endif
|
||||
avccontext->sample_fmt =
|
||||
avccontext->request_sample_fmt == AV_SAMPLE_FMT_FLT ?
|
||||
AV_SAMPLE_FMT_FLT : AV_SAMPLE_FMT_S16;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
@ -1640,15 +1637,15 @@ static int vorbis_decode_frame(AVCodecContext *avccontext,
|
||||
len * ff_vorbis_channel_layout_offsets[vc->audio_channels - 1][i];
|
||||
}
|
||||
|
||||
/* ffdshow custom code */
|
||||
#if CONFIG_AUDIO_FLOAT
|
||||
float_interleave(data, channel_ptrs, len, vc->audio_channels);
|
||||
*data_size = len * sizeof(float) * vc->audio_channels;
|
||||
#else
|
||||
vc->fmt_conv.float_to_int16_interleave(data, channel_ptrs, len,
|
||||
vc->audio_channels);
|
||||
*data_size = len * 2 * vc->audio_channels;
|
||||
#endif
|
||||
*data_size = len * vc->audio_channels;
|
||||
if (avccontext->sample_fmt == AV_SAMPLE_FMT_FLT) {
|
||||
float_interleave(data, channel_ptrs, len, vc->audio_channels);
|
||||
*data_size *= sizeof(float);
|
||||
} else {
|
||||
vc->fmt_conv.float_to_int16_interleave(data, channel_ptrs, len,
|
||||
vc->audio_channels);
|
||||
*data_size *= 2;
|
||||
}
|
||||
|
||||
return buf_size ;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user