Was kann ich tun, wenn die BufferQueue aufgegeben wurde?
Ich bin mit einer textur anzeigen, die Vorschau der Kamera in meine android-app. Was mir aufgefallen ist, ist jedoch, dass jedes mal meine app wird angehalten, ich bin immer diese Fehlermeldung:
03-18 18:23:44.315: W/BufferQueue(19582): [unnamed-19582-20] cancelBuffer: BufferQueue has been abandoned!
Kann mir jemand sagen was hier Los ist? Wenn meine app hält alles, was ich tun deinitialize alles so onSurfaceTextureDestroyed()
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
return true;
}
InformationsquelleAutor der Frage user2426316 | 2014-03-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun, ist im wesentlichen das, was in der TextureView docsso sollte es funktionieren.
Die Fehlermeldung bedeutet, dass der "Hersteller" - Seite der
BufferQueue
(die Kamera) packte einen Puffer, und versucht nun, die un-grab (übercancelBuffer()
). Doch die "konsument" - Seite (dieSurfaceTexture
) ist Weg. Denn der "Verbraucher" Seite besitzt die Warteschlange, dieBufferQueue
ist als aufgegeben, und es werden keine weiteren Vorgänge möglich sind.Das klingt wie es ist nur ein timing-Problem -- der Produzent versucht zu tun, Vorgänge nach der
SurfaceTexture
zerstört wurde. Das macht keinen Sinn, da man das schließen der Produzent nach unten inonSurfaceTextureDestroyed()
und das ST nicht veröffentlicht, es sei denn, und bis die callback zurücktrue
. (Es könnte interessant sein, um das hinzufügen von log-Meldungen bei start und Ende der callback-Methode, und sehen Sie, wenn der "verlassene" Beschwerde geschieht, bevor oder nachdem Sie. Verwendenlogcat -v threadtime
zu sehen, die thread-IDs.)So, ich bin mir nicht wirklich sicher, warum dies geschieht. Die gute Nachricht ist, dass es sich nicht negativ auf Ihre Anwendung -- der Hersteller wird ordnungsgemäß festgestellt werden, dass die Verbraucher Weg gegangen ist, und sich beschweren, aber nicht Abstürzen. Also es ist laut, aber nicht explody.
Aus Neugier, sehen Sie Nachrichten von Ihrem Gerät, wenn Sie ausführen, "Live-Bild der Kamera (TextureView)" in Grafika? Diese Aktivität ist gerade aus der
TextureView
docs, und ich sehe keine Beschwerden, wenn ich es laufen auf meinem Gerät.(Weitere Informationen über SurfaceTexture und BufferQueue finden hier.)
InformationsquelleAutor der Antwort fadden