Version 1.7.7

- The new function cDevice::GetVideoSize() returns the size and aspect ratio
  of the video material currently displayed. This function is used to determine
  the proper size of the OSD. Plugin authors should implement this function in
  classes derived from cDevice, if they are able to replay video.
- The OSD and font sizes are now defined in percent of the actual video display
  size. The maximum OSD size has been raised to 1920x1080, to allow full
  screen OSD on HD systems.
- The OSD size is now automatically adjusted to the actual video display
  (provided the output device implements the GetVideoSize() function).
- cFrameDetector::Analyze() now syncs on the TS packet sync bytes (thanks to
  Oliver Endriss for reporting broken index generation after a buffer overflow).
This commit is contained in:
Klaus Schmidinger
2009-05-03 17:15:00 +02:00
parent 733a2becc4
commit 991eda0067
42 changed files with 600 additions and 379 deletions

View File

@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: remux.c 2.19 2009/04/19 10:59:56 kls Exp $
* $Id: remux.c 2.20 2009/05/03 14:43:25 kls Exp $
*/
#include "remux.h"
@@ -722,6 +722,13 @@ int cFrameDetector::Analyze(const uchar *Data, int Length)
int Processed = 0;
newFrame = independentFrame = false;
while (Length >= TS_SIZE) {
if (Data[0] != TS_SYNC_BYTE) {
int Skipped = 1;
while (Skipped < Length && (Data[Skipped] != TS_SYNC_BYTE || Length - Skipped > TS_SIZE && Data[Skipped + TS_SIZE] != TS_SYNC_BYTE))
Skipped++;
esyslog("ERROR: skipped %d bytes to sync on start of TS packet", Skipped);
return Processed + Skipped;
}
if (TsHasPayload(Data) && !TsIsScrambled(Data) && TsPid(Data) == pid) {
if (TsPayloadStart(Data)) {
if (!frameDuration) {