Commit 9f919801 authored by Klaus Schmidinger's avatar Klaus Schmidinger

Version 1.1.27

- The CAM is now accessed only if the current channel actually has a non-zero Ca
  value, and CAM access is completely suppressed during replay, which avoids
  problems in case the CAM is attached to the primary DVB device.
- The "Left" and "Right" buttons now set the cursor to the first or last list item
  even if the list consist only of a single page, like, for instance, the Main menu
  (thanks to Oliver Endriss).
- Made the log message "OSD window width must be a multiple of 4..." a debug message
  instead of an error message, so it can be avoided by using a log level less than 3.
- Updated Greek language texts (thanks to Dimitrios Dimitrakos).
- Fixed faulty behaviour of the "Mute" key in case the channel display is visible
  (thanks to Florian Bartels for reporting this one and Sascha Volkenandt for
  helping to fix it).
- Modified LOF handling to allow for C-band reception (thanks to Malcolm Caldwell).
- Added some missing cAudio handling calls (thanks to Werner Fink).
- Replaced the 'for' loops in StripAudioPackets() with memset() calls (thanks to
  Werner Fink).
- Further increased the timeout until an index file is considerd no longer to be
  written.
- Fixed a crash in case the index file can't be accessed any more during replay
  (thanks to Stefan Huelswitt for reporting this one).
- Fixed displaying messages in the status line in case they exceed the OSD width
  (thanks to Gerhard Steiner for reporting this one).
- Avoiding high CPU load in case the connection to LIRC gets lost (thanks to
  Ludwig Nussel).
- Fixed handling repeat function with LIRC (thanks to Ludwig Nussel).
- Fixed handling min/max borders when entering integer values (thanks to Andy
  Grobb for reporting this one).
- Implemented a "resume ID" which allows several users to each have their own
  resume.vdr files (thanks to Martin Hammerschmid). This parameter can be set in
  the "Setup/Replay" menu (see MANUAL for details).
- Now using 'libdtv' version 0.0.5 (thanks to Rolf Hakenes for the new version
  and Stefan Huelswitt for adapting VDR to it).
- If no device with an MPEG decoder can be found at startup, the first device
  is now used as primary device (just to have some device).
- Adjusted some Premiere channels in 'channels.conf' (thanks to Thomas Koch).
- Updated 'channels.conf.cable' (thanks to Stefan Hußfeldt).
- The 'epg.data' file is now read after all plugins have been started (thanks
  to Sascha Volkenandt).
- The LIRC remote control no longer tries to learn keys if it can't connect to
  the LIRC daemon (thanks to Ludwig Nussel for reporting this one). The same
  applies to the RCU remote control in case of errors during startup.
- Fixed handling of Ca parameters with values <= MAXDEVICES, which don't indicate
  an actual encrypted channel (thanks to Stefan Huelswitt for reporting this one).
