• 11780阅读
  • 5回复

[提问]QT显示YUV格式的视频 [复制链接]

上一主题 下一主题
离线lihuayu
 
只看楼主 倒序阅读 楼主  发表于: 2011-10-26
各位大大们,最近遇到一个让人伤心的问题。我参考ffplay对264文件解码,然后用QT界面将解码后的视频文件播放出来。因为ffplay中用的是SDL显示视频,所以我想将SDL窗口嵌入到QT的视频播放窗口中去。通过搜索网上的信息,用如下代码将SDL窗口嵌入到QT窗口中了
    sprintf(variable, "SDL_WINDOWID=0x%lx", videoWidget->winId());
    #else
    sprintf(variable, "SDL_WINDOWID=0x%lx", videoWidget->winId());
    #endif
    printf("SDL_WINDOWID = %s \n",variable);
    SDL_putenv(variable);
但是新的问题出现了,点击播放后,启动解码播放函数,视频播放,但是被QT界面遮盖了,如下图,
可以看到,视频是在QT的控件后面播放出来了。并且此时,QT界面上的各个按钮都不能用了。

我该怎么办才能让视频在QT界面正常播放呢?或者不用嵌入的方法,单纯用QT的图像刷新显示?这样又该怎么做呢?

说的比较啰嗦,望各位不吝赐教,帮助小妹解决这个问题。谢谢了。
离线uidab

只看该作者 1楼 发表于: 2011-10-26
回 楼主(lihuayu) 的帖子
按照你的Widget控件大小进行一下缩放啊!!!
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线lihuayu
只看该作者 2楼 发表于: 2011-10-26
回 1楼(uidab) 的帖子

上面这个图和程序对应错了
应该是这样:
当 sprintf(variable, "SDL_WINDOWID=0x%lx", videoWidget->winId());
    #else
    sprintf(variable, "SDL_WINDOWID=0x%lx", this->winId());
    #endif
    printf("SDL_WINDOWID = %s \n",variable);
    SDL_putenv(variable);时,出现下图的情况
[attachment=6926]
当是sprintf(variable, "SDL_WINDOWID=0x%lx", videoWidget->winId());
    #else
    sprintf(variable, "SDL_WINDOWID=0x%lx", videoWidget->winId());
    #endif
    printf("SDL_WINDOWID = %s \n",variable);
    SDL_putenv(variable);时,出现下图的情况

[attachment=6927]
这种情况的大小是合适的,由图下方的信息可以看出,视频在播放,只是被videoWidget窗口给遮挡住了。。。
离线lihuayu
只看该作者 3楼 发表于: 2011-10-26
回 1楼(uidab) 的帖子
this->winID();对应的是这个图
videoWidget->winID();对应的是这个图
离线uidab

只看该作者 4楼 发表于: 2011-10-26
回 3楼(lihuayu) 的帖子
这个问题没遇到过,应该是SDL的窗口在前才正常!你看看是不是其他设置的问题。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线昨夜星空
只看该作者 5楼 发表于: 2012-01-05
快速回复
限100 字节
 
上一个 下一个