2012-01-23 19 views
3

私はフォノンメディアオブジェクトからフレームをつかんで数日間働いていました。私の目的は、ユーザーが指定したある間隔でフレームをキャプチャすることです。まずPhonon :: MediaObjectに関連するティック信号のスロットを実装しようとしました。しかし、最初の機会にダニ信号が放出されるため、時差に多少のばらつきがあるかもしれません...それほど実用的な解決策ではありませんが、さらに調査を行い、seekとgrabWidgetの組み合わせを試みましたが、シーク完了までに多少時間がかかり、映像が正常に再び動作しているアプリケーションに通知する方法を持っていない、これは時間の90%を黒画像を保存するためにQt Phonon&QPixmap :: GrabWidget

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

のようなコードが発生しますが、正しくその残りの時間フレームをつかむ。

私の質問では、これらの2つのアイデアのうち、私のためにもっとうまくいくようにすることができますか、間違ったツリーを大きく吠えています。

ありがとうございます!

答えて

2

あなたは間違っている木、thisが動作するはずアップ吠えている、フォノンからQImageのスナップショットを使用して()FUNCを作成:: VideoWidget

編集

私はさらに、この問題を調査しました。スナップショット機能は実装されていません。 (videowidgetinterface.hから)次のように

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がVideoWidgetInterface44指すフォノン4.4のために定義される:

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 

私も見ていたここでフォノンのsrc videowidget.cppに実装されますgstreamerおよびvlcバックエンドの実装phonon 4.4のスナップショット機能はまだサポートされていません。ですから、私はスナップショットを作成する他の方法を検討しています。

+0

私もこれを試しました[http://developer.qt.nokia.com/forums/viewthread/2487]と[this](https://bugreports.qt.nokia.com/browse/QTBUG) -21491)は、私が唯一苦労しているわけではないことを示しているようです。 qt ffmpegラッパーを使ってみることにしました。同様のピクルスの人々のために報告します。 – Sixx

+0

お返事ありがとうございます:) – Sixx

関連する問題