Qt phonon & qpixmap :: grabwidget
Вопрос
Я работаю на пару дней на захватывающих кадрах от объекта фононного медиа. Моя цель - захватить кадры на некоторых интервале, указанном пользователем. Я в первую очередь попытался реализовать слот для сигнала галочка, связанного с Phonon :: MediaObject. Однако из-за того, что сигнал галочка выделяется при первой возможности, иногда может быть небольшое разнообразие во временной разницу ... не так много, что это не работоспособное решение, но все же я продолжал дальше и попробовал комбинацию искать и Grabwidget Этот поиск требует некоторого времени для завершения и не имеет никакого способа уведомить приложение, когда видео снова работает нормально, это вызывает код как
obj->seek(i*m_grabInterval);
QPixmap image = QPixmap::grabWidget(m_ui.videoPlayer);
.
Чтобы сохранить черное изображение 90% времени, но правильно захватить кадр оставшиеся времена.
Мой вопрос в том, что есть что-то, что я могу сделать с любыми из этих двух идей, которые заставят их лучше для меня работать, или я сильно лаю не на том дереве, и есть гораздо более очевидно, что я полностью пропустил? .
Спасибо заранее!
Решение
Вы лаете неправильное дерево, Это следуетРабота, создайте QIMAGE с помощью Snapshot () Func с фонона :: Videowidget
Редактировать
Я исследовал этот вопрос дальше.Функция Snapshot даже не реализована.Вот реализация в фононном 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 Backends.Они еще не поддерживают функциональность снимков с Phonon 4.4.Поэтому на время, когда я буду искать другие способы создания снимков.