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).
Updated by hidden about 3 years ago
- Status changed from New to In Progress
- Private changed from No to Yes
- Topic set to ADTF::StreamingSDK
Updated by hidden about 3 years ago
- Status changed from In Progress to Customer Feedback Required
Hallo Thomas,
Beide Möglichkeiten machen am Ende genau dasselbe, es gibt quasi keinen Unterschied. Der einzige Unterschied besteht darin, dass
(1) mit "Set a memory buffer to the sample" wird die Methode ISample::Set gerufen (daher das "Set a memory buffer... ")
(2) 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...")
Gern ändere ich die Formulierung, wenn das nicht eindeutig und schwer verständlich ist.
Viele Grüße Pierre
Updated by hidden about 3 years ago
Hallo Pierre,
bei dem Beispiel 1 wird kein "WriteLock" auf dem sample durchgeführt wie im Beispiel 2.
Ist es im Beispiel 1 dann nicht notwendig für eine sichere Ausführung ?
Was sind die Gründe für das Ausführen eines WriteLock ?
Gruß Thomas
Updated by hidden about 3 years ago
Hallo Thomas,
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).
Grüße Pierre
Updated by hidden about 3 years ago
Hallo Pierre,
danke. Diese Erklärung hat mir gefehlt.
es macht mich immer ein bisschen vorsichtig / stutzig, wenn in einem Beispiel Elemente enthalten sind und in einem anderen nicht.
Meine Fragen sind beantwortet, von meiner Seite kann das Ticket geschlossen werden.
Gruß Thomas
Updated by hidden about 3 years ago
- Status changed from Customer Feedback Required to To Be Closed
- Resolution set to Solved Issue
Updated by hidden about 3 years ago
- Project changed from 5 to Public Support
- Subject changed from Memory Buffer über Samples verschicken. to How to send byte arrays / memory buffers within samples
- Description updated (diff)
- Private changed from Yes to No