gpt4 book ai didi

c++ - Qt Phonon & QPixmap::GrabWidget

转载 作者:太空狗 更新时间:2023-10-29 21:49:09 25 4
gpt4 key购买 nike

为了从声子媒体对象中抓取帧,我已经工作了几天。我的目标是以用户指定的某个时间间隔捕获帧。我首先尝试为与 Phonon::MediaObject 关联的滴答信号实现一个​​插槽。但是,由于滴答信号是在第一次机会时发出的,有时时差可能会有所不同……并不是说它不是一个可行的解决方案,但我仍然进一步调查并尝试了 seek 和 grabWidget 的组合,但它似乎seek 需要一些时间才能完成,并且当视频再次正常运行时没有任何方法通知应用程序,这会导致类似

的代码
obj->seek(i*m_grabInterval);
QPixmap image = QPixmap::grabWidget(m_ui.videoPlayer);

在 90% 的时间内保存黑色图像,但在剩余时间正确抓取帧。

我的问题是,对于这两个想法中的任何一个,我是否可以做些什么来使它们对我更好地工作,或者我是否在错误的树上狂吠并且我完全错过了一个更明显的想法?

提前致谢!

最佳答案

你找错人了,this应该工作,使用来自 Phonon::VideoWidget 的 snapshot() 函数创建一个 QImage

编辑

我已进一步调查此事。甚至没有实现快照功能。这是声子 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
}

IFACES4 指的是为声子 4.4 定义的 VideoWidgetInterface44,如下所示(来自 videowidgetinterface.h):

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

我还研究了 gstreamer 和 vlc 后端的实现。他们还不支持 phonon 4.4 的快照功能。所以暂时我会研究其他创建快照的方法。

关于c++ - Qt Phonon & QPixmap::GrabWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8973799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com