Sophie

Sophie

distrib > Mandriva > current > i586 > media > main-updates > by-pkgid > b77dda48f87d4eda8cc559e40c49a652 > files > 990

python-kde4-doc-4.4.5-0.2mdv2010.2.i586.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>
  <title>Phonon.AbstractMediaStream</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <link rel="stylesheet" type="text/css" href="../common/doxygen.css" />
  <link rel="stylesheet" media="screen" type="text/css" title="KDE Colors" href="../common/kde.css" />
</head>
<body>
<div id="container">
<div id="header">
  <div id="header_top">
    <div>
      <div>
        <img alt ="" src="../common/top-kde.jpg"/>
        KDE 4.4 PyKDE API Reference
      </div>
    </div>
  </div>
  <div id="header_bottom">
    <div id="location">
      <ul>
        <li>KDE's Python API</li>
      </ul>
    </div>

    <div id="menu">
      <ul>
        <li><a href="../modules.html">Overview</a></li>
<li><a href="http://techbase.kde.org/Development/Languages/Python">PyKDE Home</a></li>
<li><a href="http://kde.org/family/">Sitemap</a></li>
<li><a href="http://kde.org/contact/">Contact Us</a></li>
</ul>
    </div>
  </div>
</div>

<div id="body_wrapper">
<div id="body">
<div id="right">
<div class="content">
<div id="main">
<div class="clearer">&nbsp;</div>

<h1>AbstractMediaStream Class Reference</h1>
<code>from PyKDE4.phonon import *</code>
<p>
Inherits: <a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qobject.html">QObject</a><br />

Namespace: Phonon.AbstractMediaStream<br />
<h2>Detailed Description</h2>

<p>\class AbstractMediaStream abstractmediastream.h Phonon/AbstractMediaStream
Base class for custom media data streams.
</p>
<p>
Implement this class to provide a custom data stream to the backend. The class supports both, the
push and the pull model.
</p>
<p>
Push:
<pre class="fragment">
 PushStream.PushStream(QObject *parent)
   : AbstractMediaStream(parent), m_timer(new QTimer(this))
 {
   setStreamSize(getMediaStreamSize());

   connect(m_timer, SIGNAL(timeout()), SLOT(moreData()));
   m_timer-&gt;setInterval(0);
 }

 void PushStream.moreData()
 {
   const QByteArray data = getMediaData();
   if (data.isEmpty()) {
     endOfData();
   } else {
     writeData(data);
   }
 }

 void PushStream.needData()
 {
   m_timer-&gt;start();
   moreData();
 }

 void PushStream.enoughData()
 {
   m_timer-&gt;stop();
 }
</pre>
</p>
<p>
Pull:
<pre class="fragment">
 PullStream.PullStream(QObject *parent)
   : AbstractMediaStream(parent)
 {
   setStreamSize(getMediaStreamSize());
 }

 void PullStream.needData()
 {
   const QByteArray data = getMediaData();
   if (data.isEmpty()) {
     endOfData();
   } else {
     writeData(data);
   }
 }
</pre>
</p>
<p>

