Skip to content

Commit a9cdd5f

Browse files
committed
Get the actual output size of swr_convert
1 parent 32759d3 commit a9cdd5f

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

examples/alffplay.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -747,21 +747,22 @@ auto AudioState::decodeFrame() -> int
747747
mCurrentPts = duration_cast<nanoseconds>(seconds_d64{av_q2d(mStream->time_base) *
748748
gsl::narrow_cast<double>(mDecodedFrame->best_effort_timestamp)});
749749

750-
if(mDecodedFrame->nb_samples > mSamplesMax)
750+
auto const dst_size = swr_get_out_samples(mSwresCtx.get(), mDecodedFrame->nb_samples);
751+
if(dst_size > mSamplesMax)
751752
{
752753
av_freep(static_cast<void*>(mSamples.data()));
753754
if(av_samples_alloc(mSamples.data(), nullptr, mCodecCtx->ch_layout.nb_channels,
754-
mDecodedFrame->nb_samples, mDstSampleFmt, 0) < 0)
755+
dst_size, mDstSampleFmt, 0) < 0)
755756
{
756757
mSamplesMax = 0;
757758
mSamplesSpan = {};
758759
return 0;
759760
}
760-
mSamplesMax = mDecodedFrame->nb_samples;
761+
mSamplesMax = dst_size;
761762
mSamplesSpan = {mSamples[0], gsl::narrow_cast<size_t>(mSamplesMax)*mFrameSize};
762763
}
763764
/* Return the amount of sample frames converted */
764-
const auto data_size = swr_convert(mSwresCtx.get(), mSamples.data(), mDecodedFrame->nb_samples,
765+
auto const data_size = swr_convert(mSwresCtx.get(), mSamples.data(), dst_size,
765766
mDecodedFrame->extended_data, mDecodedFrame->nb_samples);
766767

767768
av_frame_unref(mDecodedFrame.get());

0 commit comments

Comments
 (0)