mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Limited the frequency of log messages from the cRepackers
This commit is contained in:
parent
48902e885f
commit
dbb09c5ba1
1
HISTORY
1
HISTORY
@ -3971,3 +3971,4 @@ Video Disk Recorder Revision History
|
|||||||
Reinhard Nissl).
|
Reinhard Nissl).
|
||||||
- Now checking the channel's symbol rate in order to avoid problems on full
|
- Now checking the channel's symbol rate in order to avoid problems on full
|
||||||
featured DVB cards with symbol rates below 10000.
|
featured DVB cards with symbol rates below 10000.
|
||||||
|
- Limited the frequency of log messages from the cRepackers.
|
||||||
|
58
remux.c
58
remux.c
@ -11,7 +11,7 @@
|
|||||||
* The cRepacker family's code was originally written by Reinhard Nissl <rnissl@gmx.de>,
|
* The cRepacker family's code was originally written by Reinhard Nissl <rnissl@gmx.de>,
|
||||||
* and adapted to the VDR coding style by Klaus.Schmidinger@cadsoft.de.
|
* and adapted to the VDR coding style by Klaus.Schmidinger@cadsoft.de.
|
||||||
*
|
*
|
||||||
* $Id: remux.c 1.48 2005/12/03 12:06:23 kls Exp $
|
* $Id: remux.c 1.49 2005/12/03 14:33:10 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "remux.h"
|
#include "remux.h"
|
||||||
@ -88,15 +88,21 @@ ePesHeader AnalyzePesHeader(const uchar *Data, int Count, int &PesPayloadOffset,
|
|||||||
|
|
||||||
// --- cRepacker -------------------------------------------------------------
|
// --- cRepacker -------------------------------------------------------------
|
||||||
|
|
||||||
|
#define MIN_LOG_INTERVAL 10 // min. # of seconds between two consecutive log messages of a cRepacker
|
||||||
|
#define LOG(a...) (LogAllowed() && (esyslog(a), true))
|
||||||
|
|
||||||
class cRepacker {
|
class cRepacker {
|
||||||
protected:
|
protected:
|
||||||
bool initiallySyncing;
|
bool initiallySyncing;
|
||||||
int maxPacketSize;
|
int maxPacketSize;
|
||||||
uint8_t subStreamId;
|
uint8_t subStreamId;
|
||||||
static void DroppedData(const char *Reason, int Count) { esyslog("%s (dropped %d bytes)", Reason, Count); }
|
time_t lastLog;
|
||||||
|
int suppressedLogMessages;
|
||||||
|
bool LogAllowed(void);
|
||||||
|
void DroppedData(const char *Reason, int Count) { LOG("%s (dropped %d bytes)", Reason, Count); }
|
||||||
public:
|
public:
|
||||||
static int Put(cRingBufferLinear *ResultBuffer, const uchar *Data, int Count, int CapacityNeeded);
|
static int Put(cRingBufferLinear *ResultBuffer, const uchar *Data, int Count, int CapacityNeeded);
|
||||||
cRepacker(void) { initiallySyncing = true; maxPacketSize = 6 + 65535; subStreamId = 0; }
|
cRepacker(void);
|
||||||
virtual ~cRepacker() {}
|
virtual ~cRepacker() {}
|
||||||
virtual void Reset(void) { initiallySyncing = true; }
|
virtual void Reset(void) { initiallySyncing = true; }
|
||||||
virtual void Repack(cRingBufferLinear *ResultBuffer, const uchar *Data, int Count) = 0;
|
virtual void Repack(cRingBufferLinear *ResultBuffer, const uchar *Data, int Count) = 0;
|
||||||
@ -106,6 +112,30 @@ public:
|
|||||||
void SetSubStreamId(uint8_t SubStreamId) { subStreamId = SubStreamId; }
|
void SetSubStreamId(uint8_t SubStreamId) { subStreamId = SubStreamId; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
cRepacker::cRepacker(void)
|
||||||
|
{
|
||||||
|
initiallySyncing = true;
|
||||||
|
maxPacketSize = 6 + 65535;
|
||||||
|
subStreamId = 0;
|
||||||
|
suppressedLogMessages = 0;;
|
||||||
|
lastLog = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cRepacker::LogAllowed(void)
|
||||||
|
{
|
||||||
|
bool Allowed = time(NULL) - lastLog > 10;
|
||||||
|
lastLog = time(NULL);
|
||||||
|
if (Allowed) {
|
||||||
|
if (suppressedLogMessages) {
|
||||||
|
esyslog("%d cRepacker messages suppressed", suppressedLogMessages);
|
||||||
|
suppressedLogMessages = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
suppressedLogMessages++;
|
||||||
|
return Allowed;
|
||||||
|
}
|
||||||
|
|
||||||
int cRepacker::Put(cRingBufferLinear *ResultBuffer, const uchar *Data, int Count, int CapacityNeeded)
|
int cRepacker::Put(cRingBufferLinear *ResultBuffer, const uchar *Data, int Count, int CapacityNeeded)
|
||||||
{
|
{
|
||||||
if (CapacityNeeded >= Count && ResultBuffer->Free() < CapacityNeeded) {
|
if (CapacityNeeded >= Count && ResultBuffer->Free() < CapacityNeeded) {
|
||||||
@ -160,7 +190,7 @@ bool cCommonRepacker::PushOutPacket(cRingBufferLinear *ResultBuffer, const uchar
|
|||||||
// just skip packets with no payload
|
// just skip packets with no payload
|
||||||
int PesPayloadOffset = 0;
|
int PesPayloadOffset = 0;
|
||||||
if (AnalyzePesHeader(fragmentData, fragmentLen, PesPayloadOffset) <= phInvalid)
|
if (AnalyzePesHeader(fragmentData, fragmentLen, PesPayloadOffset) <= phInvalid)
|
||||||
esyslog("cCommonRepacker: invalid PES packet encountered in fragment buffer!");
|
LOG("cCommonRepacker: invalid PES packet encountered in fragment buffer!");
|
||||||
else if (6 + PacketLen <= PesPayloadOffset) {
|
else if (6 + PacketLen <= PesPayloadOffset) {
|
||||||
fragmentLen = 0;
|
fragmentLen = 0;
|
||||||
return true; // skip empty packet
|
return true; // skip empty packet
|
||||||
@ -181,7 +211,7 @@ bool cCommonRepacker::PushOutPacket(cRingBufferLinear *ResultBuffer, const uchar
|
|||||||
// just skip packets with no payload
|
// just skip packets with no payload
|
||||||
int PesPayloadOffset = 0;
|
int PesPayloadOffset = 0;
|
||||||
if (AnalyzePesHeader(pesHeader, pesHeaderLen, PesPayloadOffset) <= phInvalid)
|
if (AnalyzePesHeader(pesHeader, pesHeaderLen, PesPayloadOffset) <= phInvalid)
|
||||||
esyslog("cCommonRepacker: invalid PES packet encountered in header buffer!");
|
LOG("cCommonRepacker: invalid PES packet encountered in header buffer!");
|
||||||
else if (6 + PacketLen <= PesPayloadOffset) {
|
else if (6 + PacketLen <= PesPayloadOffset) {
|
||||||
pesHeaderLen = 0;
|
pesHeaderLen = 0;
|
||||||
return true; // skip empty packet
|
return true; // skip empty packet
|
||||||
@ -278,14 +308,14 @@ void cVideoRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
|
|||||||
// which kind of start code have we got?
|
// which kind of start code have we got?
|
||||||
switch (*data) {
|
switch (*data) {
|
||||||
case 0xB9 ... 0xFF: // system start codes
|
case 0xB9 ... 0xFF: // system start codes
|
||||||
esyslog("cVideoRepacker: found system start code: stream seems to be scrambled or not demultiplexed");
|
LOG("cVideoRepacker: found system start code: stream seems to be scrambled or not demultiplexed");
|
||||||
break;
|
break;
|
||||||
case 0xB0 ... 0xB1: // reserved start codes
|
case 0xB0 ... 0xB1: // reserved start codes
|
||||||
case 0xB6:
|
case 0xB6:
|
||||||
esyslog("cVideoRepacker: found reserved start code: stream seems to be scrambled");
|
LOG("cVideoRepacker: found reserved start code: stream seems to be scrambled");
|
||||||
break;
|
break;
|
||||||
case 0xB4: // sequence error code
|
case 0xB4: // sequence error code
|
||||||
isyslog("cVideoRepacker: found sequence error code: stream seems to be damaged");
|
LOG("cVideoRepacker: found sequence error code: stream seems to be damaged");
|
||||||
case 0xB2: // user data start code
|
case 0xB2: // user data start code
|
||||||
case 0xB5: // extension start code
|
case 0xB5: // extension start code
|
||||||
break;
|
break;
|
||||||
@ -307,7 +337,7 @@ void cVideoRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
|
|||||||
if (initiallySyncing) // omit report for the typical initial case
|
if (initiallySyncing) // omit report for the typical initial case
|
||||||
initiallySyncing = false;
|
initiallySyncing = false;
|
||||||
else if (skippedBytes > SkippedBytesLimit) // report that syncing dropped some bytes
|
else if (skippedBytes > SkippedBytesLimit) // report that syncing dropped some bytes
|
||||||
esyslog("cVideoRepacker: skipped %d bytes to sync on next picture", skippedBytes - SkippedBytesLimit);
|
LOG("cVideoRepacker: skipped %d bytes to sync on next picture", skippedBytes - SkippedBytesLimit);
|
||||||
skippedBytes = 0;
|
skippedBytes = 0;
|
||||||
// if there is a PES header available, then use it ...
|
// if there is a PES header available, then use it ...
|
||||||
if (pesHeaderBackupLen > 0) {
|
if (pesHeaderBackupLen > 0) {
|
||||||
@ -465,7 +495,7 @@ void cVideoRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
|
|||||||
// report that syncing dropped some bytes
|
// report that syncing dropped some bytes
|
||||||
if (skippedBytes > SkippedBytesLimit) {
|
if (skippedBytes > SkippedBytesLimit) {
|
||||||
if (!initiallySyncing) // omit report for the typical initial case
|
if (!initiallySyncing) // omit report for the typical initial case
|
||||||
esyslog("cVideoRepacker: skipped %d bytes while syncing on next picture", skippedBytes - SkippedBytesLimit);
|
LOG("cVideoRepacker: skipped %d bytes while syncing on next picture", skippedBytes - SkippedBytesLimit);
|
||||||
skippedBytes = SkippedBytesLimit;
|
skippedBytes = SkippedBytesLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -674,7 +704,7 @@ void cAudioRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
|
|||||||
if (initiallySyncing) // omit report for the typical initial case
|
if (initiallySyncing) // omit report for the typical initial case
|
||||||
initiallySyncing = false;
|
initiallySyncing = false;
|
||||||
else if (skippedBytes > SkippedBytesLimit) // report that syncing dropped some bytes
|
else if (skippedBytes > SkippedBytesLimit) // report that syncing dropped some bytes
|
||||||
esyslog("cAudioRepacker(0x%02X): skipped %d bytes to sync on next audio frame", cid, skippedBytes - SkippedBytesLimit);
|
LOG("cAudioRepacker(0x%02X): skipped %d bytes to sync on next audio frame", cid, skippedBytes - SkippedBytesLimit);
|
||||||
skippedBytes = 0;
|
skippedBytes = 0;
|
||||||
// if there is a PES header available, then use it ...
|
// if there is a PES header available, then use it ...
|
||||||
if (pesHeaderBackupLen > 0) {
|
if (pesHeaderBackupLen > 0) {
|
||||||
@ -832,7 +862,7 @@ void cAudioRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
|
|||||||
// report that syncing dropped some bytes
|
// report that syncing dropped some bytes
|
||||||
if (skippedBytes > SkippedBytesLimit) {
|
if (skippedBytes > SkippedBytesLimit) {
|
||||||
if (!initiallySyncing) // omit report for the typical initial case
|
if (!initiallySyncing) // omit report for the typical initial case
|
||||||
esyslog("cAudioRepacker(0x%02X): skipped %d bytes while syncing on next audio frame", cid, skippedBytes - SkippedBytesLimit);
|
LOG("cAudioRepacker(0x%02X): skipped %d bytes while syncing on next audio frame", cid, skippedBytes - SkippedBytesLimit);
|
||||||
skippedBytes = SkippedBytesLimit;
|
skippedBytes = SkippedBytesLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1157,7 +1187,7 @@ void cDolbyRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
|
|||||||
if (initiallySyncing) // omit report for the typical initial case
|
if (initiallySyncing) // omit report for the typical initial case
|
||||||
initiallySyncing = false;
|
initiallySyncing = false;
|
||||||
else if (skippedBytes > SkippedBytesLimit) // report that syncing dropped some bytes
|
else if (skippedBytes > SkippedBytesLimit) // report that syncing dropped some bytes
|
||||||
esyslog("cDolbyRepacker: skipped %d bytes to sync on next AC3 frame", skippedBytes - SkippedBytesLimit);
|
LOG("cDolbyRepacker: skipped %d bytes to sync on next AC3 frame", skippedBytes - SkippedBytesLimit);
|
||||||
skippedBytes = 0;
|
skippedBytes = 0;
|
||||||
// append read data to header for common output processing
|
// append read data to header for common output processing
|
||||||
pesHeader[pesHeaderLen++] = 0x0B;
|
pesHeader[pesHeaderLen++] = 0x0B;
|
||||||
@ -1188,7 +1218,7 @@ void cDolbyRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
|
|||||||
// report that syncing dropped some bytes
|
// report that syncing dropped some bytes
|
||||||
if (skippedBytes > SkippedBytesLimit) {
|
if (skippedBytes > SkippedBytesLimit) {
|
||||||
if (!initiallySyncing) // omit report for the typical initial case
|
if (!initiallySyncing) // omit report for the typical initial case
|
||||||
esyslog("cDolbyRepacker: skipped %d bytes while syncing on next AC3 frame", skippedBytes - 4);
|
LOG("cDolbyRepacker: skipped %d bytes while syncing on next AC3 frame", skippedBytes - 4);
|
||||||
skippedBytes = SkippedBytesLimit;
|
skippedBytes = SkippedBytesLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user