Support Request #2764
closedMSF_REFERENCE
Description
Supportanfrage:
Hallo,
Jan möchte Kopiervorgänge sparen und externen Speicher in einem MediaSample referenzieren.
Uns ist bewusst, dass das seine Gefahren birgt, aber wir wollen es dennoch versuchen ;)
Problem ist allerdings, dass wir von außen nicht mitbekommen, wann der Referenz-Counter des MediaSamples auf 0 geht und somit das MediaSample zerstört wird. Das wäre der Zeitpunkt, an dem wir auch den externen Speicher recyclen können.
Idee für einen Workaround:
· Eigene Implementierung eines MediaSamples, welches einen CallBack anbietet. Problem: Neue Klasse müsste in der Runtime erst registriert werden.
Habt ihr eine Alternative zu unserem Workaround?
Lösung:
Auszug aus der ADTF3 Doku:
/** * Sample that uses samples buffers that do not copy the data, but only keep a reference to it. * Use this with EXTREME care!! Keep these samples in a * \ref adtf::ucom::ant::weak_object_ptr in order to be able to check if they no longer exist * before you manipulate the data again. */
class cReferenceSample: public cSample
Dort gibt es das Beispiel cDemoSampleDataReferenceSource, mit einem weak_object_ptr kann überprüft werden, ob das Sample noch in Verwendung ist.
zu ADTF 2:
Mangels weak_object_ptr in ADTF2 würde man nicht um eine eigene Implementierung eines MediaSamples herumkommen
Workaround: Für speziellen Anwendungsfall hinreichend großen Ringspeicher nutzen, um sicherzustellen, dass überschriebener Speicher nicht mehr genutzt wird.