hesperuss 发表于 2006-4-13 14:59:26

如何显示视频图像(请各位大虾帮忙)

鄙人做毕设 需要用gtk编写摄像头界面 并且显示视频图像出来

现在界面大体没有问题,关键想请教各位大虾 如何编写回调函数 显示视频图像
摄像头捕捉的动态图像如何才能显示出来



万分感谢 麻烦帮我解决这个问题

hesperuss 发表于 2006-4-14 14:49:45

急啊 ...各位

懂得密一下啦....

mozilla 发表于 2006-4-14 23:53:18

记得以前写过一个例子,周一给你贴上来。

hesperuss 发表于 2006-4-17 09:15:56

mozilla,万分感谢斑竹 :-D

mozilla 发表于 2006-4-17 13:09:41


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <linux/videodev.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xvlib.h>


#define YUV420P_SIZE 115200
#define RGB_SIZE 230400
Display* display;
Window win;
GC gc;

int create_win(int x,int y,int width,int height)
{

        display = XOpenDisplay(NULL);
        if (display == NULL) {
          printf("cannot open display\n");
          return -1;
        }

        win = XCreateSimpleWindow(display, RootWindow(display, 0),
                        x, y, width, height, 2,
                        WhitePixel(display, 0),
                        BlackPixel(display, 0));

        gc=XCreateGC(display, win, 0, NULL);
        XSelectInput(display,win,KeyPressMask|StructureNotifyMask);
        XMapWindow(display, win);
        XMoveWindow(display,win,x,y);
        XSync(display, False);
}

XvImage *create_XvImage(Display *dsp,Window window,void *imgdata,XvPortID *xvport)
{
    int i,num;
    XvImage *image;
    unsigned int nadap=0;
    XvAdaptorInfo *adaps;
    XvImageFormatValues *format;
    XvQueryAdaptors(dsp,window,&nadap,&adaps);

   
    for(i=0;i<nadap;i++)
    {
        if((adaps[i].type & XvInputMask) && (adaps[i].type & XvImageMask))
        {
          *xvport=adaps[i].base_id;
          break;
        }
    }
    if(*xvport < 0)
    {
        printf("Xv Port failed\n");
        return NULL;
    }

    format=XvListImageFormats(dsp,*xvport,&num);
    if(!format)
    {
        printf("XvListImageFormats failed\n");
        return NULL;
    }
    image=XvCreateImage(dsp,*xvport,format[1].id,imgdata,320,240);
    return image;
}

Bool predicate(Display *dsp,XEvent *event,XPointer arg)
{
    return True;
}
main()
{
    void *imgdata=NULL;
    XvImage *image;
    XvPortID xvport;
    int fd;

    int imgsize,i;
    XEvent xevent;
    fd = open("/dev/video0",O_RDWR);
    if(!fd)
        return;
    create_win(50,50,320,240);
    imgsize=YUV420P_SIZE;
    imgdata=malloc(imgsize);
    image=create_XvImage(display,win,imgdata,&xvport);
    if(!image)
          return;
    while(1)
    {
        XCheckIfEvent(display,&xevent,predicate,NULL);
        if(xevent.type==KeyPress)
        {
          xevent.type=0;
          break;
        }
        read(fd,imgdata,imgsize);
        XvPutImage(display,xvport,win,gc,image,0,0,320,240,0,0,320,240);
    }
failed:
    XCloseDisplay(display);
    close(fd);
}

hesperuss 发表于 2006-4-17 15:51:55

哈 万分感谢


可能还有些问题需要请教斑竹您等我详细阅读完这段代码后

再发信告诉您

希望您不吝赐教

BOoRFGOnZ 发表于 2006-4-18 16:11:16

这个怎么编译?

mozilla 发表于 2006-4-18 17:53:48

gcc test.c -o test -I/usr/X11R6/include/ -L/usr/X11R6/lib -lX11 -lXext
缺什么库就加上

BOoRFGOnZ 发表于 2006-4-18 18:59:45

:mrgreen:

elichen9 发表于 2009-4-24 09:22:29

请教mozilla,为什么我播放出来的图像是绿色的?
还有XV怎么跟GTK联系起来?

elichen9 发表于 2009-4-28 16:56:42

真可怜啊,没有人救我啊~~~~~~

jiangtao9999 发表于 2009-4-28 18:18:06

你顶老贴,当然没人帮你。

elichen9 发表于 2009-4-29 09:42:41

帖子老,但问题多啊~~~~

mozilla 发表于 2009-6-12 20:10:55

千年老帖都被顶上来了。
好长时间没来这里了,呵呵。

gdk有接口可以拿到窗口句柄,具体看看gdkx.h这个头文件吧,已经很长时间没摸这玩意了。
页: [1]
查看完整版本: 如何显示视频图像(请各位大虾帮忙)