Compare commits

...

1856 Commits

Author SHA1 Message Date
Klaus Schmidinger
dd71a004e2 Official release of version 2.7.4 2025-02-26 10:35:03 +01:00
Klaus Schmidinger
45091fbd72 Revised locking in cMenuSchedule and cMenuWhatsOn 2025-02-25 15:53:43 +01:00
Klaus Schmidinger
988d5aebfa Added missing locks to SetMenuItem() functions 2025-02-20 10:23:15 +01:00
Klaus Schmidinger
8c3671fae6 Fixed cPtsIndex::FindFrameNumber() to handle the case where Pts points to an I-frame 2025-02-19 15:39:16 +01:00
Klaus Schmidinger
2a12af481a Fixed spurious fast frames when switching from "slow back" to "slow forward" 2025-02-18 17:06:15 +01:00
Klaus Schmidinger
7817e64695 Fixed progress display when switching from "pause" to "slow back" 2025-02-18 15:37:24 +01:00
Klaus Schmidinger
ebbaa39098 Added '~' to the list of delimiters in cTextWrapper 2025-02-17 11:13:13 +01:00
Klaus Schmidinger
d3dcbbd4f2 Fixed unnecessary redisplays of menus 2025-02-17 10:49:10 +01:00
Klaus Schmidinger
3045995bbc Fixed displaying the current item when pressing a hotkey 2025-02-13 13:58:07 +01:00
Klaus Schmidinger
1b4233d6ad The function cPlugin::MainThreadHook() has been deprecated 2025-02-12 22:22:20 +01:00
Klaus Schmidinger
34aa8fe8b4 Adjusted PLUGINS.html to the new API version numbering introduced in version 2.7.2 2025-02-12 22:02:25 +01:00
Klaus Schmidinger
baa97e9ff1 Added missing calls to cStatus::MsgOsdStatusMessage() and added the new virtual function cStatus::OsdStatusMessage2(), which can be used to get the type of the message 2025-02-12 21:18:53 +01:00
Klaus Schmidinger
03afc4a353 Fixed unnecessary calls to cStatus::OsdCurrentItem2() when scrolling 2025-02-05 22:12:32 +01:00
Klaus Schmidinger
ef4ebeb7ee The new virtual function cStatus::OsdCurrentItem2() can be used to get the index of the current menu item 2025-01-29 11:15:26 +01:00
Klaus Schmidinger
80d8851e62 Added cStatus::OsdCurrentItem2() 2025-01-29 11:15:26 +01:00
Klaus Schmidinger
ead135f716 Fixed unnecessary calls to DisplayCurrent() for editable menu items 2025-01-29 10:35:25 +01:00
Klaus Schmidinger
49dc61a92c Fixed an unnecessary redisplay of the menu when pressing a hotkey 2025-01-29 10:25:55 +01:00
Klaus Schmidinger
af0309cc40 Fixed an improper call of cStatus::OsdCurrentItem() before cStatus::OsdItem2() 2025-01-29 10:20:17 +01:00
Klaus Schmidinger
4ed7421b1c Activated logging of OsdItem2() 2025-01-28 10:41:03 +01:00
Klaus Schmidinger
3058354dba Fixed setting the file name of the info file after renaming a recording 2025-01-18 20:57:06 +01:00
Klaus Schmidinger
20a8c5d240 Added cStatus::OsdItem2() 2025-01-16 10:23:12 +01:00
Klaus Schmidinger
0749a34342 The new virtual function cStatus::OsdItem2() can be used to get the information whether a menu item is selectable 2025-01-16 09:42:11 +01:00
Klaus Schmidinger
e595eed57d The info files of recordings are now only re-read if they have been modified 2025-01-15 10:50:29 +01:00
Klaus Schmidinger
a7576f0b6c Added parameter checks to strn0cpy() and Utf8Strn0Cpy() 2025-01-15 08:57:45 +01:00
Klaus Schmidinger
657e5dda5d Added a header to the backtrace 2025-01-15 08:43:12 +01:00
Klaus Schmidinger
8fb6a2b24b Fixed handling margins for timers that are not VPS controlled and not spawned 2025-01-13 14:44:18 +01:00
Klaus Schmidinger
53cac302d8 Added 1 to Utf8BufSize() for worst case 2025-01-13 13:18:42 +01:00
Klaus Schmidinger
2c6c014dd8 Checking for VPS control is now limited to local timers 2025-01-13 12:34:18 +01:00
Klaus Schmidinger
a7071f580e Added some missing locking 2025-01-10 16:11:02 +01:00
Klaus Schmidinger
de5327a048 Fixed a possible deadlock when canceling an editing process 2025-01-10 13:12:04 +01:00
Klaus Schmidinger
7ab94c7bcb Fixed accessing a timer's event schedule in case the event has been removed from the schedule 2025-01-07 10:46:22 +01:00
Klaus Schmidinger
0f80fc5e86 Fixed handling the fps value if it can't be determined from the video data 2024-12-05 10:37:15 +01:00
Klaus Schmidinger
d169f30e5c TS packets with errors are now skipped when parsing for frames 2024-12-05 10:33:31 +01:00
Klaus Schmidinger
7a1842cba6 Fixed a typo 2024-12-04 14:33:22 +01:00
Klaus Schmidinger
e4e9d7a55f Added some missing locking 2024-12-02 12:40:56 +01:00
Klaus Schmidinger
ccbef6ce6c Fixed some typos in the translation files 2024-11-30 14:30:46 +01:00
Klaus Schmidinger
7461a1ba3a Updated the Finnish OSD texts 2024-10-24 09:58:43 +02:00
Klaus Schmidinger
bb55e3036e The VDR homepage is now accessible via HTTPS 2024-10-21 19:04:53 +02:00
Klaus Schmidinger
bbf2cca198 Updated the Italian OSD texts 2024-10-20 10:05:19 +02:00
Klaus Schmidinger
8ce034d124 Fixed wrong credits 2024-10-17 20:17:57 +02:00
Klaus Schmidinger
4030698007 Fixed error checking in case the fps value can't be determined by the frame parser 2024-10-13 13:34:32 +02:00
Klaus Schmidinger
66fea5c9f1 Removed all DEPRECATED_* code 2024-10-13 09:47:18 +02:00
Klaus Schmidinger
285574eeaa Official release of version 2.7.3 2024-10-12 13:32:46 +02:00
Klaus Schmidinger
55cfb057e0 Added vdrrootdir and incdir to vdr.pc 2024-10-11 14:21:04 +02:00
Klaus Schmidinger
b4c538cff7 The Channel+/- keys can now be used to jump between errors while replaying a recording 2024-10-11 14:10:50 +02:00
Klaus Schmidinger
5a626fef9f Fixed expiring of one-time VPS timers in case there is more than one event with the same VPS time 2024-10-11 13:58:11 +02:00
Klaus Schmidinger
2bcd8ba8f3 Fixed handling negative values in cSource::Position() on systems where 'int' is 64 bit 2024-10-09 10:36:16 +02:00
Klaus Schmidinger
2dacc776bd Fixed error checking in case of large PTS discontinuities 2024-10-08 08:46:38 +02:00
Klaus Schmidinger
a91d687a1a Removed defining DEPRECATED_* macros with value 0, because this is the preprocessor's default 2024-10-08 08:09:48 +02:00
Klaus Schmidinger
0d3882d43e Official release of version 2.7.2 2024-09-27 09:15:33 +02:00
Klaus Schmidinger
72ad601328 Added a note about re-generating the index of old recordings with errors 2024-09-27 09:14:23 +02:00
Klaus Schmidinger
2c6fd804f6 Fixed a problem with duplicate events if they are moved to a lower table ID and at the same time get a new event ID 2024-09-26 19:25:41 +02:00
Klaus Schmidinger
c590444b7d Fixed error checking when regenerating the index 2024-09-21 19:18:18 +02:00
Klaus Schmidinger
4805af7915 Increased the bpp of cProgressBar to 4 to handle all different colors 2024-09-21 16:21:08 +02:00
Klaus Schmidinger
171b20a80d Fixed singular when displaying number of errors in the recording info 2024-09-21 10:53:07 +02:00
Klaus Schmidinger
d00ae923ab Edited recordings now show error count of original if there are no error indicators in the index 2024-09-20 21:34:18 +02:00
Klaus Schmidinger
d8ab5dc5c6 Fixed syncing the frame checker to I-frames 2024-09-20 14:21:39 +02:00
Klaus Schmidinger
292af5d4f4 The info file of an edited recording now contains the number of errors in the edited version 2024-09-19 20:21:58 +02:00
Klaus Schmidinger
3d6b31b115 When the index file of a recording is regenerated, errors in the recording are now stored in the index file 2024-09-19 12:06:55 +02:00
Klaus Schmidinger
9e523073aa Errors are now shown as diamond shaped markers in the replay progress display of the default skins 2024-09-19 09:49:02 +02:00
Klaus Schmidinger
32d8e473fb Fixed description of cSkinDisplayReplay::SetRecording() 2024-09-18 11:10:56 +02:00
Klaus Schmidinger
5cd25df60c Recording errors are now marked in the index file 2024-09-18 09:23:07 +02:00
Klaus Schmidinger
52c4816c9c Now distinguishing between frames with errors and completely missing frames 2024-09-17 11:30:28 +02:00
Klaus Schmidinger
6f6b05ffcb The number of errors in a recording now represents the number of broken frames 2024-09-17 09:39:50 +02:00
Klaus Schmidinger
6dd5854b7a Moved error checking from recorder.c to remux.c 2024-09-17 09:31:15 +02:00
Klaus Schmidinger
83425df0b6 Updated the Italian OSD texts 2024-09-16 09:14:41 +02:00
Klaus Schmidinger
82b09eaa8e Silenced a compiler warning with gcc 14.1.0 2024-09-16 09:07:12 +02:00
Klaus Schmidinger
ec5b1aadab Fixed a problem in cSchedule::Sort(), in case hasRunning was true, but there was no event with RunningStatus() >= SI::RunningStatusPausing 2024-09-14 14:17:12 +02:00
Klaus Schmidinger
f786510ba2 Made APIVERSION independent from VDRVERSION to avoid irritation in case only VDRVERSION is incremented 2024-09-12 12:48:40 +02:00
Klaus Schmidinger
f006884e57 Deprecated code is now marked with [[deprecated]] to issue a compile time warning when used 2024-09-09 22:15:59 +02:00
Klaus Schmidinger
c0a005b3cd Fix for compilers that don't like non-constant format strings 2024-09-09 13:39:05 +02:00
Klaus Schmidinger
0c91893643 There will be no more distinction between "developer" and "stable" versions regarding version numbering 2024-09-09 10:58:55 +02:00
Klaus Schmidinger
796da9e0f6 Improved the error message when closing a frontend 2024-09-09 08:53:57 +02:00
Klaus Schmidinger
5d539be071 The '.update' file in the video directory is now created if it doesn't already exist 2024-09-01 20:43:40 +02:00
Klaus Schmidinger
1df138d876 Fixed a crash when deleting a recording that is currently being edited, and then immediately deleting the edited version, too 2024-08-30 20:43:26 +02:00
Klaus Schmidinger
71b0140003 The new SVDRP command 'AUDI' can be used to list the currently available audio tracks and select one of them 2024-08-30 09:55:15 +02:00
Klaus Schmidinger
a33adf365d Changed the error message when trying to attach a player to a primary device without an MPEG decoder 2024-07-16 12:33:31 +02:00
Klaus Schmidinger
8d82b05071 Disabled/removed deprecated code 2024-07-15 14:42:22 +02:00
Klaus Schmidinger
930e3b4200 Official release of version 2.6.9 2024-07-15 09:07:09 +02:00
Klaus Schmidinger
2543f2c486 Added the lines from 'Fixed a timeout in cDvbDevice while tuning after the frontend has been reopened' to cDvbTuner::ProvidesFrontend() 2024-07-14 15:41:01 +02:00
Klaus Schmidinger
d919817c35 Fixed restarting the EPG scan and keeping the frequency of calls to Device->SetPowerSaveIfUnused() low 2024-07-13 20:12:24 +02:00
Klaus Schmidinger
6bbb596968 Fixed setting the editable width in the LCARS skin 2024-07-13 15:25:22 +02:00
Klaus Schmidinger
8aec1974bb Fixed a timeout in cDvbDevice while tuning after the frontend has been reopened 2024-07-13 12:34:42 +02:00
Klaus Schmidinger
b3ad9ec699 Fixed handling of cSkinDisplayMenu::GetTextAreaFont() 2024-07-13 09:12:18 +02:00
Klaus Schmidinger
87410442b6 Fixed a crash in strreplace() for multiple replacements with strings of different lengths 2024-07-10 14:59:45 +02:00
Klaus Schmidinger
305735a886 Official release of version 2.6.8 2024-07-08 18:40:20 +02:00
Klaus Schmidinger
41b7e1546a Added 'lnbPowerTurnedOn = false' to cDvbTuner::ProvidesFrontend() 2024-07-08 18:39:18 +02:00
Klaus Schmidinger
f3972e4795 Implemented power save mode for cDvbDevice 2024-07-08 09:34:33 +02:00
Klaus Schmidinger
e7ea087a6e Unused devices can now be put into a power save mode 2024-07-06 11:19:21 +02:00
Klaus Schmidinger
749ba57dcc Updated the Italian OSD texts 2024-07-02 07:57:42 +02:00
Klaus Schmidinger
0360b0d0e7 The EIT scanner now checks whether there is a proper device before adding a channel to the scan list 2024-06-27 10:49:34 +02:00
Klaus Schmidinger
2b495e0f87 Removed leftover cMenuRecordings::SetPath() 2024-06-25 19:00:06 +02:00
Klaus Schmidinger
32b11e1a53 Added an EPG bugfix for broadcasters who put literal "\n" strings in their EPG 2024-06-21 06:27:20 +02:00
Klaus Schmidinger
db81c07b27 When starting an editing process, VDR now first checks whether there is enough free disk space to take up the edited version of the recording 2024-06-13 09:31:14 +02:00
Klaus Schmidinger
1c2401eb6c Fixed typos 2024-06-11 12:43:25 +02:00
Klaus Schmidinger
5828d347f7 Fixed setting T2 system ID from NIT 2024-05-29 11:13:34 +02:00
Klaus Schmidinger
9c64622718 Fixed a possible access of a deleted object in the EIT scanner 2024-05-19 14:55:57 +02:00
Klaus Schmidinger
f9260d0141 Updated the Italian OSD texts 2024-04-03 08:21:05 +02:00
Klaus Schmidinger
746cdaff01 Official release of version 2.6.7 2024-04-02 09:05:33 +02:00
Klaus Schmidinger
179d5b87fc A device is now always kept occupied if a timer is in VPS margin or needs the transponder 2024-03-29 21:46:50 +01:00
Klaus Schmidinger
51dca45a0c If the current channel is no longer available because of a VPS timer entering the VPS margin, live view now switches to the channel of that timer 2024-03-28 13:21:42 +01:00
Klaus Schmidinger
62ad9b41dd Added a missing initialization 2024-03-28 13:02:42 +01:00
Klaus Schmidinger
8b87a6968a The EIT scan is no longer inhibited if a timer is in VPS margin or needs the transponder 2024-03-10 11:26:54 +01:00
Klaus Schmidinger
faf562fd4e The EIT scan now skips scanList entries if a device is already tuned to that transponder 2024-03-10 11:16:29 +01:00
Klaus Schmidinger
6a09a2fbd6 The EIT scan no longer deletes the scanList if no device was switched in this pass 2024-03-10 10:38:18 +01:00
Klaus Schmidinger
bc32ffe2f9 Fixed logging when a timer has entered the VPS margin 2024-03-08 10:50:06 +01:00
Klaus Schmidinger
ff16bbd777 Logging event status changes now also shows the previous status 2024-03-06 20:16:51 +01:00
Klaus Schmidinger
f7f8a6b131 Improved handling present/following data for VPS timers 2024-03-06 14:37:15 +01:00
Klaus Schmidinger
a3310e2954 The new setup parameters "EPG scan max. channel number" and "EPG pause after scan" can be used to tune the behavior of the EPG scan 2024-03-04 21:14:27 +01:00
Klaus Schmidinger
0b08666310 Updated the Hungarian OSD texts 2024-03-04 15:04:26 +01:00
Klaus Schmidinger
42db3fbee0 The info file of a recording is now re-read if an update of the video directory is triggered, to make sure modifications from other VDRs are adopted 2024-03-04 14:12:37 +01:00
Klaus Schmidinger
bfa25d6276 The primary device no longer starts unnecessary threads if it doesn't have a decoder 2024-03-04 12:26:32 +01:00
Klaus Schmidinger
824c495d33 Added a 15 second grace period before actually stopping a VPS timer 2024-03-03 15:47:09 +01:00
Klaus Schmidinger
561be36958 Adapted "Setup/Miscellaneous/Show channel names with source" to the new handling in cChannel 2024-03-02 21:49:21 +01:00
Klaus Schmidinger
8bd0437497 Modified handling channel names with source to make it thread safe 2024-03-02 16:21:16 +01:00
Klaus Schmidinger
18c9cef1ea Added missing initialization of cChannel::nameSourceMode 2024-03-01 14:33:28 +01:00
Klaus Schmidinger
2c66d57d4b Fixed the move assignment operator to check for self-assignment 2024-02-15 14:57:56 +01:00
Klaus Schmidinger
29200d040e Official release of version 2.6.6 2024-01-25 09:44:48 +01:00
Klaus Schmidinger
385738cadd Fixed possible duplicate component entries in the info of an ongoing recording 2024-01-24 13:24:51 +01:00
Klaus Schmidinger
a2591d6e98 Workaround in detecting frame height for channels with wrong crop parameters 2024-01-23 19:33:45 +01:00
Klaus Schmidinger
fe97a38e77 Fixed handling primary device on headless systems 2024-01-22 12:10:30 +01:00
Klaus Schmidinger
552f5fc4e7 Fixed a typo 2024-01-22 12:09:22 +01:00
Klaus Schmidinger
21d3d489fd Added '/' to the list of fuzzy characters for pattern timers 2024-01-21 10:43:20 +01:00
Klaus Schmidinger
78b7e4e252 Added the total number of errors when logging new recording errors 2024-01-20 20:04:03 +01:00
Klaus Schmidinger
5d984b606e Added the move constructor to cString for better performance 2024-01-20 13:59:55 +01:00
Klaus Schmidinger
88b1e30494 Fixed an unnecessary double display of menu items in the Recordings menu 2024-01-19 12:17:05 +01:00
Klaus Schmidinger
939071bf25 Fixed an unnecessary double display of the current menu item in page up/down 2024-01-19 12:10:47 +01:00
Klaus Schmidinger
655682b5d2 Removed syslog calls in child process after fork() 2024-01-18 13:01:07 +01:00
Klaus Schmidinger
b1418b6bcd Implemented scaling images 2024-01-18 12:04:57 +01:00
Klaus Schmidinger
35c8b3d22c Using a dummy OSD if no OSD provider is available is not considered an error any more 2024-01-18 11:06:45 +01:00
Klaus Schmidinger
e5ae02e3fa Fixed a possible crash in cDevice::StopSectionHandler() 2024-01-18 10:58:39 +01:00
Klaus Schmidinger
f0da21ea13 Fixed height calculation in progress display 2024-01-17 21:15:48 +01:00
Klaus Schmidinger
eb35faaf7d Changed installing config files to handle potentially broken 'cp -n' 2024-01-05 14:16:16 +01:00
Klaus Schmidinger
05f03d6e38 Official release of version 2.6.5 2023-12-30 10:27:34 +01:00
Klaus Schmidinger
0d4284df29 The recording info of the default skins now shows the frame parameters of the recording at the end of the description (if such information is available) 2023-12-29 10:48:40 +01:00
Klaus Schmidinger
cade92cda1 Added the function cRecordingInfo::FrameParams(), which can be used to get a nicely formatted string with all the available frame data 2023-12-29 10:48:25 +01:00
Klaus Schmidinger
f0bbf64da0 Added cString::Append(char) 2023-12-29 10:24:29 +01:00
Klaus Schmidinger
6458f8b581 The frame width, height, scan type and apect ratio of a recording are now stored in the 'info' file under the 'F' tag 2023-12-28 21:23:19 +01:00
Klaus Schmidinger
1770a18598 Fixed broken video data streams on systems without output device when switching live channel to a different transponder while recording 2023-02-21 09:31:47 +01:00
Klaus Schmidinger
5f136032a2 Official release of version 2.6.4 2023-02-17 12:04:45 +01:00
Klaus Schmidinger
63efcf3927 Removed unnecessary empty lines 2023-02-16 17:20:09 +01:00
Klaus Schmidinger
468dc1115e Revised support for kernel based LIRC driver 2023-02-16 17:15:06 +01:00
Klaus Schmidinger
d53e0fd5c3 Fixed unnecessary interruption of ongoing recordings if timers avoided the transfer mode receiver device 2023-02-16 14:53:38 +01:00
Klaus Schmidinger
14b907b01c Fixed a possible crash if an editing process is canceled while the edited recording is being replayed (new solution) 2023-02-15 14:59:25 +01:00
Klaus Schmidinger
e0d87da768 Reverted 'Fixed a possible crash if an editing process is canceled while the edited recording is being replayed' 2023-02-15 14:01:20 +01:00
Klaus Schmidinger
42b584e38d Fixed initializing cDvbPlayerControl (was broken in version 2.6.3) 2022-12-27 15:57:20 +01:00
Klaus Schmidinger
a0f79bdd5f Added a note to vdr.5 about event ids possibly changing when an event moves from one table to another 2022-12-26 13:24:09 +01:00
Klaus Schmidinger
4372d55dd1 Added a note to epg.h about not messing with event ids 2022-12-24 11:37:17 +01:00
Klaus Schmidinger
13672280b6 Fixed symmetry of Begin/EndSegmentTransfer() calls in cEIT::cEIT() 2022-12-23 09:47:23 +01:00
Klaus Schmidinger
5b134cb23e Fixed restoring the volume at program start 2022-12-19 15:13:56 +01:00
Klaus Schmidinger
87cf0b7a3d Updated the Italian OSD texts 2022-12-16 12:17:03 +01:00
Klaus Schmidinger
8b14723e9e Official release of version 2.6.3 2022-12-14 09:38:41 +01:00
Klaus Schmidinger
7fe59548cd Now checking the video directory after setting the user id 2022-12-12 10:27:38 +01:00
Klaus Schmidinger
15f13ac936 Avoiding a zero sized array in cDevice::GetDevice() 2022-12-07 09:38:05 +01:00
Klaus Schmidinger
5b176f97a4 Now avoiding unnecessary processing in cDvbSubtitleConverter::FinishPage() if there are no areas 2022-12-06 16:57:01 +01:00
Klaus Schmidinger
0bb6f87776 Now avoiding the memcpy() call in cGlyph::cGlyph() if the bitmap is empty 2022-12-06 12:30:13 +01:00
Klaus Schmidinger
c06d2389e9 Now avoiding calling poll() in cSectionHandler::Action() if there are no filters 2022-12-06 12:25:08 +01:00
Klaus Schmidinger
548a33c728 Fixed initializing cPictureControl 2022-12-05 15:26:23 +01:00
Klaus Schmidinger
4336b55f4e Fixed initializing cDvbPlayerControl and cTransferControl 2022-12-05 14:45:51 +01:00
Klaus Schmidinger
c12c7378e9 Fixed a possible heap-use-after-free in cDvbTuner::Action() 2022-12-05 14:04:10 +01:00
Klaus Schmidinger
a299d8d348 Added code for the 'qks' audio track 2022-12-01 20:57:12 +01:00
Klaus Schmidinger
c7bf474a42 Fixed a faulty 'Timer still recording' query when canceling an editing job 2022-12-01 13:09:04 +01:00
Klaus Schmidinger
8d65cc6dc0 Fixed generating the index file in the cutter 2022-12-01 12:47:33 +01:00
Klaus Schmidinger
f2b9f0e8dd Fixed a compiler warning 2022-11-30 14:38:46 +01:00
Klaus Schmidinger
30f05ba714 Official release of version 2.6.2 2022-11-30 12:03:17 +01:00
Klaus Schmidinger
76445411a5 Added missing rounding when dividing frequencies in processing the NIT 2022-11-30 12:02:00 +01:00
Klaus Schmidinger
4425918d31 Fixed regenerating the index file of a recording in case it is present, but empty 2022-11-28 14:39:23 +01:00
Klaus Schmidinger
6888ea68b6 Added periodic calls to malloc_trim(0) to reduce memory consumption 2022-11-28 10:44:01 +01:00
Klaus Schmidinger
abb82a2396 Added support for kernel based LIRC driver 2022-11-26 13:37:06 +01:00
Klaus Schmidinger
6192ca81d9 Fixed name and email for Marko Mkel 2022-11-23 14:42:03 +01:00
Klaus Schmidinger
d06c5efa54 Avoiding a compiler warning 2022-11-22 15:53:07 +01:00
Klaus Schmidinger
f859b8d2ae Fixed printing/scanning values for systems where %ld doesn't work for time_t 2022-11-22 14:33:56 +01:00
Klaus Schmidinger
035d5fd5b9 Using the frame rate parsed from the stream, with fall back to determining it from PTS values 2022-11-22 11:35:37 +01:00
Klaus Schmidinger
93d578d9b8 Implemented parsing frame rate and image size for MPEG2, H.264 and H.265 2022-11-22 11:31:39 +01:00
Klaus Schmidinger
d756628297 Added a chapter about locking to PLUGINS.html 2022-11-20 21:38:18 +01:00
Klaus Schmidinger
a4cde807bc Added a missing 'const' to cTimers::GetTimerForEvent() 2022-11-20 10:57:31 +01:00
Klaus Schmidinger
83c9677899 Fixed a possible deadlock in case two SVDRP clients send each other POLL commands at the same time 2022-11-19 15:49:27 +01:00
Klaus Schmidinger
b14ed38a48 Removed some unnecessary locks from SVDRPClientHandler 2022-11-19 15:47:03 +01:00
Klaus Schmidinger
2bf0967a47 Fixed default values for DVB-T 2022-11-15 10:21:55 +01:00
Klaus Schmidinger
7ed306d127 Changed email address of Winfried Khler 2022-11-14 11:14:10 +01:00
Klaus Schmidinger
5a029eb29f Added a warning if an attempt is made to obtain a write lock twice from the same thread 2022-11-13 15:25:52 +01:00
Klaus Schmidinger
230adc8235 Fixed a possible crash if an editing process is canceled while the edited recording is being replayed 2022-11-13 15:23:13 +01:00
Klaus Schmidinger
982a9a5157 Setting the '.timer' file when regenerating the index file 2022-11-13 14:49:08 +01:00
Klaus Schmidinger
c8e4921a0a Now checking for '.timer' file to determine whether a recording is still active 2022-11-06 11:49:31 +01:00
Klaus Schmidinger
786245efe5 Now assuming the lock when removing deleted recordings even if the disk is full 2022-11-04 14:30:01 +01:00
Klaus Schmidinger
74460f22bf Now dropping capabilities after opening terminal 2022-06-01 14:24:57 +02:00
Klaus Schmidinger
a843d03af1 Fixed unexpected calls of the '-r' script when a recording is interrupted and the timer has not yet finished 2022-03-03 14:44:47 +01:00
Klaus Schmidinger
d3f3e856e4 Added UPDATE-2.6.0, which was missing in the official 2.6.0 release 2022-02-09 12:34:09 +01:00
Klaus Schmidinger
be3c6048ed Official release of version 2.6.1 2022-02-02 10:56:43 +01:00
Klaus Schmidinger
2a0222226a Clarified some potentially mistakable code in cSectionHandler::SetStatus() 2022-01-31 21:21:42 +01:00
Klaus Schmidinger
50c3951017 Fixed a possible deadlock in cDevice::DetachAllReceivers() 2022-01-24 16:53:45 +01:00
Klaus Schmidinger
ea1ad945b4 Fixed handling error conditions in the index file 2022-01-24 10:44:21 +01:00
Klaus Schmidinger
8cde8464eb Fixed handling zero bytes in cH264Parser 2022-01-18 14:24:33 +01:00
Klaus Schmidinger
14b108f104 Added some missing "AUTO" values to vdr.5 2022-01-14 10:46:15 +01:00
Klaus Schmidinger
330dbce1e7 Updated the Italian OSD texts 2022-01-14 10:27:26 +01:00
Klaus Schmidinger
adeb6314fb Fixed starting replay after jumping to an editing mark 2022-01-13 21:41:41 +01:00
Klaus Schmidinger
78a09b5926 Removed a TODO - detecting errors was implemented in version 2.5.4 2022-01-13 10:56:01 +01:00
Klaus Schmidinger
d05765c670 Replaced strncpy() with memcpy() in strreplace() to avoid a compiler warning 2021-12-30 14:38:40 +01:00
Klaus Schmidinger
a5a4b72d1c Fixed description of using number keys to toggle weekdays of a timer 2021-12-29 21:06:52 +01:00
Klaus Schmidinger
955b1c914f Official release of version 2.6.0 2021-12-27 13:31:29 +01:00
Klaus Schmidinger
5b28aa7e02 Added entries for backports to version 2.4.8 2021-12-27 13:27:16 +01:00
Klaus Schmidinger
f34a6d66a0 Removed a leftover debugging line 2021-12-25 14:11:39 +01:00
Klaus Schmidinger
104bddc560 Fixed calculating the disk use percentage if there's more than 20TB of recordings 2021-12-24 10:56:47 +01:00
Klaus Schmidinger
e7107b789e Fixed a possible memory leak in creating fonts 2021-12-20 13:19:52 +01:00
Klaus Schmidinger
f2e71eb668 Version 2.5.7 2021-12-20 10:06:37 +01:00
Klaus Schmidinger
f275346ecc Fixed a memory leak in handling the NIT 2021-12-14 21:15:02 +01:00
Klaus Schmidinger
33b47142e4 Fixed unlocking vs. call to EpgHandlers.EndSegmentTransfer() 2021-12-11 20:58:51 +01:00
Klaus Schmidinger
5f3d42bcd8 Added missing '0x09=H.265 video, 0x19 = AC4 audio' to vdr.5 2021-10-16 09:27:11 +02:00
Klaus Schmidinger
3f2dd916c1 Replaced all umlauts in the example channels.conf with their ae, oe, ue substitutes to avoid problems on UTF-8 systems 2021-07-26 12:39:42 +02:00
Klaus Schmidinger
0d50ec57f5 Version 2.5.6 2021-07-02 08:58:59 +02:00
Klaus Schmidinger
7301f2de08 The Recordings menu now marks recordings with errors, and the number of errors (if any) is displayed in the recording's Info menu 2021-07-01 15:40:46 +02:00
Klaus Schmidinger
8c7d387e86 Fixed triggering the PAT filter 2021-06-21 20:13:55 +02:00
Klaus Schmidinger
6c5a448dec Fixed deleting the edited recording in case of an error 2021-06-21 15:30:16 +02:00
Klaus Schmidinger
a84f9a8e19 Improved responsiveness in cSectionHandler::Action() 2021-06-20 10:27:19 +02:00
Klaus Schmidinger
545613e0e7 When checking whether a recording has already been made, recording names are now compared case insensitive 2021-06-20 10:03:28 +02:00
Klaus Schmidinger
ac4da6e380 Fixed a possible access to characters after the terminating zero of strings in cDoneRecordings::Contains(), in case there are fuzzy characters at the end of a string 2021-06-19 15:34:38 +02:00
Klaus Schmidinger
4d5cbaf57d If an error occurs while recording, the respective entry in the list of recordings is now updated immediately 2021-06-19 14:21:16 +02:00
Klaus Schmidinger
a4a2466bf4 Fixed restarting PMT pids after starting a recording on the currently viewed channel 2021-06-11 09:38:38 +02:00
Klaus Schmidinger
a0cdfc432a Version 2.5.5 2021-06-10 09:59:45 +02:00
Klaus Schmidinger
60c858689b Fixed handling incomplete multi-packet CAT 2021-06-09 09:42:15 +02:00
Klaus Schmidinger
9686a9b474 Removed unused declaration of cDvbTuner::SetFrontendType() 2021-06-09 09:12:25 +02:00
Klaus Schmidinger
0f6265a97f Fixed flushing old data from the section handler 2021-06-08 15:10:51 +02:00
Klaus Schmidinger
7b1c097958 No longer permanently looping through PMT PIDs, which caused problems with some SatIP receivers 2021-06-08 14:57:26 +02:00
Klaus Schmidinger
58e21d8e37 Now using __cplusplus instead of DISABLE_TEMPLATES_COLLIDING_WITH_STL, and using std::min(), std::max() and std::swap() if available 2021-05-26 13:37:53 +02:00
Klaus Schmidinger
e1f04cd6fa Added missing initialization of cRecorder::lastErrors 2021-05-25 20:14:06 +02:00
Klaus Schmidinger
7775698bac The error counter of a recording is now copied as is when editing a recording 2021-05-25 20:09:29 +02:00
Klaus Schmidinger
8f52603665 cRecordingInfo::Errors() now returns -1 for old recordings; added a missing 'const' 2021-05-23 15:03:17 +02:00
Klaus Schmidinger
c40fb4b4aa Version 2.5.4 2021-05-21 15:09:34 +02:00
Klaus Schmidinger
161fa8ead4 The default for DEPRECATED_SKIN_SETITEMEVENT has been set to 0 2021-05-21 13:03:42 +02:00
Klaus Schmidinger
115eb9fdb4 The macro DEPRECATED_GETBITMAP and the related code has been removed 2021-05-21 12:54:08 +02:00
Klaus Schmidinger
b7112ece6c The default for DEPRECATED_SETCURRENTCHANNEL has been set to 0 2021-05-21 12:51:16 +02:00
Klaus Schmidinger
f7c8f582ea The macro DEPRECATED_VDR_CHARSET_OVERRIDE and the related code has been removed 2021-05-21 12:43:18 +02:00
Klaus Schmidinger
ada85b693e The 'Edit path' dialog now also shows the total size of all recordings in that path 2021-05-21 10:41:46 +02:00
Klaus Schmidinger
a1a8c5d94c Added code for the 'qad' audio track 2021-05-21 09:50:57 +02:00
Klaus Schmidinger
505bcee926 The transponder value of channels is now cached 2021-05-21 09:38:34 +02:00
Klaus Schmidinger
c02c081d91 The cFile class has been partially deprecated 2021-05-20 10:13:43 +02:00
Klaus Schmidinger
c8566fab77 Removed 'register' from libsi/util.c to avoid a warning with ISO-C++17 2021-05-19 11:55:00 +02:00
Klaus Schmidinger
54c4e69299 Removed the macros __STL_CONFIG_H, _STL_ALGOBASE_H and _MOVE_H from tools.h 2021-05-19 11:50:24 +02:00
Klaus Schmidinger
31b87544f1 Recordings are now checked for errors 2021-05-19 11:22:20 +02:00
Klaus Schmidinger
cd3cda2654 Fixed cTsPayload::AtPayloadStart() to ignore TS packets from other PIDs 2021-05-11 20:47:31 +02:00
Klaus Schmidinger
c98fdd9120 Fixed a typo 2021-05-03 14:06:12 +02:00
Klaus Schmidinger
10ffd08c82 Fixed a possible crash in the Schedule menu, in case Setup.EPGLinger is 0 2021-04-29 09:19:58 +02:00
Klaus Schmidinger
4a199fe4ac Now using a separate fixed value for internal EPG linger time 2021-04-28 20:44:56 +02:00
Klaus Schmidinger
98fa6206ac Version 2.5.3 2021-04-20 14:25:33 +02:00
Klaus Schmidinger
ce23ba64bd Deleting expired timers is now triggered immediately after the timers are modified 2021-04-20 13:22:37 +02:00
Klaus Schmidinger
02c668a6a9 EXPIRELATENCY now only applies to VPS timers 2021-04-20 09:50:02 +02:00
Klaus Schmidinger
9de337d2ee The new functions cTimer::Start/StopTimeEvent() are now used in the LCARS skin to display the start/stop times of timers in the main menu 2021-04-18 14:56:40 +02:00
Klaus Schmidinger
fa8c7c35b5 Fixed the timer indicator in the Schedule menu in case an event is already over, but the timer is still recording 2021-04-17 09:44:01 +02:00
Klaus Schmidinger
3d13eb002f Now making sure that spawned timers with reduced start/stop margins actually record with the full margins 2021-04-16 16:26:47 +02:00
Klaus Schmidinger
b2fb654bb3 To avoid problems with very short events, non-VPS pattern timers now spawn timers for all matching events that would start while the first one is still recording 2021-04-13 13:54:00 +02:00
Klaus Schmidinger
cd834c79ba Fixed dropping outdated events 2021-04-13 13:35:17 +02:00
Klaus Schmidinger
65aafacd8e Now adjusting spawned timers before setting events to timers 2021-04-10 11:32:50 +02:00
Klaus Schmidinger
ebd92dcd31 Fixed logging the old timer data in cTimer::AdjustSpawnedTimer() 2021-04-10 11:32:50 +02:00
Klaus Schmidinger
0003d6391c When spawning pattern timers, the new function cTimers::GetTimerForEvent() is now used to check whether a matching event already has a local timer 2021-04-10 10:09:50 +02:00
Klaus Schmidinger
4e52547a59 cTimer::TriggerRespawn() now only acts on local timers 2021-04-06 14:25:05 +02:00
Klaus Schmidinger
d3755c92d7 Version 2.5.2 2021-04-06 10:04:24 +02:00
Klaus Schmidinger
d536cf0947 No longer switching devices for pattern timers 2021-04-06 10:00:27 +02:00
Klaus Schmidinger
19a0e3cda7 Fixed MakePatternFileName() in case the event doesn't yet have a short text 2021-04-06 09:50:30 +02:00
Klaus Schmidinger
7fb13b3cbf Fixed handling the timer counter in cSchedule::DelEvent() 2021-04-06 09:01:26 +02:00
Klaus Schmidinger
23d986657a Spawned timers that don't use VPS now automatically adjust their start/stop times to changes in the respective event's times 2021-04-06 08:48:35 +02:00
Klaus Schmidinger
8f1419fff5 The margins for timer recordings are now always limited to the duration of the previous and next event 2021-04-04 13:38:13 +02:00
Klaus Schmidinger
b80c22e9c4 Improved handling EPG data from the EIT tables 2021-04-04 11:06:30 +02:00
Klaus Schmidinger
f672fe90c1 Fixed scaling subtitles with anti-aliasing 2021-03-17 15:24:34 +01:00
Klaus Schmidinger
3d55d3045e Decreased the scrambling timeout for CAMs known to decrypt a certain channel 2021-03-17 10:59:36 +01:00
Klaus Schmidinger
7ffc1a5efe Made checking for done recordings more tolerant 2021-03-17 10:55:43 +01:00
Klaus Schmidinger
36a833053b Improved cSectionSyncer 2021-03-16 15:10:54 +01:00
Klaus Schmidinger
ad35c9c2d3 Added some missing user command calls for copying, renaming and moving recordings 2021-01-19 20:38:28 +01:00
Klaus Schmidinger
1b1465a677 Now making sure a spawned timer only fully overlaps the given event 2021-01-19 13:21:51 +01:00
Klaus Schmidinger
2f6ce68ca7 Fixed setting the 'title' of a recording's info to the recording's name if there is no info file 2021-01-18 13:35:16 +01:00
Klaus Schmidinger
dee1225fa4 Made the functions cRecordingInfo::SetData() and cRecordingInfo::SetAux() public 2021-01-18 12:55:47 +01:00
Klaus Schmidinger
d78d6fba7e Spawned timers are now preferred over pattern timers in the Schedule menu 2021-01-15 13:52:40 +01:00
Klaus Schmidinger
80bdc90650 Now explicitly triggering respawning of pattern timers 2021-01-14 10:29:05 +01:00
Klaus Schmidinger
c402d57809 Increased the number of possible modulation systems in cDevice::GetDevice() 2021-01-11 10:36:05 +01:00
Klaus Schmidinger
f1836af0b0 Fixed VPS handling when spawning a pattern timer, in case Setup.UseVps is false 2021-01-07 16:00:17 +01:00
Klaus Schmidinger
eebcc57079 Fixed initializing the cChannel::schedule pointer after reading EPG data with PUTE 2021-01-04 09:05:26 +01:00
Klaus Schmidinger
cbc04d73b8 Added entries for backports to version 2.4.7 2021-01-02 15:37:57 +01:00
Klaus Schmidinger
be9eff0fad Fixed handling $(PKG_CONFIG) in newplugin 2021-01-02 14:32:20 +01:00
Klaus Schmidinger
3f3e47d280 Fixed a crash in the SVDRP command CLRE in case a non-existing channel number is given 2021-01-01 21:23:00 +01:00
Klaus Schmidinger
40ca081ff4 Using strgetlast() in more places 2021-01-01 15:26:27 +01:00
Klaus Schmidinger
c46fd1ff5b The Makefile now makes sure the 'x' bit of Doxyfile.filter is set before calling doxygen 2020-12-31 11:15:11 +01:00
Klaus Schmidinger
55b237dbe8 Fixed strreplace() to handle NULL strings 2020-12-29 21:40:29 +01:00
Klaus Schmidinger
2b3556b460 Implemented "Pattern Timers" 2020-12-26 15:49:01 +01:00
Klaus Schmidinger
d2e0087c4e Official release of version 2.4.6 2020-12-22 17:23:51 +01:00
Klaus Schmidinger
9a650a4772 Fixed convertCharacterTable() in case iconv_open() fails 2020-12-19 14:41:41 +01:00
Klaus Schmidinger
f4739f89bf Whitespace cleanup 2020-12-18 23:02:47 +01:00
Klaus Schmidinger
7ade54dfd7 Fixed a compiler warning 2020-12-18 14:51:57 +01:00
Klaus Schmidinger
45fde332a0 Fixed initializing tmpbuf in ExtendedEventDescriptors::getText() 2020-12-17 12:52:57 +01:00
Klaus Schmidinger
82cc5c76a4 Improved handling missing VDRPluginDestroyer() 2020-12-16 11:54:06 +01:00
Klaus Schmidinger
67a4ba4228 Fixed error handling when loading a plugin 2020-12-13 10:56:36 +01:00
Klaus Schmidinger
79a3607d0c Avoiding a lengthy lock on the Channels list when starting a recording 2020-12-12 22:01:01 +01:00
Klaus Schmidinger
dffeabbacb Fixed PMT handling in case locking the Channels list times out 2020-12-12 10:31:52 +01:00
Klaus Schmidinger
9fa7de2036 Fixed a bug in handling shared PMTs, where after the first pass not all SIDs of a PMT pid were checked any more 2020-12-09 21:42:26 +01:00
Klaus Schmidinger
bacc873896 Added initialization of cDvbFrontend::frontendInfo 2020-12-05 15:48:40 +01:00
Klaus Schmidinger
375d25627d Fixed generating the HashId in cEIT::cEIT() 2020-11-28 21:45:05 +01:00
Klaus Schmidinger
56e2ed2628 Fixed "read incomplete section" errors 2020-11-24 21:19:49 +01:00
Klaus Schmidinger
ad55da4ef9 Fixed possible compilation errors with libjpeg 2020-11-22 13:32:05 +01:00
Klaus Schmidinger
272231467a Fixed parsing the '-l' command line option 2020-11-20 13:49:58 +01:00
Klaus Schmidinger
6cb818c7ad Fixed allocating memory for cImage 2020-11-16 15:53:53 +01:00
Klaus Schmidinger
c23547c4ca Fixed a crash in case an error occurs when setting a remote timer 2020-11-06 13:13:05 +01:00
Klaus Schmidinger
0468b38ff3 Fixed an unnecessary double call to Display() in cMenuRecording::RefreshRecording() 2020-11-03 22:12:38 +01:00
Klaus Schmidinger
ebbc562aab Fixed multiple recording entries in case a recording is started during the initial reading of the video directory 2020-11-01 10:29:07 +01:00
Klaus Schmidinger
f387bb5e77 Now initializing the status variable in cDvbTuner::GetFrontendStatus() and cDvbTuner::GetSignalStats() to avoid problems with drivers that don't do this 2020-10-16 13:58:45 +02:00
Klaus Schmidinger
c5461ffd9f Now checking for an empty command in cDvbTuner::GetSignalStats() to avoid a possible error message 2020-10-16 13:50:36 +02:00
Klaus Schmidinger
8c1c92bff6 Added checking the symbol rate to cDvbTuner::IsTunedTo(), which apparently got lost in version 1.7.13 2020-10-16 13:42:13 +02:00
Klaus Schmidinger
36be6abfbd Increased the size of the TS buffer to 16MB, to have more reserve when recording several HD programmes 2020-10-15 10:16:38 +02:00
Klaus Schmidinger
f24e93ade1 Added test cases for alignment of semi-circles 2020-10-14 20:32:41 +02:00
Klaus Schmidinger
1a6a518f49 Fixed alignment of semi-circles in case of odd sizes 2020-10-13 13:47:10 +02:00
Klaus Schmidinger
fc7ca12edd Implemented anti-aliasing for cPixmap::DrawEllipse() 2020-10-12 13:54:44 +02:00
Klaus Schmidinger
bbd36d0610 Implemented anti-aliasing for cPixmap::DrawSlope() 2020-09-29 14:09:26 +02:00
Klaus Schmidinger
eebe7c798a Fixed several typos 2020-09-16 13:48:33 +02:00
Klaus Schmidinger
76a7bed575 Fixed a possible invalid lock sequence in cMenuTimers::OnOff() 2020-09-16 13:35:30 +02:00
Klaus Schmidinger
46b480c798 Fixed checking the return value of the Open() call in cFileName::SetOffset() 2020-09-16 13:30:59 +02:00
Klaus Schmidinger
b4a6c36215 Fixed handling newline characters in ci.c's CopyString() 2020-08-17 10:26:18 +02:00
Klaus Schmidinger
121f348379 Updated the Italian OSD texts 2020-08-16 13:34:23 +02:00
Klaus Schmidinger
16fb7967ff Official release of version 2.4.4 2020-08-02 08:55:08 +02:00
Klaus Schmidinger
88a2ef45ee Fixed a possible 'invalid lock sequence' when switching to an unavailable channel with the main menu open 2020-07-13 08:16:41 +02:00
Klaus Schmidinger
dd6077eb90 Implemented handling multi packet CATs with MTD 2020-07-10 09:06:21 +02:00
Klaus Schmidinger
568ca0e773 Fixed handling inactive shared CA pids 2020-07-01 15:16:21 +02:00
Klaus Schmidinger
fa5c9f764a Now setting currentDisplayChannel = NULL before calling cStatus::MsgOsdClear() in ~cDisplayChannel(), to avoid possible problems in case a plugin calls IsOpen() 2020-07-01 15:05:17 +02:00
Klaus Schmidinger
5193fd9d99 Improved deleting plugins in case the plugin uses its own memory management 2020-06-29 09:29:06 +02:00
Klaus Schmidinger
a526eee165 Fixed the 'else if' branch in cDevice::GetDeviceForTransponder(), which hasn't been active since version 1.7.29 2020-06-27 10:24:46 +02:00
Klaus Schmidinger
848c65fe4f Added CRC check of the CAT in cCaPidReceiver::Receive() 2020-06-27 10:05:56 +02:00
Klaus Schmidinger
488a13543e Now adding CPPFLAGS to CXXFLAGS to allow extra preprocessor flags to be given when doing make 2020-06-27 09:13:04 +02:00
Klaus Schmidinger
3cc0abf6ea Adjusted device selection in GetDeviceForTransponder() to that in GetDevice() 2020-06-25 13:46:16 +02:00
Klaus Schmidinger
35b95c2b00 Added a comment about the semantics of cTimeMs::Set() 2020-06-23 15:52:29 +02:00
Klaus Schmidinger
7630f579e1 Added support for HEVC-video and AC-4-audio 2020-06-23 09:27:09 +02:00
Klaus Schmidinger
8bd2ed1494 Fixed a typo in svdrp.c 2020-06-22 20:59:49 +02:00
Klaus Schmidinger
f5dba03447 Made the call to pkg_config configurable via the PKG_CONFIG macro, which is necessary for cross-building VDR 2020-06-22 15:08:46 +02:00
Klaus Schmidinger
73bcd869dc Added optional verbose output to the libsi Makefile 2020-06-22 14:31:10 +02:00
Klaus Schmidinger
1dabb9b8c5 Changed the country code in the generated ParentalRatingDescriptor from 'DEU' to '902' to make it valid for all countries 2020-06-22 12:15:52 +02:00
Klaus Schmidinger
5d39daa13c Added handling shared PMT pids and multiple PMT sections 2020-06-19 12:19:15 +02:00
Klaus Schmidinger
54cf10588d Added support for detecting 'advanced codec digital radio sound service' 2020-06-16 14:50:07 +02:00
Klaus Schmidinger
52826ec4c1 Added support for detecting new channels broadcast in HEVC 2020-06-16 14:41:32 +02:00
Klaus Schmidinger
ba9ccc12a5 Added cMtdHandler::StopDecrypting() 2020-06-16 14:33:32 +02:00
Klaus Schmidinger
67ea2163f4 Added cMtdCamSlot::TsPostProcess() 2020-06-16 14:25:43 +02:00
Klaus Schmidinger
1e1cd4554e Added codes for more languages and special audio tracks 2020-06-15 15:57:32 +02:00
Klaus Schmidinger
319df53e87 Added failsafe defaults for 'make LCLBLD=1' to the Makefile 2020-06-15 13:07:55 +02:00
Klaus Schmidinger
8e1be83b56 Revised 'Fixed a possible deadlock when detaching a receiver from a device' from version 2.3.9, which sometimes caused a black screen when switching channels 2020-06-12 09:28:44 +02:00
Klaus Schmidinger
5cfa736ad0 Fixed memory handling in cString::Append() 2020-06-10 20:52:10 +02:00
Klaus Schmidinger
8a282ef267 Added a device hook for detecting whether a device provides EIT data 2020-06-10 14:52:43 +02:00
Klaus Schmidinger
709055980e Fixed the size of cChannel::dtypes[] 2020-06-10 14:00:36 +02:00
Klaus Schmidinger
576e21f2fd Fixed credits for Winfried Khler 2020-06-10 13:51:58 +02:00
Klaus Schmidinger
e6bf3b6975 Added a missing '-D' to the 'plugins' target of the Makefile 2020-06-03 12:25:09 +02:00
Klaus Schmidinger
196785ff05 Fixed a possible crash in case replay is started and stopped in rapid sequence 2020-05-18 16:47:29 +02:00
Klaus Schmidinger
dd9dd76722 The isSingleByte parameter in the call to getCharacterTable() is deprecated and only present for backwards compatibility 2020-05-15 12:32:51 +02:00
Klaus Schmidinger
aae02a43da Modified setting system and override character tables 2020-05-15 11:31:40 +02:00
Klaus Schmidinger
ab308bea31 Fixed handling multi part ExtendedEventDescriptors where only the first part contains information about the character table 2020-05-14 21:21:03 +02:00
Klaus Schmidinger
5f3ad4fc9b Added the language code for Bulgarian 2020-05-11 11:04:29 +02:00
Klaus Schmidinger
f031563400 Improvements to the skincurses plugin 2020-05-11 10:23:15 +02:00
Klaus Schmidinger
d354d01af7 Fixed 'Changes for ncurses version 6' 2020-05-10 09:04:31 +02:00
Klaus Schmidinger
35b936200f Fixed dropping capabilities in case cap_sys_time is not available 2020-05-07 10:45:41 +02:00
Klaus Schmidinger
e6c450b346 Added missing '<...>' to the 'file' parameter in the help text of PUTE 2020-05-06 11:51:33 +02:00
Klaus Schmidinger
c813de133b The SVDRP command DELC now also accepts a channel id 2020-05-05 15:37:49 +02:00
Klaus Schmidinger
abe61dc903 Fixed wrong/missing credits for Jrgen Schneider (there's two of them) 2020-05-04 13:22:58 +02:00
Klaus Schmidinger
f624a082ad Fixed initializer 2020-05-04 13:02:14 +02:00
Klaus Schmidinger
38703cbf5d Updated email address of Uwe Scheffler 2020-05-04 12:47:40 +02:00
Klaus Schmidinger
930c2cd2eb Fixed compatibility with current versions of glibc 2020-05-04 12:28:31 +02:00
Klaus Schmidinger
225c495632 Fixed a typo 2020-05-04 11:40:44 +02:00
Klaus Schmidinger
5705ffbd2b Now retuning if the received transponder's SDT doesn't contain the expected values for NID and TID 2020-05-04 08:50:20 +02:00
Klaus Schmidinger
6e0f5287ea Fixed moving channels between number groups in SVDRP's MOVC command and the Channels menu, in case a channel is moved to a higher number and into a numbered group 2020-04-11 09:22:05 +02:00
Klaus Schmidinger
f63a066b98 Fixed typos 2020-03-29 15:53:48 +02:00
Klaus Schmidinger
6ff6db23bf Removed a wrong comment 2020-03-29 15:50:22 +02:00
Klaus Schmidinger
2af25bc58e Official release of version 2.4.1 2019-06-16 09:15:44 +02:00
Klaus Schmidinger
2b39c192a6 Fixed handling the S2SatelliteDeliverySystemDescriptor for transponders broadcasting in "backwards compatibility mode" according to ETSI EN 300 468 2019-05-31 13:25:00 +02:00
Klaus Schmidinger
0873d14614 If cSkins::Message() is called from a background thread and Type is not mtStatus, the call is now automatically forwarded to QueueMessage() 2019-05-29 16:44:55 +02:00
Klaus Schmidinger
712523f004 Fixed a wrong variable name in cFileName::cFileName() 2019-05-29 14:23:40 +02:00
Klaus Schmidinger
c2634a7ccf Fixed inconsistent behavior in case only certain devices are used (selected by the '-D' option) 2019-05-28 15:54:22 +02:00
Klaus Schmidinger
e8ae4afd09 Increased PLAYERBUFSIZE to (MAXFRAMESIZE * 5) to avoid stuttering replay under heavy system load, and to better document that this buffer size is related to the maximum frame size 2019-05-27 14:15:06 +02:00
Klaus Schmidinger
96aa4cacae The default maximum size of a cPixmap has been raised to the maximum possible value 2019-05-24 21:28:35 +02:00
Klaus Schmidinger
4242fa7f22 Fixed asserting free disk space in case there is no local timer currently recording 2019-05-23 10:00:48 +02:00
Klaus Schmidinger
abdab18807 Added a workaround for broadcasters who set an event to status "not running" where this is inappropriate; implicitly setting events to "not running" is now also logged 2019-05-20 09:55:22 +02:00
Klaus Schmidinger
12d8ef5a21 Fixed handling repeat function for keyboards 2019-05-13 13:41:29 +02:00
Klaus Schmidinger
6f95a495ab Fixed a compiler warning in cIndexFile::ConvertToPes() and added __attribute__((packed)) to tIndexPes and tIndexTs 2019-05-07 09:26:40 +02:00
Klaus Schmidinger
99dad019cc Fixed handling remote timers in case the response to LSTT is '550 No timers defined' 2019-05-06 15:14:04 +02:00
Klaus Schmidinger
ff2af3dffd Fixed a possible invalid lock sequence if the main menu is open and the user switches to a channel that is currently not available, using the Channel+/- keys 2019-05-06 13:14:23 +02:00
Klaus Schmidinger
294452cd43 Fixed a compiler warning and a possible buffer overflow in cCiMMI::SendAnswer() 2019-05-06 12:03:59 +02:00
Klaus Schmidinger
820c22775c Fixed a compiler warning in ExchangeChars() 2019-05-06 11:30:03 +02:00
Klaus Schmidinger
16f18cbce8 Fixed updating the checksum in the CA table after mapping EMM PIDs for MTD 2019-05-05 18:35:15 +02:00
Klaus Schmidinger
0f10c8824c Fixed mapping SIDs in MTD 2019-05-05 13:59:03 +02:00
Klaus Schmidinger
c5277df361 Fixed the install target in case of multiple jobs 2019-05-05 13:35:56 +02:00
Klaus Schmidinger
b83d29764e Now touching the .update file in the video directory after removing deleted recordings 2019-03-19 16:02:28 +01:00
Klaus Schmidinger
dd13070260 Fixed handling shared CA pids 2019-03-19 14:58:06 +01:00
Klaus Schmidinger
bd3b6f17e4 Fixed updating the cursor position when switching channels with the Channel+/- keys while the Channels menu is open 2019-03-18 16:20:17 +01:00
Klaus Schmidinger
1fa861ecb9 Fixed dropping capabilities in case cap_sys_time is not available 2019-03-18 13:39:56 +01:00
Klaus Schmidinger
2cf207b53e Fixed a copy/paste error 2019-03-18 10:29:09 +01:00
Klaus Schmidinger
4bd6d6559f Fixed sorting recordings alphabetically 2019-03-17 16:15:51 +01:00
Klaus Schmidinger
4b3fec660a Fixed processing SI::T2DeliverySystemDescriptor when typecasting it over an SI::ExtensionDescriptor 2019-03-15 16:28:16 +01:00
Klaus Schmidinger
dc160ab570 No longer logging tuning timeouts for transponders that are announced in the NIT but are not currently broadcasting 2019-03-15 14:51:22 +01:00
Klaus Schmidinger
4c7efcbd02 Added support for EAC3 audio from other sources 2019-03-15 13:10:33 +01:00
Klaus Schmidinger
27c0fffe7c Fixed triggering the SDT filter when parsing the NIT 2019-03-12 14:02:53 +01:00
Klaus Schmidinger
df8f5f4800 Fixed processing transponder data in the NIT 2019-03-12 13:05:33 +01:00
Klaus Schmidinger
71461c6082 Changes for ncurses version 6 2019-03-12 12:26:05 +01:00
Klaus Schmidinger
61ea56a1bd Fixed processing the last entry in the scan list of the EIT scanner 2019-03-12 11:47:36 +01:00
Klaus Schmidinger
235c652648 Fixed shutdown after user inactivity in case a plugin is keeping the OSD open (cont'd) 2019-03-12 10:01:16 +01:00
Klaus Schmidinger
61c00ccae5 Fixed handling PATs that contain no PMTs 2019-03-11 13:21:17 +01:00
Klaus Schmidinger
084f51c7db Fixed opening the UDP port in peerdemo 2019-03-11 10:28:22 +01:00
Klaus Schmidinger
18bb52554f Fixed accessing the actual frontend on multi frontend devices 2019-03-10 12:10:01 +01:00
Klaus Schmidinger
b9162ad7bd Reverted the change "The EIT filter no longer parses data from "other TS"..." 2018-11-15 16:38:14 +01:00
Klaus Schmidinger
5300077109 Rearranged some code for clarity - no functional changes 2018-10-29 12:22:11 +01:00
Klaus Schmidinger
cbc77f1f25 Added support for DVB devices with more than one frontend that all use the same dvr and demux 2018-10-29 12:16:35 +01:00
Klaus Schmidinger
bcee8ad43d Now deactivating MTD support if a non MCD capable CAM is inserted after removing a previously used CAM that is MCD capable 2018-09-23 10:21:12 +02:00
Klaus Schmidinger
336822f672 Fixed switching through encrypted channels with the Up/Down keys 2018-07-16 09:33:21 +02:00
Klaus Schmidinger
5543f13051 Fixed shutdown after user inactivity in case a plugin is keeping the OSD open 2018-07-16 08:55:15 +02:00
Klaus Schmidinger
30eb01ef37 Fixed locking the Channels list in cDisplayChannel, where the lock was still held when Flush() was called (cont'd) 2018-05-27 09:55:30 +02:00
Klaus Schmidinger
d380b57d28 Fixed locking the Channels list in cDisplayChannel, where the lock was still held when Flush() was called 2018-05-06 09:41:03 +02:00
Klaus Schmidinger
820a0ddb8a Fixed a possible invalid locking sequence in case a remote timer handling error message is displayed on the OSD and the skin tries to lock the Recordings or DeletedRecordings list in its Flush() function 2018-04-28 12:17:22 +02:00
Klaus Schmidinger
d84ec07ff6 Fixed handling the tfRecording flag in the SVDRP commands MODT and UPDT 2018-04-19 09:45:08 +02:00
Klaus Schmidinger
c48d5242ce Official release of version 2.4.0 2018-04-15 08:32:25 +02:00
Klaus Schmidinger
c057e057f9 Fixed a high CPU load during replay with active progress display 2018-04-14 10:24:41 +02:00
Klaus Schmidinger
fb03134411 Updated the French OSD texts 2018-04-14 08:49:04 +02:00
Klaus Schmidinger
732ba55126 channels.conf 2018-04-12 13:18:28 +02:00
Klaus Schmidinger
49d54df7d0 Adjusted version numbers and dates 2018-04-10 17:20:58 +02:00
Klaus Schmidinger
c89c83f5c1 Updated the Hungarian OSD texts 2018-04-10 08:39:00 +02:00
Klaus Schmidinger
3e83390fb9 Updated the Italian OSD texts 2018-04-09 09:51:04 +02:00
Klaus Schmidinger
0f9b4b6fd5 Added a missing initialization of osdState in cDisplayChannel::cDisplayChannel(eKeys FirstKey) 2018-04-09 09:21:27 +02:00
Klaus Schmidinger
bac9c65515 Fixed scaling bitmaps with very small factors 2018-04-06 08:51:16 +02:00
Klaus Schmidinger
5b9b09a90e Fixed updating the Schedule menu after editing a timer 2018-04-05 14:18:55 +02:00
Klaus Schmidinger
43544435fa Fixed sluggish setting of editing marks and a jumping progress display with very short recordings 2018-04-03 08:00:12 +02:00
Klaus Schmidinger
ac30924cdf Updated the Finnish OSD texts 2018-04-02 09:06:10 +02:00
Klaus Schmidinger
675e10d6fb Updated the Macedonian OSD texts 2018-04-02 09:01:49 +02:00
Klaus Schmidinger
77f438ed85 The EIT filter no longer parses data from "other TS" 2018-03-31 13:40:32 +02:00
Klaus Schmidinger
9dea1502eb Rephrased the note about the REMOTE macro 2018-03-25 13:11:38 +02:00
Klaus Schmidinger
e1a71ce7cc Fixed setting the initial offset of the cursor in a list menu 2018-03-24 11:58:00 +01:00
Klaus Schmidinger
53aea17949 Fixed a possible discrepancy of the primary device number in the LSTD and PRIM commands 2018-03-24 09:58:03 +01:00
Klaus Schmidinger
1f16ada70c Fixed some warnings from g++ 7.2.0 regarding fixed buffer sizes 2018-03-23 15:47:26 +01:00
Klaus Schmidinger
b539134e54 Fixed (not) saving the 'cam.data' file in case VDR stops early during startup due to some error 2018-03-19 16:39:58 +01:00
Klaus Schmidinger
6180dcce45 Version 2.4.0 2018-03-19 15:06:46 +01:00
Klaus Schmidinger
040f842e6c Fixed processing SVDRP client responses in case the caller doesn't want the actual response strings 2018-03-19 12:32:16 +01:00
Klaus Schmidinger
5cb66f8090 Updated the Ukrainian OSD texts 2018-03-19 10:47:53 +01:00
Klaus Schmidinger
a2b6b142d8 Modified cMenuTimers::Delete() to avoid a lengthy lock on the Timers list while prompting the user 2018-03-18 12:03:46 +01:00
Klaus Schmidinger
55408b73ca Fixed handling parameters in the S2SatelliteDeliverySystemDescriptor and T2DeliverySystemDescriptor 2018-03-18 10:52:21 +01:00
Klaus Schmidinger
f4b60f0b68 Made the input buffer in cSVDRPClient dynamic 2018-03-18 10:43:53 +01:00
Klaus Schmidinger
a1af84f29a Added missing <name> to help for POLL 2018-03-17 13:00:19 +01:00
Klaus Schmidinger
0e1956bb29 Fixed a typo 2018-03-17 12:17:37 +01:00
Klaus Schmidinger
64e8a34281 Commented out the logging in cMarks::Align() 2018-03-17 10:56:13 +01:00
Klaus Schmidinger
043929d850 Fixed a possible race condition with CONN vs. LSTT 2018-03-17 10:07:19 +01:00
Klaus Schmidinger
af3cb1c9c3 Improved handling VPS timers to better react to EPG changes during an ongoing recording 2018-03-11 13:19:30 +01:00
Klaus Schmidinger
c6796ac6df Removed sending the SVDRP command UPDR to peer VDRs whenever a change is made to the recordings in the video directory 2018-03-09 15:33:27 +01:00
Klaus Schmidinger
6b4911c6a2 Making sure the Schedules menu has a proper title, even if it is empty 2018-03-09 15:08:45 +01:00
Klaus Schmidinger
ec0e368a7f Handling SVDRP commands case insensitive 2018-03-09 10:49:48 +01:00
Klaus Schmidinger
1275de1b07 Now writing the info file before attaching the recorder to the device, to make sure it is present when the recorder needs to update the fps value 2018-03-08 17:03:51 +01:00
Klaus Schmidinger
746ce7d406 Fixed keeping the offset of the list cursor in case it is at the very top of the visible part of the list 2018-03-06 10:38:18 +01:00
Klaus Schmidinger
bb4b6901ad Fixed removing a cStateKey from a cStateLock 2018-03-05 22:40:12 +01:00
Klaus Schmidinger
a7fdd3c165 When making modifications to remote timers, the local VDR no longer sends a POLL to all remote VDRs 2018-03-05 15:49:20 +01:00
Klaus Schmidinger
1f9832b449 Assigning events to timers no longer triggers sending a POLL to all peer VDRs 2018-03-04 14:15:07 +01:00
Klaus Schmidinger
75648e80cf Modified cStateLock's SetExplicitModify() and IncState() 2018-03-04 11:31:21 +01:00
Klaus Schmidinger
8a7540321d Disabled the use of posix_fadvise() when reading 2018-03-03 19:35:31 +01:00
Klaus Schmidinger
adc7056c9e Fixed a typo 2018-03-03 13:10:51 +01:00
Klaus Schmidinger
b1b4a12848 Fixed stopping a remote repeating timer 2018-03-03 12:55:57 +01:00
Klaus Schmidinger
7b77f400a1 Fixed handling close of connections 2018-03-01 15:00:32 +01:00
Klaus Schmidinger
4d7455e783 Added timeouts for SVDRP peer communication about timers 2018-03-01 14:45:57 +01:00
Klaus Schmidinger
66d66b31dc Fixed the CompareInts() function 2018-02-28 10:14:18 +01:00
Klaus Schmidinger
9c3ce0048a When remote timers are fetched from a peer VDR, we no longer blindly delete and re-add them, but rather compare them and make only the minimum necessary changes 2018-02-28 10:06:47 +01:00
Klaus Schmidinger
3a3a233994 Updated the Polish OSD texts 2018-02-27 09:48:28 +01:00
Klaus Schmidinger
d5db0c5ba7 Improved locking 2018-02-26 15:42:15 +01:00
Klaus Schmidinger
dd6c37c13d Added options for name and port 2018-02-25 21:50:18 +01:00
Klaus Schmidinger
e4af94d3f9 Combined Start/StopSVDRPServer/ClientHandler() into Start/StopSVDRPHandler() 2018-02-25 13:57:21 +01:00
Klaus Schmidinger
bf497f4aae Fixed storing timer id in .timer for instant recordings 2018-02-25 13:28:19 +01:00
Klaus Schmidinger
6600478675 Moved handling remote timers into cSVDRPClientHandler::ProcessConnections() 2018-02-25 13:26:17 +01:00
Klaus Schmidinger
bbbc36a1e6 Adapted to the new CONN command 2018-02-25 12:42:58 +01:00
Klaus Schmidinger
361d642660 Initiating the client side of a peer-to-peer SVDRP connection is now done with the new SVDRP command CONN instead of using the UDP port with the server's address 2018-02-20 13:28:04 +01:00
Klaus Schmidinger
a72806a0ba Added a section about the '.sort' file to vdr.5 2018-02-15 16:02:04 +01:00
Klaus Schmidinger
a1c53eae1e Improved calculating signal strength and quality (cont'd) 2018-02-15 15:37:01 +01:00
Klaus Schmidinger
a4343bdfd9 Fixed case inconsistency with SVDRPDefaultHost 2018-02-15 14:41:14 +01:00
Klaus Schmidinger
940e4a7c4d Fixed handling SVDRP peering for more than one instance of VDR on the same machine, and improved logging and debug output 2018-02-15 14:30:14 +01:00
Klaus Schmidinger
3090d8146f Implemented storing timer id in .timer 2018-02-13 09:33:41 +01:00
Klaus Schmidinger
78831a72d5 Improved calculating signal strength and quality 2018-02-12 14:05:22 +01:00
Klaus Schmidinger
68f0f24670 Fixed getting the info of a newly edited recording 2018-02-10 13:31:31 +01:00
Klaus Schmidinger
6b9c5aa1ac When a timer is newly created in the Timers menu, it now immediately appears at the correct position in the list 2018-02-10 12:51:19 +01:00
Klaus Schmidinger
902c83ece3 Fixed keeping the cursor position in the Recordings menu in case a timer starts recording while the menu is open 2018-02-10 12:34:10 +01:00
Klaus Schmidinger
30650b9c13 Fixed updating the Timers menu after turning a local timer on/off with the Red button 2018-02-10 10:54:33 +01:00
Klaus Schmidinger
5976079fd3 Added a note about the fixed UDP port for SVDRP discovery to vdr.1 2018-02-09 15:21:06 +01:00
Klaus Schmidinger
1e3f146707 Replaced the warning regarding the open SVDRP port in the INSTALL file with a remarkabout using svdrphosts.conf to completely disable SVDRP access 2018-02-09 15:19:59 +01:00
Klaus Schmidinger
015b269c21 Making sure cSVDRPClient::Process() reads the entire reply once it started reading, even if no Response parameter is given 2018-02-05 15:18:19 +01:00
Klaus Schmidinger
802544662d Added the UPDATE-2.4.0 file 2018-02-04 10:07:42 +01:00
Klaus Schmidinger
41c247b8ff Added a note about 'cam.data' not being overwritten if it is read-only 2018-02-03 13:56:27 +01:00
Klaus Schmidinger
b2d3c92da9 Fixed typos 2018-02-03 13:42:11 +01:00
Klaus Schmidinger
bc295040d0 Added a note about the 'peerdemo' script 2018-02-03 13:12:04 +01:00
Klaus Schmidinger
c441a634a5 Limited some CAM related log messages to the actual master CAM, if any 2018-02-03 12:59:56 +01:00
Klaus Schmidinger
c71c3115cc Fixed handling editing marks in the replay progress display, in case the marks are deleted via the Info/Edit menu of the currently played recording 2018-02-01 16:08:15 +01:00
Klaus Schmidinger
5ae8d1a7a3 Implemented cStatus::MarksModified() 2018-01-29 14:09:59 +01:00
Klaus Schmidinger
0055eeeeb8 Fixed a possible deadlock when quickly zapping through encrypted channels 2018-01-28 11:21:28 +01:00
Klaus Schmidinger
5443fd4219 Fixed a possible crash when stopping VDR (contd) 2018-01-27 14:45:08 +01:00
Klaus Schmidinger
626ae82fee Added a missing '|' 2018-01-26 14:34:31 +01:00
Klaus Schmidinger
4fd2870720 Removed some excess ';' 2018-01-25 15:09:23 +01:00
Klaus Schmidinger
a9e32ad0a5 Removed superfluous call to cVideoDirectory::RemoveVideoFile() 2018-01-18 12:19:31 +01:00
Klaus Schmidinger
165eae9c31 Fixed wrongly removing the edited version after the cutter has completed 2018-01-18 10:13:29 +01:00
Klaus Schmidinger
a343b375df Now unlocking the Recordings list before displaying an error message in cMenuPathEdit::ApplyChanges() and cReplayControl::Stop() 2018-01-17 10:27:37 +01:00
Klaus Schmidinger
28b6ee47e3 Now using the 'example' macro in vdr.5 2018-01-16 15:27:17 +01:00
Klaus Schmidinger
ae41be85c8 Moved any locking from cutter.c into recording.c 2018-01-16 14:11:40 +01:00
Klaus Schmidinger
e7936c8595 Fixed wrongly deleting a recording that already exists when moving a recording 2018-01-16 11:09:26 +01:00
Klaus Schmidinger
5467bc4f24 Fixed a possible deadlock when detaching a receiver from a device 2017-12-16 13:13:13 +01:00
Klaus Schmidinger
477fb7dc20 When selecting a folder for a recording or timer, it is now possible to open a folder even if it doesn't contain any subfolders 2017-12-15 13:43:00 +01:00
Klaus Schmidinger
05bfa4b476 Changed the log message ""ERROR: copying directory %s to %s ended prematurely" from "error" to "info" 2017-12-14 15:18:05 +01:00
Klaus Schmidinger
630cc496ea Moved adding the name of the edited recording into the cutting thread, to avoid a problem with locking the Recordings list 2017-12-14 14:17:35 +01:00
Klaus Schmidinger
c3af5a69da Now staying in the source folder when moving a recording or a folder to a different folder 2017-12-14 10:45:02 +01:00
Klaus Schmidinger
7455fbd2ad Fixed canceling moving a folder with several recordings between volumes 2017-12-11 13:55:38 +01:00
Klaus Schmidinger
ea217de338 Now displaying recordings in move as non-selectable 2017-12-10 13:04:38 +01:00
Klaus Schmidinger
1492f6dbc4 Implemented 'OSD/Sorting direction for recordings' 2017-12-09 18:58:25 +01:00
Klaus Schmidinger
e757f10e44 If TS packets are not accepted by the output device in Transfer Mode, this is now reported only once per minute in the log file 2017-12-07 15:05:48 +01:00
Klaus Schmidinger
c868265397 Fixed a lengthy write lock on the Recordings list in case of moving a folder with more than one recording 2017-12-05 16:44:21 +01:00
Klaus Schmidinger
e5e0315d34 The CAM menu is now automatically closed when the current channel is switched 2017-12-04 15:33:41 +01:00
Klaus Schmidinger
0224fc5210 Fixed positioning to the current item when changing the sort mode in the Recordings menu, in case there is a LastReplayed recording 2017-12-04 14:55:13 +01:00
Klaus Schmidinger
b96277e28a Fixed a deadlock when moving a folder containing several recordings between different volumes 2017-12-04 13:07:39 +01:00
Klaus Schmidinger
b5d8f68b87 Translations for 'The new SVDRP commands 'LSTD' and 'PRIM'...' 2017-12-04 12:12:17 +01:00
Klaus Schmidinger
0a47b30528 Added the 'peerdemo' script 2017-12-03 12:49:30 +01:00
Klaus Schmidinger
26a40bc174 Added a note to PLUGINS.html about writing log messages in English 2017-11-29 10:03:13 +01:00
Klaus Schmidinger
990bc6a11f Fixed positioning the cursor in the Recordings menu when moving a recording between different volumes 2017-11-27 15:19:43 +01:00
Klaus Schmidinger
91774cf074 Fixed a possible crash when moving a recording between different volumes 2017-11-27 14:09:04 +01:00
Klaus Schmidinger
9d5ce204aa Now calling Hide() and cStatus::MsgReplaying(..., false) from cReplayControl::Stop() 2017-11-26 15:07:00 +01:00
Klaus Schmidinger
a9d82331e6 Fixed a possible crash with plugins that retrieve player information after a replay has been stopped, but before the replay control has been destroyed 2017-11-26 15:02:54 +01:00
Klaus Schmidinger
8dcff164fa Fixed handling timers during the change from DST to winter time 2017-11-12 13:13:06 +01:00
Klaus Schmidinger
54b721ebde Added some comments regarding font height 2017-11-11 14:05:53 +01:00
Klaus Schmidinger
d19a3fc3b8 The new SVDRP commands 'LSTD' and 'PRIM' can be used to list all available devices and to switch the primary device 2017-11-11 12:04:17 +01:00
Klaus Schmidinger
950b248220 Switching the primary device is no longer done via osSwitchDvb, but rather by the main program loop reacting to changes in Setup.PrimaryDVB 2017-11-09 16:23:15 +01:00
Klaus Schmidinger
bc3b6ed601 Local timers are now preferred over remote timers in the Schedules menu 2017-11-09 12:22:20 +01:00
Klaus Schmidinger
33bbff2aa5 The LCARS skin's main menu now reacts to changes of the current channel's name 2017-11-08 10:37:57 +01:00
Klaus Schmidinger
5c94900026 OSD menus now try to keep the offset of the list cursor at a constant position on the screen, even if the list is modified while being displayed 2017-11-07 15:42:47 +01:00
Klaus Schmidinger
e02a0a8c88 The timeout for the channel display is now reset whenever the channel or EPG data changes 2017-11-02 15:36:24 +01:00
Klaus Schmidinger
d8523b0db8 The macros used to control deprecated code or functions have been changed to hold numeric values; the default for DEPRECATED_VDR_CHARSET_OVERRIDE has been set to 0 2017-11-02 15:04:56 +01:00
Klaus Schmidinger
d74dd7a60a The function cDevice::GetVideoSystem() has been finally removed 2017-11-02 14:38:49 +01:00
Klaus Schmidinger
c08ed3ce44 The MTD mapper now avoids immediately reusing unique PIDs when switching channels 2017-10-31 12:20:56 +01:00
Klaus Schmidinger
19275aa8bb Fixed an invalid lock sequence when trying to remove a deleted recording in case of low disk space; now making sure that AssertFreeDiskSpace() is called with the maximum timer priority in case there are several timers recording with different priorities 2017-10-31 09:47:14 +01:00
Klaus Schmidinger
7bbbfb0dee Fixed handling VPS events outside the LingerLimit, which could cause recordings to stop prematurely 2017-10-11 09:22:24 +02:00
Klaus Schmidinger
ef7018cca4 Adapted the pic2mpg script to new ffmpeg options; no longer using 'convert' to scale/rotate the pictures 2017-10-06 15:12:25 +02:00
Klaus Schmidinger
f2a2c67152 Fixed a possible crash when stopping VDR 2017-08-31 11:46:16 +02:00
Klaus Schmidinger
9719766007 Updated the Finnish OSD texts 2017-07-24 09:02:12 +02:00
Klaus Schmidinger
32fb2e8a3e Updated the Italian OSD texts 2017-07-24 08:59:28 +02:00
Klaus Schmidinger
363dee6846 SVDRP peering can now be limited to the default SVDRP host 2017-06-30 09:50:44 +02:00
Klaus Schmidinger
a28d92d049 Whenever a change is made to the recordings in the video directory, the SVDRP command UPDR is now sent to all peer VDRs 2017-06-25 12:43:09 +02:00
Klaus Schmidinger
39294e0147 Added a note to the log, indicating that no further invalid lock sequences will be reported until VDR is restarted 2017-06-25 12:10:19 +02:00
Klaus Schmidinger
027ae738a8 Now using readdir() instead of readdir_r(), if GLIBC version 2.24 or newer is used 2017-06-25 11:54:32 +02:00
Klaus Schmidinger
ce5e23f209 Timers are now linked to EPG events even if they are inactive 2017-06-25 10:03:19 +02:00
Klaus Schmidinger
139a93156b Fixed drawing very long menu titles in the LCARS skin 2017-06-23 16:03:51 +02:00
Klaus Schmidinger
9cf7328452 Now skipping a leading '/' in AddDirectory(), to avoid double slashes 2017-06-23 09:44:25 +02:00
Klaus Schmidinger
0bccf29254 Updated the Italian OSD texts 2017-06-23 09:14:13 +02:00
Klaus Schmidinger
ede2e89670 Added a note about only working with the given data 2017-06-23 09:08:40 +02:00
Klaus Schmidinger
56117751a8 Fixed a possible crash in cStateLockLog 2017-06-23 09:03:19 +02:00
Klaus Schmidinger
1bce499383 Added some missing locks when calling functions from cStatus or cSkin* 2017-06-21 09:40:39 +02:00
Klaus Schmidinger
699c073d85 Fixed indentation 2017-06-20 15:02:39 +02:00
Klaus Schmidinger
95947a29d5 Fixed detecting whether a CAM replies to queries 2017-06-19 12:16:40 +02:00
Klaus Schmidinger
70f48e6ca3 Updated links in the INSTALL file 2017-06-12 08:58:26 +02:00
Klaus Schmidinger
0a2c88c288 Introduced the new macro DISABLE_TEMPLATES_COLLIDING_WITH_STL 2017-06-11 10:05:34 +02:00
Klaus Schmidinger
c70d62aeb4 Changed ##Lock to ##_Lock in the DEF_LIST_LOCK and USE_LIST_LOCK macros defined in tools.h 2017-06-11 09:01:47 +02:00
Klaus Schmidinger
a4a3c63779 Removed dashes from channel group delimiter in channels menu 2017-06-10 19:19:51 +02:00
Klaus Schmidinger
a98f6ca354 The "Channels" menu now indicates whether a channel is encrypted or a radio channel 2017-06-10 15:57:33 +02:00
Klaus Schmidinger
deb96b372e The option "Setup/Miscellaneous/Show channel names with source" can now be set to "type" or "full" 2017-06-10 15:34:23 +02:00
Klaus Schmidinger
360d8fe6b1 Implemented CAM auto responses 2017-06-10 11:53:39 +02:00
Klaus Schmidinger
93102b45e0 Fixed a typo in CAMMENURETYTIMEOUT and added logging CAM enquiries 2017-06-10 11:52:47 +02:00
Klaus Schmidinger
fd3bf51f7d Changed '-' to 'U' when a lock is released 2017-06-09 08:27:22 +02:00
Klaus Schmidinger
79314ab98f Increased SLL_LENGTH in thread.c to better handle long caller lines, and enclosed logCaller with DEBUG_LOCKCALL to preserve memory in normal operation 2017-06-08 08:29:45 +02:00
Klaus Schmidinger
38fed8c901 Fixed L(ock) and U(nlock) indicators in cStateLockLog 2017-06-08 08:24:30 +02:00
Klaus Schmidinger
081e9eb45f Fixed the locking sequence when starting an instant recording 2017-06-07 15:41:12 +02:00
Klaus Schmidinger
c0b8666d1f Fixed false positives when checking the locking sequence, in case of nested locks within the same thread (cont'd) 2017-06-07 12:31:31 +02:00
Klaus Schmidinger
210df9d835 Fixed uninitialized variable SdWatchdog in vdr.c 2017-06-06 10:55:12 +02:00
Klaus Schmidinger
dc775bc5f8 Fixed false positives when checking the locking sequence, in case of nested locks within the same thread 2017-06-06 09:25:48 +02:00
Klaus Schmidinger
ec47c4f932 Fixed the locking sequence when switching between 'Now', 'Next' and 'Schedule' in the Schedules menu 2017-06-04 09:35:18 +02:00
Klaus Schmidinger
25d28e7421 Fixed the locking sequence when creating a new timer from the Schedules menu 2017-06-03 12:51:22 +02:00
Klaus Schmidinger
2c74a31afe Added backtrace functions for debugging 2017-06-03 12:43:22 +02:00
Klaus Schmidinger
bae02358a3 Fixed a possible crash in case the SVDRP connection to a peer VDR is terminated while getting remote timers 2017-05-31 14:06:07 +02:00
Klaus Schmidinger
f97a59597f Now using a separate mutex to fix the race between SVDRP CHAN and cDevice::HasProgramme() 2017-05-30 11:06:55 +02:00
Klaus Schmidinger
6edfcda43a Fixed generating k_Release key events for LIRC remote controls 2017-05-30 11:05:00 +02:00
Klaus Schmidinger
c9c15a727d Fixed a double channel switch when pressing the Channel+/- keys while no menu or channel display is open 2017-05-29 11:37:06 +02:00
Klaus Schmidinger
5324809a91 Added clearing CiResourceHandlers before shutting down the plugin manager 2017-05-29 11:14:43 +02:00
Klaus Schmidinger
f69b920dbc The Makefiles now use the macro $(Q) instead of a plain '@' in front of their commands, so that verbosity can be controlled by the user 2017-05-29 09:12:42 +02:00
Klaus Schmidinger
a4c851f759 Fixed the locking sequence when starting a recording 2017-05-29 08:18:17 +02:00
Klaus Schmidinger
2751e239eb Fixed the locking sequence when dumping EPG data 2017-05-28 13:08:09 +02:00
Klaus Schmidinger
0af3ed548c Added debug output for checking the correct sequence of locking global lists 2017-05-28 12:47:54 +02:00
Klaus Schmidinger
7cdd4877c3 Adjusted release date 2017-05-25 09:08:46 +02:00
Klaus Schmidinger
37acfbd372 Fixed detecting the inclusion of STL header files in tools.h 2017-05-22 20:21:30 +02:00
Klaus Schmidinger
e7cd3f0b33 No longer displaying the actual (lengthy) commands during the build process 2017-05-22 16:29:49 +02:00
Klaus Schmidinger
354910faab If the Channel+/- keys are pressed while in the Schedules menu, the menu is now switched to the EPG of the new current channel 2017-05-21 13:18:26 +02:00
Klaus Schmidinger
0f1f277819 Fixed setting the local machine's SVDRP host name; only saving the SVDRP host name if it differs from the system's host name 2017-05-21 10:28:10 +02:00
Klaus Schmidinger
3b1b5bde68 Removed TsGetContinuityCounter() from remux.h, using TsContinuityCounter() instead 2017-05-21 09:53:27 +02:00
Klaus Schmidinger
82813f48c4 Added the macro VDR_NO_STL_PROTOTYPES to tools.h 2017-05-21 09:37:45 +02:00
Klaus Schmidinger
0b9870959b Fixed handling remote timers 2017-05-20 13:01:34 +02:00
Klaus Schmidinger
4100b47b37 Reduced the time before a CAM is marked as known to decrypt a particular channel to 3 seconds 2017-05-18 09:32:04 +02:00
Klaus Schmidinger
43c828f8ca Fixed a race between SVDRP CHAN and cDevice::HasProgramme() 2017-05-18 09:18:43 +02:00
Klaus Schmidinger
b01a1ee818 Extended the CI API to allow plugins to implement additional CAM resources 2017-05-18 09:05:46 +02:00
Klaus Schmidinger
50211c706a Fixed a crash in case the bottom text of a CAM menu is empty 2017-05-17 09:17:44 +02:00
Klaus Schmidinger
ce42e42ed7 Added handling RI_HOST_CONTROL to the CI protocol 2017-05-12 09:17:39 +02:00
Klaus Schmidinger
34f572f792 Fixed handling line numbers in error messages when reading EPG data 2017-05-09 12:25:32 +02:00
Klaus Schmidinger
44287ca25e Added a Status parameter to the interface of cDevice::SignalStats() and cDvbDevice::SignalStats() 2017-05-09 11:53:41 +02:00
Klaus Schmidinger
6bed5368e6 Changed the legacy delivery system name "DMBTH" to "DTMB", and added names for DVBC_ANNEX_C and DVBC2 2017-05-09 09:46:28 +02:00
Klaus Schmidinger
4591dcad2c Fixed selecting delivery system names in case of undefined indexes 2017-05-09 09:43:25 +02:00
Klaus Schmidinger
dbcea07600 Changed the default return value of cEpgHandler::BeginSegmentTransfer() to true 2017-05-09 09:20:34 +02:00
Klaus Schmidinger
b76601482f When selecting a device/CAM combination for live viewing, CAMs that are known to decrypt the requested channel are now given a higher priority than prefering the primary device 2017-05-09 09:13:36 +02:00
Klaus Schmidinger
8e9d445248 cListObject now implements a private copy constructor and assignment operator, to keep derived objects from calling them implicitly 2017-05-09 08:39:19 +02:00
Klaus Schmidinger
7d1dde01ba The constructor of cHash (via cHashBase) now has an additional parameter (OwnObjects); fixed a memory leak in cSectionSyncerHash 2017-05-09 08:33:37 +02:00
Klaus Schmidinger
79b57feab6 Events in the EIT that end before the EPG linger time are now ignored in the incoming data stream 2017-05-03 09:02:24 +02:00
Klaus Schmidinger
1a92ae77a0 Added a note about complete TS packets to cCamSlot::Inject() 2017-05-01 16:26:34 +02:00
Klaus Schmidinger
84b8ea8395 Log messages about switching channels now include the channel ID 2017-05-01 13:06:32 +02:00
Klaus Schmidinger
9491948f04 Fixed handling UNC values 2017-05-01 12:50:12 +02:00
Klaus Schmidinger
073268bd45 CAMs are now sent a generated EIT packet that contains a single 'present event' for the current SID, in order to avoid any parental rating dialogs 2017-05-01 09:32:32 +02:00
Klaus Schmidinger
7cfce2fffa Adjusted release date 2017-04-27 08:43:41 +02:00
Klaus Schmidinger
a1fda4f218 Fixed a possible crash when pulling the CAM while decrypting a channel with MTD (cont'd) 2017-04-26 09:18:26 +02:00
Klaus Schmidinger
1a31974789 Fixed a typo 2017-04-24 14:59:39 +02:00
Klaus Schmidinger
3d63936a36 Fixed a possible crash when pulling the CAM while decrypting a channel with MTD 2017-04-24 09:25:29 +02:00
Klaus Schmidinger
2e9060d549 Removed logging DVB API 5 signal statistics, because it happened too often if EPG scan is active (cont'd) 2017-04-23 12:00:06 +02:00
Klaus Schmidinger
467829af32 The SVDRP command LSTC can now list the channels with channel ids; channel number 0 lists the data of the current channel 2017-04-22 15:02:56 +02:00
Klaus Schmidinger
9cd28b2ded Fixed handling the uncorrected block counter for DVB API 3 devices when calculating signal quality 2017-04-20 14:43:54 +02:00
Klaus Schmidinger
686831caf5 Fixed editing a remote timer immediately after it has been created 2017-04-20 10:08:04 +02:00
Klaus Schmidinger
1efd5e6b7e Fixed displaying remote timers in the main menu of skin LCARS 2017-04-20 08:49:31 +02:00
Klaus Schmidinger
f90edc1e8b Removed logging DVB API 5 signal statistics, because it happened too often if EPG scan is active 2017-04-18 13:11:51 +02:00
Klaus Schmidinger
d1ff365767 Updated the Finnish OSD texts 2017-04-18 12:15:01 +02:00
Klaus Schmidinger
6132a46768 Implemented getting and logging DVB API 5 signal statistics 2017-04-17 15:02:44 +02:00
Klaus Schmidinger
1f541487e0 cTSBuffer::Skip() no longer immediately deletes the given number of bytes from the TS buffer 2017-04-15 09:55:32 +02:00
Klaus Schmidinger
1a160e7afe The function cCamSlot::Decrypt() can now also be called with Data == NULL 2017-04-15 09:39:55 +02:00
Klaus Schmidinger
016e10c1b0 Signal strength and quality (CNR) are now determined via DVB API 5 (if available) 2017-04-06 17:12:59 +02:00
Klaus Schmidinger
6d52c80273 Changed some leftover 'number' to 'id' in SVDRP replies 2017-04-04 11:09:14 +02:00
Klaus Schmidinger
63a32ce483 Fixed a deadlock in the SVDRP command PLAY in case there is currently a recording being replayed 2017-04-04 11:05:38 +02:00
Klaus Schmidinger
7170c20c7e Added missing GetById() calls 2017-04-04 09:39:36 +02:00
Klaus Schmidinger
7e6667f58f Changed 'number' to 'id' in the help texts of SVDRP commands that deal with timers 2017-04-03 14:32:33 +02:00
Klaus Schmidinger
67cb53d587 Recordings now have unique ids 2017-04-03 14:11:41 +02:00
Klaus Schmidinger
e622854789 cOsdMenu::Display() now checks whether the OSD size has changed and if so calls SetDisplayMenu() 2017-04-03 12:49:56 +02:00
Klaus Schmidinger
792b9dc45f Added a note to the "Pausing live video" section of the MANUAL 2017-04-03 08:42:10 +02:00
Klaus Schmidinger
fe535d25e5 Added some guidelines and recommendations to the 'Logging' section of PLUGINS.html 2017-04-02 13:01:34 +02:00
Klaus Schmidinger
c4cc5e613c The cEvent class now has a new member 'aux' 2017-04-02 12:13:15 +02:00
Klaus Schmidinger
0a5a7893a5 Detecting whether a particular CAM actually decrypts a given channel is now done separately for each receiver 2017-04-02 10:08:49 +02:00
Klaus Schmidinger
f39d31631b The file 'cam.data' is no longer written if it is read-only 2017-04-02 10:06:31 +02:00
Klaus Schmidinger
8d3ae53bcd Changed tEventID back to u_int32_t 2017-04-01 12:39:46 +02:00
Klaus Schmidinger
d6f57259fa The function cEpgHandlers::BeginSegmentTransfer() is now boolean 2017-03-31 15:24:35 +02:00
Klaus Schmidinger
112bfa5897 The functionality of HandleRemoteModifications() has been moved to timers.[ch] 2017-03-30 15:25:20 +02:00
Klaus Schmidinger
da105e3bda Added credit for Jasmin Jessich 2017-03-28 08:31:51 +02:00
Klaus Schmidinger
2e8815ece8 Silently ignore MTD index -1 2017-03-27 14:26:04 +02:00
Klaus Schmidinger
830e30e2fb Only store ChannelCamRelations for receivers with valid channel ids 2017-03-27 14:02:54 +02:00
Klaus Schmidinger
d60336ba96 Added TS_SYNC to cMtdHandler::Put() 2017-03-27 09:09:37 +02:00
Klaus Schmidinger
44813e56a5 Limiting locking the mtdBuffer to reading and clearing 2017-03-27 08:35:29 +02:00
Klaus Schmidinger
b313d88db1 Improved clearing the MTD buffer and syncing on TS packets 2017-03-26 13:07:01 +02:00
Klaus Schmidinger
9e808255f8 Now stopping any ongoing recordings before stopping the plugins 2017-03-25 14:32:37 +01:00
Klaus Schmidinger
fe57c16f6f Fixed a crash when stopping VDR while recording encrypted channels with MTD 2017-03-25 14:09:31 +01:00
Klaus Schmidinger
2d9eb7e25d Mapping PIDs in CanDecrypt(); improved description of Start-/StopDecrypting(); removed obsolete cMtdCamSlot::IsDecrypting(); fixed getting device fpr channel up/down 2017-03-23 14:34:53 +01:00
Klaus Schmidinger
b7be7c900a cMtdHandler::Put() now processes as many TS packets as possible in one call 2017-03-19 14:20:22 +01:00
Klaus Schmidinger
e2756f8e9a Now clearing the MTD buffer 2017-03-19 13:33:53 +01:00
Klaus Schmidinger
367557039a The function cRingBufferLinear::Clear() can now be called safely from the reading thread, without additional locking 2017-03-19 13:11:39 +01:00
Klaus Schmidinger
31b0feae14 Added some remarks 2017-03-19 10:48:52 +01:00
Klaus Schmidinger
2cc25e65f4 Implemented support for MTD 2017-03-18 16:33:59 +01:00
Klaus Schmidinger
3f9cdea1c1 PIDs can now be added to and deleted from a cReceiver while it is attached to a cDevice 2017-02-21 14:17:07 +01:00
Klaus Schmidinger
71601e363e Fixed setting the local machine's SVDRP host name 2017-02-14 11:04:24 +01:00
Klaus Schmidinger
9b9d15438e Implemented the concept of 'master cams' 2017-01-23 12:01:48 +01:00
Klaus Schmidinger
6121095a30 Changed 'unsigned' to 'signed' in some places to avoid trouble with abs() in gcc6+ 2017-01-09 15:21:13 +01:00
Klaus Schmidinger
6773ab35d2 Fixed updating the elapsed/remaining time in the progress display during fast forward/rewind 2017-01-09 14:52:57 +01:00
Klaus Schmidinger
196f2af596 The mechanism of trying different CAMs when switching to an encrypted channel is now only triggered if there acually is more than one CAM in the system 2017-01-09 14:27:36 +01:00
Klaus Schmidinger
d1ddb39781 The channel/CAM relations are now stored in the file 'cam.data'; fixed a flaw in handling timeouts for encrypted channels 2017-01-09 13:42:41 +01:00
Klaus Schmidinger
882273d508 Added a missing dependency to the Makefile to avoid error messages in the clean-plugins target 2017-01-08 11:09:54 +01:00
Klaus Schmidinger
0aba3abaeb Updated the Russian OSD texts 2017-01-05 11:42:21 +01:00
Klaus Schmidinger
1c7c2f50b0 Fixed a possible deadlock in the recordings handler thread 2017-01-01 17:52:51 +01:00
Klaus Schmidinger
f345908f77 Added 'S3W ABS-3A' to sources.conf 2016-12-27 11:45:25 +01:00
Klaus Schmidinger
ab9e7d50a3 Adjusted release date 2016-12-24 08:48:22 +01:00
Klaus Schmidinger
834ac04c3b Added a short sleep to cTSBuffer::Action() to avoid high CPU usage 2016-12-23 14:49:06 +01:00
Klaus Schmidinger
e2ba3d09a5 Added support for the systemd watchdog 2016-12-23 14:36:24 +01:00
Klaus Schmidinger
bac0ca39ba Avoiding some duplicate code and unnecessary work in nit.c 2016-12-23 14:25:27 +01:00
Klaus Schmidinger
68acf8815c Fixed a possible buffer overflow in handling CA descriptors 2016-12-23 14:08:14 +01:00
Klaus Schmidinger
736f2fed42 Fixed the non-const version of cTimers::GetTimer() 2016-12-23 09:49:31 +01:00
Klaus Schmidinger
fdbbbd146a Fixed a typo in the description of cTimers::GetTimersRead() 2016-12-22 14:31:50 +01:00
Klaus Schmidinger
bac165a751 Added a 'const' version of cTimers::GetTimer() 2016-12-22 14:27:01 +01:00
Klaus Schmidinger
3d488bcf1c Updated the Estonian OSD texts 2016-12-22 14:19:54 +01:00
Klaus Schmidinger
39c9fc1199 Fixed truncated date/time strings in the skins on multi-byte UTF-8 systems 2016-12-22 14:13:42 +01:00
Klaus Schmidinger
99dfe9f66a Added 'S58.5E Kazsat 3' to sources.conf 2016-12-22 13:32:49 +01:00
Klaus Schmidinger
03d6fbec0a Sorted sources.conf by continuous azimuth 2016-12-22 13:30:30 +01:00
Klaus Schmidinger
5c8d366975 Fixed building VDR with systemd >= 230 2016-12-22 13:20:16 +01:00
Klaus Schmidinger
26252c37cd Fixed regenerating the index of audio recordings 2016-12-22 13:14:10 +01:00
Klaus Schmidinger
b6080634cc Added cFont::Width(void) to get the default character width and allow stretched font drawing in high level OSDs 2016-12-22 12:53:09 +01:00
Klaus Schmidinger
f91468ff9b Implemented a frame parser for H.265 (HEVC) recordings 2016-12-22 12:22:11 +01:00
Klaus Schmidinger
22cb026e5e Fixed replaying recordings to their very end, if they don't end with an I-frame 2016-12-22 11:40:25 +01:00
Klaus Schmidinger
be4cdcf170 Improved handling frame numbers to have a smoother progress display during replay of recordings with B-frames 2016-12-22 11:33:12 +01:00
Klaus Schmidinger
fd85701a84 Fixed resuming replay at a given position, which was off by one frame 2016-12-22 09:41:48 +01:00
Klaus Schmidinger
1135a1f9d5 Made the cPlayer member functions FramesPerSecond, GetIndex and GetReplayMode 'const' 2016-12-22 09:26:40 +01:00
Klaus Schmidinger
d71544d797 Added a note to the description of cFont::Size(), regarding possible differences between it and cFont::Height() 2016-12-13 15:01:24 +01:00
Klaus Schmidinger
08066065e3 Fixed a crash when moving a recording to a folder on a different volume 2016-12-13 13:54:00 +01:00
Klaus Schmidinger
a9bd3ca0dc Fixed a crash when deleting a recording that is currently being replayed 2016-12-11 13:06:58 +01:00
Klaus Schmidinger
031bbcef40 Fixed setting the current item and counter values in the Recordings menu after deleting the last recording in a subfolder 2016-12-09 15:00:55 +01:00
Klaus Schmidinger
d6c26af696 Using SetCurrentChannel(int ChannelNumber) instead of the deprecated SetCurrentChannel(const cChannel *Channel) 2016-12-08 10:48:53 +01:00
Klaus Schmidinger
12308b3c29 Fixed a crash when trying to delete a channel that is being used by a timer 2016-12-08 10:43:58 +01:00
Klaus Schmidinger
85ae27e372 The cRwLock class now allows nested read locks within a write lock from the same thread 2016-12-08 10:18:32 +01:00
Klaus Schmidinger
ce6c90a450 The SVDRP command DELC now refuses to delete the very last channel in the list 2016-12-08 09:53:01 +01:00
Klaus Schmidinger
1172937e8a The function SetCurrentChannel(const cChannel *Channel) is now deprecated 2016-12-06 14:17:39 +01:00
Klaus Schmidinger
146f2cbd4d Fixed initializing device specific parameters in cDvbTransponderParameters 2016-11-07 14:33:01 +01:00
Klaus Schmidinger
8ea018404a Updated the Italian OSD texts 2015-09-16 14:12:01 +02:00
Klaus Schmidinger
5d249c1ae5 Fixed an overflow of PIDs in a receiver 2015-09-16 14:08:42 +02:00
Klaus Schmidinger
09e64c24f2 Fixed a crash when deleting a recording 2015-09-16 11:11:42 +02:00
Klaus Schmidinger
462e094783 Adjusted release date 2015-09-14 14:11:00 +02:00
Klaus Schmidinger
8a09e90f02 Fixed handling remote timers 2015-09-14 13:23:06 +02:00
Klaus Schmidinger
bfc3f1f4b2 Fixed moving currently recording timers between machines 2015-09-13 13:57:51 +02:00
Klaus Schmidinger
2b20b9e064 Added missing saving of SVDRPHostName 2015-09-13 11:09:44 +02:00
Klaus Schmidinger
3427e224e3 Adjusted release date 2015-09-13 10:39:52 +02:00
Klaus Schmidinger
cf1474fc19 Removed unnecessary 'false' 2015-09-13 10:39:02 +02:00
Klaus Schmidinger
e6068912a4 Made the aff array 'static const' 2015-09-12 14:56:15 +02:00
Klaus Schmidinger
e59b5bf1af Empty adaptation field TS packets are now skipped when recording 2015-09-11 11:18:40 +02:00
Klaus Schmidinger
6f315bc235 Updated the German OSD texts 2015-09-11 08:45:58 +02:00
Klaus Schmidinger
2491984da3 Centralized remote timer error messages 2015-09-11 08:38:11 +02:00
Klaus Schmidinger
f1bef11f45 Implemented the setup option "Recording/Record key handling" 2015-09-11 08:29:41 +02:00
Klaus Schmidinger
4e46d2bb3b The width and height of the OSD are now limited to the actual maximum dimensions of the output device 2015-09-10 14:18:38 +02:00
Klaus Schmidinger
a384d14f92 No longer delivering the dvbsddevice and rcu plugins with the source archive 2015-09-10 13:51:49 +02:00
Klaus Schmidinger
471c1cc044 Changed the description of the --chartab option in the INSTALL file 2015-09-10 13:36:50 +02:00
Klaus Schmidinger
1cdbdc548a Fixed sorting recordings 2015-09-10 13:29:30 +02:00
Klaus Schmidinger
0f18bd0a6a Fixed a possible stack overflow in cListBase::Sort() 2015-09-10 13:20:21 +02:00
Klaus Schmidinger
14f97d0f2a Skins can now implement cSkinDisplayMenu::MenuOrientation() to display horizontal menus 2015-09-10 11:26:15 +02:00
Klaus Schmidinger
75f28cb0cb The 'newplugin' script now creates the 'po' subdirectory for translations 2015-09-10 11:12:51 +02:00
Klaus Schmidinger
9e58503aee The EPG scanner no longer moves the dish if there is a positioner 2015-09-10 11:08:19 +02:00
Klaus Schmidinger
18f0ce26fd The character 0x0D is now stripped from EPG texts 2015-09-10 11:00:59 +02:00
Klaus Schmidinger
bc0de5dbc5 Implemented full handling of remote timers 2015-09-10 10:39:45 +02:00
Klaus Schmidinger
4e3325b7f7 Implemented setup options for SVDRP peering 2015-09-08 11:08:06 +02:00
Klaus Schmidinger
3284e941c6 The Timers menu now displays the name of the remote VDR in front of the timer's file name, if this is a remote timer 2015-09-06 09:32:00 +02:00
Klaus Schmidinger
aa40223ff2 Removed extra debug output 2015-09-06 09:25:16 +02:00
Klaus Schmidinger
04edd69b7a Timers now have unique ids 2015-09-06 09:14:53 +02:00
Klaus Schmidinger
50d268538e Added a missing 'const' to cReceiver::Receive(), to protect the given Data from being modified 2015-09-05 11:49:56 +02:00
Klaus Schmidinger
3cd5294d8a Implemented strict locking of global lists 2015-09-01 11:14:27 +02:00
Klaus Schmidinger
8a7bc6a0bb Added a missing 'const' 2015-07-17 10:15:35 +02:00
Klaus Schmidinger
894a392640 Fixed a typo 2015-06-01 20:32:09 +02:00
Klaus Schmidinger
c3b0347556 Implemented SVDRP peering 2015-05-22 13:44:43 +02:00
Klaus Schmidinger
2b9e988dd5 The SVDRP port now accepts multiple concurrent connections 2015-04-29 13:10:06 +02:00
Klaus Schmidinger
b6af7a9cf9 Added missing 'virtual' 2015-04-28 09:26:02 +02:00
Klaus Schmidinger
d14adc1e68 The -u option now also accepts a numerical user id 2015-04-19 12:50:26 +02:00
Klaus Schmidinger
5499d5ae84 The function cOsd::GetBitmap() is now 'protected' 2015-04-19 12:22:29 +02:00
Klaus Schmidinger
0a40ce6f9d Commented out the line #define DEPRECATED_VIDEOSYSTEM in device.h 2015-04-19 12:15:00 +02:00
Klaus Schmidinger
15927fd097 Fixed a compiler warning in font.c 2015-04-19 11:14:27 +02:00
Klaus Schmidinger
c17328da87 Fixed plural handling 2015-04-18 16:19:28 +02:00
Klaus Schmidinger
165aa63d2e The -V and -h options now list the plugins in alphabetical order 2015-04-18 14:55:16 +02:00
Klaus Schmidinger
fa701228d7 The command line option -D now accepts the value '-' (as in -D-), which prevents VDR from using any DVB devices 2015-04-18 14:30:47 +02:00
Klaus Schmidinger
7aef23e97f Implemented default sort mode for recordings 2015-04-18 13:43:29 +02:00
Klaus Schmidinger
e6592e6201 Added a demo case for storing images 2015-04-12 10:37:36 +02:00
Klaus Schmidinger
38ee88e5ee The script that gets called for recordings is now also called right before a recording is edited 2015-04-11 12:12:43 +02:00
Klaus Schmidinger
7d49075079 Reduced the priority of the "video directory scanner" thread and checking cIoThrottle::Engaged() when it is running 2015-04-11 10:47:38 +02:00
Klaus Schmidinger
577d43facf Fixed scaling subtitles (their areas could sometimes extend outside the actual OSD) 2015-03-25 12:39:01 +01:00
Klaus Schmidinger
909e6c6249 Fixed a crash in cOsd::SetAreas() in case CreatePixmap() returns NULL 2015-03-25 08:57:05 +01:00
Klaus Schmidinger
62596f991e Improved syncing on sections when parsing the NIT and SDT 2015-03-17 15:10:57 +01:00
Klaus Schmidinger
fd7ccc7627 Fixed setting the source value of newly created channels, in case the NIT is received from a different, but very close satellite position (cont'd) 2015-03-17 12:27:18 +01:00
Klaus Schmidinger
0bcf5d6da6 Added some comment to cPixmap about the relation between OSD, ViewPort and DrawPort 2015-03-13 15:09:45 +01:00
Klaus Schmidinger
57513db5c4 Added cOsd::MaxPixmapSize() (cont'd) 2015-03-13 15:06:48 +01:00
Klaus Schmidinger
70eb639c41 Fixed setting the source value of newly created channels, in case the NIT is received from a different, but very close satellite position 2015-03-13 12:12:33 +01:00
Klaus Schmidinger
52b1e2a9ff The dvbhddevice plugin is no longer part of the VDR source archive; added a section about Output Devices to the INSTALL file 2015-03-12 11:00:54 +01:00
Klaus Schmidinger
a4b657b040 Added a note about the VDR User Counter and VDR's facebook page to the README file 2015-03-12 10:25:35 +01:00
Klaus Schmidinger
371e60238a Added detection of 24fps 2015-03-11 09:57:21 +01:00
Klaus Schmidinger
cc306290da The Setup/CAM menu now displays which device an individual CAM is currently assigned to 2015-03-09 11:51:08 +01:00
Klaus Schmidinger
eb7816259c Fixed a vertical black line in the "TiledPixmaps" area on the rpihddevice OSD wit 1280x800 pixel 2015-03-08 16:43:40 +01:00
Klaus Schmidinger
735fb20ac6 Added cOsd::MaxPixmapSize() 2015-03-08 16:40:01 +01:00
Klaus Schmidinger
a429eefbe7 Official release of version 2.2.0 2015-02-19 09:17:46 +01:00
Klaus Schmidinger
f53815c6ee Updated the Spanish OSD texts 2015-02-19 09:10:36 +01:00
Klaus Schmidinger
f2fceac341 Updated the French OSD texts 2015-02-18 21:27:43 +01:00
Klaus Schmidinger
968c2ede0d Fixed multiple blanks in the translation files 2015-02-18 11:03:37 +01:00
Klaus Schmidinger
a90a977d68 Removed tags from msgstr 2015-02-18 10:09:50 +01:00
Klaus Schmidinger
7ab61f6732 Updated sources.conf to reflect the fact that Thor 5/6 and Intelsat 10-02 are actually in two separate positions 2015-02-18 09:37:38 +01:00
Klaus Schmidinger
7aae78e8a7 Updated the Slovak OSD texts 2015-02-18 08:55:11 +01:00
Klaus Schmidinger
77a1ff8b00 Fixed leading/trailing blanks in the translation files; bumped all version numbers to 2.2.0 2015-02-17 15:11:36 +01:00
Klaus Schmidinger
9e6ca94a72 Updated the Czech OSD texts 2015-02-17 08:53:26 +01:00
Klaus Schmidinger
5aa16b7489 Improved the German translations of "EPG bugfix level"", "StreamId" and "T2SystemId" 2015-02-16 12:18:43 +01:00
Klaus Schmidinger
d48355c305 Fixed using the default sort mode in a video directory without a ".sort" file 2015-02-16 07:54:21 +01:00
Klaus Schmidinger
519ecddc52 Modified credit to Albert Danis 2015-02-15 10:42:11 +01:00
Klaus Schmidinger
c73e635936 Removed credit to Mario Fenneis (requested by Albert Danis) 2015-02-15 10:31:36 +01:00
Klaus Schmidinger
1ed2b21aaa Updated the Estonian OSD texts 2015-02-14 17:37:36 +01:00
Klaus Schmidinger
1786dc714d Added credit for Albert Danis 2015-02-14 12:02:16 +01:00
Klaus Schmidinger
cc1494bfb6 Updated the Ukrainian OSD texts 2015-02-13 17:41:51 +01:00
Klaus Schmidinger
7b1f643977 Updated the Polish OSD texts 2015-02-13 15:35:18 +01:00
Klaus Schmidinger
01b1137284 Fixed pausing replay at the last editing mark 2015-02-13 15:17:45 +01:00
Klaus Schmidinger
d99d408fd8 Modified the German translations of the OSD texts regarding "adaptive skipping" 2015-02-13 11:59:25 +01:00
Klaus Schmidinger
e1d05f0a0f Added credit for Albert Danis 2015-02-13 11:03:02 +01:00
Klaus Schmidinger
c36d3f5145 Updated the Hungarian OSD texts 2015-02-13 10:39:08 +01:00
Klaus Schmidinger
ac953f5327 Updated the Swedish OSD texts 2015-02-13 10:24:22 +01:00
Klaus Schmidinger
a2b5d4e02b Updated the Finnish OSD texts 2015-02-13 10:19:24 +01:00
Klaus Schmidinger
83b139e7ba Updated the Italian OSD texts 2015-02-13 10:17:36 +01:00
Klaus Schmidinger
62494e735f Updated the Estonian OSD texts 2015-02-13 10:14:28 +01:00
Klaus Schmidinger
7b3c905a46 Updated the Romanian OSD texts 2015-02-13 09:59:11 +01:00
Klaus Schmidinger
ddc4a26457 Updated the Macedonian OSD texts 2015-02-11 22:38:42 +01:00
Klaus Schmidinger
2457dce862 Updated the Lithuanian OSD texts 2015-02-11 12:19:56 +01:00
Klaus Schmidinger
0c19df09d9 Fixed the German translation of "Zap timeout" 2015-02-11 10:19:21 +01:00
Klaus Schmidinger
c298cd5714 Updated the French OSD texts 2015-02-11 10:08:09 +01:00
Klaus Schmidinger
60d5d9762b Updated the Dutch OSD texts 2015-02-11 09:54:07 +01:00
Klaus Schmidinger
22106f6dd3 cOsd::RenderPixmaps() now returns a pointer to cPixmap instead of cPixmapMemory; a cPixmap with a negative layer no longer marks any portion of the OSD's view port as "dirty"; Added a missing initialization of "panning" to the constructor of cPixmapMemory 2015-02-11 09:48:02 +01:00
Klaus Schmidinger
89f5244007 Added command line option --chartab to replace VDR_CHARSET_OVERRIDE 2015-02-10 14:29:27 +01:00
Klaus Schmidinger
d34abd6665 Made the function of the Prev/Next keys during replay configurable 2015-02-10 12:51:07 +01:00
Klaus Schmidinger
fb37e93b04 Made skipping with Green/Yellow keys configurable 2015-02-10 12:18:39 +01:00
Klaus Schmidinger
888c33c890 Updated the Lithuanian OSD texts 2015-02-10 09:46:05 +01:00
Klaus Schmidinger
434bc96c74 Updated the Italian OSD texts 2015-02-10 09:27:59 +01:00
Klaus Schmidinger
9c100c8d0a Added an empty target to the Makefile to make sure the sub-make for libsi is always called 2015-02-09 12:30:42 +01:00
Klaus Schmidinger
2eb23cb9f4 Increased the width of the left text column in the Setup menus to avoid cutting off German texts 2015-02-09 12:04:40 +01:00
Klaus Schmidinger
9c9c1d9e19 Added missing text that was overwritten by translation 2015-02-09 10:46:06 +01:00
Klaus Schmidinger
42bdf852da Updated the Estonian OSD texts 2015-02-09 10:44:57 +01:00
Klaus Schmidinger
b547141f7a Added credit for Clemens Brauers 2015-02-09 10:09:53 +01:00
Klaus Schmidinger
0633053d5d Added "#REMOTE=LIRC" to Make.config.template 2015-02-09 10:00:57 +01:00
Klaus Schmidinger
3a71b2e887 Updated the Ukrainian OSD texts 2015-02-09 09:45:23 +01:00
Klaus Schmidinger
cdb5e90515 Updated the Romanian OSD texts 2015-02-09 09:22:31 +01:00
Klaus Schmidinger
b5128a6e1c Updated the Macedonian OSD texts 2015-02-09 09:20:38 +01:00
Klaus Schmidinger
ac7fa82b2f Updated the Finnish OSD texts 2015-02-09 09:17:31 +01:00
Klaus Schmidinger
a7fa43fd39 Added the UPDATE-2.2.0 file 2015-02-08 11:39:17 +01:00
Klaus Schmidinger
890e57cfab Updated the Hungarian OSD texts 2015-02-08 11:00:00 +01:00
Klaus Schmidinger
f656e7f6a9 Added a missing trailing blank in some translations 2015-02-08 10:19:50 +01:00
Klaus Schmidinger
3104f123ca Added credit for Stefan Herdler 2015-02-08 10:08:47 +01:00
Klaus Schmidinger
f041cf97a2 Updated the Romanian OSD texts 2015-02-07 18:51:28 +01:00
Klaus Schmidinger
8225d3758f Modified EntriesOnSameFileSystem(), so that it returns 'true' if either of the given; changed handling the 'error' variable in cDirCopier 2015-02-07 16:08:13 +01:00
Klaus Schmidinger
202a6b3072 Added a confirmation before renaming a recording to its folder name 2015-02-07 16:01:13 +01:00
Klaus Schmidinger
5b88d0bfac Fixed setting an empty recording name or folder to a blank in the "Edit recording" menu 2015-02-07 15:53:30 +01:00
Klaus Schmidinger
8b57eacd1b Updated the Finnish OSD texts 2015-02-07 14:32:47 +01:00
Klaus Schmidinger
18e7903b78 Fixed a deadlock in accessing marks 2015-02-07 14:29:14 +01:00
Klaus Schmidinger
5d8302b147 Changed "binary" to "adaptive" 2015-02-07 12:18:20 +01:00
Klaus Schmidinger
2e8f4b8d21 Fixed a typo 2015-02-07 11:09:22 +01:00
Klaus Schmidinger
9c13f76b66 Updated the Romanian OSD texts 2015-02-07 10:15:50 +01:00
Klaus Schmidinger
f3e6d39382 cDvbPlayer and cReplayControl now use the same list of editing marks 2015-02-06 15:42:21 +01:00
Klaus Schmidinger
4ffd2d6ccd Modified translations for adaptive skip mode 2015-02-06 11:00:06 +01:00
Klaus Schmidinger
1b2a62623c Changed the naming of "binary skip mode" to "adaptive skip mode" 2015-02-06 10:25:25 +01:00
Klaus Schmidinger
ad45f801d5 Fixed cMarks::GetNextBegin() and cMarks::GetNextEnd() 2015-02-05 14:24:35 +01:00
Klaus Schmidinger
f60d90aeb6 Updated sources.conf to reflect the fact that Astra 4A and SES5 are actually in two separate positions 2015-02-05 11:03:36 +01:00
Klaus Schmidinger
8a519202a8 Changed the German translations if the texts related to "binary skipping" 2015-02-05 10:54:04 +01:00
Klaus Schmidinger
9c9e200df5 Modified runvdr.template to improve compatibility with the "bash" and "dash" shells 2015-02-05 10:43:42 +01:00
Klaus Schmidinger
b3b0747328 Updated the Hungarian OSD texts 2015-02-05 09:58:35 +01:00
Klaus Schmidinger
8f9ff2cfe0 Fixed the German translations of "latitude" and "longitude" (they were swapped) 2015-02-05 09:36:58 +01:00
Klaus Schmidinger
ea94337f96 Updated the Italian OSD texts (cont'd) 2015-02-05 09:19:50 +01:00
Klaus Schmidinger
3e06c99a0a The "Select folder" menu now adds the folder names of all existing recordings to any names that have been predefined in "folders.conf" 2015-02-04 13:20:37 +01:00
Klaus Schmidinger
f2807bc782 Updated the Italian OSD texts 2015-02-04 10:46:10 +01:00
Klaus Schmidinger
6464eff516 In the "Edit recording" menu the '0' key can now be used on the "Name:" field to remove the name of the recording and replace it with the last element of the recording's folder path name 2015-02-04 09:38:55 +01:00
Klaus Schmidinger
e1acb774c6 Added "NORDIG" to the list of "DVB/Standard compliance" options and using it to restrict the LCN (Logical Channel Numbers) parsing to networks that actually use this non-standard feature 2015-02-04 09:18:30 +01:00
Klaus Schmidinger
de6d37134c Fixed setting the Blue button in the Schedule/Now/Next menus, so that it only shows "Switch" if the selected event is on a different channel 2015-02-03 11:56:51 +01:00
Klaus Schmidinger
93ec1a9df2 Fixed switching channels in the Schedule menu after going through various Now and Schedule menus for different channels 2015-02-03 10:52:33 +01:00
Klaus Schmidinger
0703fbf527 Updated the Hungarian OSD texts 2015-02-03 09:51:45 +01:00
Klaus Schmidinger
0e5de67d5f Updated the Romanian OSD texts 2015-02-03 09:38:17 +01:00
Klaus Schmidinger
d993d51367 Updated the Ukrainian OSD texts 2015-02-03 09:31:36 +01:00
Klaus Schmidinger
3909ce39ef Updated the Estonian OSD texts 2015-02-03 09:17:40 +01:00
Klaus Schmidinger
e8cd0ed7c5 Updated the Finnish OSD texts 2015-02-03 08:51:59 +01:00
Klaus Schmidinger
85969bc0bd Added a missing VDRDIR="$(CWD)" to the clean-plugins target of the Makefile 2015-02-02 14:50:46 +01:00
Klaus Schmidinger
659f67f04f Fixed cCamSlot::Assign(), so that it actually ignores the value of Query if Device is NULL (as described in the header file) 2015-02-02 14:04:10 +01:00
Klaus Schmidinger
e2d0f3f845 Added "Setup/Replay/Binary skip strict" 2015-02-02 13:59:19 +01:00
Klaus Schmidinger
ed766859d7 Added code from the "jumpplay" patch that makes the recording still be considered unviewed when stopping replay within RESUMEBACKUP seconds of the first mark 2015-02-02 09:51:32 +01:00
Klaus Schmidinger
5503161fdc Added SDNOTIFY, NO_KBD and BIDI to Make.config.template 2015-02-02 09:13:10 +01:00
Klaus Schmidinger
e83b09b4eb Adjusted release date 2015-02-02 08:56:39 +01:00
Klaus Schmidinger
2e34a10e93 Updated the Lithuanian OSD texts 2015-02-02 08:53:35 +01:00
Klaus Schmidinger
aa838791bf Fixed the Finnish translation of "Binary skip timeout (s)" 2015-02-01 16:21:39 +01:00
Klaus Schmidinger
4a6f714153 Fixed the German translation of "VDR will shut down later - press Power to force" 2015-02-01 15:20:04 +01:00
Klaus Schmidinger
f736d3a3de Fixed the German translation of "Binary skip timeout (s)" 2015-02-01 15:03:34 +01:00
Klaus Schmidinger
471b287f70 Fixed a memory leak in case of broken Extended Event Descriptors 2015-02-01 14:59:52 +01:00
Klaus Schmidinger
1c4865147a Added support for LCN (Logical Channel Numbers) 2015-02-01 13:49:10 +01:00
Klaus Schmidinger
b3bc711ed2 Removed a superfluous entry 2015-02-01 12:51:23 +01:00
Klaus Schmidinger
ef09e376b1 Updated the Finnish OSD texts 2015-02-01 11:34:57 +01:00
Klaus Schmidinger
0a5eb88696 Fixed setting the read index in cDvbPlayer::Goto() in case Still is false; The function cDvbPlayer::Goto() now automatically calls Play() if Still is false 2015-02-01 11:20:54 +01:00
Klaus Schmidinger
63372cd4aa Now also checking the CAM slot's priority when activating a CAM 2015-01-31 14:50:55 +01:00
Klaus Schmidinger
b9f0e39b1b Fixed a typo 2015-01-31 14:36:41 +01:00
Klaus Schmidinger
ebab5f3ec1 Made cRecording::GetResume() public 2015-01-31 13:37:02 +01:00
Klaus Schmidinger
6749e4ead9 Modified behavior of the '8' key during replay 2015-01-31 11:42:05 +01:00
Klaus Schmidinger
58c4fd5a0b Added ARGSDIR to the ONEDIR section of Make.config.template 2015-01-30 15:20:57 +01:00
Klaus Schmidinger
fccebc816d Updated the Estonian OSD texts 2015-01-30 13:41:03 +01:00
Klaus Schmidinger
bf7cc2c04f Added support for smart card activation 2015-01-30 13:38:44 +01:00
Klaus Schmidinger
7f195606ee Changed unit and range for binary skip timeout 2015-01-29 09:05:50 +01:00
Klaus Schmidinger
91e0151674 The keys '1' and '3' can now be used in replay mode to position an editing mark in "binary" mode 2015-01-27 21:22:53 +01:00
Klaus Schmidinger
4aa496b079 Added support for "Satellite Channel Routing" (SCR) according to EN50607, also known as "JESS" 2015-01-26 12:02:14 +01:00
Klaus Schmidinger
4fcd3ba56e Added functionality based on the "jumpplay" patch 2015-01-26 10:20:51 +01:00
Klaus Schmidinger
77c0de71c4 Updated the Romanian OSD texts 2015-01-24 11:01:43 +01:00
Klaus Schmidinger
7c40f797dc Added a missing 'void' 2015-01-23 15:12:47 +01:00
Klaus Schmidinger
189f694710 Updated the Finnish OSD texts 2015-01-23 10:27:01 +01:00
Klaus Schmidinger
b02c8b606c Fixed the link to "svdrpsend (1)" in the vdr.1 man page 2015-01-20 15:35:44 +01:00
Klaus Schmidinger
24c9e45789 Fixed "warning: invalid suffix on literal" with GCC 4.8 and C++11 2015-01-20 14:56:18 +01:00
Klaus Schmidinger
53db7fdc50 Added entries for version 2.0.7 2015-01-20 09:33:07 +01:00
Klaus Schmidinger
70aa4e4247 Updated the Italian OSD texts 2015-01-20 09:06:54 +01:00
Klaus Schmidinger
b26898e6e1 Adjusted release date 2015-01-18 10:14:48 +01:00
Klaus Schmidinger
0c2316b638 Added the new command line option --updindex 2015-01-17 15:03:01 +01:00
Klaus Schmidinger
f42cbac237 Fixed generating the index file of an existing recording 2015-01-17 13:47:33 +01:00
Klaus Schmidinger
b06d9cce37 Enhanced description of "Volume linearize" 2015-01-17 11:37:10 +01:00
Klaus Schmidinger
be92ad13ab Now returning from removing deleted recordings after at most 10 seconds, or if the user presses a remote control key 2015-01-17 10:52:15 +01:00
Klaus Schmidinger
3bb447cf8d Added a comment to cRecorder::Activate() about the need to call Detach() in the destructor 2015-01-15 14:29:18 +01:00
Klaus Schmidinger
66c65beea7 Added cOsdProvider::OsdSizeChanged() 2015-01-15 11:33:58 +01:00
Klaus Schmidinger
be9a6de0ef Plugins can now implement the function SetMenuSortMode() in their skin objects derived from cSkinDisplayMenu, to get informed about the currently used sort mode 2015-01-15 10:51:37 +01:00
Klaus Schmidinger
b3954aefd5 Modified the CAM API so that it is possible to implement CAMs that can be freely assigned to any devices 2015-01-15 09:28:37 +01:00
Klaus Schmidinger
555fe68a01 Added the channel name to log messages that reference a channel 2015-01-14 12:17:39 +01:00
Klaus Schmidinger
1ddda558b0 Modified the descriptions of several threads 2015-01-14 11:39:55 +01:00
Klaus Schmidinger
db47cdaa1a Use of the function cOsd::GetBitmap() outside of derived classes is now deprecated 2015-01-14 10:50:55 +01:00
Klaus Schmidinger
7062583ab4 Added support for PGS subtitles 2015-01-14 10:39:55 +01:00
Klaus Schmidinger
b454a0777f Added handling for DTS audio tracks to cPatPmtParser::ParsePmt() 2015-01-14 09:36:00 +01:00
Klaus Schmidinger
6ba9de491c Added boolean return values to cVector's InsertUnique(), AppendUnique() and RemoveElement() 2015-01-14 09:09:06 +01:00
Klaus Schmidinger
24b38eb812 Now handling CAT sections that consist of more than one TS packet 2015-01-13 14:45:12 +01:00
Klaus Schmidinger
14e37ed124 Changed the German weekday names from "MonDieMitDonFreSamSon" to "Mo.Di.Mi.Do.Fr.Sa.So." 2015-01-13 10:01:50 +01:00
Klaus Schmidinger
cee82d8659 Fixed jumping to an absolute position via the Red key in case replay was paused 2015-01-13 09:51:20 +01:00
Klaus Schmidinger
f5bbf06b60 Added the new parameters "Setup/Miscellaneous/Volume steps" and ".../Volume linearize" 2015-01-12 14:56:42 +01:00
Klaus Schmidinger
6b229d7d5f Added functions to set and retrieve the priority of a cReceiver 2015-01-12 14:12:19 +01:00
Klaus Schmidinger
67fff7f4fc Fixed a possible out-of-bounds access in cVector::Remove() 2015-01-12 12:14:16 +01:00
Klaus Schmidinger
6e35f47a3e Added the functions IndexOf(), InsertUnique(), AppendUnique() and RemoveElement() to the cVector class 2015-01-12 12:10:15 +01:00
Klaus Schmidinger
6514649439 Added subsystem id support for DVB devices connected via USB 2015-01-12 11:42:15 +01:00
Klaus Schmidinger
77340e9273 Added a missing backslash to the help text of the SVDRP command MOVR 2015-01-12 11:19:11 +01:00
Klaus Schmidinger
35f73199d4 Fixed resetting the receiver for EMM pids for CAMs that need to receive the TS (cont'd) 2015-01-12 10:44:58 +01:00
Klaus Schmidinger
34c79fdc50 Fixed support for systemd 2015-01-11 13:42:26 +01:00
Klaus Schmidinger
c8e789e12a Revoked "Increased the PMT_SCAN_TIMEOUT to avoid timeouts when scanning PMTs" (was unnecessary); pat.c change removed from RCS 2015-01-11 13:32:55 +01:00
Klaus Schmidinger
77173b7057 Fixed (well, actually worked around) a problem with subtitles not being displayed because the broadcaster doesn't set the data's version numbers as required by the DVB standard 2015-01-09 12:03:31 +01:00
Klaus Schmidinger
7fac1d4ae2 Fixed resetting the receiver for EMM pids for CAMs that need to receive the TS 2015-01-09 09:46:57 +01:00
Klaus Schmidinger
52620f147b Fixed detaching receivers from devices in case a CAM needs to receive the TS 2015-01-07 13:00:33 +01:00
Klaus Schmidinger
f3d583b124 Increased the PMT_SCAN_TIMEOUT to avoid timeouts when scanning PMTs 2015-01-06 14:02:40 +01:00
Klaus Schmidinger
fc0094231d Added cOsd::DrawScaledBitmap() 2015-01-04 15:53:47 +01:00
Klaus Schmidinger
aacdeba5d9 Fixed multiple OBSOLETE marks in channels that are not listed in the SDT in case "Setup/Miscellaneous/Show channel names with source" is set to "yes" 2015-01-04 15:11:13 +01:00
Klaus Schmidinger
761fb103b7 Channels that are not listed in the SDT are now only marked as OBSOLETE if"Setup/DVB/Update channels" is set to a value other than "no" or "PIDs only" 2015-01-04 14:37:36 +01:00
Klaus Schmidinger
afc17c1168 The pid of the PMT in which the CA descriptors of a given channel are broadcast is now stored together with the CA descriptors 2015-01-04 13:36:46 +01:00
Klaus Schmidinger
bfdd611fde Fixed a bug in the Makefile when installing plugins with LCLBLD=1 2015-01-01 13:55:13 +01:00
Klaus Schmidinger
ffeb43a38a Updated the dvbhddevice plugin source 2014-10-03 13:36:58 +02:00
Klaus Schmidinger
93f4852ba3 Fixed a possible crash in the LCARS skin 2014-06-12 08:55:32 +02:00
Klaus Schmidinger
4e460da371 VDR now reads command line options from *.conf files in /etc/vdr/conf.d 2014-04-14 13:15:34 +02:00
Klaus Schmidinger
6feb8d8875 Added entries for version 2.0.6 2014-04-13 14:04:47 +02:00
Klaus Schmidinger
57222002b2 Fixed a possible division by zero in frame rate detection 2014-04-13 13:50:04 +02:00
Klaus Schmidinger
4fc8101910 Whitespace fix 2014-04-13 11:49:40 +02:00
Klaus Schmidinger
011a984951 A cCamSlot that has WantsTsData set to true in its constructor now also gets the CAT and EMM PIDs data 2014-04-06 10:56:50 +02:00
Klaus Schmidinger
105ad61b6f Updated the Italian OSD texts 2014-03-24 13:28:05 +01:00
Klaus Schmidinger
23ea3dcb48 No longer logging an error message in DirSizeMB() if the given directory doesn't exist 2014-03-22 14:25:46 +01:00
Klaus Schmidinger
a4b8729e6a Added support for systemd 2014-03-16 12:53:47 +01:00
Klaus Schmidinger
687b93b215 Now resetting the isOnVideoDirectoryFileSystem member of a cRecording to -1 after renaming it 2014-03-16 11:11:04 +01:00
Klaus Schmidinger
8af9abbbb9 Now initializing the isOnVideoDirectoryFileSystem member of cRecording when scanning the video directory 2014-03-16 11:01:46 +01:00
Klaus Schmidinger
25e2dbf031 Added support for "Pilot", "T2-System-Id" and "SISO/MISO" parameters 2014-03-16 10:48:30 +01:00
Klaus Schmidinger
af56e53315 Refactored setup parameter handling for output devices 2014-03-15 14:05:15 +01:00
Klaus Schmidinger
7a114d640c Added a log message in case a receiver is detached from its device because the assigned CAM can't decrypt the channel 2014-03-11 09:48:40 +01:00
Klaus Schmidinger
c5071cc87b The SDT is now only parsed *after* the NIT has been read 2014-03-10 14:50:58 +01:00
Klaus Schmidinger
0990c279c7 Fixed indentation 2014-03-10 13:31:23 +01:00
Klaus Schmidinger
76c32d60f9 When checking for obsolete channels, those with an RID that is not 0 are now ignored 2014-03-10 13:17:11 +01:00
Klaus Schmidinger
ebdac2ddfc Fixed drawing the live indicator in the LCARS skin in case there are no devices 2014-03-10 12:09:52 +01:00
Klaus Schmidinger
caf708b618 Updated the Finnish OSD texts 2014-03-10 10:48:15 +01:00
Klaus Schmidinger
40aaf784b9 The Recordings menu now remembers the last recording the cursor was positioned on 2014-03-09 15:15:48 +01:00
Klaus Schmidinger
db1ca2c854 Removed an unnecessary assignment from cMenuRecordings::~cMenuRecordings() 2014-03-09 13:03:35 +01:00
Klaus Schmidinger
a9f1297022 Fixed adding new source types in case they are already registered 2014-03-09 12:11:32 +01:00
Klaus Schmidinger
f8058586f9 Fixed handling PAT packets when detecting frames 2014-03-08 15:05:35 +01:00
Klaus Schmidinger
ad1352f109 Fixed a possible endless loop in cH264Parser::GetGolombUe() 2014-03-08 15:04:09 +01:00
Klaus Schmidinger
df03740741 Changed email address of Christopher Reimer 2014-03-05 10:18:18 +01:00
Klaus Schmidinger
a437a3d743 Fixed handling transfer mode on full featured DVB cards for encrypted channels that have no audio pid 2014-02-27 17:05:55 +01:00
Klaus Schmidinger
927aa49576 Fixed keeping the current position in the Recordings menu if a recording was deleted in a sub folder 2014-02-26 11:39:06 +01:00
Klaus Schmidinger
de1ce0b27d Revoked "Fixed some compiler warnings with Clang 3.4.1" from ci.c, because this did not compile with older versions of gcc 2014-02-25 10:04:07 +01:00
Klaus Schmidinger
a9e1ca63dd Adjusted release date 2014-02-23 13:05:38 +01:00
Klaus Schmidinger
4cd251fc48 Fixed handling frame detection buffer length 2014-02-21 15:14:14 +01:00
Klaus Schmidinger
6d59e2866b Fixed detecting broken video data streams when recording 2014-02-21 09:20:36 +01:00
Klaus Schmidinger
da13903228 No section number in debug message 2014-02-19 08:57:43 +01:00
Klaus Schmidinger
585f622886 Fixed the replay progress display for very long recordings 2014-02-18 13:48:05 +01:00
Klaus Schmidinger
0de69c3899 Improved PAT/PMT scanning to speed up initial tuning to encrypted channels on transponders with many PAT entries 2014-02-18 13:12:39 +01:00
Klaus Schmidinger
0238234c52 Fixed learning keyboard remote control codes 2014-02-15 12:43:25 +01:00
Klaus Schmidinger
8b2f500d2a Replaced the NULL pointer assignment in ~cReceiver() to force a segfault with a call to abort() 2014-02-08 16:00:13 +01:00
Klaus Schmidinger
a30563634d Added LinkageTypePremiere to libsi/si.h and eit.c to avoid a compiler warning with Clang 3.4.1 2014-02-08 14:21:47 +01:00
Klaus Schmidinger
e5fde77e56 Fixed some compiler warnings with Clang 3.4.1 2014-02-08 13:00:39 +01:00
Klaus Schmidinger
bfb9c8fddd Fixed numbering frames (cont'd) 2014-02-08 11:16:02 +01:00
Klaus Schmidinger
0402ce9b8e Fixed a possible crash in the OSD demo 2014-02-06 11:57:51 +01:00
Klaus Schmidinger
e2f0edd8f6 Fixed numbering frames 2014-02-06 10:57:45 +01:00
Klaus Schmidinger
4f1404e991 Fixed flickering if subtitles are active while the OSD demo is running 2014-02-04 10:45:55 +01:00
Klaus Schmidinger
9813a9164b Further clarified the semantics of cCamSlot::Decrypt() 2014-01-31 09:21:47 +01:00
Klaus Schmidinger
b9ba7000bb Updated the Estonian OSD texts 2014-01-31 09:10:07 +01:00
Klaus Schmidinger
4c304467ba Fixed clearing non-editable members in the channel editor 2014-01-30 09:10:39 +01:00
Klaus Schmidinger
6a9502ab17 Fixed sorting recordings by time in the Recordings menu if "Setup/OSD/Recording directories" is set to "no" 2014-01-29 10:45:28 +01:00
Klaus Schmidinger
9eda923269 Increased MIN_TS_PACKETS_FOR_FRAME_DETECTOR to 100 and introduced counting the number of actual video TS packets in cTsPayload 2014-01-28 11:26:02 +01:00
Klaus Schmidinger
47a6f8fbff Now checking whether the primary device actually has a decoder before retuning the current channel after a change in its parameters 2014-01-26 12:40:57 +01:00
Klaus Schmidinger
c2826000bb Now checking whether the primary device atcually has a decoder before retuning the current channel after a change in its parameters 2014-01-26 12:27:51 +01:00
Klaus Schmidinger
7cea5df074 Adjusted release date 2014-01-26 10:40:23 +01:00
Klaus Schmidinger
8b9e1f513f Fixed a superfluous call to the skin's SetRecording() function after renaming a recording 2014-01-25 12:44:32 +01:00
Klaus Schmidinger
fdbf796b6b The new function cStatus::ChannelChange() can be implemented by plugins to be informed about changes to the parameters of a channel that may require a retune 2014-01-25 10:54:51 +01:00
Klaus Schmidinger
5ac41bf091 Revoked "Fixed sending CA descriptors to CAMs in case a cReceiver is not used for a recording or live view" - was unstable 2014-01-24 11:55:40 +01:00
Klaus Schmidinger
e158021a4d Replaced "Schnitt" with "Bearbeitung" in the German OSD texts 2014-01-22 10:40:50 +01:00
Klaus Schmidinger
549c499501 Fixed a wrong alignment in cCiDateTime::SendDateTime() 2014-01-22 09:41:08 +01:00
Klaus Schmidinger
838566ea41 Fixed a deadlock 2014-01-21 11:12:01 +01:00
Klaus Schmidinger
6e2f0f695f Now making sure the primary device goes into transfer mode for live viewing if the CAM wants to receive the TS data 2014-01-20 12:14:30 +01:00
Klaus Schmidinger
6f9929b1c0 Now unassigning CAMs from their devices when they are no longer used 2014-01-18 14:30:58 +01:00
Klaus Schmidinger
35d4ceaf37 Fixed deleting the source recording after moving it to a different volume (cont'd) 2014-01-18 12:54:56 +01:00
Klaus Schmidinger
2e41129c36 Fixed detecting frame borders in MPEG-2 streams that have "bottom fields" or varying GOP structures 2014-01-18 11:27:30 +01:00
Klaus Schmidinger
1df6a87249 Now waiting explicitly until all CAM slots are ready before switching to the initial channel when VDR is started 2014-01-16 11:57:54 +01:00
Klaus Schmidinger
e02d608bce Fixed deleting the source recording after moving it to a different volume 2014-01-16 11:09:03 +01:00
Klaus Schmidinger
7008aeaf22 Increased MIN_TS_PACKETS_FOR_FRAME_DETECTOR to 10 2014-01-16 10:31:28 +01:00
Klaus Schmidinger
ac44e6f2ae Added logging the supported system ids of a CAM 2014-01-15 10:21:48 +01:00
Klaus Schmidinger
1d869c4b36 Fixed sending CA descriptors to CAMs in case a cReceiver is not used for a recording or live view, like e.g. streaming clients 2014-01-14 14:39:59 +01:00
Klaus Schmidinger
e7c86c6760 Improved locking for CAM slots and made the pure functions of cCiAdapter have default implementations 2014-01-14 12:21:17 +01:00
Klaus Schmidinger
dbf342df3c cFont::CreateFont() now returns a dummy font in case there are no fonts installed 2014-01-07 12:42:37 +01:00
Klaus Schmidinger
3cf87dfe8a Added entries for version 2.0.5 2014-01-07 10:34:24 +01:00
Klaus Schmidinger
ea5e373df6 Updated 'sources.conf' 2014-01-07 09:03:29 +01:00
Klaus Schmidinger
c7256c1c11 Channels that are no longer contained in the current SDT of a transponder are now marked with the keyword OBSOLETE in their name and provider fields 2014-01-05 10:41:46 +01:00
Klaus Schmidinger
7cbced0c12 Made GetCaDescriptors() and GetCaPids() return all values if CaSystemIds is 0xFFFF 2014-01-04 11:17:24 +01:00
Klaus Schmidinger
a84defe86f Added support for buffered CAM decryption 2014-01-02 10:47:08 +01:00
Klaus Schmidinger
9dbd953cc2 Eliminated MAXDVBDEVICES 2014-01-01 14:26:26 +01:00
Klaus Schmidinger
ea613e6b26 Avoiding unnecessary pkg-config warnings in plugin Makefiles 2014-01-01 13:35:13 +01:00
Klaus Schmidinger
16dd077fb2 Changed email address for Christian Kaiser 2014-01-01 13:10:30 +01:00
Klaus Schmidinger
4da70bbab1 The script given to VDR with the '-r' option is now also called after the recording process has actually started 2014-01-01 12:53:40 +01:00
Klaus Schmidinger
566c6fa464 Added receiving Ca pids to cCamSlot 2014-01-01 12:37:22 +01:00
Klaus Schmidinger
b95b85fee4 Deleted a superfluous assignment in cPipe::Open() 2013-12-29 17:22:10 +01:00
Klaus Schmidinger
63ee17701a Added a check to avoid a possible NULL pointer dereference in cCiSession::SendData() 2013-12-29 17:20:22 +01:00
Klaus Schmidinger
00e2415b81 Implemented cCamSlot::Decrypt() 2013-12-28 13:29:54 +01:00
Klaus Schmidinger
6a8a2cf5fb Changed '%a' to the POSIX compliant '%m' in all scanf() calls 2013-12-28 11:37:42 +01:00
Klaus Schmidinger
c949ad35cc Fixed some spellings in positioner.h and Doxyfile 2013-12-28 11:21:09 +01:00
Klaus Schmidinger
ae4ffacbda Avoiding double entries when externally renaming a recording (cont'd) 2013-12-27 11:06:01 +01:00
Klaus Schmidinger
1379b621f7 Now handing down the recording filter to sub menus 2013-12-27 09:00:24 +01:00
Klaus Schmidinger
089b5eb212 Avoiding double entries when externally renaming a recording 2013-12-27 08:46:17 +01:00
Klaus Schmidinger
7c877edd2d Added a note to ePlayMode in device.h that VDR itself always uses pmAudioVideo when replaying a recording 2013-12-25 13:55:39 +01:00
Klaus Schmidinger
4e22b62192 cDevice::TrickSpeed() now has an additional parameter named Forward 2013-12-25 13:36:51 +01:00
Klaus Schmidinger
21c8829783 Made it clear that the Data parameter in cDevice::StillPicture() may point to a series of packets, not just a single one 2013-12-25 13:12:07 +01:00
Klaus Schmidinger
20791e4d95 Added handling UTF-8 'umlaut' characters to cKbdRemote 2013-12-25 12:47:04 +01:00
Klaus Schmidinger
f6283b8e91 The Recordings menu can now be called with a cRecordingFilter 2013-12-25 12:13:00 +01:00
Klaus Schmidinger
b936cb366f Fixed setting the name of the video directory to avoid a crash when using --genindex, and also to use the correct directory with --edit 2013-12-25 11:36:44 +01:00
Klaus Schmidinger
31e334a332 Added a missing closing ')' in the help and man page entry of the --vfat option 2013-12-25 11:04:25 +01:00
Klaus Schmidinger
7a2d3d993c Fixed a possible crash if the recordings list is updated externally while the Recordings menu is open 2013-12-24 14:41:09 +01:00
Klaus Schmidinger
a9acab6b7e Fixed uninitialized item area coordinates in cSkinLCARSDisplayMenu 2013-11-16 13:26:55 +01:00
Klaus Schmidinger
a8cbe3a56d Simplified some conditional expressions in skinlcars.c and skinsttng.c 2013-11-15 15:35:21 +01:00
Klaus Schmidinger
dfb9862460 Fixed a missing initialization in the c'tor of cSkinLCARSDisplayChannel 2013-11-15 15:23:43 +01:00
Klaus Schmidinger
215fde71a3 Updated the Italian OSD texts 2013-11-11 10:35:09 +01:00
Klaus Schmidinger
4bee872c09 Fixed a typo 2013-11-04 12:48:31 +01:00
Klaus Schmidinger
e8f557ae5f Removed '_' from the FileNameChars and CharMap translations in uk_UA.po 2013-11-04 11:24:53 +01:00
Klaus Schmidinger
d7462ae5ad Changes in the teletext PID no longer cause retuning 2013-11-04 10:11:51 +01:00
Klaus Schmidinger
a48a0543c8 Fixed some typos 2013-11-03 14:48:21 +01:00
Klaus Schmidinger
ff4aed2227 The new menu category mcRecordingEdit is now used to mark menus that edit recording properties 2013-11-03 14:10:59 +01:00
Klaus Schmidinger
39f6b6fc6b Fixed a possible access to uninitialized data in cEIT::cEIT() 2013-11-03 14:02:01 +01:00
Klaus Schmidinger
0b5085f4f0 In the "Select folder" menu pressing Ok now selects the folder, even if this is a folder that contains sub folders 2013-11-03 13:43:01 +01:00
Klaus Schmidinger
512cd24e53 Added code for parsing LCN and AVC descriptors to libsi 2013-10-30 10:18:26 +01:00
Klaus Schmidinger
83a8d5a561 Changed the absolute latitude limit for visible satellites to 81.2 degrees 2013-10-30 10:11:55 +01:00
Klaus Schmidinger
26fbb921f5 The LIRC remote control now connects to the socket even if it doesn't yet exist whe VDR is started 2013-10-29 16:03:43 +01:00
Klaus Schmidinger
589f5519d7 Added entries for version 2.0.4 2013-10-23 10:20:48 +02:00
Klaus Schmidinger
3592293cca Updated the Finnish OSD texts 2013-10-23 08:28:38 +02:00
Klaus Schmidinger
4312dfcf41 Revoked "Added maximum signal strength value for TechniSat SkyStar 2 DVB-S rev 2.3P" 2013-10-21 08:59:59 +02:00
Klaus Schmidinger
94ced5845a When cutting a recording it is now checked whether there is already an edited version of this recording 2013-10-21 08:23:19 +02:00
Klaus Schmidinger
a16391ecb0 Changed the name of the SVDRP command RENR to MOVR 2013-10-21 07:55:23 +02:00
Klaus Schmidinger
4ea90cefe8 Fixed some compiler warnings with gcc-4.6.3 2013-10-20 09:57:55 +02:00
Klaus Schmidinger
97eb54738f Updated the Finnish OSD texts 2013-10-20 09:34:59 +02:00
Klaus Schmidinger
641acd5709 Changed the return value of cPositioner::HorizonLongitude() to 0 in case the latitude of the antenna location is beyond +/-81 degrees 2013-10-20 09:32:23 +02:00
Klaus Schmidinger
856f67b4ac Adjusted release date 2013-10-19 10:04:51 +02:00
Klaus Schmidinger
71778859a7 Bumped the APIVERSION 2013-10-19 10:00:00 +02:00
Klaus Schmidinger
47b09cce5d Restoring the source recording in case copying fails 2013-10-16 10:24:28 +02:00
Klaus Schmidinger
c9fb7eb4d6 Fixed an inconsistent behavior between opening the Recordings menu manually via the main menu and by pressing the Recordings key 2013-10-16 09:43:47 +02:00
Klaus Schmidinger
3870322888 Fixed handling actions in Recordings Info/Edit in case the recording is being replayed 2013-10-14 10:28:10 +02:00
Klaus Schmidinger
396f8c96af Added refreshing the recording in the Recording Info/Edit menus 2013-10-14 09:59:04 +02:00
Klaus Schmidinger
9bd415d58e Added maximum signal strength value for TechniSat SkyStar 2 DVB-S rev 2.3P 2013-10-13 14:48:56 +02:00
Klaus Schmidinger
8bc6bcf86e The function cRecordings::MBperMinute() now only takes into account recordings with less than 5 seconds per megabyte 2013-10-12 13:48:32 +02:00
Klaus Schmidinger
54b3135d59 Revised the section on "Learning the remote control keys" in the INSTALL file 2013-10-12 12:56:31 +02:00
Klaus Schmidinger
446c3b4cfd Changed cRecorder::Action() to use cTimeMs instead of time() 2013-10-12 12:08:37 +02:00
Klaus Schmidinger
adf0dac2c3 Now also checking the source (in addition to the transponder) when setting the system time from the TDT 2013-10-12 11:23:10 +02:00
Klaus Schmidinger
1caa78a3e7 Fixed writing group separators to channels.conf that contain a comma 2013-10-11 11:38:05 +02:00
Klaus Schmidinger
e61e1ed425 Updated the Italian OSD texts 2013-10-11 09:46:43 +02:00
Klaus Schmidinger
01d7269904 Removed the deprecated VideoDirectory variable 2013-10-11 09:38:07 +02:00
Klaus Schmidinger
7c72f79329 Changed some variable names in positioner.c to match the names used in the page with the explanation on vdr-portal.de 2013-10-10 14:21:44 +02:00
Klaus Schmidinger
bf52b1a2e3 Fixed a comment 2013-10-10 13:23:30 +02:00
Klaus Schmidinger
2bdb599fbc Added renaming and moving recordings and folders, and editing a recording's priority and lifetime; added cutting queue 2013-10-10 13:13:30 +02:00
Klaus Schmidinger
3971cc6e88 Removed the code for distributing recordings over several video directories; added the cVideoDirectory plugin API 2013-09-11 12:20:37 +02:00
Klaus Schmidinger
209b850067 Removed superfluous lines 2013-09-10 13:10:40 +02:00
Klaus Schmidinger
7251fefa89 The Yellow button in the main menu no longer acts as "Pause" if "Pause key handling" is set to "do not pause live video" 2013-09-07 12:52:14 +02:00
Klaus Schmidinger
3c72be23f0 Added checks for debug file i/o 2013-09-07 10:39:46 +02:00
Klaus Schmidinger
699454ad7f Unified the internal sequence of actions when pressing the Blue and the Back key, respectively, during replay 2013-09-07 10:20:00 +02:00
Klaus Schmidinger
e8fb500819 Fixed displaying DVB subtitles (cont'd) 2013-09-06 12:37:27 +02:00
Klaus Schmidinger
d6c10fec7b Added entries for version 2.0.3 2013-09-03 11:09:17 +02:00
Klaus Schmidinger
f34be6f5f0 Fixed a typo 2013-09-02 07:53:54 +02:00
Klaus Schmidinger
b931724b75 Fixed cleaning up old EPG events in case no epg data file is given 2013-08-31 13:21:09 +02:00
Klaus Schmidinger
bd6da13a67 Updated the Estonian OSD texts 2013-08-31 12:45:15 +02:00
Klaus Schmidinger
f52e8759c5 Fixed wrong initialization of Setup.PositionerSwing 2013-08-31 12:42:36 +02:00
Klaus Schmidinger
2090ed6f7c Added credit to Thomas Bergwinkl's Rotor plugin 2013-08-31 12:19:10 +02:00
Klaus Schmidinger
246d5412e0 Fixed displaying DVB subtitles 2013-08-30 12:00:40 +02:00
Klaus Schmidinger
9b1b6b3ce4 Fixed handling DVB subtitle fill region codes for 2 and 8 bpp 2013-08-27 10:22:22 +02:00
Klaus Schmidinger
c8c14e31d8 Updated the Finnish OSD texts 2013-08-26 08:47:17 +02:00
Klaus Schmidinger
4d0a1db4ac Adjusted release date 2013-08-25 10:16:43 +02:00
Klaus Schmidinger
a0f63d40c6 The code for distributing recordings over several video directories is now deprecated and disabled by default 2013-08-23 13:09:27 +02:00
Klaus Schmidinger
f0537ea0f1 Added Begin/EndSegmentTransfer() to the EPG handler interface 2013-08-23 10:54:49 +02:00
Klaus Schmidinger
9492231058 Reverted the change from version 1.5.7 that made all logging go to LOG_ERR 2013-08-23 10:37:54 +02:00
Klaus Schmidinger
c385d5bf0c All bonded devices (except for the master) now turn off their LNB power completely to avoid problems when receiving vertically polarized transponders 2013-08-23 09:47:27 +02:00
Klaus Schmidinger
d377c778a7 Increased the value of MAXRETRIES to 20 to reduce the probability of disturbances in transfer mode 2013-08-22 12:35:10 +02:00
Klaus Schmidinger
17b12a32b0 cDevice::IsPrimaryDevice() now also checks whether the primary device actually has a decoder and returns false otherwise 2013-08-22 12:00:03 +02:00
Klaus Schmidinger
99321b371a Fixed a possible crash when shutting down VDR while subtitles are being displayed 2013-08-22 10:33:59 +02:00
Klaus Schmidinger
58c9fdc8c5 Fixed handling LIRC events in case repeated events are lost 2013-08-22 09:35:35 +02:00
Klaus Schmidinger
7fc654eb21 Fixed handling the -o option (short form of --outputonly) 2013-08-22 08:22:50 +02:00
Klaus Schmidinger
a0a4421278 No longer trying to delete old recordings in AssertFreeDiskSpace() if the given Priority is less than 1 2013-08-21 13:56:33 +02:00
Klaus Schmidinger
7a359a958e Fixed asserting free disk space in the cutter 2013-08-21 13:22:19 +02:00
Klaus Schmidinger
cd10b439d0 Added basic support for positioners to control steerable satellite dishes 2013-08-21 11:02:52 +02:00
Klaus Schmidinger
5b76eec1af Added option -x to pic2mpg 2013-05-23 10:00:23 +02:00
Klaus Schmidinger
f55aee0fc1 Fixed indentation 2013-05-23 09:41:54 +02:00
Klaus Schmidinger
21957f6e38 Backport of 'Fixed a crash in the LCARS skin's main menu in case there is no current channel' 2013-05-19 12:12:37 +02:00
Klaus Schmidinger
fc697bfdb1 Fixed a crash in the LCARS skin's main menu in case there is no current channel 2013-05-19 12:07:07 +02:00
Klaus Schmidinger
818763b332 Backport of 'Fixed an endless loop in the DrawEllipse() functions for very small ellipses' 2013-05-18 12:47:52 +02:00
Klaus Schmidinger
cc6c05fcf2 Fixed an endless loop in the DrawEllipse() functions for very small ellipses 2013-05-18 12:39:59 +02:00
Klaus Schmidinger
f6adb32202 Fixed unwanted version tag on checkout of older version 2013-05-02 10:23:11 +02:00
Klaus Schmidinger
4e1a01959d Backport of 'Fixed an error message when parsing SCR values in diseqc.conf' 2013-05-02 09:34:45 +02:00
Klaus Schmidinger
435978648b Fixed an error message when parsing SCR values in diseqc.conf 2013-05-02 09:31:31 +02:00
Klaus Schmidinger
c354540a31 Removed an extra blank line 2013-05-02 09:29:02 +02:00
Klaus Schmidinger
8d98b9193b Backport of 'Fixed no longer generating any editing marks if the edited recording results in just one single sequence' 2013-05-02 09:25:20 +02:00
Klaus Schmidinger
d8e8941c77 Fixed no longer generating any editing marks if the edited recording results in just one single sequence 2013-05-02 09:17:55 +02:00
Klaus Schmidinger
d32498f65f Backport of 'Fixed displaying the frame number when setting an editing mark' 2013-04-27 10:35:30 +02:00
Klaus Schmidinger
29537da370 Fixed displaying the frame number when setting an editing mark 2013-04-27 10:31:23 +02:00
Klaus Schmidinger
cbe8542622 Backport of 'Fixed multiple occurrences of the same directory in the recordings list in case there are directories that only differ in non-alphanumeric characters' 2013-04-27 10:21:14 +02:00
Klaus Schmidinger
fd3bf6c3d2 Fixed multiple occurrences of the same directory in the recordings list in case there are directories that only differ in non-alphanumeric characters 2013-04-27 10:06:49 +02:00
Klaus Schmidinger
53ef55410c Changed the sign of the satellite position value in cSource to reflect the standard of western values being negative 2013-04-11 10:40:47 +02:00
Klaus Schmidinger
4263a1a410 Backport of 'Changed cThread::SetIOPriority() from "best effort class" to "idle class" in order to improve overall performance when an editing process is running' 2013-04-11 09:01:04 +02:00
Klaus Schmidinger
37d2bf4d9a Removed a double empty line 2013-04-11 08:47:31 +02:00
Klaus Schmidinger
6bd7123072 Backport of 'Fixed handling '/' and '~' in recording file names in case DirectoryEncoding is used' 2013-04-11 08:32:40 +02:00
Klaus Schmidinger
c979ef393b Fixed handling '/' and '~' in recording file names in case DirectoryEncoding is used 2013-04-11 08:17:17 +02:00
Klaus Schmidinger
0e4b404102 Changed cThread::SetIOPriority() from "best effort class" to "idle class" in order to improve overall performance when an editing process is running 2013-04-10 15:38:29 +02:00
Klaus Schmidinger
89de3b6c01 Backport of 'Added definitions for older DVB API versions, back until 5.0' 2013-04-10 15:02:08 +02:00
Klaus Schmidinger
1682e2708d Fixed double semicolon 2013-04-09 11:10:30 +02:00
Klaus Schmidinger
71fb3e84da Added definitions for older DVB API versions, back until 5.0 2013-04-09 09:53:00 +02:00
Klaus Schmidinger
3bb55dfdde Fixed some typos 2013-04-08 12:36:22 +02:00
Klaus Schmidinger
497553d985 Removed all "modified since version 1.6" markers from PLUGINS.html 2013-04-08 08:58:49 +02:00
Klaus Schmidinger
d336191ed1 Backport of 'Fixed an endless loop in cTextWrapper::Set() in case the given Width is smaller than one character' 2013-04-07 14:56:26 +02:00
Klaus Schmidinger
cf7f25fe50 Fixed an endless loop in cTextWrapper::Set() in case the given Width is smaller than one character 2013-04-07 14:49:42 +02:00
Klaus Schmidinger
b6b66acfc7 Backport of 'Fixed initializing cDevice::keepTracks' 2013-04-05 11:03:02 +02:00
Klaus Schmidinger
d962999161 Fixed initializing cDevice::keepTracks 2013-04-05 10:27:16 +02:00
Klaus Schmidinger
ac25275b10 Version 2.0.0 2013-03-31 09:30:18 +02:00
Klaus Schmidinger
965feab54f Fixed handling overlapping pending timers 2013-03-29 15:37:16 +01:00
Klaus Schmidinger
f30ac5075e Updated the French OSD texts 2013-03-29 10:28:26 +01:00
Klaus Schmidinger
649351c2c4 Fixed the description of the 'M' parameter of channel definitions in vdr.5 (cont'd) 2013-03-29 10:25:56 +01:00
Klaus Schmidinger
a465820c1c Fixed the description of the 'M' parameter of channel definitions in vdr.5 2013-03-28 10:03:42 +01:00
Klaus Schmidinger
c191acaa3d Updated the Lithuanian OSD texts 2013-03-28 09:04:25 +01:00
Klaus Schmidinger
65f6e9ae98 Updated the default channels.conf file 2013-03-23 11:07:01 +01:00
Klaus Schmidinger
495f197327 Fixed formatting the channel definition example in the vdr(5) man page 2013-03-18 12:38:54 +01:00
Klaus Schmidinger
8d6c1f3e54 Added a note about HDTV support 2013-03-18 10:31:12 +01:00
Klaus Schmidinger
5e805b5dfd The cutter now allocates its buffers on the heap to avoid problems on systems with limited stack space 2013-03-18 09:54:00 +01:00
Klaus Schmidinger
b7f4536fe1 The "Resume" button in the main menu is now only active if the respective recording actually exists 2013-03-18 09:19:42 +01:00
Klaus Schmidinger
b6d407a212 Fixed loading the setup.conf file in case a parameter contains the '#' character 2013-03-18 09:05:18 +01:00
Klaus Schmidinger
e724d871b2 Removed an obsolete reference to USEFHS 2013-03-17 16:07:42 +01:00
Klaus Schmidinger
a5d524b7e6 Updated email address of Rolf Ahrenberg 2013-03-17 14:07:35 +01:00
Klaus Schmidinger
eac63172e5 Renamed the language file sr_SR.po to sr_RS.po 2013-03-17 10:44:29 +01:00
Klaus Schmidinger
4477a0171e Added maximum SNR and signal strength value for TechniSat SkyStar HD2 2013-03-16 15:30:12 +01:00
Klaus Schmidinger
a033ebf167 Updated the Serbian OSD texts 2013-03-16 15:13:28 +01:00
Klaus Schmidinger
66a2bf9906 Fixed creating a new VPS timer with the SVDRP command NEWT 2013-03-16 10:39:16 +01:00
Klaus Schmidinger
9bd2b9901f Updated the help and man page entry about the location of the epg.data file 2013-03-15 10:47:35 +01:00
Klaus Schmidinger
21b564805d When switching to a less privileged user id, VDR now sets the environment variables HOME, USER, LOGNAME and SHELL accordingly 2013-03-14 09:38:06 +01:00
Klaus Schmidinger
87acd119ce Added a note to the INSTALL file regarding multiple disk setup becoming deprecated in a future version of VDR 2013-03-14 09:20:51 +01:00
Klaus Schmidinger
1b61b7f5bc Fixed stopping an ongoing recording on a system with bonded devices, if a timer with a higher priority requires a different band (cont'd) 2013-03-13 11:23:53 +01:00
Klaus Schmidinger
4118097e73 Updated the introductory text of the vdr.1 man page 2013-03-12 13:43:04 +01:00
Klaus Schmidinger
ec7fac3c0d Some improvements to allowing the parameters PATH and NAME to the --dirnames command line option to be left empty to use the default values if only ENC shall be set 2013-03-12 13:27:40 +01:00
Klaus Schmidinger
cee221e843 Fixed stopping an ongoing recording on a system with bonded devices, if a timer with a higher priority requires a different band 2013-03-12 11:57:19 +01:00
Klaus Schmidinger
a8ae0d2f7c Fixed a possible "Channel not available" if a recording starts on a system with bonded devices 2013-03-12 10:18:55 +01:00
Klaus Schmidinger
7100e4c209 The parameters PATH and NAME to the --dirnames command line option may now be left empty to use the default values if only ENC shall be set 2013-03-12 09:44:46 +01:00
Klaus Schmidinger
ccbe1905a1 The 'plugins' target of the VDR Makefile now also copies files matching the wildcard "lib$$i-*.so" (previously only "libvdr-*.so") and also descends into subdirectories of the plugin source 2013-03-11 15:01:01 +01:00
Klaus Schmidinger
3488050173 Removed reference to 'remote control unit' 2013-03-11 13:24:12 +01:00
Klaus Schmidinger
6213afa230 Updated version numbers and release dates 2013-03-11 13:17:12 +01:00
Klaus Schmidinger
cb6c2f7125 Updated copyright year 2013-03-11 11:51:27 +01:00
Klaus Schmidinger
552b1e542f Changed email address to <vdr@tvdr.de> 2013-03-11 11:25:01 +01:00
Klaus Schmidinger
bc72b7e6cd Fixed using PATH_MAX and NAME_MAX (+/-1 because the first one includes the terminating 0, while the latter doesn't) 2013-03-11 11:07:59 +01:00
Klaus Schmidinger
f3ca6f2083 Updated the Polish OSD texts 2013-03-11 08:45:46 +01:00
Klaus Schmidinger
c8ef40ee92 Updated the Russian OSD texts 2013-03-10 16:47:30 +01:00
Klaus Schmidinger
aa17488a5b Updated the Hungarian OSD texts 2013-03-10 16:46:09 +01:00
Klaus Schmidinger
38a15ef510 Changed the default values for the OSD size back to those before version 1.7.29 2013-03-10 14:56:51 +01:00
Klaus Schmidinger
b526a70071 The LCARS skin now calls SetAntiAliasGranularity(20, 16) in order to reserve enough fixed colors on 8bpp displays with anti-aliasing 2013-03-09 10:46:41 +01:00
Klaus Schmidinger
d08777ed87 Limited the Goto() call in cDvbPlayer::SetAudioTrack() to the main thread 2013-03-08 13:47:02 +01:00
Klaus Schmidinger
f7645402ff Fixed resuming replay of PES recordings 2013-03-07 14:47:02 +01:00
Klaus Schmidinger
a67fe0663d Fixed a possible deadlock when changing the audio track while replaying a recording 2013-03-07 13:27:05 +01:00
Klaus Schmidinger
16c931453d Renamed the "plp id" to a more general "stream id" and added support for DVB-S2 "Input Stream Identifier" (ISI) 2013-03-07 09:51:06 +01:00
Klaus Schmidinger
0a0db91018 Updated the Romanian OSD texts 2013-03-07 09:39:07 +01:00
Klaus Schmidinger
4e65807dc5 Using the English versions for all untranslated texts in ar.po as suggested by Osama Alrawab 2013-03-07 09:34:50 +01:00
Klaus Schmidinger
4a3d74e511 Updated the Arabic OSD texts 2013-03-07 09:28:11 +01:00
Klaus Schmidinger
5cca94d1b3 Updated the Finnish OSD texts 2013-03-06 10:48:02 +01:00
Klaus Schmidinger
5b94631467 Updated the French OSD texts 2013-03-06 10:39:06 +01:00
Klaus Schmidinger
6f43287d07 Updated the Slovak OSD texts 2013-03-05 10:40:51 +01:00
Klaus Schmidinger
023f9366ef Updated the Catalan OSD texts 2013-03-05 10:10:13 +01:00
Klaus Schmidinger
9711380e57 Updated the Spanish OSD texts 2013-03-05 10:09:06 +01:00
Klaus Schmidinger
37da7d9961 Updated the Italian OSD texts 2013-03-05 10:07:32 +01:00
Klaus Schmidinger
f53913f144 Updated the Estonian OSD texts 2013-03-05 10:02:35 +01:00
Klaus Schmidinger
926f980d87 Updated the Ukrainian OSD texts 2013-03-05 10:00:23 +01:00
Klaus Schmidinger
3b7ae17055 Updated the Czech OSD texts 2013-03-05 09:53:48 +01:00
Klaus Schmidinger
4f76862ff1 Updated the Dutch OSD texts 2013-03-05 09:50:48 +01:00
Klaus Schmidinger
2b792e3519 Updated the Macedonian OSD texts 2013-03-05 09:45:46 +01:00
Klaus Schmidinger
670e5a1eb6 Updated the Slovak OSD texts 2013-03-05 09:40:20 +01:00
Klaus Schmidinger
889547de72 Updated the Chinese OSD texts 2013-03-05 09:17:37 +01:00
Klaus Schmidinger
366ef1b812 Updated Chinese language texts 2013-03-05 09:16:35 +01:00
Klaus Schmidinger
993dc45922 Updated the Swedish OSD texts 2013-03-04 16:48:11 +01:00
Klaus Schmidinger
db8cf38b5b Implemented the setup option "OSD/Always sort folders first" 2013-03-04 14:11:47 +01:00
Klaus Schmidinger
f3eb300bb0 Updated the Slovenian OSD texts 2013-03-04 13:08:41 +01:00
Klaus Schmidinger
02bf57ba71 Updated the Spanish and Catalan OSD texts 2013-03-04 12:30:08 +01:00
Klaus Schmidinger
aaffda3119 Added the system's character set to the page header in the epg2html script 2013-03-04 12:14:09 +01:00
Klaus Schmidinger
4da13b57ec Fixed a faulty UTF-8 character in cs_CZ.po 2013-03-04 11:14:33 +01:00
Klaus Schmidinger
4d8f68e906 Added a note about the new default sort order of recordings to the release notes of version 1.7.29 2013-03-04 10:25:46 +01:00
Klaus Schmidinger
64c81d24dc Updated email address of Rolf Ahrenberg 2013-03-04 10:11:32 +01:00
Klaus Schmidinger
2966432870 Updated the Catalan OSD texts 2013-03-04 09:34:59 +01:00
Klaus Schmidinger
01c44e8b2c The "Recording info" page of the skins that come with VDR now displays the name of the channel (if available) from which this recording was taken 2013-03-03 15:38:17 +01:00
Klaus Schmidinger
1983983214 Updated the Russian OSD texts 2013-03-03 13:01:26 +01:00
Klaus Schmidinger
f239934bf9 When sorting recordings by name, folders are now always at the top of the list 2013-03-03 11:04:22 +01:00
Klaus Schmidinger
e0448bded8 Whitespace fixes 2013-03-03 10:37:58 +01:00
Klaus Schmidinger
030b41c370 Changed the calls to Skins.QueueMessage() in vdr.c that are related to reporting the status of the editing process back to Skins.Message() in order to have them appear immediately 2013-03-03 10:27:23 +01:00
Klaus Schmidinger
3766a71741 Updated the Hungarian language texts 2013-03-01 21:38:01 +01:00
Klaus Schmidinger
65cc35f7f9 Updated the Spanish OSD texts 2013-03-01 13:02:51 +01:00
Klaus Schmidinger
df4e5a1072 Now calling DeviceClear() in cTransfer::Receive() if the output device blocks, instead of not retrying for 10 seconds 2013-03-01 10:02:01 +01:00
Klaus Schmidinger
5c47a0033e Removed all "fuzzy" translations from the files ar.po, hu_HU.po and sr_SR.po, because more often than not they are just wrong 2013-03-01 09:05:33 +01:00
Klaus Schmidinger
4c5f7bc80e Updated the Dutch OSD texts 2013-02-26 10:47:07 +01:00
Klaus Schmidinger
85027db9b9 Limited 'Fixed stuttering or asynchronous audio after changing the audio track' to TS recordings to avoid a segfault 2013-02-25 12:17:19 +01:00
Klaus Schmidinger
9e47d589e2 Updated the French OSD texts 2013-02-25 10:14:05 +01:00
Klaus Schmidinger
bb4035f812 Fixed immediately disappearing subtitle track menu in "high level OSD" mode of the TT S2-6400 when selecting "No subtitles" 2013-02-24 12:01:49 +01:00
Klaus Schmidinger
24e46b3604 Added a manual page for 'svdrpsend' 2013-02-24 10:41:12 +01:00
Klaus Schmidinger
ce94ced9d3 Removed consecutive empty lines 2013-02-22 15:25:31 +01:00
Klaus Schmidinger
b5fefa2f9e Removed empty lines at end of file 2013-02-22 14:52:49 +01:00
Klaus Schmidinger
037b10b4e9 Added cDvbTuner::IsBondedMaster() 2013-02-20 09:12:12 +01:00
Klaus Schmidinger
680838947b Fixed stuttering or asynchronous audio after changing the audio track 2013-02-20 09:10:19 +01:00
Klaus Schmidinger
f13e8a156e Fixed flashing OSD in "high level OSD" mode of the TT S2-6400 in case a menu is open while subtitles are being displayed 2013-02-19 13:51:46 +01:00
Klaus Schmidinger
bcdbfe95e7 The demos in the "osddemo" plugin can now also be ended with the "Back" key 2013-02-19 12:44:08 +01:00
Klaus Schmidinger
8260adafc2 Improved working around the broken driver values for SNR in case of a "TT-budget S2-3200" receiving DVB-S2 2013-02-19 12:16:42 +01:00
Klaus Schmidinger
851318c9b4 Fixed a possible deadlock in handling the tuners of bonded devices 2013-02-19 10:24:39 +01:00
Klaus Schmidinger
39ad232ee5 Now clearing device bondings for devices that don't provide DVB-S in the Setup/LNB menu 2013-02-19 09:48:54 +01:00
Klaus Schmidinger
20654b12ed Updated the Swedish OSD 2013-02-18 17:16:31 +01:00
Klaus Schmidinger
a353b544cd Changed the template for PLGCFG to $(CONFDIR)/plugins.mk 2013-02-18 11:01:28 +01:00
Klaus Schmidinger
7d181c2e35 Updated the Czech OSD texts 2013-02-18 10:52:55 +01:00
Klaus Schmidinger
eda593934d Modified handling user inactivity in the shutdown handler to avoid a problem in case the system time is changed after VDR has been started 2013-02-18 10:41:43 +01:00
Klaus Schmidinger
a88ca5d4e5 Updated the Polish OSD texts 2013-02-18 10:21:37 +01:00
Klaus Schmidinger
0cce3f7c87 Updated the Finnish OSD texts 2013-02-18 08:47:26 +01:00
Klaus Schmidinger
f7c0216ed0 Some formatting fixes 2013-02-17 14:41:29 +01:00
Klaus Schmidinger
fb60a3e836 Added notes from HISTORY 2013-02-17 13:44:05 +01:00
Klaus Schmidinger
4056de5d1c Expanded tabs in PLUGINS/src/dvbhddevice/setup.c 2013-02-17 13:27:29 +01:00
Klaus Schmidinger
3ca58a42e7 Removed trailing whitespace 2013-02-17 13:19:36 +01:00
Klaus Schmidinger
212a2fea41 Fixed a typo 2013-02-17 12:12:41 +01:00
Klaus Schmidinger
a3daf79d6f Turned off following symlinks in the Doxyfile 2013-02-17 11:54:55 +01:00
Klaus Schmidinger
9177e4b7f8 Updated the Doxyfile with a newer version of Doxygen 2013-02-17 11:47:22 +01:00
Klaus Schmidinger
54d81f0b8f Using 'cat' instead of 'cp' to copy the Doxyfile to avoid problems in case Doxyfile is write protected 2013-02-17 11:11:05 +01:00
Klaus Schmidinger
7076f20b44 Credit to Matthias Senzel 2013-02-17 11:04:36 +01:00
Klaus Schmidinger
30e10239ca Added Doxyfile.filter to have special characters escaped that would otherwise be dropped by Doxygen 2013-02-17 10:54:05 +01:00
Klaus Schmidinger
ff27cca4fe Removed all \return and \param tags from comment lines marked with "///<" for Doxygen 2013-02-16 15:26:45 +01:00
Klaus Schmidinger
4c827ff8a4 Fixed determining the priority of the primary device in case it is neither replaying nor receiving a live channel 2013-02-16 14:39:30 +01:00
Klaus Schmidinger
8cc4f36690 Updated the French OSD texts 2013-02-16 13:13:53 +01:00
Klaus Schmidinger
bb47d52f95 Added missing 'const' to cDevice::HasProgramme() and cDevice::HasLock() 2013-02-16 13:06:16 +01:00
Klaus Schmidinger
cd2ed6cfe7 Added '-p' to the cp command in the install-conf target of the Makefile 2013-02-16 11:22:20 +01:00
Klaus Schmidinger
2502068015 Fixed some spellings in PLUGINS.html and Doxyfile 2013-02-16 11:04:37 +01:00
Klaus Schmidinger
bd478955e6 Added missing $(LDFLAGS) to the Makefile of the dvbhddevice plugin 2013-02-16 10:38:21 +01:00
Klaus Schmidinger
2de75c3e9f Fixed displaying pending timers in "alert" mode in the LCARS skin 2013-02-15 15:12:24 +01:00
Klaus Schmidinger
b4d8d93534 Updated the French OSD texts (cont'd) 2013-02-15 14:42:17 +01:00
Klaus Schmidinger
92888b3e57 Fixed a crash in cMenuEditChanItem::Set() when entering a channel number that doesn't exist 2013-02-15 14:27:26 +01:00
Klaus Schmidinger
441ee74ff1 Updated the French OSD texts 2013-02-15 09:15:26 +01:00
Klaus Schmidinger
410968304c Fixed the return value of cOsdProvider::StoreImage() in case there is no OSD provider 2013-02-14 15:52:54 +01:00
Klaus Schmidinger
11e04d4228 Moved the definition of TIMERMACRO_TITLE and TIMERMACRO_EPISODE from recording.h to config.h and using them to initialize Setup.NameInstantRecord 2013-02-14 15:16:46 +01:00
Klaus Schmidinger
62dfd2f996 No longer checking for EOPNOTSUPP in cDvbTuner::GetSignalQuality() 2013-02-14 13:21:34 +01:00
Klaus Schmidinger
9455b9a2b0 The timeout for trying to switch to a valid programme is now reset immediately once a programme has been found 2013-02-14 11:02:14 +01:00
Klaus Schmidinger
d2cfd52013 Updated the Lithuanian OSD texts 2013-02-14 09:25:17 +01:00
Klaus Schmidinger
78d338ffce Updated the French OSD texts 2013-02-13 16:32:51 +01:00
Klaus Schmidinger
764308667d Added demos of the DrawEllipse() and DrawSlope() function to the 'osddemo' plugin 2013-02-13 13:54:10 +01:00
Klaus Schmidinger
b6b9a148c6 Now deleting any previously allocated pixmaps in cOsd::SetAreas() 2013-02-13 12:55:26 +01:00
Klaus Schmidinger
8ef71dbbdf Made cOsd::DestroyPixmap() "NULL proof" 2013-02-13 12:55:06 +01:00
Klaus Schmidinger
e5295be30a Fixed the description of the OSD drawing functions DrawEllipse() 2013-02-12 13:42:00 +01:00
Klaus Schmidinger
027ec5a63f Fixed selecting the last replayed recording in the Recordings menu 2013-02-12 13:16:15 +01:00
Klaus Schmidinger
4aaaa97ade Fixed using "Pause" and "Slow motion" near the end of a recording 2013-02-12 10:53:46 +01:00
Klaus Schmidinger
cc2e3bfeb0 Updated the Italian OSD texts 2013-02-12 09:20:33 +01:00
Klaus Schmidinger
cda320549d Fixed permissions of po/sr_SR.po 2013-02-11 15:53:48 +01:00
Klaus Schmidinger
a41f3b1351 Fixed an unexpected k_Repeat key event after a k_Release in lirc.c 2013-02-11 15:31:09 +01:00
Klaus Schmidinger
6dd788f484 Removed an invalid line from channels.conf.terr 2013-02-11 12:11:49 +01:00
Klaus Schmidinger
a2b018d72b Updated the French OSD texts 2013-02-11 11:43:51 +01:00
Klaus Schmidinger
d2ef44f8f5 Fixed moving editing marks, so that they don't get overwritten with old values through an update of the marks file 2013-02-11 11:27:34 +01:00
Klaus Schmidinger
d8ba7158bc Updated the Macedonian OSD texts 2013-02-10 17:45:26 +01:00
Klaus Schmidinger
8146386c30 Updated the French OSD texts 2013-02-10 17:37:06 +01:00
Klaus Schmidinger
c1a56702f9 Updated contribution years 2013-02-10 11:07:12 +01:00
Klaus Schmidinger
d8626d8b47 Updated the Romanian OSD texts 2013-02-10 11:01:14 +01:00
Klaus Schmidinger
a5701717e0 Updated the Estonian OSD texts 2013-02-09 17:30:34 +01:00
Klaus Schmidinger
4b931c7fd6 Updated the Ukrainian OSD texts 2013-02-09 15:14:05 +01:00
Klaus Schmidinger
9d2367d967 Fixed formatting and removed some superfluous break statements in vdr.c's command line option switch 2013-02-08 10:48:43 +01:00
Klaus Schmidinger
c9e5b13789 Fixed capitalization 2013-02-08 10:40:00 +01:00
Klaus Schmidinger
0b85bb8053 Added .../include/uapi to the template for DVBDIR 2013-02-08 10:31:38 +01:00
Klaus Schmidinger
245ae52d36 There is no more fixed limit to the maximum number of cPixmap objects an OSD can create 2013-02-08 10:29:32 +01:00
Klaus Schmidinger
7f66e1573e New command line option --dirnames 2013-02-08 09:24:55 +01:00
Klaus Schmidinger
b16437e784 New options 'Setup/Miscellaneous/Remote control repeat delay' and 'Setup/Miscellaneous/Remote control repeat delta' 2013-02-03 15:58:46 +01:00
Klaus Schmidinger
1bad5d1e6f Avoiding an extra key press event if the repeat function kicks in when controlling VDR via the PC keyboard 2013-02-02 12:44:33 +01:00
Klaus Schmidinger
bb7d8b3b5b Added some notes about plugin Makefiles to PLUGINS.html 2013-02-01 12:57:53 +01:00
Klaus Schmidinger
45f660e358 When pausing live video, the current audio and subtitle tracks are now retained 2013-02-01 12:06:50 +01:00
Klaus Schmidinger
250419d2c9 Improved LIRC timing for repeat function (cont'd) 2013-01-31 12:13:39 +01:00
Klaus Schmidinger
d95804fec3 Improved LIRC timing for repeat function 2013-01-30 13:03:00 +01:00
Klaus Schmidinger
7fa0d338eb Updated the Slovakian language texts 2013-01-30 09:13:05 +01:00
Klaus Schmidinger
06e414aacb Changed several calls to Skins.Message() in vdr.c to Skins.QueueMessage() in order to void a black screen while such a message is displayed in case the channel will be switched 2013-01-29 11:32:44 +01:00
Klaus Schmidinger
573cf3fc8b Changed several calls to Skins.Message() in vdr.c to Skins.QueueMessage() in order to avoid a black screen while such a message is displayed in case the channel will be switched 2013-01-29 11:31:12 +01:00
Klaus Schmidinger
0364b026cf Added notes from HISTORY 2013-01-29 10:44:16 +01:00
Klaus Schmidinger
9fe795ca61 Added dependency on 'i18n' to 'install-i18n' in the VDR Makefile 2013-01-27 14:22:41 +01:00
Klaus Schmidinger
36e4202c14 Fixed possible audio chatter when a recording is replayed to its very end 2013-01-27 14:18:19 +01:00
Klaus Schmidinger
a9c9b76aeb Fixed a leftover progress display in the LCARS main menu when replay of a recording ends while the menu is open, and the live channel has no EPG information 2013-01-25 14:57:30 +01:00
Klaus Schmidinger
a5426b58c6 Improved responsiveness during replay when close to the recording's end 2013-01-25 14:34:08 +01:00
Klaus Schmidinger
a906cd52df The index file is now closed after initially reading it if it is older than 3600 seconds 2013-01-25 14:32:11 +01:00
Klaus Schmidinger
79dad980cf Returning 0 from cDvbSdFfDevice::NumProvidedSystems() if option --outputonly is given 2013-01-25 10:52:43 +01:00
Klaus Schmidinger
01c26a5c6c Fixed a leftover line in case a two line subtitles was followed by a one line subtitle on the dvbhddevice in "high level" OSD mode 2013-01-24 13:01:31 +01:00
Klaus Schmidinger
cfb62845ec Fixed upscaling bitmaps 2013-01-24 11:42:15 +01:00
Klaus Schmidinger
8281be1480 Fixed possible garbage in the remaining time of the LCARS replay display in case the hours change from two to one digit 2013-01-23 14:05:03 +01:00
Klaus Schmidinger
b833de1761 The LCARS menu now also works if the OSD has only 1bpp (two colors) 2013-01-23 13:53:28 +01:00
Klaus Schmidinger
956ac7e70d Added missing template for DVBDIR to Make.config.template 2013-01-23 10:50:20 +01:00
Klaus Schmidinger
b2ae3062ab Now also using FindHeader() in cMpeg2Fixer::AdjTref() 2013-01-23 10:42:41 +01:00
Klaus Schmidinger
5b720a4fdb Fixed a typo 2013-01-22 17:01:16 +01:00
Klaus Schmidinger
1ba20fa20f Reduced the number of retries in cTransfer::Receive() to avoid blocking recordings in case the primary device can't handle the current live signal 2013-01-20 13:40:30 +01:00
Klaus Schmidinger
abde1d04ae Improved cutting MPEG-2 video 2013-01-20 12:19:42 +01:00
Klaus Schmidinger
db98ecf54e Implemented scaling of SPU bitmaps 2013-01-20 10:43:32 +01:00
Klaus Schmidinger
6a8a790312 The SVDRP command NEWT no longer checks whether a timer with the given data already exists 2013-01-17 15:21:07 +01:00
Klaus Schmidinger
904903f8d5 The last replayed recording is now stored in setup.conf, which allows the blue "Resume" key in the main menu to work even after a restart of VDR 2013-01-17 15:03:45 +01:00
Klaus Schmidinger
c984204944 Absolute jumps when replaying a recording (via the Red key) are now only performed if an actual value has been entered 2013-01-17 14:24:58 +01:00
Klaus Schmidinger
7a3f809f5c Fixed multiple occurrences of the same directory in the recordings list in case there are directories that only differ in non-alphanumeric characters 2013-01-16 16:08:20 +01:00
Klaus Schmidinger
a9099cb4d3 Revoked 'Fixed sorting recordings in case the locale ignores non-alphanumeric characters' 2013-01-16 14:19:11 +01:00
Klaus Schmidinger
89dc592727 The SVDRP command LSTR now knows the additional parameter "path", which can be given to get the actual file name of a recording's directory 2013-01-15 13:29:39 +01:00
Klaus Schmidinger
a5a8bf0164 Added "repeat" function when using the keyboard to control VDR 2013-01-13 12:04:51 +01:00
Klaus Schmidinger
d1d157d755 Fixed sorting recordings in case the locale ignores non-alphanumeric characters, or if two folders have the same name, but one of them ends in an additional digit 2013-01-13 11:57:50 +01:00
Klaus Schmidinger
fef409fe23 Fixed the example for cReceiver in PLUGINS.html 2013-01-12 14:33:44 +01:00
Klaus Schmidinger
16d37090dc Increased the version numbers of all plugins to reflect the recent Makefile changes 2013-01-12 14:13:28 +01:00
Klaus Schmidinger
e6d52e3455 More Makefile changes 2013-01-12 13:50:17 +01:00
Klaus Schmidinger
188fe74c8a Modified the Makefiles, by default VDR is now built according to the FHS 2013-01-06 18:48:29 +01:00
Klaus Schmidinger
36dfa5cb8f Added a remark indicating that the coordinates of Rect in a call to cDevice::CanScaleVideo() are in the range of the width and height returned by GetOsdSize() 2013-01-03 08:55:37 +01:00
Klaus Schmidinger
2d850b14e2 Added maximum SNR value for PCTV Systems nanoStick T2 290e 2012-12-30 13:10:44 +01:00
Klaus Schmidinger
811078a0fe Added maximum SNR value for PCTV Systems PCTV 73ESE 2012-12-30 11:30:17 +01:00
Klaus Schmidinger
0dd2dcf5a2 Checking "PKGCFG" instead of "Make.global" to see if a plugin uses an old style Makefile 2012-12-30 11:18:18 +01:00
Klaus Schmidinger
26e6ba7dd7 Removed "include" from the DVBDIR setting in the VDR Makefile 2012-12-29 15:03:06 +01:00
Klaus Schmidinger
39a95018b0 Re-enabled building plugins that still use pre-version-1.7.34 Makefiles 2012-12-29 12:12:16 +01:00
Klaus Schmidinger
1a433954f0 Revoked 'Now using targets install-lib and install-i18n when building plugins locally' 2012-12-29 10:31:33 +01:00
Klaus Schmidinger
acbe56f6d0 Plugin Makefiles can now include a configuration file for compile time parameters 2012-12-28 10:09:41 +01:00
Klaus Schmidinger
f70414cf5b Using relative paths again when building plugins locally 2012-12-27 16:15:38 +01:00
Klaus Schmidinger
2e138748c2 Added MANDIR to the vdr.pc file 2012-12-27 14:00:51 +01:00
Klaus Schmidinger
c52df91e44 Now using targets "install-lib" and "install-i18n" when building plugins locally 2012-12-27 13:36:25 +01:00
Klaus Schmidinger
763e6e4c49 Changed "==" to "=" in the Makefile to make it POSIX style 2012-12-27 12:10:24 +01:00
Klaus Schmidinger
28441aded5 DVBDIR is now conveyed to plugins via the CFLAGS; removed some redundancy from Make.config.template 2012-12-27 11:58:09 +01:00
Klaus Schmidinger
70c4a2d5d5 Increased the version numbers of all plugins to reflect the recent Makefile changes 2012-12-27 10:39:48 +01:00
Klaus Schmidinger
3649145acb Making sure that plugins include the VDR header files from the actual VDR source directory when doing "make plugins" 2012-12-27 09:59:29 +01:00
Klaus Schmidinger
4545c9e93e Added notes from HISTORY 2012-12-24 09:10:55 +01:00
Klaus Schmidinger
db59a8e745 Fixed replaying ongoing recordings from other VDR instances 2012-12-24 09:00:55 +01:00
Klaus Schmidinger
ef3af3b702 Setting mcPluginSetup for plugin setup menus 2012-12-23 13:44:05 +01:00
Klaus Schmidinger
dee67e7061 Fixed cIndexFile::GetNextIFrame() to properly handle the case where the very last frame is an I-frame 2012-12-23 13:37:13 +01:00
Klaus Schmidinger
d6efa529c9 Fixed replay stuttering close to the end of an ongoing recording 2012-12-23 13:32:26 +01:00
Klaus Schmidinger
ea951daa44 DESTDIR is now used in 'install-plugins' 2012-12-23 11:28:13 +01:00
Klaus Schmidinger
b03aa8371c Made LIBDIR and LOCDIR non-overwriteable in plugin Makefiles 2012-12-23 10:05:22 +01:00
Klaus Schmidinger
e66ef9f695 Removed obsolete i18n texts 2012-12-23 09:52:18 +01:00
Klaus Schmidinger
9f26ba57c1 Updated the Italian OSD texts 2012-12-23 09:50:32 +01:00
Klaus Schmidinger
0263c82614 Plugin Makefiles now use DESTDIR and the 'install' program 2012-12-22 12:08:31 +01:00
Klaus Schmidinger
4e87443a2d Fixed CDEFINES 2012-12-21 11:56:29 +01:00
Klaus Schmidinger
fb2c77defc Fixed comment 2012-12-21 11:45:26 +01:00
Klaus Schmidinger
df33d402ca Replaced some 'SOFILE: command not found with '$^' 2012-12-21 11:38:09 +01:00
Klaus Schmidinger
65223eb8fd Added the new menu categories mcChannelEdit, mcTimerEdit, mcScheduleNow, mcScheduleNext, mcRecordingInfo, mcPluginSetup, mcSetupOsd, mcSetupEpg, mcSetupDvb, mcSetupLnb, mcSetupCam, mcSetupRecord, mcSetupReplay, mcSetupMisc and mcSetupPlugins 2012-12-21 11:22:26 +01:00
Klaus Schmidinger
62daedf95e The plugin Makefiles now have a separate 'install' target 2012-12-21 10:14:32 +01:00
Klaus Schmidinger
4132f5e745 Removed some redundancy in the Makefile/Make.global/Make.config mechanism 2012-12-19 12:10:28 +01:00
Klaus Schmidinger
8e54caa205 Added "-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE" to the DEFINES in the Makefile 2012-12-18 13:20:17 +01:00
Klaus Schmidinger
63d47f1f5d Fixed setting the --package-name and --package-version options in the calls to xgettext in several plugin Makefiles 2012-12-18 13:17:17 +01:00
Klaus Schmidinger
4151e73dcc Added several missing "ls $^" in the calls to xgettext in plugin Makefiles and the "newplugin" script 2012-12-18 09:33:30 +01:00
Klaus Schmidinger
40bfe40368 Fixed cOsd::GetBitmap() to always return NULL if a non-exising area is requested 2012-12-15 11:57:16 +01:00
Klaus Schmidinger
e33824217b Updated the Estonian OSD texts 2012-12-11 10:12:42 +01:00
Klaus Schmidinger
169bfc0128 Changed the type of the TimerMatch parameter in cSkinDisplayMenu::SetItemEvent() from 'int' to 'eTimerEvent' 2012-12-11 10:08:21 +01:00
Klaus Schmidinger
03658cd480 Fixed a typo 2012-12-08 15:27:48 +01:00
Klaus Schmidinger
83fe591f32 The new functions SetItemEvent(), SetItemTimer(), SetItemChannel() and SetItemRecording() of the cSkinDisplayMenu class can be reimplemented by skin plugins to display these items in a more elaborate way than just a simple line of text 2012-12-08 11:05:39 +01:00
Klaus Schmidinger
bc0b67e630 Only handling decimal point in atod() and dtoa() if it differs from '.' 2012-12-07 09:00:00 +01:00
Klaus Schmidinger
a94f45a1b3 Added notes from HISTORY 2012-12-06 12:08:24 +01:00
Klaus Schmidinger
dbb6c29cff Modified behavior of Play/Pause key in fast and slow modes 2012-12-06 11:08:56 +01:00
Klaus Schmidinger
9a0236b9e2 Changed reading and writing of floating point numbers into configuration files to make it independent of the decimal point used in the current locale 2012-12-06 10:29:23 +01:00
Klaus Schmidinger
c005465d90 The new option "Setup/Replay/Progress display time" can be used to activate automatically displaying the progress display whenever replay of a recording is started 2012-12-05 11:49:33 +01:00
Klaus Schmidinger
0f7b73016a Fixed creating the edited version directory if a relative file name is given in the call to 'vdr --edit' 2012-12-05 11:12:33 +01:00
Klaus Schmidinger
41f94447d6 When regenerating the index of a recording, the frame rate stored in the info file is now automatically fixed if it differs from the value detected by the frame detector 2012-12-05 10:37:41 +01:00
Klaus Schmidinger
76a9b09e25 The new option Setup/Replay/PauseOnMarkSet can be used to activate automatically going into Pause mode if an editing mark is set during replay 2012-12-05 10:09:45 +01:00
Klaus Schmidinger
cfd9206195 The new option "Setup/Replay/Pause on mark set" can be used to activate automatically going into Pause mode if an editing mark is set during replay 2012-12-05 10:07:12 +01:00
Klaus Schmidinger
551b46cab1 Implemented Play/Pause key 2012-12-04 13:37:59 +01:00
Klaus Schmidinger
85b9c2f370 The SVDRP command HITK now discards any keys if the remote control is currently turned off 2012-12-04 12:13:14 +01:00
Klaus Schmidinger
bcce056292 The new functions cDevice::CanScaleVideo() and cDevice::ScaleVideo() can be used by derived output devices to implement scaling the video to a given size and location 2012-12-04 11:52:58 +01:00
Klaus Schmidinger
1e14401e74 Now always setting the TDT EIT filter, because otherwise when turning on using the transponder time in the Setup menu, it would only be used after the next restart of VDR 2012-12-04 11:15:28 +01:00
Klaus Schmidinger
45a29931cb The '7' and '9' keys now jump to the very beginning or end, respectively, of the recording, even if there is no mark set at that point 2012-12-04 10:09:08 +01:00
Klaus Schmidinger
f61645b4d2 Synchronizing system time to the transponder time is now done using adjtime() in order to avoid discontinuities 2012-12-04 09:34:06 +01:00
Klaus Schmidinger
f1603e9128 Fixed handling lowercase polarization characters in channel definitions if no DiSEqC is used 2012-12-03 14:13:12 +01:00
Klaus Schmidinger
7cd8ab4686 Fixed some spellings in osd.h and svdrp.c 2012-12-03 13:51:23 +01:00
Klaus Schmidinger
6ca541e876 Fixed some #include statements in plugins to use <vdr/...> instead of "vdr/..." 2012-12-03 13:46:46 +01:00
Klaus Schmidinger
780aeab4ff Fixed faulty opening of the Recordings menu when pressing the Play key during normal live viewing mode in case there there is a "last viewed" recording 2012-12-03 13:27:07 +01:00
Klaus Schmidinger
e2796948b2 Fixed calling iconv_close() only with a valid iconv_t value 2012-12-03 09:34:12 +01:00
Klaus Schmidinger
441bf30032 Simplified calculating the PTS offset in cPtsFixer::Fix() and fixed the overflow handling of PCR values 2012-12-02 14:33:06 +01:00
Klaus Schmidinger
a23a13873f Fixed a typo in skins.h 2012-12-02 13:25:08 +01:00
Klaus Schmidinger
b73c83e2a1 Fixed adjusting the DTS values in the cutter, to compensate for dropped B-frames 2012-11-29 15:34:55 +01:00
Klaus Schmidinger
2eadd7d4dd The cutter now only increments the TS continuity counter for packets that have a payload 2012-11-27 08:57:45 +01:00
Klaus Schmidinger
4db9a3b636 Fixed getting the number of editing sequences in case the last sequence has no actual end mark 2012-11-26 09:39:59 +01:00
Klaus Schmidinger
75aee155ea Changed all occurrences of MPEG4 to H264 (pointed out by Sren Moch) 2012-11-25 14:21:15 +01:00
Klaus Schmidinger
21186ced97 Fixed getting only non-video packets in cCuttingThread::GetPendingPackets() 2012-11-25 14:02:47 +01:00
Klaus Schmidinger
c13980e130 Updated the Macedonian OSD texts 2012-11-21 08:56:05 +01:00
Klaus Schmidinger
9fff8b3fe9 Fixed learning remote control keys with the LCARS skin 2012-11-19 12:24:29 +01:00
Klaus Schmidinger
8f9136ecab In order to be able to play TS recordings from other sources, in which there is more than one PMT PID in the PAT, 'int cPatPmtParser::PatPmt(void)' has been changed to 'bool cPatPmtParser::IsPatPmt(int Pid)' 2012-11-19 10:32:31 +01:00
Klaus Schmidinger
56f8752b9a Added notes from HISTORY 2012-11-18 13:21:23 +01:00
Klaus Schmidinger
d46a31d417 Modified editing marks are now written to disk whenever the replay progress display gets hidden 2012-11-18 13:12:31 +01:00
Klaus Schmidinger
3c65130e38 Editing marks can now be moved freely 2012-11-18 13:00:33 +01:00
Klaus Schmidinger
cca2cd35ad Improved editing TS recordings 2012-11-18 12:19:51 +01:00
Klaus Schmidinger
5b4e1fa793 Fixed detecting frames in case there are multiple frames per payload unit 2012-11-13 10:00:00 +01:00
Klaus Schmidinger
e24aa0aa1a Using PATPID macro 2012-11-13 09:11:43 +01:00
Klaus Schmidinger
bc06fdf414 The return type of cMarks::Add() has been changed to void 2012-11-12 14:51:18 +01:00
Klaus Schmidinger
b951ca48a5 Fixed handling the very last entry in a recording index 2012-11-12 14:50:02 +01:00
Klaus Schmidinger
1a1b7234ea Updated the Romanian OSD texts 2012-11-06 12:12:01 +01:00
Klaus Schmidinger
3ad369d249 Fixed frame detection when regenerating the index 2012-11-06 11:03:06 +01:00
Klaus Schmidinger
f98ae169e1 Fixed regenerating the index in case the recording spans over several files (was a side effect of the new frame detection) 2012-11-04 15:27:44 +01:00
Klaus Schmidinger
1e3d1e0f0b Credit to Udo Richter 2012-11-03 11:37:28 +01:00
Klaus Schmidinger
b19e6d071f Fixed shifting editing marks towards the next I-frame in case of PES recordings 2012-11-03 11:25:13 +01:00
Klaus Schmidinger
57a3169013 Improved frame detection by parsing just far enough into the MPEG-4 NAL units to get the necessary information about frames and slices; the initial syncing of the frame detector is now done immediately after the first complete GOP has been seen 2012-11-02 14:35:57 +01:00
Klaus Schmidinger
38d48afad9 Fixed handling timers in case an event is modified and "phased out" while the timer is recording 2012-10-16 08:24:10 +02:00
Klaus Schmidinger
4149053935 Fixed a possible memory leak in SI::StructureLoop::getNextAsPointer() 2012-10-15 12:03:31 +02:00
Klaus Schmidinger
15bb8ca60d If a frame position in the 'marks' file of a recording doesn't point to an I-frame, it will now be shifted towards the next I-frame 2012-10-15 11:23:59 +02:00
Klaus Schmidinger
8c633a5f65 Fixed handling VPS timers in case the running status of an event goes to '1' (not running) and later goes to '4' (running) 2012-10-13 14:19:26 +02:00
Klaus Schmidinger
7f7fa7fd90 Added options to build a 32-bit version of VDR on a 64-bit machine to Make.config.template 2012-10-09 10:43:28 +02:00
Klaus Schmidinger
0aae0d9cf7 Added including the Make.global and Make.config files to the dvbdhffdevice's libhdffcmd/Makefile 2012-10-09 10:23:01 +02:00
Klaus Schmidinger
6b6a372244 Fixed 'make install' to not overwrite existing configuration files 2012-10-09 08:34:57 +02:00
Klaus Schmidinger
43883ee159 Fixed setting the video format in the dvbhdffdevice 2012-10-09 08:24:33 +02:00
Klaus Schmidinger
9f832ef482 Fixed some compiler warnings under gcc version 4.7.1 2012-10-07 11:13:18 +02:00
Klaus Schmidinger
86fc7ba77c Added the UPDATE-2.0.0 file 2012-10-06 13:39:22 +02:00
Klaus Schmidinger
612f696bb7 Changed DTV_DVBT2_PLP_ID to DTV_STREAM_ID in dvbdevice.c to adapt to an incompatible change in DVB API 5.8 2012-10-04 12:44:13 +02:00
Klaus Schmidinger
1e9b16d20b The cThread constructor now has an additional boolean parameter that can be set to true to have this thread run at a lower priority 2012-10-04 12:32:31 +02:00
Klaus Schmidinger
5a407d0e68 cIoThrottle::Engaged() is now also checked in cRemoveDeletedRecordingsThread::Action() 2012-10-03 12:58:02 +02:00
Klaus Schmidinger
90d854c0b4 Pressing the Blue in the main menu during normal live viewing mode now opens the Recordings menu if there is no "last viewed" recording 2012-10-03 10:18:58 +02:00
Klaus Schmidinger
1b7a32472e Pressing the Play key during normal live viewing mode now opens the Recordings menu if there is no "last viewed" recording 2012-10-03 10:11:15 +02:00
Klaus Schmidinger
f1000d75c0 Added 'IgnoreFiles' to RemoveEmptyDirectories() 2012-09-30 13:05:14 +02:00
Klaus Schmidinger
3cc12a401a Added missing decrementing of 'len' in libsi/si.c's String::decodeText() functions 2012-09-29 14:44:20 +02:00
Klaus Schmidinger
3c860ee043 Reactivated stripping control characters from EPG texts and adapted it to UTF-8 2012-09-29 14:30:48 +02:00
Klaus Schmidinger
c5dfaf9681 Moved cleaning up the EPG data and writing the epg.data file into a separate thread (cont'd) 2012-09-29 11:49:11 +02:00
Klaus Schmidinger
62dee6514a Fixed sorting folders before recordings in case of UTF-8 2012-09-29 10:05:49 +02:00
Klaus Schmidinger
6f1577a659 Moved cleaning up the EPG data and writing the epg.data file into a separate thread to avoid sluggish response to user input on slow systems 2012-09-24 13:41:54 +02:00
Klaus Schmidinger
7cdfca45f4 Increased the size of the TS buffer to 5MB and that of the Recorder buffer to 20MB to better handle HD recordings 2012-09-22 11:55:26 +02:00
Klaus Schmidinger
72c03260d7 The new class cIoThrottle is used to allow I/O intense threads to temporarily suspend their activities in case buffers run full 2012-09-22 11:52:33 +02:00
Klaus Schmidinger
e898a28258 Fixed a leftover frame counter in the LCARS skin's replay display after jumping to an editing mark and resuming replay 2012-09-19 11:13:17 +02:00
Klaus Schmidinger
e11908cae6 cPatPmtParser::ParsePmt() now also recognizes stream type 0x81 as "AC3" 2012-09-19 10:46:17 +02:00
Klaus Schmidinger
ed456adc80 Improved detecting frames in MPEG 4 video 2012-09-18 09:57:38 +02:00
Klaus Schmidinger
14eb0d77e9 Fixed some typos 2012-09-17 14:06:12 +02:00
Klaus Schmidinger
e6526ae269 The script given to VDR with the '-r' option is now also called whenever a recording is deleted 2012-09-17 09:03:01 +02:00
Klaus Schmidinger
8423b5ea4c Decreased the ring buffer put/get trigger sizes from 1/3 to 1/10 2012-09-17 08:48:20 +02:00
Klaus Schmidinger
050b7cdebf Implemented instant recording of only the present event 2012-09-15 13:57:39 +02:00
Klaus Schmidinger
c9ac6f5196 Fixed mapping the frame type bits when detecting independent frames in MPEG 4 video 2012-09-14 09:11:18 +02:00
Klaus Schmidinger
cc16e9fdc7 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 2012-09-13 11:18:53 +02:00
Klaus Schmidinger
e775f25add Fixed credits for implementing cDevice::HasInternalCam() 2012-09-12 07:52:25 +02:00
Klaus Schmidinger
eb8fbeba27 Implemented the setup options "OSD/Color key [0123]" 2012-09-09 14:37:15 +02:00
Klaus Schmidinger
3d60eba129 Fixed handling default values for directories 2012-09-09 09:29:15 +02:00
Klaus Schmidinger
e6e9996060 Fixed sluggish response when manipulating editing marks while a cutting thread is running 2012-09-09 09:19:15 +02:00
Klaus Schmidinger
2ceb19e566 Fixed getting the file size and number of frames of ongoing recordings 2012-09-06 10:07:25 +02:00
Klaus Schmidinger
f7a1954fe3 Fixed a long delay at the end when replaying a recording that has stopped recording less than an hour ago 2012-09-05 14:16:52 +02:00
Klaus Schmidinger
e64ab2a2a7 Credits to Dennis Bendlin 2012-09-02 13:38:31 +02:00
Klaus Schmidinger
378a05a96d Changed the semantics of the cReceiver::Activate() function (it is now called with 'false' *after* the receiver has been detached from the device 2012-09-02 09:35:31 +02:00
Klaus Schmidinger
13edfc1382 Implemented FHS support; fixed handling config directory if only -v is given 2012-09-01 14:03:45 +02:00
Klaus Schmidinger
d3b3c43e8f Fixed a race condition when zapping in transfer mode (cont'd) 2012-08-31 11:02:24 +02:00
Klaus Schmidinger
5d0410de3e Added cDevice::HasInternalCam() 2012-08-26 13:59:37 +02:00
Klaus Schmidinger
4986f76b0a Added cDevice::ReadFilter() 2012-08-26 13:09:01 +02:00
Klaus Schmidinger
021778d370 Updated email address of Stefan Huelswitt 2012-08-26 12:45:29 +02:00
Klaus Schmidinger
f99572d84f Fixed a race condition when zapping in transfer mode 2012-08-26 12:37:25 +02:00
Klaus Schmidinger
60d8c61da1 Fixed detecting transfer mode on full featured DVB cards 2012-08-25 12:03:55 +02:00
Klaus Schmidinger
08ab22f987 Added IsUpdate() to the EPG handler interface 2012-08-25 11:31:35 +02:00
Klaus Schmidinger
3f03cfa14d RemoveEmptyDirectories() now ignores dot files 2012-08-21 10:42:01 +02:00
Klaus Schmidinger
da26141015 Updated the Finnish OSD texts 2012-08-21 08:33:26 +02:00
Klaus Schmidinger
cee8341545 Fixed handling control characters in SI data in case of UTF-8 encoded strings 2012-08-21 08:23:13 +02:00
Klaus Schmidinger
f4aabad2ae Fixed sorting recordings in the top level video directory 2012-07-15 10:52:16 +02:00
Klaus Schmidinger
c13dd17505 Credit for Ludi Kaleni 2012-07-14 12:24:31 +02:00
Klaus Schmidinger
06761bf157 Fixed handling group separators when showing channel names with source; initializing channel names with source when setting transponder data 2012-07-14 12:15:00 +02:00
Klaus Schmidinger
45d261fb74 The new setup option "Miscellaneous/Show channel names with source" can be used to turn on adding the source character to channel names whenever they are displayed 2012-06-17 12:27:07 +02:00
Klaus Schmidinger
1912d36f00 Changed some of the colors in the LCARS skin 2012-06-13 13:37:13 +02:00
Klaus Schmidinger
0192c6023f Fixed a crash with instant recordings 2012-06-13 13:03:26 +02:00
Klaus Schmidinger
2a18fb9687 Fixed checking for a visible live programme in case a menu or the channel display is currently open 2012-06-13 11:35:16 +02:00
Klaus Schmidinger
a8dc76a8ac Fixed displaying messages in the LCARS skin 2012-06-13 10:19:15 +02:00
Klaus Schmidinger
13ee94de2c Reduced default font sizes 2012-06-13 09:12:53 +02:00
Klaus Schmidinger
8f39242ba5 Changed foreground colors of messages 2012-06-12 13:15:53 +02:00
Klaus Schmidinger
10b708b79e Changed email address of Andreas Mair 2012-06-12 13:13:43 +02:00
Klaus Schmidinger
478027b5e9 Setting the "broken link" or "TEI" flags when cutting recordings is now suppressed if the editing point merges two seamlessly fitting parts of the same stream 2012-06-10 14:33:36 +02:00
Klaus Schmidinger
6dec09a376 Fixed the type of MBperMinute in cVideoDiskUsage::HasChanged() 2012-06-10 13:46:41 +02:00
Klaus Schmidinger
e595e3b1d4 Fixed handling recording with more than two bonded devices 2012-06-10 13:26:37 +02:00
Klaus Schmidinger
c020b708a5 Fixed several spelling errors 2012-06-09 14:40:26 +02:00
Klaus Schmidinger
440c119b0a Implemented sort mode for recordings 2012-06-09 14:32:29 +02:00
Klaus Schmidinger
0b6c96a515 The LCARS skin's main menu now only displays timers that are actually activated 2012-06-08 10:29:03 +02:00
Klaus Schmidinger
e496fac87a Fixed some copy&paste errors in PLUGINS.html 2012-06-07 22:03:20 +02:00
Klaus Schmidinger
d623479e32 Fixed displaying the number of devices in the LCARS skin in case of non-receiving devices 2012-06-07 11:43:35 +02:00
Klaus Schmidinger
ab62437ac6 Removed the gap from the main menu buttons in the LCARS skin 2012-06-07 10:41:53 +02:00
Klaus Schmidinger
f93fc58f3d Changed the button colors in the LCARS skin to better fit with the rest of the theme 2012-06-07 10:32:35 +02:00
Klaus Schmidinger
8a5764c5e5 Updated the Italian OSD text 2012-06-07 09:39:39 +02:00
Klaus Schmidinger
04f176b248 Added SetComponents() to the EPG handler interface 2012-06-04 10:29:19 +02:00
Klaus Schmidinger
8d8dd8ecbd Added HandledExternally() to the EPG handler interface 2012-06-04 10:19:23 +02:00
Klaus Schmidinger
4bce65eb10 Removed DeleteEvent() from the EPG handler interface (turned out not to be useful) 2012-06-04 09:49:48 +02:00
Klaus Schmidinger
cd4a7e3ef4 Fixed the call to ChannelString() in cSkinLCARSDisplayChannel::SetChannel() 2012-06-04 09:41:06 +02:00
Klaus Schmidinger
bfc2c41c12 Updated the Finnish OSD texts 2012-06-04 09:33:28 +02:00
Klaus Schmidinger
f15bb1f9af Adjusted the default values for OSD and font sizes to better fit HDTV 2012-06-04 09:18:51 +02:00
Klaus Schmidinger
f8fc3b502a Fixed making LCARS the default skin 2012-06-04 09:07:51 +02:00
Klaus Schmidinger
857e29a43d Now scaling down the Transfer Mode indicator bitmap in the LCARS skin in case it doesn't fit with the selected font size 2012-06-04 08:59:10 +02:00
Klaus Schmidinger
e16e8b182f The LCARS skin now only displays devices that can actually receive channels 2012-06-04 08:09:19 +02:00
Klaus Schmidinger
95e180a3e3 Fixed the background color of the Transfer Mode indicator bitmap in the LCARS skin 2012-06-04 07:54:51 +02:00
Klaus Schmidinger
1bb441e699 Added a missing template specification to the c'tor of cSortedTimers 2012-06-03 13:06:15 +02:00
Klaus Schmidinger
3efb79c855 Speeded up opening menus on systems with many (several thousands) of recordings, by caching the information whether a recording is stored on the video directory file system within the cRecording data 2012-06-03 10:03:55 +02:00
Klaus Schmidinger
47e3b4afe2 Changed the color for devices 2012-06-03 09:45:00 +02:00
Klaus Schmidinger
95e5cf0fdd Added a section on 'Standard compliance' to INSTALL 2012-06-03 09:24:21 +02:00
Klaus Schmidinger
56c8464774 Updated the German OSD texts 2012-06-03 09:14:47 +02:00
Klaus Schmidinger
ad5ef06857 Added DeleteEvent() to the EPG handler interface, so that an EPG handler can trigger deleting of an event 2012-06-02 14:10:37 +02:00
Klaus Schmidinger
78e11d8c6f Extended the interface to the script that gets called for recordings, so that in the "edited" case it also provides the name of the original recording 2012-06-02 13:57:41 +02:00
Klaus Schmidinger
ebf8a285b2 Fixed font handling with fontconfig 2.9.0 or newer 2012-06-02 13:41:23 +02:00
Klaus Schmidinger
2de28295fc Now making sure that the "small font" is never larger than the "osd font" 2012-06-02 13:35:54 +02:00
Klaus Schmidinger
eec6b1d818 Finally removed the code marked with __RECORDING_H_DEPRECATED_DIRECT_MEMBER_ACCESS and LEGACY_CRECEIVER 2012-06-02 13:22:53 +02:00
Klaus Schmidinger
68d5e7b548 Implemented LCARS skin 2012-06-02 13:17:16 +02:00
Klaus Schmidinger
4e57f40096 The new class cSortedTimers can be used to quickly get a list of all timers, sorted by their start time 2012-06-02 12:10:36 +02:00
Klaus Schmidinger
7548639021 Fixed setting the recording title for the replay display of old skins 2012-06-02 11:44:14 +02:00
Klaus Schmidinger
41b1160f01 The new function RgbShade() (include osd.h) can be used to generate a brighter or darker version of a given color 2012-06-02 10:44:24 +02:00
Klaus Schmidinger
5ee947a492 Fixed resetting CAMs 2012-05-29 11:19:56 +02:00
Klaus Schmidinger
d2030debc0 cVector::Clear() now reinitializes any previously used members 2012-05-20 14:01:02 +02:00
Klaus Schmidinger
cdaf99121b If a recording has no info file, the 'title' of the recording's info is now set to the recording's name 2012-05-20 13:55:34 +02:00
Klaus Schmidinger
2e393c6e1f Fixed increasing size of cVector; added a note about not using cVector with class objects 2012-05-19 12:32:32 +02:00
Klaus Schmidinger
1378f599c2 Fixed checking for UTF-8 support in cFont::Bidi() 2012-05-19 10:20:16 +02:00
Klaus Schmidinger
c1ddc63fda Implemented taBorder alignment flag 2012-05-17 16:38:50 +02:00
Klaus Schmidinger
4f889749b3 Fixed a mismatched 'delete' in cSchedules::SetEpgDataFileName() 2012-05-13 13:46:56 +02:00
Klaus Schmidinger
5f93700e07 The new member function cSkinDisplayReplay::SetRecording() allows a skin to display more information about the currently played recording 2012-05-12 14:20:41 +02:00
Klaus Schmidinger
2193ea32f6 Making sure setup strings don't contain any newline characters 2012-05-11 11:08:38 +02:00
Klaus Schmidinger
0b4069c91f Removed the "bondedMasterFailed" mechanism from cDvbTuner 2012-05-09 08:33:59 +02:00
Klaus Schmidinger
06b8fe94ef Renamed the function cString::sprintf(const char *fmt, va_list &ap) to vsprintf() 2012-05-08 11:23:56 +02:00
Klaus Schmidinger
4f7523a3a2 Fixed character comparisons in cSubtitleObject::DecodeCharacterString() 2012-05-08 08:27:24 +02:00
Klaus Schmidinger
353233a27e Fixed a possible high CPU load when pausing replay 2012-05-06 11:04:07 +02:00
Klaus Schmidinger
97e242d1b5 The new functions cControl::GetRecording() and cControl::GetHeader() can be used to retrieve information about what the current player is playing 2012-04-28 13:09:42 +02:00
Klaus Schmidinger
109586571a cControl::Control() now has an additional boolean parameter, which can be set to true to get the current player control even if it is hidden 2012-04-28 10:56:05 +02:00
Klaus Schmidinger
299f1f312c Fixed handling menu categories for plugin menus 2012-04-28 10:40:16 +02:00
Klaus Schmidinger
2cd697d146 Credits to Marcus Roscher 2012-04-27 08:25:44 +02:00
Klaus Schmidinger
71d53f2c63 Fixed the SVDRP command UPDR, which didn't update the global recordings list 2012-04-26 10:48:18 +02:00
Klaus Schmidinger
b5ddaedfb3 Fixed cDevice::StillPicture(), making sure it doesn't call the derived class's function if no buffer has been allocated 2012-04-26 10:28:39 +02:00
Klaus Schmidinger
fb3e5ca4ee The Timers list is now marked as modified whenever a recording starts or ends 2012-04-25 11:14:12 +02:00
Klaus Schmidinger
53d0825515 OSD and skin are now reinitialized after a plugin setup page has been confirmed 2012-04-24 09:19:48 +02:00
Klaus Schmidinger
28685f9895 A cOsdMenu can now handle skins that display different numbers of items in the various menu categories 2012-04-23 09:47:26 +02:00
Klaus Schmidinger
3d32b07862 The disk usage is no longer automatically added to the title of the main and "Recordings" menus 2012-04-23 09:07:55 +02:00
Klaus Schmidinger
09e58657a1 Added a function to get a cRecordControl for a given cTimer 2012-04-22 10:44:20 +02:00
Klaus Schmidinger
f822cdf261 The new setup option "DVB/Standard compliance" can be used to switch between different variations of the DVB standard 2012-04-15 10:52:34 +02:00
Klaus Schmidinger
c650904794 Fixed a typo 2012-04-09 09:30:52 +02:00
Klaus Schmidinger
170e05e1e6 Skins can now inquire the menu category for which their cSkinDisplayMenu is currently being used 2012-04-08 11:52:56 +02:00
Klaus Schmidinger
c24a891568 Fixed EPG scan on systems with only a single DVB device that use software output 2012-04-07 14:41:39 +02:00
Klaus Schmidinger
4e8dedb7ad Now limiting the number of characters of a channel's (short) name to 16 in the schedules menus 2012-04-06 12:35:39 +02:00
Klaus Schmidinger
d5aa5f7294 The new function cDevice::DeviceType() returns a string identifying the type of the given device 2012-04-04 09:52:15 +02:00
Klaus Schmidinger
0ac4d23cab Added some comments 2012-04-01 11:36:10 +02:00
Klaus Schmidinger
01c55ad694 Fixed getting the maximum short channel name length in case there are no short names at all 2012-04-01 09:28:39 +02:00
Klaus Schmidinger
8f628ceb8c Fixed a typo 2012-03-31 10:18:29 +02:00
Klaus Schmidinger
16967a231e Fixed formatting 2012-03-31 10:15:26 +02:00
Klaus Schmidinger
1f5cf1db58 Fixed cPixmapMemory::DrawEllipse() for quadrants -1 and -4 2012-03-28 10:43:15 +02:00
Klaus Schmidinger
55b6ab1dc6 Fixed handling IDLEPRIORITY in cDvbDevice::ProvidesChannel() 2012-03-25 10:44:04 +02:00
Klaus Schmidinger
bf970b5bf4 Reverted some improvements to Make.config.template 2012-03-20 11:22:30 +01:00
Klaus Schmidinger
adce2fe42d Updated the Italian OSD texts 2012-03-19 08:16:33 +01:00
Klaus Schmidinger
6504e55b76 Fixed reduced bpp support for DVB subtitles 2012-03-16 12:01:31 +01:00
Klaus Schmidinger
c8b0ee3289 Added missing channel locking to cEIT 2012-03-14 10:41:48 +01:00
Klaus Schmidinger
cd676fda36 Moved setting LC_NUMERIC further up to make sure any floating point numbers use a decimal point 2012-03-14 09:12:58 +01:00
Klaus Schmidinger
d62f710413 Fixed a memory leak in cSubtitleRegion::UpdateTextData() 2012-03-13 15:38:00 +01:00
Klaus Schmidinger
2781c337b1 No longer using GetFont() (which is not thread safe) in cSubtitleRegion::UpdateTextData() 2012-03-13 15:30:47 +01:00
Klaus Schmidinger
4bc2a502a4 No longer using GetFont() (which is not thread safe) in the 'osddemo' plugin 2012-03-13 15:28:15 +01:00
Klaus Schmidinger
71f02e4f80 When estimating the remaining disk space (in hours), the average data rate of all existing recordings is now taken into account 2012-03-13 13:22:06 +01:00
Klaus Schmidinger
845d6f36c1 When toggling a timer between "Single" and "Repeating", the previous setting is now retained in case the user toggles back to the original value 2012-03-13 11:27:54 +01:00
Klaus Schmidinger
4dcbf19ea2 The new function cDevice::DeviceName() returns a string identifying the name of the given device 2012-03-13 10:20:42 +01:00
Klaus Schmidinger
ed10aaf68b Improved fast forwarding to the end of a timeshift recording 2012-03-12 14:53:59 +01:00
Klaus Schmidinger
9fa1654d04 Updated the Estonian OSD texts 2012-03-12 10:03:55 +01:00
Klaus Schmidinger
66639dc187 Made the "overloaded-virtual" warning an error to detect hidden overloaded virtual functions 2012-03-11 16:01:52 +01:00
Klaus Schmidinger
d43ab41c02 Deactivated definition of __RECORDING_H_DEPRECATED_DIRECT_MEMBER_ACCESS (recording.h) and LEGACY_CRECEIVER (receiver.h) 2012-03-11 15:30:19 +01:00
Klaus Schmidinger
2050f7ac7b Added new parameter LiveView to ChannelSwitch() 2012-03-11 14:50:04 +01:00
Klaus Schmidinger
ea16f64773 Adapted menu column widths of 'skincurses' to the wider HD OSD sizes 2012-03-11 14:44:49 +01:00
Klaus Schmidinger
7958688ae1 Removed the obsolete typedef tI18nPhrase 2012-03-11 14:08:13 +01:00
Klaus Schmidinger
42b40aecf5 Removed the obsolete function cPlugin::RegisterI18n() 2012-03-11 13:56:35 +01:00
Klaus Schmidinger
526310bdcc Dropped the meanwhile obsolete script 'i18n-to-gettext' 2012-03-11 13:38:06 +01:00
Klaus Schmidinger
a05b544414 Replaced some non-ASCII characters 2012-03-11 13:34:12 +01:00
Klaus Schmidinger
c174dc0f5b The channel name column in the "What's on now/next" menu now adjusts its width to display the full short name of each channel 2012-03-11 13:29:06 +01:00
Klaus Schmidinger
2be049f5f7 Fixed some typos in HISTORY and CONTRIBUTORS 2012-03-11 11:18:56 +01:00
Klaus Schmidinger
daf25f300d Changed the Green button in the "Edit timer" menu from "Once" to "Single" 2012-03-11 10:46:17 +01:00
Klaus Schmidinger
5cf69d18ba Updated the Finnish OSD texts 2012-03-11 10:42:13 +01:00
Klaus Schmidinger
860786f809 Added a new plugin interface for implementing EPG handlers 2012-03-10 15:10:43 +01:00
Klaus Schmidinger
bc06fc2ce3 Changed displaying modified sections 2012-03-09 09:25:18 +01:00
Klaus Schmidinger
0863c5b065 Revoked "If the first event in a schedule has a table id of 0x00, any incoming EIT data for that schedule from the DVB stream will be completely ignored" 2012-03-08 15:06:58 +01:00
Klaus Schmidinger
baf473aedf The Green button in the "Edit timer" menu can now be used to toggle between single shot and repeating timers 2012-03-08 13:51:00 +01:00
Klaus Schmidinger
120fb54d49 Fixed checking pids in case a channel has only Dolby Digital audio 2012-03-08 10:04:16 +01:00
Klaus Schmidinger
9b68c100b2 Fixed parsing channel data in case the audio pid is 0 2012-03-08 09:37:17 +01:00
Klaus Schmidinger
57f58a1546 Removed the obsolete function cEITScanner::UsesDevice(); added new parameter LiveView to cStatus::ChannelSwitch() 2012-03-07 14:39:38 +01:00
Klaus Schmidinger
680b1b8f87 Removed the calls to EITScanner.UsesDevice(this) from dvb[hs]ddevice.c 2012-03-07 14:00:28 +01:00
Klaus Schmidinger
40d06559bb Fixed selecting devices for the EPG scan in case the primary device is bonded with an other one 2012-03-07 13:46:13 +01:00
Klaus Schmidinger
61e420bdf6 Fixed switching devices to the transponders of VPS recordings in case there are only bonded devices 2012-03-06 12:32:38 +01:00
Klaus Schmidinger
a57acf570d Improved displaying signal strength and quality in the ST:TNG skin's channel display 2012-03-05 12:05:53 +01:00
Klaus Schmidinger
90f5779228 Made the ST:TNG skin the default in case the user selected skin is not available 2012-03-05 10:46:26 +01:00
Klaus Schmidinger
f1441cebf6 Improved displaying the play mode in the ST:TNG skin 2012-03-05 10:35:16 +01:00
Klaus Schmidinger
55f0978c32 Added some missing member initializations in cBitmap 2012-03-05 10:34:49 +01:00
Klaus Schmidinger
4bdc69eb92 Fixed a possible race condition with the SVDRP commands CLRE and PUTE 2012-03-04 12:05:56 +01:00
Klaus Schmidinger
f35e4acf88 Toggling a mark now restarts the timeout of the replay progress display 2012-03-03 15:03:09 +01:00
Klaus Schmidinger
31cca0c85b The replay progress display is now turned on whenever a mark is toggled (not only when one is set) 2012-03-03 14:49:59 +01:00
Klaus Schmidinger
0127bf264c Fixed the German translation of "VDR will shut down in %s minutes" 2012-03-03 14:06:14 +01:00
Klaus Schmidinger
78c1fee7f8 Now checking for NULL in cOsd::AddPixmap() 2012-03-03 13:25:22 +01:00
Klaus Schmidinger
0432198e0b Moved the call to cStatus::MsgChannelSwitch(this, 0) to the beginning of cDevice::SetChannel() 2012-03-03 11:51:32 +01:00
Klaus Schmidinger
c5eb60f07a Fixed handling OSD color button texts in case a menu item has texts of its own 2012-03-02 15:49:57 +01:00
Klaus Schmidinger
e7b0f909ff Fixed some typos 2012-03-02 10:56:49 +01:00
Klaus Schmidinger
1e3f6d6da2 Replaced min(max()) calls with the new function constrain() 2012-03-02 10:51:46 +01:00
Klaus Schmidinger
c8808a854b Added a Query parameter to cDevice::GetDevice(), so that devices can be queried without side effects when zapping 2012-03-02 10:43:26 +01:00
Klaus Schmidinger
28bc34b245 Revised priority handling to allow receivers with a priority that is lower than that of live viewing 2012-03-02 10:19:00 +01:00
Klaus Schmidinger
a188928e6e Added support for automatically selecting subtitles when playing old PES recordings made with the subtitles plugin 2012-02-28 09:28:54 +01:00
Klaus Schmidinger
d2d4dacf5b Added a missing blurb 2012-02-27 12:40:37 +01:00
Klaus Schmidinger
f2d8f17018 Removed an obsolete command line option 2012-02-27 12:35:45 +01:00
Klaus Schmidinger
083ee1f74e The code for the RCU remote control unit has been moved into a separate plugin named "rcu" 2012-02-27 12:30:45 +01:00
Klaus Schmidinger
6d34a8a7a0 Fixed handling overlapping timers in case a VPS timer with higher priority needs to interrupt a timer with lower priority 2012-02-27 10:21:28 +01:00
Klaus Schmidinger
cd0f403bbc Added some typecasts to silence gcc compiler warnings 2012-02-26 14:02:17 +01:00
Klaus Schmidinger
aaca30f2ac If the first event in a schedule has a table id of 0x00, any incoming EIT data for that schedule from the DVB stream will be completely ignored 2012-02-25 15:52:16 +01:00
Klaus Schmidinger
d0cd92a455 Fixed getting the video aspect ratio for scaling subtitles (cont'd) 2012-02-25 14:47:44 +01:00
Klaus Schmidinger
42c42b554a Removed the "PrimaryLimit" 2012-02-25 14:44:43 +01:00
Klaus Schmidinger
f2c396ee07 Fixed a typo 2012-02-25 11:19:53 +01:00
Klaus Schmidinger
0206157558 Fixed getting the video aspect ratio for scaling subtitles 2012-02-24 11:27:04 +01:00
Klaus Schmidinger
1b104953ae Removed obsolete code 2012-02-23 09:20:36 +01:00
Klaus Schmidinger
a3d37dfc71 Fixed upscaling cBitmaps with anti-aliasing 2012-02-22 17:15:31 +01:00
Klaus Schmidinger
a949b9c7d2 Fixed handling subtitle color palettes on channels where subtitles appear "word by word" 2012-02-22 11:25:57 +01:00
Klaus Schmidinger
7519c21a51 Updated the Finnish OSD texts 2012-02-21 12:15:43 +01:00
Klaus Schmidinger
7685196e60 Updated the Estonian OSD texts 2012-02-21 11:43:17 +01:00
Klaus Schmidinger
42d3d99ae1 Revoked "Fixed a possible deadlock in time shift mode" 2012-02-21 11:36:49 +01:00
Klaus Schmidinger
1f22931a77 Changed the return value of cTimer::SetFile() to 'void' 2012-02-20 15:53:33 +01:00
Klaus Schmidinger
f6cdae50ef Added several cTimer::Set...() functions 2012-02-20 15:37:01 +01:00
Klaus Schmidinger
5b2bdf2049 Fixed getting the subsystem ids of DVB devices in case they have been rearranged via udev rules 2012-02-20 12:54:01 +01:00
Klaus Schmidinger
343ca17b17 Increased the average character estimate for calculating tab positions in skins, to better suit wide fonts 2012-02-20 11:53:47 +01:00
Klaus Schmidinger
73314207dc The fps value for channels where it differs from the default is now set correctly when pausing live video 2012-02-19 14:34:50 +01:00
Klaus Schmidinger
23ec57d822 Fixed switching into time shift mode when pausing live video 2012-02-19 11:50:20 +01:00
Klaus Schmidinger
50e09d1232 Fixed a possible deadlock in time shift mode 2012-02-18 11:22:01 +01:00
Klaus Schmidinger
882691e32f cReadDir::Next() now skips directory entries "." and ".." 2012-02-17 14:02:13 +01:00
Klaus Schmidinger
f1eecdeb1c The DVB device adapters/frontends are now probed by scanning the /dev/dvb directory instead of looping through adapter/frontend numbers 2012-02-17 12:38:57 +01:00
Klaus Schmidinger
6a93cfe0c9 Removed code stub for obsolete SVDRP command MOVT 2012-02-16 12:38:48 +01:00
Klaus Schmidinger
6c7b28705e The SVDRP command DELR now won't delete a recording that is currently being edited 2012-02-16 12:29:27 +01:00
Klaus Schmidinger
26d2fe51d1 An ongoing editing process is now canceled if either the original or the edited version of the recording is deleted from the Recordings menu 2012-02-16 12:20:46 +01:00
Klaus Schmidinger
3432b2638c Updated storage requirements 2012-02-16 10:23:32 +01:00
Klaus Schmidinger
7a8cadd393 Removed superfluous calls to SetVideoFormat() from device constructors 2012-02-15 13:22:03 +01:00
Klaus Schmidinger
825dd70bc4 Fixed handling the PrimaryLimit when requesting a device for live viewing 2012-02-15 12:22:21 +01:00
Klaus Schmidinger
8dc6eb0cda Added some missing 'const' to cDevice 2012-02-14 14:47:59 +01:00
Klaus Schmidinger
63e2507b15 Credits to Ralf Schueler for some backports to version 1.6.0-3 2012-02-14 14:40:15 +01:00
Klaus Schmidinger
b74cb56d2b Added a missing '.' after the month in VPS strings 2012-02-13 15:00:24 +01:00
Klaus Schmidinger
5e16ed7aab No longer using tabs as delimiter in the EPG bugfix log 2012-02-13 14:54:42 +01:00
Klaus Schmidinger
adc88b3790 Reactivated "Fixed handling symbolic links in cRecordings::ScanVideoDir()" 2012-02-13 11:49:43 +01:00
Klaus Schmidinger
573449e935 Improved handling subtitles of BBC channels 2012-02-13 09:49:33 +01:00
Klaus Schmidinger
1e74f596b2 Fixed a possible crash when canceling VDR while displaying subtitles, and the primary device is no longer available 2012-02-12 15:45:59 +01:00
Klaus Schmidinger
cace8bed8d Fixed selecting the primary device for receiving the live viewing channel in case it is bonded with an other device and has no receiver attached to it 2012-02-12 12:45:35 +01:00
Klaus Schmidinger
2772964f99 The epg.data file is now read in a separate thread 2012-02-11 13:41:29 +01:00
Klaus Schmidinger
b3891d8319 Symbolic links are no longer resolved in cRecordings::ScanVideoDir() 2012-01-26 10:04:01 +01:00
Klaus Schmidinger
9e7a2134b4 Fixed cRecording::LengthInSeconds(), which wrongfully rounded the result to full minutes 2012-01-25 09:34:24 +01:00
Klaus Schmidinger
fbe4f2a056 Some improvements to the Makefiles 2012-01-18 12:40:17 +01:00
Klaus Schmidinger
6469b666bd Fixed some typos 2012-01-18 12:12:49 +01:00
Klaus Schmidinger
d3bf039f3f Fixed a crash in a plugin using cDeviceHook when VDR ends 2012-01-18 10:51:01 +01:00
Klaus Schmidinger
33342fb17b Fixed the return type of cMyDeviceHook::DeviceProvidesTransponder() in PLUGINS.html 2012-01-18 09:09:30 +01:00
Klaus Schmidinger
f8d0f77307 Fixed asserting there is a live programme if the primary device is bonded with a device that starts a recording on a different band 2012-01-17 15:37:52 +01:00
Klaus Schmidinger
9cd835b35e Fixed indentation 2012-01-16 16:57:00 +01:00
Klaus Schmidinger
d2f4fbb0b2 Updated the Finnish OSD texts 2012-01-16 15:54:25 +01:00
Klaus Schmidinger
f1b0011a10 Improved the way DVB_API_VERSION is checked 2012-01-16 12:53:38 +01:00
Klaus Schmidinger
41f185b000 Fixed a high load in case a transponder can't be received 2012-01-16 12:43:33 +01:00
Klaus Schmidinger
98a443cc61 Revoked "Fixed handling symbolic links in cRecordings::ScanVideoDir()" 2012-01-16 12:09:38 +01:00
Klaus Schmidinger
3a0f7d314a Updated the Italian OSD texts 2012-01-16 09:50:03 +01:00
Klaus Schmidinger
2d3fa1416f Fixed frozen live view with device bonding in case the bonded master is used for live viewing 2012-01-15 14:31:47 +01:00
Klaus Schmidinger
c36c65416e Fixed wrongfully displaying the length of a recording in the title of the replay progress display 2012-01-15 11:12:58 +01:00
Klaus Schmidinger
81f349bf58 Implemented setup option "Replay/Show remaining time" 2012-01-14 13:20:16 +01:00
Klaus Schmidinger
5f86af093e Added option -N to the msgmerge call in the Makefile 2012-01-14 13:02:21 +01:00
Klaus Schmidinger
262f20eaa0 Changed IndexToHMSF() so that it can handle negative Index values 2012-01-14 13:00:47 +01:00
Klaus Schmidinger
a7d8c92ddc Removed '998 QAM_AUTO' 2012-01-14 10:45:33 +01:00
Klaus Schmidinger
9b754a6729 The parameters that are only used by "second generation" delivery systems (DVB-S2 and DVB-T2) are no longer written into channels.conf for "first generation" delivery systems 2012-01-13 12:27:18 +01:00
Klaus Schmidinger
64f23b27d9 Added member functions Adapter() and Frontend() to cDvbDevice 2012-01-13 11:41:04 +01:00
Klaus Schmidinger
0730f502c5 BIDI support now checks at runtime whether the system runs with UTF-8 2012-01-13 09:45:08 +01:00
Klaus Schmidinger
ea6c6d370e Change Frank Neumann's email address 2012-01-13 09:38:20 +01:00
Klaus Schmidinger
4bd9756caf Fixed the SVDRP command CLRE for a single channel in case there are events that have a timer 2012-01-12 15:11:50 +01:00
Klaus Schmidinger
70d4e5105b Fixed a possible memory corruption in cTsToPes::GetPes() 2012-01-12 12:25:54 +01:00
Klaus Schmidinger
44da06f384 Fixes from Rolf Ahrenberg 2012-01-12 08:43:52 +01:00
Klaus Schmidinger
303e85e3a3 Added the required driver version for DVB-T2 2012-01-12 08:38:36 +01:00
Klaus Schmidinger
de4780fad2 Fixed cConfig::Load() for g++ version 4.7.0 2012-01-11 15:41:55 +01:00
Klaus Schmidinger
875aebe14b Added support for handling DVB-T2 transponders 2012-01-11 13:22:51 +01:00
Klaus Schmidinger
ed118b079f Added support for DVB-T2 to libsi 2012-01-11 11:38:00 +01:00
Klaus Schmidinger
48de95f5d2 Fixed cListBase::Move() in case From and To are equal 2012-01-11 11:23:38 +01:00
Klaus Schmidinger
73ccde16e8 Fixed cDvbSubtitleConverter::SetOsdData() 2012-01-11 10:37:11 +01:00
Klaus Schmidinger
4d30033936 cEvent::FixEpgBugs() now replaces any newline characters in stream component descriptions with blanks 2012-01-08 15:40:17 +01:00
Klaus Schmidinger
2b3821cc88 cDvbTuner::ExecuteDiseqc() now makes sure only one tuner sends SCR commands at any given time 2012-01-08 14:32:39 +01:00
Klaus Schmidinger
acaa549404 Updated the Hungarian language texts 2012-01-08 14:15:24 +01:00
Klaus Schmidinger
d661735e15 Added option -o to pic2mpg 2012-01-08 13:29:01 +01:00
Klaus Schmidinger
e197b04e4d Added support for devices with more than one delivery system per frontend 2012-01-08 09:27:59 +01:00
Klaus Schmidinger
76b6ae2cab Added support for HbbTV to libsi 2011-12-10 15:51:35 +01:00
Klaus Schmidinger
96160f91db Updated the Finnish OSD texts 2011-12-10 15:25:52 +01:00
Klaus Schmidinger
8a49851b05 Added HasSnr to the DEBUG_SIGNALQUALITY output in cDvbTuner::GetSignalQuality() 2011-12-10 15:01:23 +01:00
Klaus Schmidinger
b25efc415e Removed a redundant NULL check in cDvbSpuDecoder::setTime() 2011-12-10 14:40:16 +01:00
Klaus Schmidinger
da352e63c6 Removed redundant memset() in the ctor of cSatCableNumbers 2011-12-10 14:37:55 +01:00
Klaus Schmidinger
7d590428ec Removed redundant thanks 2011-12-10 14:31:00 +01:00
Klaus Schmidinger
4dd52ffe39 Fixed a memory leak in cRecordings::ScanVideoDir() in case there are too many link levels 2011-12-10 14:29:38 +01:00
Klaus Schmidinger
773c4419ea Fixed handling symbolic links in cRecordings::ScanVideoDir() 2011-12-10 14:14:58 +01:00
Klaus Schmidinger
97d47b6a91 Fixed bonding more than two devices 2011-12-10 13:49:04 +01:00
Klaus Schmidinger
96647c3c3d Removed the '.pl' suffix from svdrpsend.pl 2011-12-04 21:46:30 +01:00
Klaus Schmidinger
8db58ff99e Fixed a crash with malformed SI data 2011-12-04 15:09:45 +01:00
Klaus Schmidinger
04e5380723 Replaced all calls to sleep() with cCondWait::SleepMs() 2011-12-04 14:53:41 +01:00
Klaus Schmidinger
989fa21a21 Added file name and line number to LOG_ERROR_STR() 2011-12-04 14:48:53 +01:00
Klaus Schmidinger
7584780dbf Changed the default location for the LIRC socket to /var/run/lirc/lircd 2011-12-04 14:43:13 +01:00
Klaus Schmidinger
a613816050 Removed the '.pl' suffix from all scripts 2011-12-04 14:36:37 +01:00
Klaus Schmidinger
7ab9d4fcfd Removed 'Requires: freetype2 fontconfig' from the vdr.pc target 2011-12-04 14:12:49 +01:00
Klaus Schmidinger
c298ed0330 Added generating a pkg-config file to the Makefile 2011-12-04 14:11:20 +01:00
Klaus Schmidinger
abb95de8a9 Implemented the SVDRP command UPDR 2011-12-04 13:58:33 +01:00
Klaus Schmidinger
fe0a011611 Fixed several spelling errors 2011-12-04 13:40:52 +01:00
Klaus Schmidinger
ada6766c19 Fixed a crash when deleting a recording while cutting it 2011-12-04 12:56:55 +01:00
Klaus Schmidinger
9eeecef612 Fixed handling images that are rotated by 180 degrees in pic2mpg 2011-12-04 12:50:00 +01:00
Klaus Schmidinger
a49ce434f6 Implemented "Device Bonding" 2011-12-04 12:45:26 +01:00
Klaus Schmidinger
a964269fe9 Implemented 'occupied' for devices 2011-10-16 14:02:34 +02:00
Klaus Schmidinger
ae8627e6fc Fixed setting the start time of an edited recording 2011-10-09 16:12:21 +02:00
Klaus Schmidinger
583f840990 Added note about L and R polarization 2011-09-25 13:51:34 +02:00
Klaus Schmidinger
0f320c7d88 Added cap_net_raw to the capabilities that are not dropped 2011-09-23 13:11:36 +02:00
Klaus Schmidinger
0ecf6b00d4 Fixed handling DVB subtitles and implemented decoding textual DVB subtitles 2011-09-18 11:36:38 +02:00
Klaus Schmidinger
b1f6b586d4 Added device number selection to scr.conf 2011-09-17 14:13:31 +02:00
Klaus Schmidinger
b40cd95dcc Added random timeout to avoid SCR device interference 2011-09-17 12:53:46 +02:00
Klaus Schmidinger
b228086355 Disabled SCR code in cDvbTuner's dtor 2011-09-17 11:41:01 +02:00
Klaus Schmidinger
ffaf10c3f3 Added a note about rounding 2011-09-17 10:41:00 +02:00
Klaus Schmidinger
fea8c9a64f Added reference to EN50494 2011-09-17 10:10:54 +02:00
Klaus Schmidinger
7d637b588f The SVDRP command LSTC now also accepts channel IDs 2011-09-11 14:49:33 +02:00
Klaus Schmidinger
56bdd34c07 Updated sources.conf 2011-09-11 14:32:29 +02:00
Klaus Schmidinger
413a0e6373 VDR now supports "Satellite Channel Routing" (SCR) 2011-09-11 14:09:03 +02:00
Klaus Schmidinger
78e89efee8 The DiSEqC codes are now copied in the call to cDiseqc::Execute() 2011-09-10 13:55:08 +02:00
Klaus Schmidinger
873b14ac0c Fixed scaling subtitles in case the primary device's GetVideoSize() function doesn't return actual values 2011-09-10 09:45:55 +02:00
Klaus Schmidinger
699fd6d5d7 Detecting frames in case the Picture Start Code or Access Unit Delimiter extends over TS packet boundaries is now done by locally skipping TS packets in cFrameDetector 2011-09-04 13:09:06 +02:00
Klaus Schmidinger
96061c5b40 Revoked the changes to cFrameDetector that have been introduced in version 1.7.19 2011-09-04 10:13:14 +02:00
Klaus Schmidinger
6c110a7272 Fixed detecting frames on radio channels 2011-08-27 14:27:22 +02:00
Klaus Schmidinger
d2342ae2ef The dvbsddevice plugin now supports the new option --outputonly 2011-08-27 11:40:21 +02:00
Klaus Schmidinger
6700e772e5 The Recordings menu now displays the length (in hours:minutes) of each recording 2011-08-27 11:14:54 +02:00
Klaus Schmidinger
ac5f296f20 The SVDRP command HITK now accepts multiple keys 2011-08-27 10:43:18 +02:00
Klaus Schmidinger
048d0df54a The Audio and Subtitles options are now available through the Green and Yellow keys in the Setup/DVB menu 2011-08-27 09:55:35 +02:00
Klaus Schmidinger
e4892e536c Moved ProvidesEIT() check further up 2011-08-26 13:10:00 +02:00
Klaus Schmidinger
6b5e9f56ed Implemented cDevice::ProvidesEIT() 2011-08-26 13:03:14 +02:00
Klaus Schmidinger
2d3cb812fb Moved scanning tpid back to where Rolf Ahrenberg's patch originally did it 2011-08-26 12:44:21 +02:00
Klaus Schmidinger
d00941c1fd The subtitle PIDs are now stored in the channels.conf file as an extension to the TPID field 2011-08-21 14:18:37 +02:00
Klaus Schmidinger
dac837d38d Implemented cRecording::NumFrames() and cRecording::LengthInSeconds() 2011-08-21 13:47:07 +02:00
Klaus Schmidinger
97ad2fa95d Direct access to several class members is now deprecated 2011-08-21 11:34:30 +02:00
Klaus Schmidinger
e5d2240bbb The start time of an edited recording is now set to the time of the first editing mark 2011-08-20 10:09:05 +02:00
Klaus Schmidinger
12f60ee151 Now initializing Setup.InitialChannel to an empty string 2011-08-20 09:25:48 +02:00
Klaus Schmidinger
3a19051c76 Fixed detecting frames for channels that split frames into several payloads 2011-08-20 09:07:26 +02:00
Klaus Schmidinger
f4007c7ff3 cTimeMs is no longer initialized to the current time if the value given to the constructor is negative 2011-08-15 14:13:42 +02:00
Klaus Schmidinger
4a9fd9b097 Implemented command line options --filesize and --split 2011-08-15 12:45:40 +02:00
Klaus Schmidinger
9ebdb61995 Fixed maximum video file size 2011-08-15 10:46:20 +02:00
Klaus Schmidinger
4bbbd89ee9 Fixed language code entry for Portuguese 2011-08-15 10:05:19 +02:00
Klaus Schmidinger
adb92a1999 The cutter now sets the 'broken link' flag for MPEG2 TS recordings 2011-08-15 09:52:43 +02:00
Klaus Schmidinger
fc4bed511d Added a mutex to protect cOsd::Osds from simultaneous access from different threads 2011-08-15 09:37:54 +02:00
Klaus Schmidinger
c13d6e6070 The pic2mpg script of the 'pictures' plugin now generates HD images 2011-08-14 13:50:26 +02:00
Klaus Schmidinger
5e2f8e7613 Made frame type buffer size a multiple of TS_SIZE 2011-08-13 14:56:36 +02:00
Klaus Schmidinger
ff866ef828 Made DELETENULL() thread safe 2011-08-13 13:38:09 +02:00
Klaus Schmidinger
da8cde8615 Fixed some crashes in subtitle display 2011-08-13 13:34:32 +02:00
Klaus Schmidinger
06513252b1 Marked some comments for doxygen 2011-08-13 12:51:23 +02:00
Klaus Schmidinger
3000906715 The length (as number of frames) of a recording's index file can now be determined by a call to cIndexFile::GetLength() 2011-08-13 12:45:42 +02:00
Klaus Schmidinger
ef611229f3 Implemented static cIndexFile::IndexFileName() 2011-08-13 11:16:41 +02:00
Klaus Schmidinger
67e7f93d29 Now scanning new transponders before old ones, to make sure transponder changes are recognized 2011-08-12 14:37:25 +02:00
Klaus Schmidinger
d2e0898d64 Reduced frame type buffer to 1KB 2011-08-12 14:14:57 +02:00
Klaus Schmidinger
ce14873e89 cStringList::Sort() can now be called with a boolean parameter that controls case insensitive sorting 2011-08-12 14:05:56 +02:00
Klaus Schmidinger
b863d9a702 Fixed handling the channelID in cMenuEditChanItem 2011-08-12 13:21:42 +02:00
Klaus Schmidinger
2c2ed53adf Fixed distortions that happened when splitting recording into several files 2011-08-07 13:49:32 +02:00
Klaus Schmidinger
0f8495f1d8 Added a mechanism to defer timer handling in case of problems 2011-08-06 13:20:07 +02:00
Klaus Schmidinger
15007f76cf Fixed a typo 2011-08-06 11:27:37 +02:00
Klaus Schmidinger
5cfd39dfca Fixed handling DiSEqC codes 2011-08-06 10:45:05 +02:00
Klaus Schmidinger
69aa850d1e Increased MAXCAIDS to 12 2011-08-06 09:57:25 +02:00
Klaus Schmidinger
570656b073 Fixed the return value of the svdrpsend.pl script in case of an error 2011-08-06 09:51:09 +02:00
Klaus Schmidinger
fdd82cd972 cSkins::Message() now blocks calls from background threads 2011-08-06 09:41:57 +02:00
Klaus Schmidinger
4278458e69 Now checking Setup.InitialChannel for NULL before using it 2011-07-31 13:48:49 +02:00
Klaus Schmidinger
404124eca4 The isnumber() function now checks the given pointer for NULL 2011-07-31 13:23:31 +02:00
Klaus Schmidinger
ba5bae0d1c Fixed handling rotated images 2011-07-23 14:29:18 +02:00
Klaus Schmidinger
c066f803f1 Added some missing 'const' to tChannelID 2011-06-21 21:45:08 +02:00
Klaus Schmidinger
8ee2c5e293 Adjusted release date 2011-06-19 09:53:58 +02:00
Klaus Schmidinger
b2812b7e71 Added support for "content identifier descriptor" and "default authority descriptor" to 'libsi' 2011-06-15 21:29:03 +02:00
Klaus Schmidinger
263dc29508 The initial channel is now stored by the channel ID in the setup.conf file 2011-06-13 14:48:41 +02:00
Klaus Schmidinger
61a9b09403 Keeping signal display from slowing things down during heavy zapping 2011-06-12 15:20:59 +02:00
Klaus Schmidinger
edb85b014c Fixed signal display in case of a message 2011-06-12 14:40:50 +02:00
Klaus Schmidinger
b0fd7ed933 Fixed overwriting the fps value in a recording's info file 2011-06-12 14:24:09 +02:00
Klaus Schmidinger
72d342ce02 Fixed detecting frames in case the Picture Start Code or Access Unit Delimiter extends over TS packet boundaries (cont'd) 2011-06-12 14:06:11 +02:00
Klaus Schmidinger
098d21117e Improved signal strength and quality handling (cont'd) 2011-06-11 14:34:24 +02:00
Klaus Schmidinger
c90e87d71f The frame detector now only starts collecting PTS values after it has seen the first I-frame 2011-06-11 11:40:18 +02:00
Klaus Schmidinger
b226ab46d6 Fixed detecting frames in case the Picture Start Code or Access Unit Delimiter extends over TS packet boundaries 2011-06-11 11:28:13 +02:00
Klaus Schmidinger
1afb2cf1c2 Improved signal strength and quality handling 2011-06-05 16:22:51 +02:00
Klaus Schmidinger
e572cbda47 Implemented signal strength and quality handling 2011-06-02 13:28:42 +02:00
Klaus Schmidinger
40278ec121 Added some missing braces 2011-05-22 15:18:59 +02:00
Klaus Schmidinger
d7c07ecbfd Fixed a possible race condition in cDiseqc::Execute() 2011-05-22 10:51:03 +02:00
Klaus Schmidinger
7978112850 Better avoiding the primary device for recording 2011-05-22 09:42:57 +02:00
Klaus Schmidinger
7c1a04d7c3 Fixed a typo 2011-05-21 22:07:08 +02:00
Klaus Schmidinger
80e3c06fa7 Subtitle PIDs are now also decrypted 2011-05-21 15:24:10 +02:00
Klaus Schmidinger
8cb8e6333a The primary device is now only avoided for recording if it is an old SD full featured card 2011-05-21 13:40:47 +02:00
Klaus Schmidinger
2993351536 Now sorting the source file names in the call to xgettext 2011-05-21 12:40:42 +02:00
Klaus Schmidinger
85af76ab63 TsGetPayload() now checks if there actually is a payload in the given TS packet 2011-05-21 10:03:48 +02:00
Klaus Schmidinger
ee382b4ad2 Avoiding a gcc 4.6 compiler error in the skincurses plugin 2011-05-15 21:44:08 +02:00
Klaus Schmidinger
464552dd91 Fixed cString's operator=(const char *String) in case the given string is the same as the existing one 2011-05-15 11:46:30 +02:00
Klaus Schmidinger
914b04c1d2 Fixed handling the bitmap color depth for scaled subtitles 2011-04-17 14:40:58 +02:00
Klaus Schmidinger
c670c0645f Avoiding an unecessary call to Recordings.ResetResume() 2011-04-17 13:58:29 +02:00
Klaus Schmidinger
71dacdce96 Added handling of "ANSI/SCTE 57" descriptors 2011-04-17 13:48:20 +02:00
Klaus Schmidinger
31d80e527e The Makefile now also installs the include files 2011-04-17 13:37:50 +02:00
Klaus Schmidinger
bcdd5cb886 Now using pkg-config to get fribidi, freetype and fontconfig cflags and libs 2011-04-17 13:29:42 +02:00
Klaus Schmidinger
e33a38a542 Now using pkg-config to get fribidi cflags and libs 2011-04-17 13:26:57 +02:00
Klaus Schmidinger
5138ccc1ce Added a patch from Udo Richter 2011-04-17 13:22:44 +02:00
Klaus Schmidinger
8e3c9f553f Fixed a possible NULL pointer dereference in osddemo.c 2011-04-17 13:05:13 +02:00
Klaus Schmidinger
79f8c5f38e Removed an obsolete local variable in dvbsdffosd.c 2011-04-17 12:57:29 +02:00
Klaus Schmidinger
475e64eeec The dvbhddevice plugin is now part of the VDR distribution archive 2011-04-17 12:35:46 +02:00
Klaus Schmidinger
05ea68e2bb Made cRecordingInfo::Read(FILE *f) private 2011-04-03 11:22:16 +02:00
Klaus Schmidinger
c23b6a7e13 Added HD stream content identifiers to vdr.5 2011-04-03 10:23:12 +02:00
Klaus Schmidinger
4b8fd4e1af Fixed a buffer overflow in cFont::Bidi() 2011-03-28 16:30:37 +02:00
Klaus Schmidinger
fa85bb7c01 Some fixes in the "osddemo" plugin 2011-03-28 16:26:49 +02:00
Klaus Schmidinger
4ed9d95394 Replaced "%lld" and "%llX" print format specifiers with "PRId64" and "PRIX64" 2011-03-27 15:12:20 +02:00
Klaus Schmidinger
9f0ac31f0d Added a missing initialization to sDvbSpuRect 2011-03-27 14:52:31 +02:00
Klaus Schmidinger
1387660744 Fixed scaling subtitles in case the OSD size is exactly the same as the display size of the subtitles 2011-03-27 14:12:58 +02:00
Klaus Schmidinger
48d2caa73e Fixed the description of cReceiver in PLUGINS.html 2011-03-27 13:12:03 +02:00
Klaus Schmidinger
08d5ad047a Renamed cBitmap::Scale() to Scaled() 2011-03-27 11:54:07 +02:00
Klaus Schmidinger
8768a9c321 Added anti-aliasing when upscaling bitmaps 2011-03-27 11:50:17 +02:00
Klaus Schmidinger
16bd3bd5b9 Fixed horizontal scaling of subtitles (cont'd) 2011-03-26 10:45:05 +01:00
Klaus Schmidinger
53942c3d9a Fixed the Language header of the Serbian translation file 2011-03-21 17:42:26 +01:00
Klaus Schmidinger
a914aed05a Fixed cUnbufferedFile::Seek() in case it is compiled without USE_FADVISE 2011-03-20 15:25:06 +01:00
Klaus Schmidinger
d7d57c3d2a Fixed horizontal scaling of subtitles 2011-03-20 15:19:28 +01:00
Klaus Schmidinger
31d4abab37 Made updating the editing marks during replay react faster in case the marks file has just been written 2011-03-20 11:46:58 +01:00
Klaus Schmidinger
d1dd7df17a Fixed detecting frames on channels that broadcast with separate "fields" instead of complete frames 2011-03-20 10:22:22 +01:00
Klaus Schmidinger
22f70b02e2 Revoked 'Reduced CPU load when pausing a replay' because it broke moving editing marks 2011-03-13 21:30:00 +01:00
Klaus Schmidinger
5f35ff690f Fixed some direct comparisons of double values 2011-03-13 13:58:22 +01:00
Klaus Schmidinger
06a16e7fba Added a missing 'default' case in cPixmapMemory::DrawEllipse() 2011-03-13 13:53:08 +01:00
Klaus Schmidinger
1c86e0127e Changed -O2 to -O3 in Make.config.template 2011-03-13 13:42:57 +01:00
Klaus Schmidinger
580aafd8cc Reduced CPU load when pausing a replay 2011-03-13 13:32:47 +01:00
Klaus Schmidinger
2bd17596a0 The original display size of subtitles is now used to scale them properly when displaying them on an HD OSD 2011-03-12 16:08:08 +01:00
Klaus Schmidinger
11cca8015c Now storing the original display size when handling DVB subtitles 2011-03-12 13:09:30 +01:00
Klaus Schmidinger
39c0065fe0 Updated the Romanian OSD texts 2011-03-12 10:30:39 +01:00
Klaus Schmidinger
5e09783947 Added some notes about locking cPixmaps 2011-03-08 15:52:12 +01:00
Klaus Schmidinger
75861a97bc Removed checking for minimum line length of 21 characters in the LIRC receiver code 2011-03-08 15:38:58 +01:00
Klaus Schmidinger
e8406def02 Now reducing the thread and I/O priority cCuttingThread::Action() 2011-03-06 14:59:57 +01:00
Klaus Schmidinger
607c860c81 New email address for Marcus Hilbrich 2011-02-27 16:32:05 +01:00
Klaus Schmidinger
83a3136228 Credits to Marcus Hilbrich 2011-02-27 13:49:18 +01:00
Klaus Schmidinger
61c6b36bbc While replaying, the editing marks are now updated every 10 seconds 2011-02-27 13:40:43 +01:00
Klaus Schmidinger
cd3c26b815 Fixed rendering pixmaps in case there is more than one dirty rectangle 2011-02-27 11:57:37 +01:00
Klaus Schmidinger
8253754cc3 Improved alpha blending 2011-02-27 10:14:43 +01:00
Klaus Schmidinger
9f4a264454 Changed the compiler optimization flag to -O3 2011-02-27 10:06:06 +01:00
Klaus Schmidinger
63fb010fc5 Setting the audio type of language descriptors to 0x00 in the PAT/PMT generator 2011-02-26 15:53:12 +01:00
Klaus Schmidinger
387ee5b604 Fixed setting up the 'Recordings' menu in case there are several recordings with exactly the same name 2011-02-26 15:35:30 +01:00
Klaus Schmidinger
750d98f1e6 Added a note about how to implement cOsd::Flush() for true color OSDs 2011-02-26 14:10:30 +01:00
Klaus Schmidinger
0b8356aa92 Improved and cleaned up transparent text drawing 2011-02-26 12:13:59 +01:00
Klaus Schmidinger
d1ab9dbc5f Now checking the result of all realloc() calls 2011-02-25 15:25:42 +01:00
Klaus Schmidinger
e145ee45e2 Optimization in AlphaBlend() 2011-02-20 21:35:48 +01:00
Klaus Schmidinger
76d9240395 Updated Serbian language texts 2011-02-20 18:03:05 +01:00
Klaus Schmidinger
82a13c7a0e Fixed reallocating memory in cTsToPes::PutTs() 2011-02-20 17:37:24 +01:00
Klaus Schmidinger
e85852672f Fixed reallocating memory in the "pictures" plugin 2011-02-20 17:19:54 +01:00
Klaus Schmidinger
698ffdc970 Added Serbian language texts 2011-02-20 16:08:39 +01:00
Klaus Schmidinger
1722cb7bd1 Updated the Slovakian language texts 2011-02-20 15:43:24 +01:00
Klaus Schmidinger
6c7089afd2 Implemented support for TrueColor OSD 2011-02-20 15:12:56 +01:00
Klaus Schmidinger
343071cc6a The include path to the freetype2 header files is now retrieved via a call to 'pkg-config --cflags freetype2' 2010-12-29 11:35:40 +01:00
Klaus Schmidinger
9f60bd2fc4 Now updating the 'frames per second' data in the list of recordings when a new recording is started that has a frame rate other than the default 2010-12-27 12:25:19 +01:00
Klaus Schmidinger
6c0612546e Added LDFLAGS to the linker calls in the Makefiles 2010-12-26 12:11:58 +01:00
Klaus Schmidinger
c60c8b9e4f Removing a cRemote from the Remotes list in case its initialization failed 2010-12-24 15:32:40 +01:00
Klaus Schmidinger
9cc9553c63 Changed "frame duration" to "frame rate" in vdr.5 2010-12-24 15:21:29 +01:00
Klaus Schmidinger
b5aad148d6 Fixed location of 'Language:' line 2010-12-24 11:36:42 +01:00
Klaus Schmidinger
c8cc3a6e36 Fixed inclusion of <stdarg.h> 2010-12-24 11:34:11 +01:00
Klaus Schmidinger
5bc4b0072c Changed the HISTORY entry on include paths not being overwritten 2010-12-12 15:53:03 +01:00
Klaus Schmidinger
4d3167231d Added 'Language:' line 2010-12-12 14:44:56 +01:00
Klaus Schmidinger
7b77774a99 Added typecasts to avoid gcc 4.5 warnings in switch statements on eKeys variables where additional 'k_...' flags are used 2010-12-12 13:42:00 +01:00
Klaus Schmidinger
1e166490c8 Removed displaying the "contents" information from the "Classic VDR" and "ST:TNG Panels" skins 2010-11-07 15:13:34 +01:00
Klaus Schmidinger
5eef32b558 Added support for "registration descriptor" (cont'd) 2010-11-07 13:47:16 +01:00
Klaus Schmidinger
6c176e0e7b Added an include of VDR's 'Make.global' to libsi's Makefile 2010-11-07 13:32:09 +01:00
Klaus Schmidinger
eff0655b1d Fixed unjustified log entries about changed channel pids 2010-11-07 12:27:25 +01:00
Klaus Schmidinger
cfb37a7edf Added support for "registration descriptor" 2010-11-01 15:47:59 +01:00
Klaus Schmidinger
4f50c34824 Fixed detecting frames on channels that broadcast with 50 or 60 fps 2010-11-01 12:31:52 +01:00
Klaus Schmidinger
55d0d8f9ba Updated the Lithuanian OSD texts 2010-10-30 09:56:38 +02:00
Klaus Schmidinger
0542371ead Added Language and fixed Language-Team header of *.po (cont'd) 2010-10-24 14:43:13 +02:00
Klaus Schmidinger
1cad1a89be Added Language and fixed Language-Team header of *.po 2010-10-24 13:55:43 +02:00
Klaus Schmidinger
61f4576808 Made 'dist' target dependent on up to date *.po 2010-10-24 13:47:36 +02:00
Klaus Schmidinger
dfae319686 Passing package name and version to xgettext 2010-10-24 13:36:47 +02:00
Klaus Schmidinger
e0dcecf96d Some spelling fixes 2010-10-24 13:26:10 +02:00
Klaus Schmidinger
1c5ece6100 Added cString::operator=(const char *String) 2010-10-24 13:08:55 +02:00
Klaus Schmidinger
fbbcb8e9c8 Removed the check for positive STC values from cDvbSubtitleConverter::Action() 2010-10-24 12:29:04 +02:00
Klaus Schmidinger
ad650b5883 Changed the description of cDevice::GetSTC() to make it mandatory for devices that can replay 2010-10-24 12:12:07 +02:00
Klaus Schmidinger
208b703e5b Fixed following symbolic links in RemoveFileOrDir() (cont'd) 2010-10-24 11:33:46 +02:00
Klaus Schmidinger
12870faf87 Updated the Estonian OSD texts 2010-10-24 11:23:04 +02:00
Klaus Schmidinger
ab0beb2ddb Added support for languages that are written right-to-left 2010-09-19 12:36:07 +02:00
Klaus Schmidinger
f1d4e66582 Added Arabian language texts 2010-09-12 11:30:00 +02:00
Klaus Schmidinger
07c7bc2951 Fixed some include statements 2010-09-12 11:29:00 +02:00
Klaus Schmidinger
2009716599 Fixed following symbolic links in RemoveFileOrDir() 2010-08-29 15:03:08 +02:00
Klaus Schmidinger
5203fa03e8 Fixed DDS detection for HD resolution subtitles 2010-08-29 14:10:47 +02:00
Klaus Schmidinger
505574fa98 Added locking to the cCutter functions to avoid a crash in case CutRecording() is called from a plugin 2010-08-29 13:40:37 +02:00
Klaus Schmidinger
22a4f5a504 Fixed the array size of Atypes in cPatFilter::Process() 2010-06-13 11:14:26 +02:00
Klaus Schmidinger
27852272bc Updated the Finnish OSD texts 2010-06-13 11:10:32 +02:00
Klaus Schmidinger
d2376946f4 Updated the Portuguese language texts 2010-06-13 10:39:09 +02:00
Klaus Schmidinger
00541fe531 Added missing Dtypes for ATSC 2010-06-13 10:29:53 +02:00
Klaus Schmidinger
24ec693c2d Updated the Italian OSD texts 2010-06-13 10:23:30 +02:00
Klaus Schmidinger
8a13fc45c7 Removed old 8psk remark 2010-06-06 12:23:23 +02:00
Klaus Schmidinger
3aba9ec4e0 Implemented setup option 'OSD/Number keys for characters' 2010-06-06 10:56:11 +02:00
Klaus Schmidinger
fd42609883 Implemented handling of HD resolution subtitles according to v1.3.1 of ETSI EN 300 743, chapter 7.2.1 (cont'd) 2010-06-05 14:03:55 +02:00
Klaus Schmidinger
9377d831b3 Added full handling of the stream types of Dolby Digital pids 2010-06-05 13:50:56 +02:00
Klaus Schmidinger
174eaaffbd Fixed a typo 2010-06-05 13:10:54 +02:00
Klaus Schmidinger
b4b3c8a3dd Fixed a wrong error message 2010-06-03 13:35:02 +02:00
Klaus Schmidinger
a096fcb88c 'TVDR TV Done Right' is now a registered trademark 2010-05-16 14:50:16 +02:00
Klaus Schmidinger
c6d1b4574f Added detecting channels that use service type 0x16 2010-05-16 14:25:58 +02:00
Klaus Schmidinger
7f3d21f867 Added handling MPEG audio types "ISO/IEC 14496-3 Audio with LATM transport syntax" and "ISO/IEC 13818-7 Audio with ADTS transport sytax" 2010-05-16 13:36:55 +02:00
Klaus Schmidinger
0f9b247122 Fixed a problem with external Dolby Digital processing via the '-a' option in live mode and with TS recordings 2010-05-16 11:00:52 +02:00
Klaus Schmidinger
225f7ab641 The EPG data now handles stream components 5 (H.264-video) and 6 (HEAAC-audio) 2010-05-16 10:23:55 +02:00
Klaus Schmidinger
08e6d87a86 Implemented handling of HD resolution subtitles according to v1.3.1 of ETSI EN 300 743, chapter 7.2.1 2010-05-13 14:51:48 +02:00
Klaus Schmidinger
539c0da853 Fixed a possible out of buffer memory access in case of bad TS data 2010-05-13 14:39:41 +02:00
Klaus Schmidinger
e2a995f3e7 Updated the Czech OSD texts 2010-05-13 13:54:52 +02:00
Klaus Schmidinger
3c51267763 Fixed initializing channel name when editing a new channel 2010-05-13 13:32:01 +02:00
Klaus Schmidinger
88dc4e3351 Fixed a crash when creating a new channel if the channel list is empty 2010-05-02 15:09:59 +02:00
Klaus Schmidinger
c19c63530e Fixed handling "none" color entries in XPM files 2010-05-02 13:59:11 +02:00
Klaus Schmidinger
fd554d9750 Fixed modulation check 2010-05-01 09:47:13 +02:00
Klaus Schmidinger
774e77b26e Updated the Ukrainian OSD texts 2010-04-25 13:50:52 +02:00
Klaus Schmidinger
b79436fd76 Now handling 'turbo fec' transponders 2010-04-25 13:05:37 +02:00
Klaus Schmidinger
515966cdea Fixed generating PMT language descriptors for multi language PIDs 2010-04-18 13:44:56 +02:00
Klaus Schmidinger
512522f259 The various modulation types are now taken into account when selecting a device 2010-04-11 13:02:42 +02:00
Klaus Schmidinger
5a67f86207 Include paths are now added instead of overwriting INCLUDES in the Makefile 2010-04-10 12:44:01 +02:00
Klaus Schmidinger
123bd2fec0 Added check for FE_CAN_PSK_8 2010-04-10 12:17:34 +02:00
Klaus Schmidinger
f1ded40a55 'VDR Video Disk Recorder' is now a registered trademark 2010-04-09 13:58:21 +02:00
Klaus Schmidinger
d5df309df4 Extended modulation check for all frontend types 2010-04-05 20:13:05 +02:00
Klaus Schmidinger
7a5d64a984 Added user defined key kUser0 2010-04-05 10:14:19 +02:00
Klaus Schmidinger
c270adfaa5 Added a note about not deleting cDeviceHook objects to device.h 2010-04-05 09:52:11 +02:00
Klaus Schmidinger
db5c3cd36a Fixed cFrameDetector::Analyze() in case part of the data has been processed and there is less than MIN_TS_PACKETS_FOR_FRAME_DETECTOR left 2010-04-05 09:38:13 +02:00
Klaus Schmidinger
1bf0c3d23a cDvbDevice::ProvidesTransponder() now checks the modulation capabilities of the device (as far as the driver allows this) 2010-04-04 11:37:10 +02:00
Klaus Schmidinger
d23f609dd8 Improved description of device lines in diseqc.conf 2010-04-02 14:46:21 +02:00
Klaus Schmidinger
1f72e039d1 Updated the Italian OSD texts 2010-04-02 12:33:08 +02:00
Klaus Schmidinger
5646b49ceb Changed the default SVDRP port to 6419 (officially registered with ICANN/IANA) 2010-04-02 12:25:50 +02:00
Klaus Schmidinger
d7bdbcc80a Added handling of EnhancedAC3DescriptorTag 2010-03-27 15:19:06 +01:00
Klaus Schmidinger
e306849159 Updated the Finnish OSD texts 2010-03-27 14:52:09 +01:00
Klaus Schmidinger
9fcdfc1808 Updated the Estonian OSD texts 2010-03-27 14:47:39 +01:00
Klaus Schmidinger
e2a2422151 Added Macedonian language texts 2010-03-27 14:36:40 +01:00
Klaus Schmidinger
84b386c4a1 The new setup option "Folders in timer menu" controls whether the file names in the timer menu are shown with their full folder path 2010-03-12 16:46:45 +01:00
Klaus Schmidinger
6564d8e928 Fixed "attempt to drop wrong frame from ring buffer" when skipping +/- one minute during replay 2010-03-07 14:32:22 +01:00
Klaus Schmidinger
42928ff2d3 The full timer file name is now displayed if it ends with "TITLE" or "EPISODE" 2010-03-07 14:15:04 +01:00
Klaus Schmidinger
c07dd4c35b Changed the polarization characters in cDvbSourceParam::GetOsdItem() to uppercase 2010-03-07 13:59:11 +01:00
Klaus Schmidinger
1c922cbb54 Added cChannel::IsSourceType() to test if a channel's source is of a given type 2010-03-07 13:56:09 +01:00
Klaus Schmidinger
74d6d35bce Implemented automatic deleting of timeshift recording 2010-03-07 12:43:30 +01:00
Klaus Schmidinger
2f16565bc8 Fixed editing channel parameters 2010-03-06 15:19:17 +01:00
Klaus Schmidinger
d01a497a09 Added a note about plugins defining additional sources 2010-03-06 14:04:54 +01:00
Klaus Schmidinger
179e129c09 Added note about obsolete ANALOGTV patch 2010-03-06 13:35:02 +01:00
Klaus Schmidinger
e7148f3bee The "Source" item in the "Edit channel" menu now wraps around the list of sources 2010-03-06 12:47:47 +01:00
Klaus Schmidinger
ab9af4cea1 Added support for ATSC devices 2010-03-06 12:01:17 +01:00
Klaus Schmidinger
3e09f8565d Assigned the source character 'V' to "Analog Video" 2010-03-05 16:00:09 +01:00
Klaus Schmidinger
b874b0aa7f Assigned the source character 'I' to "IPTV" 2010-03-05 15:56:41 +01:00
Klaus Schmidinger
2a7a20945a Fixed a typo 2010-02-28 15:51:17 +01:00
Klaus Schmidinger
44fdf30170 Fixed handling empty strings in cSource::FromString() 2010-02-28 15:18:31 +01:00
269 changed files with 62212 additions and 15643 deletions

File diff suppressed because it is too large Load Diff

1871
Doxyfile

File diff suppressed because it is too large Load Diff

34
Doxyfile.filter Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/perl
# Filter source files for use with Doxygen.
#
# Escapes special characters in comments marked with "///<".
#
# Usage: Doxyfile.filter filename
#
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Doxyfile.filter 2.1 2013/02/17 10:54:05 kls Exp $
$TAG = "///<";
while (<>) {
$t = $_;
$p = index($t, $TAG);
if ($p >= 0) {
$p += length($TAG);
print substr($t, 0, $p);
$quote = 0;
while (1) {
$s = substr($t, $p++, 1);
last if ($s eq "");
$quote ^= 1 if ($s eq '"');
print "\\" if (!$quote && $s =~ /[\\\@<>]/);
print $s;
}
}
else {
print $t;
}
}

3732
HISTORY

File diff suppressed because it is too large Load Diff

217
INSTALL
View File

@ -1,7 +1,7 @@
Installation of the Video Disk Recorder
---------------------------------------
Version 1.7
Version 2.7
-----------
Compiling and running the program:
@ -23,6 +23,7 @@ You will also need to install the following libraries, as well as their
fontconfig
freetype2
fribidi (see "BiDi support" below)
gettext
libcap
libjpeg
@ -35,6 +36,10 @@ and type 'make'. This should produce an executable file
named 'vdr', which can be run after the DVB driver has been
installed.
If you want to build a 32-bit version of VDR on a 64-bit machine, you can
use 'make M32=1' to do so. Note that you also need to have a Make.config file
(derived from Make.config.template) to make this work.
IMPORTANT: See "Configuration files" below for information on how
========= to set up the configuration files at the proper location!
@ -42,22 +47,21 @@ By default the 'vdr' program can be controlled via the PC keyboard.
If you want to disable control via the keyboard, you can add NO_KBD=1
to the 'make' call, or use the '--no-kbd' option at runtime.
If you have an infrared remote control unit you can define the REMOTE macro
to one of the following values in the 'make' call to make the respective control
the default:
If you have a LIRC compatible infrared remote control receiver you can define
the REMOTE macro to one of the following values in the 'make' call to make
the respective control the default:
REMOTE=RCU control via the "Remote Control Unit" receiver
(see http://www.tvdr.de/remote.htm)
REMOTE=LIRC control via the "Linux Infrared Remote Control"
(see http://www.lirc.org)
Alternatively you can use the '--rcu' or '--lirc' options at runtime.
These options accept an optional path to the remote control device,
the defaults of which can be set via the RCU_DEVICE and LIRC_DEVICE macros,
respectively.
Alternatively you can use the '--lirc' option at runtime.
This option accepts an optional path to the remote control device,
the default of which can be set via the LIRC_DEVICE macro.
If your video directory will be on a VFAT partition, you can call VDR with
the command line option '--vfat'.
If you want to make your video directory available to other machines that
have limitations on directory name lengths and/or allowed characters in
directory names, you can call VDR with the command line option '--dirnames'
(see man vdr(1) for details).
When running, the 'vdr' program writes status information into the
system log file, which is usually /var/log/messages (or /var/log/user.log,
@ -66,19 +70,18 @@ messages (tail -f /var/log/messages) to see if there are any problems.
The program can be controlled via a network connection to its SVDRP
port ("Simple Video Disk Recorder Protocol"). By default, it listens
on port 2001 (use the --port=PORT option to change this). For details
on port 6419 (use the --port=PORT option to change this). For details
about the SVDRP syntax see the source file 'svdrp.c'.
WARNING: DUE TO THE OPEN SVDRP PORT THIS PROGRAM MAY CONSTITUTE A
======= POTENTIAL SECURITY HAZARD! IF YOU ARE NOT RUNNING VDR IN
A CONTROLLED ENVIRONMENT, YOU MAY WANT TO DISABLE SVDRP
BY USING '--port=0'!
The file 'svdrphosts.conf' can be used to define which hosts are allowed
to access the SVDRP port. By default only localhost (127.0.0.1) is granted
access. If you want to give other hosts access to your SVDRP port you need to
add their IP numbers to 'svdrphosts.conf'.
You can disable SVDRP access entirely by either running VDR with '--port=0',
or by removing all entries (including 127.0.0.1 for the localhost) from
'svdrphosts.conf'.
If the program shall run as a daemon, use the --daemon option. This
will completely detach it from the terminal and will continue as a
background process.
@ -90,6 +93,33 @@ vdr:123:respawn:/usr/local/bin/vdr --terminal=/dev/tty8 -w 60
See the man page vdr(1) for complete information about all command line options.
Output devices
--------------
VDR by itself doesn't produce any audio or video output. In order to watch
live tv or recordings, you will need to use a plugin that supports the actual
hardware in your system, for instance:
Plugin: Device:
dvbsddevice Full-Featured SD DVB cards (Fujitsu-Siemens Design)
ftp://ftp.tvdr.de/vdr/Plugins
dvbhddevice Full-featured HD DVB cards (Technotrend TT S2-6400)
https://bitbucket.org/powARman/dvbhddevice
rpihddevice Raspberry Pi
https://projects.vdr-developer.org/git/vdr-plugin-rpihddevice.git
See https://linuxtv.org/vdrwiki/index.php/Output_devices for more.
Standard compliance
-------------------
Basically VDR works according to the DVB standard, but there are countries/providers
that use other standards, which in some details deviate from the DVB standard.
This makes it necessary to handle things differently in some areas, depending on
which standard is actually used. If this is the case in your area, you may need
to adjust the option "DVB/Standard compliance" in the Setup menu accordingly.
Locale
------
@ -111,14 +141,24 @@ in English.
Note that for VDR's internationalized texts to work, the LANG environment
variable must be set to a valid locale!
Workaround for providers not encoding their EPG data correctly
--------------------------------------------------------------
BiDi support
------------
According to "ETSI EN 300 468" the default character set fo SI data is
Some languages are written right-to-left. In order to display such languages
correctly, you need to build VDR with BIDI=1. This will link to the "fribidi"
library and implement a function that prepares bidirectional texts to be
displayed correctly. Since BiDi support adds some runtime overhead by requiring
additional memory allocation and copying, this feature is not compiled in
by default, so that users that have no need for this don't get any overhead.
Workaround for providers not encoding their DVB SI table strings correctly
--------------------------------------------------------------------------
According to "ETSI EN 300 468" the default character set for SI data is
ISO6937. But unfortunately some broadcasters actually use ISO-8859-9 or
other encodings, but fail to correctly announce that.
Users who want to set the default character set to something different can
do this by setting the environment variable VDR_CHARSET_OVERRIDE to something
do this by using the command line option --chartab with something
like ISO-8859-9.
Start script with automatic restart in case of hangups:
@ -224,19 +264,27 @@ Executing commands before and after a recording:
------------------------------------------------
You can use the '-r' option to define a program or script that gets called
before and after a recording is performed, and after an editing process
has finished.
at various stages of handling recordings.
The program will be called with two string parameters. The first parameter
is one of
The program will be called with two or three string parameters.
The first parameter is one of
before if this is *before* a recording starts
started if this is after a recording has *started*
after if this is *after* a recording has finished
editing if this is before *editing* a recording
edited if this is after a recording has been *edited*
deleted if this is after a recording has been *deleted*
copying if this is before *copying* a recording
copied if this is after a recording has been *copied*
renamed if this is after a recording has been *renamed*
moved if this is after a recording has been *moved*
(note that a move across file system borders triggers a sequence
of "copying", "copied" and "deleted")
and the second parameter contains the full name of the recording's
and the second and third parameter (if present) contain the full name of the recording's
directory (which may not yet exists at that moment in the "before" case).
In the "edited" case it will be the name of the edited version.
See the example below for the exact meaning of these parameters.
Within this program you can do anything you would like to do before and/or
after a recording or after an editing process. However, the program must return
@ -252,11 +300,38 @@ case "$1" in
before)
echo "Before recording $2"
;;
started)
echo "Started recording $2"
;;
after)
echo "After recording $2"
;;
editing)
echo "Editing recording $2"
echo "Source recording $3"
;;
edited)
echo "Edited recording $2"
echo "Source recording $3"
;;
deleted)
echo "Deleted recording $2"
;;
copying)
echo "Destination recording $2"
echo "Source recording $3"
;;
copied)
echo "Destination recording $2"
echo "Source recording $3"
;;
renamed)
echo "New name of recording $2"
echo "Old name of recording $3"
;;
moved)
echo "New path of recording $2"
echo "Old path of recording $3"
;;
*)
echo "ERROR: unknown state: $1"
@ -282,7 +357,7 @@ This program must be given to VDR with the '-a' option, as in
The video data directory:
-------------------------
All recordings are written into directories below "/video". Please
All recordings are written into directories below "/srv/vdr/video". Please
make sure this directory exists, and that the user who runs the 'vdr'
program has read and write access to that directory.
If you prefer a different location for your video files, you can use
@ -293,42 +368,18 @@ multiple slashes).
Note that the file system need not be 64-bit proof, since the 'vdr'
program splits video files into chunks of about 2GB. You should use
a disk with several gigabytes of free space. One GB can store roughly
half an hour of video data.
half an hour of SD video data, or 10 minutes of HD video.
Either use one of today's large terabyte disks (preferably with a backup disk
in a RAID-1 array), or use something like "mhddfs" to group several disks
into one large volume.
If you have more than one disk and don't want to combine them to form
one large logical volume, you can set up several video directories as
mount points for these disks. All of these directories must have the
same basic name and must end with a numeric part, which starts at 0 for
the main directory and has increasing values for the rest of the
directories. For example
/video0
/video1
/video2
would be a setup with three directories. You can use more than one
numeric digit, and the directories need not be directly under '/':
/mnt/MyVideos/vdr.00
/mnt/MyVideos/vdr.01
/mnt/MyVideos/vdr.02
...
/mnt/MyVideos/vdr.11
would set up twelve disks (wow, what a machine that would be!).
To use such a multi directory setup, you need to add the '-v' option
with the name of the basic directory when running 'vdr':
vdr -v /video0
Note that you should not copy any non-VDR files into the /videoX directories,
Note that you should not copy any non-VDR files into the video directory,
since this might cause a lot of unnecessary disk access when VDR cleans up those
directories and there is a large number of files and/or subdirectories in
there. If you have a large disk that you want to use for VDR's video data as
well as other stuff, you may want to create a subdirectory for VDR, as in
/mydisk/video0
/mydisk/video
and put your other stuff into, say,
@ -346,9 +397,11 @@ Configuration files:
There are several configuration files that hold information about
channels, remote control keys, timers etc. By default these files are
assumed to be located in the video directory, but a different directory
can be used with the '-c' option. Plugins assume their configuration files
in a subdirectory called "plugins" of this directory.
spread around the system according to the FHS ("File system Hierarchy Standard").
If you prefer to have VDR built to run locally under the VDR source tree,
you can copy the file Make.config.template to Make.config and set the parameter
LCLBLD=1. If you also want to have all data files under one single directory,
set ONEDIR=1 in Make.config.
For starters just copy all *.conf files from the VDR directory into your
video directory.
@ -375,6 +428,28 @@ accessed using DiSEqC, you have to go to the "Setup" menu and set the "DiSEqC"
parameter to "on". You also need to set up the file 'diseqc.conf' to properly
access your DiSEqC equipment (see man vdr(5) for details).
A special form of DiSEqC is used to connect several receivers to one signal
source using only a single cable. This method, known as "Satellite Channel Routing"
according to EN50494 (aka "Unicable(TM)", "OLT(TM)", "SatCR", "Single Cable
Distribution", "Channel Stacking System" or "Single Cable Interface") or
EN50607 (aka "JESS") uses the file "scr.conf" to specify which SCR channels
use which user band frequency.
If DVB-S devices need to be connected to the same satellite cable, but no
"Satellite Channel Routing" is available, they can be set to be "bonded" in
the Setup/LNB menu. Bonded devices can only be tuned to the same polarization
and frequency band, which reduces the number of potentially receivable channels.
Note that it doesn't make sense to use "Satellite Channel Routing" and
"Device Bonding" at the same time with the same devices. If you use either
of these methods, it is necessary that your devices are always created in the
same sequence when the drivers are loaded. You may need to configure some
proper "udev" rules to make sure this happens.
If you use "Device Bonding" and you add devices to your setup that don't
provide DVB-S and take up a position in which there used to be a bonded DVB-S
device, make sure you open, adjust (if necessary) and confirm the Setup/LNB
menu to have the device bondings set correctly again.
Running VDR with DVB-C (cable) or DVB-T (terrestrial):
------------------------------------------------------
@ -409,19 +484,17 @@ for a detailed description).
The recommended PC key assignments are:
Up, Down, Left, Right Crsr keys in numeric block
Menu 'Home' in numeric block
Up, Down, Left, Right Cursor keys
Menu 'Home'
Ok 'Enter'
Back 'End' in numeric block
Back 'Backspace'
Red, Green, Yellow, Blue 'F1'..'F4'
0..9 '0'..'9' in top row
Power 'P'
Volume+/- '+', '-'
Mute 'm'
0..9 '0'..'9'
Volume+/- 'PgUp', 'PgDn'
Mute 'F10'
If you prefer different key assignments, or if the default doesn't work for
your keyboard, simply delete the file 'remote.conf' and restart 'vdr' to get
into learning mode.
If you want to change your key assignments later, simply delete the file
'remote.conf' and restart 'vdr' to get into learning mode.
Generating source code documentation:
-------------------------------------

514
MANUAL
View File

@ -1,7 +1,7 @@
Video Disk Recorder User's Manual
---------------------------------
Version 1.6
Version 2.7
-----------
* Remote Control Keys
@ -24,7 +24,7 @@ Version 1.6
Green - Audio New New Ins/Ovr Rewind Skip -60s -
Yellow - Pause live Delete Delete Delete Delete Skip +60s -
Blue - Stop/Resume Mark Info - Info Stop -
0..9 Ch select - Sort(2) Day(3) Numeric inp. Exec cmd(1) Editing -
0..9 Ch select - Sort(2) Day(3) Numeric inp. Sort/Exec cmd(1) Editing -
In a numerical input field (like the response to a CAM enquiry) the keys 0..9
are used to enter the data, and the Left key can be used to delete the last
@ -39,6 +39,7 @@ Version 1.6
Info display information on the currently viewed programme or recording,
or on the current item in a menu
Play/Pause combined key to resume or pause replay, or pause live video
Play resume normal replay
Pause pause replay or live video
Stop stop replay
@ -49,8 +50,8 @@ Version 1.6
Next Next/previous channel group (in live tv mode)
Prev or next/previous editing mark (in replay mode)
Channel+ channel up
Channel- channel down
Channel+ channel up (live view), next error (replay)
Channel- channel down (live view), previous error (replay)
PrevChannel previous channel
Power shutdown
@ -81,7 +82,7 @@ Version 1.6
Yellow Info
Blue Timers menu
(1) See "Processing Recordings" below.
(1) See "Sort Recordings" and "Processing Recordings" below.
(2) In the "Channels" menu the '0' key switches the sort mode through "by number",
"by name" and "by provider". Other numeric input positions the cursor to
the channel with the number entered so far. If there is no channel with that
@ -89,7 +90,7 @@ Version 1.6
be treated as part of that number, not as a sort mode toggle. If no numeric
key has been pressed for more than one second, the number is reset and '0'
functions as sort mode toggle again.
(3) In the "Timers" menu, when on the "Day" item, the '0' key toggles between
(3) In the "Edit timer" menu, when on the "Day" item, the '0' key toggles between
a single shot and a repeating timer. If "Day" indicates a repeating timer,
the keys '1'...'7' can be used to toggle the individual days ('1' is Monday).
@ -263,7 +264,7 @@ Version 1.6
* Pausing live video
If you want to pause the live programme you are just watching, simple press
If you want to pause the live programme you are just watching, simply press
"Menu/Yellow" or "Pause" on your remote control. VDR will start an instant
recording of the current channel (just as if you had pressed "Menu/Red" or
"Record") and immediately begin replaying that recording. Replay will be
@ -275,6 +276,9 @@ Version 1.6
in the "Setup/Recording" menu. Recording time will be the same as for
any other instant recording, so by default it will record 3 hours (which
should be enough for any normal broadcast).
Note that the timer that is created for recording the paused live video will
always record on the local VDR, even if an "SVDRP default host" has been
set for normal timer recordings.
* Replaying a Recording
@ -301,6 +305,14 @@ Version 1.6
A previously stopped playback session can be resumed by pressing the "Blue"
key in the "VDR" menu.
* Sort Recordings
Within the "Recordings" menu, pressing the '0' key toggles sorting between
"by time" and "by name". The selected sort mode is stored separately for each
folder (provided you have write access to that folder).
If a folder is newly created by a repeating timer, the sort mode for that
folder is initially set to "by time".
* Processing Recordings
The configuration file 'reccmds.conf' can be used to define system commands
@ -354,18 +366,35 @@ Version 1.6
- 0 Toggles an editing mark. If the mark indicator shows a red triangle,
the current mark is deleted. Otherwise a new mark is set at the
current position.
- 4, 6 Move an editing mark back and forward. You need to first jump to
an editing mark for this to work.
- 1, 3 Move an editing mark back and forward in "adaptive" mode. Pressing
either of these keys for the first time moves the mark 120 seconds
in the given direction (configurable via "Setup/Replay/Initial
duration for adaptive skipping"). Further presses of the same key
keep moving the mark by the same value. Once the other key is
pressed, the value is divided by 2 (hence the name "adaptive") with
every further press of either key. Pressing '1' and '3'
alternatingly divides the distance all the way down to a single
I-frame. That way a particular place in a recording (for instance
the beginning or end of a commercial break) can be found very
quickly. If none of these two keys is pressed for a while
(configurable via "Setup/Replay/Reset timeout for adaptive
skipping") the distance falls back to the initial value.
If replay is not in Pause mode, or if there is no mark at the
current position, the skip is performed without moving any mark.
- 4, 6 Move an editing mark back and forward by one I-frame. You need to
first jump to an editing mark for this to work.
- 7, 9 Jump back and forward between editing marks. Replay goes into still
mode after jumping to a mark.
mode after jumping to a mark. If the current position is at the
first or last mark, or if there are no marks at all, these keys
jump to the very beginning or end, respectively, of the recording.
- 8 Positions replay at a point 3 seconds before the current or next
"start" mark and starts replay.
- 2 Start the actual cutting process.
"begin" mark and starts replay.
- 2 Starts the actual cutting process.
Editing marks are represented by black, vertical lines in the progress display.
A small black triangle at the top of the mark means that this is a "start"
A small black triangle at the top of the mark means that this is a "begin"
mark, and a triangle at the bottom means that this is an "end" mark.
The cutting process will save all video data between "start" and "end" marks
The cutting process will save all video data between "begin" and "end" marks
into a new file (the original recording remains untouched). The new file will
have the same name as the original recording, preceded with a '%' character
(imagine the '%' somehow looking like a pair of scissors ;-). Red bars in the
@ -374,7 +403,7 @@ Version 1.6
The video sequences to be saved by the cutting process are determined by an
"even/odd" algorithm. This means that every odd numbered editing mark (i.e.
1, 3, 5,...) represents a "start" mark, while every even numbered mark (2, 4,
1, 3, 5,...) represents a "begin" mark, while every even numbered mark (2, 4,
6,...) is an "end" mark. Inserting or toggling a mark on or off automatically
adjusts the sequence to the right side of that mark.
@ -387,11 +416,13 @@ Version 1.6
version of the recording you can use the '8' key to jump to a point just
before the next cut and have a look at the resulting sequence.
Currently editing marks can only be set at I-frames, which typically is
every 12th frame. So editing can be done with a resolution of roughly half
a second. A "start" mark marks the first frame of a resulting video
sequence, and an "end" mark marks the last frame of that sequence.
Currently editing marks can only be set at I-frames, which typically appear
every half of a second to a second. A "begin" mark marks the first frame of
a resulting video sequence, and an "end" mark marks the last frame of that
sequence. Note that the actual frame indicated by the an "end" mark will
not be included in the edited version of the recording. That's because every
recording (and every sequence of an edited recording) begins with an I-frame
and ends right before the next I-frame.
An edited recording (indicated by the '%' character) will never be deleted
automatically in case the disk runs full (no matter what "lifetime" it has).
@ -449,6 +480,8 @@ Version 1.6
"forever", and a value of 0 means that this recording can be
deleted any time if a recording with a higher priority needs disk
space.
Pattern: The pattern to use for recordings matching events (only available
for pattern timers). See section "Pattern timers" below.
File: The name under which a recording created through this timer will
be stored on disk (the actual name will also contain the date and
time, so it is possible to have a "repeating timer" store all its
@ -470,6 +503,9 @@ Version 1.6
the name of the recording.
First day: The date of the first day when this timer shall start recording
(only available for repeating timers).
Record on: The name of the remote VDR this timer shall record on (only available
if there are any remote VDRs connected to this VDR). If this field
is empty, the timer will record on the local VDR.
A timer can also be programmed by pressing the "Red" key on the "Schedule",
"Now", "Next" or "Event" menus.
@ -477,6 +513,140 @@ Version 1.6
The "Red" key in the "Edit timer" menu opens a list of folders, which can be
used to define the file name in which the recording will be stored.
The "Yellow" key in the "Edit timer" menu toggles the timer between "Pattern"
and "Regular".
When editing the "File" field, the "Blue" key in can be used to insert useful
macros.
* Pattern timers
There are cases where it would make sense to have a more flexible kind of
recording timer. For instance, some channels that provide VPS don't always
use the exact same VPS time for a series, which is extremely annoying.
Or you might want to record all films that have a certain pattern in their
title, no matter when they are broadcast. In such cases, "pattern timers"
can help.
In the "Edit timer" menu press the Yellow button to turn a regular timer into
a pattern timer. Pressing this button again switches back to regular.
The following rules apply to pattern timers:
- Pattern timers can only work for channels that provide EPG data.
- When using pattern timers, there should always be at least one free device that
can be used to regularly receive the EPG of the pattern timer's channel.
- A pattern timer records every matching event on the given channel that overlaps
with the given start/stop time. Overlapping events are recorded in full,
even if they extend outside the given start/stop interval.
- In order to actually record an event, a pattern timer "spawns" a separate timer
that does the recording. If there are matching events that would start while
the first spawned timer is still recording (due to the start/stop margins), timers
for those events are also spawned.
- Spawned timers are marked with the flag tfSpawned.
- Spawned timers take the Priority, Lifetime and VPS settings from the pattern timer.
- The special pattern "*" matches every event. So a timer with
a start/stop time of 00:00/23:59 will record every event of that day
into separate recordings. Note that when using this pattern there should
be no other timers for the same channel, because these might interfere.
- Once a timer has been spawned, it is treated like any other regular
timer. Any changes made to the corresponding pattern timer thereafter will have
no effect on spawned timers. Note that after deleting a spawned timer,
the corresponding pattern timer may respawn it.
- Recording is done according to the event's begin/end times, either
by adding the start/stop margins (for non-VPS timers) or by using the
event's running status (for VPS timers).
- If the start/stop margins of a spawned timer are reduced because the event
before and/or after that timer's event is shorter than the respective margin,
the actual recording still uses the full margins.
- If the times of the event change, a non-VPS pattern timer automatically adjusts
itself to the new times. This also happens if the start/stop margins are changed
in the setup.
- The recording of a pattern timer is stored under the given file name, just like
regular timers do. In addition to the "TITLE" and "EPISODE" macros the file
name of a pattern timer can also use "{<}" and "{>}" to reference the part of the
event's title before and after the pattern, respectively. For instance,
if the event's title is "Abc def ghi" and the pattern is "def ", "{<}"
would contain "Abc " and "{>}" would contain "ghi" (note the matching of the
blanks). For completeness, "{=}" can be used to reference the matching
pattern itself.
- In the "Timers" menu pressing the Red button on a pattern timer only toggles the
timer between "on" and "off", even if this is a repeating timer.
- In the "Timers" menu pattern timers are sorted alphabetically to the end of the
list of timers.
- A regular timer that is currently recording can't be changed into a pattern timer.
- In the "Edit timer" menu the file name and pattern are displayed as
separate items. The Yellow button can be used to toggle between a regular
timer and a pattern timer. When going from regular to pattern, the Pattern item will
be initialized with the base part of the file name.
- The characters '^' and '$' can be used at the very beginning and end of
the pattern to anchor the pattern to the begin or end of the title.
Using both of these will match only titles that consist of exactly the given pattern,
with nothing before and nothing after it.
- The Pattern field in the "Edit timer" menu allows blanks at the end of the string,
which may help to separate the text after the matching pattern.
- If the first character of the pattern is '@', an event that matches the
rest of the pattern is only recorded if the resulting recording's file
name (without any folders) is not contained in the donerecs.data file.
This avoids duplicate recordings of the same programme. Timers spawned from
such a pattern timer are marked with the flag tfAvoid.
- When editing the "File" field of a timer, the Blue button can be pressed to
insert one of the macros "TITLE", "EPISODE", "{<}", "{=}" or "{>}",
respectively. Pressing the Blue button repeatedly loops through the available
macros. The "{...}" macros are only available for pattern timers.
- In the "Schedule" and "What's on...?" menus the events that will be recorded
by a pattern timer are marked in the same way as regular timers.
- The TIMERS column in the LCARS skin doesn't show the basic definitions of
pattern timers, it only shows timers actually spawned from pattern timers.
If the pattern is prepended with '@', the name of the resulting recording (everything
after the rightmost '~', or the entire file name, if there is no '~') will be stored
in the file donerecs.data, so that multiple recordings of the same programme can be
avoided. When using this feature, special care must be taken regarding the recording's
file name. For instance, with a combination of
pattern file name
@Columbo Movies~TITLE
if the event's title is just "Columbo", this pattern timer would only record once,
and ignore any future events with that title, even if the episode would be different.
So you may want to use the episode name, as in
pattern file name
@Columbo Movies~TITLE - EPISODE
to make the file name unique. If you have several pattern timers for the same show on
different channels, chances are that the broadcasters handle title and episode
differently, as for example in
TITLE EPISODE pattern file name
Columbo Blueprint for Murder @^Columbo$ TITLE - EPISODE
Columbo - Blueprint for Murder @^Columbo TITLE
Columbo: Blueprint for Murder @^Columbo:_ Columbo - {>}
(note the '_' in the pattern of the third example; this is just used to visualize
the blank at the end of the pattern)
In order to have the same episode result in the same recording file name on all
channels, the file name needs to be generated differently for each channel. First
you need to decide on a proper combination of title and episode name, preferably
one that is already used by one of your channels (let's say the second one).
In the first case, title and episode name are correctly put in their respective
places, and "TITLE - EPISODE" as file name will do. The second case is our common
version, where everything is in the title, so TITLE is just fine. The third case
poses a problem, because everything is in the title, but with a different separator.
Here the special macro "{>}" can be used in the file name, which contains everything
following the matching pattern. There are three macros that can be used here:
{<} everything before the matching pattern
{>} everything after the matching pattern
{=} the matching pattern itself (just for completeness)
As of VDR version 2.5.2, the characters ' ' (blank), ':' and '-' are ignored
when checking whether a particular recording has already been made by a pattern
timer, making "TITLE - EPISODE" and "TITLE: EPISODE" the same.
VDR version 2.6.6 added '/' to this list.
* Managing folders
The "Select folder" menu, which can be accessed by pressing the "Red" key in
@ -487,9 +657,42 @@ Version 1.6
folder name in the list). The "Yellow" key deletes the current folder (note
that this will merely delete the folder definition stored in 'folders.conf'
and has no effect on existing timers or recordings). The "Blue" key can be
used to edit an existing folder definition. The "Red" key selects the current
folder, or enters a sub folder. Once a folder has been selected, the entire
path of the timer's file name will be replaced with the selected folder.
used to edit an existing folder definition. The "Red" key opens a folder that
contains sub folders, while pressing Ok selects the current folder. Once a
folder has been selected, the entire path of the timer's file name will be
replaced with the selected folder.
In the "Recordings" menu the folders of existing recordings can be renamed or
moved by pressing the "Blue" key ("Edit") while the cursor is positioned on
a folder. This will open a menu in which the folder's name and location (the
"parent" folder) can be edited. If such an operation will result in moving
more than one recording, you will be asked for confirmation.
The name, folder, priority and lifetime of an individual recording can be
changed by pressing the "Blue" key ("Info") while the cursor is positioned
on a recording, and in the resulting Info menu pressing the "Blue" key again
to bring up the "Edit recording" menu.
In the "Edit recording" menu the Red button ("Folder") allows you to select one
of your predefined folders. The Green button has multiple functions, depending
on what is currently going on with the recording. It can either stop or cancel
a cut, move or copy operation. If the button reads "Stop..." it means that the
respective operation is already happening, while "Cancel..." means that the
operation is still pending execution. If no operation is currently happening
and the recording has editing marks, the Button will read "Cut" and triggers
cutting the recording (same as pressing '2' while replaying the recording).
The Yellow button ("Delete marks") allows you to delete all editing marks from
the selected recording (if there are any and the recording is not currently
being cut). To directly edit the folder or name of the recording, position the
cursor to the respective line and press the Right key to start editing (press
Ok to confirm the edit, or Back to return to the previous value). If you want
to remove the name of the recording and make the folder name the actual
recording's name, you can position the cursor to the "Name:" field and press
the '0' key. This will take the last element of the recording's folder path
and make it the actual name of the recording. You can do this in turn until
the recording is moved all the way up to the root of the video directory.
Note that, in case you inadvertently pressed the '0' key, you can leave the
"Edit recording" menu with the "Back" key and any changes you have made so far
will not be applied. Once you are finished with editing the recording
properties, press Ok to confirm the changes.
* Parameters in the "Setup" menu
@ -584,6 +787,40 @@ Version 1.6
Turns displaying the Recordings menu as a hierarchical
directory structure on or off.
Folders in timer menu = yes
Controls whether the full folder path is shown in the
"Timers" menu, or just the basic recording name.
Always sort folders first = yes
In the "Recordings" menu folders are always listed before
plain recordings. Set this option to "no" if you want folders
to be interspersed with recordings when sorted alphabetically.
Default sort mode for recordings = by time
Controls whether recordings are sorted by time or by name.
If a particular sort mode has been selected for a folder by
pressing '0', the default no longer applies to that folder.
Sorting direction for recordings = ascending
When recordings are sorted "by time", they appear in ascending
order (i.e. "oldest" to "newest"). If this parameter is set to
"descending", they will be presented "newest" to "oldest.
Note that in the latter case, if "Always sort folders first"
is "yes", folders will appear in reverse alphabetical order.
Number keys for characters = yes
Controls whether the number keys can be used to enter
characters in a text input field. You may want to set this
to "no" if you are using an actual keyboard to control VDR.
Color key 0 = 0 By default, VDR assumes that the sequence of the color
Color key 1 = 1 keys on the remote control is red-green-yellow-blue. If
Color key 2 = 2 your remote control has these keys in a different sequence,
Color key 3 = 3 you can adjust these parameters to reorder the corresponding
color buttons in the menus accordingly. Note that this does
not change the functionality of the individual keys; it only
changes the sequence in which the color buttons are displayed.
EPG:
EPG scan timeout = 5 The time (in hours) of user inactivity after which the
@ -592,6 +829,16 @@ Version 1.6
A value of '0' completely turns off scanning on both single
and multiple card systems.
EPG scan max. channel number = 0
The EPG scan will only tune to transponders of channels with
numbers below this limit. By default all transponders will
be scanned.
EPG pause after scan = no
After a complete scan of all transponders (optionally limited
by "EPG scan max. channel number") the EPG scan pauses for
"EPG scan timeout" hours if this option is set to "yes".
EPG bugfix level = 3 Some tv stations transmit weirdly formatted EPG data.
VDR attempts to fix these bugs up to the given level:
0 = no EPG fixing
@ -665,14 +912,20 @@ Version 1.6
from the primary DVB interface, so that the viewer will
be disturbed as little as possible.
Standard Compliance = 0
Defines the standard compliance mode:
0 = DVB
1 = ANSI/SCTE
2 = NORDIG
Video format = 4:3 The video format (or aspect ratio) of the tv set in use
(4:3 or 16:9).
(4:3 or 16:9). Applies only to SD output devices.
Video display format = letterbox
The display format to use for playing wide screen video on
a 4:3 tv set ("pan & scan", "letterbox" or "center cut out").
This option is only available if "Video format" is set to
4:3.
4:3. Applies only to SD output devices.
Use Dolby Digital = yes
Controls whether Dolby Digital tracks appear in the "Audio"
@ -723,12 +976,40 @@ Version 1.6
LNB:
Use DiSEqC = no Generally turns DiSEqC support on or off.
SLOF = 11700 The switching frequency (in MHz) between low and
high LOF
Low LNB frequency = 9750 The LNB's low and high local oscillator frequencies
High LNB frequency = 10600 (in MHz, these have no meaning for DVB-C receivers)
Use DiSEqC = no Generally turns DiSEqC support on or off.
Device n connected to sat cable = own
Defines whether DVB-S device n has its own satellite cable,
or is "bonded" with another device. All DVB-S devices that
are connected to the same sat cable must be set to the same
number here.
Use dish positioner = no
By default, the 'P' command code in DiSEqC command sequences
is ignored. Set this parameter to 'yes' if you are using a
satellite dish positioner.
Site latitude (degrees) = 0
Site longitude (degrees) = 0
Set these to the latitude and longitude of your dish's
location if you use a satellite dish positioner. Use the
"Green" key to switch between north/south and east/west,
respectively.
Max. positioner swing (degrees) = 65
Defines the maximum angle by which the positioner can move
the dish away from due south (or north) in either direction.
The valid range is 0...90.
Positioner speed (degrees/s) = 1.5
Defines the speed at which the positioner moves the dish.
The valid range is 0.1...180. This value is used to calculate
how long it takes the positioner to reach the target position.
CAM:
@ -738,7 +1019,19 @@ Version 1.6
if it is in the process of being reset, its current status
is displayed. The "Red" key can be pressed to enter the CAM
menu, and the "Green" key triggers a reset of the selected
slot. The "Ok" key also opens the CAM menu.
slot. The "Ok" key also opens the CAM menu. The "Yellow" key
assigns the selected CAM to a device and switches it to the
current channel. The CAM/device combination remains tuned to
the current channel until the smart card in the CAM has been
activated and thus starts to descramble, or until a recording
needs this device. Pressing the "Yellow" key while a CAM is
in activation mode cancels the activation. The activation mode
remains in effect even if you switch to a different channel
(provided there is more than one device in the system) or
watch a recording. To activate your smart card simply switch
to the channel you want to watch, open the "Setup/CAM" menu,
select the CAM that contains the smart card (in case you
have more than one CAM) and press the "Yellow" key.
Recording:
@ -747,23 +1040,22 @@ Version 1.6
after the official end time it shall stop recording.
These margins are added automatically to timers that
are created from the EPG data.
Primary limit = 0 The minimum priority a timer must have to be allowed to
use the primary DVB interface, or to force another timer
with higher priority to use the primary DVB interface.
This is mainly useful for recordings that should take
place only when there is nothing else to do, but should
never keep the user from viewing stuff on the primary
interface. On systems with only one DVB card, timers
with a priority below PrimaryLimit will never execute.
Note that the actual margins used may be smaller than the
given values, if the event before and/or after the event
to be recorded is shorter than the respective margin.
Default priority = 50 The default Priority and Lifetime values used when
Default lifetime = 99 creating a new timer event. A Lifetime value of 99
means that this recording will never be deleted
automatically.
Pause priority = 10 The Priority and Lifetime values used when pausing live
Pause lifetime = 1 video.
Record key handling = 2
Defines what happens if the Record key on the remote control
is pressed during live tv.
0 = no instant recording
1 = confirm instant recording
2 = record instantly
The default is 2.
Pause key handling = 2 Defines what happens if the Pause key on the remote control
is pressed during live tv.
@ -772,6 +1064,9 @@ Version 1.6
2 = pause live video
The default is 2.
Pause priority = 10 The Priority and Lifetime values used when pausing live
Pause lifetime = 1 video.
Use episode name = yes Repeating timers use the EPG's 'Episode name' information
to create recording file names in a hierarchical structure
(for instance to gather all episodes of a series in a
@ -810,10 +1105,15 @@ Version 1.6
Default is 180 minutes (3 hours). The stop time of an
instant recording can be modified at any time by editing
the respective timer in the "Timers" menu.
If this parameter is set to 0 ("present event"), only the
currently running event will be recorded, using the stop
margin and VPS setting as configured.
Note that this parameter is also used when pausing live
video!
Max. video file size = 2000
The maximum size of a single recorded video file in MB.
The valid range is 100...2000. Default is 2000, but
The valid range is 100...1048570. Default is 2000, but
you may want to use smaller values if you are planning
on archiving a recording to CD.
@ -824,6 +1124,14 @@ Version 1.6
file (named 00001.ts, 00002.ts, ...) you can set this
option to 'yes'.
Delete timeshift recording = 0
Controls whether a timeshift recording is deleted after
viewing it.
0 = no
1 = confirm
2 = yes
The default is 0.
Replay:
Multi speed mode = no Defines the function of the "Left" and "Right" keys in
@ -833,6 +1141,83 @@ Version 1.6
Show replay mode = no Turns displaying the current replay mode on or off.
Show remaining time = no
Defines whether the replay progress display shows the
remaining time or the total length of the recording.
Progress display time (s) = 0
Defines how long (in seconds) the progress display is shown
when replay of a recording is started. The default value of 0
means that it will not be shown.
Pause replay when setting mark = no
Defines whether the player automatically goes into Pause
mode when setting an editing mark.
Pause replay when jumping to a mark = yes
By default replay is automatically paused whenever you jump
to an editing mark with the '7' or '9' key in order to allow
you to easily adjust those marks. If this option is set to
'no', the '9' key will not pause if you are in Play mode and
the mark you jump to is not within 3 seconds of the end of
the recording.
Skip edited parts = no Defines whether the edited parts of a recording are
automatically skipped during replay. This includes jumping
to the first mark if replay starts at the beginning of the
recording, and stopping at the last mark.
Pause replay at last mark = no
If enabled, replay of a recording will go into Pause mode
when it has reached the last "end" mark (if any). Note that
the actual position at which the pause occurs may be a couple
of frames before the last "end" mark, depending on how much
data is buffered by your output device.
Initial duration for adaptive skipping (s) = 120
Defines the number of seconds to jump from the current replay
position in either direction, when pressing the '1' or '3'
key for the first time after the "Reset timeout for adaptive
skipping".
The valid range is 10...600.
Reset timeout for adaptive skipping (s) = 3
Defines the number of seconds after which pressing the
'1' or '3' key falls back to the "Initial duration for adaptive
skipping".
The valid range is 0...10. Setting the timeout to 0 disables
the adaptive mode and makes '1' and '3' always skip the number
of seconds configured as the initial duration.
Alternate behavior for adaptive skipping = no
When skipping in adaptive mode with the '1' and '3' keys, the
distance of the skip is halved with every key press after the
first change of direction. While this allows for locating a
particular position in a recording very fast, once you make
one step too many in the current direction you have no chance
of ever reaching the desired point any more. You will have to
wait for the timeout to occur and start adaptive skipping anew.
If this option is set to 'yes', the skip distance will only be
halved if the direction actually changes. That way, even if
you missed the target point, you can still back up to it.
Use Prev/Next keys for adaptive skipping = no
Normally the Prev/Next keys jump between editing marks (or
the beginning/end of the recording). You can set this option
to 'yes' if you want to use these keys for adaptive skipping
instead.
Skip distance with Green/Yellow keys (s) = 60
Defines the number of seconds to skip in either direction
when pressing the "Green" or "Yellow" key, respectively.
The valid range is 5...600.
Skip distance with Green/Yellow keys in repeat (s) = 60
Defines the number of seconds to skip in either direction
when pressing and holding the "Green" or "Yellow" key,
respectively.
The valid range is 5...600.
Resume ID = 0 Defines an additional ID that can be used in a multi user
environment, so that every user has his/her own resume
files for each recording. The valid range is 0...99, with
@ -856,6 +1241,23 @@ Version 1.6
connection after which the connection is automatically
closed. Default is 300, a value of 0 means no timeout.
SVDRP peering = off Activates automatic connections between VDRs in the same
network. If set to "any hosts" this VDR will establish
connections with any available hosts. If set to "only
default host" this VDR will only connect to the VDR with
the name defined in "SVDRP default host". If no default
host has been defined, the behavior is the same as with
"any hosts". To switch from "off" to "only default host",
you may need to select "any hosts" first and confirm the
dialog by pressing "Ok" in order to be able to select a
default host.
SVDRP host name The name of this VDR, which is used when connecting VDRs
via SVDRP. By default, the machine's host name is used.
SVDRP default host The name of the VDR to be used by default when creating a
new timer.
Zap timeout = 3 The time (in seconds) until a channel counts as "previous"
for switching with '0'
@ -868,8 +1270,20 @@ Version 1.6
key. Note that the total maximum is also limited by
the "OSD/Channel info time" parameter.
Initial channel = 0 The number of the channel that shall be tuned to when
VDR starts. Default is 0, which means that it will
Remote control repeat delay = 300
The earliest time (in milliseconds) after which the repeat
function of the remote control kicks in if a key is held
pressed down for a while. If the remote control in use
has a repeat delay that is longer than that given in this
parameter, that longer delay will prevail.
Remote control repeat delta = 100
The time (in milliseconds) between two subsequent key
presses generated by the remote control's repeat function.
If the remote control in use has a repeat delta that is
longer than that given in this parameter, that longer delta
will prevail.
Initial channel = The channel ID of the channel that shall be tuned to when
VDR starts. Default is empty, which means that it will
tune to the channel that was on before VDR was stopped.
Initial volume = -1 The volume that shall be set when VDR starts. Default
@ -877,11 +1291,28 @@ Version 1.6
VDR was stopped will be used. The valid range is from
0 (silent) to 255 (loudest).
Volume steps = 51 The number of steps the volume will use when moving from
the lowest to the highest value. The valid range is from
5 to 255.
Volume linearize = 0 How to linearize the volume control. The valid range is
from -20 to 20. A value of 0 results in no linearization.
The higher this value is, the more fine grained the control
of the volume is for low sound levels. Lower values do the
same for high sound levels. This allows you to adjust the
more or less linear volume control of your sound card.
Channels wrap = no During zapping with the "Up" and "Down" keys (or the
"Channel+" and "Channel-" keys) the current channel will
wrap around the beginning or end of the channel list if
this parameter is set to 'yes'.
Show channel names with source = off
If this option is turned on, channel names will be displayed
with the source appended to them, as in "ZDF (S)" (if the
option is set to "type), or "ZDF (S19.2E)" (if it is set to
"full"), where 'S' stands for "Satellite".
Emergency exit = yes If, for some reason, a recording fails because the video
data stream is broken, or the CAM doesn't decrypt etc.,
VDR automatically exits in order to allow the surrounding
@ -913,4 +1344,3 @@ Version 1.6
DEFINING THESE COMMANDS AND MAKE SURE THEY DON'T HARM YOUR SYSTEM,
ESPECIALLY IF YOU ARE RUNNING VDR UNDER A HIGH PRIVILEGED USER ID
(LIKE 'root').

View File

@ -6,43 +6,95 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Make.config.template 2.2 2010/02/06 14:50:03 kls Exp $
# $Id: Make.config.template 5.2 2024/10/11 14:21:04 kls Exp $
### The C compiler and options:
CC = gcc
CFLAGS = -g -O2 -Wall
CFLAGS = -g -O3 -Wall
CXX = g++
CXXFLAGS = -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
CXXFLAGS = -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses
ifdef PLUGIN
CFLAGS += -fPIC
CXXFLAGS += -fPIC
# Use 'make DEBUG=1 ...' to build a debug version of VDR and plugins:
ifdef DEBUG
CFLAGS += -O0
CXXFLAGS += -O0
endif
# Use 'make M32=1 ...' to build a 32-bit version of VDR on a 64-bit machine:
ifdef M32
CFLAGS += -m32
CXXFLAGS += -m32
endif
### The directory environment:
#DVBDIR = /usr/src/v4l-dvb/linux
MANDIR = /usr/local/man
BINDIR = /usr/local/bin
# Default directories (adjust as necessary or desired):
LOCDIR = ./locale
PLUGINDIR= ./PLUGINS
PLUGINLIBDIR= $(PLUGINDIR)/lib
VIDEODIR = /video
CONFDIR = $(VIDEODIR)
#PREFIX = /usr/local
#VDRROOT = $(PREFIX)
#BINDIR = $(VDRROOT)/bin
#INCDIR = $(VDRROOT)/include
#LIBDIR = $(VDRROOT)/lib
#LOCDIR = $(VDRROOT)/locale
#MANDIR = $(VDRROOT)/man
#PCDIR = $(VDRROOT)/pkgconfig
#RESDIR = $(VDRROOT)/share
#DVBDIR = /usr/include
#VIDEODIR = /srv/vdr/video
#CONFDIR = /var/lib/vdr
#ARGSDIR = /etc/vdr/conf.d
#CACHEDIR = /var/cache/vdr
# Overrides for preset/legacy configurations:
# Use 'make LCLBLD=1' to build locale and plugin files under the source directory:
ifdef LCLBLD
LOCDIR = $(CWD)/locale
PLUGINDIR = $(CWD)/PLUGINS
ifndef PLUGIN # don't overwrite for plugins with old makefiles
LIBDIR = $(PLUGINDIR)/lib
endif
HDRDIR = $(CWD)/include
endif
# Use 'make ONEDIR=1' to have all data in one single directory:
ifdef ONEDIR
VIDEODIR = /video
CACHEDIR = $(VIDEODIR)
CONFDIR = $(VIDEODIR)
ARGSDIR = $(VIDEODIR)/conf.d
RESDIR = $(VIDEODIR)
endif
# Use this if you want to have a central place where you configure compile time
# parameters for plugins:
#PLGCFG = $(CONFDIR)/plugins.mk
### The remote control:
LIRC_DEVICE = /var/run/lirc/lircd
### Use this for kernel based driver:
#LIRC_DEVICE = /dev/lirc0
LIRC_DEVICE = /dev/lircd
RCU_DEVICE = /dev/ttyS1
### Define if you always want to use LIRC, independent of the --lirc option:
#REMOTE=LIRC
## Define if you want vdr to not run as root
### Define if you don't want keyboard remote control:
#NO_KBD = 1
### Define if you want vdr to not run as root:
#VDR_USER = vdr
### You don't need to touch the following:
### Define if you want to compile in 'bidi' support:
#BIDI = 1
ifdef DVBDIR
INCLUDES += -I$(DVBDIR)/include
### Define if you want 'systemd' notification:
#SDNOTIFY = 1
### Fallback for plugins with old makefiles:
ifdef PLUGIN
CFLAGS += -fPIC
CXXFLAGS += -fPIC
endif

View File

@ -4,14 +4,7 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Make.global 1.1 2010/02/06 14:54:12 kls Exp $
# $Id: Make.global 1.2 2012/12/29 12:03:01 kls Exp $
# Plugins need to be compiled with position independent code, otherwise linking
# VDR against it will fail.
ifdef PLUGIN
CFLAGS += -fPIC
CXXFLAGS += -fPIC
endif
DEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
# This is just a dummy file for plugins that use old style (version 1.7.33
# or earlier) Makefiles.

283
Makefile
View File

@ -4,46 +4,103 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: Makefile 2.8 2010/02/21 11:44:38 kls Exp $
# $Id: Makefile 5.4 2024/10/21 19:01:16 kls Exp $
.DELETE_ON_ERROR:
# Compiler flags:
PKG_CONFIG ?= pkg-config
CC ?= gcc
CFLAGS ?= -g -O2 -Wall
CFLAGS ?= -g -O3 -Wall
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
CXXFLAGS ?= -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses
CXXFLAGS += $(CPPFLAGS)
LSIDIR = ./libsi
DESTDIR ?=
PREFIX ?= /usr/local
MANDIR = $(PREFIX)/share/man
BINDIR = $(PREFIX)/bin
LOCDIR = ./locale
LIBS = -ljpeg -lpthread -ldl -lcap -lrt -lfreetype -lfontconfig
INCLUDES = -I/usr/include/freetype2
CDEFINES = -D_GNU_SOURCE
CDEFINES += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
PLUGINDIR= ./PLUGINS
PLUGINLIBDIR= $(PLUGINDIR)/lib
LIBS = -ljpeg -lpthread -ldl -lcap -lrt $(shell $(PKG_CONFIG) --libs freetype2 fontconfig)
INCLUDES ?= $(shell $(PKG_CONFIG) --cflags freetype2 fontconfig)
VIDEODIR = /video
CONFDIR = $(VIDEODIR)
# Directories:
DOXYGEN = /usr/bin/doxygen
DOXYFILE = Doxyfile
CWD ?= $(shell pwd)
LSIDIR ?= $(CWD)/libsi
PLUGINDIR ?= $(CWD)/PLUGINS
# Failsafe defaults for "make LCLBLD=1":
ifdef LCLBLD
DESTDIR ?= $(CWD)
LOCDIR ?= $(CWD)/locale
HDRDIR ?= $(CWD)/include
LIBDIR ?= $(PLUGINDIR)/lib
endif
DESTDIR ?=
VIDEODIR ?= /srv/vdr/video
CONFDIR ?= /var/lib/vdr
ARGSDIR ?= /etc/vdr/conf.d
CACHEDIR ?= /var/cache/vdr
PREFIX ?= /usr/local
VDRROOT ?= $(PREFIX)
BINDIR ?= $(VDRROOT)/bin
INCDIR ?= $(VDRROOT)/include
LIBDIR ?= $(VDRROOT)/lib/vdr
LOCDIR ?= $(VDRROOT)/share/locale
MANDIR ?= $(VDRROOT)/share/man
PCDIR ?= $(VDRROOT)/lib/pkgconfig
RESDIR ?= $(VDRROOT)/share/vdr
# Source documentation
DOXYGEN ?= /usr/bin/doxygen
DOXYFILE = Doxyfile
# User configuration
include Make.global
-include Make.config
# Output control
ifdef VERBOSE
Q =
else
Q = @
endif
export Q
# Mandatory compiler flags:
CFLAGS += -fPIC
CXXFLAGS += -fPIC
# Common include files:
ifdef DVBDIR
CINCLUDES += -I$(DVBDIR)
endif
# Object files
SILIB = $(LSIDIR)/libsi.a
OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o\
OBJS = args.o audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o\
dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o\
lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\
lirc.o menu.o menuitems.o mtd.o nit.o osdbase.o osd.o pat.o player.o plugin.o positioner.o\
receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o\
skinclassic.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
timers.o tools.o transfer.o vdr.o videodir.o
DEFINES += $(CDEFINES)
INCLUDES += $(CINCLUDES)
ifdef HDRDIR
HDRDIR := -I$(HDRDIR)
endif
ifndef NO_KBD
DEFINES += -DREMOTE_KBD
endif
@ -53,17 +110,26 @@ endif
ifdef VDR_USER
DEFINES += -DVDR_USER=\"$(VDR_USER)\"
endif
ifdef BIDI
INCLUDES += $(shell $(PKG_CONFIG) --cflags fribidi)
DEFINES += -DBIDI
LIBS += $(shell $(PKG_CONFIG) --libs fribidi)
endif
ifdef SDNOTIFY
INCLUDES += $(shell $(PKG_CONFIG) --silence-errors --cflags libsystemd-daemon || $(PKG_CONFIG) --cflags libsystemd)
DEFINES += -DSDNOTIFY
LIBS += $(shell $(PKG_CONFIG) --silence-errors --libs libsystemd-daemon || $(PKG_CONFIG) --libs libsystemd)
endif
LIRC_DEVICE ?= /dev/lircd
RCU_DEVICE ?= /dev/ttyS1
DEFINES += -DLIRC_DEVICE=\"$(LIRC_DEVICE)\" -DRCU_DEVICE=\"$(RCU_DEVICE)\"
DEFINES += -D_GNU_SOURCE
LIRC_DEVICE ?= /var/run/lirc/lircd
DEFINES += -DLIRC_DEVICE=\"$(LIRC_DEVICE)\"
DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
DEFINES += -DCONFDIR=\"$(CONFDIR)\"
DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\"
DEFINES += -DARGSDIR=\"$(ARGSDIR)\"
DEFINES += -DCACHEDIR=\"$(CACHEDIR)\"
DEFINES += -DRESDIR=\"$(RESDIR)\"
DEFINES += -DPLUGINDIR=\"$(LIBDIR)\"
DEFINES += -DLOCDIR=\"$(LOCDIR)\"
# The version numbers of VDR and the plugin API (taken from VDR's "config.h"):
@ -71,12 +137,13 @@ DEFINES += -DLOCDIR=\"$(LOCDIR)\"
VDRVERSION = $(shell sed -ne '/define VDRVERSION/s/^.*"\(.*\)".*$$/\1/p' config.h)
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' config.h)
all: vdr i18n
all: vdr i18n plugins
# Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
# Dependencies:
@ -90,41 +157,73 @@ $(DEPFILE): Makefile
# The main program:
vdr: $(OBJS) $(SILIB)
$(CXX) $(CXXFLAGS) -rdynamic $(OBJS) $(LIBS) $(LIBDIRS) $(SILIB) -o vdr
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) -rdynamic $(LDFLAGS) $(OBJS) $(LIBS) $(SILIB) -o vdr
# The libsi library:
$(SILIB):
$(MAKE) -C $(LSIDIR) all
$(SILIB): make-libsi
@$(MAKE) --no-print-directory -C $(LSIDIR) CXXFLAGS="$(CXXFLAGS)" DEFINES="$(CDEFINES)" all
make-libsi: # empty rule makes sure the sub-make for libsi is always called
# pkg-config file:
.PHONY: vdr.pc
vdr.pc:
@echo "vdrrootdir=$(VDRROOT)" > $@
@echo "bindir=$(BINDIR)" >> $@
@echo "incdir=$(INCDIR)" >> $@
@echo "mandir=$(MANDIR)" >> $@
@echo "videodir=$(VIDEODIR)" >> $@
@echo "configdir=$(CONFDIR)" >> $@
@echo "argsdir=$(ARGSDIR)" >> $@
@echo "cachedir=$(CACHEDIR)" >> $@
@echo "resdir=$(RESDIR)" >> $@
@echo "libdir=$(LIBDIR)" >> $@
@echo "locdir=$(LOCDIR)" >> $@
@echo "plgcfg=$(PLGCFG)" >> $@
@echo "apiversion=$(APIVERSION)" >> $@
@echo "cflags=$(CFLAGS) $(CDEFINES) $(CINCLUDES) $(HDRDIR)" >> $@
@echo "cxxflags=$(CXXFLAGS) $(CDEFINES) $(CINCLUDES) $(HDRDIR)" >> $@
@echo "" >> $@
@echo "Name: VDR" >> $@
@echo "Description: Video Disk Recorder" >> $@
@echo "URL: https://www.tvdr.de/" >> $@
@echo "Version: $(VDRVERSION)" >> $@
@echo "Cflags: \$${cflags}" >> $@
# Internationalization (I18N):
PODIR = po
LOCALEDIR = locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr.mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/vdr.pot
%.mo: %.po
msgfmt -c -o $@ $<
@echo MO $@
$(Q)msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
@echo GT $@
$(Q)xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=VDR --package-version=$(VDRVERSION) --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
@echo PO $@
$(Q)msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr.mo: $(PODIR)/%.mo
@mkdir -p $(dir $@)
cp $< $@
@echo IN $@
$(Q)install -D -m644 $< $@
.PHONY: i18n
i18n: $(I18Nmsgs)
install-i18n:
install-i18n: i18n
@mkdir -p $(DESTDIR)$(LOCDIR)
@(cd $(LOCALEDIR); cp -r --parents * $(DESTDIR)$(LOCDIR))
cp -r $(LOCALEDIR)/* $(DESTDIR)$(LOCDIR)
# The 'include' directory (for plugins):
@ -136,43 +235,80 @@ include-dir:
# Plugins:
plugins: include-dir
plugins: include-dir vdr.pc
@failed="";\
noapiv="";\
oldmakefile="";\
for i in `ls $(PLUGINDIR)/src | grep -v '[^a-z0-9]'`; do\
echo "Plugin $$i:";\
echo; echo "*** Plugin $$i:";\
# No APIVERSION: Skip\
if ! grep -q "\$$(LIBDIR)/.*\$$(APIVERSION)" "$(PLUGINDIR)/src/$$i/Makefile" ; then\
echo "ERROR: plugin $$i doesn't honor APIVERSION - not compiled!";\
noapiv="$$noapiv $$i";\
continue;\
fi;\
$(MAKE) -C "$(PLUGINDIR)/src/$$i" all || failed="$$failed $$i";\
# Old Makefile\
if ! grep -q "PKGCFG" "$(PLUGINDIR)/src/$$i/Makefile" ; then\
echo "WARNING: plugin $$i is using an old Makefile!";\
oldmakefile="$$oldmakefile $$i";\
$(MAKE) --no-print-directory -C "$(PLUGINDIR)/src/$$i" CFLAGS="$(CFLAGS) $(CDEFINES) $(CINCLUDES)" CXXFLAGS="$(CXXFLAGS) $(CDEFINES) $(CINCLUDES)" LIBDIR="$(PLUGINDIR)/lib" VDRDIR="$(CWD)" all || failed="$$failed $$i";\
continue;\
fi;\
# New Makefile\
INCLUDES="-I$(CWD)/include"\
$(MAKE) --no-print-directory -C "$(PLUGINDIR)/src/$$i" VDRDIR="$(CWD)" || failed="$$failed $$i";\
if [ -n "$(LCLBLD)" ] ; then\
(cd $(PLUGINDIR)/src/$$i; for l in `find -name "libvdr-*.so" -o -name "lib$$i-*.so"`; do install -D $$l $(LIBDIR)/`basename $$l`.$(APIVERSION); done);\
if [ -d $(PLUGINDIR)/src/$$i/po ]; then\
for l in `ls $(PLUGINDIR)/src/$$i/po/*.mo`; do\
install -D -m644 $$l $(LOCDIR)/`basename $$l | cut -d. -f1`/LC_MESSAGES/vdr-$$i.mo;\
done;\
fi;\
fi;\
done;\
# Conclusion\
if [ -n "$$noapiv" ] ; then echo; echo "*** plugins without APIVERSION:$$noapiv"; echo; fi;\
if [ -n "$$oldmakefile" ] ; then\
echo; echo "*** plugins with old Makefile:$$oldmakefile"; echo;\
echo "**********************************************************************";\
echo "*** While this currently still works, it is strongly recommended";\
echo "*** that you convert old Makefiles to the new style used since";\
echo "*** VDR version 1.7.36. Support for old style Makefiles may be dropped";\
echo "*** in future versions of VDR.";\
echo "**********************************************************************";\
fi;\
if [ -n "$$failed" ] ; then echo; echo "*** failed plugins:$$failed"; echo; exit 1; fi
clean-plugins:
@for i in `ls $(PLUGINDIR)/src | grep -v '[^a-z0-9]'`; do $(MAKE) -C "$(PLUGINDIR)/src/$$i" clean; done
clean-plugins: vdr.pc
@for i in `ls $(PLUGINDIR)/src | grep -v '[^a-z0-9]'`; do $(MAKE) --no-print-directory -C "$(PLUGINDIR)/src/$$i" VDRDIR="$(CWD)" clean; done
@-rm -f $(PLUGINDIR)/lib/lib*-*.so.$(APIVERSION)
# Install the files:
# Install the files (note that 'install-pc' must be first!):
install: install-bin install-conf install-doc install-plugins install-i18n
install: install-pc install-bin install-conf install-doc install-plugins install-i18n install-includes
# VDR binary:
install-bin: vdr
@mkdir -p $(DESTDIR)$(BINDIR)
@cp --remove-destination vdr svdrpsend.pl $(DESTDIR)$(BINDIR)
@cp --remove-destination vdr svdrpsend $(DESTDIR)$(BINDIR)
# Configuration files:
install-conf:
install-dirs:
@mkdir -p $(DESTDIR)$(VIDEODIR)
@if [ ! -d $(DESTDIR)$(CONFDIR) ]; then\
mkdir -p $(DESTDIR)$(CONFDIR);\
cp *.conf $(DESTDIR)$(CONFDIR);\
fi
@mkdir -p $(DESTDIR)$(CONFDIR)
@mkdir -p $(DESTDIR)$(ARGSDIR)
@mkdir -p $(DESTDIR)$(CACHEDIR)
@mkdir -p $(DESTDIR)$(RESDIR)
install-conf: install-dirs
# 'cp -n' may be broken, so let's do it the hard way
@for i in *.conf; do\
if ! [ -e $(DESTDIR)$(CONFDIR)/$$i ] ; then\
cp -p $$i $(DESTDIR)$(CONFDIR);\
fi\
done
# Documentation:
@ -181,28 +317,51 @@ install-doc:
@mkdir -p $(DESTDIR)$(MANDIR)/man5
@gzip -c vdr.1 > $(DESTDIR)$(MANDIR)/man1/vdr.1.gz
@gzip -c vdr.5 > $(DESTDIR)$(MANDIR)/man5/vdr.5.gz
@gzip -c svdrpsend.1 > $(DESTDIR)$(MANDIR)/man1/svdrpsend.1.gz
# Plugins:
install-plugins: plugins
@mkdir -p $(DESTDIR)$(PLUGINLIBDIR)
@cp --remove-destination $(PLUGINDIR)/lib/lib*-*.so.$(APIVERSION) $(DESTDIR)$(PLUGINLIBDIR)
@-for i in `ls $(PLUGINDIR)/src | grep -v '[^a-z0-9]'`; do\
echo; echo "*** Plugin $$i:";\
$(MAKE) --no-print-directory -C "$(PLUGINDIR)/src/$$i" VDRDIR=$(CWD) DESTDIR=$(DESTDIR) install;\
done
@if [ -d $(PLUGINDIR)/lib ] ; then\
for i in `find $(PLUGINDIR)/lib -name 'lib*-*.so.$(APIVERSION)'`; do\
install -D $$i $(DESTDIR)$(LIBDIR);\
done;\
fi
# Includes:
install-includes: include-dir
@mkdir -p $(DESTDIR)$(INCDIR)
@cp -pLR include/vdr include/libsi $(DESTDIR)$(INCDIR)
# pkg-config file:
install-pc: vdr.pc
if [ -n "$(PCDIR)" ] ; then\
mkdir -p $(DESTDIR)$(PCDIR) ;\
cp vdr.pc $(DESTDIR)$(PCDIR) ;\
fi
# Source documentation:
srcdoc:
@cp $(DOXYFILE) $(DOXYFILE).tmp
@cat $(DOXYFILE) > $(DOXYFILE).tmp
@echo PROJECT_NUMBER = $(VDRVERSION) >> $(DOXYFILE).tmp
@chmod +x $(DOXYFILE).filter
$(DOXYGEN) $(DOXYFILE).tmp
@rm $(DOXYFILE).tmp
# Housekeeping:
clean:
$(MAKE) -C $(LSIDIR) clean
-rm -f $(OBJS) $(DEPFILE) vdr core* *~
-rm -rf $(LOCALEDIR) $(PODIR)/*.mo $(PODIR)/*.pot
-rm -rf include
-rm -rf srcdoc
@$(MAKE) --no-print-directory -C $(LSIDIR) clean
@-rm -f $(OBJS) $(DEPFILE) vdr vdr.pc core* *~
@-rm -rf $(LOCALEDIR) $(PODIR)/*~ $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -rf include
@-rm -rf srcdoc
CLEAN: clean
distclean: clean-plugins clean

View File

@ -21,6 +21,9 @@ html, body {
.modified {
background-color: #FFDDDD;
}
modified {
background-color: #FFDDDD;
}
</style>
</head>
<body>
@ -28,15 +31,12 @@ html, body {
<div class="center">
<h1>The VDR Plugin System</h1>
<b>Version 1.7</b>
<b>Version 2.7</b>
<p>
Copyright &copy; 2009 Klaus Schmidinger<br>
<a href="mailto:kls@tvdr.de">kls@tvdr.de</a><br>
<a href="http://www.tvdr.de">www.tvdr.de</a>
Copyright &copy; 2021 Klaus Schmidinger<br>
<a href="mailto:vdr@tvdr.de">vdr@tvdr.de</a><br>
<a href="https://www.tvdr.de">www.tvdr.de</a>
</div>
<div class="modified">
Important modifications introduced since version 1.6 are marked like this.
</div modified>
<p>
VDR provides an easy to use plugin interface that allows additional functionality
to be added to the program by implementing a dynamically loadable library file.
@ -74,15 +74,15 @@ structures and allows it to hook itself into specific areas to perform special a
<li><a href="#Main menu entry">Main menu entry</a>
<li><a href="#User interaction">User interaction</a>
<li><a href="#Housekeeping">Housekeeping</a>
<li><a href="#Main thread hook">Main thread hook</a>
<li><a href="#Activity">Activity</a>
<li><a href="#Wakeup">Wakeup</a>
<li><a href="#Setup parameters">Setup parameters</a>
<li><a href="#The Setup menu">The Setup menu</a>
<li><a href="#Configuration files">Configuration files</a>
<li><a href="#Additional files">Additional files</a>
<li><a href="#Internationalization">Internationalization</a>
<li><a href="#Custom services">Custom services</a>
<li><a href="#SVDRP commands">SVDRP commands</a>
<li><a href="#Locking">Locking</a>
<li><a href="#Loading plugins into VDR">Loading plugins into VDR</a>
<li><a href="#Building the distribution package">Building the distribution package</a>
</ul>
@ -96,9 +96,12 @@ structures and allows it to hook itself into specific areas to perform special a
<li><a href="#Skins">Skins</a>
<li><a href="#Themes">Themes</a>
<li><a href="#Devices">Devices</a>
<li><a href="#Positioners">Positioners</a>
<li><a href="#Audio">Audio</a>
<li><a href="#Remote Control">Remote Control</a>
<li><a href="#Conditional Access">Conditional Access</a>
<li><a href="#Electronic Program Guide">Electronic Program Guide</a>
<li><a href="#The video directory">The video directory</a>
</ul>
</ul>
@ -162,22 +165,26 @@ is used:
VDR/PLUGINS/src
VDR/PLUGINS/src/hello
VDR/PLUGINS/lib
VDR/PLUGINS/lib/libvdr-hello.so.1.1.0
VDR/PLUGINS/lib/libvdr-hello.so.1
</pre></td></tr></table><p>
The <tt>src</tt> directory contains one subdirectory for each plugin, which carries
the name of that plugin (in the above example that would be <tt>hello</tt>).
What's inside the individual source directory of a
plugin is entirely up to the author of that plugin. The only prerequisites are
that there is a <tt>Makefile</tt> that provides the targets <tt>all</tt> and
that there is a <tt>Makefile</tt> that provides the targets <tt>all</tt>, <tt>install</tt> and
<tt>clean</tt>, and that a call to <tt>make all</tt> actually produces a dynamically
loadable library file for that plugin (we'll get to the details later).
The dynamically loadable library file for the plugin shall be located directly under
the plugin's source directory.
See the section <a href="#Initializing a new plugin directory">Initializing a new plugin directory</a>
for how to generate an example Makefile.
<p>
The <tt>lib</tt> directory contains the dynamically loadable libraries of all
available plugins. Note that the names of these files are created by concatenating
<p>
<table border=2>
<tr><td align=center><b><tt>libvdr-</tt></b></td><td align=center><b><tt>hello</tt></b></td><td align=center><b><tt>.so.</tt></b></td><td align=center><b><tt>1.1.0</tt></b></td></tr>
<tr><td align=center><b><tt>libvdr-</tt></b></td><td align=center><b><tt>hello</tt></b></td><td align=center><b><tt>.so.</tt></b></td><td align=center><b><tt>1</tt></b></td></tr>
<tr><td align=center><small>VDR plugin<br>library prefix</small></td><td align=center><small>name of<br>the plugin</small></td><td align=center><small>shared object<br>indicator</small></td><td align=center><small>API version number<br>this plugin was<br>compiled for</small></td></tr>
</table>
<p>
@ -188,6 +195,11 @@ the current VDR version. That way minor fixes to VDR, that don't require changes
to the VDR header files, can be made without requiring all plugins to be
recompiled.
<p>
While in earlier versions of VDR the API version number was closely related to the
VDR version number, starting with VDR version 2.7.2 the API version number was changed
from a dot separated, three part number to a single integer, completely unrelated to
the VDR version. This was done to avoid confusion.
<p>
The plugin library files can be stored in any directory. If the default organization
is not used, the path to the plugin directory has be be given to VDR through the
<b><tt>-L</tt></b> option.
@ -383,13 +395,7 @@ just like shown in the above example. This is a convention that allows the <tt>M
to extract the version number when generating the file name for the distribution archive.
<p>
A new plugin project should start with version number <tt>0.0.1</tt> and should reach
version <tt>1.0.0</tt> once it is completely operative and well tested. Following the
Linux kernel version numbering scheme, versions with <i>even</i> release numbers
(like <tt>1.0.x</tt>, <tt>1.2.x</tt>, <tt>1.4.x</tt>...) should be stable releases,
while those with <i>odd</i> release numbers (like <tt>1.1.x</tt>, <tt>1.3.x</tt>,
<tt>1.5.x</tt>...) are usually considered "under development". The three parts of
a version number are not limited to single digits, so a version number of <tt>1.2.15</tt>
would be acceptable.
version <tt>1.0.0</tt> once it is completely operative and well tested.
<hr><h2><a name="Description">Description</a></h2>
@ -555,6 +561,8 @@ as the <a href="#Getting started"><tt>Start()</tt></a> functions were called.
<hr><h2><a name="Logging">Logging</a></h2>
<div class="blurb">Traces in the sand...</div><p>
<p>
If the plugin should print log messages, you can use <tt>dsyslog()</tt>, <tt>isyslog()</tt> or <tt>esyslog()</tt>.<br>
<ul>
@ -563,7 +571,7 @@ If the plugin should print log messages, you can use <tt>dsyslog()</tt>, <tt>isy
<li><tt>esyslog()</tt> prints the log message only if the log level of vdr is set to 1 or above.
</ul>
The output of this log is the syslog of the system vdr is running on.
The logmessage can be formatted like <tt>printf()</tt>, as in
The log message can be formatted like <tt>printf()</tt>, as in
<p><table><tr><td class="code"><pre>
esyslog("pluginname: error #%d has occurred", ErrorNumber);
@ -571,6 +579,31 @@ esyslog("pluginname: error #%d has occurred", ErrorNumber);
Note that the log messages will be given as provided, the plugin's name will not
automatically be added, so make sure your log messages are obvious enough.
<p>
Only use the above logging functions for occasional log messages. Do not use
them unconditionally for frequent messages that produce long sequences of lines
in the log file every few seconds. That might make it hard to work on other plugins
or the core VDR code, watching their log entries while they are permanently
interspersed with unrelated stuff.<br>
<br>
The recommended behavior for a plugin that does logging is to implement a command
line option that controls the level of log messages, preferably '-l N, --log=N',
where 'N' is in the range 0...3, with 0 meaning no logging whatsoever, 1 log only
errors, 2 log errors and informational messages, and 3 also log debug information.<br>
<br>
If a plugin can output extensive data for special debugging purposes (either to
the log file or stdout/stderr), this should be enabled by setting proper switches
in one of its source files (see for example how the communication between VDR and
CAMs can be monitored in VDR/ci.c).<br>
<br>
Under no circumstances must a plugin print anything to stdout or stderr during
normal operation! The only exceptions being special debug information as described
above, fatal error messages that will cause VDR to abort, or if it is the sole
purpose of the plugin to display something on stdout, like for instance the
<i>skincurses</i> plugin, which displays the OSD at the console.<br>
<br>
Please make any log messages in <b>ENGLISH</b>! Logs are usually sent to the developers
of a program, and they may not be able to read them if they are in an exotic language.
<hr><h2><a name="Main menu entry">Main menu entry</a></h2>
@ -658,27 +691,6 @@ interaction is possible. If a specific action takes longer than a few seconds,
the plugin should launch a separate thread to do this.
</b>
<hr><h2><a name="Main thread hook">Main thread hook</a></h2>
<div class="blurb">Pushing in...</div><p>
Normally a plugin only reacts on user input if directly called through its
<a href="#Main menu entry">main menu entry</a>, or performs some background
activity in a separate thread. However, sometimes a plugin may need to do
something in the context of the main program thread, without being explicitly
called up by the user. In such a case it can implement the function
<p><table><tr><td class="code"><pre>
virtual void MainThreadHook(void);
</pre></td></tr></table><p>
in which it can do this. This function is called for every plugin once during
every cycle of VDR's main program loop, which typically happens once every
second.
<b>Be very careful when using this function, and make sure you return from it
as soon as possible! If you spend too much time in this function, the user
interface performance will become sluggish!</b>
<hr><h2><a name="Activity">Activity</a></h2>
<div class="blurb">Now is not a good time!</div><p>
@ -879,39 +891,51 @@ You can first assign the temporary values to the global variables and then do th
your setup parameters and use that one to copy all parameters with one single statement
(like VDR does with its cSetup class).
<hr><h2><a name="Configuration files">Configuration files</a></h2>
<hr><h2><a name="Additional files">Additional files</a></h2>
<div class="blurb">I want my own stuff!</div><p>
There may be situations where a plugin requires configuration files of its own, maybe
for data that can't be stored in the simple <a href="#Setup parameters">setup parameters</a>
of VDR, or maybe because it needs to launch other programs that simply need a separate
configuration file. While the plugin is free to store such files anywhere it
sees fit, it might be a good idea to put them in a common place, preferably
where other configuration data already exists. VDR provides the function
There may be situations where a plugin requires files of its own. While the plugin is
free to store such files anywhere it sees fit, it might be a good idea to put them in a common
place, preferably where such data already exists.
<p>
<i>configuration files</i>, maybe for data that can't be stored in the simple
<a href="#Setup parameters">setup parameters</a> of VDR, or maybe because it needs to
launch other programs that simply need a separate configuration file.
<p>
<i>cache files</i>, to store data so that future requests for that data can be served faster. The data
that is stored within a cache might be values that have been computed earlier or duplicates of
original values that are stored elsewhere.
<p>
<i>resource files</i>, for providing additional files, like pictures, movie clips or channel logos.
<p>
Therefore VDR provides the functions
<p><table><tr><td class="code"><pre>
const char *ConfigDirectory(const char *PluginName = NULL);
const char *CacheDirectory(const char *PluginName = NULL);
const char *ResourceDirectory(const char *PluginName = NULL);
</pre></td></tr></table><p>
which returns a string containing the directory that VDR uses for its own configuration
files (defined through the <tt><b>-c</b></tt> option in the call to VDR), extended by
each of which returns a string containing the directory that VDR uses for its own
files (defined through the options in the call to VDR), extended by
<tt>"/plugins"</tt>. So assuming the VDR configuration directory is <tt>/video</tt>
(the default if no <tt><b>-c</b></tt> or <tt><b>-v</b></tt> option is given),
a call to <tt>ConfigDirectory()</tt> will return <tt>/video/plugins</tt>. The first
call to <tt>ConfigDirectory()</tt> will automatically make sure that the <tt>plugins</tt>
subdirectory will exist. If, for some reason, this cannot be achieved, <tt>NULL</tt>
will be returned.
The behavior of <tt>CacheDirectory()</tt> and <tt>ResourceDirectory()</tt> is similar.
<p>
The additional <tt>plugins</tt> directory is used to keep files from plugins apart
from those of VDR itself, making sure there will be no name clashes. If a plugin
needs only one extra configuration file, it is suggested that this file be named
<tt>name.conf</tt>, where <i>name</i> shall be the name of the plugin.
needs only one extra file, it is suggested that this file be named <tt>name.*</tt>,
where <i>name</i> shall be the name of the plugin.
<p>
If a plugin needs more than one such file, it is suggested that the plugin stores
these in a subdirectory of its own, named after the plugin. To easily get such a name
the <tt>ConfigDirectory()</tt> function can be given an additional string that will
be appended to the returned directory name, as in
the functions can be given an additional string that will be appended to the returned
directory name, as in
<p><table><tr><td class="code"><pre>
const char *MyConfigDir = ConfigDirectory(Name());
@ -922,13 +946,12 @@ plugin's name. Again, VDR will make sure that the requested directory will exist
(or return <tt>NULL</tt> in case of an error).
<p>
<b>
The returned string is statically allocated and will be overwritten by subsequent
calls to ConfigDirectory()!
The returned strings are statically allocated and will be overwritten by subsequent calls!
</b>
<p>
The <tt>ConfigDirectory()</tt> function is a static member function of the <tt>cPlugin</tt>
class. This allows it to be called even from outside any member function of the derived
plugin class, by writing
The <tt>ConfigDirectory()</tt>, <tt>CacheDirectory()</tt> and <tt>ResourceDirectory()</tt>
functions are static member functions of the <tt>cPlugin</tt> class. This allows them to be
called even from outside any member function of the derived plugin class, by writing
<p><table><tr><td class="code"><pre>
const char *MyConfigDir = cPlugin::ConfigDirectory();
@ -1138,6 +1161,60 @@ The returned string may consist of several lines, separated by the newline chara
('<tt>\n</tt>'). Each of these lines will be preceded with the <tt>ReplyCode</tt>
when presenting them to the caller, and the continuation character ('<tt>-</tt>')
will be set for all but the last one.
<p>
<b>The SVDRP functions are called from the separate "SVDRP server handler" thread.
Therefore the plugin needs to take care of proper <a href="#Locking">locking</a> if it accesses any
global data.</b>
<hr><h2><a name="Locking">Locking</a></h2>
<div class="blurb">U can't touch this</div><p>
When accessing global data structures, proper locking is absolutely necessary.
<p>
There are several macros that allow for easy locking and unlocking. They all
follow the naming convention <tt>LOCK_*_READ|WRITE</tt>, where <tt>'*'</tt> is the name
of the global data structure, which can be one of <tt>TIMERS</tt>, <tt>CHANNELS</tt>,
<tt>RECORDINGS</tt> or <tt>SCHEDULES</tt>. To implicitly avoid deadlocks in case you
need to lock more than one structure, always make sure you use these macros in
this sequence!
<p>
Using one of these macros sets a lock on the structure, creates a local pointer to the
respective structure and makes sure the lock is released at the end of the current
block:
<p><table><tr><td class="code"><pre>
if (some condition) {
LOCK_TIMERS_READ; // creates local const cTimers *Timers
for (const cTimer *Timer = Timers-&gt;First(); Timer; Timer = Timers-&gt;Next(Timer)) {
// do something with Timer
}
}
</pre></td></tr></table><p>
Note the naming convention: TIMERS -&gt; Timers etc.
<p>
The <tt>LOCK_*_READ</tt> macros create pointers that are '<tt>const</tt>', while
the <tt>LOCK_*_WRITE</tt> macros allow modifications to the data structures.
Both wait indefinitely to obtain the lock. However, if <tt>LOCK_*_WRITE</tt> is
used twice in the same block, the second call will not obtain a lock and
immediately return <tt>NULL</tt>, which may lead to a crash. In such cases a
warning and backtrace is logged.
<p>
You may keep pointers to objects in such lists, even after releasing
the lock. However, you may only access such objects if you are
holding a proper lock again. If an object has been deleted from the list
while you did not hold a lock (for instance by an other thread), the
object will still be there, but no longer within this list (it is then
stored in the ListGarbageCollector for a few seconds). That way even if you
access the object after it has been deleted, you won't cause a segfault.
You can call the Contains() function to check whether an object you are
holding a pointer to is still in the list. Note that the garbage collector
is purged when the usual housekeeping is done.
<p>
See tools.h, class <tt>cListBase</tt> for more documentation and information on how
to use locking with timeouts, and thread.h, classes <tt>cStateLock</tt> and
<tt>cStateKey</tt> on how to easily react to changes in such lists.
<hr><h2><a name="Loading plugins into VDR">Loading plugins into VDR</a></h2>
@ -1219,10 +1296,10 @@ If a plugin wants to get informed on various events in VDR, it can derive a clas
class cMyStatusMonitor : public cStatus {
protected:
virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber);
virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView);
};
void cMyStatusMonitor::ChannelSwitch(const cDevice *Device, int ChannelNumber)
void cMyStatusMonitor::ChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView)
{
if (ChannelNumber)
dsyslog("channel switched to %d on DVB %d", ChannelNumber, Device-&gt;CardIndex());
@ -1480,8 +1557,9 @@ public:
};
cMyReceiver::cMyReceiver(int Pid)
:cReceiver(tChannelID(), -1, Pid)
:cReceiver(NULL, -1)
{
AddPid(Pid);
}
cMyReceiver::~cMyReceiver()
@ -1507,7 +1585,8 @@ member functions of <tt>cReceiver</tt>.
The above example sets up a receiver that wants to receive data from only one
PID (for example the Teletext PID). In order to not interfere with other recording
operations, it sets its priority to <tt>-1</tt> (any negative value will allow
a <tt>cReceiver</tt> to be detached from its <tt>cDevice</tt> at any time.
a <tt>cReceiver</tt> to be detached from its <tt>cDevice</tt> at any time
in favor of a timer recording or live viewing).
<p>
Once a <tt>cReceiver</tt> has been created, it needs to be <i>attached</i> to
a <tt>cDevice</tt>:
@ -1523,8 +1602,7 @@ the receiver is attached to the device that actually receives the current live
video stream (this may be different from the primary device in case of <i>Transfer
Mode</i>).
<p>
If the <tt>cReceiver</tt> isn't needed any more, it may simply be <i>deleted</i>
and will automatically detach itself from the <tt>cDevice</tt>.
The <tt>cReceiver</tt> must be detached from its device before it is deleted.
<hr><h2><a name="Filters">Filters</a></h2>
@ -1653,7 +1731,7 @@ restricts this to a <tt>cOsdObject</tt> returned from the plugin's <tt>MainMenuA
function, or any of the skin classes a plugin might implement.
<p>
If a plugin runs a separate thread and wants to issue a message directly from
within that tread, it can call
within that thread, it can call
<p><table><tr><td class="code"><pre>
int cSkins::QueueMessage(eMessageType Type, const char *s, int Seconds = 0, int Timeout = 0);
@ -1679,7 +1757,7 @@ The first step in implementing a new skin is to derive a class from <tt>cSkin</t
that provides the handling objects necessary to do the actual work:
<p><table><tr><td class="code"><pre>
#include "skins.h"
#include &lt;vdr/skins.h&gt;
class cMySkin : public cSkin {
public:
@ -1689,7 +1767,7 @@ public:
virtual cSkinDisplayMenu *DisplayMenu(void);
virtual cSkinDisplayReplay *DisplayReplay(bool ModeOnly);
virtual cSkinDisplayVolume *DisplayVolume(void);
virtual cSkinDisplayMessage *DisplayTrack(int NumTracks, const char * const *Tracks);
virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks);
virtual cSkinDisplayMessage *DisplayMessage(void);
};
</pre></td></tr></table><p>
@ -1802,9 +1880,7 @@ If the new device can receive, it most likely needs to provide a way of
selecting which channel it shall tune to:
<p><table><tr><td class="code"><pre>
<div class="modified">
virtual int NumProvidedSystems(void) const;
</div modified>
virtual bool ProvidesSource(int Source) const;
virtual bool ProvidesTransponder(const cChannel *Channel) const;
virtual bool ProvidesChannel(const cChannel *Channel, int Priority = -1, bool *NeedsDetachReceivers = NULL) const;
@ -1853,11 +1929,9 @@ virtual bool HasDecoder(void) const;
virtual bool CanReplay(void) const;
virtual bool SetPlayMode(ePlayMode PlayMode);
virtual int64_t GetSTC(void);
<div class="modified">
virtual bool IsPlayingVideo(void) const;
</div modified>
virtual bool HasIBPTrickSpeed(void);
virtual void TrickSpeed(int Speed);
virtual void TrickSpeed(int Speed, bool Forward);
virtual void Clear(void);
virtual void Play(void);
virtual void Freeze(void);
@ -1884,6 +1958,7 @@ the functions
<p><table><tr><td class="code"><pre>
virtual int OpenFilter(u_short Pid, u_char Tid, u_char Mask);
virtual int ReadFilter(int Handle, void *Buffer, size_t Length);
virtual void CloseFilter(int Handle);
</pre></td></tr></table><p>
@ -1932,14 +2007,13 @@ void cMyDevice::MakePrimaryDevice(bool On)
The OSD provider object is allocated on the heap and shall not be deleted
(it will be deleted automatically in case a different device sets up an OSD
provider, or when the program ends).
<p>
Note that an OSD implementation need not be physically linked to the device
in any way. All it needs to make sure is that the OSD will be visible to the
user - whether this goes through OSD facilities of the physical device (like
a "full featured" DVB card) or through a graphics adapter that overlays its
output with the video signal, doesn't matter.
<div class="modified">
<p>
In order to be able to determine the proper size of the OSD, the device
should implement the function
@ -1948,7 +2022,6 @@ virtual void GetOsdSize(int &amp;Width, int &amp;Height, double &amp;Aspect);
</pre></td></tr></table><p>
By default, an OSD size of 720x480 with an aspect ratio of 1.0 is assumed.
</div modified>
<p>
<b>Initializing new devices</b>
@ -1969,21 +2042,21 @@ Nothing needs to be done to shut down the devices. VDR will automatically
shut down (delete) all devices when the program terminates. It is therefore
important that the devices are created on the heap, using the <tt>new</tt>
operator!
<div class="modified">
<p>
<b>Device hooks</b>
<p>
VDR has builtin facilities that select which device is able to provide a given
transponder. However, there may be situations where the setup is so special
that it requires considerations that exceed the scope of the core VDR code.
This is where <i>device hooks</i> can be used.
transponder, or, which device may provide EIT data. However, there may be
situations where the setup is so special that it requires considerations that
exceed the scope of the core VDR code.
This is where <i>device hooks</i> can be used.
<p><table><tr><td class="code"><pre>
class cMyDeviceHook : public cDeviceHook {
public:
cMyDeviceHook(void);
virtual bool DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const;
virtual bool DeviceProvidesEIT(const cDevice *Device) const;
};
</pre></td></tr></table><p>
@ -1992,7 +2065,7 @@ whatever actions are necessary to determine whether the given Device can
provide the given Channel's transponder, as in
<p><table><tr><td class="code"><pre>
void cMyDeviceHook::DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const
bool cMyDeviceHook::DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const
{
if (<i>condition where Device can't provide Channel</i>)
return false;
@ -2000,6 +2073,19 @@ void cMyDeviceHook::DeviceProvidesTransponder(const cDevice *Device, const cChan
}
</pre></td></tr></table><p>
In its <tt>DeviceProvidesEIT()</tt> function the device hook can take
whatever actions are necessary to determine whether the given Device can
provide EIT data, as in
<p><table><tr><td class="code"><pre>
bool cMyDeviceHook::DeviceProvidesEIT(const cDevice *Device) const
{
if (<i>condition where Device can't provide EIT data</i>)
return false;
return true;
}
</pre></td></tr></table><p>
A plugin that creates a derived cDeviceHook shall do so in its <tt>Initialize()</tt>
function, as in
@ -2008,7 +2094,56 @@ new cMyDeviceHook;
</pre></td></tr></table><p>
and shall not delete this object. It will be automatically deleted when the program ends.
</div modified>
<p>
<b>Power management</b>
<p>
A device that can be put into a power save mode can implement the function
<p><table><tr><td class="code"><pre>
virtual void SetPowerSaveMode(bool On);
</pre></td></tr></table><p>
If On is true, power save mode shall be activated, if it is false,
normal operating mode shall be restored.
<hr><h2><a name="Positioners">Positioners</a></h2>
<div class="blurb">Now you see me - now you don't!</div><p>
If you are using a positioner (also known as "motor" or "rotor") to move your
satellite dish to receive various satellites, you will be using the 'P' command
in the <tt>diseqc.conf</tt> file. This command sends the necessary data to the
positioner to move the dish to the satellite's orbital position. By default VDR
uses its builtin DiSEqC positioner control. If your positioner requires a different
method of controlling (like maybe via a serial link), you can derive a class
from <tt>cPositioner</tt>, as in
<p><table><tr><td class="code"><pre>
#include &lt;vdr/positioner.h&gt;
class cMyPositioner : public cPositioner {
public:
cMyPositioner(void);
virtual void Drive(ePositionerDirection Direction);
virtual void Step(ePositionerDirection Direction, uint Steps = 1);
virtual void Halt(void);
virtual void SetLimit(ePositionerDirection Direction);
virtual void DisableLimits(void);
virtual void EnableLimits(void);
virtual void StorePosition(uint Number);
virtual void RecalcPositions(uint Number);
virtual void GotoPosition(uint Number, int Longitude);
virtual void GotoAngle(int Longitude);
};
</pre></td></tr></table><p>
See the implementation of <tt>cDiseqcPositioner</tt> in <tt>diseqc.c</tt> for details.
<p>
You should create your derived positioner object in the
<a href="#Getting started"><tt>Start()</tt></a> function of your plugin.
Note that the object has to be created on the heap (using <tt>new</tt>),
and you shall not delete it at any point (it will be deleted automatically
when the program ends).
<hr><h2><a name="Audio">Audio</a></h2>
@ -2173,6 +2308,11 @@ Put(uint64 Code, bool Repeat = false, bool Release = false);
</pre></td></tr></table><p>
The other parameters have the same meaning as in the first version of this function.
<p>
If your remote control has a repeat function that automatically repeats key events
if a key is held pressed down for a while, your derived class should use the global
parameters <tt>Setup.RcRepeatDelay</tt> and <tt>Setup.RcRepeatDelta</tt> to allow
users to configure the behavior of this function.
<hr><h2><a name="Conditional Access">Conditional Access</a></h2>
@ -2209,5 +2349,69 @@ virtual bool Assign(cDevice *Device, bool Query = false);
See the description of this function in <tt>ci.h</tt> for details.
<hr><h2><a name="Electronic Program Guide">Electronic Program Guide</a></h2>
<div class="blurb">The grass is always greener on the other side...</div><p>
In case the <i>Electronic Program Guide (EPG)</i> provided by the broadcaster
isn't sufficient for your taste, you can implement a <tt>cEpgHandler</tt> to
improve it from external sources. For instance, to replace the description
of the broadcaster's EPG with one from some external database, you could do:
<p><table><tr><td class="code"><pre>
#include &lt;vdr/epg.h&gt;
class cMyEpgHandler : public cEpgHandler {
public:
virtual bool SetDescription(cEvent *Event, const char *Description);
};
bool cMyEpgHandler::SetDescription(cEvent *Event, const char *Description)
{
Event-&gt;SetDescription(DescriptionFromDatabase(Event));
return true;
}
</pre></td></tr></table><p>
where <tt>DescriptionFromDatabase()</tt> would derive the description of the
given event from some external source. Note that the function returns <tt>true</tt>
to signal VDR that no other EPG handlers shall be queried after this one.
<p>
See <tt>VDR/epg.h</tt> for details.
<hr><h2><a name="The video directory">The video directory</a></h2>
<div class="blurb">Bits and pieces...</div><p>
By default VDR assumes that the video directory consists of one large
volume, on which it can store its recordings. If you want to distribute your
recordings over several physical drives, you can derive from <tt>cVideoDirectory</tt>,
as in
<p><table><tr><td class="code"><pre>
#include &lt;vdr/videodir.h&gt;
class cMyVideoDirectory : public cVideoDirectory {
public:
cMyVideoDirectory(void);
virtual ~cMyVideoDirectory();
virtual int FreeMB(int *UsedMB = NULL);
virtual bool Register(const char *FileName);
virtual bool Rename(const char *OldName, const char *NewName);
virtual bool Move(const char *FromName, const char *ToName);
virtual bool Remove(const char *Name);
virtual void Cleanup(const char *IgnoreFiles[] = NULL);
virtual bool Contains(const char *Name);
};
</pre></td></tr></table><p>
See the description in <tt>videodir.h</tt> for details.
<p>
You should create your derived video directory object in the
<a href="#Getting started"><tt>Start()</tt></a> function of your plugin.
Note that the object has to be created on the heap (using <tt>new</tt>),
and you shall not delete it at any point (it will be deleted automatically
when the program ends).
</body>
</html>

View File

@ -1,17 +0,0 @@
VDR Plugin 'dvbsddevice' Revision History
-----------------------------------------
2009-12-28: Version 0.0.1
- Initial revision.
2010-01-04: Version 0.0.2
- Calling the MakePrimaryDevice() function of the base class to allow
the cDevice to stop displaying subtitles.
- Added support for DVB cards with multiple fontends.
2010-01-30: Version 0.0.3
- The PCR pid is now recorded for channels where this is different from the
video PID.

View File

@ -1,114 +0,0 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 1.2 2010/02/06 14:50:03 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
# IMPORTANT: the presence of this macro is important for the Make.config
# file. So it must be defined, even if it is not used here!
#
PLUGIN = dvbsddevice
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
### Make sure that necessary options are included:
include $(VDRDIR)/Make.global
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
OBJS = $(PLUGIN).o dvbsdffdevice.o dvbsdffosd.o
### The main target:
all: libvdr-$(PLUGIN).so i18n
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
### Dependencies:
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Internationalization (I18N):
PODIR = po
LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/$(PLUGIN).pot
%.mo: %.po
msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<see README>' -o $@ $^
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
@mkdir -p $(dir $@)
cp $< $@
.PHONY: i18n
i18n: $(I18Nmsgs) $(I18Npot)
### Targets:
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)
@tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE)
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot

View File

@ -1,20 +0,0 @@
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <Klaus.Schmidinger@tvdr.de>
Project's homepage: http://www.tvdr.de
Latest version available at: ftp://ftp.tvdr.de/vdr
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:
The 'dvbsddevice' plugin implements the output device for the
"Full Featured" DVB cards based on the TechnoTrend/Fujitsu-Siemens
design. This code was originally part of the core VDR source, and
was moved into this plugin in VDR version 1.7.11.

View File

@ -1,35 +0,0 @@
/*
* dvbsddevice.c: A plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsddevice.c 1.3 2010/01/30 10:05:42 kls Exp $
*/
#include <vdr/plugin.h>
#include "dvbsdffdevice.h"
static const char *VERSION = "0.0.3";
static const char *DESCRIPTION = "SD Full Featured DVB device";
class cPluginDvbsddevice : public cPlugin {
private:
cDvbSdFfDeviceProbe *probe;
public:
cPluginDvbsddevice(void);
virtual ~cPluginDvbsddevice();
virtual const char *Version(void) { return VERSION; }
virtual const char *Description(void) { return DESCRIPTION; }
};
cPluginDvbsddevice::cPluginDvbsddevice(void)
{
probe = new cDvbSdFfDeviceProbe;
}
cPluginDvbsddevice::~cPluginDvbsddevice()
{
delete probe;
}
VDRPLUGINCREATOR(cPluginDvbsddevice); // Don't touch this!

View File

@ -1,799 +0,0 @@
/*
* dvbsdffdevice.h: The DVB SD Full Featured device interface
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsdffdevice.c 2.26 2010/01/30 10:05:23 kls Exp $
*/
#include "dvbsdffdevice.h"
#include <errno.h>
#include <limits.h>
#include <linux/videodev2.h>
#include <linux/dvb/audio.h>
#include <linux/dvb/dmx.h>
#include <linux/dvb/video.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include "dvbsdffosd.h"
#include "vdr/eitscan.h"
#include "vdr/transfer.h"
// --- cDvbSdFfDevice --------------------------------------------------------
int cDvbSdFfDevice::devVideoOffset = -1;
cDvbSdFfDevice::cDvbSdFfDevice(int Adapter, int Frontend)
:cDvbDevice(Adapter, Frontend)
{
spuDecoder = NULL;
digitalAudio = false;
playMode = pmNone;
// Devices that are only present on cards with decoders:
fd_osd = DvbOpen(DEV_DVB_OSD, adapter, frontend, O_RDWR);
fd_video = DvbOpen(DEV_DVB_VIDEO, adapter, frontend, O_RDWR | O_NONBLOCK);
fd_audio = DvbOpen(DEV_DVB_AUDIO, adapter, frontend, O_RDWR | O_NONBLOCK);
fd_stc = DvbOpen(DEV_DVB_DEMUX, adapter, frontend, O_RDWR);
// The offset of the /dev/video devices:
if (devVideoOffset < 0) { // the first one checks this
FILE *f = NULL;
char buffer[PATH_MAX];
for (int ofs = 0; ofs < 100; ofs++) {
snprintf(buffer, sizeof(buffer), "/proc/video/dev/video%d", ofs);
if ((f = fopen(buffer, "r")) != NULL) {
if (fgets(buffer, sizeof(buffer), f)) {
if (strstr(buffer, "DVB Board")) { // found the _first_ DVB card
devVideoOffset = ofs;
dsyslog("video device offset is %d", devVideoOffset);
break;
}
}
else
break;
fclose(f);
}
else
break;
}
if (devVideoOffset < 0)
devVideoOffset = 0;
if (f)
fclose(f);
}
devVideoIndex = devVideoOffset >= 0 ? devVideoOffset++ : -1;
// Video format:
SetVideoFormat(Setup.VideoFormat);
}
cDvbSdFfDevice::~cDvbSdFfDevice()
{
delete spuDecoder;
// We're not explicitly closing any device files here, since this sometimes
// caused segfaults. Besides, the program is about to terminate anyway...
}
void cDvbSdFfDevice::MakePrimaryDevice(bool On)
{
if (On)
new cDvbOsdProvider(fd_osd);
cDvbDevice::MakePrimaryDevice(On);
}
bool cDvbSdFfDevice::HasDecoder(void) const
{
return true;
}
cSpuDecoder *cDvbSdFfDevice::GetSpuDecoder(void)
{
if (!spuDecoder && IsPrimaryDevice())
spuDecoder = new cDvbSpuDecoder();
return spuDecoder;
}
uchar *cDvbSdFfDevice::GrabImage(int &Size, bool Jpeg, int Quality, int SizeX, int SizeY)
{
if (devVideoIndex < 0)
return NULL;
char buffer[PATH_MAX];
snprintf(buffer, sizeof(buffer), "%s%d", DEV_VIDEO, devVideoIndex);
int videoDev = open(buffer, O_RDWR);
if (videoDev >= 0) {
uchar *result = NULL;
// set up the size and RGB
v4l2_format fmt;
memset(&fmt, 0, sizeof(fmt));
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = SizeX;
fmt.fmt.pix.height = SizeY;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_BGR24;
fmt.fmt.pix.field = V4L2_FIELD_ANY;
if (ioctl(videoDev, VIDIOC_S_FMT, &fmt) == 0) {
v4l2_requestbuffers reqBuf;
memset(&reqBuf, 0, sizeof(reqBuf));
reqBuf.count = 2;
reqBuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
reqBuf.memory = V4L2_MEMORY_MMAP;
if (ioctl(videoDev, VIDIOC_REQBUFS, &reqBuf) >= 0) {
v4l2_buffer mbuf;
memset(&mbuf, 0, sizeof(mbuf));
mbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
mbuf.memory = V4L2_MEMORY_MMAP;
if (ioctl(videoDev, VIDIOC_QUERYBUF, &mbuf) == 0) {
int msize = mbuf.length;
unsigned char *mem = (unsigned char *)mmap(0, msize, PROT_READ | PROT_WRITE, MAP_SHARED, videoDev, 0);
if (mem && mem != (unsigned char *)-1) {
v4l2_buffer buf;
memset(&buf, 0, sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = 0;
if (ioctl(videoDev, VIDIOC_QBUF, &buf) == 0) {
v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (ioctl (videoDev, VIDIOC_STREAMON, &type) == 0) {
memset(&buf, 0, sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = 0;
if (ioctl(videoDev, VIDIOC_DQBUF, &buf) == 0) {
if (ioctl(videoDev, VIDIOC_STREAMOFF, &type) == 0) {
// make RGB out of BGR:
int memsize = fmt.fmt.pix.width * fmt.fmt.pix.height;
unsigned char *mem1 = mem;
for (int i = 0; i < memsize; i++) {
unsigned char tmp = mem1[2];
mem1[2] = mem1[0];
mem1[0] = tmp;
mem1 += 3;
}
if (Quality < 0)
Quality = 100;
dsyslog("grabbing to %s %d %d %d", Jpeg ? "JPEG" : "PNM", Quality, fmt.fmt.pix.width, fmt.fmt.pix.height);
if (Jpeg) {
// convert to JPEG:
result = RgbToJpeg(mem, fmt.fmt.pix.width, fmt.fmt.pix.height, Size, Quality);
if (!result)
esyslog("ERROR: failed to convert image to JPEG");
}
else {
// convert to PNM:
char buf[32];
snprintf(buf, sizeof(buf), "P6\n%d\n%d\n255\n", fmt.fmt.pix.width, fmt.fmt.pix.height);
int l = strlen(buf);
int bytes = memsize * 3;
Size = l + bytes;
result = MALLOC(uchar, Size);
if (result) {
memcpy(result, buf, l);
memcpy(result + l, mem, bytes);
}
else
esyslog("ERROR: failed to convert image to PNM");
}
}
else
esyslog("ERROR: video device VIDIOC_STREAMOFF failed");
}
else
esyslog("ERROR: video device VIDIOC_DQBUF failed");
}
else
esyslog("ERROR: video device VIDIOC_STREAMON failed");
}
else
esyslog("ERROR: video device VIDIOC_QBUF failed");
munmap(mem, msize);
}
else
esyslog("ERROR: failed to memmap video device");
}
else
esyslog("ERROR: video device VIDIOC_QUERYBUF failed");
}
else
esyslog("ERROR: video device VIDIOC_REQBUFS failed");
}
else
esyslog("ERROR: video device VIDIOC_S_FMT failed");
close(videoDev);
return result;
}
else
LOG_ERROR_STR(buffer);
return NULL;
}
void cDvbSdFfDevice::SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat)
{
cDevice::SetVideoDisplayFormat(VideoDisplayFormat);
if (Setup.VideoFormat) {
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_LETTER_BOX));
}
else {
switch (VideoDisplayFormat) {
case vdfPanAndScan:
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_PAN_SCAN));
break;
case vdfLetterBox:
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_LETTER_BOX));
break;
case vdfCenterCutOut:
CHECK(ioctl(fd_video, VIDEO_SET_DISPLAY_FORMAT, VIDEO_CENTER_CUT_OUT));
break;
default: esyslog("ERROR: unknown video display format %d", VideoDisplayFormat);
}
}
}
void cDvbSdFfDevice::SetVideoFormat(bool VideoFormat16_9)
{
CHECK(ioctl(fd_video, VIDEO_SET_FORMAT, VideoFormat16_9 ? VIDEO_FORMAT_16_9 : VIDEO_FORMAT_4_3));
SetVideoDisplayFormat(eVideoDisplayFormat(Setup.VideoDisplayFormat));
}
eVideoSystem cDvbSdFfDevice::GetVideoSystem(void)
{
eVideoSystem VideoSystem = vsPAL;
if (fd_video >= 0) {
video_size_t vs;
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
if (vs.h == 480 || vs.h == 240)
VideoSystem = vsNTSC;
}
else
LOG_ERROR;
}
return VideoSystem;
}
void cDvbSdFfDevice::GetVideoSize(int &Width, int &Height, double &VideoAspect)
{
if (fd_video >= 0) {
video_size_t vs;
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
Width = vs.w;
Height = vs.h;
switch (vs.aspect_ratio) {
default:
case VIDEO_FORMAT_4_3: VideoAspect = 4.0 / 3.0; break;
case VIDEO_FORMAT_16_9: VideoAspect = 16.0 / 9.0; break;
case VIDEO_FORMAT_221_1: VideoAspect = 2.21; break;
}
return;
}
else
LOG_ERROR;
}
cDevice::GetVideoSize(Width, Height, VideoAspect);
}
void cDvbSdFfDevice::GetOsdSize(int &Width, int &Height, double &PixelAspect)
{
if (fd_video >= 0) {
video_size_t vs;
if (ioctl(fd_video, VIDEO_GET_SIZE, &vs) == 0) {
Width = 720;
if (vs.h != 480 && vs.h != 240)
Height = 576; // PAL
else
Height = 480; // NTSC
switch (Setup.VideoFormat ? vs.aspect_ratio : VIDEO_FORMAT_4_3) {
default:
case VIDEO_FORMAT_4_3: PixelAspect = 4.0 / 3.0; break;
case VIDEO_FORMAT_221_1: // FF DVB cards only distinguish between 4:3 and 16:9
case VIDEO_FORMAT_16_9: PixelAspect = 16.0 / 9.0; break;
}
PixelAspect /= double(Width) / Height;
return;
}
else
LOG_ERROR;
}
cDevice::GetOsdSize(Width, Height, PixelAspect);
}
bool cDvbSdFfDevice::SetAudioBypass(bool On)
{
if (setTransferModeForDolbyDigital != 1)
return false;
return ioctl(fd_audio, AUDIO_SET_BYPASS_MODE, On) == 0;
}
// ptAudio ptVideo ptPcr ptTeletext ptDolby ptOther
static dmx_pes_type_t PesTypes[] = { DMX_PES_AUDIO, DMX_PES_VIDEO, DMX_PES_PCR, DMX_PES_TELETEXT, DMX_PES_OTHER, DMX_PES_OTHER };
bool cDvbSdFfDevice::SetPid(cPidHandle *Handle, int Type, bool On)
{
if (Handle->pid) {
dmx_pes_filter_params pesFilterParams;
memset(&pesFilterParams, 0, sizeof(pesFilterParams));
if (On) {
if (Handle->handle < 0) {
Handle->handle = DvbOpen(DEV_DVB_DEMUX, adapter, frontend, O_RDWR | O_NONBLOCK, true);
if (Handle->handle < 0) {
LOG_ERROR;
return false;
}
}
pesFilterParams.pid = Handle->pid;
pesFilterParams.input = DMX_IN_FRONTEND;
pesFilterParams.output = (Type <= ptTeletext && Handle->used <= 1) ? DMX_OUT_DECODER : DMX_OUT_TS_TAP;
pesFilterParams.pes_type= PesTypes[Type < ptOther ? Type : ptOther];
pesFilterParams.flags = DMX_IMMEDIATE_START;
if (ioctl(Handle->handle, DMX_SET_PES_FILTER, &pesFilterParams) < 0) {
LOG_ERROR;
return false;
}
}
else if (!Handle->used) {
CHECK(ioctl(Handle->handle, DMX_STOP));
if (Type <= ptTeletext) {
pesFilterParams.pid = 0x1FFF;
pesFilterParams.input = DMX_IN_FRONTEND;
pesFilterParams.output = DMX_OUT_DECODER;
pesFilterParams.pes_type= PesTypes[Type];
pesFilterParams.flags = DMX_IMMEDIATE_START;
CHECK(ioctl(Handle->handle, DMX_SET_PES_FILTER, &pesFilterParams));
if (PesTypes[Type] == DMX_PES_VIDEO) // let's only do this once
SetPlayMode(pmNone); // necessary to switch a PID from DMX_PES_VIDEO/AUDIO to DMX_PES_OTHER
}
close(Handle->handle);
Handle->handle = -1;
}
}
return true;
}
void cDvbSdFfDevice::TurnOffLiveMode(bool LiveView)
{
if (LiveView) {
// Avoid noise while switching:
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true));
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
}
// Turn off live PIDs:
DetachAll(pidHandles[ptAudio].pid);
DetachAll(pidHandles[ptVideo].pid);
DetachAll(pidHandles[ptPcr].pid);
DetachAll(pidHandles[ptTeletext].pid);
DelPid(pidHandles[ptAudio].pid);
DelPid(pidHandles[ptVideo].pid);
DelPid(pidHandles[ptPcr].pid, ptPcr);
DelPid(pidHandles[ptTeletext].pid);
DelPid(pidHandles[ptDolby].pid);
}
bool cDvbSdFfDevice::SetChannelDevice(const cChannel *Channel, bool LiveView)
{
int apid = Channel->Apid(0);
int vpid = Channel->Vpid();
int dpid = Channel->Dpid(0);
bool DoTune = !IsTunedToTransponder(Channel);
bool pidHandlesVideo = pidHandles[ptVideo].pid == vpid;
bool pidHandlesAudio = pidHandles[ptAudio].pid == apid;
bool TurnOffLivePIDs = DoTune
|| !IsPrimaryDevice()
|| LiveView // for a new live view the old PIDs need to be turned off
|| pidHandlesVideo // for recording the PIDs must be shifted from DMX_PES_AUDIO/VIDEO to DMX_PES_OTHER
;
bool StartTransferMode = IsPrimaryDevice() && !DoTune
&& (LiveView && HasPid(vpid ? vpid : apid) && (!pidHandlesVideo || (!pidHandlesAudio && (dpid ? pidHandles[ptAudio].pid != dpid : true)))// the PID is already set as DMX_PES_OTHER
|| !LiveView && (pidHandlesVideo || pidHandlesAudio) // a recording is going to shift the PIDs from DMX_PES_AUDIO/VIDEO to DMX_PES_OTHER
);
if (CamSlot() && !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), CamSlot()->SlotNumber()))
StartTransferMode |= LiveView && IsPrimaryDevice() && Channel->Ca() >= CA_ENCRYPTED_MIN;
bool TurnOnLivePIDs = !StartTransferMode && LiveView;
// Turn off live PIDs if necessary:
if (TurnOffLivePIDs)
TurnOffLiveMode(LiveView);
// Set the tuner:
if (!cDvbDevice::SetChannelDevice(Channel, LiveView))
return false;
// If this channel switch was requested by the EITScanner we don't wait for
// a lock and don't set any live PIDs (the EITScanner will wait for the lock
// by itself before setting any filters):
if (EITScanner.UsesDevice(this)) //XXX
return true;
// PID settings:
if (TurnOnLivePIDs) {
SetAudioBypass(false);
if (!(AddPid(Channel->Ppid(), ptPcr) && AddPid(vpid, ptVideo) && AddPid(apid, ptAudio))) {
esyslog("ERROR: failed to set PIDs for channel %d on device %d", Channel->Number(), CardIndex() + 1);
return false;
}
if (IsPrimaryDevice())
AddPid(Channel->Tpid(), ptTeletext);
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true)); // actually one would expect 'false' here, but according to Marco Schlüßler <marco@lordzodiac.de> this works
// to avoid missing audio after replaying a DVD; with 'false' there is an audio disturbance when switching
// between two channels on the same transponder on DVB-S
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
}
else if (StartTransferMode)
cControl::Launch(new cTransferControl(this, Channel));
return true;
}
int cDvbSdFfDevice::GetAudioChannelDevice(void)
{
audio_status_t as;
CHECK(ioctl(fd_audio, AUDIO_GET_STATUS, &as));
return as.channel_select;
}
void cDvbSdFfDevice::SetAudioChannelDevice(int AudioChannel)
{
CHECK(ioctl(fd_audio, AUDIO_CHANNEL_SELECT, AudioChannel));
}
void cDvbSdFfDevice::SetVolumeDevice(int Volume)
{
if (digitalAudio)
Volume = 0;
audio_mixer_t am;
// conversion for linear volume response:
am.volume_left = am.volume_right = 2 * Volume - Volume * Volume / 255;
CHECK(ioctl(fd_audio, AUDIO_SET_MIXER, &am));
}
void cDvbSdFfDevice::SetDigitalAudioDevice(bool On)
{
if (digitalAudio != On) {
if (digitalAudio)
cCondWait::SleepMs(1000); // Wait until any leftover digital data has been flushed
digitalAudio = On;
SetVolumeDevice(On || IsMute() ? 0 : CurrentVolume());
}
}
void cDvbSdFfDevice::SetAudioTrackDevice(eTrackType Type)
{
const tTrackId *TrackId = GetTrack(Type);
if (TrackId && TrackId->id) {
SetAudioBypass(false);
if (IS_AUDIO_TRACK(Type) || (IS_DOLBY_TRACK(Type) && SetAudioBypass(true))) {
if (pidHandles[ptAudio].pid && pidHandles[ptAudio].pid != TrackId->id) {
DetachAll(pidHandles[ptAudio].pid);
if (CamSlot())
CamSlot()->SetPid(pidHandles[ptAudio].pid, false);
pidHandles[ptAudio].pid = TrackId->id;
SetPid(&pidHandles[ptAudio], ptAudio, true);
if (CamSlot()) {
CamSlot()->SetPid(pidHandles[ptAudio].pid, true);
CamSlot()->StartDecrypting();
}
}
}
else if (IS_DOLBY_TRACK(Type)) {
if (setTransferModeForDolbyDigital == 0)
return;
// Currently this works only in Transfer Mode
ForceTransferMode();
}
}
}
bool cDvbSdFfDevice::CanReplay(void) const
{
return cDevice::CanReplay();
}
bool cDvbSdFfDevice::SetPlayMode(ePlayMode PlayMode)
{
if (PlayMode != pmExtern_THIS_SHOULD_BE_AVOIDED && fd_video < 0 && fd_audio < 0) {
// reopen the devices
fd_video = DvbOpen(DEV_DVB_VIDEO, adapter, frontend, O_RDWR | O_NONBLOCK);
fd_audio = DvbOpen(DEV_DVB_AUDIO, adapter, frontend, O_RDWR | O_NONBLOCK);
SetVideoFormat(Setup.VideoFormat);
}
switch (PlayMode) {
case pmNone:
// special handling to return from PCM replay:
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
CHECK(ioctl(fd_video, VIDEO_PLAY));
CHECK(ioctl(fd_video, VIDEO_STOP, true));
CHECK(ioctl(fd_audio, AUDIO_STOP, true));
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_DEMUX));
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_DEMUX));
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, false));
break;
case pmAudioVideo:
case pmAudioOnlyBlack:
if (playMode == pmNone)
TurnOffLiveMode(true);
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_MEMORY));
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, PlayMode == pmAudioVideo));
CHECK(ioctl(fd_audio, AUDIO_PLAY));
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
CHECK(ioctl(fd_video, VIDEO_PLAY));
break;
case pmAudioOnly:
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_audio, AUDIO_STOP, true));
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_MEMORY));
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
CHECK(ioctl(fd_audio, AUDIO_PLAY));
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, false));
break;
case pmVideoOnly:
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_video, VIDEO_STOP, true));
CHECK(ioctl(fd_audio, AUDIO_SELECT_SOURCE, AUDIO_SOURCE_DEMUX));
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
CHECK(ioctl(fd_audio, AUDIO_PLAY));
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
CHECK(ioctl(fd_video, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY));
CHECK(ioctl(fd_video, VIDEO_PLAY));
break;
case pmExtern_THIS_SHOULD_BE_AVOIDED:
close(fd_video);
close(fd_audio);
fd_video = fd_audio = -1;
break;
default: esyslog("ERROR: unknown playmode %d", PlayMode);
}
playMode = PlayMode;
return true;
}
int64_t cDvbSdFfDevice::GetSTC(void)
{
if (fd_stc >= 0) {
struct dmx_stc stc;
stc.num = 0;
if (ioctl(fd_stc, DMX_GET_STC, &stc) == -1) {
esyslog("ERROR: stc %d: %m", CardIndex() + 1);
return -1;
}
return stc.stc / stc.base;
}
return -1;
}
void cDvbSdFfDevice::TrickSpeed(int Speed)
{
if (fd_video >= 0)
CHECK(ioctl(fd_video, VIDEO_SLOWMOTION, Speed));
}
void cDvbSdFfDevice::Clear(void)
{
if (fd_video >= 0)
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
if (fd_audio >= 0)
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
cDevice::Clear();
}
void cDvbSdFfDevice::Play(void)
{
if (playMode == pmAudioOnly || playMode == pmAudioOnlyBlack) {
if (fd_audio >= 0)
CHECK(ioctl(fd_audio, AUDIO_CONTINUE));
}
else {
if (fd_audio >= 0) {
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, true));
CHECK(ioctl(fd_audio, AUDIO_CONTINUE));
}
if (fd_video >= 0)
CHECK(ioctl(fd_video, VIDEO_CONTINUE));
}
cDevice::Play();
}
void cDvbSdFfDevice::Freeze(void)
{
if (playMode == pmAudioOnly || playMode == pmAudioOnlyBlack) {
if (fd_audio >= 0)
CHECK(ioctl(fd_audio, AUDIO_PAUSE));
}
else {
if (fd_audio >= 0) {
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
CHECK(ioctl(fd_audio, AUDIO_PAUSE));
}
if (fd_video >= 0)
CHECK(ioctl(fd_video, VIDEO_FREEZE));
}
cDevice::Freeze();
}
void cDvbSdFfDevice::Mute(void)
{
if (fd_audio >= 0) {
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true));
}
cDevice::Mute();
}
void cDvbSdFfDevice::StillPicture(const uchar *Data, int Length)
{
if (!Data || Length < TS_SIZE)
return;
if (Data[0] == 0x47) {
// TS data
cDevice::StillPicture(Data, Length);
}
else if (Data[0] == 0x00 && Data[1] == 0x00 && Data[2] == 0x01 && (Data[3] & 0xF0) == 0xE0) {
// PES data
char *buf = MALLOC(char, Length);
if (!buf)
return;
int i = 0;
int blen = 0;
while (i < Length - 6) {
if (Data[i] == 0x00 && Data[i + 1] == 0x00 && Data[i + 2] == 0x01) {
int len = Data[i + 4] * 256 + Data[i + 5];
if ((Data[i + 3] & 0xF0) == 0xE0) { // video packet
// skip PES header
int offs = i + 6;
// skip header extension
if ((Data[i + 6] & 0xC0) == 0x80) {
// MPEG-2 PES header
if (Data[i + 8] >= Length)
break;
offs += 3;
offs += Data[i + 8];
len -= 3;
len -= Data[i + 8];
if (len < 0 || offs + len > Length)
break;
}
else {
// MPEG-1 PES header
while (offs < Length && len > 0 && Data[offs] == 0xFF) {
offs++;
len--;
}
if (offs <= Length - 2 && len >= 2 && (Data[offs] & 0xC0) == 0x40) {
offs += 2;
len -= 2;
}
if (offs <= Length - 5 && len >= 5 && (Data[offs] & 0xF0) == 0x20) {
offs += 5;
len -= 5;
}
else if (offs <= Length - 10 && len >= 10 && (Data[offs] & 0xF0) == 0x30) {
offs += 10;
len -= 10;
}
else if (offs < Length && len > 0) {
offs++;
len--;
}
}
if (blen + len > Length) // invalid PES length field
break;
memcpy(&buf[blen], &Data[offs], len);
i = offs + len;
blen += len;
}
else if (Data[i + 3] >= 0xBD && Data[i + 3] <= 0xDF) // other PES packets
i += len + 6;
else
i++;
}
else
i++;
}
video_still_picture sp = { buf, blen };
CHECK(ioctl(fd_video, VIDEO_STILLPICTURE, &sp));
free(buf);
}
else {
// non-PES data
video_still_picture sp = { (char *)Data, Length };
CHECK(ioctl(fd_video, VIDEO_STILLPICTURE, &sp));
}
}
bool cDvbSdFfDevice::Poll(cPoller &Poller, int TimeoutMs)
{
Poller.Add((playMode == pmAudioOnly || playMode == pmAudioOnlyBlack) ? fd_audio : fd_video, true);
return Poller.Poll(TimeoutMs);
}
bool cDvbSdFfDevice::Flush(int TimeoutMs)
{
//TODO actually this function should wait until all buffered data has been processed by the card, but how?
return true;
}
int cDvbSdFfDevice::PlayVideo(const uchar *Data, int Length)
{
return WriteAllOrNothing(fd_video, Data, Length, 1000, 10);
}
int cDvbSdFfDevice::PlayAudio(const uchar *Data, int Length, uchar Id)
{
return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10);
}
int cDvbSdFfDevice::PlayTsVideo(const uchar *Data, int Length)
{
return WriteAllOrNothing(fd_video, Data, Length, 1000, 10);
}
int cDvbSdFfDevice::PlayTsAudio(const uchar *Data, int Length)
{
return WriteAllOrNothing(fd_audio, Data, Length, 1000, 10);
}
// --- cDvbSdFfDeviceProbe ---------------------------------------------------
bool cDvbSdFfDeviceProbe::Probe(int Adapter, int Frontend)
{
static uint32_t SubsystemIds[] = {
0x110A0000, // Fujitsu Siemens DVB-C
0x13C20000, // Technotrend/Hauppauge WinTV DVB-S rev1.X or Fujitsu Siemens DVB-C
0x13C20001, // Technotrend/Hauppauge WinTV DVB-T rev1.X
0x13C20002, // Technotrend/Hauppauge WinTV DVB-C rev2.X
0x13C20003, // Technotrend/Hauppauge WinTV Nexus-S rev2.X
0x13C20004, // Galaxis DVB-S rev1.3
0x13C20006, // Fujitsu Siemens DVB-S rev1.6
0x13C20008, // Technotrend/Hauppauge DVB-T
0x13C2000A, // Technotrend/Hauppauge WinTV Nexus-CA rev1.X
0x13C2000E, // Technotrend/Hauppauge WinTV Nexus-S rev2.3
0x13C21002, // Technotrend/Hauppauge WinTV DVB-S rev1.3 SE
0x00000000
};
cString FileName;
cReadLine ReadLine;
FILE *f = NULL;
uint32_t SubsystemId = 0;
FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_vendor", Adapter, Frontend);
if ((f = fopen(FileName, "r")) != NULL) {
if (char *s = ReadLine.Read(f))
SubsystemId = strtoul(s, NULL, 0) << 16;
fclose(f);
}
FileName = cString::sprintf("/sys/class/dvb/dvb%d.frontend%d/device/subsystem_device", Adapter, Frontend);
if ((f = fopen(FileName, "r")) != NULL) {
if (char *s = ReadLine.Read(f))
SubsystemId |= strtoul(s, NULL, 0);
fclose(f);
}
for (uint32_t *sid = SubsystemIds; *sid; sid++) {
if (*sid == SubsystemId) {
dsyslog("creating cDvbSdFfDevice");
new cDvbSdFfDevice(Adapter, Frontend);
return true;
}
}
return false;
}

View File

@ -1,107 +0,0 @@
/*
* dvbsdffdevice.h: The DVB SD Full Featured device interface
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsdffdevice.h 2.11 2010/01/04 11:01:14 kls Exp $
*/
#ifndef __DVBSDFFDEVICE_H
#define __DVBSDFFDEVICE_H
#include "vdr/dvbdevice.h"
#include "vdr/dvbspu.h"
/// The cDvbSdFfDevice implements a DVB device which can be accessed through the Linux DVB driver API.
class cDvbSdFfDevice : public cDvbDevice {
private:
int fd_osd, fd_audio, fd_video, fd_stc;
protected:
virtual void MakePrimaryDevice(bool On);
public:
cDvbSdFfDevice(int Adapter, int Frontend);
virtual ~cDvbSdFfDevice();
virtual bool HasDecoder(void) const;
// SPU facilities
private:
cDvbSpuDecoder *spuDecoder;
public:
virtual cSpuDecoder *GetSpuDecoder(void);
// Channel facilities
private:
void TurnOffLiveMode(bool LiveView);
protected:
virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
// PID handle facilities
private:
bool SetAudioBypass(bool On);
protected:
virtual bool SetPid(cPidHandle *Handle, int Type, bool On);
// Image Grab facilities
private:
static int devVideoOffset;
int devVideoIndex;
public:
virtual uchar *GrabImage(int &Size, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1);
// Video format facilities
public:
virtual void SetVideoDisplayFormat(eVideoDisplayFormat VideoDisplayFormat);
virtual void SetVideoFormat(bool VideoFormat16_9);
virtual eVideoSystem GetVideoSystem(void);
virtual void GetVideoSize(int &Width, int &Height, double &VideoAspect);
virtual void GetOsdSize(int &Width, int &Height, double &PixelAspect);
// Track facilities
protected:
virtual void SetAudioTrackDevice(eTrackType Type);
// Audio facilities
private:
bool digitalAudio;
protected:
virtual int GetAudioChannelDevice(void);
virtual void SetAudioChannelDevice(int AudioChannel);
virtual void SetVolumeDevice(int Volume);
virtual void SetDigitalAudioDevice(bool On);
// Player facilities
protected:
ePlayMode playMode;
virtual bool CanReplay(void) const;
virtual bool SetPlayMode(ePlayMode PlayMode);
virtual int PlayVideo(const uchar *Data, int Length);
virtual int PlayAudio(const uchar *Data, int Length, uchar Id);
virtual int PlayTsVideo(const uchar *Data, int Length);
virtual int PlayTsAudio(const uchar *Data, int Length);
public:
virtual int64_t GetSTC(void);
virtual void TrickSpeed(int Speed);
virtual void Clear(void);
virtual void Play(void);
virtual void Freeze(void);
virtual void Mute(void);
virtual void StillPicture(const uchar *Data, int Length);
virtual bool Poll(cPoller &Poller, int TimeoutMs = 0);
virtual bool Flush(int TimeoutMs = 0);
};
class cDvbSdFfDeviceProbe : public cDvbDeviceProbe {
public:
virtual bool Probe(int Adapter, int Frontend);
};
#endif //__DVBSDFFDEVICE_H

View File

@ -1,213 +0,0 @@
/*
* dvbsdffosd.c: Implementation of the DVB SD Full Featured On Screen Display
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsdffosd.c 2.1 2009/12/31 15:36:00 kls Exp $
*/
#include "dvbsdffosd.h"
#include <linux/dvb/osd.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/unistd.h>
#include "vdr/tools.h"
// --- cDvbSdFfOsd -----------------------------------------------------------
#define MAXNUMWINDOWS 7 // OSD windows are counted 1...7
#define MAXOSDMEMORY 92000 // number of bytes available to the OSD (for unmodified DVB cards)
class cDvbSdFfOsd : public cOsd {
private:
int osdDev;
int osdMem;
bool shown;
void Cmd(OSD_Command cmd, int color = 0, int x0 = 0, int y0 = 0, int x1 = 0, int y1 = 0, const void *data = NULL);
protected:
virtual void SetActive(bool On);
public:
cDvbSdFfOsd(int Left, int Top, int OsdDev, uint Level);
virtual ~cDvbSdFfOsd();
virtual eOsdError CanHandleAreas(const tArea *Areas, int NumAreas);
virtual eOsdError SetAreas(const tArea *Areas, int NumAreas);
virtual void Flush(void);
};
cDvbSdFfOsd::cDvbSdFfOsd(int Left, int Top, int OsdDev, uint Level)
:cOsd(Left, Top, Level)
{
osdDev = OsdDev;
shown = false;
if (osdDev < 0)
esyslog("ERROR: invalid OSD device handle (%d)!", osdDev);
else {
osdMem = MAXOSDMEMORY;
#ifdef OSD_CAP_MEMSIZE
// modified DVB cards may have more OSD memory:
osd_cap_t cap;
cap.cmd = OSD_CAP_MEMSIZE;
if (ioctl(osdDev, OSD_GET_CAPABILITY, &cap) == 0)
osdMem = cap.val;
#endif
}
}
cDvbSdFfOsd::~cDvbSdFfOsd()
{
SetActive(false);
}
void cDvbSdFfOsd::SetActive(bool On)
{
if (On != Active()) {
cOsd::SetActive(On);
if (On) {
// must clear all windows here to avoid flashing effects - doesn't work if done
// in Flush() only for the windows that are actually used...
for (int i = 0; i < MAXNUMWINDOWS; i++) {
Cmd(OSD_SetWindow, 0, i + 1);
Cmd(OSD_Clear);
}
if (GetBitmap(0)) // only flush here if there are already bitmaps
Flush();
}
else if (shown) {
cBitmap *Bitmap;
for (int i = 0; (Bitmap = GetBitmap(i)) != NULL; i++) {
Cmd(OSD_SetWindow, 0, i + 1);
Cmd(OSD_Close);
}
shown = false;
}
}
}
eOsdError cDvbSdFfOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
{
eOsdError Result = cOsd::CanHandleAreas(Areas, NumAreas);
if (Result == oeOk) {
if (NumAreas > MAXNUMWINDOWS)
return oeTooManyAreas;
int TotalMemory = 0;
for (int i = 0; i < NumAreas; i++) {
if (Areas[i].bpp != 1 && Areas[i].bpp != 2 && Areas[i].bpp != 4 && Areas[i].bpp != 8)
return oeBppNotSupported;
if ((Areas[i].Width() & (8 / Areas[i].bpp - 1)) != 0)
return oeWrongAlignment;
if (Areas[i].Width() < 1 || Areas[i].Height() < 1 || Areas[i].Width() > 720 || Areas[i].Height() > 576)
return oeWrongAreaSize;
TotalMemory += Areas[i].Width() * Areas[i].Height() / (8 / Areas[i].bpp);
}
if (TotalMemory > osdMem)
return oeOutOfMemory;
}
return Result;
}
eOsdError cDvbSdFfOsd::SetAreas(const tArea *Areas, int NumAreas)
{
if (shown) {
cBitmap *Bitmap;
for (int i = 0; (Bitmap = GetBitmap(i)) != NULL; i++) {
Cmd(OSD_SetWindow, 0, i + 1);
Cmd(OSD_Close);
}
shown = false;
}
return cOsd::SetAreas(Areas, NumAreas);
}
void cDvbSdFfOsd::Cmd(OSD_Command cmd, int color, int x0, int y0, int x1, int y1, const void *data)
{
if (osdDev >= 0) {
osd_cmd_t dc;
dc.cmd = cmd;
dc.color = color;
dc.x0 = x0;
dc.y0 = y0;
dc.x1 = x1;
dc.y1 = y1;
dc.data = (void *)data;
ioctl(osdDev, OSD_SEND_CMD, &dc);
}
}
void cDvbSdFfOsd::Flush(void)
{
if (!Active())
return;
cBitmap *Bitmap;
for (int i = 0; (Bitmap = GetBitmap(i)) != NULL; i++) {
Cmd(OSD_SetWindow, 0, i + 1);
if (!shown)
Cmd(OSD_Open, Bitmap->Bpp(), Left() + Bitmap->X0(), Top() + Bitmap->Y0(), Left() + Bitmap->X0() + Bitmap->Width() - 1, Top() + Bitmap->Y0() + Bitmap->Height() - 1, (void *)1); // initially hidden!
int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
if (!shown || Bitmap->Dirty(x1, y1, x2, y2)) {
if (!shown) {
x1 = y1 = 0;
x2 = Bitmap->Width() - 1;
y2 = Bitmap->Height() - 1;
}
//TODO Workaround: apparently the bitmap sent to the driver always has to be a multiple
//TODO of 8 bits wide, and (dx * dy) also has to be a multiple of 8.
//TODO Fix driver (should be able to handle any size bitmaps!)
while ((x1 > 0 || x2 < Bitmap->Width() - 1) && ((x2 - x1) & 7) != 7) {
if (x2 < Bitmap->Width() - 1)
x2++;
else if (x1 > 0)
x1--;
}
//TODO "... / 2" <==> Bpp???
while ((y1 > 0 || y2 < Bitmap->Height() - 1) && (((x2 - x1 + 1) * (y2 - y1 + 1) / 2) & 7) != 0) {
if (y2 < Bitmap->Height() - 1)
y2++;
else if (y1 > 0)
y1--;
}
while ((x1 > 0 || x2 < Bitmap->Width() - 1) && (((x2 - x1 + 1) * (y2 - y1 + 1) / 2) & 7) != 0) {
if (x2 < Bitmap->Width() - 1)
x2++;
else if (x1 > 0)
x1--;
}
// commit colors:
int NumColors;
const tColor *Colors = Bitmap->Colors(NumColors);
if (Colors) {
//TODO this should be fixed in the driver!
tColor colors[NumColors];
for (int i = 0; i < NumColors; i++) {
// convert AARRGGBB to AABBGGRR (the driver expects the colors the wrong way):
colors[i] = (Colors[i] & 0xFF000000) | ((Colors[i] & 0x0000FF) << 16) | (Colors[i] & 0x00FF00) | ((Colors[i] & 0xFF0000) >> 16);
}
Colors = colors;
//TODO end of stuff that should be fixed in the driver
Cmd(OSD_SetPalette, 0, NumColors - 1, 0, 0, 0, Colors);
}
// commit modified data:
Cmd(OSD_SetBlock, Bitmap->Width(), x1, y1, x2, y2, Bitmap->Data(x1, y1));
}
Bitmap->Clean();
}
if (!shown) {
// Showing the windows in a separate loop to avoid seeing them come up one after another
for (int i = 0; (Bitmap = GetBitmap(i)) != NULL; i++) {
Cmd(OSD_SetWindow, 0, i + 1);
Cmd(OSD_MoveWindow, 0, Left() + Bitmap->X0(), Top() + Bitmap->Y0());
}
shown = true;
}
}
// --- cDvbOsdProvider -------------------------------------------------------
cDvbOsdProvider::cDvbOsdProvider(int OsdDev)
{
osdDev = OsdDev;
}
cOsd *cDvbOsdProvider::CreateOsd(int Left, int Top, uint Level)
{
return new cDvbSdFfOsd(Left, Top, osdDev, Level);
}

View File

@ -1,22 +0,0 @@
/*
* dvbsdffosd.h: Implementation of the DVB SD Full Featured On Screen Display
*
* See the README file for copyright information and how to reach the author.
*
* $Id: dvbsdffosd.h 2.1 2009/12/31 15:36:00 kls Exp $
*/
#ifndef __DVBSDFFODF_H
#define __DVBSDFFODF_H
#include "vdr/osd.h"
class cDvbOsdProvider : public cOsdProvider {
private:
int osdDev;
public:
cDvbOsdProvider(int OsdDev);
virtual cOsd *CreateOsd(int Left, int Top, uint Level);
};
#endif //__DVBSDFFODF_H

View File

@ -0,0 +1,34 @@
VDR Plugin 'epgtableid0' Revision History
-----------------------------------------
2012-03-10: Version 0.0.1
- Initial revision.
2012-12-27: Version 0.0.2
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.0.3
- Adapted Makefile to changes introduced in recent VDR versions.
2013-03-31: Version 2.0.0
- Official release.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2015-02-19: Version 2.2.0
- Official release.
2018-04-15: Version 2.4.0
- Official release.
2021-12-27: Version 2.6.0
- Official release.

View File

@ -0,0 +1,97 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
PLUGIN = epgtableid0
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The directory environment:
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### The compiler options:
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(PLGCFG)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### The name of the shared object file:
SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
INCLUDES +=
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
OBJS = $(PLUGIN).o
### The main target:
all: $(SOFILE)
### Implicit rules:
%.o: %.c
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
### Dependencies:
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Targets:
$(SOFILE): $(OBJS)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
install-lib: $(SOFILE)
install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
install: install-lib
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)
@tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE)
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~

View File

@ -0,0 +1,19 @@
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <vdr@tvdr.de>
Project's homepage: https://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.
Description:
The special handling of EPG events with table id 0x00 has been dropped
in VDR version 1.7.26, and replaced by a more felxible "EPG Handler"
concept. You can use this plugin to get the previous functionality back.

View File

@ -0,0 +1,98 @@
/*
* epgtableid0.c: A plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
* $Id: epgtableid0.c 4.1 2018/04/10 13:00:18 kls Exp $
*/
#include <vdr/epg.h>
#include <vdr/plugin.h>
static const char *VERSION = "2.4.0";
static const char *DESCRIPTION = "EPG handler for events with table id 0x00";
// --- cTable0Handler --------------------------------------------------------
class cTable0Handler : public cEpgHandler {
private:
bool Ignore(cEvent *Event) { return Event->TableID() == 0x00; }
public:
virtual bool SetEventID(cEvent *Event, tEventID EventID);
virtual bool SetStartTime(cEvent *Event, time_t StartTime);
virtual bool SetDuration(cEvent *Event, int Duration);
virtual bool SetTitle(cEvent *Event, const char *Title);
virtual bool SetShortText(cEvent *Event, const char *ShortText);
virtual bool SetDescription(cEvent *Event, const char *Description);
virtual bool SetContents(cEvent *Event, uchar *Contents);
virtual bool SetParentalRating(cEvent *Event, int ParentalRating);
virtual bool SetVps(cEvent *Event, time_t Vps);
virtual bool FixEpgBugs(cEvent *Event);
};
bool cTable0Handler::SetEventID(cEvent *Event, tEventID EventID)
{
return Ignore(Event);
}
bool cTable0Handler::SetStartTime(cEvent *Event, time_t StartTime)
{
return Ignore(Event);
}
bool cTable0Handler::SetDuration(cEvent *Event, int Duration)
{
return Ignore(Event);
}
bool cTable0Handler::SetTitle(cEvent *Event, const char *Title)
{
return Ignore(Event);
}
bool cTable0Handler::SetShortText(cEvent *Event, const char *ShortText)
{
return Ignore(Event);
}
bool cTable0Handler::SetDescription(cEvent *Event, const char *Description)
{
return Ignore(Event);
}
bool cTable0Handler::SetContents(cEvent *Event, uchar *Contents)
{
return Ignore(Event);
}
bool cTable0Handler::SetParentalRating(cEvent *Event, int ParentalRating)
{
return Ignore(Event);
}
bool cTable0Handler::SetVps(cEvent *Event, time_t Vps)
{
return Ignore(Event);
}
bool cTable0Handler::FixEpgBugs(cEvent *Event)
{
return Ignore(Event);
}
// --- cPluginEpgtableid0 ----------------------------------------------------
class cPluginEpgtableid0 : public cPlugin {
public:
virtual const char *Version(void) { return VERSION; }
virtual const char *Description(void) { return DESCRIPTION; }
virtual bool Initialize(void);
};
bool cPluginEpgtableid0::Initialize(void)
{
new cTable0Handler;
return true;
}
VDRPLUGINCREATOR(cPluginEpgtableid0); // Don't touch this!

View File

@ -74,3 +74,32 @@ VDR Plugin 'hello' Revision History
2010-02-28: Version 0.2.5
- Added Lithuanian language translations (thanks to Valdemaras Pipiras).
2012-12-27: Version 0.2.6
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.2.7
- Adapted Makefile to changes introduced in recent VDR versions.
2013-03-31: Version 2.0.0
- Official release.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2015-02-19: Version 2.2.0
- Official release.
2018-04-15: Version 2.4.0
- Updated the French OSD texts (thanks to Bernard Jaulin).
- Official release.
2021-12-27: Version 2.6.0
- Official release.

View File

@ -1,53 +1,56 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 2.2 2010/02/06 14:50:03 kls Exp $
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
# IMPORTANT: the presence of this macro is important for the Make.config
# file. So it must be defined, even if it is not used here!
#
PLUGIN = hello
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
LOCDIR = $(call PKGCFG,locdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### Make sure that necessary options are included:
### The compiler options:
include $(VDRDIR)/Make.global
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
-include $(PLGCFG)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### The name of the shared object file:
SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
INCLUDES +=
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
@ -55,54 +58,64 @@ OBJS = $(PLUGIN).o
### The main target:
all: libvdr-$(PLUGIN).so i18n
all: $(SOFILE) i18n
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
### Dependencies:
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Internationalization (I18N):
PODIR = po
LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Nmsgs = $(addprefix $(DESTDIR)$(LOCDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/$(PLUGIN).pot
%.mo: %.po
msgfmt -c -o $@ $<
@echo MO $@
$(Q)msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
@echo GT $@
$(Q)xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
@echo PO $@
$(Q)msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
@mkdir -p $(dir $@)
cp $< $@
$(I18Nmsgs): $(DESTDIR)$(LOCDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
install -D -m644 $< $@
.PHONY: i18n
i18n: $(I18Nmsgs)
i18n: $(I18Nmo) $(I18Npot)
install-i18n: $(I18Nmsgs)
### Targets:
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
$(SOFILE): $(OBJS)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
dist: clean
install-lib: $(SOFILE)
install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
install: install-lib install-i18n
dist: $(I18Npo) clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)

View File

@ -1,10 +1,10 @@
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <kls@tvdr.de>
Written by: Klaus Schmidinger <vdr@tvdr.de>
Project's homepage: http://www.tvdr.de
Project's homepage: https://www.tvdr.de
Latest version available at: http://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: hello.c 2.3 2010/02/28 12:49:28 kls Exp $
* $Id: hello.c 4.1 2018/04/10 13:00:22 kls Exp $
*/
#include <getopt.h>
@ -12,7 +12,7 @@
#include <vdr/interface.h>
#include <vdr/plugin.h>
static const char *VERSION = "0.2.5";
static const char *VERSION = "2.4.0";
static const char *DESCRIPTION = trNOOP("A friendly greeting");
static const char *MAINMENUENTRY = trNOOP("Hello");

View File

@ -1,5 +1,5 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Marc Rovira Vall <tm05462@salleURL.edu>, 2003
# Ramon Roca <ramon.roca@xcombo.com>, 2003
@ -7,12 +7,13 @@
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Jordi Vilà <jvila@tinet.org>\n"
"Language-Team: Catalanian\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Vladimír Bárta <vladimir.barta@k2atmitec.cz>, 2006
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>\n"
"Language-Team: Czech\n"
"Language-Team: Czech <vdr@linuxtv.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Mogens Elneff <mogens@elneff.dk>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish\n"
"Language-Team: Danish <vdr@linuxtv.org>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Klaus Schmidinger <kls@tvdr.de>, 2000
# Klaus Schmidinger <vdr@tvdr.de>, 2000
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German\n"
"Last-Translator: Klaus Schmidinger <vdr@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Dimitrios Dimitrakos <mail@dimitrios.de>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek\n"
"Language-Team: Greek <vdr@linuxtv.org>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-7\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Ruben Nunez Francisco <ruben.nunez@tang-it.com>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Ruben Nunez Francisco <ruben.nunez@tang-it.com>\n"
"Language-Team: Spanish\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,34 +1,35 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Arthur Konovalov <kasjas@hot.ee>, 2004
# Arthur Konovalov <artlov@gmail.com>, 2004, 2015
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n"
"Language-Team: Estonian\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-13\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "A friendly greeting"
msgstr ""
msgstr "Sõbralik tervitus"
msgid "Hello"
msgstr ""
msgstr "Tere"
msgid "Greeting time (s)"
msgstr ""
msgstr "Tervituse kestus (s)"
msgid "Use alternate greeting"
msgstr ""
msgstr "Vahelduv tervitus"
msgid "Howdy folks!"
msgstr ""
msgstr "Kuidas käsi käib?"
msgid "Hello world!"
msgstr ""
msgstr "Tere, maailm!"

View File

@ -1,25 +1,26 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Hannu Savolainen <hannu@opensound.com>, 2002
# Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, 2002
# Jaakko Hyvätti <jaakko@hyvatti.iki.fi>, 2002
# Niko Tarnanen <niko.tarnanen@hut.fi>, 2003
# Rolf Ahrenberg <rahrenbe@cc.hut.fi>, 2003
# Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>, 2003
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish\n"
"Last-Translator: Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "A friendly greeting"
msgstr "Ystävällisin terveisin"
msgstr "Ystävällisin terveisin"
msgid "Hello"
msgstr "Hei"
@ -28,10 +29,10 @@ msgid "Greeting time (s)"
msgstr "Tervehdysaika (s)"
msgid "Use alternate greeting"
msgstr "Käytä vaihtoehtoista tervehdystä"
msgstr "Käytä vaihtoehtoista tervehdystä"
msgid "Howdy folks!"
msgstr "Mitä kuuluu?"
msgstr "Mitä kuuluu?"
msgid "Hello world!"
msgstr "Hei maailma!"

View File

@ -1,37 +1,39 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Jean-Claude Repetto <jc@repetto.org>, 2001
# Olivier Jacques <jacquesolivier@hotmail.com>, 2003
# Gregoire Favre <greg@magma.unil.ch>, 2003
# Nicolas Huillard <nhuillard@e-dition.fr>, 2005
# Bernard Jaulin <bernard.jaulin@gmail.com>, 2018
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Nicolas Huillard <nhuillard@e-dition.fr>\n"
"Language-Team: French\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2018-04-14 8:34+0200\n"
"Last-Translator: Bernard Jaulin <bernard.jaulin@gmail.com>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "A friendly greeting"
msgstr ""
msgstr "Bien le bonjour"
msgid "Hello"
msgstr ""
msgstr "Hello"
msgid "Greeting time (s)"
msgstr ""
msgstr "Durée pour le salut (s)"
msgid "Use alternate greeting"
msgstr ""
msgstr "Changer de salutation"
msgid "Howdy folks!"
msgstr ""
msgstr "Bonjour à tous !"
msgid "Hello world!"
msgstr ""
msgstr "Bonjour le monde !"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Adrian Caval <anrxc@sysphere.org>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2008-03-17 19:52+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,17 +1,18 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Istvan Koenigsberger <istvnko@hotmail.com>, 2002
# Guido Josten <guido.josten@t-online.de>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Istvan Koenigsberger <istvnko@hotmail.com>, Guido Josten <guido.josten@t-online.de>\n"
"Language-Team: Hungarian\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Diego Pierotto <vdr-italian@tiscali.it>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2008-01-27 20:11+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Valdemaras Pipiras <varas@ambernet.lt>, 2009
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.10\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2009-12-08 12:18+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lietuviai\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,5 +1,5 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Arnold Niessen <niessen@iae.nl> <arnold.niessen@philips.com>, 2001
# Hans Dingemans <hans.dingemans@tacticalops.nl>, 2003
@ -7,12 +7,13 @@
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Maarten Wisse <Maarten.Wisse@urz.uni-hd.de>\n"
"Language-Team: Dutch\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,17 +1,18 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Jørgen Tvedt <pjtvedt@online.no>, 2001
# Truls Slevigen <truls@slevigen.no>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
"Language: nn\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,34 +1,38 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Michael Rakowski <mrak@gmx.de>, 2002
# Tomasz Maciej Nowak <tmn505@gmail.com>, 2018
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2018-02-19 00:41+0100\n"
"Last-Translator: Tomasz Maciej Nowak <tmn505@gmail.com>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 2.0.6\n"
msgid "A friendly greeting"
msgstr ""
msgstr "Przyjazne pozdrowienie"
msgid "Hello"
msgstr ""
msgstr "Witaj"
msgid "Greeting time (s)"
msgstr ""
msgstr "Czas pozdrowienia (s)"
msgid "Use alternate greeting"
msgstr ""
msgstr "Użyj alternatywnego pozdrowienia"
msgid "Howdy folks!"
msgstr ""
msgstr "Siema ziomy!"
msgid "Hello world!"
msgstr ""
msgstr "Witaj świecie!"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Paulo Lopes <pmml@netvita.pt>, 2001
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Paulo Lopes <pmml@netvita.pt>\n"
"Language-Team: Portuguese\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,17 +1,18 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Paul Lacatus <paul@campina.iiruc.ro>, 2002
# Lucian Muresan <lucianm@users.sourceforge.net>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Vyacheslav Dikonov <sdiconov@mail.ru>, 2004
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n"
"Language-Team: Russian\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Vladimír Bárta <vladimir.barta@k2atmitec.cz>, 2006
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2009-09-30 09:48+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
@ -32,4 +33,3 @@ msgstr "Ahojte v
msgid "Hello world!"
msgstr "Ahoj svet!"

View File

@ -1,17 +1,18 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Miha Setina <mihasetina@softhome.net>, 2000
# Matjaz Thaler <matjaz.thaler@guest.arnes.si>, 2003
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,17 +1,18 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Tomas Prybil <tomas@prybil.se>, 2002
# Jan Ekholm <chakie@infa.abo.fi>, 2003
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2007-08-11 12:34+0200\n"
"Last-Translator: Tomas Prybil <tomas@prybil.se>\n"
"Language-Team: Swedish\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Oktay Yolgeçen <oktay_73@yahoo.de>, 2007
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2008-05-12 22:34:4800\n"
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-9\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,19 +1,20 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Marc Rovira Vall <tm05462@salleURL.edu>, 2003
# Ramon Roca <ramon.roca@xcombo.com>, 2003
# Jordi Vilà <jvila@tinet.org>, 2003
# Nan Feng VDR <nfgx@21cn.com>, 2009.2
# Nan Feng VDR <nfgx@21cn.com>, 2009
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-10-13 11:52+0200\n"
"Project-Id-Version: vdr-hello 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 14:04+0100\n"
"PO-Revision-Date: 2009-01-23 09:48+0800\n"
"Last-Translator: senin\n"
"Language-Team: Catalanian\n"
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -35,4 +36,3 @@ msgstr "你好人!"
msgid "Hello world!"
msgstr "世界您好!"

View File

@ -21,3 +21,73 @@ VDR Plugin 'osddemo' Revision History
2008-04-13: Version 0.1.3
- Fixed setting the OSD level (thanks to Wolfgang Rohdewald).
2011-02-20: Version 0.2.0
- Added support for TrueColor OSD.
2011-03-28: Version 0.2.1
- Added Cancel(3) to ~cTrueColorDemo() (thanks to Reinhard Nissl).
- Added a missing font deletion in cTrueColorDemo::Action() (thanks to Reinhard Nissl).
2011-04-17: Version 0.2.2
- Fixed a possible NULL pointer dereference in osddemo.c (reported by Paul Menzel).
2012-03-13: Version 0.2.3
- No longer using GetFont() (which is not thread safe) in the 'osddemo' plugin,
2012-12-27: Version 0.2.4
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.2.5
- Adapted Makefile to changes introduced in recent VDR versions.
2013-02-13: Version 0.3.0
- Added demos of the DrawEllipse() and DrawSlope() function (press '1' or '2',
respectively).
2013-02-19: Version 0.3.1
- The demos can now also be ended with the "Back" key.
2013-03-31: Version 2.0.0
- Official release.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2014-02-06: Version 2.1.2
- Fixed flickering if subtitles are active while the OSD demo is running.
- Fixed a possible crash in the OSD demo (reported by Christopher Reimer).
2015-02-19: Version 2.2.0
- Official release.
2015-03-08: Version 2.3.1
- Now using cOsd::MaxPixmapSize().
- Fixed a vertical black line in the "TiledPixmaps" area on the rpihddevice OSD with
1280x800 pixel (thanks to Thomas Reufer).
- Added a demo case for storing images (thanks to Thomas Reufer).
2018-04-15: Version 2.4.0
- Official release.
2020-10-12: Version 2.4.1
- Added test cases for alignment of semi-circles (press key '4').
2021-12-27: Version 2.6.0
- Official release.

View File

@ -1,51 +1,55 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
#
PLUGIN = osddemo
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### Make sure that necessary options are included:
### The compiler options:
include $(VDRDIR)/Make.global
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
-include $(PLGCFG)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### The name of the shared object file:
SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
INCLUDES +=
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
@ -53,27 +57,33 @@ OBJS = $(PLUGIN).o
### The main target:
all: libvdr-$(PLUGIN).so
all: $(SOFILE)
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
# Dependencies:
### Dependencies:
MAKEDEP = g++ -MM -MG
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Targets:
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
$(SOFILE): $(OBJS)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
install-lib: $(SOFILE)
install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
install: install-lib
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)

View File

@ -1,10 +1,10 @@
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <kls@tvdr.de>
Written by: Klaus Schmidinger <vdr@tvdr.de>
Project's homepage: http://www.tvdr.de
Project's homepage: https://www.tvdr.de
Latest version available at: http://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -19,4 +19,16 @@ Demonstration of how a plugin can have its very own OSD setup.
It's a very primitive game that opens a small window in which the
user can draw lines with the Up, Down, Left and Right buttons.
The color buttons are used to switch color.
On a VDR system with TrueColor support it displays some of the
possibilities available with the TrueColor OSD. Once the "Animation"
pixmap is displayed, it can be moved around with the Up, Down, Left
and Right buttons. The Red button turns off the "Tiled Pixmaps"
display, and the Green button toggles the color display.
In both variants of the demo, pressing the '1' key displays all
possible ellipses that can be drawn with the DrawEllipse() function,
while pressing the '2' key shows all possible slopes the DrawSlope()
function can draw.
Press Ok to close the window.

View File

@ -3,15 +3,224 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: osddemo.c 2.1 2008/04/13 12:59:57 kls Exp $
* $Id: osddemo.c 4.5 2020/10/14 20:32:41 kls Exp $
*/
#include <vdr/osd.h>
#include <vdr/plugin.h>
static const char *VERSION = "0.1.3";
static const char *VERSION = "2.4.1";
static const char *DESCRIPTION = "Demo of arbitrary OSD setup";
static const char *MAINMENUENTRY = "Osd Demo";
// --- DrawEllipses ----------------------------------------------------------
void DrawEllipse(cOsd *Osd, int x1, int y1, int x2, int y2, int Quadrants)
{
Osd->DrawRectangle(x1 + 2, y1 + 2, x2 - 2, y2 - 2, clrGreen);
Osd->DrawEllipse(x1 + 3, y1 + 3, x2 - 3, y2 - 3, clrRed, Quadrants);
}
void DrawEllipses(cOsd *Osd)
{
int xa = 0;
int ya = 0;
int xb = Osd->Width() - 1;
int yb = Osd->Height() - 1;
int x0 = xa;
int x5 = xb;
int x1 = x0 + (xb - xa) / 5;
int x2 = x0 + (xb - xa) * 2 / 5;
int x3 = x0 + (xb - xa) * 3 / 5;
int x4 = x0 + (xb - xa) * 4 / 5;
int y0 = ya;
int y4 = yb;
int y2 = (y0 + y4) / 2;
int y1 = (y0 + y2) / 2;
int y3 = (y2 + y4) / 2;
Osd->DrawRectangle(xa, ya, xb, yb, clrGray50);
DrawEllipse(Osd, x4, y0, x5, y4, 0);
DrawEllipse(Osd, x2, y1, x3, y2, 1);
DrawEllipse(Osd, x1, y1, x2, y2, 2);
DrawEllipse(Osd, x1, y2, x2, y3, 3);
DrawEllipse(Osd, x2, y2, x3, y3, 4);
DrawEllipse(Osd, x3, y1, x4, y3, 5);
DrawEllipse(Osd, x1, y0, x3, y1, 6);
DrawEllipse(Osd, x0, y1, x1, y3, 7);
DrawEllipse(Osd, x1, y3, x3, y4, 8);
DrawEllipse(Osd, x3, y0, x4, y1, -1);
DrawEllipse(Osd, x0, y0, x1, y1, -2);
DrawEllipse(Osd, x0, y3, x1, y4, -3);
DrawEllipse(Osd, x3, y3, x4, y4, -4);
Osd->Flush();
}
// --- DrawSlopes ------------------------------------------------------------
void DrawSlope(cOsd *Osd, int x1, int y1, int x2, int y2, int Type)
{
Osd->DrawRectangle(x1 + 2, y1 + 2, x2 - 2, y2 - 2, clrGreen);
Osd->DrawSlope(x1 + 3, y1 + 3, x2 - 3, y2 - 3, clrRed, Type);
}
void DrawSlopes(cOsd *Osd)
{
int xa = 0;
int ya = 0;
int xb = Osd->Width() - 1;
int yb = Osd->Height() - 1;
int x0 = xa;
int x4 = xb;
int x2 = (x0 + x4) / 2;
int x1 = (x0 + x2) / 2;
int x3 = (x2 + x4) / 2;
int y0 = ya;
int y3 = yb;
int y2 = (y0 + y3) / 2;
int y1 = (y0 + y2) / 2;
Osd->DrawRectangle(xa, ya, xb, yb, clrGray50);
DrawSlope(Osd, x0, y0, x2, y1, 0);
DrawSlope(Osd, x2, y0, x4, y1, 1);
DrawSlope(Osd, x0, y1, x2, y2, 2);
DrawSlope(Osd, x2, y1, x4, y2, 3);
DrawSlope(Osd, x0, y2, x1, y3, 4);
DrawSlope(Osd, x1, y2, x2, y3, 5);
DrawSlope(Osd, x2, y2, x3, y3, 6);
DrawSlope(Osd, x3, y2, x4, y3, 7);
Osd->Flush();
}
// --- DrawImages ------------------------------------------------------------
struct tOsdImageRef {
int image;
cSize size;
};
#define NUMOSDIMAGES 16
#define NUMOSDIMAGEVARIANTS 8
void DrawImages(cOsd *Osd)
{
// Create images:
cImage *images[NUMOSDIMAGEVARIANTS];
for (int i = 0; i < NUMOSDIMAGEVARIANTS; i++) {
images[i] = new cImage(cSize(
i == 0 || i == 1 ? Osd->MaxPixmapSize().Width() + 1 : rand() % Osd->Width(),
i == 0 || i == 2 ? Osd->MaxPixmapSize().Height() + 1 : rand() % Osd->Height()));
for (int x = 0; x < images[i]->Width(); x++) {
for (int y = 0; y < images[i]->Height(); y++) {
images[i]->SetPixel(cPoint(x, y),
(!x || !y || x == images[i]->Width() - 1 || y == images[i]->Height() - 1) ? clrWhite :
(x > images[i]->Width() / 2 ?
(y > images[i]->Height() / 2 ? clrBlue : clrGreen) :
(y > images[i]->Height() / 2 ? clrRed : clrYellow)));
}
}
}
// Store images:
tOsdImageRef osdImages[NUMOSDIMAGES];
for (int i = 0; i < NUMOSDIMAGES; i++) {
osdImages[i].image = cOsdProvider::StoreImage(*images[i % NUMOSDIMAGEVARIANTS]);
osdImages[i].size.Set(images[i % NUMOSDIMAGEVARIANTS]->Size());
}
// Delete images:
for (int i = 0; i < NUMOSDIMAGEVARIANTS; i++)
delete images[i];
// Draw images:
for (int i = 0; i < NUMOSDIMAGES; i++)
Osd->DrawImage(cPoint(rand() % (Osd->Width() + osdImages[i].size.Width()), rand() % (Osd->Height() + osdImages[i].size.Height())).Shifted(-osdImages[i].size.Width(), -osdImages[i].size.Height()), osdImages[i].image);
// Drop image references:
for (int i = 0; i < NUMOSDIMAGES; i++)
cOsdProvider::DropImage(osdImages[i].image);
Osd->Flush();
}
// --- DrawEllipseAlignments -------------------------------------------------
void DrawEllipseAlignments(cOsd *Osd)
{
cFont *Font = cFont::CreateFont(Setup.FontOsd, 20);
int xa = 0;
int ya = 0;
int xb = Osd->Width() - 1;
int yb = Osd->Height() - 1;
Osd->DrawRectangle(xa, ya, xb, yb, clrBlack);
int d = 50;
int a = d / 2 + 1;
int t = a * 2;
int n = 30;
for (int i = 0; i < n; i++) {
Osd->DrawRectangle(a, t, a + d - 1, t + d - 1, clrGreen);
Osd->DrawEllipse(a, t - d / 2, a + d - 1, t, clrGreen, 6);
Osd->DrawEllipse(a, t + d, a + d - 1, t + d + d / 2, clrGreen, 8);
Osd->DrawText(a + d / 3, t + d / 3, itoa(d), clrRed, clrGreen, Font);
a += d + 5;
d++;
}
d = 50;
a = d * 3;
n = 20;
for (int i = 0; i < n; i++) {
Osd->DrawRectangle(t, a, t + d - 1, a + d - 1, clrGreen);
Osd->DrawEllipse(t - d / 2, a, t, a + d - 1, clrGreen, 7);
Osd->DrawEllipse(t + d, a, t + d + d / 2, a + d - 1, clrGreen, 5);
Osd->DrawText(t + d / 3, a + d / 3, itoa(d), clrRed, clrGreen, Font);
a += d + 5;
d++;
}
d = 50;
a = d * 3;
t = d * 5;
n = 30;
for (int i = 0; i < n; i++) {
Osd->DrawRectangle(a, t, a + d - 1, t + d - 1, clrGreen);
Osd->DrawEllipse(a, t - d, a + d - 1, t, clrGreen, 2);
Osd->DrawEllipse(a, t + d, a + d - 1, t + d + d, clrGreen, 3);
Osd->DrawText(a + d / 3, t + d / 3, itoa(d), clrRed, clrGreen, Font);
a += d + 5;
d++;
}
d = 50;
a = d * 3;
t = d * 9;
n = 30;
for (int i = 0; i < n; i++) {
Osd->DrawRectangle(a, t, a + d - 1, t + d - 1, clrGreen);
Osd->DrawEllipse(a, t - d, a + d - 1, t, clrGreen, 1);
Osd->DrawEllipse(a, t + d, a + d - 1, t + d + d, clrGreen, 4);
Osd->DrawText(a + d / 3, t + d / 3, itoa(d), clrRed, clrGreen, Font);
a += d + 5;
d++;
}
d = 50;
a = d * 12;
t = d * 5;
n = 20;
for (int i = 0; i < n; i++) {
Osd->DrawRectangle(t, a, t + d - 1, a + d - 1, clrGreen);
Osd->DrawEllipse(t - d, a, t, a + d - 1, clrGreen, 2);
Osd->DrawEllipse(t + d, a, t + d + d, a + d - 1, clrGreen, 1);
Osd->DrawText(t + d / 3, a + d / 3, itoa(d), clrRed, clrGreen, Font);
a += d + 5;
d++;
}
d = 50;
a = d * 12;
t = d * 9;
n = 20;
for (int i = 0; i < n; i++) {
Osd->DrawRectangle(t, a, t + d - 1, a + d - 1, clrGreen);
Osd->DrawEllipse(t - d, a, t, a + d - 1, clrGreen, 3);
Osd->DrawEllipse(t + d, a, t + d + d, a + d - 1, clrGreen, 4);
Osd->DrawText(t + d / 3, a + d / 3, itoa(d), clrRed, clrGreen, Font);
a += d + 5;
d++;
}
Osd->Flush();
delete Font;
}
// --- cLineGame -------------------------------------------------------------
class cLineGame : public cOsdObject {
@ -22,7 +231,7 @@ private:
tColor color;
public:
cLineGame(void);
~cLineGame();
virtual ~cLineGame();
virtual void Show(void);
virtual eOSState ProcessKey(eKeys Key);
};
@ -30,7 +239,7 @@ public:
cLineGame::cLineGame(void)
{
osd = NULL;
x = y = 50;
x = y = 0;
color = clrRed;
}
@ -41,12 +250,23 @@ cLineGame::~cLineGame()
void cLineGame::Show(void)
{
osd = cOsdProvider::NewOsd(100, 50, 50);
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop());
if (osd) {
tArea Area = { 0, 0, 99, 199, 4 };
osd->SetAreas(&Area, 1);
osd->DrawRectangle(0, 0, 99, 199, clrGray50);
osd->Flush();
int x1 = cOsd::OsdWidth() - 1;
int y1 = cOsd::OsdHeight() - 1;
while (x1 > 0 && y1 > 0) {
tArea Area = { 0, 0, x1, y1, 4 };
if (osd->CanHandleAreas(&Area, 1) == oeOk) {
osd->SetAreas(&Area, 1);
osd->DrawRectangle(0, 0, osd->Width() - 1, osd->Height() - 1, clrGray50);
osd->Flush();
x = osd->Width() / 2;
y = osd->Height() / 2;
break;
}
x1 = x1 * 9 / 10;
y1 = y1 * 9 / 10;
}
}
}
@ -54,25 +274,420 @@ eOSState cLineGame::ProcessKey(eKeys Key)
{
eOSState state = cOsdObject::ProcessKey(Key);
if (state == osUnknown) {
const int d = 4;
switch (Key & ~k_Repeat) {
case kUp: if (y > 0) y--; break;
case kDown: if (y < 196) y++; break;
case kLeft: if (x > 0) x--; break;
case kRight: if (x < 96) x++; break;
case kUp: y = max(0, y - d); break;
case kDown: y = min(osd->Height() - d, y + d); break;
case kLeft: x = max(0, x - d); break;
case kRight: x = min(osd->Width() - d, x + d); break;
case kRed: color = clrRed; break;
case kGreen: color = clrGreen; break;
case kYellow: color = clrYellow; break;
case kBlue: color = clrBlue; break;
case k1: DrawEllipses(osd);
return osContinue;
case k2: DrawSlopes(osd);
return osContinue;
case kBack:
case kOk: return osEnd;
default: return state;
}
osd->DrawRectangle(x, y, x + 3, y + 3, color);
osd->DrawRectangle(x, y, x + d - 1, y + d - 1, color);
osd->Flush();
state = osContinue;
}
return state;
}
// --- cTrueColorDemo --------------------------------------------------------
class cTrueColorDemo : public cOsdObject, public cThread {
private:
cOsd *osd;
cPoint cursor;
cRect cursorLimits;
bool clockwise;
cPixmap *destroyablePixmap;
cPixmap *toggleablePixmap;
bool SetArea(void);
virtual void Action(void);
cPixmap *CreateTextPixmap(const char *s, int Line, int Layer, tColor ColorFg, tColor ColorBg, const cFont *Font);
public:
cTrueColorDemo(void);
virtual ~cTrueColorDemo();
virtual void Show(void);
virtual eOSState ProcessKey(eKeys Key);
};
cTrueColorDemo::cTrueColorDemo(void)
{
osd = NULL;
clockwise = true;
destroyablePixmap = NULL;
toggleablePixmap = NULL;
}
cTrueColorDemo::~cTrueColorDemo()
{
Cancel(3);
delete osd;
}
cPixmap *cTrueColorDemo::CreateTextPixmap(const char *s, int Line, int Layer, tColor ColorFg, tColor ColorBg, const cFont *Font)
{
const int h = Font->Height(s);
int w = Font->Width(s);
cPixmap *Pixmap = osd->CreatePixmap(Layer, cRect((osd->Width() - w) / 2, Line, w, h));
if (Pixmap) {
Pixmap->Clear();
Pixmap->SetAlpha(0);
Pixmap->DrawText(cPoint(0, 0), s, ColorFg, ColorBg, Font, w);
}
return Pixmap;
}
void cTrueColorDemo::Action(void)
{
cPixmap *FadeInPixmap = NULL;
cPixmap *FadeOutPixmap = NULL;
cPixmap *MovePixmap = NULL;
cPixmap *NextPixmap = NULL;
cPixmap *TilePixmap = NULL;
cPixmap *ScrollPixmap = NULL;
cPixmap *AnimPixmap = NULL;
cFont *OsdFont = cFont::CreateFont(Setup.FontOsd, Setup.FontOsdSize);
cFont *SmlFont = cFont::CreateFont(Setup.FontSml, Setup.FontSmlSize);
cFont *LrgFont = cFont::CreateFont(Setup.FontOsd, osd->Height() / 10);
int FrameTime = 40; // ms
int FadeTime = 1000; // ms
int MoveTime = 4000; // ms
int TileTime = 6000; // ms
int ScrollWaitTime = 1000; // ms
int ScrollLineTime = 200; // ms
int ScrollTotalTime = 8000; // ms
uint64_t Start = 0;
uint64_t ScrollStartTime = 0;
int ScrollLineNumber = 0;
cPoint MoveStart, MoveEnd;
cPoint TileStart, TileEnd;
cPoint ScrollStart, ScrollEnd;
int Line = osd->Height() / 20;
int StartLine = Line;
cPoint OldCursor;
int State = 0;
while (Running()) {
cPixmap::Lock();
bool Animated = false;
uint64_t Now = cTimeMs::Now();
if (FadeInPixmap) {
double t = min(double(Now - Start) / FadeTime, 1.0);
int Alpha = t * ALPHA_OPAQUE;
FadeInPixmap->SetAlpha(Alpha);
if (t >= 1)
FadeInPixmap = NULL;
Animated = true;
}
if (FadeOutPixmap) {
double t = min(double(Now - Start) / FadeTime, 1.0);
int Alpha = ALPHA_OPAQUE - t * ALPHA_OPAQUE;
FadeOutPixmap->SetAlpha(Alpha);
if (t >= 1)
FadeOutPixmap = NULL;
Animated = true;
}
if (MovePixmap) {
double t = min(double(Now - Start) / MoveTime, 1.0);
int x = MoveStart.X() + t * (MoveEnd.X() - MoveStart.X());
int y = MoveStart.Y() + t * (MoveEnd.Y() - MoveStart.Y());
cRect r = MovePixmap->ViewPort();
r.SetPoint(x, y);
MovePixmap->SetViewPort(r);
if (t >= 1)
MovePixmap = NULL;
Animated = true;
}
if (TilePixmap) {
double t = min(double(Now - Start) / TileTime, 1.0);
int x = TileStart.X() + t * (TileEnd.X() - TileStart.X());
int y = TileStart.Y() + t * (TileEnd.Y() - TileStart.Y());
TilePixmap->SetDrawPortPoint(cPoint(x, y));
if (t >= 1) {
destroyablePixmap = TilePixmap;
TilePixmap = NULL;
}
Animated = true;
}
if (ScrollPixmap) {
if (int(Now - Start) > ScrollWaitTime) {
if (ScrollStartTime) {
double t = min(double(Now - ScrollStartTime) / ScrollLineTime, 1.0);
int x = ScrollStart.X() + t * (ScrollEnd.X() - ScrollStart.X());
int y = ScrollStart.Y() + t * (ScrollEnd.Y() - ScrollStart.Y());
ScrollPixmap->SetDrawPortPoint(cPoint(x, y));
if (t >= 1) {
if (int(Now - Start) < ScrollTotalTime) {
cRect r = ScrollPixmap->DrawPort();
r.SetPoint(-r.X(), -r.Y());
ScrollPixmap->Pan(cPoint(0, 0), r);
cString s = cString::sprintf("Line %d", ++ScrollLineNumber);
ScrollPixmap->DrawRectangle(cRect(0, ScrollPixmap->ViewPort().Height(), ScrollPixmap->DrawPort().Width(), ScrollPixmap->DrawPort().Height()), clrTransparent);
ScrollPixmap->DrawText(cPoint(0, ScrollPixmap->ViewPort().Height()), s, clrYellow, clrTransparent, OsdFont);
ScrollStartTime = Now;
}
else {
FadeOutPixmap = ScrollPixmap;
ScrollPixmap = NULL;
Start = cTimeMs::Now();
}
}
}
else
ScrollStartTime = Now;
}
Animated = true;
}
if (AnimPixmap) {
int d = AnimPixmap->ViewPort().Height();
if (clockwise)
d = -d;
cPoint p = AnimPixmap->DrawPort().Point().Shifted(0, d);
if (clockwise && p.Y() <= -AnimPixmap->DrawPort().Height())
p.SetY(0);
else if (!clockwise && p.Y() > 0)
p.SetY(-(AnimPixmap->DrawPort().Height() - AnimPixmap->ViewPort().Height()));
AnimPixmap->SetDrawPortPoint(p);
}
if (!Animated) {
switch (State) {
case 0: {
FadeInPixmap = CreateTextPixmap("VDR", Line, 1, clrYellow, clrTransparent, LrgFont);
if (FadeInPixmap)
Line += FadeInPixmap->DrawPort().Height();
Start = cTimeMs::Now();
State++;
}
break;
case 1: {
FadeInPixmap = CreateTextPixmap("Video Disk Recorder", Line, 3, clrYellow, clrTransparent, OsdFont);
if (FadeInPixmap)
Line += FadeInPixmap->DrawPort().Height();
Start = cTimeMs::Now();
State++;
}
break;
case 2: {
FadeInPixmap = CreateTextPixmap("True Color OSD Demo", Line, 1, clrYellow, clrTransparent, OsdFont);
if (FadeInPixmap)
Line += FadeInPixmap->DrawPort().Height();
Start = cTimeMs::Now();
State++;
}
break;
case 3: {
NextPixmap = CreateTextPixmap("Millions of colors", Line, 1, clrYellow, clrTransparent, LrgFont);
if (NextPixmap) {
FadeInPixmap = NextPixmap;
Start = cTimeMs::Now();
StartLine = Line;
Line += NextPixmap->DrawPort().Height();
}
State++;
}
break;
case 4: {
Line += osd->Height() / 10;
int w = osd->Width() / 2;
int h = osd->Height() - Line - osd->Height() / 10;
cImage Image(cSize(w, h));
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++)
Image.SetPixel(cPoint(x, y), HsvToColor(360 * double(x) / w, 1 - double(y) / h, 1) | 0xDF000000);
}
if (cPixmap *Pixmap = osd->CreatePixmap(2, cRect((osd->Width() - w) / 2, Line, w, h))) {
Pixmap->DrawImage(cPoint(0, 0), Image);
toggleablePixmap = Pixmap;
}
State++;
}
break;
case 5: {
if (NextPixmap) {
MovePixmap = NextPixmap;
MoveStart = MovePixmap->ViewPort().Point();
MoveEnd.Set(osd->Width() - MovePixmap->ViewPort().Width(), osd->Height() - MovePixmap->ViewPort().Height());
Start = cTimeMs::Now();
}
State++;
}
break;
case 6: {
TilePixmap = CreateTextPixmap("Tiled Pixmaps", StartLine, 1, clrRed, clrWhite, OsdFont);
if (TilePixmap) {
TilePixmap->SetViewPort(TilePixmap->ViewPort().Grown(TilePixmap->DrawPort().Width(), TilePixmap->DrawPort().Height()));
TilePixmap->SetAlpha(200);
TilePixmap->SetTile(true);
TileStart = TilePixmap->DrawPort().Point();
TileEnd = TileStart.Shifted(TilePixmap->ViewPort().Width(), TilePixmap->ViewPort().Height());
MovePixmap = TilePixmap;
MoveStart = MovePixmap->ViewPort().Point();
MoveEnd.Set(10, osd->Height() - MovePixmap->ViewPort().Height() - 10);
Start = cTimeMs::Now();
}
State++;
}
break;
case 7: {
const char *Text = "Scrolling Pixmaps";
int w = OsdFont->Width(Text);
int h = OsdFont->Height();
if (cPixmap *Pixmap = osd->CreatePixmap(2, cRect((osd->Width() - w) / 2, StartLine, w, 2 * h), cRect(0, 0, w, 3 * h))) {
Pixmap->Clear();
Pixmap->DrawText(cPoint(0, 0), Text, clrYellow, clrTransparent, OsdFont);
cString s = cString::sprintf("Line %d", ++ScrollLineNumber);
Pixmap->DrawText(cPoint(0, Pixmap->ViewPort().Height()), s, clrYellow, clrTransparent, OsdFont);
ScrollPixmap = Pixmap;
ScrollStart.Set(0, 0);
ScrollEnd.Set(0, -h);
Start = cTimeMs::Now();
}
State++;
}
break;
case 8: {
const char *Text = "Animation";
const int Size = SmlFont->Width(Text) + 10;
const int NumDots = 12;
const int AnimFrames = NumDots;
int Rows = min(osd->MaxPixmapSize().Height() / Size, AnimFrames);
int Cols = (AnimFrames + Rows - 1) / Rows;
// Temporarily using pixmap layer 0 to have the text alpha blended:
AnimPixmap = osd->CreatePixmap(0, cRect((osd->Width() - Size) / 2, StartLine, Size, Size), cRect(0, 0, Size * Cols, Size * Rows));
if (AnimPixmap) {
AnimPixmap->SetAlpha(0);
AnimPixmap->Clear();
const int Diameter = Size / 5;
for (int Frame = 0; Frame < AnimFrames; Frame++) {
int x0 = Frame / Rows * Size;
int y0 = Frame % Rows * Size;
AnimPixmap->DrawEllipse(cRect(x0, y0, Size, Size), 0xDDFFFFFF);
int xc = x0 + Size / 2 - Diameter / 2;
int yc = y0 + Size / 2 - Diameter / 2;
int Color = 0xFF;
int Delta = Color / NumDots / 3;
for (int a = 0; a < NumDots; a++) {
double t = 2 * M_PI * (Frame + a) / NumDots;
int x = xc + ((Size - Diameter) / 2 - 5) * cos(t);
int y = yc + ((Size - Diameter) / 2 - 5) * sin(t);
AnimPixmap->DrawEllipse(cRect(x, y, Diameter, Diameter), ArgbToColor(0xFF, Color, Color, Color));
Color -= Delta;
}
AnimPixmap->DrawText(cPoint(x0, y0), Text, clrBlack, clrTransparent, SmlFont, Size, Size, taCenter);
}
AnimPixmap->SetLayer(3); // now setting the actual pixmap layer
FadeInPixmap = AnimPixmap;
LOCK_THREAD;
OldCursor = cursor = AnimPixmap->ViewPort().Point();
cursorLimits.Set(0, 0, osd->Width(), osd->Height());
cursorLimits.SetRight(cursorLimits.Right() - Size);
cursorLimits.SetBottom(cursorLimits.Bottom() - Size);
cursorLimits.Grow(-10, -10);
Start = cTimeMs::Now();
}
State++;
}
break;
case 9: {
LOCK_THREAD;
if (cursor != OldCursor) {
MovePixmap = AnimPixmap;
MoveStart = MovePixmap->ViewPort().Point();
MoveEnd = OldCursor = cursor;
MoveTime = 500;
Start = cTimeMs::Now();
}
}
break;
}
}
osd->Flush();
cPixmap::Unlock();
int Delta = cTimeMs::Now() - Now;
if (Delta < FrameTime)
cCondWait::SleepMs(FrameTime - Delta);
}
destroyablePixmap = NULL;
toggleablePixmap = NULL;
delete OsdFont;
delete SmlFont;
delete LrgFont;
}
bool cTrueColorDemo::SetArea(void)
{
if (osd) {
tArea Area = { 0, 0, cOsd::OsdWidth() - 1, cOsd::OsdHeight() - 1, 32 };
return osd->SetAreas(&Area, 1) == oeOk;
}
return false;
}
void cTrueColorDemo::Show(void)
{
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop());
if (osd) {
if (SetArea()) {
osd->DrawRectangle(0, 0, osd->Width() - 1, osd->Height() - 1, clrGray50);
osd->Flush();
Start();
}
}
}
eOSState cTrueColorDemo::ProcessKey(eKeys Key)
{
eOSState state = cOsdObject::ProcessKey(Key);
if (state == osUnknown) {
LOCK_PIXMAPS;
LOCK_THREAD;
const int d = 80;
switch (Key & ~k_Repeat) {
case kUp: cursor.SetY(max(cursorLimits.Top(), cursor.Y() - d)); clockwise = false; break;
case kDown: cursor.SetY(min(cursorLimits.Bottom(), cursor.Y() + d)); clockwise = true; break;
case kLeft: cursor.SetX(max(cursorLimits.Left(), cursor.X() - d)); clockwise = false; break;
case kRight: cursor.SetX(min(cursorLimits.Right(), cursor.X() + d)); clockwise = true; break;
case kRed: if (destroyablePixmap) {
osd->DestroyPixmap(destroyablePixmap);
destroyablePixmap = NULL;
}
break;
case kGreen: if (toggleablePixmap)
toggleablePixmap->SetLayer(-toggleablePixmap->Layer());
break;
case k1: Cancel(3);
SetArea();
DrawEllipses(osd);
break;
case k2: Cancel(3);
SetArea();
DrawSlopes(osd);
break;
case k3: Cancel(3);
SetArea();
DrawImages(osd);
break;
case k4: Cancel(3);
SetArea();
DrawEllipseAlignments(osd);
return osContinue;
case kBack:
case kOk: return osEnd;
default: return state;
}
state = osContinue;
}
return state;
}
// --- cPluginOsddemo --------------------------------------------------------
class cPluginOsddemo : public cPlugin {
@ -131,6 +746,8 @@ void cPluginOsddemo::Housekeeping(void)
cOsdObject *cPluginOsddemo::MainMenuAction(void)
{
// Perform the action when selected from the main VDR menu.
if (cOsdProvider::SupportsTrueColor())
return new cTrueColorDemo;
return new cLineGame;
}

View File

@ -9,7 +9,7 @@ VDR Plugin 'pictures' Revision History
- Fixed the Play function (when used from a directory in the pictures menu
it always started with the next directory).
- Added Finnish texts (thanks to Rolf Ahrenberg <rahrenbe@cc.hut.fi>).
- Added Finnish texts (thanks to Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>).
2008-01-27: Version 0.0.3
@ -41,3 +41,82 @@ VDR Plugin 'pictures' Revision History
2010-02-28: Version 0.0.9
- Added Lithuanian language translations (thanks to Valdemaras Pipiras).
2011-02-20: Version 0.1.0
- Fixed reallocating memory (reported by Paul Menzel).
2011-07-23:
- Now rotating images according to the EXIF 'Orientation' parameter.
2011-08-14:
- The pic2mpg script now generates HD images (thanks to Andre Weidemann for his
support in using convert/ffmpeg). The old SD version is still available as
pic2mpg-sd.
2011-11-02:
- Fixed handling images that are rotated by 180 degrees in pic2mpg.
2012-01-08:
- Added option -o to pic2mpg.
2012-02-17:
- cReadDir::Next() now skips directory entries "." and "..".
2012-02-27: Version 0.1.2
- Removed an obsolete command line option.
2012-04-28: Version 0.1.3
- Added cPictureControl::GetHeader().
2012-12-27: Version 0.1.4
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.1.5
- Adapted Makefile to changes introduced in recent VDR versions.
2013-03-31: Version 2.0.0
- Official release.
2013-07-01:
- Added option -x to pic2mpg.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2015-02-19: Version 2.2.0
- Official release.
2015-07-23: Version 2.3.1
- Added a missing 'const'.
2017-10-06: Version 2.3.2
- Adapted the pic2mpg script to new ffmpeg options.
- No longer using 'convert' to scale/rotate the pictures.
2018-04-15: Version 2.4.0
- Official release.
2021-12-27: Version 2.6.0
- Official release.
2022-12-05: Version 2.6.1
Fixed initializing cPictureControl.

View File

@ -1,53 +1,56 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 2.2 2010/02/06 14:50:03 kls Exp $
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
# IMPORTANT: the presence of this macro is important for the Make.config
# file. So it must be defined, even if it is not used here!
#
PLUGIN = pictures
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
LOCDIR = $(call PKGCFG,locdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### Make sure that necessary options are included:
### The compiler options:
include $(VDRDIR)/Make.global
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
-include $(PLGCFG)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### The name of the shared object file:
SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
INCLUDES +=
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
@ -55,54 +58,64 @@ OBJS = $(PLUGIN).o entry.o menu.o player.o
### The main target:
all: libvdr-$(PLUGIN).so i18n
all: $(SOFILE) i18n
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
### Dependencies:
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Internationalization (I18N):
PODIR = po
LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Nmsgs = $(addprefix $(DESTDIR)$(LOCDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/$(PLUGIN).pot
%.mo: %.po
msgfmt -c -o $@ $<
@echo MO $@
$(Q)msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
@echo GT $@
$(Q)xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
@echo PO $@
$(Q)msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
@mkdir -p $(dir $@)
cp $< $@
$(I18Nmsgs): $(DESTDIR)$(LOCDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
install -D -m644 $< $@
.PHONY: i18n
i18n: $(I18Nmsgs) $(I18Npot)
i18n: $(I18Nmo) $(I18Npot)
install-i18n: $(I18Nmsgs)
### Targets:
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
$(SOFILE): $(OBJS)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
dist: clean
install-lib: $(SOFILE)
install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
install: install-lib install-i18n
dist: $(I18Npo) clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)
@ -111,4 +124,5 @@ dist: clean
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~

View File

@ -1,10 +1,10 @@
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <kls@tvdr.de>
Written by: Klaus Schmidinger <vdr@tvdr.de>
Project's homepage: http://www.tvdr.de
Project's homepage: https://www.tvdr.de
Latest version available at: http://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: entry.c 1.3 2008/02/17 13:42:34 kls Exp $
* $Id: entry.c 2.1 2012/02/17 14:00:28 kls Exp $
*/
#include "entry.h"
@ -48,13 +48,11 @@ void cPictureEntry::Load(void) const
if (d.Ok()) {
struct dirent *e;
while ((e = d.Next()) != NULL) {
if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) {
struct stat ds;
if (stat(AddDirectory(Directory, e->d_name), &ds) == 0) {
if (!entries)
entries = new cList<cPictureEntry>;
entries->Add(new cPictureEntry(e->d_name, this, S_ISDIR(ds.st_mode)));
}
struct stat ds;
if (stat(AddDirectory(Directory, e->d_name), &ds) == 0) {
if (!entries)
entries = new cList<cPictureEntry>;
entries->Add(new cPictureEntry(e->d_name, this, S_ISDIR(ds.st_mode)));
}
}
if (entries)

View File

@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: menu.c 1.1 2008/01/13 11:35:18 kls Exp $
* $Id: menu.c 4.1 2015/07/17 10:13:56 kls Exp $
*/
#include "menu.h"
@ -85,7 +85,7 @@ eOSState cPictureMenu::SelectItem(const char *Path, bool SlideShow)
if (Item) {
const cList<cPictureEntry> *l = pictureEntry->Entries();
if (l) {
cPictureEntry *pe = l->Get(Current());
const cPictureEntry *pe = l->Get(Current());
if (pe) {
if (SlideShow) {
cControl::Launch(new cPictureControl(pictures, pe, true));

View File

@ -7,62 +7,49 @@
#
# See the README file for copyright information and how to reach the author.
#
# $Id: pic2mpg 1.4 2008/02/29 14:34:22 kls Exp $
## TODO implement HDTV (1920 x 1080)
# $Id: pic2mpg 4.1 2017/10/06 14:42:18 kls Exp $
use File::Path;
use File::Spec;
use Getopt::Std;
use Image::Size;
use Image::ExifTool qw(:Public);
$Usage = qq{
Usage: $0 [options] picture-dir mpeg-dir
$0 [options] picture-file mpeg-file
Options: -a Aspect ratio 4:3 (default is 16:9)
-f Force conversion
Options: -f Force conversion
-h print Help
-i Ignore unknown file types
-n NTSC (default is PAL)
-o percent overscan in percent
-s size Screen size (WIDTHxHEIGHT, default is 1920x1080)
-v num Verbose (0=none, 1=list files, 2=detailed)
-x percent X overscan in percent
-y percent Y overscan in percent
-x dir[,...] eXclude the given directories
};
getopts("afhinv:x:y:") || die $Usage;
getopts("fho:s:v:x:") || die $Usage;
die $Usage if $opt_h;
$Aspect = $opt_a;
$Force = $opt_f;
$Ignore = $opt_i;
$NTSC = $opt_n;
$Overscan = $opt_o || 0;
$Size = $opt_s || "1920x1080";
$Verbose = $opt_v;
$OverscanX = $opt_x;
$OverscanY = $opt_y;
@Exclude = split(',', $opt_x || "");
$ListFiles = $Verbose >= 1;
$Detailed = $Verbose >= 2;
# Screen size:
# Supported picture types:
$SW = $NTSC ? 720 : 720;
$SH = $NTSC ? 480 : 576;
$ScreenRatio = $Aspect ? 4 / 3 : 16 / 9;
# Converter programs:
%PNMCONV = (
bmp => "bmptopnm",
gif => "giftopnm",
jpeg => "jpegtopnm",
jpg => "jpegtopnm",
png => "pngtopnm",
pnm => "cat",
tif => "tifftopnm",
tiff => "tifftopnm",
%PICTYPES = (
bmp => 1,
gif => 1,
jpeg => 1,
jpg => 1,
png => 1,
pnm => 1,
tif => 1,
tiff => 1,
);
# Command options:
@ -71,12 +58,14 @@ die "$0: missing parameter\n" unless $ARGV[0] && $ARGV[1];
die "$0: file or directory not found: $ARGV[0]\n" unless -e $ARGV[0];
die "$0: source and destination must be different\n" if $ARGV[0] eq $ARGV[1];
$verbose1 = $Detailed ? "--verbose" : "";
$verbose2 = $Detailed ? "-v 2" : "-v 0";
$system1 = $NTSC ? "" : "--pal";
$system2 = $NTSC ? "n" : "p";
$framerate = $NTSC ? "30000:1001" : "25:1";
$aspect = $Aspect ? "2" : "3";
$Extent = $Size;
if ($Overscan > 0) {
my ($x, $y) = $Size =~ /(.*)x(.*)/;
my $r = (100 + $Overscan) / 100;
$x = int($x * $r + 0.5);
$y = int($y * $r + 0.5);
$Extent = "${x}x$y";
}
# Convert a single file:
@ -95,10 +84,14 @@ $MPGDIR = File::Spec->rel2abs($ARGV[1]);
chdir($PICDIR) || die "$PICDIR: $!\n";
@Pictures = `find -type f`;
@Pictures = `find -type f | sort`;
chomp(@Pictures);
PIC:
for $pic (@Pictures) {
for (@Exclude) {
next PIC if ($pic =~ /\/$_\//);
}
my $mpg = "$MPGDIR/$pic.mpg";
if ($Force || !-e $mpg || -M $mpg > -M $pic) {
(my $dir = $mpg) =~ s/\/[^\/]*$//;
@ -135,7 +128,7 @@ for ($i = 0; $i < 10; $i++) { # dirs might become empty when removing empty subd
for $dir (@Dirs) {
$dir = EscapeMeta($dir);
print "removing $dir\n";
!system("rm -rf $dir") || die "$dir: $!\n";
Exec("rm -rf $dir");
}
}
@ -145,32 +138,22 @@ sub ConvertFile
{
my ($Pict, $Mpeg) = @_;
(my $Type) = lc($Pict) =~ /\.([^\.]*)$/;
if (!defined $PNMCONV{$Type}) {
return if ($Ignore);
die "unknown file type '$Type': '$Pict'\n";
}
my ($w, $h) = imgsize($Pict);
print "image size is $w x $h\n" if ($Detailed);
if ($w / $h <= $ScreenRatio) {
$w = $h * $ScreenRatio;
}
else {
$h = $w / $ScreenRatio;
}
my $ScaleW = $SW / $w * (100 - 2 * $OverscanX) / 100;
my $ScaleH = $SH / $h * (100 - 2 * $OverscanY) / 100;
return if (!defined $PICTYPES{$Type});
my $Exif = ImageInfo($Pict);
my $Orientation = $$Exif{"Orientation"};
my ($Degrees) = $Orientation =~ /Rotate ([0-9]+)/;
my $Rotate = ($Degrees == 90) ? "transpose=clock" : ($Degrees == 180) ? "hflip,vflip" : ($Degrees == 270) ? "transpose=cclock" : "";
$Rotate .= ',' if ($Rotate);
my $Background = '#000000@1';
print "orientation = '$Orientation' -> rotation = $Rotate\n" if ($Detailed);
$Pict = EscapeMeta($Pict);
$Mpeg = EscapeMeta($Mpeg);
print "$Pict -> $Mpeg\n" if $ListFiles;
my $Cmd = "$PNMCONV{$Type} $Pict 2> /dev/null |"
. "pnmscale $verbose1 --xscale=$ScaleW --yscale=$ScaleH |"
. "pnmpad $verbose1 --black --width $SW --height $SH |"
. "ppmntsc $verbose1 $system1 |"
. "ppmtoy4m $verbose2 -F $framerate -I p -S 420mpeg2 |"
. "mpeg2enc $verbose2 -f 3 -b 12500 -a $aspect -q 1 -n $system2 -o $Mpeg";
!system($Cmd) || die "$Cmd: $!\n";
print "$Pict -> $Mpeg $Rotate\n" if $ListFiles;
my $Cmd = "ffmpeg -i $Pict -vf '${Rotate}scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:$Background' -c:v libx264 -pix_fmt yuv420p -f mpegts -y $Mpeg "
. ($Detailed ? "" : "2>/dev/null");
Exec($Cmd);
$Cmd = "touch -r $Pict $Mpeg";
!system($Cmd) || die "$Cmd: $!\n";
Exec($Cmd);
}
sub EscapeMeta
@ -180,3 +163,10 @@ sub EscapeMeta
$s =~ s/([$META])/\\$1/g;
return $s;
}
sub Exec
{
my $Cmd = shift;
print "==> '$Cmd'\n" if ($Verbose);
!system($Cmd) || die "$Cmd: $!\n";
}

193
PLUGINS/src/pictures/pic2mpg-sd Executable file
View File

@ -0,0 +1,193 @@
#!/usr/bin/perl
# pic2mpg: Convert picture files to MPEG still frames
#
# Converts either a single picture file or all files in a
# given directory (recursively) to MPEG still frames.
#
# See the README file for copyright information and how to reach the author.
#
# $Id: pic2mpg-sd 2.1 2011/07/23 14:23:59 kls Exp $
## TODO implement HDTV (1920 x 1080)
use File::Path;
use File::Spec;
use Getopt::Std;
use Image::ExifTool qw(:Public);
use Image::Size;
$Usage = qq{
Usage: $0 [options] picture-dir mpeg-dir
$0 [options] picture-file mpeg-file
Options: -a Aspect ratio 4:3 (default is 16:9)
-f Force conversion
-h print Help
-i Ignore unknown file types
-n NTSC (default is PAL)
-v num Verbose (0=none, 1=list files, 2=detailed)
-x percent X overscan in percent
-y percent Y overscan in percent
};
getopts("afhinv:x:y:") || die $Usage;
die $Usage if $opt_h;
$Aspect = $opt_a;
$Force = $opt_f;
$Ignore = $opt_i;
$NTSC = $opt_n;
$Verbose = $opt_v;
$OverscanX = $opt_x;
$OverscanY = $opt_y;
$ListFiles = $Verbose >= 1;
$Detailed = $Verbose >= 2;
# Screen size:
$SW = $NTSC ? 720 : 720;
$SH = $NTSC ? 480 : 576;
$ScreenRatio = $Aspect ? 4 / 3 : 16 / 9;
# Converter programs:
%PNMCONV = (
bmp => "bmptopnm",
gif => "giftopnm",
jpeg => "jpegtopnm",
jpg => "jpegtopnm",
png => "pngtopnm",
pnm => "cat",
tif => "tifftopnm",
tiff => "tifftopnm",
);
# Command options:
die "$0: missing parameter\n" unless $ARGV[0] && $ARGV[1];
die "$0: file or directory not found: $ARGV[0]\n" unless -e $ARGV[0];
die "$0: source and destination must be different\n" if $ARGV[0] eq $ARGV[1];
$verbose1 = $Detailed ? "--verbose" : "";
$verbose2 = $Detailed ? "-v 2" : "-v 0";
$system1 = $NTSC ? "" : "--pal";
$system2 = $NTSC ? "n" : "p";
$framerate = $NTSC ? "30000:1001" : "25:1";
$aspect = $Aspect ? "2" : "3";
# Convert a single file:
if (-f $ARGV[0]) {
die "$0: mixed file and directory ('$ARGV[0]' <-> '$ARGV[1]')\n" unless !-e $ARGV[1] || -f $ARGV[1];
ConvertFile($ARGV[0], $ARGV[1]);
exit;
}
die "$0: mixed directory and file ('$ARGV[0]' <-> '$ARGV[1]')\n" unless !-e $ARGV[1] || -d $ARGV[1];
$PICDIR = File::Spec->rel2abs($ARGV[0]);
$MPGDIR = File::Spec->rel2abs($ARGV[1]);
# Convert pictures to mpegs:
chdir($PICDIR) || die "$PICDIR: $!\n";
@Pictures = `find -type f`;
chomp(@Pictures);
for $pic (@Pictures) {
my $mpg = "$MPGDIR/$pic.mpg";
if ($Force || !-e $mpg || -M $mpg > -M $pic) {
(my $dir = $mpg) =~ s/\/[^\/]*$//;
mkpath($dir);
ConvertFile($pic, $mpg);
}
}
# Remove mpegs without pictures:
chdir($MPGDIR) || die "$MPGDIR: $!\n";
@Mpegs = `find -type f`;
chomp(@Mpegs);
for $mpg (@Mpegs) {
my $pic = "$PICDIR/$mpg";
$pic =~ s/\.mpg$//;
if (!-e $pic) {
print "removing $mpg\n";
unlink($mpg);
}
}
# Remove empty directories:
chdir($MPGDIR) || die "$MPGDIR: $!\n";
for ($i = 0; $i < 10; $i++) { # dirs might become empty when removing empty subdirs
@Dirs = `find -type d -empty`;
chomp(@Dirs);
last unless @Dirs;
for $dir (@Dirs) {
$dir = EscapeMeta($dir);
print "removing $dir\n";
!system("rm -rf $dir") || die "$dir: $!\n";
}
}
# Actual file conversion:
sub ConvertFile
{
my ($Pict, $Mpeg) = @_;
(my $Type) = lc($Pict) =~ /\.([^\.]*)$/;
if (!defined $PNMCONV{$Type}) {
return if ($Ignore);
die "unknown file type '$Type': '$Pict'\n";
}
my ($w, $h) = imgsize($Pict);
print "image size is $w x $h\n" if ($Detailed);
my $Exif = ImageInfo($Pict);
my $Orientation = $$Exif{"Orientation"};
my ($Degrees) = $Orientation =~ /Rotate ([0-9]+) /;
my $Rotate = "-null";
$Rotate = "-cw" if $Degrees eq "90";
$Rotate = "-ccw" if $Degrees eq "270";
$Rotate = "-r180" if $Degrees eq "180";
print "orientation = '$Orientation' -> rotation = $Rotate\n" if ($Detailed);
($w, $h) = ($h, $w) if ($Degrees eq "90" || $Degrees eq "270");
if ($w / $h <= $ScreenRatio) {
$w = $h * $ScreenRatio;
}
else {
$h = $w / $ScreenRatio;
}
my $ScaleW = $SW / $w * (100 - 2 * $OverscanX) / 100;
my $ScaleH = $SH / $h * (100 - 2 * $OverscanY) / 100;
$Pict = EscapeMeta($Pict);
$Mpeg = EscapeMeta($Mpeg);
print "$Pict -> $Mpeg $Rotate\n" if $ListFiles;
my $Cmd = "$PNMCONV{$Type} $Pict 2> /dev/null |"
. "pamflip $verbose1 $Rotate |"
. "pnmscale $verbose1 --xscale=$ScaleW --yscale=$ScaleH |"
. "pnmpad $verbose1 --black --width $SW --height $SH |"
. "ppmntsc $verbose1 $system1 |"
. "ppmtoy4m $verbose2 -F $framerate -I p -S 420mpeg2 |"
. "mpeg2enc $verbose2 -f 3 -b 12500 -a $aspect -q 1 -n $system2 -o $Mpeg";
!system($Cmd) || die "$Cmd: $!\n";
$Cmd = "touch -r $Pict $Mpeg";
!system($Cmd) || die "$Cmd: $!\n";
}
sub EscapeMeta
{
my $META = ' !"#$%&\'()*;<>?[\\]`{|}~';
my $s = shift;
$s =~ s/([$META])/\\$1/g;
return $s;
}

View File

@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: pictures.c 2.2 2010/02/28 12:49:55 kls Exp $
* $Id: pictures.c 5.1 2022/12/05 15:26:23 kls Exp $
*/
#include <getopt.h>
@ -11,7 +11,7 @@
#include "menu.h"
#include "player.h"
static const char *VERSION = "0.0.9";
static const char *VERSION = "2.6.1";
static const char *DESCRIPTION = trNOOP("A simple picture viewer");
static const char *MAINMENUENTRY = trNOOP("Pictures");
@ -86,7 +86,7 @@ bool cPluginPictures::ProcessArgs(int argc, char *argv[])
};
int c;
while ((c = getopt_long(argc, argv, "d:s:", long_options, NULL)) != -1) {
while ((c = getopt_long(argc, argv, "d:", long_options, NULL)) != -1) {
switch (c) {
case 'd': strn0cpy(PictureDirectory, optarg, sizeof(PictureDirectory));
break;

View File

@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: player.c 1.3 2008/02/09 12:13:10 kls Exp $
* $Id: player.c 5.1 2022/12/05 15:26:23 kls Exp $
*/
#include "player.h"
@ -66,8 +66,15 @@ void cPicturePlayer::SetPicture(const char *FileName)
length = read(f, buffer, size);
if (length > 0) {
if (length >= size) {
size = size * 3 / 2;
buffer = (uchar *)realloc(buffer, size);
int NewSize = size * 3 / 2;
if (uchar *NewBuffer = (uchar *)realloc(buffer, NewSize)) {
buffer = NewBuffer;
size = NewSize;
}
else {
LOG_ERROR_STR("out of memory");
break;
}
lseek(f, 0, SEEK_SET);
continue;
}
@ -89,8 +96,10 @@ int cPictureControl::active = 0;
cString cPictureControl::lastDisplayed;
cPictureControl::cPictureControl(cPictureEntry *Pictures, const cPictureEntry *PictureEntry, bool SlideShow)
:cControl(player = new cPicturePlayer)
:cControl(NULL)
{
player = new cPicturePlayer;
SetPlayer(player);
pictures = Pictures;
pictureEntry = PictureEntry;
osd = NULL;
@ -197,9 +206,14 @@ void cPictureControl::DisplayCaption(void)
osd->Flush();
}
cString cPictureControl::GetHeader(void)
{
return tr("Pictures");
}
eOSState cPictureControl::ProcessKey(eKeys Key)
{
switch (Key) {
switch (int(Key)) {
case kUp:
case kPlay: slideShowDelay.Set();
slideShow = true;

View File

@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: player.h 1.1 2008/01/13 11:29:27 kls Exp $
* $Id: player.h 2.1 2012/04/28 11:56:01 kls Exp $
*/
#ifndef _PLAYER_H
@ -39,6 +39,7 @@ private:
public:
cPictureControl(cPictureEntry *Pictures, const cPictureEntry *PictureEntry, bool SlideShow = false);
virtual ~cPictureControl();
virtual cString GetHeader(void);
virtual eOSState ProcessKey(eKeys Key);
static bool Active(void) { return active > 0; }
static const char *LastDisplayed(void);

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Klaus Schmidinger <kls@tvdr.de>, 2008
# Klaus Schmidinger <vdr@tvdr.de>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2008-01-12 17:38+0100\n"
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2008-01-12 17:41+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German\n"
"Last-Translator: Klaus Schmidinger <vdr@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -0,0 +1,33 @@
# VDR plugin language source file.
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Arthur Konovalov <artlov@gmail.com>, 2015
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2008-01-12 17:41+0100\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Pictures"
msgstr "Pildid"
msgid "A simple picture viewer"
msgstr "Lihtne pildivaatur"
msgid "Picture directory"
msgstr "Pildikaust"
msgid "Slide show delay (s)"
msgstr "Slaidiseanssi viide (s)"
msgid "No picture directory has been defined!"
msgstr "Pildikaust on määramata!"

View File

@ -1,18 +1,19 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Rolf Ahrenberg <rahrenbe@cc.hut.fi>, 2008
# Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2008-01-12 17:38+0100\n"
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2008-01-12 17:41+0100\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish\n"
"Last-Translator: Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@ -29,4 +30,4 @@ msgid "Slide show delay (s)"
msgstr "Diaesityksen viive (s)"
msgid "No picture directory has been defined!"
msgstr "Kuvahakemistoa ei ole määritelty!"
msgstr "Kuvahakemistoa ei ole määritelty!"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Patrice Staudt <patrice.staudt@laposte.net>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2008-01-12 17:38+0100\n"
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2008-01-12 17:41+0100\n"
"Last-Translator: Patrice Staudt <patrice.staudt@laposte.net>\n"
"Language-Team: French\n"
"Language-Team: French <vdr@linuxtv.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Diego Pierotto <vdr-italian@tiscali.it>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2008-01-12 17:38+0100\n"
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2008-01-27 20:22+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Valdemaras Pipiras <varas@ambernet.lt>, 2009
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.10\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2008-01-12 17:38+0100\n"
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2009-12-08 12:41+0100\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>, 2009\n"
"Language-Team: Lietuviai\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

View File

@ -0,0 +1,34 @@
# VDR plugin language source file.
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Tomasz Maciej Nowak <tmn505@gmail.com>, 2018
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2018-02-19 00:48+0100\n"
"PO-Revision-Date: 2018-02-19 00:53+0100\n"
"Last-Translator: Tomasz Maciej Nowak <tmn505@gmail.com>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 2.0.6\n"
msgid "Pictures"
msgstr "Zdjęcia"
msgid "A simple picture viewer"
msgstr "Prosta przeglądarka zdjęć"
msgid "Picture directory"
msgstr "Katalog ze zdjęciami"
msgid "Slide show delay (s)"
msgstr "Pokaz slajdów opóźnienie (s)"
msgid "No picture directory has been defined!"
msgstr "Nie zdefiniowano katalogu ze zdjęciami!"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Alexander Gross <Bikalexander@gmail.com>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2008-01-12 17:38+0100\n"
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2008-03-14 00:45+0100\n"
"Last-Translator: Alexander Gross <Bikalexander@gmail.com>\n"
"Language-Team: Russian\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
@ -27,7 +28,7 @@ msgid "Picture directory"
msgstr "ºÐâÐÛÞÓ Ø×ÞÑàÐÖÕÝØÙ"
msgid "Slide show delay (s)"
msgstr "·ÐÔÕàÖÚÐ áÛÐÙÔ-èÞã (áÕÚ)"
msgstr "·ÐÔÕàÖÚÐ áÛÐÙÔ-èÞã (áÕÚ)"
msgid "No picture directory has been defined!"
msgstr "½Õ ÞßàÕÔÕÛñÝ ÚÐâÐÛÞÓ Ø×ÞÑàÐÖÕÝØÙ!"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Klaus Schmidinger <kls@tvdr.de>, 2008
# Klaus Schmidinger <vdr@tvdr.de>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2008-01-12 17:38+0100\n"
"Project-Id-Version: vdr-pictures 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2012-12-18 12:57+0100\n"
"PO-Revision-Date: 2009-09-30 12:54+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
@ -29,4 +30,3 @@ msgstr "Oneskorenie prezent
msgid "No picture directory has been defined!"
msgstr "Neboli preukázané ¾iadne fotky v adresári!"

View File

@ -9,3 +9,31 @@ VDR Plugin 'servicedemo' Revision History
- Moved the "all" target in the Makefile before the "Implicit rules",
so that a plain "make" will compile everything.
2012-12-27: Version 0.1.3
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.1.4
- Adapted Makefile to changes introduced in recent VDR versions.
2013-03-31: Version 2.0.0
- Official release.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2015-02-19: Version 2.2.0
- Official release.
2018-04-15: Version 2.4.0
- Official release.
2021-12-27: Version 2.6.0
- Official release.

View File

@ -1,13 +1,12 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
#
PLUGIN = servicedemo # dummy name for Make.config
PLUGIN1 = svccli
PLUGIN2 = svcsvr
@ -15,28 +14,28 @@ PLUGIN2 = svcsvr
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN1).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### Make sure that necessary options are included:
### The compiler options:
include $(VDRDIR)/Make.global
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
-include $(PLGCFG)
### The name of the distribution archive:
@ -45,9 +44,9 @@ PACKAGE = vdr-$(ARCHIVE)
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
INCLUDES +=
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
@ -60,26 +59,33 @@ all: libvdr-$(PLUGIN1).so libvdr-$(PLUGIN2).so
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
# Dependencies:
### Dependencies:
MAKEDEP = g++ -MM -MG
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Targets:
libvdr-$(PLUGIN1).so: $(PLUGIN1).o
$(CXX) $(CXXFLAGS) -shared $(PLUGIN1).o -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(PLUGIN1).o -o $@
libvdr-$(PLUGIN2).so: $(PLUGIN2).o
$(CXX) $(CXXFLAGS) -shared $(PLUGIN2).o -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(PLUGIN2).o -o $@
install-lib: libvdr-$(PLUGIN1).so libvdr-$(PLUGIN2).so
install -D libvdr-$(PLUGIN1).so $(DESTDIR)$(LIBDIR)/libvdr-$(PLUGIN1).so.$(APIVERSION)
install -D libvdr-$(PLUGIN2).so $(DESTDIR)$(LIBDIR)/libvdr-$(PLUGIN2).so.$(APIVERSION)
install: install-lib
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)

View File

@ -2,9 +2,9 @@ This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Udo Richter <udo_richter@gmx.de>
Project's homepage: http://www.tvdr.de
Project's homepage: https://www.tvdr.de
Latest version available at: http://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -3,14 +3,14 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: svccli.c 1.2 2007/08/15 13:18:08 kls Exp $
* $Id: svccli.c 4.1 2018/04/10 13:00:53 kls Exp $
*/
#include <stdlib.h>
#include <vdr/interface.h>
#include <vdr/plugin.h>
static const char *VERSION = "0.1.2";
static const char *VERSION = "2.4.0";
static const char *DESCRIPTION = "Service demo client";
static const char *MAINMENUENTRY = "Service demo";
@ -32,7 +32,7 @@ struct AddService_v1_0 {
int sum;
};
// --- cPluginSvcCli ----------------------------------------------------------
// --- cPluginSvcCli ---------------------------------------------------------
cOsdObject *cPluginSvcCli::MainMenuAction(void)
{

View File

@ -3,14 +3,14 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: svcsvr.c 1.2 2007/08/15 13:18:59 kls Exp $
* $Id: svcsvr.c 4.1 2018/04/10 13:00:57 kls Exp $
*/
#include <stdlib.h>
#include <vdr/interface.h>
#include <vdr/plugin.h>
static const char *VERSION = "0.1.2";
static const char *VERSION = "2.4.0";
static const char *DESCRIPTION = "Service demo server";
class cPluginSvcSvr : public cPlugin {
@ -29,7 +29,7 @@ struct AddService_v1_0 {
int sum;
};
// --- cPluginSvcSvr ----------------------------------------------------------
// --- cPluginSvcSvr ---------------------------------------------------------
bool cPluginSvcSvr::Service(const char *Id, void *Data)
{

View File

@ -88,3 +88,76 @@ VDR Plugin 'skincurses' Revision History
2010-02-28: Version 0.1.9
- Added Lithuanian language translations (thanks to Valdemaras Pipiras).
2011-05-15: Version 0.1.10
- Avoiding a gcc 4.6 compiler error (thanks to Tobias Grimm).
2012-03-11: Version 0.1.11
- Adapted menu column widths of 'skincurses' to the wider HD OSD sizes.
2012-04-23: Version 0.1.12
- Now displaying disk usage in the title of the main and "Recordings" menu,
which is no longer done by the VDR core.
2012-12-27: Version 0.1.13
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.1.14
- Adapted Makefile to changes introduced in recent VDR versions.
2013-03-03: Version 0.1.15
- The "Recording info" page now displays the name of the channel (if available)
from which this recording was taken.
2013-03-31: Version 2.0.0
- Official release.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2015-02-08: Version 2.1.2
- Added a missing trailing blank in some translations.
2015-02-19: Version 2.2.0
- Official release.
2016-12-22: Version 2.3.2
- Added cFont::Width(void) to get the default character width and allow stretched
font drawing in high level OSDs (dummy for skincurses).
- Fixed truncated date/time strings in the skins on multi-byte UTF-8 systems
(reported by Sergey Chernyavskiy).
2018-04-15: Version 2.4.0
- Official release.
2019-03-12: Version 2.4.1
- Changes for ncurses version 6 (thanks to Ulrick Eckhardt).
2020-05-11: Version 2.4.2
- Fixed 'Changes for ncurses version 6'.
- Reacting to changes in screen size.
- Simplified color handling.
- Using 'stdscr' directly instead of an additional window.
2021-07-01: Version 2.4.3
- The number of errors (if any) of a recording is now displayed in the recording's
Info menu.
2021-12-27: Version 2.6.0
- Official release.

View File

@ -1,53 +1,56 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 2.2 2010/02/06 14:50:03 kls Exp $
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
# IMPORTANT: the presence of this macro is important for the Make.config
# file. So it must be defined, even if it is not used here!
#
PLUGIN = skincurses
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
LOCDIR = $(call PKGCFG,locdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### Make sure that necessary options are included:
### The compiler options:
include $(VDRDIR)/Make.global
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
-include $(PLGCFG)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### The name of the shared object file:
SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
INCLUDES +=
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
@ -55,54 +58,64 @@ OBJS = $(PLUGIN).o
### The main target:
all: libvdr-$(PLUGIN).so i18n
all: $(SOFILE) i18n
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
### Dependencies:
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Internationalization (I18N):
PODIR = po
LOCALEDIR = $(VDRDIR)/locale
I18Npo = $(wildcard $(PODIR)/*.po)
I18Nmsgs = $(addprefix $(LOCALEDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Nmo = $(addsuffix .mo, $(foreach file, $(I18Npo), $(basename $(file))))
I18Nmsgs = $(addprefix $(DESTDIR)$(LOCDIR)/, $(addsuffix /LC_MESSAGES/vdr-$(PLUGIN).mo, $(notdir $(foreach file, $(I18Npo), $(basename $(file))))))
I18Npot = $(PODIR)/$(PLUGIN).pot
%.mo: %.po
msgfmt -c -o $@ $<
@echo MO $@
$(Q)msgfmt -c -o $@ $<
$(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<vdr-bugs@tvdr.de>' -o $@ $^
@echo GT $@
$(Q)xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<see README>' -o $@ `ls $^`
%.po: $(I18Npot)
msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
@echo PO $@
$(Q)msgmerge -U --no-wrap --no-location --backup=none -q -N $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
@mkdir -p $(dir $@)
cp $< $@
$(I18Nmsgs): $(DESTDIR)$(LOCDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
install -D -m644 $< $@
.PHONY: i18n
i18n: $(I18Nmsgs) $(I18Npot)
i18n: $(I18Nmo) $(I18Npot)
install-i18n: $(I18Nmsgs)
### Targets:
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -lncursesw -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
$(SOFILE): $(OBJS)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -lncursesw -o $@
dist: clean
install-lib: $(SOFILE)
install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
install: install-lib install-i18n
dist: $(I18Npo) clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)
@ -111,4 +124,5 @@ dist: clean
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~ $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~

View File

@ -1,10 +1,10 @@
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <kls@tvdr.de>
Written by: Klaus Schmidinger <vdr@tvdr.de>
Project's homepage: http://www.tvdr.de
Project's homepage: https://www.tvdr.de
Latest version available at: http://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Klaus Schmidinger <kls@tvdr.de>, 2007
# Klaus Schmidinger <vdr@tvdr.de>, 2007
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-08-15 16:04+0200\n"
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2007-08-15 16:07+0200\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German\n"
"Last-Translator: Klaus Schmidinger <vdr@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
@ -18,11 +19,15 @@ msgstr ""
msgid "A text only skin"
msgstr "Eine reine Text-Oberfläche"
msgid "errors"
msgstr "Fehler"
msgid "Key$Mute"
msgstr "Stumm"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "Lautstärke"
msgstr "Lautstärke "
msgid "Text mode"
msgstr "Text-Modus"

View File

@ -0,0 +1,33 @@
# VDR plugin language source file.
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Arthur Konovalov <artlov@gmail.com>, 2015
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2007-08-14 20:48+0300\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "A text only skin"
msgstr "Tekstipõhine kest"
msgid "errors"
msgstr ""
msgid "Key$Mute"
msgstr "Hääletu"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "Helitugevus "
msgid "Text mode"
msgstr "Tekst"

View File

@ -1,28 +1,33 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Rolf Ahrenberg <rahrenbe@cc.hut.fi>, 2007
# Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>, 2007
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-08-14 20:54+0300\n"
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2007-08-14 20:48+0300\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish\n"
"Last-Translator: Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "A text only skin"
msgstr "Tekstipohjainen ulkoasu"
msgid "errors"
msgstr ""
msgid "Key$Mute"
msgstr "Mykistys"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "Äänenvoimakkuus "
msgstr "Äänenvoimakkuus "
msgid "Text mode"
msgstr "Teksti"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Diego Pierotto <vdr-italian@tiscali.it>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-08-15 16:04+0200\n"
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2008-01-27 20:35+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
@ -18,9 +19,13 @@ msgstr ""
msgid "A text only skin"
msgstr "Una interfaccia solo testo"
msgid "errors"
msgstr ""
msgid "Key$Mute"
msgstr "Muto"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "Volume "

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Valdemaras Pipiras <varas@ambernet.lt>, 2010
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2009-10-13 11:52+0200\n"
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2010-02-22 18:18+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lietuviai\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -18,9 +19,13 @@ msgstr ""
msgid "A text only skin"
msgstr "Tekstinis apvalkalas"
msgid "errors"
msgstr ""
msgid "Key$Mute"
msgstr "Išjungti garsą"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "Garsas "

View File

@ -0,0 +1,35 @@
# VDR plugin language source file.
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Tomasz Maciej Nowak <tmn505@gmail.com>, 2018
#
msgid ""
msgstr ""
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2018-02-19 01:02+0100\n"
"Last-Translator: Tomasz Maciej Nowak <tmn505@gmail.com>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 2.0.6\n"
msgid "A text only skin"
msgstr "Skóra tekstowa"
msgid "errors"
msgstr ""
msgid "Key$Mute"
msgstr "Wycisz"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "Głośność "
msgid "Text mode"
msgstr "Tryb tekstowy"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Alexander Gross <Bikalexander@gmail.com>, 2008
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-08-15 16:04+0200\n"
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2008-03-14 00:21+0100\n"
"Last-Translator: Alexander Gross <Bikalexander@gmail.com>\n"
"Language-Team: Russian\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-5\n"
"Content-Transfer-Encoding: 8bit\n"
@ -19,11 +20,15 @@ msgstr ""
msgid "A text only skin"
msgstr "¿àÞáâÞ âÕÚáâÞÒëÙ ØÝâÕàäÕÙá"
msgid "errors"
msgstr ""
msgid "Key$Mute"
msgstr "²ëÚÛ. ÓàÞÜÚÞáâì"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "³àÞÜÚÞáâì"
msgstr "³àÞÜÚÞáâì "
msgid "Text mode"
msgstr "ÀÕÖØÜ âÕÚáâÐ"

View File

@ -1,16 +1,17 @@
# VDR plugin language source file.
# Copyright (C) 2008 Klaus Schmidinger <kls@tvdr.de>
# Copyright (C) 2021 Klaus Schmidinger <vdr@tvdr.de>
# This file is distributed under the same license as the VDR package.
# Klaus Schmidinger <kls@tvdr.de>, 2007
# Klaus Schmidinger <vdr@tvdr.de>, 2007
#
msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
"POT-Creation-Date: 2007-08-15 16:04+0200\n"
"Project-Id-Version: vdr-skincurses 2.6.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2021-07-01 17:28+0200\n"
"PO-Revision-Date: 2009-09-30 12:52+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
"Language: sk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-2\n"
"Content-Transfer-Encoding: 8bit\n"
@ -18,12 +19,15 @@ msgstr ""
msgid "A text only skin"
msgstr "Iba text vzhµadu"
msgid "errors"
msgstr ""
msgid "Key$Mute"
msgstr "Stlmi» zvuk"
#. TRANSLATORS: note the trailing blank!
msgid "Volume "
msgstr "Hlasitos»"
msgstr "Hlasitos» "
msgid "Text mode"
msgstr "Textový re¾im"

View File

@ -3,15 +3,16 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: skincurses.c 2.4 2010/02/28 12:50:13 kls Exp $
* $Id: skincurses.c 5.1 2021/07/01 15:40:46 kls Exp $
*/
#include <ncurses.h>
#include <vdr/osd.h>
#include <vdr/plugin.h>
#include <vdr/skins.h>
#include <vdr/videodir.h>
static const char *VERSION = "0.1.9";
static const char *VERSION = "2.4.3";
static const char *DESCRIPTION = trNOOP("A text only skin");
static const char *MAINMENUENTRY = NULL;
@ -19,13 +20,15 @@ static const char *MAINMENUENTRY = NULL;
class cCursesFont : public cFont {
public:
virtual int Width(void) const { return 1; }
virtual int Width(uint c) const { return 1; }
virtual int Width(const char *s) const { return s ? Utf8StrLen(s) : 0; }
virtual int Height(void) const { return 1; }
virtual void DrawText(cBitmap *Bitmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {}
virtual void DrawText(cPixmap *Pixmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {}
};
static const cCursesFont Font;
static const cCursesFont Font = cCursesFont(); // w/o the '= cCursesFont()' gcc 4.6 complains - can anybody explain why this is necessary?
// --- cCursesOsd ------------------------------------------------------------
@ -57,9 +60,7 @@ static int ScOsdHeight = 20;
class cCursesOsd : public cOsd {
private:
WINDOW *savedRegion;
WINDOW *window;
enum { MaxColorPairs = 16 };
int colorPairs[MaxColorPairs];
cVector<int> colorPairs;
void SetColor(int colorFg, int colorBg = clrBackground);
public:
cCursesOsd(int Left, int Top);
@ -76,40 +77,34 @@ cCursesOsd::cCursesOsd(int Left, int Top)
{
savedRegion = NULL;
memset(colorPairs, 0x00, sizeof(colorPairs));
start_color();
leaveok(stdscr, true);
refresh(); // to react on changes to screen size
window = subwin(stdscr, ScOsdHeight, ScOsdWidth, 0, 0);
syncok(window, true);
int begy, begx;
int maxy, maxx;
getmaxyx(stdscr, maxy, maxx);
getbegyx(stdscr, begy, begx);
ScOsdWidth = maxx - begx;
ScOsdHeight = maxy - begy;
}
cCursesOsd::~cCursesOsd()
{
if (window) {
werase(window);
Flush();
delwin(window);
window = NULL;
}
erase();
Flush();
}
void cCursesOsd::SetColor(int colorFg, int colorBg)
{
int color = (colorBg << 16) | colorFg | 0x80000000;
for (int i = 0; i < MaxColorPairs; i++) {
if (!colorPairs[i]) {
colorPairs[i] = color;
init_pair(i + 1, colorFg, colorBg);
//XXX??? attron(COLOR_PAIR(WHITE_ON_BLUE));
wattrset(window, COLOR_PAIR(i + 1));
break;
}
else if (color == colorPairs[i]) {
wattrset(window, COLOR_PAIR(i + 1));
break;
}
}
int i = colorPairs.IndexOf(color);
if (i < 0) {
colorPairs.Append(color);
i = colorPairs.Size() - 1;
init_pair(i + 1, colorFg, colorBg);
}
attrset(COLOR_PAIR(i + 1));
}
void cCursesOsd::SaveRegion(int x1, int y1, int x2, int y2)
@ -119,13 +114,14 @@ void cCursesOsd::SaveRegion(int x1, int y1, int x2, int y2)
savedRegion = NULL;
}
savedRegion = newwin(y2 - y1 + 1, x2 - x1 + 1, y1, x1);
copywin(window, savedRegion, y1, x1, 0, 0, y2 - y1, x2 - x1, false);
if (savedRegion)
copywin(stdscr, savedRegion, y1, x1, 0, 0, y2 - y1, x2 - x1, false);
}
void cCursesOsd::RestoreRegion(void)
{
if (savedRegion) {
copywin(savedRegion, window, 0, 0, savedRegion->_begy, savedRegion->_begx, savedRegion->_maxy - savedRegion->_begy, savedRegion->_maxx - savedRegion->_begx, false);
overwrite(savedRegion, stdscr);
delwin(savedRegion);
savedRegion = NULL;
}
@ -165,18 +161,22 @@ void cCursesOsd::DrawText(int x, int y, const char *s, tColor ColorFg, tColor Co
}
}
SetColor(ColorFg, ColorBg);
wmove(window, y, x); // ncurses wants 'y' before 'x'!
waddnstr(window, s, Width ? Width : ScOsdWidth - x);
mvaddnstr(y, x, s, Width ? Width : ScOsdWidth - x);
}
void cCursesOsd::DrawRectangle(int x1, int y1, int x2, int y2, tColor Color)
{
SetColor(Color, Color);
for (int y = y1; y <= y2; y++) {
wmove(window, y, x1); // ncurses wants 'y' before 'x'!
whline(window, ' ', x2 - x1 + 1);
}
wsyncup(window); // shouldn't be necessary because of 'syncok()', but w/o it doesn't work
int dx = x2 - x1;
int dy = y2 - y1;
if (dx >= dy) {
for (int y = y1; y <= y2; y++)
mvhline(y, x1, ' ', dx + 1);
}
else {
for (int x = x1; x <= x2; x++)
mvvline(y1, x, ' ', dy + 1);
}
}
void cCursesOsd::Flush(void)
@ -261,6 +261,9 @@ void cSkinCursesDisplayChannel::Flush(void)
class cSkinCursesDisplayMenu : public cSkinDisplayMenu {
private:
cOsd *osd;
cString title;
int lastDiskUsageState;
void DrawTitle(void);
void DrawScrollbar(int Total, int Offset, int Shown, int Top, int Height, bool CanScrollUp, bool CanScrollDown);
void SetTextScrollbar(void);
public:
@ -284,6 +287,7 @@ public:
cSkinCursesDisplayMenu::cSkinCursesDisplayMenu(void)
{
osd = new cCursesOsd(0, 0);
lastDiskUsageState = -1;
osd->DrawRectangle(0, 0, ScOsdWidth - 1, ScOsdHeight - 1, clrBackground);
}
@ -331,9 +335,16 @@ void cSkinCursesDisplayMenu::Clear(void)
textScroller.Reset();
}
void cSkinCursesDisplayMenu::DrawTitle(void)
{
bool WithDisk = MenuCategory() == mcMain || MenuCategory() == mcRecording;
osd->DrawText(0, 0, WithDisk ? cString::sprintf("%s - %s", *title, *cVideoDiskUsage::String()) : title, clrBlack, clrCyan, &Font, ScOsdWidth);
}
void cSkinCursesDisplayMenu::SetTitle(const char *Title)
{
osd->DrawText(0, 0, Title, clrBlack, clrCyan, &Font, ScOsdWidth);
title = Title;
DrawTitle();
}
void cSkinCursesDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue)
@ -374,13 +385,13 @@ void cSkinCursesDisplayMenu::SetItem(const char *Text, int Index, bool Current,
for (int i = 0; i < MaxTabs; i++) {
const char *s = GetTabbedText(Text, i);
if (s) {
int xt = Tab(i) / 12;// Tab() is in "pixel" - see also skins.c!!!
int xt = Tab(i) / AvgCharWidth();// Tab() is in "pixel" - see also skins.c!!!
osd->DrawText(xt, y, s, ColorFg, ColorBg, &Font, ScOsdWidth - 2 - xt);
}
if (!Tab(i + 1))
break;
}
SetEditableWidth(ScOsdWidth - 2 - Tab(1) / 12); // Tab() is in "pixel" - see also skins.c!!!
SetEditableWidth(ScOsdWidth - 2 - Tab(1) / AvgCharWidth()); // Tab() is in "pixel" - see also skins.c!!!
}
void cSkinCursesDisplayMenu::SetScrollbar(int Total, int Offset)
@ -394,8 +405,7 @@ void cSkinCursesDisplayMenu::SetEvent(const cEvent *Event)
return;
int y = 2;
cTextScroller ts;
char t[32];
snprintf(t, sizeof(t), "%s %s - %s", *Event->GetDateString(), *Event->GetTimeString(), *Event->GetEndTimeString());
cString t = cString::sprintf("%s %s - %s", *Event->GetDateString(), *Event->GetTimeString(), *Event->GetEndTimeString());
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, t, &Font, clrYellow, clrBackground);
if (Event->Vps() && Event->Vps() != Event->StartTime()) {
cString buffer = cString::sprintf(" VPS: %s", *Event->GetVpsString());
@ -434,13 +444,21 @@ void cSkinCursesDisplayMenu::SetRecording(const cRecording *Recording)
const cRecordingInfo *Info = Recording->Info();
int y = 2;
cTextScroller ts;
char t[32];
snprintf(t, sizeof(t), "%s %s", *DateString(Recording->start), *TimeString(Recording->start));
cString t = cString::sprintf("%s %s %s", *DateString(Recording->Start()), *TimeString(Recording->Start()), Info->ChannelName() ? Info->ChannelName() : "");
ts.Set(osd, 0, y, ScOsdWidth, ScOsdHeight - y - 2, t, &Font, clrYellow, clrBackground);
y += ts.Height();
int xt = ScOsdWidth;
if (Info->GetEvent()->ParentalRating()) {
cString buffer = cString::sprintf(" %s ", *Info->GetEvent()->GetParentalRatingString());
osd->DrawText(ScOsdWidth - Utf8StrLen(buffer), y, buffer, clrBlack, clrYellow, &Font);
int w = Utf8StrLen(buffer);
osd->DrawText(xt - w, y, buffer, clrBlack, clrYellow, &Font);
xt -= w + 1;
}
if (Info->Errors() > 0) {
cString buffer = cString::sprintf(" %d %s ", Info->Errors(), tr("errors"));
int w = Utf8StrLen(buffer);
osd->DrawText(xt - w, y, buffer, clrBlack, clrYellow, &Font);
xt -= w + 1;
}
y += 1;
const char *Title = Info->Title();
@ -474,6 +492,8 @@ void cSkinCursesDisplayMenu::SetText(const char *Text, bool FixedFont)
void cSkinCursesDisplayMenu::Flush(void)
{
if (cVideoDiskUsage::HasChanged(lastDiskUsageState))
DrawTitle();
cString date = DayDateTime();
osd->DrawText(ScOsdWidth - Utf8StrLen(date) - 2, 0, date, clrBlack, clrCyan, &Font);
osd->Flush();
@ -600,6 +620,7 @@ void cSkinCursesDisplayVolume::SetVolume(int Current, int Total, bool Mute)
osd->DrawText(0, 0, tr("Key$Mute"), clrGreen, clrBackground, &Font);
}
else {
// TRANSLATORS: note the trailing blank!
const char *Prompt = tr("Volume ");
int l = Utf8StrLen(Prompt);
int p = (ScOsdWidth - l) * Current / Total;
@ -812,12 +833,8 @@ bool cPluginSkinCurses::ProcessArgs(int argc, char *argv[])
bool cPluginSkinCurses::Initialize(void)
{
// Initialize any background activities the plugin shall perform.
WINDOW *w = initscr();
if (w) {
ScOsdWidth = w->_maxx - w->_begx + 1;
ScOsdHeight = w->_maxy - w->_begy + 1;
if (initscr())
return true;
}
return false;
}

View File

@ -44,3 +44,42 @@ VDR Plugin 'status' Revision History
2008-02-16: Version 0.3.0
- Added new cStatus functions.
2012-03-11: Version 0.3.1
- Added new parameter LiveView to ChannelSwitch() (reported by Udo Richter).
2012-12-27: Version 0.3.2
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.3.3
- Adapted Makefile to changes introduced in recent VDR versions.
2013-03-31: Version 2.0.0
- Official release.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2015-02-19: Version 2.2.0
- Official release.
2018-04-15: Version 2.4.0
- Official release.
2021-12-27: Version 2.6.0
- Official release.
2025-02-10: Version 2.6.1
- Added cStatus::OsdItem2().
- Activated logging of OsdItem2().
- Added cStatus::OsdCurrentItem2().
- Added cStatus::OsdStatusMessage2().

View File

@ -1,51 +1,55 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
#
PLUGIN = status
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### Make sure that necessary options are included:
### The compiler options:
include $(VDRDIR)/Make.global
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
-include $(PLGCFG)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### The name of the shared object file:
SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
INCLUDES +=
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
@ -53,27 +57,33 @@ OBJS = $(PLUGIN).o
### The main target:
all: libvdr-$(PLUGIN).so
all: $(SOFILE)
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
# Dependencies:
### Dependencies:
MAKEDEP = g++ -MM -MG
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Targets:
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
$(SOFILE): $(OBJS)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
install-lib: $(SOFILE)
install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
install: install-lib
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)

View File

@ -1,10 +1,10 @@
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <kls@tvdr.de>
Written by: Klaus Schmidinger <vdr@tvdr.de>
Project's homepage: http://www.tvdr.de
Project's homepage: https://www.tvdr.de
Latest version available at: http://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -3,13 +3,13 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: status.c 1.10 2008/02/16 15:41:05 kls Exp $
* $Id: status.c 5.4 2025/02/12 21:18:53 kls Exp $
*/
#include <vdr/plugin.h>
#include <vdr/status.h>
static const char *VERSION = "0.3.0";
static const char *VERSION = "2.6.1";
static const char *DESCRIPTION = "Status monitor test";
static const char *MAINMENUENTRY = NULL;
@ -18,7 +18,7 @@ static const char *MAINMENUENTRY = NULL;
class cStatusTest : public cStatus {
protected:
virtual void TimerChange(const cTimer *Timer, eTimerChange Change);
virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber);
virtual void ChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView);
virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On);
virtual void Replaying(const cControl *Control, const char *Name, const char *FileName, bool On);
virtual void SetVolume(int Volume, bool Absolute);
@ -27,10 +27,10 @@ protected:
virtual void SetSubtitleTrack(int Index, const char * const *Tracks);
virtual void OsdClear(void);
virtual void OsdTitle(const char *Title);
virtual void OsdStatusMessage(const char *Message);
virtual void OsdStatusMessage2(eMessageType Type, const char *Message);
virtual void OsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue);
virtual void OsdItem(const char *Text, int Index);
virtual void OsdCurrentItem(const char *Text);
virtual void OsdItem2(const char *Text, int Index, bool Selectable);
virtual void OsdCurrentItem2(const char *Text, int Index);
virtual void OsdTextItem(const char *Text, bool Scroll);
virtual void OsdChannel(const char *Text);
virtual void OsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle);
@ -41,9 +41,9 @@ void cStatusTest::TimerChange(const cTimer *Timer, eTimerChange Change)
dsyslog("status: cStatusTest::TimerChange %s %d", Timer ? *Timer->ToText(true) : "-", Change);
}
void cStatusTest::ChannelSwitch(const cDevice *Device, int ChannelNumber)
void cStatusTest::ChannelSwitch(const cDevice *Device, int ChannelNumber, bool LiveView)
{
dsyslog("status: cStatusTest::ChannelSwitch %d %d", Device->CardIndex(), ChannelNumber);
dsyslog("status: cStatusTest::ChannelSwitch %d %d %d", Device->CardIndex(), ChannelNumber, LiveView);
}
void cStatusTest::Recording(const cDevice *Device, const char *Name, const char *FileName, bool On)
@ -86,9 +86,9 @@ void cStatusTest::OsdTitle(const char *Title)
dsyslog("status: cStatusTest::OsdTitle '%s'", Title);
}
void cStatusTest::OsdStatusMessage(const char *Message)
void cStatusTest::OsdStatusMessage2(eMessageType Type, const char *Message)
{
dsyslog("status: cStatusTest::OsdStatusMessage '%s'", Message);
dsyslog("status: cStatusTest::OsdStatusMessage2 %d '%s'", Type, Message);
}
void cStatusTest::OsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue)
@ -96,14 +96,14 @@ void cStatusTest::OsdHelpKeys(const char *Red, const char *Green, const char *Ye
dsyslog("status: cStatusTest::OsdHelpKeys %s - %s - %s - %s", Red, Green, Yellow, Blue);
}
void cStatusTest::OsdItem(const char *Text, int Index)
void cStatusTest::OsdItem2(const char *Text, int Index, bool Selected)
{
//dsyslog("status: cStatusTest::OsdItem %s %d", Text, Index);
dsyslog("status: cStatusTest::OsdItem2 %s %d %d", Text, Index, Selected);
}
void cStatusTest::OsdCurrentItem(const char *Text)
void cStatusTest::OsdCurrentItem2(const char *Text, int Index)
{
dsyslog("status: cStatusTest::OsdCurrentItem %s", Text);
dsyslog("status: cStatusTest::OsdCurrentItem %s %d", Text, Index);
}
void cStatusTest::OsdTextItem(const char *Text, bool Scroll)

View File

@ -13,3 +13,31 @@ VDR Plugin 'svdrpdemo' Revision History
- Moved the "all" target in the Makefile before the "Implicit rules",
so that a plain "make" will compile everything.
2012-12-27: Version 0.0.4
- Adapted Makefile to changes introduced in recent VDR versions.
2013-01-12: Version 0.0.5
- Adapted Makefile to changes introduced in recent VDR versions.
2013-03-31: Version 2.0.0
- Official release.
2014-01-01: Version 2.1.1
- Avoiding unnecessary pkg-config warnings in plugin Makefiles.
2015-02-19: Version 2.2.0
- Official release.
2018-04-15: Version 2.4.0
- Official release.
2021-12-27: Version 2.6.0
- Official release.

View File

@ -1,51 +1,55 @@
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 2.1 2010/02/06 14:50:03 kls Exp $
# $Id: Makefile 4.3 2020/06/22 15:08:46 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
#
PLUGIN = svdrpdemo
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
### The directory environment:
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
# Use package data if installed...otherwise assume we're under the VDR source directory:
PKG_CONFIG ?= pkg-config
PKGCFG = $(if $(VDRDIR),$(shell $(PKG_CONFIG) --variable=$(1) $(VDRDIR)/vdr.pc),$(shell PKG_CONFIG_PATH="$$PKG_CONFIG_PATH:../../.." $(PKG_CONFIG) --variable=$(1) vdr))
LIBDIR = $(call PKGCFG,libdir)
PLGCFG = $(call PKGCFG,plgcfg)
#
TMPDIR ?= /tmp
### Make sure that necessary options are included:
### The compiler options:
include $(VDRDIR)/Make.global
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
### The version number of VDR's plugin API:
APIVERSION = $(call PKGCFG,apiversion)
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
-include $(PLGCFG)
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### The name of the shared object file:
SOFILE = libvdr-$(PLUGIN).so
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include
INCLUDES +=
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
@ -53,27 +57,33 @@ OBJS = $(PLUGIN).o
### The main target:
all: libvdr-$(PLUGIN).so
all: $(SOFILE)
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
@echo CC $@
$(Q)$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) -o $@ $<
# Dependencies:
### Dependencies:
MAKEDEP = $(CXX) -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
@$(MAKEDEP) $(CXXFLAGS) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Targets:
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
$(SOFILE): $(OBJS)
@echo LD $@
$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(OBJS) -o $@
install-lib: $(SOFILE)
install -D $^ $(DESTDIR)$(LIBDIR)/$^.$(APIVERSION)
install: install-lib
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)

View File

@ -2,9 +2,9 @@ This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <Klaus.Schmidinger@tvdr.de>
Project's homepage: http://www.tvdr.de
Project's homepage: https://www.tvdr.de
Latest version available at: http://www.tvdr.de
Latest version available at: https://www.tvdr.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -3,12 +3,12 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: svdrpdemo.c 1.3 2007/08/15 13:19:57 kls Exp $
* $Id: svdrpdemo.c 4.1 2018/04/10 13:01:07 kls Exp $
*/
#include <vdr/plugin.h>
static const char *VERSION = "0.0.3";
static const char *VERSION = "2.4.0";
static const char *DESCRIPTION = "How to add SVDRP support to a plugin";
class cPluginSvdrpdemo : public cPlugin {

15
README
View File

@ -4,10 +4,7 @@ Video Disk Recorder ('VDR')
These files contain the source code of the "Video Disk Recorder",
which is based on the DVB driver of the LinuxTV project (http://linuxtv.org).
For details about the "Video Disk Recorder" project please
refer to http://www.tvdr.de.
There is also a remote control unit described on those
Web pages, which can be used within this program.
refer to https://www.tvdr.de.
Please see the INSTALL file for details on how to install
this program on your computer.
@ -17,7 +14,7 @@ The MANUAL file describes how to operate the VDR.
The CONTRIBUTORS file lists all the people who have contributed to the
development of VDR.
The author can be contacted at kls@tvdr.de.
The author can be contacted at vdr@tvdr.de.
Yet another "set-top box"?
--------------------------
@ -34,3 +31,11 @@ file management and even "on disk editing". The menus
of commercial set-top boxes usually are a lot more fancy than
the ones in this system, but here we have the full source code
and can modify the menus in whatever way desired.
If you actually use VDR, please add yourself to the "VDR User Counter"
at https://www.tvdr.de/counter.htm. You can also like VDR on facebook
at https://www.facebook.com/VideoDiskRecorder.
"VDR Video Disk Recorder" is a registered trademark of Klaus Schmidinger.
"TVDR TV Done Right" is a registered trademark of Klaus Schmidinger.

Some files were not shown because too many files have changed in this diff Show More