2016-03-30 21 views
2

Ich habe eine Pipeline, die Daten von der Webcam aufnimmt und verarbeitet.Speicherlecks während der Verwendung von gstbuffer

Für die Verarbeitung Ich brauche diesen Puffer zu appsink zu ziehen und schieben es in die Rohrleitung durch appsrc Element verwendet.

Während ich drängte hatte ich gst_buffer_new_wrapped Funktion verwendet.

Dann wird ein neuer Puffer jedes Mal zugewiesen, wenn ich die Daten schiebe. Aber wie man diese Erinnerung befreit, ist das Problem.

Ich hatte versucht gst_buffer_unref (Puffer);

Dann unten Fehler erhalten.

Error in `./uuHiesSoaServer': free(): invalid pointer: 0x00007fddf52f6000 

Ich hatte die Daten in einem unsigned char-Zeiger und dann in einem gstbuffer basierend auf der Größe gewickelt.

Jetzt, wie man den zugeteilten Speicher freigibt?

Ich hatte obige Funktion verwendet, um Daten in Source (appsrc) zu schieben.

Diese Funktion ruft ständig einen separaten Thread auf.

Wenn Daten, die ihm zur Verfügung, dann wird der Thread-Funktion unter Verwendung eines Puffers

gst_buffer_new_wrapped((void *)data, Size); 

Bei der Überprüfung in valgrind, für Speicherverluste erzeugen, oberhalb der Linie als Leck gezeigt wurde.

Wie löst man das?

Antwort

1

Wie schieben Sie den Puffer in appsrc?

Wenn Sie gst_app_src_push_buffer Funktion Ich denke, Sie nicht zu freien Ressourcen haben, weil gst_app_src_push_buffer den Puffer besitzen wird (was bedeutet, es befreit sie auch) prüfen this example

Wenn Sie need-Daten Rückruf verwenden Sie benötigen freie Daten - überprüfen this example

HTH

+0

Prüfung der Frage einmal, ich aktualisiere es –

+0

@PrasanthKumarArisetti haben Sie das zweite Beispiel über Bedarf-Daten in meiner Antwort überprüft? sie benutzen genau die selbe methode wie du;) – nayana

+0

danke dafür. jetzt funktioniert es gut. –

Verwandte Themen