@@ -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