Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt声子&;QPixmap::GrabWidget_C++_Qt_Phonon_Qpixmap - Fatal编程技术网

C++ Qt声子&;QPixmap::GrabWidget

C++ Qt声子&;QPixmap::GrabWidget,c++,qt,phonon,qpixmap,C++,Qt,Phonon,Qpixmap,我已经花了几天的时间从一个声子媒体物体上抓取画面。我的目标是以用户指定的间隔捕获帧。我首先尝试为与Phonon::MediaObject关联的滴答信号实现一个插槽。然而,由于滴答声信号是在第一时间发出的,因此时差有时会有一些变化。。。虽然这不是一个可行的解决方案,但我还是做了进一步的调查,并尝试了seek和grabWidget的组合,但seek似乎需要一些时间才能完成,并且在视频再次正常运行时无法通知应用程序,这会导致类似于 obj->seek(i*m_grabInterval); QPi

我已经花了几天的时间从一个声子媒体物体上抓取画面。我的目标是以用户指定的间隔捕获帧。我首先尝试为与Phonon::MediaObject关联的滴答信号实现一个插槽。然而,由于滴答声信号是在第一时间发出的,因此时差有时会有一些变化。。。虽然这不是一个可行的解决方案,但我还是做了进一步的调查,并尝试了seek和grabWidget的组合,但seek似乎需要一些时间才能完成,并且在视频再次正常运行时无法通知应用程序,这会导致类似于

obj->seek(i*m_grabInterval);
QPixmap image = QPixmap::grabWidget(m_ui.videoPlayer);
在90%的时间内保存黑色图像,但在剩余时间内正确抓取帧

我的问题是,对于这两个想法中的任何一个,我能做些什么来让它们更好地为我工作,还是我在错误的树上大喊大叫,而有一个更明显的我完全错过了


提前谢谢

你选错了树,如果成功,使用Phonon::VideoWidget中的snapshot()函数创建一个QImage

编辑

我已进一步调查此事。快照功能甚至没有实现。以下是phonon src videowidget.cpp中的实现:

QImage VideoWidget::snapshot() const {
    P_D(const VideoWidget);
    ConstIface<IFACES4> iface(d);
    if(iface) return iface->snapshot();
    return QImage(); // TODO not implemented in VideoInterface
}

我还研究了gstreamer和vlc后端的实现。它们还不支持phonon 4.4中的快照功能。因此,目前我将研究其他创建快照的方法

我也试过了,似乎表明我不是唯一一个挣扎的人。决定看看使用qt ffmpeg包装器的情况,将为类似情况的人报告。非常感谢您的回复:)
class VideoWidgetInterface
{

    public:
        virtual ~VideoWidgetInterface() {}
        virtual Phonon::VideoWidget::AspectRatio aspectRatio() const = 0;
        virtual void setAspectRatio(Phonon::VideoWidget::AspectRatio) = 0;
        virtual qreal brightness() const = 0;
        virtual void setBrightness(qreal) = 0;
        virtual Phonon::VideoWidget::ScaleMode scaleMode() const = 0;
        virtual void setScaleMode(Phonon::VideoWidget::ScaleMode) = 0;
        virtual qreal contrast() const = 0;
        virtual void setContrast(qreal) = 0;
        virtual qreal hue() const = 0;
        virtual void setHue(qreal) = 0;
        virtual qreal saturation() const = 0;
        virtual void setSaturation(qreal) = 0;
        virtual QWidget *widget() = 0;
        virtual int overlayCapabilities() const = 0;
        virtual bool createOverlay(QWidget *widget, int type) = 0;
       };

     class VideoWidgetInterface44 : public VideoWidgetInterface
    {
      public:
         virtual QImage snapshot() const = 0;
    };
}

#ifdef PHONON_BACKEND_VERSION_4_4
   namespace Phonon { typedef VideoWidgetInterface44 VideoWidgetInterfaceLatest; }
#else
   namespace Phonon { typedef VideoWidgetInterface VideoWidgetInterfaceLatest; }
#endif