Developer Documentation
RAVL, Recognition And Vision Library
USER HOME PAGE CLASS LIST CONTENTS
Ravl - Core - Data Processing - Split


Spliting streams

Sometimes we wish to process some data in several ways, hence we wish to split the data stream into several independent channels. We can do this using the `Split' classes. This can be done on both input, with DPSplitIC<> and output streams with DPSplitOC<>, Figures 8 and 9 show these respectively. There are advantages in splitting an input stream as it allows each channel to process data independently. If one channel runs faster than the others the data will be read from the input and will be queued for processing on all the other channels. Data is read from the input only when there is no other data queue on the requesting channel.

Figure 8:Input split.
isplit.eps
Figure 9:Output split.
osplit.eps

Following is an example using the input split class. The input stream is processed by two independant piplines, and the output is sent to different files. Figure 10 shows the structure generated by this code fragment. `DPEventSetC' will be explained later, in Section Ravl.Core.Data_Processing.Events

DPEventSetC es ;
DPSplitIC<RealT> split;

es += DPIFileC<RealT>("in.dat") » split » DPOffsetScale(2.0,2.0) » DPRunningAverage(1.0,5) »= DPOFileC<RealT>("out.dat");
es += split » DPOffsetScale(2.0,2.0) »=
DPOFileC<RealT> ("out2.dat");
es.Wait();

Figure 10: Example of spliting an input.
ex_isplit.eps

Normal classes:

 DPSplitOC Output port Splitter handle.

Normal functions:

 operator >>(DPSplitOC &,const DPOPortC &)
 operator >>(DPOPortC &,DPSplitOC &)

Develop classes:

 DPSplitOBodyC Output port splitter body
Maintainer:Charles Galambos, Documentation by CxxDoc: Tue Aug 13 10:00:48 2002