Project

General

Profile

Actions

Support Request #3368

closed

How does ADTF handles device timestamps ?

Added by hidden almost 6 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Customer:
AUDI
Department:
EF
Requester's Priority:
Low
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Platform:
Windows 7 64bit
Topic:
DeviceTB::Flexray
FAQ Links:

Description

Supportanfrage

Wird Sync2RefTime automatisch auf FlexRay-Streams (ADTF2) während
- Playback mittels Harddisk_Player
- Tools > DAT Exporter > MDF4
angewendet?

Trotz jittriger MediaSample-Time im DAT-File scheinen im Playback/Export die Zeitstempel wesentlich "glatter" zu sein.

Lösung

Bsp: Flexray

Sample
> Ein Sample besteht aus mehreren Frames/PDUs
> Sample hat einen Zeitstempel (Transmit)
-> Bei jedem Frame/PDU/Signal gibt es somit einen leicht versetzten Zeitstempel anhand der Device Time, synchronisiert auf die ADTF Stream Time (=Media Sample)

CSV Export:
-> Exportiert jedes Sample und dessen Zeitstempel anhand der Media Description -> tFlexayData

MDF Export:
-> Exportiert alle Signale die in einem Sample hinterlegt sind -> anhand des fibex files

Die Normierung im Export hat nichts mit Sync2Ref zu tun.
Sync2Ref bedeutet, ich habe unterschiedliche Devices mit jeweils eigener Zeitgeber.
Um nun alle Daten im ADTF auf eine Zeitbasis zu harmonisieren, nutzt du Sync2Ref auf die StreamTime in ADTF (Laufzeit).
Ein Bsp. findest du in der Device Toolbox, dort macht das Demo Device.

Im Export hast du keine Stream Time, aber die PDUs/Frames/Signale haben nicht den gleichen Zeitstempel (den des Media Samples), denn sie kommen ja nicht zeitgleich.
Würdest du normal exportieren (CSV Exporter, Media Sample basiert), dann nimmst du den Zeitstempel des Media Samples (das müsste imho je nach Setup den ersten, letzten oder Mittelwert aller Signale eines Samples entsprechen).
Um nun die genauen Zeitstempel der Signale zu bekommen, werden sie gegen den Zeitstempel des Media Samples berechnet, wenn du so willst, dahingehend geglättet.

tResult cMDFFlexraySampleSink::Process(adtf::IMediaSample* pMediaSample, tTimeStamp nChunkTime)
{
    // [...]

    for (cFlexRayFrameVector::cIterator it = oFrameVector.GetFirst();  it.IsValid(); ++it)
    {
        const tFlexRayData* pData = *it;
        switch (pData->nTag)
        {
            case tFlexRayData::FR_TAG_CYCLESTART:
                break;

            case tFlexRayData::FR_TAG_FRAME:
                Process_Frame(pMediaSample->GetTime() + pData->nTimeStamp - nHWTime, 
                              pData->sFrame.nFlags, pData->sFrame.nChannel, 
                              pData->sFrame.nCycleCount, pData->sFrame.nSlot, 
                              pData->sFrame.nPayloadLength, pData->sFrame.aData);
                break;

            case tFlexRayData::FR_TAG_PDU:
                Process_PDU(pMediaSample->GetTime() + pData->nTimeStamp - nHWTime, 
                            pData->sPDU.nPDUID, pData->sPDU.nChannel, 0, 0,
                            pData->sPDU.nPayloadLength, pData->sPDU.aData);
                break;

            default:
                break;
        }
    }

    // [...]
}

Das hat aber nichts mit dem Sync2Ref unterschiedlicher Zeitgeber zu tun, denn diese Signale sind schon gesynct.

Wenn dein Sample Aufbau so wäre, dass nur ein Signal anliegt, dann könntest du dir diesen Schritt sparen.
Demnach hilft dir da der EB Service auch nicht weiter, da du keine Laufzeit hast.

Um mit den EB FR Sample Typ MDF zu exportieren, müsstest du eine Exporter Sample Sink schreiben, die genau das gleiche macht wie die der Device TB, nur eben mit dem EB Datentyp umgehen kann.
Alternativ könntest du diesen Datentyp einfach nur Mappen (gibt es da nicht sogar einen Converter Filter ?), dann kannst du den MDF-Exporter weiter nutzen.

Actions

Also available in: Atom PDF