X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=meta-openvuplus%2Frecipes-vuplus%2Faio-grab%2Faio-grab%2Faio-grab_vuplus_03b822d1c72c30ba2ce55f8b584be419447dca03.patch;fp=meta-openvuplus%2Frecipes-vuplus%2Faio-grab%2Faio-grab%2Faio-grab_vuplus_03b822d1c72c30ba2ce55f8b584be419447dca03.patch;h=0000000000000000000000000000000000000000;hb=d9fcd576e54f780822fff10e65bd614aa6c1d076;hp=48887ae17b47736dda5536a3b6d2b4d7bf1df3b6;hpb=7c1bd20dbe0ed71de3c8b3d27e43a16e66513ecd;p=vuplus_openvuplus_3.0 diff --git a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab/aio-grab_vuplus_03b822d1c72c30ba2ce55f8b584be419447dca03.patch b/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab/aio-grab_vuplus_03b822d1c72c30ba2ce55f8b584be419447dca03.patch deleted file mode 100644 index 48887ae..0000000 --- a/meta-openvuplus/recipes-vuplus/aio-grab/aio-grab/aio-grab_vuplus_03b822d1c72c30ba2ce55f8b584be419447dca03.patch +++ /dev/null @@ -1,314 +0,0 @@ -diff --git a/.gitignore b/.gitignore -index ccfb515..a6f8d11 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -16,3 +16,4 @@ install-sh - *.o - missing - stamp-h1 -+aio-grab_vuplus_* -diff --git a/main.c b/main.c -index 190ff5f..a4df66f 100644 ---- a/main.c -+++ b/main.c -@@ -1,5 +1,5 @@ - /* --AiO Dreambox Screengrabber v0.83a -+AiO Screengrabber v0.83a - - written 2006 - 2009 by Seddi - Contact: seddi@ihad.tv / http://www.ihad.tv -@@ -38,6 +38,7 @@ Feel free to use the code for your own projects. See LICENSE file for details. - #include - #include - #include -+#include - - #include - -@@ -80,6 +81,8 @@ static const int yuv2rgbtable_bv[256] = { - }; - - static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yres); -+static bool getvideo2(unsigned char *video, unsigned int *xres, unsigned int *yres); -+ - static bool getosd(unsigned char *osd, unsigned int *xres, unsigned int *yres); - - static void smooth_resize(const unsigned char *source, unsigned char *dest, -@@ -101,10 +104,24 @@ static void combine(unsigned char *output, - const unsigned char *video, const unsigned char *osd, - unsigned int xres, unsigned int yres); - -+#define IS_VUPLUS 1 -+#if IS_VUPLUS -+enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405,BRCM7335,BRCM7325,BRCM7346,BRCM7425,BRCM7362,BRCM_ARM}; -+char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405","Brcm7335","Brcm7325","Brcm7346","Brcm7425\/7241","Brcm7362", "Brcm_ARM"}; -+#else - enum {UNKNOWN,PALLAS,VULCAN,XILLEON,BRCM7401,BRCM7400,BRCM7405}; - static const char *stb_name[]={"unknown","Pallas","Vulcan","Xilleon","Brcm7401","Brcm7400","Brcm7405"}; -+#endif - static int stb_type=UNKNOWN; - -+char* upcase(char* mixedstr) -+{ -+ size_t j; -+ for (j=0; j< strlen(mixedstr); ++j) -+ mixedstr[j]=toupper(mixedstr[j]); -+ return mixedstr; -+} -+ - static const char *file_getline(const char *filename) - { - static char *line = NULL; -@@ -184,10 +201,9 @@ static int file_scanf_lines(const char *filename, const char *fmt, ...) - } - - // main program -- - int main(int argc, char **argv) { - -- printf("AiO Dreambox Screengrabber " PACKAGE_VERSION "\n\n"); -+ printf("AiO Screengrabber " PACKAGE_VERSION "\n\n"); - - unsigned int xres_v = 0,yres_v = 0,xres_o,yres_o,xres,yres,aspect,width; - int c,osd_only,video_only,use_osd_res,use_png,use_jpg,jpg_quality,no_aspect,use_letterbox; -@@ -205,11 +221,41 @@ int main(int argc, char **argv) { - char filename[256] = { "/tmp/screenshot.bmp" }; - - // detect STB -- const char *line = file_getline("/proc/fb"); -+ char *line = (char*)file_getline("/proc/fb"); - if (line == NULL) - return 1; - - if (strstr(line, "bcmfb")) { -+#if IS_VUPLUS -+ if((line=(char*)file_getline("/proc/stb/info/chipset")) == NULL) -+ return 1; -+ if (strstr(upcase(line),"7335")) -+ stb_type=BRCM7335; -+ else if (strstr(upcase(line),"7325")) -+ stb_type=BRCM7325; -+ else if (strstr(upcase(line),"7405")) -+ stb_type=BRCM7405; -+ else if (strstr(upcase(line),"7356")) -+ stb_type=BRCM7346; -+ else if (strstr(upcase(line),"7346")) -+ stb_type=BRCM7346; -+ else if (strstr(upcase(line),"7424")) -+ stb_type=BRCM7425; -+ else if (strstr(upcase(line),"7425")) -+ stb_type=BRCM7425; -+ else if (strstr(upcase(line),"7241")) -+ stb_type=BRCM7425; -+ else if (strstr(upcase(line),"7362")) -+ stb_type=BRCM7362; -+ else if (strstr(upcase(line),"7366")) -+ stb_type=BRCM_ARM; -+ else if (strstr(upcase(line),"7376")) -+ stb_type=BRCM_ARM; -+ else if (strstr(upcase(line),"7444")) -+ stb_type=BRCM_ARM; -+ else if (strstr(upcase(line),"7252")) -+ stb_type=BRCM_ARM; -+#else - line = file_getline("/proc/stb/info/model"); - if (line == NULL) - return 1; -@@ -221,6 +267,7 @@ int main(int argc, char **argv) { - !strcmp(line, "dm800se") || - !strcmp(line, "dm7020hd")) - stb_type = BRCM7405; -+#endif - } else if (strstr(line, "xilleonfb")) { - stb_type = XILLEON; - } else if (strstr(line, "Pallas FB")) { -@@ -325,9 +372,18 @@ int main(int argc, char **argv) { - if (!video_only && !getosd(osd, &xres_o, &yres_o)) - return 1; - -- // get video -- if (!osd_only && !getvideo(video, &xres_v, &yres_v)) -- return 1; -+ if (stb_type == BRCM_ARM) -+ { -+ if (!osd_only && !getvideo2(video, &xres_v, &yres_v)) -+ return 1; -+ } -+ else -+ { -+ if (!osd_only && !getvideo(video, &xres_v, &yres_v)) -+ return 1; -+ } -+ -+ - - // get aspect ratio - if (stb_type == VULCAN || stb_type == PALLAS) -@@ -549,6 +605,22 @@ int main(int argc, char **argv) { - } - - // grabing the video picture -+static bool getvideo2(unsigned char *video, unsigned int *xres, unsigned int *yres) -+{ -+ int fd_video = open("/dev/dvb/adapter0/video0", O_RDONLY); -+ if (fd_video < 0) { -+ perror("/dev/dvb/adapter0/video0"); -+ return false; -+ } -+ -+ ssize_t r = read(fd_video, video, 1920 * 1080 * 3); -+ close(fd_video); -+ -+ *xres = 1920; -+ *yres = 1080; -+ -+ return true; -+} - - static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yres) - { -@@ -563,16 +635,34 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - perror("/dev/mem"); - return false; - } -- -+#if IS_VUPLUS -+ if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405 || stb_type == BRCM7335 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425 || stb_type == BRCM7362) -+#else - if (stb_type == BRCM7401 || stb_type == BRCM7400 || stb_type == BRCM7405) -+#endif - { - // grab brcm7401 pic from decoder memory -+#if IS_VUPLUS -+ off_t offset_addr = 0x10600000; -+ switch(stb_type) { -+ case BRCM7401: -+ case BRCM7400: -+ case BRCM7405: -+ case BRCM7335: -+ case BRCM7325: offset_addr = 0x10100000; break; -+ } -+ unsigned char *memory = mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, offset_addr); -+ if (memory == MAP_FAILED) { -+ perror("mmap"); -+ return false; -+ } -+#else - unsigned char *memory = mmap(0, 100, PROT_READ, MAP_SHARED, mem_fd, 0x10100000); - if (memory == MAP_FAILED) { - perror("mmap"); - return false; - } -- -+#endif - unsigned char data[100]; - - unsigned int adr,adr2,ofs,ofs2,offset/*,vert_start,vert_end*/; -@@ -582,12 +672,30 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - memcpy(data,memory,100); - //vert_start=data[0x1B]<<8|data[0x1A]; - //vert_end=data[0x19]<<8|data[0x18]; -+#if IS_VUPLUS -+ 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; -+ } -+#else - 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; -+#endif - - munmap(memory, 100); - -@@ -609,7 +717,11 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - assert(chroma); - - // grabbing luma & chroma plane from the decoder memory -+#if IS_VUPLUS -+ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425 || stb_type == BRCM7362 ) { -+#else - if (stb_type == BRCM7401 || stb_type == BRCM7405) { -+#endif - // 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 +732,11 @@ 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 -+#if IS_VUPLUS -+ } else if (stb_type == BRCM7400 || stb_type == BRCM7335) { -+#else - } else if (stb_type == BRCM7400) { -+#endif - // on dm8000 we have to use dma, so dont change anything here until you really know what you are doing ! - - unsigned int i = 0; -@@ -639,7 +755,11 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - } - - volatile unsigned long *mem_dma; -+#if IS_VUPLUS -+ mem_dma = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, (stb_type==BRCM7400)?0x10c02000:0x10c01000); -+#else - mem_dma = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0x10c02000); -+#endif - if (mem_dma == MAP_FAILED) { - perror("mmap"); - return false; -@@ -675,8 +795,11 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - unsigned int t = 0, t2 = 0, dat1 = 0; - unsigned int chr_luma_stride = 0x40; - unsigned int sw; -- -+#if IS_VUPLUS -+ if (stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425) -+#else - if (stb_type == BRCM7405) -+#endif - chr_luma_stride *= 2; - - xsub=chr_luma_stride; -@@ -692,6 +815,7 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - for (ytmp = 0; ytmp < ofs; ytmp++) - { - memcpy(luma + dat1, memory + t, xsub); // luma -+ - t += chr_luma_stride; - - switch (ofs2-ytmp) // the two switch commands are much faster than one if statement -@@ -710,10 +834,17 @@ static bool getvideo(unsigned char *video, unsigned int *xres, unsigned int *yre - dat1+=stride; - } - } -- -+#if IS_VUPLUS -+ if (stb_type == BRCM7401 || stb_type == BRCM7405 || stb_type == BRCM7325 || stb_type == BRCM7346 || stb_type == BRCM7425 || stb_type == BRCM7362) { -+#else - if (stb_type == BRCM7401 || stb_type == BRCM7405) -+#endif - munmap(memory, offset + stride * (ofs2 + 64)); -+#if IS_VUPLUS -+ } else if (stb_type == BRCM7400 || stb_type == BRCM7335) { -+#else - else if (stb_type == BRCM7400) { -+#endif - memory -= 0x1000; - munmap(memory, DMA_BLOCKSIZE + 0x1000); - }