<dl class="author" compact><dt><b>Author:</b></dt><dd> Matthias Kretz &lt;kretz@kde.org&gt; </dd></dl>
</p>
<table border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2"><br><h2>Methods</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#AbstractMediaStream">__init__</a> (self, <a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qobject.html">QObject</a> parent=0)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#endOfData">endOfData</a> (self)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#enoughData">enoughData</a> (self)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#error">error</a> (self, Phonon::ErrorType errorType, <a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qstring.html">QString</a> errorString)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#needData">needData</a> (self)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#reset">reset</a> (self)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#seekStream">seekStream</a> (self, long offset)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#setStreamSeekable">setStreamSeekable</a> (self, bool a0)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#setStreamSize">setStreamSize</a> (self, long a0)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#streamSeekable">streamSeekable</a> (self)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#streamSize">streamSize</a> (self)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="#writeData">writeData</a> (self, <a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qbytearray.html">QByteArray</a> data)</td></tr>
</table>
<hr><h2>Method Documentation</h2><a class="anchor" name="AbstractMediaStream"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname">__init__</td>
<td>(</td>
<td class="paramtype">&nbsp;<em>self</em>, </td>
<td class="paramname"></td>
</tr><tr>
<td class="memname"></td>
<td></td>
<td class="paramtype"><a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qobject.html">QObject</a>&nbsp;</td>
<td class="paramname"><em>parent=0</em></td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td>
<td></td>
<td width="100%"> </td>
</tr></table>
</div>
<div class="memdoc"><p>Constructs an AbstractMediaStream object with a <b>parent.</b>
</p></div></div><a class="anchor" name="endOfData"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> endOfData</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname"><em>self</em>&nbsp;)</td>
<td width="100%"> </td>
</tr>
</table>
</div>
<div class="memdoc"><p>Tells the backend that the media data stream is at its end.
</p>
<p>
<dl class="warning" compact><dt><b>Warning:</b></dt><dd> Don't call this function before the first needData() is emitted.
</dd></dl>
</p></div></div><a class="anchor" name="enoughData"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> enoughData</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname"><em>self</em>&nbsp;)</td>
<td width="100%"> </td>
</tr>
</table>
</div>
<div class="memdoc"><p>Reimplement this function to be notified when the backend has enough data and your stream
object may take a break. This method is important for pushing data to the backend in
order to not fill the backend buffer unnecessarily.
</p></div></div><a class="anchor" name="error"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> error</td>
<td>(</td>
<td class="paramtype">&nbsp;<em>self</em>, </td>
<td class="paramname"></td>
</tr><tr>
<td class="memname"></td>
<td></td>
<td class="paramtype">Phonon::ErrorType&nbsp;</td>
<td class="paramname"><em>errorType</em>, </td>
</tr>
<tr>
<td class="memname"></td>
<td></td>
<td class="paramtype"><a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qstring.html">QString</a>&nbsp;</td>
<td class="paramname"><em>errorString</em></td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td>
<td></td>
<td width="100%"> </td>
</tr></table>
</div>
<div class="memdoc"><p>If an I/O error occurs you should call this function to make MediaObject go into
ErrorState.
</p>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd> MediaObject.errorType()
</dd></dl> <dl class="see" compact><dt><b>See also:</b></dt><dd> MediaObject.errorString()
</dd></dl>
</p></div></div><a class="anchor" name="needData"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> needData</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname"><em>self</em>&nbsp;)</td>
<td width="100%"> </td>
</tr>
</table>
</div>
<div class="memdoc"><dl compact><dt><b>Abstract method:</b></dt><dd>This method is abstract and can be overridden but not called directly.</dd></dl><p>Reimplement this function to be notified when the backend needs data.
</p>
<p>
When this function is called you should try to call writeData or endOfData before
returning.
</p></div></div><a class="anchor" name="reset"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> reset</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname"><em>self</em>&nbsp;)</td>
<td width="100%"> </td>
</tr>
</table>
</div>
<div class="memdoc"><dl compact><dt><b>Abstract method:</b></dt><dd>This method is abstract and can be overridden but not called directly.</dd></dl><p>Reimplement this function to reset the stream. Subsequent calls to writeData should start
from the first position of the data unless a seek is requested.
</p>
<p>
The function is necessary for the case where a non-seekable MediaStream is
played more than once. For a seekable stream the implementation can simply call
<pre class="fragment">
 seekStream(0);
 \endcode.
</p></div></div><a class="anchor" name="seekStream"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> seekStream</td>
<td>(</td>
<td class="paramtype">&nbsp;<em>self</em>, </td>
<td class="paramname"></td>
</tr><tr>
<td class="memname"></td>
<td></td>
<td class="paramtype">long&nbsp;</td>
<td class="paramname"><em>offset</em></td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td>
<td></td>
<td width="100%"> </td>
</tr></table>
</div>
<div class="memdoc"><p>Reimplement this function if your stream is seekable.
</p>
<p>
When this function is called the next call to writeData has to be at the requested \p
offset.
</p>
<p>
<dl class="warning" compact><dt><b>Warning:</b></dt><dd> Do not call the parent implementation.
</dd></dl>
</p></div></div><a class="anchor" name="setStreamSeekable"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> setStreamSeekable</td>
<td>(</td>
<td class="paramtype">&nbsp;<em>self</em>, </td>
<td class="paramname"></td>
</tr><tr>
<td class="memname"></td>
<td></td>
<td class="paramtype">bool&nbsp;</td>
<td class="paramname"><em>a0</em></td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td>
<td></td>
<td width="100%"> </td>
</tr></table>
</div>
<div class="memdoc"><p>Sets whether your data stream is seekable.
</p>
<p>
Defaults to false.
</p>
<p>
If you set this to true you have to implement the seekStream function.
</p></div></div><a class="anchor" name="setStreamSize"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> setStreamSize</td>
<td>(</td>
<td class="paramtype">&nbsp;<em>self</em>, </td>
<td class="paramname"></td>
</tr><tr>
<td class="memname"></td>
<td></td>
<td class="paramtype">long&nbsp;</td>
<td class="paramname"><em>a0</em></td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td>
<td></td>
<td width="100%"> </td>
</tr></table>
</div>
<div class="memdoc"><p>Sets the size of the stream in number of bytes.
</p>
<p>
A negative value means that the length of the stream cannot be known.
</p>
<p>
Defaults to 0.
</p>
<p>
This function has to be called. A backend will not call needData() until the
stream size is set.
</p></div></div><a class="anchor" name="streamSeekable"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname">bool streamSeekable</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname"><em>self</em>&nbsp;)</td>
<td width="100%"> </td>
</tr>
</table>
</div>
<div class="memdoc"><p>Returns whether your data stream is set as seekable.
</p>
<p>
Defaults to false.
</p></div></div><a class="anchor" name="streamSize"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname">long streamSize</td>
<td>(</td>
<td class="paramtype">&nbsp;</td>
<td class="paramname"><em>self</em>&nbsp;)</td>
<td width="100%"> </td>
</tr>
</table>
</div>
<div class="memdoc"><p>Returns the stream size that was set with setStreamSize.
</p>
<p>
A negative value means that the length of the stream cannot be known.
</p>
<p>
Defaults to 0.
</p></div></div><a class="anchor" name="writeData"></a>
<div class="memitem">
<div class="memproto">
<table class="memname"><tr>
<td class="memname"> writeData</td>
<td>(</td>
<td class="paramtype">&nbsp;<em>self</em>, </td>
<td class="paramname"></td>
</tr><tr>
<td class="memname"></td>
<td></td>
<td class="paramtype"><a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qbytearray.html">QByteArray</a>&nbsp;</td>
<td class="paramname"><em>data</em></td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td>
<td></td>
<td width="100%"> </td>
</tr></table>
</div>
<div class="memdoc"><p>Sends the media <b>data</b> to the backend for decoding.
</p>
<p>
<dl class="warning" compact><dt><b>Warning:</b></dt><dd> Don't call this function before the first needData() is emitted.
</dd></dl>
</p></div></div>
</div>
</div>
</div>

<div id="left">

<div class="menu_box">
<div class="nav_list">
<ul>
<li><a href="../allclasses.html">Full Index</a></li>
</ul>
</div>

<a name="cp-menu" /><div class="menutitle"><div>
  <h2 id="cp-menu-project">Modules</h2>
</div></div>
<div class="nav_list">
<ul><li><a href="../akonadi/index.html">akonadi</a></li>
<li><a href="../dnssd/index.html">dnssd</a></li>
<li><a href="../kdecore/index.html">kdecore</a></li>
<li><a href="../kdeui/index.html">kdeui</a></li>
<li><a href="../khtml/index.html">khtml</a></li>
<li><a href="../kio/index.html">kio</a></li>
<li><a href="../knewstuff/index.html">knewstuff</a></li>
<li><a href="../kparts/index.html">kparts</a></li>
<li><a href="../kutils/index.html">kutils</a></li>
<li><a href="../nepomuk/index.html">nepomuk</a></li>
<li><a href="../phonon/index.html">phonon</a></li>
<li><a href="../plasma/index.html">plasma</a></li>
<li><a href="../polkitqt/index.html">polkitqt</a></li>
<li><a href="../solid/index.html">solid</a></li>
<li><a href="../soprano/index.html">soprano</a></li>
</ul></div></div>

</div>

</div>
  <div class="clearer"/>
</div>

<div id="end_body"></div>
</div>
<div id="footer"><div id="footer_text">
This documentation is maintained by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;simon&#64;simonzone&#46;com">Simon Edwards</a>.<br />
        KDE<sup>&#174;</sup> and <a href="../images/kde_gear_black.png">the K Desktop Environment<sup>&#174;</sup> logo</a> are registered trademarks of <a href="http://ev.kde.org/" title="Homepage of the KDE non-profit Organization">KDE e.V.</a> |
        <a href="http://www.kde.org/contact/impressum.php">Legal</a>
    </div></div>
</body>
</html>