explicit implementation(const std::shared_ptr<AVFormatContext>& context, const core::video_format_desc& format_desc) \r
: format_desc_(format_desc) \r
, nb_frames_(0)\r
+ , buffer1_(AVCODEC_MAX_AUDIO_FRAME_SIZE*2)\r
{ \r
try\r
{\r
AV_SAMPLE_FMT_S16, codec_context_->sample_fmt,\r
16, 10, 0, 0.8);\r
\r
+ buffer2_.resize(AVCODEC_MAX_AUDIO_FRAME_SIZE*2);\r
+\r
CASPAR_LOG(warning) << L" Invalid audio format. Resampling.";\r
\r
if(resampler)\r
\r
std::shared_ptr<std::vector<int16_t>> decode(AVPacket& pkt)\r
{ \r
- buffer1_.resize(AVCODEC_MAX_AUDIO_FRAME_SIZE*2, 0);\r
int written_bytes = buffer1_.size() - FF_INPUT_BUFFER_PADDING_SIZE;\r
\r
int ret = THROW_ON_ERROR2(avcodec_decode_audio3(codec_context_.get(), reinterpret_cast<int16_t*>(buffer1_.data()), &written_bytes, &pkt), "[audio_decoder]");\r
pkt.size -= ret;\r
pkt.data += ret;\r
\r
- buffer1_.resize(written_bytes);\r
-\r
if(resampler_)\r
{\r
- buffer2_.resize(AVCODEC_MAX_AUDIO_FRAME_SIZE*2, 0);\r
auto ret = audio_resample(resampler_.get(),\r
reinterpret_cast<short*>(buffer2_.data()), \r
reinterpret_cast<short*>(buffer1_.data()), \r
- buffer1_.size() / (av_get_bytes_per_sample(codec_context_->sample_fmt) * codec_context_->channels)); \r
- buffer2_.resize(ret * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16) * format_desc_.audio_channels);\r
+ written_bytes / (av_get_bytes_per_sample(codec_context_->sample_fmt) * codec_context_->channels)); \r
+ written_bytes = ret * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16) * format_desc_.audio_channels;\r
std::swap(buffer1_, buffer2_);\r
}\r
\r
- const auto n_samples = buffer1_.size() / av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);\r
+ const auto n_samples = written_bytes / av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);\r
const auto samples = reinterpret_cast<int16_t*>(buffer1_.data());\r
\r
return std::make_shared<std::vector<int16_t>>(samples, samples + n_samples);\r