Project

General

Profile

Actions

Support Request #12339

closed

Does ADTF delete my reference to a Sample (or is it still valid) ?

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

Status:
Closed
Priority:
Normal
Customer:
AUDI
Department:
EF
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
No Customer Feedback
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::Common
FAQ Links:

Description

Supportanfrage

Ich lese in der Process() Methode eines Filters die MediaSamples des InputPins wie folgt aus:

object_ptr<const ISample> pInSample;
while (IS_OK(pReader->GetNextSample(pInSample)))
{...}

Der Filter soll einige der MediaSamples auch über das Ende der Process() hinaus halten, damit später auf den MediaSample-Buffer zugegriffen werden kann.
Nun frage ich mich, wie ADTF die Speicherverwaltung realisiert bzw. ob ich Gefahr laufe, dass ADTF das Sample frei geben kann, obwohl ich es noch brauche.
Ich gehe davon aus, dass bei pReader->GetNextSample(pInSample) keine Daten kopiert werden, sondern lediglich der Pointer eines bestehenden Samples ausgegeben wird. Wenn ich mir jetzt diesen Pointer / dieses Sample speichere, kann ich dann sicher sein, dass es nicht überschrieben wird, solange ich es halte?

Lösung

Die ucom object pointer (adtf::ucom::object_ptr<>) sind shared pointer. Das heißt, solange du einen hältst, bleibt auch das referenzierte Objekt am Leben.
Und die Streaming Architektur ist so ausgelegt, dass Samples die einmal geschrieben wurden, danach nicht mehr verändert werden. Das heist ein Quell-Filter erzeugt für jedes Datum auch ein neues Sample. Das heißt ein Sample dass du mal bekommen hast, verändert sich nicht mehr und du kannst es solange über den object_ptr aufheben wie du willst.

Actions #1

Updated by hidden over 3 years ago

  • Project changed from Public Support to 11
  • Topic set to ADTF::Common
  • Customer set to AUDI
  • Department set to EF
  • Affected Products ADTF 3.8.0 added
  • Platform Windows 10 64bit added
Actions #2

Updated by hidden over 3 years ago

  • Status changed from New to In Progress
Actions #3

Updated by hidden over 3 years ago

Hi Claudia,

die ucom object pointer (adtf::ucom::object_ptr<>) sind shared pointer. Das heißt, solange du einen hältst, bleibt auch das referenzierte Objekt am Leben.

Grüße,

Martin

Actions #4

Updated by hidden over 3 years ago

Und die Streaming Architektur ist so ausgelegt, dass Samples die einmal geschrieben wurden, danach nicht mehr verändert werden. Das heist ein Quell-Filter erzeugt für jedes Datum auch ein neues Sample. Das heißt ein Sample dass du mal bekommen hast, verändert sich nicht mehr und du kannst es solange über den object_ptr aufheben wie du willst.

Grüße,

Martin

Actions #5

Updated by hidden over 3 years ago

  • Project changed from 11 to Public Support
  • Subject changed from Speicherhaltung MediaSample to Does ADTF delete my reference to a Sample (or is it still valid) ?
  • Description updated (diff)
  • Status changed from In Progress to To Be Closed
  • Private changed from Yes to No
  • Resolution set to No Customer Feedback
Actions #6

Updated by hidden over 2 years ago

  • Status changed from To Be Closed to Closed
Actions

Also available in: Atom PDF