diff options
author | Manuel Reimer <manuel.reimer@gmx.de> | 2014-11-02 13:41:30 +0100 |
---|---|---|
committer | Manuel Reimer <manuel.reimer@gmx.de> | 2014-11-02 13:41:30 +0100 |
commit | ded6119b3b60eb2f36bbc1df8d6050c49f9e2a1f (patch) | |
tree | 11a1118233ebfe96cc034ba7e9914b379f85cfc1 /libcore | |
parent | e07e56a3faced2f2ef7459cc13c2bda6f65f68ba (diff) | |
parent | ef4502cc02b4a1b287b6710826f04f953fd4691b (diff) | |
download | vdr-plugin-skindesigner-ded6119b3b60eb2f36bbc1df8d6050c49f9e2a1f.tar.gz vdr-plugin-skindesigner-ded6119b3b60eb2f36bbc1df8d6050c49f9e2a1f.tar.bz2 |
Merge branch 'master' of git://projects.vdr-developer.org/vdr-plugin-skindesigner
Diffstat (limited to 'libcore')
-rw-r--r-- | libcore/femonreceiver.c | 184 | ||||
-rw-r--r-- | libcore/femonreceiver.h | 53 | ||||
-rw-r--r-- | libcore/pixmapcontainer.c | 1 |
3 files changed, 1 insertions, 237 deletions
diff --git a/libcore/femonreceiver.c b/libcore/femonreceiver.c deleted file mode 100644 index 56a362c..0000000 --- a/libcore/femonreceiver.c +++ /dev/null @@ -1,184 +0,0 @@ -#include <unistd.h> -#include "../config.h" -#include "femonreceiver.h" - -cFemonReceiver::cFemonReceiver(const cChannel *Channel, int ATrack, int DTrack) - : cReceiver(Channel), - cThread("femon receiver"), - m_Mutex(), - m_Sleep(), - m_Active(false), - m_VideoBuffer(KILOBYTE(512), TS_SIZE, false, "Femon video"), - m_VideoType(Channel ? Channel->Vtype(): 0), - m_VideoPid(Channel ? Channel->Vpid() : 0), - m_VideoPacketCount(0), - m_AudioBuffer(KILOBYTE(256), TS_SIZE, false, "Femon audio"), - m_AudioPid(Channel ? Channel->Apid(ATrack) : 0), - m_AudioPacketCount(0), - m_AC3Buffer(KILOBYTE(256), TS_SIZE, false, "Femon AC3"), - m_AC3Pid(Channel ? Channel->Dpid(DTrack) : 0), - m_AC3PacketCount(0) -{ - SetPids(NULL); - AddPid(m_VideoPid); - AddPid(m_AudioPid); - AddPid(m_AC3Pid); - - m_VideoBuffer.SetTimeouts(0, 100); - m_AudioBuffer.SetTimeouts(0, 100); - m_AC3Buffer.SetTimeouts(0, 100); - - m_VideoBitrate = 0.0; - m_AudioBitrate = 0.0; - m_AC3Bitrate = 0.0; -} - -cFemonReceiver::~cFemonReceiver(void) -{ - Deactivate(); -} - -void cFemonReceiver::Deactivate(void) -{ - Detach(); - if (m_Active) { - m_Active = false; - m_Sleep.Signal(); - if (Running()) - Cancel(3); - } -} - -void cFemonReceiver::Activate(bool On) -{ - if (On) - Start(); - else - Deactivate(); -} - -void cFemonReceiver::Receive(uchar *Data, int Length) -{ - // TS packet length: TS_SIZE - if (Running() && (*Data == TS_SYNC_BYTE) && (Length == TS_SIZE)) { - int len, pid = TsPid(Data); - if (pid == m_VideoPid) { - ++m_VideoPacketCount; - len = m_VideoBuffer.Put(Data, Length); - if (len != Length) { - m_VideoBuffer.ReportOverflow(Length - len); - m_VideoBuffer.Clear(); - } - } - else if (pid == m_AudioPid) { - ++m_AudioPacketCount; - len = m_AudioBuffer.Put(Data, Length); - if (len != Length) { - m_AudioBuffer.ReportOverflow(Length - len); - m_AudioBuffer.Clear(); - } - } - else if (pid == m_AC3Pid) { - ++m_AC3PacketCount; - len = m_AC3Buffer.Put(Data, Length); - if (len != Length) { - m_AC3Buffer.ReportOverflow(Length - len); - m_AC3Buffer.Clear(); - } - } - } -} - -void cFemonReceiver::Action(void) -{ - cTimeMs calcPeriod(0); - m_Active = true; - bool init = true; - while (Running() && m_Active) { - uint8_t *Data; - double timeout; - int Length; - bool processed = false; - - // process available video data - while ((Data = m_VideoBuffer.Get(Length))) { - if (!m_Active || (Length < TS_SIZE)) - break; - Length = TS_SIZE; - if (*Data != TS_SYNC_BYTE) { - for (int i = 1; i < Length; ++i) { - if (Data[i] == TS_SYNC_BYTE) { - Length = i; - break; - } - } - m_VideoBuffer.Del(Length); - continue; - } - processed = true; - if (TsPayloadStart(Data)) { - m_VideoAssembler.Reset(); - } - m_VideoAssembler.PutTs(Data, Length); - m_VideoBuffer.Del(Length); - } - - // process available audio data - while ((Data = m_AudioBuffer.Get(Length))) { - if (!m_Active || (Length < TS_SIZE)) - break; - Length = TS_SIZE; - if (*Data != TS_SYNC_BYTE) { - for (int i = 1; i < Length; ++i) { - if (Data[i] == TS_SYNC_BYTE) { - Length = i; - break; - } - } - m_AudioBuffer.Del(Length); - continue; - } - processed = true; - m_AudioAssembler.PutTs(Data, Length); - m_AudioBuffer.Del(Length); - } - - // process available dolby data - while ((Data = m_AC3Buffer.Get(Length))) { - if (!m_Active || (Length < TS_SIZE)) - break; - Length = TS_SIZE; - if (*Data != TS_SYNC_BYTE) { - for (int i = 1; i < Length; ++i) { - if (Data[i] == TS_SYNC_BYTE) { - Length = i; - break; - } - } - m_AC3Buffer.Del(Length); - continue; - } - processed = true; - m_AC3Assembler.PutTs(Data, Length); - m_AC3Buffer.Del(Length); - } - - // calculate bitrates - timeout = double(calcPeriod.Elapsed()); - if (m_Active && (init || (timeout >= (100.0 * config.bitrateCalcInterval )))) { - // TS packet 188 bytes - 4 byte header; MPEG standard defines 1Mbit = 1000000bit - // PES headers should be compensated! - m_VideoBitrate = (1000.0 * 8.0 * 184.0 * m_VideoPacketCount) / timeout; - m_VideoPacketCount = 0; - m_AudioBitrate = (1000.0 * 8.0 * 184.0 * m_AudioPacketCount) / timeout; - m_AudioPacketCount = 0; - m_AC3Bitrate = (1000.0 * 8.0 * 184.0 * m_AC3PacketCount) / timeout; - m_AC3PacketCount = 0; - calcPeriod.Set(0); - init = false; - } - - if (!processed) - m_Sleep.Wait(10); // to avoid busy loop and reduce cpu load - } -} diff --git a/libcore/femonreceiver.h b/libcore/femonreceiver.h deleted file mode 100644 index 2720ff1..0000000 --- a/libcore/femonreceiver.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef __FEMONRECEIVER_H -#define __FEMONRECEIVER_H - -#include <vdr/thread.h> -#include <vdr/receiver.h> - -class cFemonReceiver : public cReceiver, public cThread { - private: - cMutex m_Mutex; - cCondWait m_Sleep; - bool m_Active; - - cRingBufferLinear m_VideoBuffer; - cTsToPes m_VideoAssembler; - int m_VideoType; - int m_VideoPid; - int m_VideoPacketCount; - double m_VideoBitrate; - - cRingBufferLinear m_AudioBuffer; - cTsToPes m_AudioAssembler; - int m_AudioPid; - int m_AudioPacketCount; - double m_AudioBitrate; - bool m_AudioValid; - - cRingBufferLinear m_AC3Buffer; - cTsToPes m_AC3Assembler; - int m_AC3Pid; - int m_AC3PacketCount; - double m_AC3Bitrate; - bool m_AC3Valid; - - protected: - virtual void Activate(bool On); - virtual void Receive(uchar *Data, int Length); - virtual void Action(void); - - public: - cFemonReceiver(const cChannel* Channel, int ATrack, int DTrack); - virtual ~cFemonReceiver(); - void Deactivate(void); - - double VideoBitrate(void) { cMutexLock MutexLock(&m_Mutex); - return m_VideoBitrate; }; // bit/s - double AudioBitrate(void) { cMutexLock MutexLock(&m_Mutex); - return m_AudioBitrate; }; // bit/s - double AC3Bitrate(void) { cMutexLock MutexLock(&m_Mutex); - return m_AC3Bitrate; }; // bit/s -}; - -#endif //__FEMONRECEIVER_H - diff --git a/libcore/pixmapcontainer.c b/libcore/pixmapcontainer.c index fe5190f..6cba89a 100644 --- a/libcore/pixmapcontainer.c +++ b/libcore/pixmapcontainer.c @@ -39,6 +39,7 @@ cPixmapContainer::~cPixmapContainer(void) { osd = NULL; mutex.Unlock(); } + flushState = fsOpen; } bool cPixmapContainer::CreateOsd(int Left, int Top, int Width, int Height) { |