相关疑难解决方法(0)

通过OpenGL进行图像缩放(KeepAspectRatioByExpanding)

我正在尝试仅使用glTexCoord2f()glVertex2f()实现OpenGL中的图像缩放.

让我解释一下:在加载a QImage并将其发送到gpu后,glTexImage2D()我必须根据Qt的规范执行图像缩放操作.Qt定义了这3个操作(见下图):

在此输入图像描述

我认为这是唯一的方法,因为我的应用程序是一个Qt插件,这个任务需要paint()在类的方法内完成.这项IgnoreAspectRatio操作非常简单,现在正在运作.在KeepAspectRatio最初给了我一些麻烦,但现在它也在努力.不幸的是,KeepAspectRatioByExpanding让我很头疼.

我正在分享到目前为止我所做的事情,感谢您对此问题的帮助:

main.cpp中:

#include "oglWindow.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    oglWindow w;
    w.show();
    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

oglWindow.cpp:

#include "oglWindow.h"
#include "glwidget.h"

#include <QGridLayout>

oglWindow::oglWindow(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    GLWidget *openGL = new GLWidget(this);

    QGridLayout *layout = new QGridLayout;
    setLayout(layout);
}

oglWindow::~oglWindow()
{
}
Run Code Online (Sandbox Code Playgroud)

oglWindow.h:

#ifndef oglWindow_H …
Run Code Online (Sandbox Code Playgroud)

c c++ opengl qt image-scaling

17
推荐指数
2
解决办法
9403
查看次数

解码iPhone GPU上的视频帧

我正在寻找解码iPhone上本地mpeg-4视频帧的最快方法.我只是对每10帧中像素的亮度值感兴趣.我不需要在任何地方渲染视频.

我已经尝试过ffmpeg,AVAssetReader,ImageAssetGenerator,OpenCV和MPMoviePlayer,但它们都太慢了.我能得到的最快速度是2倍(一分钟内扫描2分钟).我想要接近10倍的东西.

假设我上面的尝试没有使用GPU,有没有办法用GPU上运行的东西来实现我的目标?OpenGL似乎主要用于渲染输出,但我已经看到它用作传入视频的过滤器.也许这是一个选择?

提前致谢!

iphone gpgpu opengl-es video-processing ios

15
推荐指数
1
解决办法
6918
查看次数

QMediaPlayer和QVideoWidget表现糟糕

Ubuntu 10.10(Pentium 4 2.80GHz)上尝试使用QtMobility 1.2.0Qt 4.7.4播放视频时,我看到了糟糕的表现.

有趣的是图腾(也使用gstreamer作为后端)和vlc能够在这台机器上播放这些视频,即使分辨率更高(全屏等).

根据顶部,我的应用程序消耗100%的CPU,而图腾和vlc仅消耗约40%.那真是怪了!所以我在下面分享了应用程序的源代码.它使用QMediaPlayerQVideoWidget完成工作.

movie.cpp:

#include <QtGui/QMainWindow>
#include <QtGui>
#include <qmediaplayer.h>
#include <qvideowidget.h>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;

    mainWindow.resize(QSize(1280, 500));

    QMediaPlayer* mplayer = new QMediaPlayer;
    QVideoWidget* vid_widget = new QVideoWidget(&mainWindow);
    vid_widget->setAspectRatioMode(Qt::IgnoreAspectRatio);

    mainWindow.setCentralWidget(vid_widget);

    mplayer->setVideoOutput(vid_widget);
    mplayer->setMedia(QUrl::fromLocalFile(argv[1]));
    mplayer->setVolume(50);
    mplayer->setPlaybackRate(1);
    mplayer->play();

    mainWindow.show();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

movie.pro:

TEMPLATE = app
QT …
Run Code Online (Sandbox Code Playgroud)

c++ video performance qt qt-mobility

13
推荐指数
2
解决办法
5387
查看次数

glPopMatrix()在setup_hardware_state中大喊"不支持的纹理格式"

我正在尝试在Linux的私有视频播放器中进行一些优化以提高性能,因为在CPU上播放MP4文件很重,因为视频帧是用YV12编码的,而OpenGL不提供显示此格式的本机方式.现在有一个代码在CPU上运行,在将图像发送到GPU进行显示之前将YV12转换为RGB,这会消耗100%的CPU处理能力.

我正在研究如何解码YV12帧而无需编写着色器来进行YV12 - > RGB转换.据我所知,一种方法是通过GL_MESA_ycbcr_texture,显然由我的系统支持(报告glxinfo).

在这个Fedora Box中我有一个ATI Technologies Inc RV610视频设备[Radeon HD 2400 PRO],这是一个不错的视频卡.然后,我下载了yuvrect测试并进行了一些更改以替换GL_TEXTURE_RECTANGLE_NV此卡支持的纹理:GL_TEXTURE_RECTANGLE_ARB.

但是,当我执行此修改后的应用程序时,它输出:

The MESA driver reports *unsupported texture format in setup_hardware_state*
Run Code Online (Sandbox Code Playgroud)

我注意到glPopMatrix();Display()回调执行时会出现此错误.现在,这似乎不是我的应用程序中的一个错误,因为我在另一个具有不同视频卡的Fedora盒(同一系统)上运行了完全相同的代码:英特尔公司Sandy Bridge集成图形控制器(rev 09),它的工作原理beatifully.

2个二进制文件之间唯一可见的区别是它们与之链接的库.关于(有问题的)ATI卡ldd报告:

linux-gate.so.1 =>  (0x00da3000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x077bd000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x0783b000)
libglut.so.3 => /usr/lib/libglut.so.3 (0x005a9000)
libGLEW.so.1.5 => /usr/lib/libGLEW.so.1.5 (0x00aa3000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x057e2000)
libm.so.6 => …
Run Code Online (Sandbox Code Playgroud)

c linux opengl textures yuv

6
推荐指数
1
解决办法
623
查看次数