2016-03-29 10 views
0

Ich verwende Media Foundation, um ein Video abzuspielen, das ich in Echtzeit bearbeiten muss. Daher muss ich wissen, wann ein Frame für die Präsentation bereit ist, aber der Callback bietet keine solche Nachricht.MediaFoundation - Frame ist fertig?

Meine einzige Idee ist die Bildrate zu überprüfen, dann einen Timer zu setzen und GetPosition zu verwenden, um zu überprüfen, wo ich bin, wo ich das letzte Mal den Timer aufgerufen wurde, aber es muss einen besseren Weg geben als Dies.

Danke!

Matt

Antwort

0

Warum können Sie Ihre eigene IMFStreamSink Instanz im topologoy nicht injizieren, führen Sie die Bearbeitung in Ihrer Implementierung von IMFStreamSink::ProcessSample und Weitergabe der bearbeiteten, was auch immer Ausgangsknoten Sie derzeit verwenden?

Wenn Sie EVR verwenden, können Sie auch einen benutzerdefinierten Moderator erstellen - siehe this Artikel auf MSDN.

+0

Nachdem ich den Tag damit verbracht habe, kann ich mit Sicherheit sagen, dass ich völlig verwirrt bin. Ich bin völlig neu in MediaFoundation, und um es zum Laufen zu bringen, habe ich das Tutorial auf der MSDN-Seite unten benutzt. Ich bin mir nicht sicher, wie ich einen IMF-Stream in das Programm integrieren kann. Es scheint, als ob es seine eigene Art ist, Dinge zu tun, also würde ich das verwerfen und neu anfangen müssen. https://msdn.microsoft.com/en-us/library/windows/desktop/ff728866(v=vs.85).aspx – CodeConfusion

0

Ich fand eine einfache Lösung. Stellen Sie die Wiedergabegeschwindigkeit für die Sitzung ein und erstellen Sie dann eine Präsentationsuhr aus der Sitzung. Stellen Sie einen Timer ein und überprüfen Sie die Präsentationsuhr. Wenn die Zeit abgelaufen ist, die der Abspielgeschwindigkeit für einen Tick entspricht, wird ein neuer Frame angezeigt.