parent b60eda5a
......@@ -49,6 +49,8 @@ Martin Hammerschmid <martin@hammerschmid.com>
for adding a missing 'public' keyword in device.h
for pointing out a bug in displaying the group separators in the channel display
for reporting a problem with a missing initialization of 'number' in cChannel
for implementing a "resume ID" which allows several users to each have their own
resume.vdr files
Bastian Guse <bastian@nocopy.de>
for writing the FORMATS entry for timers.conf
......@@ -163,6 +165,10 @@ Stefan Huelswitt <huels@iname.com>
encrypted channel
for reporting a problem with timers when channel IDs have a 'source' that is 0
for reporting a new/delete malloc/free mismatch in ringbuffer.c
for reporting a crash in case the index file can't be accessed any more during replay
for adapting VDR to 'libdtv' version 0.0.5
for reporting a bug in handling of Ca parameters with values <= MAXDEVICES, which
don't indicate an actual encrypted channel
Ulrich Röder <roeder@efr-net.de>
for pointing out that there are channels that have a symbol rate higher than
......@@ -219,6 +225,8 @@ Werner Fink <werner@suse.de>
for improving thread locking in the ring buffer to avoid possible race conditions
under heavy load
for improving keyboard detection
for adding some missing cAudio handling calls
for replacing the 'for' loops in StripAudioPackets() with memset() calls
Rolf Hakenes <hakenes@hippomi.de>
for providing 'libdtv' and adapting the EIT mechanisms to it
......@@ -240,6 +248,7 @@ Simon Bauschulte <SemiSchwabe@Brutzel.de>
Andy Grobb <Charly98@01019freenet.de>
for completing storing the current audio volume in the setup.conf file
for fixing the EPG display in case Setup.ShowInfoOnChSwitch is set to "no"
for reporting a bug in handling min/max borders when entering integer values
Thomas Heiligenmann <thomas@heiligenmann.de>
for implementing the SVDRP commands LSTR and DELR
......@@ -444,6 +453,9 @@ Oliver Endriss <o.endriss@gmx.de>
for providing examples for 'diseqc.conf'
for improving deleting stale lock files
for fixing high CPU load in 'Transfer Mode'
for making the "Left" and "Right" buttons set the cursor to the first or last
list item even if the list consist only of a single page, like, for instance,
the Main menu
Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
......@@ -471,6 +483,8 @@ Gerhard Steiner <steiner@mail.austria.com>
shall be executed from the "Recordings" menu
for suggesting to interpret the character '|' in the description texts of EPG
records as a newline character
for reporting a bug in displaying messages in the status line in case they exceed
the OSD width
Jaakko Hyvätti <jaakko@hyvatti.iki.fi>
for translating OSD texts to the Finnish language
......@@ -553,3 +567,27 @@ Torsten Herz <torsten.herz@web.de>
Steffen Becker <stbecker@rbg.informatik.tu-darmstadt.de>
for reporting a problem with CPU load peaks (in the EPG scanner)
Florian Bartels <Florian.Bartels@envisage.de>
for reporting a faulty behaviour of the "Mute" key in case the channel display
is visible
Sascha Volkenandt <sascha@akv-soft.de>
for helping to fix a faulty behaviour of the "Mute" key in case the channel display
is visible
for making the 'epg.data' file being read after all plugins have been started
Malcolm Caldwell <malcolm.caldwell@ntu.edu.au>
for modifying LOF handling to allow for C-band reception
Ludwig Nussel <ludwig.nussel@web.de>
for making the LIRC thread avoid high CPU load in case the connection to LIRC gets lost
for fixing handling repeat function with LIRC
for reporting a problem with the LIRC remote control trying to learn keys even if it
couldn't connect to the LIRC daemon
Thomas Koch <tom@harhar.net>
for his support in keeping the Premiere World channels up to date in 'channels.conf'
Stefan Hußfeldt <vdr@marvin.on-luebeck.de>
for his help in keeping 'channels.conf.cable' up to date
......@@ -1987,3 +1987,49 @@ Video Disk Recorder Revision History
- Modified the EPG scanner to avoid CPU load peaks (thanks to Steffen Becker for
reporting this one).
- Fixed support for Viaccess CAMs (thanks to Axel Gruber for helping to debug this).
2003-04-13: Version 1.1.27
- The CAM is now accessed only if the current channel actually has a non-zero Ca
value, and CAM access is completely suppressed during replay, which avoids
problems in case the CAM is attached to the primary DVB device.
- The "Left" and "Right" buttons now set the cursor to the first or last list item
even if the list consist only of a single page, like, for instance, the Main menu
(thanks to Oliver Endriss).
- Made the log message "OSD window width must be a multiple of 4..." a debug message
instead of an error message, so it can be avoided by using a log level less than 3.
- Updated Greek language texts (thanks to Dimitrios Dimitrakos).
- Fixed faulty behaviour of the "Mute" key in case the channel display is visible
(thanks to Florian Bartels for reporting this one and Sascha Volkenandt for
helping to fix it).
- Modified LOF handling to allow for C-band reception (thanks to Malcolm Caldwell).
- Added some missing cAudio handling calls (thanks to Werner Fink).
- Replaced the 'for' loops in StripAudioPackets() with memset() calls (thanks to
Werner Fink).
- Further increased the timeout until an index file is considerd no longer to be
written.
- Fixed a crash in case the index file can't be accessed any more during replay
(thanks to Stefan Huelswitt for reporting this one).
- Fixed displaying messages in the status line in case they exceed the OSD width
(thanks to Gerhard Steiner for reporting this one).
- Avoiding high CPU load in case the connection to LIRC gets lost (thanks to
Ludwig Nussel).
- Fixed handling repeat function with LIRC (thanks to Ludwig Nussel).
- Fixed handling min/max borders when entering integer values (thanks to Andy
Grobb for reporting this one).
- Implemented a "resume ID" which allows several users to each have their own
resume.vdr files (thanks to Martin Hammerschmid). This parameter can be set in
the "Setup/Replay" menu (see MANUAL for details).
- Now using 'libdtv' version 0.0.5 (thanks to Rolf Hakenes for the new version
and Stefan Huelswitt for adapting VDR to it).
- If no device with an MPEG decoder can be found at startup, the first device
is now used as primary device (just to have some device).
- Adjusted some Premiere channels in 'channels.conf' (thanks to Thomas Koch).
- Updated 'channels.conf.cable' (thanks to Stefan Hußfeldt).
- The 'epg.data' file is now read after all plugins have been started (thanks
to Sascha Volkenandt).
- The LIRC remote control no longer tries to learn keys if it can't connect to
the LIRC daemon (thanks to Ludwig Nussel for reporting this one). The same
applies to the RCU remote control in case of errors during startup.
- Fixed handling of Ca parameters with values <= MAXDEVICES, which don't indicate
an actual encrypted channel (thanks to Stefan Huelswitt for reporting this one).
......@@ -589,6 +589,12 @@ Video Disk Recorder User's Manual
Show replay mode = no Turns displaying the current replay mode on or off.
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
0 resulting in a file named 'resume.vdr', and any other
value resulting in 'resume.n.vdr'.
Miscellaneous:
Min. event timeout = 30
......
......@@ -21,18 +21,18 @@ VDR program and present itself to the user.
The <i>internal</i> interface provides the plugin code access to VDR's internal data
structures and allows it to hook itself into specific areas to perform special actions.
<p>
<!--X1.1.13--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.13 are marked like this.
<!--X1.1.13--></td></tr></table>
<!--X1.1.14--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<!--X1.1.14--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.14 are marked like this.
<!--X1.1.14--></td></tr></table>
<!--X1.1.15--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<!--X1.1.15--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.15 are marked like this.
<!--X1.1.15--></td></tr></table>
<!--X1.1.17--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
<!--X1.1.17--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.17 are marked like this.
<!--X1.1.17--></td></tr></table>
<!--X1.1.27--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
Important modifications introduced in version 1.1.27 are marked like this.
<!--X1.1.27--></td></tr></table>
<hr>
<h1>Table Of Contents</h1>
......@@ -506,7 +506,7 @@ in the call to VDR.
If the user selects the main menu entry of a plugin, VDR calls the function
<!--X1.1.17--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
<!--X1.1.17--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
virtual cOsdObject *MainMenuAction(void);
</pre></td></tr></table><p>
......@@ -1011,7 +1011,6 @@ bool DevicePoll(cPoller &amp;Poller, int TimeoutMs = 0);
</pre></td></tr></table><p>
to determine whether the device is ready for further data.
<!--X1.1.13--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<p>
If the player can provide more than a single audio track, it can implement the
following functions to make them available:
......@@ -1022,9 +1021,8 @@ virtual const char **GetAudioTracks(int *CurrentTrack = NULL);
virtual void SetAudioTrack(int Index);
</pre></td></tr></table><p>
<!--X1.1.13--></td></tr></table>
<p>
<!--X1.1.15--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<!--X1.1.15--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
If there is an additional audio track that has to be replayed with external hardware,
the player shall call its member function
......@@ -1260,7 +1258,6 @@ virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
These functions will be called with the desired source or channel and shall return whether
this device can provide the requested source or channel and whether tuning to it was successful,
repectively.
<!--X1.1.13--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
<p>
<b>Audio selection</b>
<p>
......@@ -1273,7 +1270,6 @@ virtual const char **GetAudioTracksDevice(int *CurrentTrack = NULL) const;
virtual void SetAudioTrackDevice(int Index);
</pre></td></tr></table><p>
<!--X1.1.13--></td></tr></table>
<p>
<b>Recording</b>
<p>
......@@ -1307,7 +1303,7 @@ The functions to implement replaying capabilites are
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
virtual bool HasDecoder(void) const;
<!--X1.1.14--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<!--X1.1.14--><table width=100%><tr><td bgcolor=#0000AA>&nbsp;</td><td width=100%>
virtual bool CanReplay(void) const;
<!--X1.1.14--></td></tr></table>
virtual bool SetPlayMode(ePlayMode PlayMode);
......@@ -1369,7 +1365,7 @@ 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!
<!--X1.1.15--><table width=100%><tr><td bgcolor=#AA0000>&nbsp;</td><td width=100%>
<!--X1.1.15--><table width=100%><tr><td bgcolor=#00AA00>&nbsp;</td><td width=100%>
<a name="Dolby Digital"><hr><h2>Dolby Digital</h2>
<center><i><b>"The stereo effect may only be experienced if stereo equipment is used!"</b></i></center><p>
......@@ -1480,6 +1476,17 @@ the incoming data (by calling your <tt>Action()</tt> function).
In case you need to do any other setup steps, like opening a file or initializing
member variables, you should do so before calling <tt>Start()</tt>.
<p>
<!--X1.1.27--><table width=100%><tr><td bgcolor=#FF0000>&nbsp;</td><td width=100%>
If your remote control for some reason can't work (maybe because it was unable to
open some file handle it requires) it can implement the virtual function
<p><table><tr><td bgcolor=#F0F0F0><pre><br>
virtual bool Ready(void);
</pre></td></tr></table><p>
and have it return <i>false</i>. In that case VDR will not try to learn keys from
that remote control.
<!--X1.1.27--></td></tr></table>
VDR will handle everything necessary to learn the key mappings of your remote
control. In order to do so, it will first call the virtual function <tt>Initialize()</tt>,
in which you should take all necessary steps to make sure your remote control
......
......@@ -8,7 +8,7 @@
#
# See the README file for copyright information and how to reach the author.
#
# $Id: getskyepg.pl 1.1 2002/11/10 10:05:17 kls Exp $
# $Id: getskyepg.pl 1.2 2003/04/02 16:21:47 kls Exp $
use Getopt::Std;
use Time::Local;
......@@ -33,7 +33,7 @@ $SkyWebPage = "www.ananova.com/tv/frontpage.html";
$WGET = "/usr/bin/wget -q -O-";
$LOGGER = "/usr/bin/logger -t SKYEPG";
$DST = 0; ##XXX TODO find out whether DST is active!
$DST = -3600; ##XXX TODO find out whether DST is active!
$SecsInDay = 86400;
$MaxFrequency = 1000;
......
......@@ -18,7 +18,7 @@ arte:11836:h:S19.2E:27500:401:402:404:0:28109:0:0:0
ORF1:12692:h:S19.2E:22000:160:161:165:102:13001:0:0:0
ORF2:12692:h:S19.2E:22000:500:501:505:102:13002:0:0:0
ZDF.info:11954:h:S19.2E:27500:610:620:0:0:28011:0:0:0
CNN:12168:v:S19.2E:27500:165:100:0:0:28512:0:0:0
CNN:11778:v:S19.2E:27500:165:100:0:0:28522:0:0:0
Super RTL:12188:h:S19.2E:27500:165:120:65:0:12040:0:0:0
VOX:12188:h:S19.2E:27500:167:136:71:0:12060:0:0:0
:#DW TV:10788:v:S19.2E:22000:305:306:0:0:8905:0:0:0
......@@ -29,10 +29,11 @@ HOT:12480:v:S19.2E:27500:1279:1280:0:0:40:0:0:0
Bloomberg TV Germany:12552:v:S19.2E:22000:162:99:0:0:12160:0:0:0
Bloomberg TV France:11817:v:S19.2E:27500:163:92:0:0:8004:0:0:0
Bloomberg TV Spain:12168:v:S19.2E:27500:167:112:0:0:12721:0:0:0
Sky News:12552:v:S19.2E:22000:305:306:0:0:3995:0:0:0
Sky News:11597:v:S19.2E:22000:305:306:0:0:28707:0:0:0
Fox Kids Netherlands:12574:h:S19.2E:22000:163:92:0:0:5020:0:0:0
Alice:12610:v:S19.2E:22000:162:96:0:0:12200:0:0:0
n-tv:12670:v:S19.2E:22000:162:96:55:0:12730:0:0:0
Al Jazeera:11568:v:S19.2E:22000:55:56:0:0:9021:0:0:0
Grand Tourisme:12670:v:S19.2E:22000:289:290:0:0:17300:0:0:0
TW1:12692:h:S19.2E:22000:166:167:0:0:13013:0:0:0
Eurosport:11954:h:S19.2E:27500:410:420:0:0:28009:0:0:0
......@@ -68,20 +69,24 @@ Goldstar TV:11758:h:S19.2E:27500:3839:3840:0:101:518:0:0:0
Classica:11758:h:S19.2E:27500:767:768:0:101:15:0:0:0
Sonnenklar TV:12090:v:S19.2E:27500:1023:1024:0:0:32:0:0:0
:Premiere Direkt
Premiere Direkt 1A:12031:h:S19.2E:27500:511:512,513;515:0:101:177:0:0:0
Premiere Direkt 1B:11719:h:S19.2E:27500:1023:1024,1025;1027:0:101:182:0:0:0
Premiere Direkt 2A:12031:h:S19.2E:27500:255:256;259:0:101:176:0:0:0
Premiere Direkt 2B:11719:h:S19.2E:27500:767:768;769:0:101:181:0:0:0
Premiere Direkt 3A:11719:h:S19.2E:27500:511:512;515:0:101:180:0:0:0
Premiere Direkt 3B:11719:h:S19.2E:27500:1279:1280;1283:0:101:183:0:0:0
Premiere Direkt 4A:12031:h:S19.2E:27500:2815:2816:0:101:18:0:0:0
:#Premiere Direkt 4B:12070:h:S19.2E:27500:1535:1536:0:101:216:0:0:0
Premiere Direkt Portal:12031:h:S19.2E:27500:2815:2816:0:101:18:0:0:0
Premiere Direkt 1A:11719:h:S19.2E:27500:2047:2048:0:101:240:0:0:0
Premiere Direkt 1B:11719:h:S19.2E:27500:2303:2304:0:101:241:0:0:0
Premiere Direkt 1C:11719:h:S19.2E:27500:2559:2560:0:101:242:0:0:0
Premiere Direkt 2A:11719:h:S19.2E:27500:2815:2816:0:101:243:0:0:0
Premiere Direkt 2B:11719:h:S19.2E:27500:3071:3072:0:101:244:0:0:0
Premiere Direkt 2C:12031:h:S19.2E:27500:3071:3072:0:101:208:0:0:0
Premiere Direkt 2D:11719:h:S19.2E:27500:3327:3328:0:101:245:0:0:0
Premiere Direkt 3A:12031:h:S19.2E:27500:3327:3328:0:101:209:0:0:0
Premiere Direkt 3B:12031:h:S19.2E:27500:2303:2304:0:101:210:0:0:0
Premiere Direkt 3C:11758:h:S19.2E:27500:511:512:0:101:211:0:0:0
Premiere Direkt 3D:12070:h:S19.2E:27500:511:512:0:101:212:0:0:0
:PW Erotic
Beate-Uhse.TV:12071:h:S19.2E:27500:1023:1024:0:101:21:0:0:0
Premiere Erotik 1:12031:h:S19.2E:27500:1279:1280:0:101:513:0:0:0
Premiere Erotik 2:11719:h:S19.2E:27500:1535:1536:0:101:778:0:0:0
Premiere Erotik 3:11719:h:S19.2E:27500:1791:1792:0:101:779:0:0:0
Premiere Erotik 4:11719:h:S19.2E:27500:3583:3584:0:101:780:0:0:0
Premiere Erotik 1:12031:h:S19.2E:27500:1279:1280:2:101:513:0:0:0
Premiere Erotik 2:12070:h:0:27500:1535:1536:0:101:778:0:0:0
Premiere Erotik 3:12070:h:0:27500:1791:1792:0:101:779:0:0:0
Premiere Erotik 4:12070:h:0:27500:3583:3584:0:101:780:0:0:0
:Sportsworld
Premiere Sport 1:11720:h:S19.2E:27500:255:256,257:0:101:17:0:0:0
Premiere Sport 2:12031:h:S19.2E:27500:3839:3840:0:101:27:0:0:0
......@@ -97,16 +102,16 @@ N24:12480:v:S19.2E:27500:2047:2048:0:0:47:0:0:0
CNBC:11954:h:S19.2E:27500:510:520:0:0:28010:0:0:0
Liberty TV.com:12610:v:S19.2E:22000:941:943,942:0:0:12199:0:0:0
:Premiere Bundesliga
BL-Konferenz:12031:h:S19.2E:27500:2303:2304,2305:0:101:210:0:0:0
BuLi 1:11719:h:S19.2E:27500:255:256,257:0:101:17:0:0:0
BuLi 2:11719:h:S19.2E:27500:2047:2048,2049:0:101:240:0:0:0
BuLi 3:11719:h:S19.2E:27500:2303:2304,2305:0:101:241:0:0:0
BuLi 4:11719:h:S19.2E:27500:2559:2560,2561:0:101:242:0:0:0
BuLi 5:11719:h:S19.2E:27500:2815:2816,2817:0:101:243:0:0:0
BuLi 6:11719:h:S19.2E:27500:3071:3072,3073:0:101:244:0:0:0
BuLi 7:11719:h:S19.2E:27500:3327:3328,3329:0:101:245:0:0:0
BuLi 8:12031:h:S19.2E:27500:3071:3072,3073:0:101:208:0:0:0
BuLi 9:12031:h:S19.2E:27500:3327:3328,3329:0:101:209:0:0:0
BL-Konferenz:12031:h:S19.2E:27500:2303:2304,2305:0:101:210:0:0:1
BuLi 1:11719:h:S19.2E:27500:255:256,257:0:101:17:0:0:1
BuLi 2:11719:h:S19.2E:27500:2047:2048,2049:0:101:240:0:0:1
BuLi 3:11719:h:S19.2E:27500:2303:2304,2305:0:101:241:0:0:1
BuLi 4:11719:h:S19.2E:27500:2559:2560,2561:0:101:242:0:0:1
BuLi 5:11719:h:S19.2E:27500:2815:2816,2817:0:101:243:0:0:1
BuLi 6:11719:h:S19.2E:27500:3071:3072,3073:0:101:244:0:0:1
BuLi 7:11719:h:S19.2E:27500:3327:3328,3329:0:101:245:0:0:1
BuLi 8:12031:h:S19.2E:27500:3071:3072,3073:0:101:208:0:0:1
BuLi 9:12031:h:S19.2E:27500:3327:3328,3329:0:101:209:0:0:1
:-
Mosaico:11934:v:S19.2E:27500:165:100:0:0:29010:0:0:0
Andalucia TV:11934:v:S19.2E:27500:166:104:0:0:29011:0:0:0
......
This diff is collapsed.
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: ci.c 1.8 2003/03/16 22:32:47 kls Exp $
* $Id: ci.c 1.9 2003/03/23 15:18:40 kls Exp $
*/
/* XXX TODO
......@@ -1273,6 +1273,7 @@ void cCiCaPmt::AddCaDescriptor(int Length, uint8_t *Data)
cCiHandler::cCiHandler(int Fd, int NumSlots)
{
numSlots = NumSlots;
enabled = true;
for (int i = 0; i < MAX_CI_SESSION; i++)
sessions[i] = NULL;
tpl = new cCiTransportLayer(Fd, numSlots);
......@@ -1425,6 +1426,8 @@ int cCiHandler::CloseAllSessions(int Slot)
bool cCiHandler::Process(void)
{
if (!enabled)
return false;
bool result = true;
cMutexLock MutexLock(&mutex);
for (int Slot = 0; Slot < numSlots; Slot++) {
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: ci.h 1.3 2003/02/16 10:55:21 kls Exp $
* $Id: ci.h 1.4 2003/03/23 15:18:40 kls Exp $
*/
#ifndef __CI_H
......@@ -80,6 +80,7 @@ class cCiHandler {
private:
cMutex mutex;
int numSlots;
bool enabled;
cCiSession *sessions[MAX_CI_SESSION];
cCiTransportLayer *tpl;
cCiTransportConnection *tc;
......@@ -95,6 +96,7 @@ private:
public:
~cCiHandler();
static cCiHandler *CreateCiHandler(const char *FileName);
void SetEnabled(bool Enabled) { enabled = Enabled; }
bool Process(void);
bool EnterMenu(int Slot);
cCiMenu *GetMenu(void);
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.c 1.112 2002/11/02 13:13:49 kls Exp $
* $Id: config.c 1.113 2003/04/12 09:37:48 kls Exp $
*/
#include "config.h"
......@@ -280,6 +280,7 @@ cSetup::cSetup(void)
MinUserInactivity = 120;
MultiSpeedMode = 0;
ShowReplayMode = 0;
ResumeID = 0;
memset(CaCaps, sizeof(CaCaps), 0);
CurrentChannel = -1;
CurrentVolume = MAXVOLUME;
......@@ -428,6 +429,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "MinUserInactivity")) MinUserInactivity = atoi(Value);
else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value);
else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = atoi(Value);
else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value);
else if (!strcasecmp(Name, "CaCaps")) return ParseCaCaps(Value);
else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value);
else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value);
......@@ -474,6 +476,7 @@ bool cSetup::Save(void)
Store("MinUserInactivity", MinUserInactivity);
Store("MultiSpeedMode", MultiSpeedMode);
Store("ShowReplayMode", ShowReplayMode);
Store("ResumeID", ResumeID);
StoreCaCaps("CaCaps");
Store("CurrentChannel", CurrentChannel);
Store("CurrentVolume", CurrentVolume);
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: config.h 1.150 2003/03/09 10:01:02 kls Exp $
* $Id: config.h 1.152 2003/04/12 09:35:50 kls Exp $
*/
#ifndef __CONFIG_H
......@@ -19,7 +19,7 @@
#include "device.h"
#include "tools.h"
#define VDRVERSION "1.1.26"
#define VDRVERSION "1.1.27"
#define MAXPRIORITY 99
#define MAXLIFETIME 99
......@@ -229,6 +229,7 @@ public:
int MinEventTimeout, MinUserInactivity;
int MultiSpeedMode;
int ShowReplayMode;
int ResumeID;
int CaCaps[MAXDEVICES][MAXCACAPS];
int CurrentChannel;
int CurrentVolume;
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: device.c 1.37 2003/03/09 14:05:23 kls Exp $
* $Id: device.c 1.39 2003/04/12 11:51:04 kls Exp $
*/
#include "device.h"
......@@ -106,19 +106,14 @@ bool cDevice::SetPrimaryDevice(int n)
{
n--;
if (0 <= n && n < numDevices && device[n]) {
if (device[n]->HasDecoder()) {
isyslog("setting primary device to %d", n + 1);
if (primaryDevice)
primaryDevice->MakePrimaryDevice(false);
primaryDevice = device[n];
primaryDevice->MakePrimaryDevice(true);
return true;
}
else
esyslog("ERROR: device number %d has no MPEG decoder", n + 1);
isyslog("setting primary device to %d", n + 1);
if (primaryDevice)
primaryDevice->MakePrimaryDevice(false);
primaryDevice = device[n];
primaryDevice->MakePrimaryDevice(true);
return true;
}
else
esyslog("ERROR: invalid primary device number: %d", n + 1);
esyslog("ERROR: invalid primary device number: %d", n + 1);
return false;
}
......@@ -422,9 +417,16 @@ bool cDevice::ToggleMute(void)
{
int OldVolume = volume;
mute = !mute;
SetVolume(0, mute);
//XXX why is it necessary to use different sequences???
if (mute) {
SetVolume(0, mute);
Audios.MuteAudio(mute); // Mute external audio after analog audio
}
else {
Audios.MuteAudio(mute); // Enable external audio before analog audio
SetVolume(0, mute);
}
volume = OldVolume;
Audios.MuteAudio(mute);
return mute;
}
......@@ -478,10 +480,12 @@ void cDevice::Clear(void)
void cDevice::Play(void)
{
Audios.MuteAudio(mute);
}
void cDevice::Freeze(void)
{
Audios.MuteAudio(true);
}
void cDevice::Mute(void)
......@@ -520,6 +524,7 @@ void cDevice::Detach(cPlayer *Player)
player = NULL;
SetPlayMode(pmNone);
playerDetached = true;
Audios.ClearAudio();
}
}
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbdevice.c 1.46 2003/02/16 15:10:39 kls Exp $
* $Id: dvbdevice.c 1.51 2003/04/12 15:06:11 kls Exp $
*/
#include "dvbdevice.h"
......@@ -196,6 +196,7 @@ bool cDvbTuner::SetFrontend(void)
CHECK(ioctl(fd_frontend, FE_SET_TONE, tone));
}
frequency = abs(frequency); // Allow for C-band, where the frequency is less than the LOF
Frontend.frequency = frequency * 1000UL;
Frontend.inversion = fe_spectral_inversion_t(channel.Inversion());
Frontend.u.qpsk.symbol_rate = channel.Srate() * 1000UL;
......@@ -263,7 +264,7 @@ void cDvbTuner::Action(void)
}
}
if (tunerStatus >= tsLocked) {
if (ciHandler) {
if (ciHandler && channel.Ca()) {
if (ciHandler->Process()) {
if (tunerStatus != tsCam) {//XXX TODO update in case the CA descriptors have changed
uchar buffer[2048];
......@@ -396,7 +397,8 @@ bool cDvbDevice::Initialize(void)
void cDvbDevice::MakePrimaryDevice(bool On)
{
cDvbOsd::SetDvbDevice(On ? this : NULL);
if (HasDecoder())
cDvbOsd::SetDvbDevice(On ? this : NULL);
}
bool cDvbDevice::HasDecoder(void) const
......@@ -712,7 +714,7 @@ int cDvbDevice::NumAudioTracksDevice(void) const
int n = 0;
if (aPid1)
n++;
if (!Ca() && aPid2 && aPid1 != aPid2) // a Ca recording session blocks switching live audio tracks
if (Ca() <= MAXDEVICES && aPid2 && aPid1 != aPid2) // a Ca recording session blocks switching live audio tracks
n++;
return n;
}
......@@ -744,7 +746,7 @@ bool cDvbDevice::CanReplay(void) const
if (Receiving())
return false;
#endif
return cDevice::CanReplay() && !Ca(); // we can only replay if there is no Ca recording going on
return cDevice::CanReplay() && Ca() <= MAXDEVICES; // we can only replay if there is no Ca recording going on
}
bool cDvbDevice::SetPlayMode(ePlayMode PlayMode)
......@@ -773,11 +775,15 @@ bool cDvbDevice::SetPlayMode(ePlayMode PlayMode)
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, false));
if (siProcessor)
siProcessor->SetStatus(true);
if (ciHandler)
ciHandler->SetEnabled(true);
break;
case pmAudioVideo:
case pmAudioOnlyBlack:
if (siProcessor)
siProcessor->SetStatus(false);
if (ciHandler)
ciHandler->SetEnabled(false);
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));
......@@ -788,6 +794,8 @@ bool cDvbDevice::SetPlayMode(ePlayMode PlayMode)
case pmAudioOnly:
if (siProcessor)
siProcessor->SetStatus(false);
if (ciHandler)
ciHandler->SetEnabled(false);
CHECK(ioctl(fd_video, VIDEO_SET_BLANK, true));
CHECK(ioctl(fd_audio, AUDIO_STOP, true));
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
......@@ -799,6 +807,8 @@ bool cDvbDevice::SetPlayMode(ePlayMode PlayMode)
case pmExtern_THIS_SHOULD_BE_AVOIDED:
if (siProcessor)
siProcessor->SetStatus(false);
if (ciHandler)
ciHandler->SetEnabled(false);
close(fd_video);
close(fd_audio);
fd_video = fd_audio = -1;
......@@ -820,6 +830,7 @@ void cDvbDevice::Clear(void)
CHECK(ioctl(fd_video, VIDEO_CLEAR_BUFFER));
if (fd_audio >= 0)
CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER));
cDevice::Clear();
}
void cDvbDevice::Play(void)
......@@ -834,6 +845,7 @@ void cDvbDevice::Play(void)
if (fd_video >= 0)
CHECK(ioctl(fd_video, VIDEO_CONTINUE));
}
cDevice::Play();
}
void cDvbDevice::Freeze(void)
......@@ -848,6 +860,7 @@ void cDvbDevice::Freeze(void)
if (fd_video >= 0)
CHECK(ioctl(fd_video, VIDEO_FREEZE));
}
cDevice::Freeze();
}
void cDvbDevice::Mute(void)
......@@ -856,6 +869,7 @@ void cDvbDevice::Mute(void)
CHECK(ioctl(fd_audio, AUDIO_SET_AV_SYNC, false));
CHECK(ioctl(fd_audio, AUDIO_SET_MUTE, true));
}
cDevice::Mute();
}
void cDvbDevice::StillPicture(const uchar *Data, int Length)
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbosd.c 1.20 2003/03/09 09:59:13 kls Exp $
* $Id: dvbosd.c 1.21 2003/04/12 12:10:12 kls Exp $
*/
#include "dvbosd.h"
......@@ -19,7 +19,7 @@ cDvbOsd::cDvbOsd(int x, int y)
:cOsdBase(x, y)
{
osdDev = dvbDevice ? dvbDevice->OsdDeviceHandle() : -1;
if (osdDev < 0)
if (dvbDevice && osdDev < 0)
esyslog("ERROR: illegal OSD device handle (%d)!", osdDev);
}
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: dvbplayer.c 1.18 2003/02/15 10:38:59 kls Exp $
* $Id: dvbplayer.c 1.19 2003/03/30 12:51:51 kls Exp $
*/
#include "dvbplayer.h"
......@@ -324,11 +324,8 @@ void cDvbPlayer::StripAudioPackets(uchar *b, int Length, uchar Except)
case 0xC0 ... 0xC1: // audio
if (c == 0xC1)
canToggleAudioTrack = true;
if (!Except || c != Except) {
int n = l;
for (int j = i; j < Length && n--; j++)
b[j] = 0x00;
}
if (!Except || c != Except)
memset(&b[i], 0x00, min(l, Length-i));
break;
case 0xE0 ... 0xEF: // video
break;
......
......@@ -16,7 +16,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* $Id: eit.c 1.67 2003/03/16 11:20:05 kls Exp $
* $Id: eit.c 1.68 2003/04/12 11:27:31 kls Exp $
***************************************************************************/
#include "eit.h"
......@@ -1011,29 +1011,37 @@ private:
int length;
uchar *data;
public:
cCaDescriptor(int Source, int Transponder, int ServiceId, int CaSystem, int Length, uchar *Data);
cCaDescriptor(int Source, int Transponder, int ServiceId, int CaSystem, int CaPid, int Length, uchar *Data);
virtual ~cCaDescriptor();
int Length(void) const { return length; }
const uchar *Data(void) const { return data; }
};
cCaDescriptor::cCaDescriptor(int Source, int Transponder, int ServiceId, int CaSystem, int Length, uchar *Data)
cCaDescriptor::cCaDescriptor(int Source, int Transponder, int ServiceId, int CaSystem, int CaPid, int Length, uchar *Data)
{
source = Source;
transponder = Transponder;
serviceId = ServiceId;
caSystem = CaSystem;
length = Length;
length = Length + 6;
data = MALLOC(uchar, length);
memcpy(data, Data, length);
/*//XXX just while debugging...
data[0] = DESCR_CA;
data[1] = length - 2;
data[2] = (caSystem >> 8) & 0xFF;
data[3] = caSystem & 0xFF;
data[4] = ((CaPid >> 8) & 0xFF) | 0xE0;
data[5] = CaPid & 0xFF;
if (Length)
memcpy(&data[6], Data, Length);
//#define DEBUG_CA_DESCRIPTORS 1
#ifdef DEBUG_CA_DESCRIPTORS
char buffer[1024];
char *q = buffer;
q += sprintf(q, "CAM: %04X %5d %4d", source, transponder, serviceId);