Pregunta

He estado trabajando durante un par de días para agarrar los marcos de un objeto de Medios de Phonon. Mi objetivo es capturar marcos en algún intervalo especificado por el usuario. En primer lugar, intenté implementar una ranura para la señal de garrapata asociada con Phonon :: medicoObject. Sin embargo, debido a que la señal de garrapata se emite en la primera oportunidad, a veces puede haber una pequeña variedad en la diferencia de tiempo ... no tanto que no sea una solución viable, pero aún así lo investigo más y probé una combinación de buscar y agarrewidget, pero aparece que Buscar toma algún tiempo para completar y no tiene ninguna manera de notificar la aplicación cuando el video se está ejecutando de nuevo, esto causa un código como

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

Para salvar una imagen negra 90% del tiempo, pero agarrar correctamente el marco los tiempos restantes.

Mi pregunta es ¿Hay algo que pueda hacer con cualquiera de estas dos ideas que los harán funcionar mejor para mí, o estoy ladrar mucho en el árbol equivocado y hay mucho más obvio que he perdido completamente?

¡Gracias de antemano!

¿Fue útil?

Solución

Estás ladrando el árbol equivocado, este deberíaTrabajo, cree un QImage usando la instantánea () FUNC desde el Phonon :: videowidget

editar

He investigado aún más este asunto.La función de instantánea ni siquiera se implementa.Aquí está la implementación en 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
}

Los iFaces4 se refiere a videowidgetinterface44 que se define para Phonon 4.4 de la siguiente manera (de 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

También he examinado las implementaciones de GSTEAMER y VLC Backends.No admiten la funcionalidad de instantáneas de Phonon 4.4 todavía.Así que, por el momento, estaré investigando otras formas de crear instantáneas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top