Project

General

Profile

Actions

Support Request #10900

closed

Cannot connect several connections on one input pin (Stream Multiplexing)

Added by hidden about 4 years ago. Updated almost 4 years ago.

Status:
Closed
Priority:
Normal
Customer:
VW
Department:
CARMEQ
Requester's Priority:
Normal
Support Level:
3rd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::Common
FAQ Links:

Description

Supportanfrage

ich habe einen Filter, der von beliebig vielen Filtern Daten entgegennehmen kann. Da die Anzahl der angeschlossenen Filter nicht festgelegt werden soll, werden alle Daten an nur einem Pin des Filters empfangen (z.B. Szenario: beliebig viele Sensoren senden Daten über das gleiche Interface und sollen fusioniert werden).

Das Anschließen von mehreren SampleStreams an einen Eingangspin ist derzeit nicht möglich. Ebenso ist das Anschließen von mehreren Ausgangspins an einen SampleStream nicht möglich.

Wie kann das oben beschriebene Verhalten mit ADTF3 realisiert werden. Falls es nicht möglich ist, ist es bereits geplant solch ein Feature in den nächsten ADTF3-Releases einzubauen?

Lösung

so einen Sample Stream wird es nicht geben. Sample Streams bilden nie eine Logik ab. Das braucht's in dem Fall aber.

Was es aber geben wird, ist ein Filter der beliebig viele Eingangspins auf einen Ausgangspin mapped. Der kann sich dann korrekt darum kümmern, dass die Daten wirklich zueinander passen und sich auch um die Trigger kümmern. Darum geht's in dem erwähnten Ticket ACORE-10391.

Wenn ihr jetzt eine Lösung braucht, dann könnt ihr folgendes ausprobieren

#include <adtffiltersdk/adtf_filtersdk.h>

using namespace adtf::util;
using namespace adtf::ucom;
using namespace adtf::base;
using namespace adtf::streaming;
using namespace adtf::filter;

class cStreamMerger: public cFilter
{
public:
    ADTF_CLASS_ID_NAME(cStreamMerger,
                       "stream_merger.filter.adtf.cid",
                       "Stream merger");
public:
    cStreamMerger()
    {
        m_pWriter = CreateOutputPin("output");
    }

    tResult RequestDynamicInputPin(const tChar* strName,
                                   const iobject_ptr<const IStreamType>& pType) override
    {
        CreateInputPin(strName, pType);
        RETURN_NOERROR;
    }

    tResult AcceptType(ISampleReader* /*pReader*/,
                       const iobject_ptr<const IStreamType>& pType) override
    {
        m_pWriter->ChangeType(pType);
        RETURN_NOERROR;
    }

    tResult ProcessInput(ISampleReader* /*pReader*/, const iobject_ptr<const ISample>& pSample) override
    {
        m_pWriter->Write(pSample);
        RETURN_NOERROR;
    }

private:
    ISampleWriter* m_pWriter = nullptr;
};

Wie ihr seht, schert sich der gar nicht um die Typen, das heißt da müsst Ihr dann selber sehr genau drauf schauen, dass das passt.

Actions

Also available in: Atom PDF