|
|
|
/***************************************************************************
|
|
|
|
timeshifter.h - description
|
|
|
|
-------------------
|
|
|
|
begin : May 16 2005
|
|
|
|
copyright : (C) 2005 Ernst Martin Witte
|
|
|
|
email : witte@kawo1.rwth-aachen.de
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef KRADIO_TIMESHIFTER_H
|
|
|
|
#define KRADIO_TIMESHIFTER_H
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include <config.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "../../src/include/plugins.h"
|
|
|
|
#include "../../src/include/soundstreamclient_interfaces.h"
|
|
|
|
#include "../../src/include/fileringbuffer.h"
|
|
|
|
|
|
|
|
|
|
|
|
class TimeShifter : public TQObject,
|
|
|
|
public PluginBase,
|
|
|
|
public ISoundStreamClient
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
public:
|
|
|
|
TimeShifter (const TQString &name);
|
|
|
|
virtual ~TimeShifter ();
|
|
|
|
|
|
|
|
virtual bool connectI (Interface *);
|
|
|
|
virtual bool disconnectI (Interface *);
|
|
|
|
|
|
|
|
virtual TQString pluginClassName() const { return "TimeShifter"; }
|
|
|
|
|
|
|
|
virtual const TQString &name() const { return PluginBase::name(); }
|
|
|
|
virtual TQString &name() { return PluginBase::name(); }
|
|
|
|
|
|
|
|
// config
|
|
|
|
|
|
|
|
const TQString &getPlaybackMixer() const { return m_PlaybackMixerID; }
|
|
|
|
const TQString &getPlaybackMixerChannel() const { return m_PlaybackMixerChannel; }
|
|
|
|
const TQString &getTempFileName() const { return m_TempFileName; }
|
|
|
|
TQ_UINT64 getTempFileMaxSize() const { return m_TempFileMaxSize; }
|
|
|
|
|
|
|
|
void setTempFile(const TQString &filename, TQ_UINT64 s);
|
|
|
|
bool setPlaybackMixer(const TQString &soundStreamClientID, const TQString &ch);
|
|
|
|
|
|
|
|
// PluginBase
|
|
|
|
|
|
|
|
public:
|
|
|
|
virtual void saveState (KConfig *) const;
|
|
|
|
virtual void restoreState (KConfig *);
|
|
|
|
|
|
|
|
virtual ConfigPageInfo createConfigurationPage();
|
|
|
|
virtual AboutPageInfo createAboutPage();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
ISoundStreamClient *searchPlaybackMixer();
|
|
|
|
|
|
|
|
size_t writeMetaDataToBuffer(const SoundMetaData &md, char *buffer, size_t buffer_size);
|
|
|
|
size_t readMetaDataFromBuffer(SoundMetaData &md, const char *buffer, size_t buffer_size);
|
|
|
|
void skipPacketInRingBuffer();
|
|
|
|
|
|
|
|
// SoundStreamClient
|
|
|
|
void noticeConnectedI (ISoundStreamServer *s, bool pointer_valid);
|
|
|
|
|
|
|
|
bool startCaptureWithFormat(SoundStreamID id,
|
|
|
|
const SoundFormat &proposed_format,
|
|
|
|
SoundFormat &real_format,
|
|
|
|
bool force_format);
|
|
|
|
bool stopCapture(SoundStreamID id);
|
|
|
|
bool noticeSoundStreamClosed(SoundStreamID id);
|
|
|
|
bool startPlayback(SoundStreamID id);
|
|
|
|
bool stopPlayback(SoundStreamID id);
|
|
|
|
bool pausePlayback(SoundStreamID id);
|
|
|
|
bool noticeSoundStreamData(SoundStreamID id, const SoundFormat &sf, const char *data, size_t size, size_t &consumed_size, const SoundMetaData &md);
|
|
|
|
bool noticeReadyForPlaybackData(SoundStreamID id, size_t size);
|
|
|
|
|
|
|
|
bool getSoundStreamDescription(SoundStreamID id, TQString &descr) const;
|
|
|
|
|
|
|
|
// FIXME: react on redirect request
|
|
|
|
|
|
|
|
signals:
|
|
|
|
|
|
|
|
void sigUpdateConfig();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
TQString m_TempFileName;
|
|
|
|
size_t m_TempFileMaxSize;
|
|
|
|
SoundFormat m_SoundFormat;
|
|
|
|
SoundFormat m_realSoundFormat;
|
|
|
|
|
|
|
|
TQString m_PlaybackMixerID;
|
|
|
|
TQString m_PlaybackMixerChannel;
|
|
|
|
|
|
|
|
TQString m_StreamFile;
|
|
|
|
bool m_StreamPaused;
|
|
|
|
SoundStreamID m_OrgStreamID;
|
|
|
|
SoundStreamID m_NewStreamID;
|
|
|
|
SoundFormat m_RealSoundFormat;
|
|
|
|
float m_orgVolume;
|
|
|
|
|
|
|
|
SoundMetaData m_PlaybackMetaData;
|
|
|
|
size_t m_PlaybackDataLeftInBuffer;
|
|
|
|
|
|
|
|
FileRingBuffer m_RingBuffer;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|