Hi
I'm trying to use Udo Richter's plugin to play .ts recordings in vdr-1.6.0 (http://www.udo-richter.de/vdr/patches.en.html) but it breaks a couple of plugins
streamdev plugin: <snip> server/recplayer.c: In member function âuint64_t cRecPlayer::positionFromFrameNumber(uint32_t)â: server/recplayer.c:253: error: no matching function for call to âcIndexFile::Get(int, uchar*, int*)â ../../../include/vdr/recording.h:229: note: candidates are: bool cIndexFile::Get(int, uint16_t*, off_t*, uchar*, int*) ../../../include/vdr/recording.h:231: note: int cIndexFile::Get(uint16_t, off_t) make: *** [server/recplayer.o] Error 1
radio plugin: <snip> g++ -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"radio"' -I../../../include -I/include radio.c radio.c: In member function âvirtual bool cPluginRadio::Start()â: radio.c:493: error: cannot allocate an object of abstract type âcRadioAudioâ radioaudio.h:71: note: because the following virtual functions are pure within âcRadioAudioâ: ../../../include/vdr/audio.h:27: note: virtual void cAudio::PlayTs(const uchar*, int) make: *** [radio.o] Error 1
Has anyone resolved this?
Thx
Have I got this wrong?
[root@freddy server]# diff recplayer.c recplayer.c.orig 37c37 < #if 1 ---
#if VDRVERSNUM >= 10703
61c61 < #if 0 ---
#if APIVERSNUM < 10703
102c102 < #if 1 ---
#if APIVERSNUM >= 10703
138c138 < #if 0 ---
#if APIVERSNUM < 10703
245c245 < #if 1 ---
#if VDRVERSNUM >= 10703
Should be fine - is it still failing?
yes, the streamdev compile now fails with with:
server/recplayer.c: In constructor âcRecPlayer::cRecPlayer(const cRecording*)â: server/recplayer.c:38: error: âconst class cRecordingâ has no member named âIsPesRecordingâ server/recplayer.c: In member function âuint64_t cRecPlayer::positionFromFrameNumber(uint32_t)â: server/recplayer.c:253: error: no matching function for call to âcIndexFile::Get(int, uint16_t*, off_t*)â ../../../include/vdr/recording.h:215: note: candidates are: bool cIndexFile::Get(int, uchar*, int*, uchar*, int*) ../../../include/vdr/recording.h:217: note: int cIndexFile::Get(uchar, int) make[1]: *** [server/recplayer.o] Error 1 make[1]: Leaving directory `/root/vdr-1.6.0/PLUGINS/src/streamdev'
(on an off topic, I've never worked out why gcc puts â instead of ' - gcc seems to be the only thing that does it!)
Hi
This is an off topic answer!
Am Montag, 12. April 2010 schrieb Simon Baxter:
I don't know why, but it seems GCC tries to localize the error messages. I noticed that using:
shell prompt$ LANG=C make <whatever>
gives error messages that are plain ASCII and readable :)
Regards Dieter
Nope, same problem:
make include-dir make plugins <snip> server/recplayer.c: In constructor 'cRecPlayer::cRecPlayer(const cRecording*)': server/recplayer.c:38: error: 'const class cRecording' has no member named 'IsPesRecording' server/recplayer.c: In member function 'uint64_t cRecPlayer::positionFromFrameNumber(uint32_t)': server/recplayer.c:253: error: no matching function for call to 'cIndexFile::Get(int, uint16_t*, off_t*)' ../../../include/vdr/recording.h:215: note: candidates are: bool cIndexFile::Get(int, uchar*, int*, uchar*, int*) ../../../include/vdr/recording.h:217: note: int cIndexFile::Get(uchar, int) make[1]: *** [server/recplayer.o] Error 1 make[1]: Leaving directory `/root/vdr-1.6.0/PLUGINS/src/streamdev'
On Tue, 13 Apr 2010 21:58:16 +1200, Simon Baxter wrote
Then please check VDR's recording.h. The missing IsPesRecording member function and the parameter type mismatch of cIndexFile::Get both indicate that recording.h is unpatched.
In vdr-1.6.0-2-tsplay-0.1.diff you will find the modifications to recording.h starting at line 1376.
Regards, Frank
Sorry Frank - definitely patched. I just tried cleaning and recompiling everything, don't seem to be getting the IsPesRecording function error, but am still getting the cIndexFile mismatch:
server/recplayer.c: In member function 'uint64_t cRecPlayer::positionFromFrameNumber(uint32_t)': server/recplayer.c:253: error: no matching function for call to 'cIndexFile::Get(int, uchar*, int*)' ../../../include/vdr/recording.h:229: note: candidates are: bool cIndexFile::Get(int, uint16_t*, off_t*, uchar*, int*) ../../../include/vdr/recording.h:231: note: int cIndexFile::Get(uint16_t, off_t) make: *** [server/recplayer.o] Error 1
I don't get it - it's calling a Get(int, uchar*, int*), which are defined Get(int, uint16_t*, off_t*, uchar*, int*) ??
On Wed, 14 Apr 2010 07:37:37 +1200, Simon Baxter wrote
Great - almost there. Before your cleanup, the compiler complained about
no matching function for call to 'cIndexFile::Get(int, uint16_t*, off_t*)'
now it's
no matching function for call to 'cIndexFile::Get(int, uchar*, int*)'
So this time the "#if VDRVERSNUM >= 10703" in streamdev's server/recplayer.c wasn't changed or not changed correctly. It should read "#if 1".
I attached a patch for streamdev, making it automatically detect the tsplay patch. Can you give it a try? Apparently you are using a patched streamdev. According to one of your previous mails there's one '#if' more. Please modify this additional '#if' as in the patch.
Regards, Frank
Am 14.04.2010 09:24, schrieb Frank Schmirler:
I attached a patch for streamdev, making it automatically detect the tsplay patch. Can you give it a try?
-#if VDRVERSNUM >= 10703 +#if VDRVERSNUM >= 10703 || defined(MAXVIDEOFILESIZETS)
Hey, good idea to use this #define for detection!
I didn't really notice this topic until now, because of the misleading TS Play Plugin - not Patch.
I already did plan to add some version detection to the tsplay patch, I just didn't do it until now. I'll upload a 0.2 version with detection plus some patches ASAP, which is hopefully on weekend.
Cheers,
Udo