2012-01-23 3 views
3

Я работаю пару дней на захвате кадров из фононного медиа-объекта. Моя цель - захватить кадры с определенным интервалом, заданным пользователем. Сначала я попытался реализовать слот для сигнала тика, связанного с Phonon :: MediaObject. Однако из-за того, что сигнал галочки испускается при первой возможности, иногда может быть небольшое разнообразие в разнице во времени ... не так много, что это не работоспособное решение, но все же я исследовал дальше и попробовал комбинацию поиска и grabWidget, но он появляется что искать требуется некоторое время, чтобы закончить и не имеет возможности сообщить приложению, когда видео работает нормально снова, это вызывает код какQt Phonon & QPixmap :: GrabWidget

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

спасти из черного изображения на 90% времени, но правильно возьмите кадр оставшиеся моменты.

Мой вопрос: есть ли что-нибудь, что я могу сделать с любой из этих двух идей, которые сделают их лучше для меня, или я сильно лаю по неправильному дереву, и есть гораздо более очевидное, что я пропустил полностью?

Заранее благодарен!

ответ

2

Вы ложное дерево, this должен работать, создать QImage, используя снимок() FUNC из Phonon :: VideoWidget

редактировать

Я исследовал этот вопрос дальше. Функция моментального снимка даже не реализована. Вот реализация в фононной 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 относится к VideoWidgetInterface44, который определяется для фононного 4.4 следующим образом (из 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. Так что пока я буду смотреть на другие способы создания снимков.

+0

Я также пробовал это, [Это] (http://developer.qt.nokia.com/forums/viewthread/2487) и [это] (https://bugreports.qt.nokia.com/browse/QTBUG -21491), кажется, указывают, что я не единственный, кто борется. Решив взглянуть на использование обертки qt ffmpeg, отчитается о людях в похожих соленых огурцах. – Sixx

+0

Большое спасибо за ответ :) – Sixx