Support Request #14520
closedHow to send byte arrays / memory buffers within samples
Description
Supportanfrage
Um Byte Arrays über pins zu verschicken habe ich folgende Implementierungsbeispiele gefunden.
https://support.digitalwerk.net/adtf/v3/adtf_html/page_streaming_architecture.html#sec_sample
Was ist der Unterschied zwischen folgenden Beispielen
"Set a memory buffer to the sample"
"Write a memory buffer to the samples buffer"
Aus Quellcode und Beschreibung ist es mir direkt nicht ersichtlich.
Lösung
Beide Möglichkeiten machen am Ende genau dasselbe, es gibt quasi keinen Unterschied. Der einzige Unterschied besteht darin, dass- mit "Set a memory buffer to the sample" wird die Methode ISample::Set gerufen (daher das "Set a memory buffer... ")
- mit Write a memory buffer to the samples Buffer wird erst der Buffer "geholt" mit ISample::WriteLock und dann mit ISampleBuffer::Write beschrieben (daher der Name "Write a memory buffer...")
Das ISample::Set macht in seiner Umsetzung genau dasselbe intern, d.h. es holt sich den Sample Buffer, Macht einen WriteLock darauf, Kopiert den Memory Blcok mit Write und released den Lock wieder. Solange ein WriteLock auf dem SampleBuffer ist, kann kein ReadLock gemacht werden. Der SampleBuffer ist somit gegen ein gleichzeitiges beschreiben und lesen abgesichert.
Grund für die Absicherung ist, dass ISampleBuffer ein Interface ist, wie ISample auch und es verschiedene Implementierungen geben kann (normalerweise verwenden alle immer die Default-Implemetierung, aber man weiß ja nie).