Skip to content

Commit

Permalink
[AE] - force re-create of ffmpeg resampler after error
Browse files Browse the repository at this point in the history
  • Loading branch information
FernetMenta committed Feb 25, 2015
1 parent b4e08f9 commit 550f3b0
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 4 deletions.
7 changes: 7 additions & 0 deletions xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,13 @@ bool CActiveAEBufferPoolResample::ResampleBuffers(int64_t timestamp)
in ? in->pkt->data : NULL,
in ? in->pkt->nb_samples : 0,
m_resampleRatio);
// in case of error, trigger re-create of resampler
if (out_samples < 0)
{
out_samples = 0;
m_changeResampler = true;
}

m_procSample->pkt->nb_samples += out_samples;
busy = true;
m_empty = (out_samples == 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,19 +184,19 @@ int CActiveAEResampleFFMPEG::Resample(uint8_t **dst_buffer, int dst_samples, uin
if (ratio != 1.0)
{
if (swr_set_compensation(m_pContext,
(dst_samples*ratio-dst_samples)*m_dst_rate/m_src_rate,
dst_samples*m_dst_rate/m_src_rate) < 0)
(dst_samples*ratio-dst_samples)*m_dst_rate/m_src_rate,
dst_samples*m_dst_rate/m_src_rate) < 0)
{
CLog::Log(LOGERROR, "CActiveAEResampleFFMPEG::Resample - set compensation failed");
return 0;
return -1;
}
}

int ret = swr_convert(m_pContext, dst_buffer, dst_samples, (const uint8_t**)src_buffer, src_samples);
if (ret < 0)
{
CLog::Log(LOGERROR, "CActiveAEResampleFFMPEG::Resample - resample failed");
return 0;
return -1;
}

// special handling for S24 formats which are carried in S32
Expand Down

0 comments on commit 550f3b0

Please sign in to comment.