Qt Phonon&QpixMap :: GrabWidget
質問
フォノンメディアオブジェクトからフレームをつかむ上で数日間働いています。私の目的は、ユーザーによって指定されたいくつかの間隔でフレームをキャプチャすることです。私は最初にPhonon :: MediaObjectに関連付けられているティック信号のスロットを実装しようとしました。しかし、目盛り信号は最初の機会で放出されるので、時々時間の違いではほとんど品種があることがあります...それほど違いはありませんが、それでも私はさらに調査し、私はさらに調査し、シークとGrabwidgetの組み合わせを試しましたそのような時間が完了するまでに時間がかかり、ビデオが再び元気に実行されているときにアプリケーションに通知する方法はありません。これによりコードが発生します。
obj->seek(i*m_grabInterval);
QPixmap image = QPixmap::grabWidget(m_ui.videoPlayer);
.
黒い画像を90%の時間を節約するが、フレームを残りの時間に正しくつかみます。
私の質問は、私がそれらを私のために良く働くようにするこれら2つのアイデアのどちらかについてできることがあります、それとも私は間違った木をひどく吠えていて、私が完全に逃したのはずっと明白なことがあるでしょうか?
事前にありがとう!
解決
あなたは間違ったツリーを吠えています、この作業、Phonon :: VideoWidget からSnapshot()FUNCを使用して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
}
IFCES4とは、次のようにPhonon 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からのスナップショット機能はまだサポートされていません。だから蜂のために私はスナップショットを作成するための他の方法を調べます。