diff options
author | Klaus Schmidinger <Klaus (dot) Schmidinger (at) tvdr (dot) de> | 2010-01-31 15:42:00 +0100 |
---|---|---|
committer | Klaus Schmidinger <Klaus (dot) Schmidinger (at) tvdr (dot) de> | 2010-01-31 15:42:00 +0100 |
commit | 09a17d56e2a3f975a0467e8da4ca26c946b6ccf7 (patch) | |
tree | 4ca95499f117bf8bf0a51149bb85493d93ee111e /remux.c | |
parent | 939081e274d0a9868e5ba9a7951666ad508afb96 (diff) | |
download | vdr-patch-lnbsharing-09a17d56e2a3f975a0467e8da4ca26c946b6ccf7.tar.gz vdr-patch-lnbsharing-09a17d56e2a3f975a0467e8da4ca26c946b6ccf7.tar.bz2 |
Version 1.7.12vdr-1.7.12
- Changed the EVCONTENTMASK_* macros to enums and changed "mask" to "group".
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
- The "Edit timer" menu can now set the folder for the recording from a list of
folders stored in "folders.conf".
- Updated the Italian OSD texts (thanks to Diego Pierotto).
- If svdrphosts.conf contains only the address of the local host, the SVDRP port
is opened only for the local host (thanks to Manuel Reimer).
- Renamed 'runvdr' to 'runvdr.template' and no longer copying it to the BINDIR
in 'make install' (thanks to Martin Dauskardt).
- Added plain text error messages to log entries from cOsd::SetAreas() (suggested
by Rolf Ahrenberg).
- cPalette::ClosestColor() now treats fully transparent colors as "equal"; improved
cDvbSpuBitmap::getMinBpp() (thanks to Matthieu Castet and Johann Friedrichs).
- The new setup option "Miscellaneous/Channels wrap" controls whether the current
channel wraps around the beginning or end of the channel list when zapping (thanks
to Matti Lehtimäki).
- Fixed determining the frame duration on channels where the PTS deltas jitter by
+/-1 around 1800.
- The PCR pid in generated PMTs is now set to the channel's PCR pid again.
- Fixed determining the frame duration on channels where the PTS deltas jitter by
+/-1 around 3600.
- The PCR pid is now recorded for channels where this is different from the video
PID. To facilitate this, the interfaces of cTransfer, cTransferControl, cRecorder
and cReceiver have been modified, so that the PIDs are no longer given in separate
parameters, but rather the whole channel is handed down for processing. The old
constructor of cReceiver is still available, but it is recommended to plugin authors
that they switch to the new interface as soon as possible.
When replaying such a recording, the PCR packets are sent to PlayTsVideo()
- The files "commands.conf" and "reccmd.conf" can now contain nested lists of
commands. See vdr.5 for information about the new file format.
Diffstat (limited to 'remux.c')
-rw-r--r-- | remux.c | 21 |
1 files changed, 13 insertions, 8 deletions
@@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.c 2.37 2009/12/29 15:56:33 kls Exp $ + * $Id: remux.c 2.41 2010/01/30 10:43:12 kls Exp $ */ #include "remux.h" @@ -144,7 +144,7 @@ void TsSetTeiOnBrokenPackets(uchar *p, int l) // --- cPatPmtGenerator ------------------------------------------------------ -cPatPmtGenerator::cPatPmtGenerator(cChannel *Channel) +cPatPmtGenerator::cPatPmtGenerator(const cChannel *Channel) { numPmtPackets = 0; patCounter = pmtCounter = 0; @@ -243,7 +243,7 @@ int cPatPmtGenerator::MakeCRC(uchar *Target, const uchar *Data, int Length) #define P_PMT_PID 0x0084 // pseudo PMT pid #define MAXPID 0x2000 // the maximum possible number of pids -void cPatPmtGenerator::GeneratePmtPid(cChannel *Channel) +void cPatPmtGenerator::GeneratePmtPid(const cChannel *Channel) { bool Used[MAXPID] = { false }; #define SETPID(p) { if ((p) >= 0 && (p) < MAXPID) Used[p] = true; } @@ -287,7 +287,7 @@ void cPatPmtGenerator::GeneratePat(void) IncVersion(patVersion); } -void cPatPmtGenerator::GeneratePmt(cChannel *Channel) +void cPatPmtGenerator::GeneratePmt(const cChannel *Channel) { // generate the complete PMT section: uchar buf[MAX_SECTION_SIZE]; @@ -295,7 +295,7 @@ void cPatPmtGenerator::GeneratePmt(cChannel *Channel) numPmtPackets = 0; if (Channel) { int Vpid = Channel->Vpid(); - int Ppid = 0x1FFF; // no PCR pid + int Ppid = Channel->Ppid(); uchar *p = buf; int i = 0; p[i++] = 0x02; // table id @@ -364,7 +364,7 @@ void cPatPmtGenerator::SetVersions(int PatVersion, int PmtVersion) pmtVersion = PmtVersion & 0x1F; } -void cPatPmtGenerator::SetChannel(cChannel *Channel) +void cPatPmtGenerator::SetChannel(const cChannel *Channel) { if (Channel) { GeneratePmtPid(Channel); @@ -402,6 +402,7 @@ void cPatPmtParser::Reset(void) patVersion = pmtVersion = -1; pmtPid = -1; vpid = vtype = 0; + ppid = 0; } void cPatPmtParser::ParsePat(const uchar *Data, int Length) @@ -486,6 +487,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) int NumDpids = 0; int NumSpids = 0; vpid = vtype = 0; + ppid = 0; apids[0] = 0; dpids[0] = 0; spids[0] = 0; @@ -500,6 +502,7 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) case 0x1B: // MPEG4 vpid = stream.getPid(); vtype = stream.getStreamType(); + ppid = Pmt.getPCRPid(); break; case 0x03: // STREAMTYPE_11172_AUDIO case 0x04: // STREAMTYPE_13818_AUDIO @@ -842,10 +845,12 @@ int cFrameDetector::Analyze(const uchar *Data, int Length) // determine frame info: if (isVideo) { if (Delta % 3600 == 0) - frameDuration = 3600; // PAL, 25 fps + frameDuration = 3600; // PAL, 25 fps, exact timing + else if (abs(Delta % 3600) == 3599 || abs(Delta % 3600) == 1) + frameDuration = 3600; // PAL, 25 fps, timing with jitter else if (Delta % 3003 == 0) frameDuration = 3003; // NTSC, 29.97 fps - else if (Delta == 1800) { + else if (abs(Delta - 1800) <= 1) { frameDuration = 3600; // PAL, 25 fps framesPerPayloadUnit = -2; } |