eWarning("audio: DMX_STOP: %m");
}
#endif
+
+void eDVBAudio::flush()
+{
+ if (::ioctl(m_fd, AUDIO_CLEAR_BUFFER) < 0)
+ eDebug("audio: AUDIO_CLEAR_BUFFER: %m");
+}
eDVBAudio::~eDVBAudio()
{
}
#endif
+void eDVBVideo::flush()
+{
+ if (::ioctl(m_fd, VIDEO_CLEAR_BUFFER) < 0)
+ eDebug("video: VIDEO_CLEAR_BUFFER: %m");
+}
+
eDVBVideo::~eDVBVideo()
{
if (m_fd >= 0)
eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder): m_demux(demux), m_changed(0)
{
+ demux->connectEvent(slot(*this, &eTSMPEGDecoder::demux_event), m_demux_event);
}
eTSMPEGDecoder::~eTSMPEGDecoder()
{
return -1;
}
+
+RESULT eTSMPEGDecoder::flush()
+{
+ if (m_audio)
+ m_audio->flush();
+ if (m_video)
+ m_video->flush();
+ return 0;
+}
+
+void eTSMPEGDecoder::demux_event(int event)
+{
+ switch (event)
+ {
+ case eDVBDemux::evtFlush:
+ flush();
+ break;
+ default:
+ break;
+ }
+}
void start();
void stopPid();
#endif
+ void flush();
virtual ~eDVBAudio();
};
void start();
void stopPid();
#endif
+ void flush();
virtual ~eDVBVideo();
};
virtual ~eDVBPCR();
};
-class eTSMPEGDecoder: public iTSMPEGDecoder
+class eTSMPEGDecoder: public Object, public iTSMPEGDecoder
{
DECLARE_REF(eTSMPEGDecoder);
private:
};
int m_changed;
int setState();
+ ePtr<eConnection> m_demux_event;
+
+ void demux_event(int event);
public:
enum { pidNone = -1 };
eTSMPEGDecoder(eDVBDemux *demux, int decoder);
RESULT setPictureSkipMode(int what);
RESULT setSlowMotion(int repeat);
RESULT setZoom(int what);
+ RESULT flush();
};
#endif
return 0;
}
+RESULT eDVBDemux::flush()
+{
+ // FIXME: implement flushing the PVR queue here.
+
+ m_event(evtFlush);
+ return 0;
+}
+
+RESULT eDVBDemux::connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn)
+{
+ conn = new eConnection(this, m_event.connect(event));
+ return 0;
+}
void eDVBSectionReader::data(int)
{
friend class eDVBPCR;
friend class eDVBTSRecorder;
friend class eDVBCAService;
+ Signal1<void, int> m_event;
public:
+ enum {
+ evtFlush
+ };
DECLARE_REF(eDVBDemux);
eDVBDemux(int adapter, int demux);
virtual ~eDVBDemux();
RESULT getMPEGDecoder(ePtr<iTSMPEGDecoder> &reader);
RESULT getSTC(pts_t &pts);
RESULT getCADemuxID(uint8_t &id) { id = demux; return 0; }
+ RESULT flush();
+ RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &conn);
};
class eDVBSectionReader: public iDVBSectionReader, public Object