Ich versuche das Noad Programm zu einem Plugin zu "porten", so dass es auch für vdr-1.7.3> zu gebrauchen sei.
Wenn ich conform PLUGINS.html ein receiver in meinem plugin aufnehme:
// --- cMyReceiver --------------------------------------------------------
#include <vdr/receiver.h>
class cMyReceiver : public cReceiver, cThread {
protected:
virtual void Activate(bool On);
virtual void Receive(uchar *Data, int Length);
public:
cMyReceiver(int Pid);
};
cMyReceiver::cMyReceiver(int Pid)
:cReceiver(tChannelID(), -1, Pid)
{
}
cMyReceiver::~cMyReceiver()
{
cReceiver::Detach();
//...
}
void cMyReceiver::Activate(bool On)
{
// start your own thread for processing the received data
}
void cMyReceiver::Receive(uchar *Data, int Length)
{
// buffer the data for processing in a separate thread
}
Display More
...sagt den Kompiler:
[root@videoserver2 noad]# make
g++ -ggdb -Wall -Woverloaded-virtual -fPIC -c -DUSE_DDEPGENTRY -DUSE_JUMPPLAY -DUSE_PINPLUGIN -DUSE_SOURCECAPS -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"noad"' -I/usr/local/src/s2-liplianin-svn-20012009/linux/include -I/usr/include/ImageMagick -I/usr/local/src/s2-liplianin-svn-20012009/linux/include -I../../../include noad.c
noad.c:30: error: definition of implicitly-declared ‘virtual cMyReceiver::~cMyReceiver()’
noad.c: In member function ‘virtual void cMyStatusMonitor::Recording(const cDevice*, const char*, const char*, bool)’:
noad.c:60: error: cannot allocate an object of abstract type ‘cMyReceiver’
noad.c:17: note: because the following virtual functions are pure within ‘cMyReceiver’:
../../../include/vdr/thread.h:93: note: virtual void cThread::Action()
noad.c:61: error: passing ‘const cDevice’ as ‘this’ argument of ‘bool cDevice::AttachReceiver(cReceiver*)’ discards qualifiers
noad.c:65: error: ‘Receiver’ was not declared in this scope
make: *** [noad.o] Error 1
Was mach ich falsch?
Eine zweite frage: via den "Recording" funcion aus cStatus kann ich monitoren das ein Recording started; ich habe dan auch filename und device.
Aber den Receiver braucht auch den ChannelId und den video-pid (in Erster Stufe analysiert den Plugin nur video, kein audio). Den ChannelID kan mann statt den Beispeil aus PLUGINS.html via den :cReceiver(tChannelID() ... function bekommen, aber wie/wo bekomme ich den video-pid den gebraucht wird für diesen spezifischen laufenden Recording? Kann ich den int pids[] variable aus cReceiver irgendwie lesen?
Danke!