mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Added support for AC3 replay over the DVB device
This commit is contained in:
62
PLUGINS.html
62
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>
|
||||
@@ -1375,7 +1381,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
|
||||
|
||||
@@ -1527,9 +1533,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 +1553,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 +1583,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>
|
||||
|
Reference in New Issue
Block a user