From: Chang.H.S Date: Thu, 6 Dec 2012 01:56:27 +0000 (+0900) Subject: fix aio-grab. X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_openvuplus_3.0;a=commitdiff_plain;h=e7e46425236c6ff39037a35aa7bea7444f60faf1 fix aio-grab. --- diff --git a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab.bb b/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab.bb new file mode 100755 index 0000000..9a34d2d --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab.bb @@ -0,0 +1,15 @@ +DESCRIPTION="AiO screen grabber" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=94d55d512a9ba36caa9b7df079bae19f" + +PR = "r1" +PV = "0.8+cvs${SRCDATE}" +SRCDATE = "20101123" + +SRC_URI="cvs://anonymous@cvs.schwerkraft.elitedvb.net/cvsroot/aio-grab;module=aio-grab;method=pserver" +SRC_URI_append_vuplus = "\ + file://aio-grab_vuplus.patch;patch=1" + +S = "${WORKDIR}/aio-grab" + +inherit autotools pkgconfig diff --git a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab/aio-grab_vuplus.patch b/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab/aio-grab_vuplus.patch index 1459e22..b9f4039 100644 --- a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab/aio-grab_vuplus.patch +++ b/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab/aio-grab_vuplus.patch @@ -1,94 +1,189 @@ diff --git a/main.c b/main.c -index 190ff5f..08298e9 100644 +index ffff998..4bf7327 100644 --- a/main.c +++ b/main.c -@@ -101,8 +101,8 @@ static void combine(unsigned char *output, - const unsigned char *video, const unsigned char *osd, - unsigned int xres, unsigned int yres); +@@ -86,8 +86,8 @@ void (*resize)(unsigned char *source, unsigned char *dest, int xsource, int ysou + void combine(unsigned char *output, unsigned char *video, unsigned char *osd, int xres, int yres); + char* upcase(char* mixedstr); -enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405}; --static const char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405"}; -+enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405,BRCM7335,BRCM7325}; -+static const char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405","Brcm7335","Brcm7325"}; - static int stb_type=UNKNOWN; +-char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405"}; ++enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405,BRCM7335,BRCM7325,BRCM7346,BRCM7425}; ++char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405","Brcm7335","Brcm7325","Brcm7346","Brcm7425"}; + int stb_type=UNKNOWN; - static const char *file_getline(const char *filename) -@@ -221,6 +221,22 @@ int main(int argc, char **argv) { - !strcmp(line, "dm800se") || - !strcmp(line, "dm7020hd")) - stb_type = BRCM7405; + // main program +@@ -139,6 +139,53 @@ int main(int argc, char **argv) { + stb_type=BRCM7405; + } + pclose(pipe); + + // CPU Detection. idea from pl -+ if (line != NULL) -+ free(line); -+ line = file_getline("/proc/stb/info/chipset"); -+ if(line) ++ pipe=popen("cat /proc/stb/info/chipset","r"); ++ if(pipe) + { -+ if (!strcmp(line, "7335")) -+ stb_type = BRCM7335; -+ else if (!strcmp(line, "7325")) -+ stb_type = BRCM7325; -+ else if (!strcmp(line, "7405")) -+ stb_type = BRCM7405; ++ while (fgets(buf,sizeof(buf),pipe)) ++ { ++ if (strstr(upcase(buf),"7335")) ++ { ++ stb_type=BRCM7335; ++ break; ++ } ++ else if (strstr(upcase(buf),"7325")) ++ { ++ stb_type=BRCM7325; ++ break; ++ } ++ else if (strstr(upcase(buf),"7405")) ++ { ++ stb_type=BRCM7405; ++ break; ++ } ++ else if (strstr(upcase(buf),"7356")) ++ { ++ stb_type=BRCM7346; ++ break; ++ } ++ else if (strstr(upcase(buf),"7346")) ++ { ++ stb_type=BRCM7346; ++ break; ++ } ++ ++ else if (strstr(upcase(buf),"7424")) ++ { ++ stb_type=BRCM7425; ++ break; ++ } ++ else if (strstr(upcase(buf),"7425")) ++ { ++ stb_type=BRCM7425; ++ break; ++ } ++ ++ } + } -+ free(line); -+ - } else if (strstr(line, "xilleonfb")) { - stb_type = XILLEON; - } else if (strstr(line, "Pallas FB")) { -@@ -564,7 +580,7 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - return false; ++ pclose(pipe); } + if (stb_type == UNKNOWN) +@@ -491,15 +538,27 @@ void getvideo(unsigned char *video, int *xres, int *yres) + char buf[256]; + FILE *pipe; + - if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405) -+ if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325) ++ if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425) { // grab brcm7401 pic from decoder memory - unsigned char *memory = mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, 0x10100000); -@@ -609,7 +625,7 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - assert(chroma); + +- if(!(memory = (unsigned char*)mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, 0x10100000))) ++ if(stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325) + { +- printf("Mainmemory: \n"); +- return; ++ if(!(memory = (unsigned char*)mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, 0x10100000))) ++ { ++ printf("Mainmemory: \n"); ++ return; ++ } ++ } ++ else ++ { ++ if(!(memory = (unsigned char*)mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, 0x10600000))) ++ { ++ printf("Mainmemory: \n"); ++ return; ++ } + } ++ + + unsigned char data[100]; + +@@ -509,17 +568,31 @@ void getvideo(unsigned char *video, int *xres, int *yres) + memcpy(data,memory,100); + //vert_start=data[0x1B]<<8|data[0x1A]; + //vert_end=data[0x19]<<8|data[0x18]; +- stride=data[0x15]<<8|data[0x14]; +- ofs=(data[0x28]<<8|data[0x27])>>4; +- ofs2=(data[0x2c]<<8|data[0x2b])>>4; +- adr=(data[0x1f]<<24|data[0x1e]<<16|data[0x1d]<<8|data[0x1c])&0xFFFFFF00; +- adr2=(data[0x23]<<24|data[0x22]<<16|data[0x21]<<8|data[0x20])&0xFFFFFF00; +- offset=adr2-adr; ++ if(stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325) ++ { ++ stride=data[0x15]<<8|data[0x14]; ++ ofs=(data[0x28]<<8|data[0x27])>>4; ++ ofs2=(data[0x2c]<<8|data[0x2b])>>4; ++ adr=(data[0x1f]<<24|data[0x1e]<<16|data[0x1d]<<8|data[0x1c])&0xFFFFFF00; ++ adr2=(data[0x23]<<24|data[0x22]<<16|data[0x21]<<8|data[0x20])&0xFFFFFF00; ++ offset=adr2-adr; ++ } ++ else ++ { ++ stride=data[0x15]<<8|data[0x14]; ++ ofs=(data[0x3c]<<8|data[0x3b])>>4; ++ ofs2=(data[0x40]<<8|data[0x3f])>>4; ++ adr=(data[0x1f]<<24|data[0x1e]<<16|data[0x1d]<<8|data[0x1c])&0xFFFFFF00; ++ adr2=(data[0x37]<<24|data[0x36]<<16|data[0x35]<<8|data[0x34])&0xFFFFFF00; ++ offset=adr2-adr; ++ ++ } ++ + + munmap(memory, 100); + +- // printf("Stride: %d Res: %d\n",stride,res); +- // printf("Adr: %X Adr2: %X OFS: %d %d\n",adr,adr2,ofs,ofs2); ++ printf("Stride: %d Res: %d\n",stride,res); ++ printf("Adr: %X Adr2: %X OFS: %d %d\n",adr,adr2,ofs,ofs2); + + pipe=popen("cat /proc/stb/vmpeg/0/yres","r"); + while (fgets(buf,sizeof(buf),pipe)) +@@ -530,7 +603,7 @@ void getvideo(unsigned char *video, int *xres, int *yres) + chroma = (unsigned char *)malloc(stride*(ofs2+64)); // grabbing luma & chroma plane from the decoder memory -- if (stb_type == BRCM7401 || stb_type == BRCM7405) { -+ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325) { +- if (stb_type == BRCM7401 || stb_type == BRCM7405) ++ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425) + { // on dm800/dm500hd we have direct access to the decoder memory - memory = mmap(0, offset + stride*(ofs2+64), PROT_READ, MAP_SHARED, mem_fd, adr); - if (memory == MAP_FAILED) { -@@ -620,7 +636,7 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - usleep(50000); // we try to get a full picture, its not possible to get a sync from the decoder so we use a delay - // and hope we get a good timing. dont ask me why, but every DM800 i tested so far produced a good - // result with a 50ms delay -- } else if (stb_type == BRCM7400) { -+ } else if (stb_type == BRCM7400 || stb_type == BRCM7335) { + if(!(memory_tmp = (unsigned char*)mmap(0, offset + stride*(ofs2+64), PROT_READ, MAP_SHARED, mem_fd, adr))) +@@ -543,7 +616,7 @@ void getvideo(unsigned char *video, int *xres, int *yres) + // and hope we get a good timing. dont ask me why, but every DM800 i tested so far produced a good + // result with a 50ms delay + +- } else if (stb_type == BRCM7400) ++ } else if (stb_type == BRCM7400 || stb_type == BRCM7335) + { // on dm8000 we have to use dma, so dont change anything here until you really know what you are doing ! - unsigned int i = 0; -@@ -640,6 +656,7 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - +@@ -553,7 +626,7 @@ void getvideo(unsigned char *video, int *xres, int *yres) + return; + } volatile unsigned long *mem_dma; - mem_dma = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0x10c02000); -+ mem_dma = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, (stb_type==BRCM7400)? 0x10c02000:0x10c01000); - if (mem_dma == MAP_FAILED) { - perror("mmap"); - return false; -@@ -676,7 +693,7 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - unsigned int chr_luma_stride = 0x40; - unsigned int sw; +- if(!(mem_dma = (volatile unsigned long*)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0x10c02000))) ++ if(!(mem_dma = (volatile unsigned long*)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, (stb_type==BRCM7400)? 0x10c02000:0x10c01000))) + { + printf("Mainmemory: \n"); + return; +@@ -595,7 +668,7 @@ void getvideo(unsigned char *video, int *xres, int *yres) + int chr_luma_stride = 0x40; + int sw=1; - if (stb_type == BRCM7405) -+ if (stb_type == BRCM7405 || stb_type == BRCM7325) ++ if (stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425) chr_luma_stride *= 2; xsub=chr_luma_stride; -@@ -711,9 +728,9 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre +@@ -630,9 +703,9 @@ void getvideo(unsigned char *video, int *xres, int *yres) } } - if (stb_type == BRCM7401 || stb_type == BRCM7405) -+ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325) - munmap(memory, offset + stride * (ofs2 + 64)); -- else if (stb_type == BRCM7400) { -+ else if (stb_type == BRCM7400 || stb_type == BRCM7335) { - memory -= 0x1000; - munmap(memory, DMA_BLOCKSIZE + 0x1000); - } ++ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425) + munmap(memory_tmp, offset + stride*(ofs2+64)); +- else if (stb_type == BRCM7400) ++ else if (stb_type == BRCM7400 || stb_type == BRCM7335) + munmap(memory_tmp, DMA_BLOCKSIZE + 0x1000); + + for (t=0; t< stride*ofs;t+=4) diff --git a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab_0.8.bb b/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab_0.8.bb deleted file mode 100644 index bc89b2d..0000000 --- a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab_0.8.bb +++ /dev/null @@ -1,7 +0,0 @@ -SUMMARY = "Screen grabber for Dreambox Set-Top-Boxes" -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://LICENSE;md5=94d55d512a9ba36caa9b7df079bae19f" -SRCREV = "8394e1ba98c73d7c56d3235ef16cce253dc597cd" -PR = "r1" - -inherit autotools schwerkraft-git diff --git a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab_0.8.bbappend b/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab_0.8.bbappend deleted file mode 100644 index 9199d4a..0000000 --- a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab_0.8.bbappend +++ /dev/null @@ -1,8 +0,0 @@ -PR .= "-vuplus0" - -SRC_URI += " \ - file://aio-grab_vuplus.patch;patch=1;pnum=1 \ -" - -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" -