[Mediaportal-svn] r26622 - branches/Accurate_sync/audio renderer/source
Turn your PC into a very advanced MediaCenter/HTPC
Brought to you by:
gereonheitmann,
morpheus_xx
From: <tou...@su...> - 2010-10-30 17:14:50
|
Author: tourettes_ Date: 2010-10-30 19:14:42 +0200 (Sat, 30 Oct 2010) New Revision: 26622 Modified: branches/Accurate_sync/audio renderer/source/MultiSoundTouch.cpp Log: Fixed A/V sync drifting when AC3 encoding is enabled Modified: branches/Accurate_sync/audio renderer/source/MultiSoundTouch.cpp =================================================================== --- branches/Accurate_sync/audio renderer/source/MultiSoundTouch.cpp 2010-10-30 16:45:26 UTC (rev 26621) +++ branches/Accurate_sync/audio renderer/source/MultiSoundTouch.cpp 2010-10-30 17:14:42 UTC (rev 26622) @@ -311,10 +311,12 @@ UINT32 nOutFrames = numSamples(); - if (nOutFrames > 0) + if ((!m_pEncoder && nOutFrames > 0) || (m_pEncoder && nOutFrames >= AC3_FRAME_LENGHT)) { - static double dur = 0.0; - static double durRes = 0.0; + // with AC3 encoder enabled, the resampled buffer is not emptied completely + if (m_pEncoder) + nOutFrames = nOutFrames - nOutFrames % AC3_FRAME_LENGHT; + UINT32 nInFrames = (size / m_pWaveFormat->Format.nBlockAlign) - unprocessedSamplesAfter + unprocessedSamplesBefore; double rtSampleDuration = (double)nInFrames * (double)UNITS / (double)m_pWaveFormat->Format.nSamplesPerSec; @@ -324,14 +326,13 @@ //Log("%s",m_pClock->DebugData()); /* + static double dur = 0.0; + static double durRes = 0.0; + dur += rtSampleDuration / 10000.0; durRes += estimatedSampleDuration / 10000.0; - Log("adjustment: %f durr: %f est %f diff %f %f %f frames: %d outFrames: %d", adjustment, dur, durRes, dur - durRes, rtSampleDuration/10000.0, rtProcessedSampleDuration / 10000.0, nInFrames, nOutFrames); + Log("AVMult %f adjustment: %f durr: %f est %f diff %f %f %f frames: %d outFrames: %d", AVMult, adjustment, dur, durRes, dur - durRes, rtSampleDuration/10000.0, rtProcessedSampleDuration / 10000.0, nInFrames, nOutFrames); */ - } - - if ((!m_pEncoder && nOutFrames > 0) || (m_pEncoder && nOutFrames >= AC3_FRAME_LENGHT)) - { IMediaSample* outSample = NULL; m_pMemAllocator->GetBuffer(&outSample, NULL, NULL, 0); |