From fef3aa3a7fff0e3b4745532a6b1a157b45cb9643 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 19 Jun 2005 18:00:00 +0200 Subject: Version 1.3.27 - Fixed handling 'page down', which was broken in version 1.3.26 (thanks to Udo Richter). - Modified page scrolling behaviour (based on a suggestion by Patrick Gleichmann). - The new setup option "OSD/Scroll wraps" can be used to activate wrapping around in menu lists (based on a suggestion by Patrick Gleichmann). - Removed the NPTL check at startup, since several users have reported that VDR now runs fine with NPTL. - Fixed handling VPS timers, so that they only record if the event they are assigned to actually has the given VPS time. - Disabled cVideoRepacker in remux.c, because it has caused several problems during recording. If you want to test (and maybe debug) it, activate the line //#define TEST_cVideoRepacker in remux.c. - When drawing a bitmap to the OSD, the existing palette of the target can now be replaced with the new one instead of adding the new entries (thanks to Andreas Regel). --- CONTRIBUTORS | 4 +++ HISTORY | 21 +++++++++++++ INSTALL | 9 +----- MANUAL | 17 +++++++---- channels.conf | 6 ++-- config.c | 6 ++-- config.h | 7 +++-- dvbdevice.c | 3 +- i18n.c | 23 +++++++++++++- menu.c | 3 +- osd.c | 36 +++++++++++++++------- osd.h | 9 ++++-- osdbase.c | 96 +++++++++++++++++++++++++++++++++++------------------------ remux.c | 7 ++++- timers.c | 20 ++++++++----- vdr.c | 13 +------- 16 files changed, 182 insertions(+), 98 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 92c6801..cc43b02 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1080,6 +1080,7 @@ Andreas Regel cSkins::Message() for reporting a problem in handling Transfer Mode for radio channels for reporting a problem with messages when a cOsdObject uses the raw OSD + for implementing palette replace mode in the OSD bitmaps Thomas Bergwinkl for fixing the validity check for channel IDs, because some providers use TIDs @@ -1241,6 +1242,7 @@ Udo Richter for fixing handling lifetime when deciding whether to delete a recording for reporting a problem in handling page up/down in menu lists in case there are several non selectable items in a row + for fixing handling 'page down' after it was broken in version 1.3.26 Sven Kreiensen for his help in keeping 'channels.conf.terr' up to date @@ -1296,6 +1298,8 @@ Laurence Abbott Patrick Gleichmann for fixing the default quality value when grabbing a JPEG image + for suggestiong a modified page scrolling behaviour + for suggesting wrapping around in menu lists Achim Tuffentsammer for reporting a crash in case a plugin needs to issue an error message before the diff --git a/HISTORY b/HISTORY index 278bf37..cf24ffb 100644 --- a/HISTORY +++ b/HISTORY @@ -3612,3 +3612,24 @@ Video Disk Recorder Revision History - Added cOsdMenu::SetCols() to allow adjusting the menu columns. - Modified cEITScanner::Process() so that it works on systems with only budget cards or a mix of DVB-S, DVB-C or DVB-T cards. + +2005-06-19: Version 1.3.27 + +- Fixed handling 'page down', which was broken in version 1.3.26 (thanks to Udo + Richter). +- Modified page scrolling behaviour (based on a suggestion by Patrick Gleichmann). +- The new setup option "OSD/Scroll wraps" can be used to activate wrapping around + in menu lists (based on a suggestion by Patrick Gleichmann). +- Removed the NPTL check at startup, since several users have reported that VDR + now runs fine with NPTL. +- Fixed handling VPS timers, so that they only record if the event they are assigned + to actually has the given VPS time. +- Disabled cVideoRepacker in remux.c, because it has caused several problems + during recording. If you want to test (and maybe debug) it, activate the line + + //#define TEST_cVideoRepacker + + in remux.c. +- When drawing a bitmap to the OSD, the existing palette of the target can now be + replaced with the new one instead of adding the new entries (thanks to Andreas + Regel). diff --git a/INSTALL b/INSTALL index e894e8d..581a5d9 100644 --- a/INSTALL +++ b/INSTALL @@ -7,14 +7,7 @@ Version 1.3 IMPORTANT NOTES: ---------------- -VDR currently doesn't work with NPTL ("Native Posix Thread Library"). -Either don't use NPTL, or set the environment variable - - LD_ASSUME_KERNEL=2.4.1 - -before running VDR. - -Also, please make sure your environment is NOT set to use UTF-8 or +Please make sure your environment is NOT set to use UTF-8 or any other multibyte character representation. Check the value of your $LANG or $LC_CTYPE environment variable, and if it contains something like "de_DE.UTF-8", make sure you set it to something like "de_DE.iso8859-1" diff --git a/MANUAL b/MANUAL index 8a65809..532e954 100644 --- a/MANUAL +++ b/MANUAL @@ -495,11 +495,18 @@ Version 1.2 Scroll pages = yes no = when pressing the "Down" ("Up") key while the cursor is on the last (first) line of a list page, the - list is advanced by a full page and the cursor will - be at the top (bottom) of that page - yes = dto., but the cursor remains at the bottom (top) of - the page (this mode allows for faster scrolling - through long lists). + list is scrolled down (up) a single line and the cursor will + remain at the bottom (top) of that page + yes = the list is scrolled down (up) a full page and the cursor + will be at the top (bottom) of that page (this mode allows + for faster scrolling through long lists). + + Scroll wraps = no no = when the end (beginning) of a list is reached while + moving the cursor through it, the cursor stays at the + last (first) line of the list + yes = the cursor "wraps around" and moves from the last + (first) line of the list directly to the first (last) + one. Sort timers = yes Turns sorting the timers in the "Timers" menu on/off. Timers are sorted by ascending start times, with the diff --git a/channels.conf b/channels.conf index 01caab7..7243e9c 100644 --- a/channels.conf +++ b/channels.conf @@ -48,7 +48,7 @@ PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:3 PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1722,1801,1702:11:133:2:0 PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1722,1801,1702:43:133:2:0 PREMIERE 4,PREM 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0 -PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1801,1722,1702:29:133:2:0 +PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu,1281=deu:32:1801,1722,1702:29:133:2:0 PREMIERE 6,PREM 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1702,1722,1801:41:133:2:0 PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1722,1702,1801:20:133:2:0 DISNEY CHANNEL,DISNEY;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:32:1722,1801,1702:34:133:17:0 @@ -89,7 +89,7 @@ TELE 5;BetaDigital:12480:vC34:S19.2E:27500:1535:1536=deu:38:0:51:133:33:0 :@201 Sky Sky One;BSkyB:12226:hC23:S28.2E:27500:515+8190:643=eng:579:960,961:4705:2:2027:0 Sky Mix;BSkyB:12226:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:5104:2:2027:0 -ITV2;BSkyB:10906:vC56:S28.2E:22000:2350:2351=eng,2374=UND:2353:960,961:10240:2:2054:0 +ITV2;BSkyB:10906:vC56:S28.2E:22000:2350:2351=eng:2353:960,961:10240:2:2054:0 Sci-Fi;BSkyB:12148:hC23:S28.2E:27500:512+8190:640=eng:576:960,961:4905:2:2023:0 Paramount;BSkyB:12187:hC23:S28.2E:27500:2313+2304:2317=eng,2318=NAR:2315:960,961:5904:2:2025:0 Discovery;BSkyB:11875:hC23:S28.2E:27500:2304:2306=eng,2307=NAR:2305:960,961:6201:2:2009:0 @@ -112,7 +112,7 @@ Animal Plnt+;BSkyB:12070:hC23:S28.2E:27500:2314+2307:2315=eng:0:960,961:50002:2: S1T;BSkyB:12285:vC23:S28.2E:27500:513+8190:641=eng,661=NAR:577:960,961:4409:2:2030:0 CNN;BSkyB:12051:vC23:S28.2E:27500:2313:2315=eng:2314:0:7140:2:2018:0 BBC PARL'MNT:12129:vC23:S28.2E:27500:2304:2306=eng,2307=eng:2305:0:7300:2:2022:0 -Bethel TV;T-Systems/MTI:11200:vC56:S13.0E:27500:413:414=ita:0:0:4733:318:13400:0 +Bethel TV;T-Systems/MTI:11200:vC56:S13.0E:27500:413:414:0:0:4733:318:13400:0 Euro1080;EURO1080:12168:vC34:S19.2E:27500:308:256:0:FF:21100:1:1088:0 Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:FF:29700:0:0:0 eng-WRN-multi;WRN:12597:vC34:S13.0E:27500:0:2132:0:0:8230:318:9400:0 diff --git a/config.c b/config.c index 971f167..8845777 100644 --- a/config.c +++ b/config.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.c 1.133 2005/02/20 12:52:59 kls Exp $ + * $Id: config.c 1.134 2005/06/18 10:30:02 kls Exp $ */ #include "config.h" @@ -250,6 +250,7 @@ cSetup::cSetup(void) PrimaryDVB = 1; ShowInfoOnChSwitch = 1; MenuScrollPage = 1; + MenuScrollWrap = 0; MarkInstantRecord = 1; strcpy(NameInstantRecord, "TITLE EPISODE"); InstantRecordTime = 180; @@ -407,6 +408,7 @@ bool cSetup::Parse(const char *Name, const char *Value) else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value); else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value); else if (!strcasecmp(Name, "MenuScrollPage")) MenuScrollPage = atoi(Value); + else if (!strcasecmp(Name, "MenuScrollWrap")) MenuScrollWrap = atoi(Value); else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value); else if (!strcasecmp(Name, "NameInstantRecord")) strn0cpy(NameInstantRecord, Value, MaxFileName); else if (!strcasecmp(Name, "InstantRecordTime")) InstantRecordTime = atoi(Value); @@ -470,7 +472,7 @@ bool cSetup::Save(void) Store("OSDTheme", OSDTheme); Store("PrimaryDVB", PrimaryDVB); Store("ShowInfoOnChSwitch", ShowInfoOnChSwitch); - Store("MenuScrollPage", MenuScrollPage); + Store("MenuScrollWrap", MenuScrollWrap); Store("MarkInstantRecord", MarkInstantRecord); Store("NameInstantRecord", NameInstantRecord); Store("InstantRecordTime", InstantRecordTime); diff --git a/config.h b/config.h index 17e6255..439e8f0 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.219 2005/06/03 12:39:16 kls Exp $ + * $Id: config.h 1.221 2005/06/18 10:29:25 kls Exp $ */ #ifndef __CONFIG_H @@ -20,8 +20,8 @@ #include "i18n.h" #include "tools.h" -#define VDRVERSION "1.3.26" -#define VDRVERSNUM 10326 // Version * 10000 + Major * 100 + Minor +#define VDRVERSION "1.3.27" +#define VDRVERSNUM 10327 // Version * 10000 + Major * 100 + Minor #define MAXPRIORITY 99 #define MAXLIFETIME 99 @@ -211,6 +211,7 @@ public: int PrimaryDVB; int ShowInfoOnChSwitch; int MenuScrollPage; + int MenuScrollWrap; int MarkInstantRecord; char NameInstantRecord[MaxFileName]; int InstantRecordTime; diff --git a/dvbdevice.c b/dvbdevice.c index 88afdff..8a25adb 100644 --- a/dvbdevice.c +++ b/dvbdevice.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbdevice.c 1.130 2005/06/05 13:05:55 kls Exp $ + * $Id: dvbdevice.c 1.131 2005/06/19 11:00:43 kls Exp $ */ #include "dvbdevice.h" @@ -742,7 +742,6 @@ bool cDvbDevice::ProvidesSource(int Source) const || type == cSource::stCable && frontendType == FE_QAM || type == cSource::stSat && frontendType == FE_QPSK || type == cSource::stTerr && frontendType == FE_OFDM; - return true; } bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const diff --git a/i18n.c b/i18n.c index e5358d2..1bc798b 100644 --- a/i18n.c +++ b/i18n.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: i18n.c 1.194 2005/06/05 11:59:09 kls Exp $ + * $Id: i18n.c 1.195 2005/06/18 10:42:31 kls Exp $ * * Translations provided by: * @@ -2905,6 +2905,27 @@ const tI18nPhrase Phrases[] = { "Lehekülje kerimine", "Rul sider", }, + { "Setup.OSD$Scroll wraps", + "Rundum scrollen", + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + "",// TODO + }, { "Setup.OSD$Sort timers", "Timer sortieren", "Sortiraj termine", diff --git a/menu.c b/menu.c index 0ca55f5..d9b92b7 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.350 2005/06/05 14:11:54 kls Exp $ + * $Id: menu.c 1.351 2005/06/18 10:31:52 kls Exp $ */ #include "menu.h" @@ -1845,6 +1845,7 @@ void cMenuSetupOSD::Set(void) Add(new cMenuEditIntItem( tr("Setup.OSD$Channel info time (s)"), &data.ChannelInfoTime, 1, 60)); Add(new cMenuEditBoolItem(tr("Setup.OSD$Info on channel switch"), &data.ShowInfoOnChSwitch)); Add(new cMenuEditBoolItem(tr("Setup.OSD$Scroll pages"), &data.MenuScrollPage)); + Add(new cMenuEditBoolItem(tr("Setup.OSD$Scroll wraps"), &data.MenuScrollWrap)); Add(new cMenuEditBoolItem(tr("Setup.OSD$Sort timers"), &data.SortTimers)); Add(new cMenuEditBoolItem(tr("Setup.OSD$Recording directories"), &data.RecordingDirs)); SetCurrent(Get(current)); diff --git a/osd.c b/osd.c index 2e74a11..104393d 100644 --- a/osd.c +++ b/osd.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.c 1.61 2005/06/11 14:31:36 kls Exp $ + * $Id: osd.c 1.62 2005/06/19 10:43:04 kls Exp $ */ #include "osd.h" @@ -86,6 +86,13 @@ void cPalette::Take(const cPalette &Palette, tIndexes *Indexes, tColor ColorFg, } } +void cPalette::Replace(const cPalette &Palette) +{ + for (int i = 0; i < Palette.numColors; i++) + SetColor(i, Palette.color[i]); + numColors = Palette.numColors; +} + // --- cBitmap --------------------------------------------------------------- cBitmap::cBitmap(int Width, int Height, int Bpp, int X0, int Y0) @@ -337,19 +344,28 @@ void cBitmap::DrawPixel(int x, int y, tColor Color) SetIndex(x, y, Index(Color)); } -void cBitmap::DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg, tColor ColorBg) +void cBitmap::DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg, tColor ColorBg, bool ReplacePalette) { if (bitmap && Bitmap.bitmap && Intersects(x, y, x + Bitmap.Width() - 1, y + Bitmap.Height() - 1)) { if (Covers(x, y, x + Bitmap.Width() - 1, y + Bitmap.Height() - 1)) Reset(); x -= x0; y -= y0; - tIndexes Indexes; - Take(Bitmap, &Indexes, ColorFg, ColorBg); - for (int ix = 0; ix < Bitmap.width; ix++) { - for (int iy = 0; iy < Bitmap.height; iy++) - SetIndex(x + ix, y + iy, Indexes[int(Bitmap.bitmap[Bitmap.width * iy + ix])]); - } + if (ReplacePalette && Covers(x + x0, y + y0, x + x0 + Bitmap.Width() - 1, y + y0 + Bitmap.Height() - 1)) { + Replace(Bitmap); + for (int ix = 0; ix < Bitmap.width; ix++) { + for (int iy = 0; iy < Bitmap.height; iy++) + SetIndex(x + ix, y + iy, Bitmap.bitmap[Bitmap.width * iy + ix]); + } + } + else { + tIndexes Indexes; + Take(Bitmap, &Indexes, ColorFg, ColorBg); + for (int ix = 0; ix < Bitmap.width; ix++) { + for (int iy = 0; iy < Bitmap.height; iy++) + SetIndex(x + ix, y + iy, Indexes[int(Bitmap.bitmap[Bitmap.width * iy + ix])]); + } + } } } @@ -665,10 +681,10 @@ void cOsd::DrawPixel(int x, int y, tColor Color) bitmaps[i]->DrawPixel(x, y, Color); } -void cOsd::DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg, tColor ColorBg) +void cOsd::DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg, tColor ColorBg, bool ReplacePalette) { for (int i = 0; i < numBitmaps; i++) - bitmaps[i]->DrawBitmap(x, y, Bitmap, ColorFg, ColorBg); + bitmaps[i]->DrawBitmap(x, y, Bitmap, ColorFg, ColorBg, ReplacePalette); } void cOsd::DrawText(int x, int y, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font, int Width, int Height, int Alignment) diff --git a/osd.h b/osd.h index 2f5de4d..083d0f4 100644 --- a/osd.h +++ b/osd.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.h 1.48 2005/05/14 11:15:55 kls Exp $ + * $Id: osd.h 1.49 2005/06/19 10:35:25 kls Exp $ */ #ifndef __OSD_H @@ -84,6 +84,9 @@ public: ///< palette. If either of ColorFg or ColorBg is not zero, the first color ///< in Palette will be taken as ColorBg, and the second color will become ///< ColorFg. + void Replace(const cPalette &Palette); + ///< Replaces the colors of this palette with the colors from the given + ///< palette. }; enum eTextAlignment { taCenter = 0x00, @@ -153,7 +156,7 @@ public: ///< Sets the pixel at the given coordinates to the given Color, which is ///< a full 32 bit ARGB value. ///< If the coordinates are outside the bitmap area, no pixel will be set. - void DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg = 0, tColor ColorBg = 0); + void DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg = 0, tColor ColorBg = 0, bool ReplacePalette = false); ///< Sets the pixels in this bitmap with the data from the given ///< Bitmap, putting the upper left corner of the Bitmap at (x, y). ///< If ColorFg or ColorBg is given, the first palette entry of the Bitmap @@ -274,7 +277,7 @@ public: ///< If the OSD area has been divided into separate sub-areas, and the ///< given coordinates don't fall into any of these sub-areas, no pixel will ///< be set. - virtual void DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg = 0, tColor ColorBg = 0); + virtual void DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg = 0, tColor ColorBg = 0, bool ReplacePalette = false); ///< Sets the pixels in the OSD with the data from the given ///< Bitmap, putting the upper left corner of the Bitmap at (x, y). ///< If ColorFg or ColorBg is given, the first palette entry of the Bitmap diff --git a/osdbase.c b/osdbase.c index 7d03dbd..98307cd 100644 --- a/osdbase.c +++ b/osdbase.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osdbase.c 1.17 2005/06/12 10:44:22 kls Exp $ + * $Id: osdbase.c 1.20 2005/06/18 10:30:51 kls Exp $ */ #include "osdbase.h" @@ -261,54 +261,64 @@ bool cOsdMenu::SelectableItem(int idx) void cOsdMenu::CursorUp(void) { - if (current > 0) { - int tmpCurrent = current; - while (--tmpCurrent >= 0 && !SelectableItem(tmpCurrent)) - ; - if (tmpCurrent < 0) - return; - if (tmpCurrent >= first) - DisplayCurrent(false); - current = tmpCurrent; - if (current < first) { - first = first > displayMenuItems - 1 ? first - (displayMenuItems - 1) : 0; - if (Setup.MenuScrollPage) - current = !SelectableItem(first) ? first + 1 : first; - Display(); + int tmpCurrent = current; + int lastOnScreen = first + displayMenuItems - 1; + int last = Count() - 1; + while (--tmpCurrent != current) { + if (tmpCurrent < 0) { + if (Setup.MenuScrollWrap) + tmpCurrent = last; + else + return; + } + if (SelectableItem(tmpCurrent)) + break; } - else - DisplayCurrent(true); + if (first <= tmpCurrent && tmpCurrent <= lastOnScreen) + DisplayCurrent(false); + current = tmpCurrent; + if (current < first) { + first = Setup.MenuScrollPage ? max(0, current - displayMenuItems + 1) : current; + Display(); } + else if (current > lastOnScreen) { + first = max(0, current - displayMenuItems + 1); + Display(); + } + else + DisplayCurrent(true); } void cOsdMenu::CursorDown(void) { - int last = Count() - 1; + int tmpCurrent = current; int lastOnScreen = first + displayMenuItems - 1; - - if (current < last) { - int tmpCurrent = current; - while (++tmpCurrent <= last && !SelectableItem(tmpCurrent)) - ; - if (tmpCurrent > last) - return; - if (tmpCurrent <= lastOnScreen) - DisplayCurrent(false); - current = tmpCurrent; - if (current > lastOnScreen) { - first += displayMenuItems - 1; - lastOnScreen = first + displayMenuItems - 1; - if (lastOnScreen > last) { - first = last - (displayMenuItems - 1); - lastOnScreen = last; + int last = Count() - 1; + while (++tmpCurrent != current) { + if (tmpCurrent > last) { + if (Setup.MenuScrollWrap) + tmpCurrent = 0; + else + return; } - if (Setup.MenuScrollPage) - current = !SelectableItem(lastOnScreen) ? lastOnScreen - 1 : lastOnScreen; - Display(); + if (SelectableItem(tmpCurrent)) + break; } - else - DisplayCurrent(true); + if (first <= tmpCurrent && tmpCurrent <= lastOnScreen) + DisplayCurrent(false); + current = tmpCurrent; + if (current > lastOnScreen) { + first = Setup.MenuScrollPage ? current : max(0, current - displayMenuItems + 1); + if (first + displayMenuItems > last) + first = max(0, last - displayMenuItems + 1); + Display(); } + else if (current < first) { + first = current; + Display(); + } + else + DisplayCurrent(true); } void cOsdMenu::PageUp(void) @@ -341,6 +351,8 @@ void cOsdMenu::PageUp(void) Display(); DisplayCurrent(true); } + else if (Setup.MenuScrollWrap) + CursorUp(); } void cOsdMenu::PageDown(void) @@ -350,6 +362,10 @@ void cOsdMenu::PageDown(void) current += displayMenuItems; first += displayMenuItems; int last = Count() - 1; + if (current > last) + current = last; + if (first + displayMenuItems > last) + first = max(0, last - displayMenuItems + 1); int tmpCurrent = current; while (!SelectableItem(tmpCurrent) && ++tmpCurrent <= last) ; @@ -369,6 +385,8 @@ void cOsdMenu::PageDown(void) Display(); DisplayCurrent(true); } + else if (Setup.MenuScrollWrap) + CursorDown(); } void cOsdMenu::Mark(void) diff --git a/remux.c b/remux.c index 83d1356..c4e7b20 100644 --- a/remux.c +++ b/remux.c @@ -11,7 +11,7 @@ * The cDolbyRepacker code was originally written by Reinhard Nissl , * and adapted to the VDR coding style by Klaus.Schmidinger@cadsoft.de. * - * $Id: remux.c 1.34 2005/06/04 14:49:25 kls Exp $ + * $Id: remux.c 1.35 2005/06/19 10:17:00 kls Exp $ */ #include "remux.h" @@ -1155,7 +1155,12 @@ cRemux::cRemux(int VPid, const int *APids, const int *DPids, const int *SPids, b resultBuffer = new cRingBufferLinear(RESULTBUFFERSIZE, IPACKS, false, "Result"); resultBuffer->SetTimeouts(0, 100); if (VPid) +//#define TEST_cVideoRepacker +#ifdef TEST_cVideoRepacker ts2pes[numTracks++] = new cTS2PES(VPid, resultBuffer, IPACKS, 0x00, 0x00, new cVideoRepacker); +#else + ts2pes[numTracks++] = new cTS2PES(VPid, resultBuffer, IPACKS); +#endif if (APids) { int n = 0; while (*APids && numTracks < MAXTRACKS && n < MAXAPIDS) diff --git a/timers.c b/timers.c index b6307e0..f690336 100644 --- a/timers.c +++ b/timers.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.c 1.32 2005/06/11 14:19:58 kls Exp $ + * $Id: timers.c 1.33 2005/06/18 12:49:55 kls Exp $ */ #include "timers.h" @@ -363,6 +363,8 @@ bool cTimer::Matches(time_t t, bool Directly) const if (HasFlags(tfActive)) { if (HasFlags(tfVps) && !Directly && event && event->Vps() && schedule && schedule->PresentSeenWithin(30)) { + if (startTime != event->Vps()) + return false; startTime = event->StartTime(); stopTime = event->EndTime(); return event->IsRunning(true); @@ -384,15 +386,17 @@ int cTimer::Matches(const cEvent *Event, int *Overlap) const if (HasFlags(tfActive) && channel->GetChannelID() == Event->ChannelID()) { bool UseVps = HasFlags(tfVps) && Event->Vps(); Matches(UseVps ? Event->Vps() : Event->StartTime(), true); - int overlap; + int overlap = 0; if (UseVps) overlap = (startTime == Event->Vps()) ? FULLMATCH + (Event->IsRunning() ? 200 : 100) : 0; - else if (startTime <= Event->StartTime() && Event->EndTime() <= stopTime) - overlap = FULLMATCH; - else if (stopTime <= Event->StartTime() || Event->EndTime() <= startTime) - overlap = 0; - else - overlap = (min(stopTime, Event->EndTime()) - max(startTime, Event->StartTime())) * FULLMATCH / max(Event->Duration(), 1); + if (!overlap) { + if (startTime <= Event->StartTime() && Event->EndTime() <= stopTime) + overlap = FULLMATCH; + else if (stopTime <= Event->StartTime() || Event->EndTime() <= startTime) + overlap = 0; + else + overlap = (min(stopTime, Event->EndTime()) - max(startTime, Event->StartTime())) * FULLMATCH / max(Event->Duration(), 1); + } startTime = stopTime = 0; if (Overlap) *Overlap = overlap; diff --git a/vdr.c b/vdr.c index 10a5888..bd9de2f 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.207 2005/05/26 10:45:29 kls Exp $ + * $Id: vdr.c 1.208 2005/06/18 11:19:07 kls Exp $ */ #include @@ -302,17 +302,6 @@ int main(int argc, char *argv[]) return 0; } -#ifdef _CS_GNU_LIBPTHREAD_VERSION - // Check for NPTL and exit if present - VDR apparently doesn't run well with NPTL: - char LibPthreadVersion[128]; - if (confstr(_CS_GNU_LIBPTHREAD_VERSION, LibPthreadVersion, sizeof(LibPthreadVersion)) > 0) { - if (strstr(LibPthreadVersion, "NPTL")) { - fprintf(stderr, "vdr: please turn off NPTL by setting 'export LD_ASSUME_KERNEL=2.4.1' before starting VDR\n"); - return 2; - } - } -#endif - // Check for UTF-8 and exit if present - asprintf() will fail if it encounters 8 bit ASCII codes char *LangEnv; if ((LangEnv = getenv("LANG")) != NULL && strcasestr(LangEnv, "utf") || -- cgit v1.2.3