From c9ac6f5196c63d6999ea764f7d9d7a2367f20f51 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 14 Sep 2012 09:11:18 +0200 Subject: [PATCH] Fixed mapping the frame type bits when detecting independent frames in MPEG 4 video --- CONTRIBUTORS | 2 ++ HISTORY | 4 +++- remux.c | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 8d2496d1..ec8163ed 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1322,6 +1322,8 @@ Reinhard Nissl for reporting that the Transfer Mode indicator bitmap in the LCARS skin may not fit with small font sizes for reporting a race condition when zapping in transfer mode + for reporting an error in mapping the frame type bits when detecting independent + frames in MPEG 4 video Richard Robson for reporting freezing replay if a timer starts while in Transfer Mode from the diff --git a/HISTORY b/HISTORY index b0e96dd0..d67c09e1 100644 --- a/HISTORY +++ b/HISTORY @@ -7235,7 +7235,9 @@ Video Disk Recorder Revision History function in order to make use of this new feature. See, for instance, the function cSkinClassicDisplayMenu::SetButtons() in skinclassic.c for details. -2012-09-13: Version 1.7.31 +2012-09-14: Version 1.7.31 - If regenerating an index file fails and no data is written to the file, VDR now reports this error and removes the empty index file. +- Fixed mapping the frame type bits when detecting independent frames in MPEG 4 + video (reported by Reinhard Nissl). diff --git a/remux.c b/remux.c index bd06e7ce..3698cc41 100644 --- a/remux.c +++ b/remux.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.c 2.64 2012/03/02 10:56:49 kls Exp $ + * $Id: remux.c 2.65 2012/09/14 09:06:14 kls Exp $ */ #include "remux.h" @@ -974,8 +974,8 @@ int cFrameDetector::Analyze(const uchar *Data, int Length) if (FrameTypeOffset >= TS_SIZE) // the byte to check is in the next TS packet i = SkipPackets(Data, Length, Processed, FrameTypeOffset); newFrame = true; - uchar FrameType = Data[FrameTypeOffset]; - independentFrame = FrameType == 0x10; + uchar FrameType = Data[FrameTypeOffset] & 0xE0; + independentFrame = FrameType == 0x00; if (synced) { if (framesPerPayloadUnit < 0) { payloadUnitOfFrame = (payloadUnitOfFrame + 1) % -framesPerPayloadUnit;