summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--dxr3demuxdevice.h2
-rw-r--r--dxr3output-audio.c7
-rw-r--r--dxr3output-video.c7
-rw-r--r--dxr3output.c176
-rw-r--r--dxr3output.h17
6 files changed, 9 insertions, 202 deletions
diff --git a/Makefile b/Makefile
index 3c9d767..ebc9758 100644
--- a/Makefile
+++ b/Makefile
@@ -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();