diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | dxr3demuxdevice.h | 2 | ||||
-rw-r--r-- | dxr3output-audio.c | 7 | ||||
-rw-r--r-- | dxr3output-video.c | 7 | ||||
-rw-r--r-- | dxr3output.c | 176 | ||||
-rw-r--r-- | dxr3output.h | 17 |
6 files changed, 9 insertions, 202 deletions
@@ -71,7 +71,7 @@ OBJS = $(PLUGIN).o dxr3multichannelaudio.o dxr3sysclock.o dxr3colormanager.o \ dxr3syncbuffer.o dxr3audiodecoder.o dxr3blackframe.o dxr3nextpts.o \ dxr3pesframe.o dxr3demuxdevice.o dxr3configdata.o dxr3ffmpeg.o \ dxr3interface_spu_encoder.o dxr3interface.o dxr3device.o \ - dxr3outputthread.o dxr3osd.o dxr3spudecoder.o + dxr3output.o dxr3output-video.o dxr3output-audio.o dxr3osd.o dxr3spudecoder.o ### Default target: diff --git a/dxr3demuxdevice.h b/dxr3demuxdevice.h index b679a18..8874ae1 100644 --- a/dxr3demuxdevice.h +++ b/dxr3demuxdevice.h @@ -26,7 +26,7 @@ #include "dxr3generaldefines.h" #include "dxr3syncbuffer.h" #include "dxr3audiodecoder.h" -#include "dxr3outputthread.h" +#include "dxr3output.h" const int AUDIO_MAX_BUFFER_SIZE = 200; const int VIDEO_MAX_BUFFER_SIZE = 500; diff --git a/dxr3output-audio.c b/dxr3output-audio.c index 36f6904..4798e8c 100644 --- a/dxr3output-audio.c +++ b/dxr3output-audio.c @@ -37,13 +37,6 @@ cDxr3AudioOutThread::cDxr3AudioOutThread(cDxr3Interface& dxr3Device, SetDescription("DXR3 audio output"); } -//! destructor -cDxr3AudioOutThread::~cDxr3AudioOutThread() -{ - m_buffer.Stop(); - Cancel(3); -} - // ================================== //! thread action void cDxr3AudioOutThread::Action() diff --git a/dxr3output-video.c b/dxr3output-video.c index 5327dd8..e306df7 100644 --- a/dxr3output-video.c +++ b/dxr3output-video.c @@ -34,13 +34,6 @@ cDxr3VideoOutThread::cDxr3VideoOutThread(cDxr3Interface& dxr3Device, SetDescription("DXR3 video output"); } -//! destructor -cDxr3VideoOutThread::~cDxr3VideoOutThread() -{ - m_buffer.Stop(); - Cancel(3); -} - // ================================== //! thread action void cDxr3VideoOutThread::Action() 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" diff --git a/dxr3output.h b/dxr3output.h index e015daa..bbf1cc4 100644 --- a/dxr3output.h +++ b/dxr3output.h @@ -1,5 +1,5 @@ /* - * dxr3outputthread.h + * dxr3output.h * * Copyright (C) 2002-2004 Kai Möller * @@ -31,16 +31,11 @@ class cDxr3OutputThread : public cThread { public: cDxr3OutputThread(cDxr3Interface& dxr3Device, cDxr3SyncBuffer& buffer); - virtual ~cDxr3OutputThread() - { - Cancel(); - }; - /* - virtual void Start(void) - { - cThread::Start(); + virtual ~cDxr3OutputThread() { + m_buffer.Stop(); + Cancel(3); }; - */ + bool NeedResync() { return m_bNeedResync; @@ -66,7 +61,6 @@ class cDxr3AudioOutThread : public cDxr3OutputThread { public: cDxr3AudioOutThread(cDxr3Interface& dxr3Device, cDxr3SyncBuffer& buffer); - virtual ~cDxr3AudioOutThread(); protected: void Action(); @@ -81,7 +75,6 @@ class cDxr3VideoOutThread : public cDxr3OutputThread { public: cDxr3VideoOutThread(cDxr3Interface& dxr3Device, cDxr3SyncBuffer& buffer); - virtual ~cDxr3VideoOutThread(); protected: void Action(); |