Version 1.5.12

- Fixed assembling PS1 packets in cTS2PES::instant_repack() (thanks to Reinhard
  Nissl).
- Updated the Russian OSD texts (thanks to Oleg Roitburd).
- Fixed handling small PES packets that caused subtitles to be displayed late
  in live mode (based on a patch from Reinhard Nissl).
- Fixed stopping live subtitles when a player is attached to the device.
- Fixed suddenly stopping subtitles in live mode.
This commit is contained in:
Klaus Schmidinger
2007-11-18 18:00:00 +01:00
parent 182cd78af0
commit 29b2d48bb5
8 changed files with 94 additions and 45 deletions

View File

@@ -1149,6 +1149,9 @@ Reinhard Nissl <rnissl@gmx.de>
for adding a debug error message to cReceiver::~cReceiver() in case it is still for adding a debug error message to cReceiver::~cReceiver() in case it is still
attached to a device attached to a device
for reporting a missing SetVolumeDevice() call in cDevice::SetPrimaryDevice() for reporting a missing SetVolumeDevice() call in cDevice::SetPrimaryDevice()
for fixing assembling PS1 packets in cTS2PES::instant_repack()
for a patch that was used to fix handling small PES packets that caused subtitles
to be displayed late in live mode
Richard Robson <richard_robson@beeb.net> Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the for reporting freezing replay if a timer starts while in Transfer Mode from the

10
HISTORY
View File

@@ -5518,3 +5518,13 @@ Video Disk Recorder Revision History
Kirchgatterer). Kirchgatterer).
- Fixed decoding filename characters in case there are not two hex digits after - Fixed decoding filename characters in case there are not two hex digits after
the '#' (reported by Helmut Auer). the '#' (reported by Helmut Auer).
2007-11-18: Version 1.5.12
- Fixed assembling PS1 packets in cTS2PES::instant_repack() (thanks to Reinhard
Nissl).
- Updated the Russian OSD texts (thanks to Oleg Roitburd).
- Fixed handling small PES packets that caused subtitles to be displayed late
in live mode (based on a patch from Reinhard Nissl).
- Fixed stopping live subtitles when a player is attached to the device.
- Fixed suddenly stopping subtitles in live mode.

View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: config.h 1.300 2007/10/17 18:34:17 kls Exp $ * $Id: config.h 1.301 2007/11/10 13:38:19 kls Exp $
*/ */
#ifndef __CONFIG_H #ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number: // VDR's own version number:
#define VDRVERSION "1.5.11" #define VDRVERSION "1.5.12"
#define VDRVERSNUM 10511 // Version * 10000 + Major * 100 + Minor #define VDRVERSNUM 10512 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number: // The plugin API's version number:
#define APIVERSION "1.5.11" #define APIVERSION "1.5.12"
#define APIVERSNUM 10511 // Version * 10000 + Major * 100 + Minor #define APIVERSNUM 10512 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which // When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to // may be smaller than VDRVERSION in case there have been no changes to

