Hi,
I have a QT application that displays the same GUI in the 3 framebuffers: /dev/fb0, /dev/fb1 and /dev/fb2. So, they are configured as following:
struct ti81xxfb_region_params regp; struct ti81xxfb_scparams scp; struct fb_fix_screeninfo fixinfo; struct fb_var_screeninfo varinfo; /* Open fb2 and apply same settings */ fd = open ("/dev/fb2", O_RDWR); if (fd == -1) { perror("failed to open display device\n"); } if (ioctl(fd, TIFB_GET_PARAMS, ®p) < 0) { perror("TIFB_GET_PARAMS\n"); close(fd); exit(1); } /* Set Pixel Alpha Blending */ regp.blendtype = TI81XXFB_BLENDING_PIXEL; if (ioctl(fd, TIFB_SET_PARAMS, ®p) < 0) { perror ("TIFB_SET_PARAMS.\n"); close(fd); exit(1); } /* Scale Graphics to 720x480 */ scp.inwidth = 1920; scp.inheight = 1080; scp.outwidth = 720; scp.outheight = 480; scp.coeff = NULL; ret = ioctl(fd, TIFB_SET_SCINFO, &scp); if (ret < 0) { perror("Can not set coeff.\n"); } /* Enable the scaling */ regp.scalaren = TI81XXFB_FEATURE_ENABLE; ret = ioctl(fd, TIFB_SET_PARAMS, ®p); if (ret < 0) { printf("failed to set reg params\n"); } /* Let's close fb2 */ close(fd); /* Open fb2 and apply size settings */ fd = open ("/dev/fb2", O_RDWR); if (fd == -1) { perror("failed to open display device\n"); } /* Get fix screen information. */ if (ioctl(fd, FBIOGET_FSCREENINFO, &fixinfo) < 0) { perror("TIFB_GET_FSCREENINFO\n"); close(fd); exit(1); } /* Get variable screen information. */ if(ioctl(fd, FBIOGET_VSCREENINFO, &varinfo) < 0) { perror("TIFB_GET_VSCREENINFO\n"); close(fd); exit(1); } varinfo.xres = 1920; varinfo.yres = 1080; varinfo.xres_virtual = varinfo.xres; varinfo.yres_virtual = varinfo.yres; /* Set the resolution */ if(ioctl(fd, FBIOPUT_VSCREENINFO, &varinfo) < 0) { perror("TIFB_PUT_VSCREENINFO\n"); close(fd); exit(1); } /* It is better to get fix screen information again because changing variable screen info may also change fix screen info */ if (ioctl(fd, FBIOGET_FSCREENINFO, &fixinfo) < 0) { perror("TIFB_GET_FSCREENINFO\n"); close(fd); exit(1); } /* Mmap the driver buffers in application space so that application can write on to them. */ mmap(NULL, fixinfo.line_length * varinfo.yres, 0x1 | 0x2, 0x01, fd, 0); /* Let's close fb2 */ close(fd);
If I run a gstreamer pipeline with the video output of 720x480 resolution, everything works fine and I am able to see the graphics layer and the video layer. But, if I run the pipeline with a video output resolution of 720x360, it stops to display and I get a kernel crash.
I found in the Technical Reference Manual that the Video Compositor needs all the input layers of the same size, so I thought that the problem could be related with the framebuffer of 720x480 and the video output of 720x360. But if I try the same with the /dev/fb1 and DVO2, it works.
Could it be a hardware limitation in the SD output?
Any help would be appreciated.
Thanks,
Eugenia Guzman