Domanda

Ho lavorato per un paio di giorni in grabbando fotogrammi da un oggetto multimediale Phonon. Il mio obiettivo è quello di catturare i fotogrammi ad un certo intervallo specificato dall'utente. Prima ho provato ad implementare uno slot per il segnale di spunta associato a Phonon :: MediaObject. Tuttavia, poiché il segnale di spunta viene emesso alla prima opportunità che a volte può essere una piccola varietà nella differenza di tempo ... non così tanto che non è una soluzione praticabile ma ancora ho studiato ulteriormente e provato una combinazione di ricerca e grabwidget ma appare Quella ricerca richiede un po 'di tempo per completare e non ha alcun modo per avvisare l'applicazione quando il video è di nuovo in funzione, questo causa il codice come

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

Per salvare un'immagine nera del 90% del tempo, ma afferrare correttamente il telaio dei tempi rimanenti.

La mia domanda è che c'è qualcosa che posso fare su una di queste due idee che li farà lavorare meglio per me, o sto abbaiando pesantemente sull'albero sbagliato e c'è molto più ovvio che ho perso completamente? .

Grazie in anticipo!

È stato utile?

Soluzione

stai abbaiando sull'albero sbagliato, dovrebbeLavoro, creare un Qimage utilizzando l'istantanea () Func dal Phonon :: Videowidget

Modifica

Ho studiato ulteriormente questa questione.La funzione Snapshot non è nemmeno implementata.Ecco l'implementazione in 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
}
.

Gli IFACES4 si riferisce a VideoWidgetInterface44 che è definito per Phonon 4.4 come segue (da 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
.

Ho anche guardato le implementazioni di Gstreamer e VLC backend.Non supportano ancora la funzionalità dell'istantanea da Phonon 4.4.Quindi per il tempo di essere esaminerò in altri modi per creare istantanee.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top