Thanks a lot.

Regards
mile

On Sat, Mar 6, 2010 at 5:27 PM, Caglar Akyuz <[email protected]> wrote:
> On Saturday 06 March 2010 17:26:32 Mile Davidovic wrote:
>> Hello
>> I am wondering if someone has managed to create small Qt based app
>> which can deal with video (I want to have OSD and video in same time).
>>
>> What can be best starting point for this?
>>
>
> Hi,
>
> I'm integrating GStreamer with Qt. Since GStreamer-ti plugins provide
> acceleration for GStreamer, this combination has everything I need.
>
> Following can be a starting point:
>
> 1) Create a filesystem image from Narcissus[1]. Most of the DaVinci processors
>   are present. My suggestion is to use unstable branch. Either select
>   gstreamer-ti plugins while creating the image or install those while
>   running on your device. Package list can be found at [2].
>
> 2) Try gstreamer plugins using the command line, i.e. gst-launch. Many example
>    pipelines can be found at [3]. Some examples present at the filesystem as
>    well.
>
> 3) After deciding which pipelines are suitable for your case, set-up an
>   OpenEmbedded environment. This will permit you compile your own
>   applications with Qt.
>
> 4) Write your Qt application and integrate your pipelines you decided in step
>    2 using 'gst_parse_launch' command from GStreamer library. More
>    information and examples about using GStreamer can be found at [4].
>
> 5) Use attribute window for controlling video and osd layers in your
>   application. An example code is attached at the end of this mail.
>
> Best regards,
> Caglar
>
> [1] http://www.angstrom-distribution.org/narcissus
> [2] http://www.angstrom-distribution.org/repo/
> [3] http://wiki.davincidsp.com/index.php/Example_GStreamer_Pipelines
> [4]
> http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html
>
> ___________________________________________________________________________
>
> /**
>  * DM6446 has separate framebuffers(windows) for OSD and Video layers.
>  * This function controls attribute window for transparency adjustment.
>  *
>  * trans: A value between 0-127. 0 means Video visible, and 127 means OSD.
>  * x: Start horizontal offset, must be multiple of 32.
>  * y: Start vertical offset
>  * width: Horizontal length, must be multiple of 32.
>  * height: vertical length
>  */
> bool MainWindow::SetOsdTransparency(unsigned char trans, unsigned int x,
>                unsigned int y, unsigned int width, unsigned int height)
> {
>        struct fb_var_screeninfo vScreenInfo;
>        struct fb_fix_screeninfo fScreenInfo;
>        unsigned short          *attrDisplay;
>        int                      attrSize;
>        /*
>         * Check parameters
>         */
>        if(((x & 31) != 0) || ((width & 31) != 0)) {
>                qDebug() << "Wrong tranparency width/x values";
>                return false;
>        }
>        int fd = open("/dev/fb2", O_RDWR);
>        if(fd < 0) {
>                qDebug() << "Error opening attribute window";
>                return false;// err;
>        }
>
>        if (ioctl(fd, FBIOGET_FSCREENINFO, &fScreenInfo) == -1) {
>                ::close(fd);
>                qDebug() << "Unable to get screen info";
>                return false;
>        }
>
>        if (ioctl(fd, FBIOGET_VSCREENINFO, &vScreenInfo) == -1) {
>                qDebug() << "Unable to get screen info";
>                ::close(fd);
>                return false;
>        }
>
>        attrSize = fScreenInfo.line_length * vScreenInfo.yres;
>        /* Map the attribute window to this user space process */
>        attrDisplay = (unsigned short *) mmap(NULL, attrSize,
>                        PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
>        if (attrDisplay == MAP_FAILED) {
>                qDebug() << "Unable to map attribute window";
>                ::close(fd);
>        return false;
>        }
>
>        /* Fill the window with the new attribute value */
>        if(height < vScreenInfo.yres) {
>                for(unsigned int i = y; i < y + height; i++) {
>                        int start = fScreenInfo.line_length * i + x / 2;
>                        int size = (width + x) / 2 < fScreenInfo.line_length ?
>                                        width / 2 : fScreenInfo.line_length - 
> x / 2;
>                        memset(attrDisplay + start / 2, trans, size);
>                }
>        } else
>                memset(attrDisplay, trans, attrSize);
>
>        munmap(attrDisplay, attrSize);
>        ::close(fd);
>
>        return true;
>
> }
>
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to