[vdr] vdr on arm (little endian) has problems with epg
Hi, I'm trying to setup vdr with debian unstable on arm (little endian) (NSLU2) with a WideView WT-220U PenType Receiver (USB). At first the system would freeze when the device got activated by vdr or scan. This is because arm has some problems with cache coherence. The appended patch fixes that. The next thing is that although video output is working, there's still some trouble with the epg.data not properly handled. epg.data file looks like this: C T-8468-12289-2 arte c C T-8468-12289-3 Phoenix c ... The same setup on x86 works fine, I double checked that. So I started debugging with gdb and had a look at the raw epg data that is copied from usb, comparing the output from arm and x86 looks quite similar so I guess to that point things are ok. In case you wonder I compared the output of unsigned char buf[4096] in void cSectionHandler::Action(void). I tried to narrow things further down with lots of debugging and I think the problem is related to the following code in libsi/si.h template class StructureLoop : public Loop { public: //currently you must use a while-loop testing for hasNext() //i must be 0 to get the first descriptor (with the first call) bool getNext(T &obj, Iterator &it) { if (!isValid() || it.i >= getLength()) return false; CharArray d=data; d.addOffset(it.i); T ret; ret.setData(d); ret.CheckParse(); if (!checkSize(ret.getLength())) return false; it.i+=ret.getLength(); obj=ret; return true; } By putting in some printf statements I found out it.i gets increased some bytes, these bytes are processes and that happens till getLength is reached. Then the chunk has been processed completely. That works fine on x86 but not on arm, I observed it.i increase far beyond getLength after a while. At this point things get pretty low-level and I'm stuck. Stefan Index: linux-source-2.6.23/arch/arm/common/dmabounce.c === --- linux-source-2.6.23.orig/arch/arm/common/dmabounce.c 2007-10-09 22:31:38.0 +0200 +++ linux-source-2.6.23/arch/arm/common/dmabounce.c 2008-01-11 18:14:16.0 +0100 @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -45,6 +46,9 @@ struct safe_buffer { struct list_head node; + /* safe buffer info */ + struct device *dev; + /* original request */ void *ptr; size_t size; @@ -125,6 +129,7 @@ return NULL; } + buf->dev = device_info->dev; buf->ptr = ptr; buf->size = size; buf->direction = dir; @@ -179,6 +184,38 @@ read_unlock_irqrestore(&device_info->lock, flags); return rb; } +/* The free safe buffer part. dma_free_coherent cannot be called irq disabled. + To cope with that, a tasklet (do_free) does the job upon request */ +static DEFINE_SPINLOCK(buflock); +static LIST_HEAD(buffers); + +static void do_free(unsigned long ignored) +{ + spin_lock_irq(&buflock); + while (!list_empty(&buffers)) { + struct safe_buffer *buf; + + buf = list_entry(buffers.next, +struct safe_buffer, +node); + list_del(&buf->node); + spin_unlock_irq(&buflock); + + if (buf->pool) + dma_pool_free(buf->pool->pool, buf->safe, buf->safe_dma_addr); + else + dma_free_coherent(buf->dev, buf->size, buf->safe, + buf->safe_dma_addr); + + kfree(buf); + + spin_lock_irq(&buflock); + + } + spin_unlock_irq(&buflock); +} + +static DECLARE_TASKLET(deferred_free, do_free, 0); static inline void free_safe_buffer(struct dmabounce_device_info *device_info, struct safe_buffer *buf) @@ -193,13 +230,11 @@ write_unlock_irqrestore(&device_info->lock, flags); - if (buf->pool) - dma_pool_free(buf->pool->pool, buf->safe, buf->safe_dma_addr); - else - dma_free_coherent(device_info->dev, buf->size, buf->safe, -buf->safe_dma_addr); - - kfree(buf); + /* pass the safe buffer to the tasklet */ + spin_lock_irqsave(&buflock, flags); + list_add_tail(&buf->node, &buffers); + tasklet_schedule(&deferred_free); + spin_unlock_irqrestore(&buflock, flags); } /* ** */ ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
Re: [vdr] [ANNOUNCE] VDR developer version 1.5.15
Malcolm Caldwell wrote: In case there's no older version of channels.conf, is there some simple sed/awk/perl script to remove the extra fields, or is it not strictly necessary? Is it just a 's/M2O0S0//' when you only have dvb-s channels? Should be pretty much it. Why not make 1.6.0 ignore this field so it can just work for people who upgrade/downgrade? ... that would be the attached patch. It just ignores the fields added by the temporary 1.5.14 format. When VDR saves the channels.conf next time, the format will be reverted to the 1.5.15 format, dropping the new fields. 1.5.14 and 1.7.x will re-add them anyway. Cheers, Udo --- vdr-1.5.15/channels.c 2008-02-10 16:45:38.0 +0100 +++ vdr-1.5.15-patched/channels.c 2008-02-22 19:13:32.0 +0100 @@ -624,10 +624,24 @@ return NULL; } +static const char *DropParseParameter(const char *s) +{ + if (*++s) { + char *p = NULL; + errno = 0; + strtol(s, &p, 10); + if (!errno && p != s) +return p; + } + esyslog("ERROR: invalid value for parameter '%c'", *(s - 1)); + return NULL; +} + bool cChannel::StringToParameters(const char *s) { while (s && *s) { switch (toupper(*s)) { + case 'A': s = DropParseParameter(s); break; case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break; case 'C': s = ParseParameter(s, coderateH, CoderateValues); break; case 'D': s = ParseParameter(s, coderateL, CoderateValues); break; @@ -636,7 +650,11 @@ case 'I': s = ParseParameter(s, inversion, InversionValues); break; case 'L': polarization = *s++; break; case 'M': s = ParseParameter(s, modulation, ModulationValues); break; + case 'Z': s = DropParseParameter(s); break; + case 'O': s = DropParseParameter(s); break; + case 'P': s = DropParseParameter(s); break; case 'R': polarization = *s++; break; + case 'S': s = DropParseParameter(s); break; case 'T': s = ParseParameter(s, transmission, TransmissionValues); break; case 'V': polarization = *s++; break; case 'Y': s = ParseParameter(s, hierarchy, HierarchyValues); break; ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
[vdr] [patch] channels with same pids
Hi. Some satellites have many channels with same sid, nid, tid on different transponders. This is incorrect pid table, and vdr works with it not good, need scan channels and change rid manually, but if you select "transponder update" all you settings will be rewrite and channels deleted as duplicate. I have this trouble on ABS1 75.0 E and Express AM2 80.0 E, and I have very many channels with same pids on my iptv stream. After this patch, vdr parsing duplicate pids, and if transponders is not equal, channel not deleted, but rid wil be increased. If pids and transponders are equal, channel will be deleted as duplicate. Patch was made for vdr-1.5.12, but works with 1.5.15 too. Attached 3 patches, for native vdr and vdr + iptv plugin patched and for native reelchannelscan-0.4.1 plugin (include patch for 1.5.xx). vdr-1.5.12-incorrect-pid.diff Description: Binary data vdr-1.5.12-iptv-incorrect-pid.diff Description: Binary data reelchannelscan-0.4.1-1.5.12-incorrect-pid.diff Description: Binary data ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
Re: [vdr] VDR + FF card under x11.
Jean-Claude Repetto wrote: > Albert Gall a écrit : >> VDR + FF card works under x11 without requiring any plug mpeg decoder ? >> > > Yes, just use a V4L application such as xawtv or tvtime to display > /dev/dvb/adapter0/dvr0 . You probably meant /dev/video0 :) -- Anssi Hannula ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
[vdr] How to change font data?
Hi, My ExtRecMenu-plugin (and even my Nordlicht's EPG-plugin) uses a function to add icons to the used fonts. It changes some of the unused signs ( between 0x80 and 0x9f) by directly changing their data. Since VDR introduced true type fonts, this function doesn't work anymore. I tried to understand how to use CreateFont from the class cFont to do the same with newer VDR versions but I failed. Is it possible to change font data directly in code or do I have to create my own true type font containing the icons? Regards, Martin ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
Re: [vdr] VDR + FF card under x11.
On 02/22/08 09:25, Torgeir Veimo wrote: > > On 22 Feb 2008, at 18:20, Klaus Schmidinger wrote: >> On 02/22/08 08:45, Jean-Claude Repetto wrote: >>> Albert Gall a écrit : VDR + FF card works under x11 without requiring any plug mpeg decoder ? >>> >>> Yes, just use a V4L application such as xawtv or tvtime to display >>> /dev/dvb/adapter0/dvr0 . >> >> There is also KVDR: http://www.s.netic.de/gfiala > > How does KVDR fetch the image off the FF card? Just blitting from the > framebuffer? AFAIK yes. Klaus ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
[vdr] Help!! Remote Problems. for Manu Abraham..
Hy. I have an SkyStar HD on an gentoo distro with latest multiproto drivers from http://jusst.de/hg. afther a few revision like changeset "7200 45eec532cefa" my remote control from skystar hd card with code "TTS35AI", works in x11org controling just volume up and down, and mute. But I cant' make it to work with vdr. My lircd.conf is this but not used: eps30 aeps 100 one 0 0 zero0 0 gap 135992 toggle_bit_mask 0x0 begin codes 10x80010002 20x80010003 30x80010004 40x80010005 50x80010006 60x80010007 70x80010008 80x80010009 90x8001000A 00x8001000B -/-- 0x8001001C red 0x8001006A green0x80010069 yelow0x80010080 blue 0x8001008B vol_up 0x80010073 vol_down 0x80010072 channel+ 0x80010192 channel- 0x80010193 menu 0x800100AE ok 0x8001001E mute 0x80010071 power0x80010074 end codes end remote and remote.conf from vdr like this: remote-event5.Up 000100010192 remote-event5.Down 000100010193 remote-event5.Menu 00010001001E remote-event5.Ok 0001000100AE wich is difrent from TT-S3200. I know that skystar hd is a clone of TT-s3200, but on remote case is a litle bit diffrent each other, even when woked a few keys on remote never worked like yelo, menu and tv, and they work for shure tested in winxp with original software from card. And now I can't make it work in vdr with vdr-remote. is another way?, lyke remote-keys.?? Looking for last minute shopping deals? Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
Re: [vdr] VDR + FF card under x11.
On 22 Feb 2008, at 18:20, Klaus Schmidinger wrote: On 02/22/08 08:45, Jean-Claude Repetto wrote: Albert Gall a écrit : VDR + FF card works under x11 without requiring any plug mpeg decoder ? Yes, just use a V4L application such as xawtv or tvtime to display /dev/dvb/adapter0/dvr0 . There is also KVDR: http://www.s.netic.de/gfiala How does KVDR fetch the image off the FF card? Just blitting from the framebuffer? -- Torgeir Veimo [EMAIL PROTECTED] ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr
Re: [vdr] VDR + FF card under x11.
On 02/22/08 08:45, Jean-Claude Repetto wrote: > Albert Gall a écrit : >> VDR + FF card works under x11 without requiring any plug mpeg decoder ? >> > > Yes, just use a V4L application such as xawtv or tvtime to display > /dev/dvb/adapter0/dvr0 . There is also KVDR: http://www.s.netic.de/gfiala Klaus ___ vdr mailing list vdr@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr