Project

General

Profile

Actions

Support Request #14520

closed

How to send byte arrays / memory buffers within samples

Added by hidden almost 3 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Normal
Customer:
BOSCH
Department:
CC-DA/ETV
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::StreamingSDK
FAQ Links:

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).

Actions

Also available in: Atom PDF