decoder/ffmpeg: fix playback of planar PCM data
Interleaving was completely wrong. This code was never used, so it didn't have an effect.
This commit is contained in:
parent
230a3eb400
commit
1dc27be015
@ -236,12 +236,16 @@ time_to_ffmpeg(double t, const AVRational time_base)
|
||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,25,0)
|
||||
|
||||
static void
|
||||
copy_interleave_frame2(uint8_t *dest, const uint8_t *const*src,
|
||||
unsigned nchannels, size_t plane_size)
|
||||
copy_interleave_frame2(uint8_t *dest, uint8_t **src,
|
||||
unsigned nframes, unsigned nchannels,
|
||||
unsigned sample_size)
|
||||
{
|
||||
for (unsigned channel = 0; channel < nchannels; ++channel) {
|
||||
memcpy(dest, src[channel], plane_size);
|
||||
dest += plane_size;
|
||||
for (unsigned frame = 0; frame < nframes; ++frame) {
|
||||
for (unsigned channel = 0; channel < nchannels; ++channel) {
|
||||
memcpy(dest, src[channel] + frame * sample_size,
|
||||
sample_size);
|
||||
dest += sample_size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -265,9 +269,10 @@ copy_interleave_frame(const AVCodecContext *codec_context,
|
||||
|
||||
if (av_sample_fmt_is_planar(codec_context->sample_fmt) &&
|
||||
codec_context->channels > 1) {
|
||||
copy_interleave_frame2(buffer,
|
||||
(const uint8_t *const*)frame->extended_data,
|
||||
codec_context->channels, plane_size);
|
||||
copy_interleave_frame2(buffer, frame->extended_data,
|
||||
frame->nb_samples,
|
||||
codec_context->channels,
|
||||
av_get_bytes_per_sample(codec_context->sample_fmt));
|
||||
} else {
|
||||
memcpy(buffer, frame->extended_data[0], data_size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user