Hello
I'm trying to set up a WinTv Nova-T usb box with vdr (along with my
regular NOVA-CI-S PCI card).
This set up is working fine with Kaffeine, but vdr is unable to tune
to a TNT channel.
My channel.conf contains the following channels (got with scan -c
while kaffeine was running):
France 2:4294967:D12M64B8T8G32Y0:T:27500:120:130:0:0:257:0:0:0
France 4:4294967:D12M64B8T8G32Y0:T:27500:420:430:0:0:259:0:0:0
France 5:4294967:D12M64B8T8G32Y0:T:27500:320:330:0:0:260:0:0:0
ARTE:4294967:…
[View More]D12M64B8T8G32Y0:T:27500:520:530,531:0:0:261:0:0:0
LCP:4294967:D12M64B8T8G32Y0:T:27500:620:630:0:0:262:0:0:0
Anytime I try to tune to a DVB-T channel I get:
vdr: [15337] frontend 0 timed out while tuning to channel 47, tp 4294
If I stop vdr, start kaffeine, I can receive the dvb-t channels
correctly (no need to unplug/plug the dvb usb device as mentioned
elsewhere)
I'm using vdr 1.4.5-2.ds with xine plugin.
Can anyone help me on this topic ?
Thanks
[View Less]
Hi there,
My config:
- Asus M2NPV-VM (Geforce6150), Hauppauge nexus-s.
- suse 10.0, kde, vdr-1.4.4.
I recently purchased a 32" LCD-TV, and I would like to set up
vdr-softdevice, to connect vdrbox via D-SUB or DVI to the TV set.
I compiled ffmpeg-0.4.9-cvs and vdr-softdevice-0.4.0 without any errors.
Probing vdr with softdevice:
tigervdr:/opt/tigervdr/vdr-1.4.4 # ./vdr -c /vdrconf -P 'softdevice -vo
xv:'
[softdevice] processing args
[softdevice] argv [0] = softdevice
[softdevice] …
[View More]argv [1] = -vo
vo_argv: xv:
[softdevice] initializing Plugin
[softdevice] Initializing Video Out
[softdevice] ffmpeg build(3344640)
[XvVideoOut]: Xinerama Screen 0: 0,0 1360x768
[XvVideoOut]: Xinerama Screen 1: 1360,0 720x480
[XvVideoOut]: osd_image shmid = 2949127
[XvVideoOut]: got osd_image: width 2080 height 768, bytes per line 4160
[XvVideoOut]: max area size 2046 x 2046
[XvVideoOut]: using area size 736 x 576
[softdevice] Subplugin successfully opend
[softdevice] Video Out seems to be OK
[softdevice] Initializing Audio Out
[softdevice] Audio out seems to be OK
[softdevice] A/V devices initialized, now initializing MPEG2 Decoder
Segmentation fault
I tried different ffmpeg and softdevice versions, with same result.
Any hint?
Thanks a lot,
Istvan
[View Less]
Hi,
I've just got a pure virtual function call in cDevice::Action() for
receiver[i]->Receive(b, TS_SIZE);
It has happened while closing femon's OSD:
(gdb) bt
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7f2fc4e in __lll_mutex_lock_wait () from /lib/libpthread.so.0
#2 0xb7f2ba3c in _L_mutex_lock_88 () from /lib/libpthread.so.0
#3 0xb7f2b42d in pthread_mutex_lock () from /lib/libpthread.so.0
#4 0x08124281 in cMutex::Lock (this=0xb762c48) at thread.c:190
#5 0x080a7cdc in cThread::Lock (…
[View More]this=0xb762c38) at thread.h:91
#6 0x080a5548 in cDevice::Detach (this=0xb762c38, Receiver=0xb099ab0)
at device.c:1298
#7 0x080effb9 in cReceiver::Detach (this=0xb099ab0) at receiver.c:60
#8 0x080f0090 in ~cReceiver (this=0xb099ab0) at receiver.c:43
#9 0xb799ac29 in cFemonReceiver::~cFemonReceiver () from
/soft/vdr-1.4.6/lib/vdr/libvdr-femon.so.1.4.5
#10 0xb7998b05 in cFemonOsd::~cFemonOsd () from
/soft/vdr-1.4.6/lib/vdr/libvdr-femon.so.1.4.5
#11 0x08131da7 in main (argc=20, argv=0xbf90e914) at vdr.c:885
#12 0xb7ce6f9c in __libc_start_main () from /lib/libc.so.6
#13 0x08091111 in _start ()
(gdb)
cReceiver::~cReceiver() calls Detach(), but at that time, it is simply
too late as the virtual method table entry for Receive() has already
been restored to 0.
I suggest to call Detach() from cFemonReceiver::~cFemonReceiver() to fix
this issue.
Furthermore I suggest to add some debug output to ~cReceiver() in the
case where the receiver is still attached. I've been using femon for
quite some time now and it was the first time, that VDR dumped a core
regarding a pure virtual function call. Such a debug output would have
triggered way more early.
Bye.
--
Dipl.-Inform. (FH) Reinhard Nissl
mailto:rnissl@gmx.de
[View Less]
Hi List,
I think I just found a bug/segfault in vdr's timer handling. Could
someone please verify that:
1. start with empty timers list
2. schedule some timers (at least 2)
3. Go to the timers menu and "deactivate" all but the last.
4. deactivate the last timer -> CRASH
Also happens when selecting all timers in vdradmin's timer menu and
pressing "inactivate".
To fix the resulting Crash-loop, remove the timers.conf file.
Is this happening only to me or can someone reproduce it?
So long,
…
[View More]--
Patrick Cernko | mailto:errror@errror.org | http://www.errror.org
"Wo wir schon bei den Drogen sind kommen wir auch gleich zum Hip-Hip."
(Jimi Blue Ochsenknecht, Echo-Verleihung 2007)
[View Less]
Hi,
There are couple of annoying problems in vdr (v1.4.4 at least but most
likely also in never ones):
1) If there is data stream problems in a channel VDR initiates emergency
exit. This can be a temporary situation and gets fixed in few seconds to
minutes.
To solve this: change to other channel and infor user via OSD ("Channel
not available" or something similar)
2) If there is no data comming from the channel (e.g. new decrypting
card that needs to be updated first before it is ready to …
[View More]be used or for
some reason the key is not available) VDR initiates emergency exit.
Unnecessary action and user can do shutdown action if this is really a
problem.
To solve this: do not initiate emergency exit but show message in OSD
("Channel not available").
Basically every unnecessary exit should be avoided because it does not
provide any advantage to the user - just the opposite. Problems should
be informed to the user and let user decide what to do in case of long
lasting problem such as missing data stream.
Minor feature that would be nice:
3) If there is a problem like crash with VDR and a timed recording did
not get recorded VDR simply deletes the timer without notifying user. Of
course the timer as such is useless but it would be nice to see that
this and this recording was not done at all, was not started in time or
was not recorded fully. This way the program can be re-recorded if/when
it is broadcasted again.
And if this information can be asked from VDR then epgsearch or other
plugins can try to find missed programs again automatically.
Br, Pasi
[View Less]
Hi!
I have very simple and still hard question..
At vdr pluging setup - xineliboutput - Video.
Post processing (ffmpeg) and Deinterlaceing.
What ARE best values (to select) when you have HD LCD (via DVI) as TV and
enough CPU power (Intel Core 2 Duo) to use.
I think that I'm not only one who thinks that there is too many choices.. ;-)
--
JJussi
Great patch, thank you very much! Now the dxr3 runs very smoothly and I
don't need to be frightened while switching channels.
I strongly suggest this patch for everyone with a dxr3-card!
Keep up the good work!
- jcw
Hi,
I would like to use the dvd plugin (CVS as of today) together with
softdevice-0.4.0. Plays DVDs fine but no sound. In the plugin's source code
there's in player-dvd.c:
BitStreamOutActive = false;
HasBitStreamOut = (cPluginManager::GetPlugin("bitstreamout") != NULL);
SoftDeviceOutActive = false;
HasSoftDeviceOut = (cPluginManager::GetPlugin("xine") != NULL);
Shouldn't the plugin also check for softdevice? player-dvd.h says
static bool SoftDeviceOutActive; // …
[View More]currently used to switch for xine
static bool HasSoftDeviceOut; // currently used to switch for xine
Hmmm -
However - this patch
--- player-dvd.c.ORIG 2006-04-09 20:35:53.000000000 +0200
+++ player-dvd.c 2007-05-11 18:50:22.871312099 +0200
@@ -577,7 +577,8 @@
HasBitStreamOut = (cPluginManager::GetPlugin("bitstreamout") != NULL);
SoftDeviceOutActive = false;
- HasSoftDeviceOut = (cPluginManager::GetPlugin("xine") != NULL);
+ HasSoftDeviceOut = (cPluginManager::GetPlugin("xine") != NULL) ||
+ (cPluginManager::GetPlugin("softdevice") != NULL);
cSetupLine *slBitStreamOutActive = NULL;
if(HasBitStreamOut) {
leads to
May 11 18:52:00 linvdr vdr: [3894] dvd-plugin: SoftDeviceOutActive=1, HasSoftDeviceOut=1
but still no sound, but a whole lot of
May 11 18:52:20 linvdr vdr: [3894] ERROR: dvd-plugin iframeassembler full 524772
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] samplerate: 22050Hz, channels: #2
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] Device 'spdif-48', Samplerate 22050 Channels 2
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] Period size 1152 Buffer size 6915
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] Hardware initialized
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] samplerate: 48000Hz, channels: #2
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] Device 'spdif-48', Samplerate 48000 Channels 2
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] Period size 1152 Buffer size 9216
May 11 18:52:20 linvdr vdr: [3982] [softdevice-audio] Hardware initialized
spdif-48 is a plug that resamples everything to 48 kHz:
pcm.spdif-48 {
type plug
slave.pcm "spdif"
slave.rate 48000
}
Seems softdevice-audio doesn't get any useful data from dvd:
[mp2 @ 0xb79e7148]header missing skiping one byte
and
libdvdnav: Using dvdnav version 0.1.10 from http://dvd.sf.net
libdvdnav: DVD Title: VDRCONVERT_11-05-2007
libdvdnav: DVD Serial Number: 464496BE00000000
libdvdnav: DVD Title (Alternative):
libdvdnav: Unable to find map file '//.dvdnav/VDRCONVERT_11-05-2007.map'
libdvdnav: DVD disk reports itself with Region mask 0x00000000. Regions: 1
2 3 4 5 6 7 8
libdvdnav: Language 'de' not found, using 'en' instead
libdvdnav: Menu Languages available: en
libdvdnav: Language 'de' not found, using 'en' instead
libdvdnav: Menu Languages available: en
libdvdnav: Language 'de' not found, using 'en' instead
libdvdnav: Menu Languages available: en
libdvdnav: Language 'de' not found, using 'en' instead
libdvdnav: Menu Languages available: en
libdvdnav: Language 'de' not found, using 'en' instead
libdvdnav: Menu Languages available: en
libdvdnav: Language 'de' not found, using 'en' instead
libdvdnav: Menu Languages available: en
[mpegdecoder] Error! Codec 86020 not supported by libavcodec
[mpegdecoder] Error! Codec 86020 not supported by libavcodec
The DVD was created using vdrconvert-CVS and plays fine on my standalone
DVD player, so no region code and the generic name. Is that vdrconvert's
error?
???
--
Blood is thicker than water, and much tastier.
[View Less]
Version 0.2.7 of the vdr-dxr3 plugin is out. Changes since 0.2.6:
- add Polish translation (Mikolaj Tutak)
- sync "make install" with VDR 1.4.2-2 (Ville Skyttä)
- use cCondWait::SleepMs() instead of usleep (Ville Skyttä)
- avoid deprecation warnings with newish libavcodec (Ville Skyttä)
- add brightness/contrast/saturation settings to setup (Ville Skyttä)
- apply more settings immediately from setup menu (Ville Skyttä)
- apply AC3 and WSS patches which were in patches/ in previous releases
- …
[View More]add setup option for enabling/disabling WSS (Ville Skyttä)
- various minor tweaks
Until I can reach Christian and/or he has time to upload the release tarball
to the usual location @ SourceForge, it's available at
http://cachalot.mine.nu/src/dxr3/vdr-dxr3-0.2.7.tgz
[View Less]
Auto sized ringbuffers, changes since v1:
- increased maximum sizes for a few rb users. Most of the time just a
small part will be used, but there will be more room for times when
more is required.
- a little smarter cRingBufferLinear::Read(), handles the TS buffer
better.
- faster buffer growth. Also makes it less likely that there won't be
an opportunity to resize before an overflow.
- a potentially sleeping cRecorder:Receive(). Mostly to find out how
much more buffer/time would …
[View More]have been needed, ie debugging.
- more verbose logging.
It still wouldn't surprise me if this version caused a few overflows,
but hopefully these will be very rare.
artur
diff --git a/dvbdevice.c b/dvbdevice.c
index 955483e..20dcf29 100644
--- a/dvbdevice.c
+++ b/dvbdevice.c
@@ -1184,7 +1184,7 @@ bool cDvbDevice::OpenDvr(void)
CloseDvr();
fd_dvr = DvbOpen(DEV_DVB_DVR, CardIndex(), O_RDONLY | O_NONBLOCK, true);
if (fd_dvr >= 0)
- tsBuffer = new cTSBuffer(fd_dvr, MEGABYTE(2), CardIndex() + 1);
+ tsBuffer = new cTSBuffer(fd_dvr, MEGABYTE(8), CardIndex() + 1);
return fd_dvr >= 0;
}
diff --git a/recorder.c b/recorder.c
index 8bb1621..3c0e002 100644
--- a/recorder.c
+++ b/recorder.c
@@ -157,8 +157,20 @@ void cRecorder::Receive(uchar *Data, int Length)
{
if (Running()) {
int p = ringBuffer->Put(Data, Length);
- if (p != Length && Running())
+ if (p != Length && Running()) {
+ for (int ms=20; ms<1000; ms+=ms) {
+ cCondWait::SleepMs(ms);
+ if (!Running())
+ return;
+ int r = ringBuffer->Put(Data+p, Length-p);
+ p += r;
+ if (r)
+ dsyslog("saved extra %d bytes in recorder ring buffer after %d ms delay", r, ms);
+ if (p == Length || !Running())
+ return;
+ }
ringBuffer->ReportOverflow(Length - p);
+ }
}
}
diff --git a/remux.c b/remux.c
index da805b7..bd29b2f 100644
--- a/remux.c
+++ b/remux.c
@@ -1851,7 +1851,7 @@ void cTS2PES::ts_to_pes(const uint8_t *Buf) // don't need count (=188)
// --- cRemux ----------------------------------------------------------------
-#define RESULTBUFFERSIZE KILOBYTE(256)
+#define RESULTBUFFERSIZE MEGABYTE(2)
cRemux::cRemux(int VPid, const int *APids, const int *DPids, const int *SPids, bool ExitOnFailure)
{
diff --git a/ringbuffer.c b/ringbuffer.c
index 0633bd3..39cc02e 100644
--- a/ringbuffer.c
+++ b/ringbuffer.c
@@ -151,13 +151,30 @@ void cRingBufferLinear::PrintDebugRBL(void)
}
#endif
+// cRingBufferLinear are dynamically sized, or at least we can pretend they are ;)
+// We treat 'Size' as the maximum size, but start with a small buffer, which can
+// grow later as it fills up. Memory is always allocated for the full buffer, but
+// the unused RAM portion remains untouched until (if at all) it is actually needed.
+// Note that we can not start with a larger than requested buffer because there are
+// ring buffer users that cause crashes then (eg softdevice mpegdecoder absolutely
+// needs 32/64k).
+
+// Startup size. 64k still causes overflows before buffer starts to grow, 128k doesn't.
+// The buffers grow to 200..500k anyway, so maybe increasing this a bit more would
+// make sense, but let's first see if it's really needed.
+// In fact 128k is on the low side, but let's try not going for 256k yet.
+#define DEFRBSIZE KILOBYTE(128)
+
cRingBufferLinear::cRingBufferLinear(int Size, int Margin, bool Statistics, const char *Description)
-:cRingBuffer(Size, Statistics)
+:cRingBuffer(min(Size,DEFRBSIZE), Statistics)
{
description = Description ? strdup(Description) : NULL;
tail = head = margin = Margin;
gotten = 0;
buffer = NULL;
+ maxsize = Size;
+ growbuf = 0;
+ dsyslog("New ring buffer \"%s\" size: %d margin: %d", description, Size, Margin );
if (Size > 1) { // 'Size - 1' must not be 0!
if (Margin <= Size / 2) {
buffer = MALLOC(uchar, Size);
@@ -183,6 +200,8 @@ cRingBufferLinear::~cRingBufferLinear()
#ifdef DEBUGRINGBUFFERS
DelDebugRBL(this);
#endif
+ dsyslog("Deleting ring buffer \"%s\" size: %d / %d (used %g%% of requested size)", description,
+ size, maxsize, size/(double)maxsize*100.0 );
free(buffer);
free(description);
}
@@ -205,8 +224,21 @@ void cRingBufferLinear::Clear(void)
EnablePut();
}
+// Must only be called by the producer (ie Read()/Put()), not the consumer (Get()).
+void cRingBufferLinear::GrowBuffer(void)
+{
+ size = min(size+size, maxsize);
+ dsyslog("Enlarging ring buffer \"%s\": %d bytes (trigger %d)",
+ description, size, growbuf);
+ growbuf = 0;
+}
+
int cRingBufferLinear::Read(int FileHandle, int Max)
{
+ if (Available() >= size/2)
+ growbuf = 1;
+ if (growbuf && head>=tail && size<maxsize)
+ GrowBuffer();
int Tail = tail;
int diff = Tail - head;
int free = (diff > 0) ? diff - 1 : Size() - head;
@@ -219,6 +251,10 @@ int cRingBufferLinear::Read(int FileHandle, int Max)
Count = safe_read(FileHandle, buffer + head, free);
if (Count > 0) {
int Head = head + Count;
+ if (Available()+Count >= size/2)
+ growbuf = 2;
+ if (growbuf && head>=tail && size<maxsize)
+ GrowBuffer();
if (Head >= Size())
Head = margin;
head = Head;
@@ -245,6 +281,10 @@ int cRingBufferLinear::Read(int FileHandle, int Max)
int cRingBufferLinear::Put(const uchar *Data, int Count)
{
if (Count > 0) {
+ if (Available()+Count >= size/2)
+ growbuf = 3;
+ if (growbuf && head>=tail && size<maxsize)
+ GrowBuffer();
int Tail = tail;
int rest = Size() - head;
int diff = Tail - head;
diff --git a/ringbuffer.h b/ringbuffer.h
index dba0e61..9e7268c 100644
--- a/ringbuffer.h
+++ b/ringbuffer.h
@@ -18,11 +18,11 @@ private:
cCondWait readyForPut, readyForGet;
int putTimeout;
int getTimeout;
- int size;
time_t lastOverflowReport;
int overflowCount;
int overflowBytes;
protected:
+ int size;
tThreadId getThreadTid;
int maxFill;//XXX
int lastPercent;
@@ -59,7 +59,10 @@ private:
int margin, head, tail;
int gotten;
uchar *buffer;
+ int growbuf;
+ int maxsize;
char *description;
+ void GrowBuffer(void);
public:
cRingBufferLinear(int Size, int Margin = 0, bool Statistics = false, const char *Description = NULL);
///< Creates a linear ring buffer.
[View Less]