diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2012-12-02 14:33:06 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2012-12-02 14:33:06 +0100 |
commit | 441bf300321d5ae6c56a16bf59e88888981f4fa0 (patch) | |
tree | 8684f86dcc9f26a4a6d9cc7f9b660e2d7378553d | |
parent | a23a13873f1c209312fcfde5254e3ef24ee165fd (diff) | |
download | vdr-441bf300321d5ae6c56a16bf59e88888981f4fa0.tar.gz vdr-441bf300321d5ae6c56a16bf59e88888981f4fa0.tar.bz2 |
Simplified calculating the PTS offset in cPtsFixer::Fix() and fixed the overflow handling of PCR values
-rw-r--r-- | CONTRIBUTORS | 2 | ||||
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | cutter.c | 14 |
3 files changed, 8 insertions, 10 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index cd58e9b4..a993e76b 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2978,6 +2978,8 @@ Sören Moch <smoch@web.de> packets that have a payload for pointing out that when adjusting the DTS values in the cutter, it hase to compensate for dropped B-frames + for simplifying calculating the PTS offset in cPtsFixer::Fix() and fixing the overflow + handling of PCR values Peter Münster <pmlists@free.fr> for fixing 'make install' to not overwrite existing configuration files @@ -7356,3 +7356,5 @@ Video Disk Recorder Revision History - Fixed adjusting the DTS values in the cutter, to compensate for dropped B-frames (pointed out by Sören Moch). - Fixed a typo in skins.h (thanks to Lars Hanisch). +- Simplified calculating the PTS offset in cPtsFixer::Fix() and fixed the overflow + handling of PCR values (thanks to Sören Moch). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: cutter.c 2.20 2012/11/29 15:30:01 kls Exp $ + * $Id: cutter.c 2.21 2012/12/02 14:30:55 kls Exp $ */ #include "cutter.h" @@ -192,14 +192,8 @@ void cPtsFixer::Fix(uchar *Data, int Length, bool CutIn) // Determine the PTS offset at the beginning of each sequence (except the first one): if (CutIn && lastPts >= 0) { int64_t Pts = TsGetPts(Data, Length); - if (Pts >= 0) { - // offset is calculated so that Pts + offset results in lastPts + delta: - offset = Pts - PtsAdd(lastPts, delta); - if (offset <= 0) - offset = -offset; - else - offset = MAX33BIT + 1 - offset; - } + if (Pts >= 0) + offset = (lastPts + delta - Pts) & MAX33BIT; // offset is calculated so that Pts + offset results in lastPts + delta fixCounters = true; } // Keep track of the highest video PTS: @@ -262,7 +256,7 @@ void cPtsFixer::Fix(uchar *Data, int Length, bool CutIn) int64_t Pcr = TsGetPcr(p); if (Pcr >= 0) { int64_t NewPcr = Pcr + offset * PCRFACTOR; - if (NewPcr >= MAX27MHZ) + if (NewPcr > MAX27MHZ) NewPcr -= MAX27MHZ + 1; TsSetPcr(p, NewPcr); } |