diff options
Diffstat (limited to 'dxr3output.c')
-rw-r--r-- | dxr3output.c | 176 |
1 files changed, 2 insertions, 174 deletions
diff --git a/dxr3output.c b/dxr3output.c index 1be69d3..76c256d 100644 --- a/dxr3output.c +++ b/dxr3output.c @@ -1,5 +1,5 @@ /* - * dxr3outputthread.c + * dxr3output.c * * Copyright (C) 2002-2004 Kai Möller * @@ -21,12 +21,7 @@ #include <stdio.h> #include <time.h> -#include "dxr3outputthread.h" - -// ================================== -const int AUDIO_OFFSET = 4500; -#define SCR m_dxr3Device.GetSysClock() -// ================================== +#include "dxr3output.h" // ================================== //! constructor @@ -39,173 +34,6 @@ cDxr3OutputThread::cDxr3OutputThread(cDxr3Interface& dxr3Device, { } -// ================================== -//! constr. -cDxr3AudioOutThread::cDxr3AudioOutThread(cDxr3Interface& dxr3Device, - cDxr3SyncBuffer& buffer) : - cDxr3OutputThread(dxr3Device, buffer) -{ - SetDescription("DXR3 audio output"); -} - -//! destructor -cDxr3AudioOutThread::~cDxr3AudioOutThread() -{ - m_buffer.Stop(); - Cancel(3); -} - -// ================================== -//! thread action -void cDxr3AudioOutThread::Action() -{ - bool resync = false; - uint32_t pts = 0; - - while (Running()) - { - pts = 0; - cFixedLengthFrame* pNext = m_buffer.Get(); - - if (pNext) pts = pNext->GetPts(); - - if (pts && abs((int)pts-(int)SCR) > 30000 || - m_dxr3Device.IsExternalReleased()) - { - m_buffer.Clear(); - m_bNeedResync = true; - } - else if (pNext) - { - if (!pts || pts < SCR) - { - if (!pts && resync) - { - continue; - } - else - { - resync = false; - } - - if (pts && (pts < SCR) && ((SCR - pts) > 5000)) - { - m_dxr3Device.SetSysClock(pts + 1 * AUDIO_OFFSET); - m_dxr3Device.PlayAudioFrame(pNext); - if (m_buffer.IsPolled()) - { - m_buffer.Clear(); - m_bNeedResync = true; - } - } - else - { - m_dxr3Device.PlayAudioFrame(pNext); - m_buffer.Pop(); - } - } - else - { - if (abs((int)pts - (int)SCR) < (AUDIO_OFFSET )) - { - m_dxr3Device.PlayAudioFrame(pNext); - m_buffer.Pop(); - } - } - } - - if ((pts > SCR && abs((int)pts - (int)SCR) > AUDIO_OFFSET)) - { - cCondWait::SleepMs(10); - } - } -} - -// ================================== -//! constr. -cDxr3VideoOutThread::cDxr3VideoOutThread(cDxr3Interface& dxr3Device, - cDxr3SyncBuffer& buffer) : - cDxr3OutputThread(dxr3Device, buffer) -{ - SetDescription("DXR3 video output"); -} - -//! destructor -cDxr3VideoOutThread::~cDxr3VideoOutThread() -{ - m_buffer.Stop(); - Cancel(3); -} - -// ================================== -//! thread action -void cDxr3VideoOutThread::Action() -{ - uint32_t pts = 0; - static uint32_t lastPts = 0; - - while (Running()) - { - cFixedLengthFrame* pNext = m_buffer.Get(); - if (pNext) - { - pts = pNext->GetPts(); - if (pts == lastPts) - pts = 0; - - if (pts > SCR && abs((int)pts - (int)SCR) < 7500) - { - m_dxr3Device.SetPts(pts); - } - - if (!pts || pts < SCR) - { - if (m_buffer.Available()) - { - m_dxr3Device.PlayVideoFrame(pNext); - m_buffer.Pop(); - } - } - else - { - if ((pts > SCR) && abs((int)pts - (int)SCR) < 7500) - { - m_dxr3Device.SetPts(pts); - - if (m_buffer.Available() && pNext->GetData() && - pNext->GetCount()) - { - m_dxr3Device.PlayVideoFrame(pNext); - m_buffer.Pop(); - } - } - else - { - if (pts < SCR) - { - m_dxr3Device.PlayVideoFrame(pNext); - m_buffer.Pop(); - } - } - } - - - if (m_dxr3Device.IsExternalReleased()) - { - m_bNeedResync = true; - m_buffer.Clear(); - } - - if ((pts > SCR && abs((int)pts - (int)SCR) > 7500 )) - { - cCondWait::SleepMs(10); - } - } - } -} - -#undef SCR - // Local variables: // mode: c++ // c-file-style: "stroustrup" |