View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: device.c 1.147 2007/11/03 13:30:09 kls Exp $ * $Id: device.c 1.148 2007/11/17 15:39:28 kls Exp $
*/ */
#include "device.h" #include "device.h"
@@ -1148,6 +1148,8 @@ bool cDevice::AttachPlayer(cPlayer *Player)
if (CanReplay()) { if (CanReplay()) {
if (player) if (player)
Detach(player); Detach(player);
DELETENULL(liveSubtitle);
DELETENULL(dvbSubtitleConverter);
pesAssembler->Reset(); pesAssembler->Reset();
player = Player; player = Player;
if (!Transferring()) if (!Transferring())

View File

@@ -2,15 +2,16 @@
# Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de> # Copyright (C) 2007 Klaus Schmidinger <kls@cadsoft.de>
# This file is distributed under the same license as the VDR package. # This file is distributed under the same license as the VDR package.
# Vyacheslav Dikonov <sdiconov@mail.ru>, 2004 # Vyacheslav Dikonov <sdiconov@mail.ru>, 2004
# Oleg Roitburd <oleg@roitburd.de>, 2007
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: VDR 1.5.7\n" "Project-Id-Version: VDR 1.5.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n" "Report-Msgid-Bugs-To: <vdr-bugs@cadsoft.de>\n"
"POT-Creation-Date: 2007-10-13 11:29+0200\n" "POT-Creation-Date: 2007-10-13 11:29+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n" "PO-Revision-Date: 2007-11-05 14:24+0100\n"
"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n" "Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: <vdr@linuxtv.org>\n" "Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@@ -166,7 +167,7 @@ msgid "Key$Audio"
msgstr "<22><><EFBFBD><EFBFBD>" msgstr "<22><><EFBFBD><EFBFBD>"
msgid "Key$Subtitles" msgid "Key$Subtitles"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Key$Schedule" msgid "Key$Schedule"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
@@ -187,31 +188,31 @@ msgid "Key$Commands"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Key$User1" msgid "Key$User1"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1"
msgid "Key$User2" msgid "Key$User2"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2"
msgid "Key$User3" msgid "Key$User3"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3"
msgid "Key$User4" msgid "Key$User4"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4"
msgid "Key$User5" msgid "Key$User5"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5"
msgid "Key$User6" msgid "Key$User6"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6"
msgid "Key$User7" msgid "Key$User7"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7"
msgid "Key$User8" msgid "Key$User8"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8"
msgid "Key$User9" msgid "Key$User9"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9"
msgid "Free To Air" msgid "Free To Air"
msgstr "FTA (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)" msgstr "FTA (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)"
@@ -253,10 +254,10 @@ msgid "Dpid2"
msgstr "Dpid2 (AC3 2)" msgstr "Dpid2 (AC3 2)"
msgid "Spid1" msgid "Spid1"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>1"
msgid "Spid2" msgid "Spid2"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>2"
msgid "Tpid" msgid "Tpid"
msgstr "Tpid (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)" msgstr "Tpid (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)"
@@ -627,22 +628,22 @@ msgid "Setup.DVB$Audio language"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.DVB$Display subtitles" msgid "Setup.DVB$Display subtitles"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.DVB$Subtitle languages" msgid "Setup.DVB$Subtitle languages"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.DVB$Subtitle language" msgid "Setup.DVB$Subtitle language"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.DVB$Subtitle offset" msgid "Setup.DVB$Subtitle offset"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.DVB$Subtitle foreground transparency" msgid "Setup.DVB$Subtitle foreground transparency"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Setup.DVB$Subtitle background transparency" msgid "Setup.DVB$Subtitle background transparency"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "LNB" msgid "LNB"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
@@ -837,13 +838,13 @@ msgid "No audio available!"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!" msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!"
msgid "No subtitles" msgid "No subtitles"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "Button$Subtitles" msgid "Button$Subtitles"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
msgid "No subtitles available!" msgid "No subtitles available!"
msgstr "" msgstr "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"
msgid "Not enough disk space to start recording!" msgid "Not enough disk space to start recording!"
msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"

36
remux.c
View File

@@ -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.60 2007/11/03 14:18:07 kls Exp $ * $Id: remux.c 1.63 2007/11/18 14:45:28 kls Exp $
*/ */
#include "remux.h" #include "remux.h"
@@ -1427,7 +1427,6 @@ int cDolbyRepacker::BreakAt(const uchar *Data, int Count)
#define MMAX_PLENGTH (64*MAX_PLENGTH) // some stations send PES packets that are extremely large, e.g. DVB-T in Finland or HDTV 1920x1080 #define MMAX_PLENGTH (64*MAX_PLENGTH) // some stations send PES packets that are extremely large, e.g. DVB-T in Finland or HDTV 1920x1080
#define IPACKS 2048 #define IPACKS 2048
#define SUBTITLE_PACKS KILOBYTE(32)
// Start codes: // Start codes:
#define SC_SEQUENCE 0xB3 // "sequence header code" #define SC_SEQUENCE 0xB3 // "sequence header code"
@@ -1750,13 +1749,13 @@ void cTS2PES::instant_repack(const uint8_t *Buf, int Count)
case VIDEO_STREAM_S ... VIDEO_STREAM_E: case VIDEO_STREAM_S ... VIDEO_STREAM_E:
case PRIVATE_STREAM1: case PRIVATE_STREAM1:
if (mpeg == 2 && found == 9) { if (mpeg == 2 && found == 9 && count < found) { // make sure to not write the data twice by looking at count
write_ipack(&flag1, 1); write_ipack(&flag1, 1);
write_ipack(&flag2, 1); write_ipack(&flag2, 1);
write_ipack(&hlength, 1); write_ipack(&hlength, 1);
} }
if (mpeg == 1 && found == mpeg1_required) { if (mpeg == 1 && found == mpeg1_required && count < found) { // make sure to not write the data twice by looking at count
write_ipack(&flag1, 1); write_ipack(&flag1, 1);
if (mpeg1_required > 7) { if (mpeg1_required > 7) {
write_ipack(&flag2, 1); write_ipack(&flag2, 1);
@@ -1870,6 +1869,29 @@ void cTS2PES::ts_to_pes(const uint8_t *Buf) // don't need count (=188)
instant_repack(Buf + 4 + off, TS_SIZE - 4 - off); instant_repack(Buf + 4 + off, TS_SIZE - 4 - off);
} }
// --- cRingBufferLinearPes --------------------------------------------------
class cRingBufferLinearPes : public cRingBufferLinear {
protected:
virtual int DataReady(const uchar *Data, int Count);
public:
cRingBufferLinearPes(int Size, int Margin = 0, bool Statistics = false, const char *Description = NULL)
:cRingBufferLinear(Size, Margin, Statistics, Description) {}
};
int cRingBufferLinearPes::DataReady(const uchar *Data, int Count)
{
int c = cRingBufferLinear::DataReady(Data, Count);
if (!c && Count >= 6) {
if (!Data[0] && !Data[1] && Data[2] == 0x01) {
int Length = 6 + Data[4] * 256 + Data[5];
if (Length <= Count)
return Length;
}
}
return c;
}
// --- cRemux ---------------------------------------------------------------- // --- cRemux ----------------------------------------------------------------
#define RESULTBUFFERSIZE KILOBYTE(256) #define RESULTBUFFERSIZE KILOBYTE(256)
@@ -1883,7 +1905,7 @@ cRemux::cRemux(int VPid, const int *APids, const int *DPids, const int *SPids, b
skipped = 0; skipped = 0;
numTracks = 0; numTracks = 0;
resultSkipped = 0; resultSkipped = 0;
resultBuffer = new cRingBufferLinear(RESULTBUFFERSIZE, IPACKS, false, "Result"); resultBuffer = new cRingBufferLinearPes(RESULTBUFFERSIZE, IPACKS, false, "Result");
resultBuffer->SetTimeouts(0, 100); resultBuffer->SetTimeouts(0, 100);
if (VPid) if (VPid)
#define TEST_cVideoRepacker #define TEST_cVideoRepacker
@@ -1912,7 +1934,7 @@ cRemux::cRemux(int VPid, const int *APids, const int *DPids, const int *SPids, b
if (SPids) { if (SPids) {
int n = 0; int n = 0;
while (*SPids && numTracks < MAXTRACKS && n < MAXSPIDS) while (*SPids && numTracks < MAXTRACKS && n < MAXSPIDS)
ts2pes[numTracks++] = new cTS2PES(*SPids++, resultBuffer, SUBTITLE_PACKS, 0x00, 0x20 + n++); ts2pes[numTracks++] = new cTS2PES(*SPids++, resultBuffer, IPACKS, 0x00, 0x20 + n++);
} }
} }
@@ -2010,7 +2032,7 @@ int cRemux::Put(const uchar *Data, int Count)
break; break;
if (Data[i] != TS_SYNC_BYTE) if (Data[i] != TS_SYNC_BYTE)
break; break;
if (resultBuffer->Free() < SUBTITLE_PACKS) if (resultBuffer->Free() < 2 * IPACKS)
break; // A cTS2PES might write one full packet and also a small rest break; // A cTS2PES might write one full packet and also a small rest
int pid = GetPid(Data + i + 1); int pid = GetPid(Data + i + 1);
if (Data[i + 3] & 0x10) { // got payload if (Data[i + 3] & 0x10) { // got payload

View File

@@ -7,7 +7,7 @@
* Parts of this file were inspired by the 'ringbuffy.c' from the * Parts of this file were inspired by the 'ringbuffy.c' from the
* LinuxDVB driver (see linuxtv.org). * LinuxDVB driver (see linuxtv.org).
* *
* $Id: ringbuffer.c 1.24 2006/06/16 09:32:13 kls Exp $ * $Id: ringbuffer.c 1.25 2007/11/17 13:49:34 kls Exp $
*/ */
#include "ringbuffer.h" #include "ringbuffer.h"
@@ -187,6 +187,11 @@ cRingBufferLinear::~cRingBufferLinear()
free(description); free(description);
} }
int cRingBufferLinear::DataReady(const uchar *Data, int Count)
{
return Count >= margin ? Count : 0;
}
int cRingBufferLinear::Available(void) int cRingBufferLinear::Available(void)
{ {
int diff = head - tail; int diff = head - tail;
@@ -284,7 +289,6 @@ int cRingBufferLinear::Put(const uchar *Data, int Count)
uchar *cRingBufferLinear::Get(int &Count) uchar *cRingBufferLinear::Get(int &Count)
{ {
uchar *p = NULL;
int Head = head; int Head = head;
if (getThreadTid <= 0) if (getThreadTid <= 0)
getThreadTid = cThread::ThreadId(); getThreadTid = cThread::ThreadId();
@@ -299,13 +303,13 @@ uchar *cRingBufferLinear::Get(int &Count)
int cont = (diff >= 0) ? diff : Size() + diff - margin; int cont = (diff >= 0) ? diff : Size() + diff - margin;
if (cont > rest) if (cont > rest)
cont = rest; cont = rest;
if (cont >= margin) { uchar *p = buffer + tail;
p = buffer + tail; if ((cont = DataReady(p, cont)) > 0) {
Count = gotten = cont; Count = gotten = cont;
return p;
} }
if (!p) WaitForGet();
WaitForGet(); return NULL;
return p;
} }
void cRingBufferLinear::Del(int Count) void cRingBufferLinear::Del(int Count)

View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: ringbuffer.h 1.17 2005/12/10 10:54:51 kls Exp $ * $Id: ringbuffer.h 1.18 2007/11/17 13:49:34 kls Exp $
*/ */
#ifndef __RINGBUFFER_H #ifndef __RINGBUFFER_H
@@ -60,6 +60,13 @@ private:
int gotten; int gotten;
uchar *buffer; uchar *buffer;
char *description; char *description;
protected:
virtual int DataReady(const uchar *Data, int Count);
///< By default a ring buffer has data ready as soon as there are at least
///< 'margin' bytes available. A derived class can reimplement this function
///< if it has other conditions that define when data is ready.
///< The return value is either 0 if there is not yet enough data available,
///< or the number of bytes from the beginning of Data that are "ready".
public: public:
cRingBufferLinear(int Size, int Margin = 0, bool Statistics = false, const char *Description = NULL); cRingBufferLinear(int Size, int Margin = 0, bool Statistics = false, const char *Description = NULL);
///< Creates a linear ring buffer. ///< Creates a linear ring buffer.