diff options
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> |