diff options
author | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2005-01-09 18:00:00 +0100 |
---|---|---|
committer | Klaus Schmidinger <kls (at) cadsoft (dot) de> | 2005-01-09 18:00:00 +0100 |
commit | fb5cccb2df60361a18fe3fd572b0fe18f3a4331c (patch) | |
tree | 17ab17c399c6e9780ec75e2dc49beefa4db05060 /PLUGINS.html | |
parent | 630ba21dc198e3fbf8c15c59f7ea852f7174c476 (diff) | |
download | vdr-patch-lnbsharing-fb5cccb2df60361a18fe3fd572b0fe18f3a4331c.tar.gz vdr-patch-lnbsharing-fb5cccb2df60361a18fe3fd572b0fe18f3a4331c.tar.bz2 |
Version 1.3.18vdr-1.3.18
- Removed an unused variable from cTimer::GetWDayFromMDay() (thanks to Wayne Keer
for reporting this one).
- Some more changes to the 'childTid' handling in cThread (based on suggestions by
Stefan Huelswitt).
- Fixed the spelling of 'canceling' (thanks to Wayne Keer for reporting this one).
- Re-introduced a sleep to cDvbPlayer::Action() to avoid high CPU load in still
picture mode (thanks to Reinhard Nissl for reporting this one).
- Fixed a possible race condition in generating the DVB device names (thanks to
Rainer Zocholl for reporting this one).
- Changed the way PES packets are played to allow replay of AC3 sound over the
full featured DVB cards (partially based on a patch from Werner Fink).
+ The new function cDevice::PlayPes() is now called with the complete PES data
stream and calls PlayVideo() and PlayAudio() as necessary.
+ cDevice::PlayVideo() is now only called with actual video PES packets.
+ cDevice::PlayAudio() is now called with the actual audio PES packets, which
can be either "normal" audio or AC3 data. You need at least firmware version
0x261d to replay AC3 sound over a full featured DVB card. This function now
has an 'int' return value.
+ PlayAudio() of derived cDevice classes shall no longer call the base class
function. It shall just play the given data as audio.
+ cPlayer::PlayVideo() and cPlayer::PlayAudio() are now obsolete and have been
replaced with cPlayer::PlayPes().
+ All StripAudioPackets() functions are now obsolete. The functionality has been
moved into cDevice::PlayPes(), where only the video and audio packets that are
actually required will be processed.
+ All audio track handling is now done by cDevice; cTransfer and cDvbPlayer no
longer care about audio tracks. cPlayer, however, still has the virtual hooks
for audio track handling in order to allow plugins to implement players that
have their own idea about this.
+ cChannel::[AD]pid[12]() have been replaced with cChannel::[AD]pid(int i) to
allow access to all available PIDs.
- Escaped the '-' and 'ö' characters in the man pages (thanks to Darren Salt for
pointing this out).
- Completed the Italian OSD texts (thanks to Sean Carlos).
- Fixed setting 'synced' in cRemux when recording radio channels (thanks to
Laurence Abbott).
- Removed the LOCK_THREAD from the LIRC thread (thanks to Ludwig Nussel).
- Fixed genfontfile.c (sometimes the character width was wrong, and the codes were
shifted one too far to the left).
- Fixed the character width and shifted the codes one to the right in all font
files.
- Renamed font???.c to font???-iso8859-1.c for symmetry.
- Switched the character set to iso8859-15 for English, German and Finnish (thanks
to Andreas Brugger for reporting the missing Euro sign in iso8859-1).
- Added 'channels.conf.terr' entries for Lübeck (thanks to Stefan Hußfeldt).
- Fixed a race condition in starting a thread (thanks to Reinhard Nissl for
reporting this one).
- Replaced non-threadsafe library functions with their threadsafe versions (thanks
to Rainer Zocholl for pointing this out).
- Other non-threadsafe functions have been replaced by threadsafe classes that hide
the actual buffering. In particular these are:
readdir() -> cReadDir
readline() -> cReadLine
- Several formerly non-threadsafe functions now have a return type of cString:
cChannel::ToText()
tChannelID::ToString()
cEvent::GetDateString()
cEvent::GetTimeString()
cEvent::GetEndTimeString()
cEvent::GetVpsString()
cMark::ToText()
cTimer::ToText()
cSource::ToString()
cTimer::PrintDay()
cTimer::PrintFirstDay()
PrefixVideoFileName()
IndexToHMSF()
ChannelString()
strescape()
AddDirectory()
itoa()
WeekDayName()
DayDateTime()
When using these functions in a 'const char *' context there is nothing special
to consider, except that you can no longer have a pointer to the return value,
as in
const char *date = DayDateTime();
Although this will compile without error message, the resulting 'date' will not
be valid after this line. Use this instead:
cString date = DayDateTime();
In a 'const void *' context (as in printf() etc.) the result needs to be
dereferenced with a '*', as in
printf("%s", *DayDateTime());
to make it a 'const char *'.
- Removed delay_ms(), using cCondWait::SleepMs() instead.
- Replaced time_ms() with a threadsafe and non-overflowing cTimeMs (thanks to Rainer
Zocholl for pointing out this problem).
- Added cDevice::mutexReceiver to avoid a race condition when attaching/detaching
receivers from different threads.
- The new remote control button "Audio" can be used to switch between different
audio tracks. The "Green" button in the "Main" menu has been changed from "Language"
to "Audio", since it now also controls switching between normal and Dolby Digital
audio tracks (see MANUAL for details).
- The description of the audio tracks is now taken from the "component descriptors"
that are broadcast in the EPG data. However (as no big surprise), not all channels
actually provide useful data here, so there are now some additional EPG bugfixes,
which can be activated by setting the "EPG bugfix level" to 3.
- The format of the 'epg.data' files has been extended by the new tag 'X', which
contains the stream components of an event (see man vdr(5) for details).
- The cStatus class now has the new member function SetAudioTrack(), which can be
used to get notified when the audio track has been switched, and the new member
function SetAudioChannel() which is called when the audio channel is changed.
- Skins need to implement the new cSkinDisplayTrack class to display the audio
track menu.
- The ST:TNG skin now displays the current audio track description (if any) at the
botton left side.
- The new setup option "DVB/Audio languages" can be used to control which audio
language shall be selected in case a channel broadcasts in different languages
(see MANUAL for details).
- The "Left" and "Right" keys in the "Audio" menu can be used to switch between
the left and right stereo channels in case there are different audio tracks
in these channels (see MANUAL for details).
- Fixed a possible race condition in cDevice::Action() (thanks to Mattias Grönlund).
- Fixed the default quality value when grabbing a JPEG image (thanks to Patrick
Gleichmann).
- Fixed deleting a menu item in case the next item is not selectable (thanks to
Dino Ravnic).
- Implemented displaying mandatory subtitles in the SPU decoder (thanks to Marco
Schlüßler).
- The setup option "Recording/Record Dolby Digital" has been renamed and moved to
"DVB/Use Dolby Digital". It now controls whether Dolby Digital is recorded and
whether an available DD audio track will appear in the "Audio" menu.
- Added support for circular polarization (thanks to Jonan Santiago).
- Thanks to Werner Fink, Reinhard Nissl, Sascha Volkenandt and Bjørnar Nilsen for
their support in testing and fine tuning this version.
Diffstat (limited to 'PLUGINS.html')
-rw-r--r-- | PLUGINS.html | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/PLUGINS.html b/PLUGINS.html index cfd28d1..9132aa2 100644 --- a/PLUGINS.html +++ b/PLUGINS.html @@ -14,18 +14,18 @@ Copyright © 2004 Klaus Schmidinger<br> <a href="http://www.cadsoft.de/vdr">www.cadsoft.de/vdr</a> </center> <p> -<!--X1.2.6--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%> -Important modifications introduced in version 1.2.6 are marked like this. -<!--X1.2.6--></td></tr></table> -<!--X1.3.0--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> +<!--X1.3.0--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%> Important modifications introduced in version 1.3.0 are marked like this. <!--X1.3.0--></td></tr></table> -<!--X1.3.7--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%> +<!--X1.3.7--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> Important modifications introduced in version 1.3.7 are marked like this. <!--X1.3.7--></td></tr></table> -<!--X1.3.8--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%> +<!--X1.3.8--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%> Important modifications introduced in version 1.3.8 are marked like this. <!--X1.3.8--></td></tr></table> +<!--X1.3.18--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%> +Important modifications introduced in version 1.3.18 are marked like this. +<!--X1.3.18--></td></tr></table> <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. @@ -73,11 +73,11 @@ structures and allows it to hook itself into specific areas to perform special a <li><a href="#Status monitor">Status monitor</a> <li><a href="#Players">Players</a> <li><a href="#Receivers">Receivers</a> -<!--X1.3.0--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> +<!--X1.3.0--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%> <li><a href="#Filters">Filters</a> <!--X1.3.0--></td></tr></table> <li><a href="#The On Screen Display">The On Screen Display</a> -<!--X1.3.7--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%> +<!--X1.3.7--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> <li><a href="#Skins">Skins</a> <li><a href="#Themes">Themes</a> <!--X1.3.7--></td></tr></table> @@ -1023,17 +1023,21 @@ public: Take a look at the files <tt>player.h</tt> and <tt>dvbplayer.c</tt> to see how VDR implements its own player for the VDR recordings. <p> -To play the video data, the player needs to call its member function +<!--X1.3.18--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%> +To play the actual data, the player needs to call its member function <p><table><tr><td bgcolor=#F0F0F0><pre> -int PlayVideo(const uchar *Data, int Length); +int PlayPes(const uchar *Data, int Length, bool VideoOnly); </pre></td></tr></table><p> where <tt>Data</tt> points to a block of <tt>Length</tt> bytes of a PES data -stream. There are no prerequisites regarding the length or alignment of an +stream containing any combination of video, audio or dolby tracks. Which audio +or dolby track will actually be played is controlled by the device the player +is attached to. There are no prerequisites regarding the length or alignment of an individual block of data. The sum of all blocks must simply result in the -desired video data stream, and it must be delivered fast enough so that the +desired data stream, and it must be delivered fast enough so that the DVB device doesn't run out of data. +<!--X1.3.18--></td></tr></table> To avoid busy loops the player should call its member function <p><table><tr><td bgcolor=#F0F0F0><pre> @@ -1042,24 +1046,26 @@ bool DevicePoll(cPoller &Poller, int TimeoutMs = 0); to determine whether the device is ready for further data. <p> -If the player can provide more than a single audio track, it can implement the -following functions to make them available: +<!--X1.3.18--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%> +By default all audio track handling is done by the device a player is +attached to. +If the player can provide more than a single audio track, and has special +requirements in order to set a given track, it can implement the +following function to allow the device to set a specific track: <p><table><tr><td bgcolor=#F0F0F0><pre> -virtual int NumAudioTracks(void) const; -virtual const char **GetAudioTracks(int *CurrentTrack = NULL); -virtual void SetAudioTrack(int Index); +virtual void SetAudioTrack(eTrackType Type, const tTrackId *TrackId) </pre></td></tr></table><p> -<p> -If there is an additional audio track that has to be replayed with external hardware, -the player shall call its member function +A player that has special requirements about audio tracks should announce its +available audio tracks by calling <p><table><tr><td bgcolor=#F0F0F0><pre> -void PlayAudio(const uchar *Data, int Length); +bool DeviceSetAvailableTrack(eTrackType Type, int Index, uint16_t Id, const char *Language = NULL, uint32_t Flags = 0) </pre></td></tr></table><p> -where <tt>Data</tt> points to a complete audio PES packet of <tt>Length</tt> bytes. +See <tt>device.h</tt> for details about the parameters for track handling. +<!--X1.3.18--></td></tr></table> <p> The second part needed here is a control object that receives user input from the main program loop and reacts on this by telling the player what to do: @@ -1217,7 +1223,7 @@ Mode</i>). 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>. -<!--X1.3.0--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> +<!--X1.3.0--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%> <a name="Filters"><hr><h2>Filters</h2> <center><i><b>A Fistful of Datas</b></i></center><p> @@ -1263,7 +1269,7 @@ and will automatically detach itself from the <tt>cDevice</tt>. See VDR/eit.c or VDR/pat.c to learn how to process filter data. <!--X1.3.0--></td></tr></table> -<!--X1.3.7--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%> +<!--X1.3.7--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> <a name="The On Screen Display"><hr><h2>The On Screen Display</h2> <center><i><b>Window to the world</b></i></center><p> @@ -1356,6 +1362,9 @@ public: virtual cSkinDisplayMenu *DisplayMenu(void); virtual cSkinDisplayReplay *DisplayReplay(bool ModeOnly); virtual cSkinDisplayVolume *DisplayVolume(void); +<!--X1.3.18--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%> + virtual cSkinDisplayMessage *DisplayTrack(int NumTracks, const char * const *Tracks); +<!--X1.3.18--></td></tr></table> virtual cSkinDisplayMessage *DisplayMessage(void); }; </pre></td></tr></table><p> @@ -1375,7 +1384,7 @@ new cMySkin; in the <a href="#Getting started"><tt>Start()</tt></a> function of your plugin. Do not delete this object, it will be automatically deleted when the program ends. <p> -<!--X1.3.8--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%> +<!--X1.3.8--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%> In order to be able to easily identify plugins that implement a skin it is recommended that the name of such a plugin should be @@ -1484,13 +1493,15 @@ repectively. <b>Audio selection</b> <p> If the device can provide more than a single audio track, it can implement the -following functions to make them available: +following function to make them available: +<!--X1.3.18--><table width=100%><tr><td bgcolor=#FF0000> </td><td width=100%> <p><table><tr><td bgcolor=#F0F0F0><pre> -virtual int NumAudioTracksDevice(void) const; -virtual const char **GetAudioTracksDevice(int *CurrentTrack = NULL) const; -virtual void SetAudioTrackDevice(int Index); +virtual void SetAudioTrackDevice(eTrackType Type); +virtual int GetAudioChannelDevice(void); +virtual void SetAudioChannelDevice(int AudioChannel); </pre></td></tr></table><p> +<!--X1.3.18--></td></tr></table> <p> <b>Recording</b> @@ -1527,9 +1538,7 @@ The functions to implement replaying capabilites are virtual bool HasDecoder(void) const; virtual bool CanReplay(void) const; virtual bool SetPlayMode(ePlayMode PlayMode); -<!--X1.2.6--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%> virtual int64_t GetSTC(void); -<!--X1.2.6--></td></tr></table> virtual void TrickSpeed(int Speed); virtual void Clear(void); virtual void Play(void); @@ -1549,7 +1558,7 @@ virtual void SetVideoFormat(bool VideoFormat16_9); virtual void SetVolumeDevice(int Volume); </pre></td></tr></table><p> -<!--X1.3.0--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> +<!--X1.3.0--><table width=100%><tr><td bgcolor=#0000AA> </td><td width=100%> <p> <b>Section Filtering</b> <p> @@ -1579,7 +1588,7 @@ handle section data. <p> <b>On Screen Display</b> <p> -<!--X1.3.7--><table width=100%><tr><td bgcolor=#AA0000> </td><td width=100%> +<!--X1.3.7--><table width=100%><tr><td bgcolor=#00AA00> </td><td width=100%> If your device provides On Screen Display (OSD) capabilities (which every device that is supposed to be used as a primary device should do), it shall implement an "OSD provider" class, derived from <tt>cOsdProvider</tt>, which, when its <tt>CreateOsd()</tt> |