Commit ba8fffaf authored by Yann Renard's avatar Yann Renard
Browse files

documentation :

 + added documentation for several boxes


git-svn-id: svn://scm.gforge.inria.fr/svn/openvibe@1703 c330d7e9-fc0c-0410-a5b3-fd85c6f5aa8f
parent 7d154de4
/**
* \page BoxAlgorithm_ClassifierProcessor Classifier processor
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Description|
The <em>Classifier Processor</em> box is a generic box for classification purpose. It works
in cunjunction with the \ref Doc_BoxAlgorithm_ClassifierTrainer box.
This box' role is to expose a generic interface to the rest of the BCI pipelines. The tasks
specific to a given classifier are forwarded to one of the registered \c OVTK_TypeId_ClassifierAlgorithm
algorithms. The behavior is simple, at initialization phase, the classification algorithm is initialized
and its configuration is loaded from the configuration file. Then each time this box receives a new
feature vector, it is forwarded to the classification algorithm that classifies it. The box gets the algorithm
status and the actual class value and translates this information to its output. The class is sent in the form of
a stimulation and the algorithm status is sent in the form a streamed matrix. The stimulation can be generically
interpreted by the rest of the pipeline but it is important to understand that each classification algorithm is
free to report whatever it wants in its "status matrix". Consequently, the use of this output stream will be
depedendent on the choosen classification algorithm. For example, the LDA classifier sends the hyperplane distance
value as its status.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Inputs|
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Inputs|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Input1|
This input should be connected to the feature vectors to classify. Each time a new feature vector arrives,
a classification process will be triggered. Consequently, a classification stimulation will be sent on the
first output of this box.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Input1|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Outputs|
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Outputs|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Output1|
This output will contain the classification stimulations. Each time a new feature vector arrives to this box,
a new classification process is triggered, resuling int the generation of the corresponding class stimulation.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Output1|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Output2|
This output reflects the classification algorithm status in the form of a matrix of value. The content of this
matrix is dependent of the choosen classification algorithm. For example, the LDA classifier sends the hyperplane
distance as its status. Given that this value is dependent of the choosen algorithm, you should be very carefull
with the use of this output stream. Unexepected behavior may (will) occur when changing the classifier.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Output2|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Settings|
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Settings|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Setting1|
The first setting of this box is the classifier to use. You have to choose the same classifier as the one you used
during the training phase with the \ref Doc_BoxAlgorithm_ClassifierTrainer box.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Setting1|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Setting2|
This setting points to the configuration file of the algorithm. This configuration file is generally generated from the
\ref Doc_BoxAlgorithm_ClassifierTrainer box. Its syntax depends on the selected algorithm.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Setting2|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Setting3|
For classification algorithms that support rejection, you can choose a stimulation that reflects the feature vectore
could not be classified.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Setting3|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Setting4|
This is the stimulation to send when the classifier algorithm detects a class-1 feature vector
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Setting4|
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Setting5|
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Setting5|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Examples|
This box is used in BCI pipelines in order to classify cerebral activity states. For a detailed scenario using this
box and its associated \ref Doc_BoxAlgorithm_ClassifierTrainer, please see the <b>motor imagary</b>
BCI scenario in the sample scenarios.
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierProcessor_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_ClassifierProcessor_Miscellaneous|
*/
/**
* \page BoxAlgorithm_ClassifierTrainer Classifier trainer
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Description|
The <em>Classifier Trainer</em> box is a generic box for classification training purpose. It works
in cunjunction with the \ref Doc_BoxAlgorithm_ClassifierProcessor box.
This box' role is to expose a generic interface to the rest of the BCI pipelines. The tasks
specific to a given classifier are forwarded to one of the registered \c OVTK_TypeId_ClassifierAlgorithm
algorithms. The behavior is simple, the box collects a number of feature vectors. Those feature vectors
are labelled depending on the input they arrive on. When a specific stimulation arrives, a training
process is triggered. This process can take some time so this box should be used offline. Depending on the
settings you enter, you will be able to perform a k-fold test in order to train a better classifier. When
this training stimulation is received, the box requests the selected classification algorithm to generate
a configuration file that will be useable online by the \ref Doc_BoxAlgorithm_ClassifierProcessor box.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Inputs|
This box can have a variable number of inputs. If you need more than two classes, feel free to add more
inputs and to use a classifier algorithm able to classify more than two classes.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Inputs|
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Input1|
The first input receives a stimulation stream. Only one stimulation of this stream is important, the one
that triggers the training process. When this stimulation is received, all the feature vectors are labelled
and sent to the classification algorithm. The training is triggered and executed. Then the classification
algorithm generates a configuration file that will be used online by the \ref Doc_BoxAlgorithm_ClassifierProcessor box.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Input1|
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Input2|
This input receives the feature vector for the first class.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Input2|
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Input3|
This input receives the feature vector for the second class.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Input3|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Settings|
The number of settings of this box can vary depending on the classification algorithm you choose. Such algorithm
could have specific input OpenViBE::Kernel::IParameter objects (see \ref OpenViBE::Kernel::IAlgorithmProxy for details). If
the type of those parameters is simple enough to be handled in the GUI, then additional settings will be added to this box.
For this to be applied, you will have to close & reopen the settings configuration dialog after the actual classification
algorithm is choosen. Supported parameter types are : Integers, Floats, Enumeations, Booleans. The documentation for those
parameters can not be done in this page because it is impossible to know at this time what classifier thus what hyper
parameters you will have available. This will depend on the classification algorihtms that are be implemented in OpenViBE.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Settings|
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Setting1|
The first setting of this box is the classifier to use. You can choose any registered \c OVTK_TypeId_ClassifierAlgorithm
algorithm you want.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Setting1|
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Setting2|
This setting points to the configuration file where to save the result of the training for later online use. This
configuration file is used by the \ref Doc_BoxAlgorithm_ClassifierProcesor box. Its syntax
depends on the selected algorithm.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Setting2|
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Setting3|
This is the stimualation to consider to trigger the training process.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Setting3|
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Setting4|
If you want to perform a k-fold test, you should enter something else than 0 or 1 here. A k-fold test generally allows
better classification rates. The idea is to divide the set of feature vectors in a number of partitions. The classification
algorithm is trained on some of the partitions and its accuracy is tested on the others. The classifier with the best results
is selected as the trained classifier. See the miscellaneous section for details on how the k-fold test is done in this box.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Setting4|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Examples|
This box is used in BCI pipelines in order to classify cerebral activity states. For a detailed scenario using this
box and its associated \ref Doc_BoxAlgorithm_ClassifierProcessor, please see the <b>motor imagary</b>
BCI scenario in the sample scenarios.
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_ClassifierTrainer_Miscellaneous|
In this section, we will detail how the k-fold test is implemented in this box. For the k-fold test to be performed, you
have to choose more than 1 partition in the related settings. Suppose you chose \c n partitions. Then when trigger stimulation
is received, the feature vector set is splitted in \c n consecutive segments. The classification algorithm is trained on
\c n-1 of those segments and tested on the last one. This is performed for each segment. Then the classifier with the
best accuracy is choosen.
For example, suppose you have 5 parititions of feature vectors (\c FVs)
\verbatim
+------+ +------+ +------+ +------+ +------+
| FVs1 | | FVs2 | | FVs3 | | FVs4 | | FVs5 |
+------+ +------+ +------+ +------+ +------+
\endverbatim
For the first training, a feature vector set is built form the \c FVs2, \c FVs3, \c FVs4, \c FVs5. The classifier algorithm
is trained on this feature vector set. Then the classifier is tested on the \c FVs1 :
\verbatim
+------+ +---------------------------------+
| FVs1 | | Training Feature Vector Set 1 |
+------+ +---------------------------------+
\endverbatim
Then, a feature vector set is built form the \c FVs1, \c FVs3, \c FVs4, \c FVs5. The classifier algorithm
is trained on this feature vector set. Then the classifier is tested on the \c FVs2 :
\verbatim
+------+ +------+ +------------------------+
|Traini| | FVs2 | |ng Feature Vector Set 2 |
+------+ +------+ +------------------------+
\endverbatim
The same process if performed on all the partitions :
\verbatim
+---------------+ +------+ +---------------+
|Training Featur| | FVs3 | |e Vector Set 3 |
+---------------+ +------+ +---------------+
+------------------------+ +------+ +------+
|Training Feature Vector | | FVs4 | |Set 4 |
+------------------------+ +------+ +------+
+---------------------------------+ +------+
| Training Feature Vector Set 5 | | FVs5 |
+---------------------------------+ +------+
\endverbatim
Important things to consider :
- The more partitions you have, the more feature vector you have in your training sets... and the less examples you'll have to
test on. This means that the result of the test will probably be less reliable. But you will be able to choose the best classifier
among a more consequent list.
- The less partitions you have, the less feature vector you have in your training sets... and the more examples you'll have to
test on. This means that the online use of the trained classifier is more likely to be consistent with the trained classifier accuracy.
In conclusion, be carefull when choosing this k-fold test setting. Typical value range from 4 partitions (train on 75% of the feature vectors and
test on 25% - 4 times) to 10 partitions (train on 90% of the feature vectors and test on 10% - 10 times).
* |OVP_DocEnd_BoxAlgorithm_ClassifierTrainer_Miscellaneous|
*/
/**
* \page BoxAlgorithm_VotingClassifier Voting Classifier
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Description|
The purpose of this simple classifier is to choose between multiple two class classifiers which
one mostly fits a condition. For example imagine \c n states. Each of those states can be either active
or inactive. Additionnaly, imagine you want only one active state at a time. Then you can have \c n
two-class classifiers telling for each state if it is active or not, and a following voting classifier
that chooses which of those states is the <em>most active</em>.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Inputs|
You can add as many inputs as you need depending on the number of preceeding states.
The inputs of this classifier can be changed to either streamed matrix of stimulations.
In the case you choose stimulations, each active stimulation gives a point
to the preceeding state. An inactive stimulation gives no point. After a number of repetitions, the
state whith the best score is chossen.
In the case you choose streamed matrix, the matrix must have only one
element. This element is used as a score coefficient (in place of the simple 1-0 of the previous
case). After a number of repetitions, the state whith the best score is chossen.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Inputs|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Input1|
Input streaam for the first state.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Input1|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Input2|
Input streaam for the second state.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Input2|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Outputs|
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Outputs|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Output1|
This output sends a new stimulation as soon as the classifier received the correct number of votes
from the preceeding states. The output stimulation is based on the 5th setting of the box. First
state being selected would send exactly this stimulation. Second state would send this
stimulation + 1 etc.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Settings|
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Settings|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Setting1|
This setting tells the box how many votes it needs before choosing. If the box uses stimulations,
it must receive either the target or non target stimulation to consider a state has been voted.
Additionaly, the box waits each state to be voted the correct number of times to take a decision.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Setting1|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Setting2|
If the box uses stimulations, this settings tells what stimulation reflects that the state is active.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Setting2|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Setting3|
If the box uses stimulations, this settings tells what stimulation reflects that the state is inactive.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Setting3|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Setting4|
In case no choice can be made (for example, there are more than one state with the highest score), the
voting classifier can choose to reject the vote and send a specific stimulation for this. This is more
likely to happen when the box works on stimulation better than streamed matrix. You can force this box
to choose using the 6th setting.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Setting4|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Setting5|
This stimulation is used as a basis for the stimulations to send when a state is selected. First
state being selected would send exactly this stimulation. Second state would send this
stimulation + 1 etc.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Setting5|
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Setting6|
This setting can force the box to choose a state even if more than one state have the highest score.
In such case, there won't be any rejection. The way the box decides between the ex-aequo candidates
is undefined.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Setting6|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Examples|
This box is used in the <em>P300 speller</em> and the <em>P300 magic card</em> BCIs. Please see those
scenarios in the sample <em>openvibe-scenarios</em>.
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_VotingClassifier_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_VotingClassifier_Miscellaneous|
*/
/**
* \page BoxAlgorithm_CSVFileWriter CSV File Writer
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Description|
This box allows to output some of the OpenViBE streams in a text file that is
easy to read by the machine and easy to read by the human. CSV files are text files
with different values separated by a special character such as a colon, a semicolon
or a tabulation. This basic syntax makes them very easy to read for both machine and
human. The purpose of this box is to quicly export some data to other softwares.
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Inputs|
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Inputs|
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Input1|
This is input is used to know what data to dump in the considered file. The type of
this input can be modified by the user and the format of the output will be adapted
depending on this type. Supported inputs are : Signal, Spectrum and Stimulations.
Format specific to each of these stream types is detailed in section
\ref Doc_BoxAlgorithm_CSVFileWriter_Miscellaneous.
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Input1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Settings|
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Settings|
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Setting1|
This setting contains the file where to store the data.
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Setting1|
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Setting2|
This setting contains the special character to use as a separation for the different
fields. Typical examples are colon, semi colon and tabulations.
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Setting2|
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Setting3|
Due to the fact that text files can grow very quickly, it is possible to compress the
file using gzip format. If you want to use compression, just tick this setting.
<b>Note: this is not implemented at the moment</b>.
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Setting3|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Examples|
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_CSVFileWriter_Miscellaneous|
In this section, we detail the typical outputs that you will find in the output
file depending on the type of the input connector.
For the Signal stream, you will have something like this :
\verbatim
Time (s), Channel 1, Channel 2, ..., Channel n
Time of mesure 1, Mesure 1 of channel 1, Mesure 1 of channel 2, ..., Mesure 1 of channel n
Time of mesure 2, Mesure 2 of channel 1, Mesure 2 of channel 2, ..., Mesure 2 of channel n
...
Time of mesure t, Mesure t of channel 1, Mesure t of channel 2, ..., Mesure t of channel n
\endverbatim
For the Spectrum stream, you will have something like this :
\verbatim
Time (s), Channel 1, Channel 2, ..., Channel n
Time of mesure 1, Freq band 1 of mes 1 of chan 1, Freq band 1 of mes 1 of chan 2, ..., Freq band 1 of mes 1 of chan n
Time of mesure 1, Freq band 2 of mes 1 of chan 1, Freq band 2 of mes 1 of chan 2, ..., Freq band 2 of mes 1 of chan n
...
Time of mesure 1, Freq band f of mes 1 of chan 1, Freq band f of mes 1 of chan 2, ..., Freq band f of mes 1 of chan n
Time of mesure 2, Freq band 1 of mes 2 of chan 1, Freq band 1 of mes 2 of chan 2, ..., Freq band 1 of mes 2 of chan n
Time of mesure 2, Freq band 2 of mes 2 of chan 1, Freq band 2 of mes 2 of chan 2, ..., Freq band 2 of mes 2 of chan n
...
Time of mesure 2, Freq band f of mes 2 of chan 1, Freq band f of mes 2 of chan 2, ..., Freq band f of mes 2 of chan n
...
...
...
Time of mesure t, Freq band 1 of mes t of chan 1, Freq band 1 of mes t of chan 2, ..., Freq band 1 of mes t of chan n
Time of mesure t, Freq band 2 of mes t of chan 1, Freq band 2 of mes t of chan 2, ..., Freq band 2 of mes t of chan n
...
Time of mesure t, Freq band f of mes t of chan 1, Freq band f of mes t of chan 2, ..., Freq band f of mes t of chan n
\endverbatim
For the Stimulation stream, you will have something like this :
\verbatim
Time (s), Identifier, Duration
Time of stim 1, Idenfitifer of stim 1, Duration of stim 1
Time of stim 2, Idenfitifer of stim 2, Duration of stim 2
...
Time of stim n, Idenfitifer of stim n, Duration of stim n
\endverbatim
* |OVP_DocEnd_BoxAlgorithm_CSVFileWriter_Miscellaneous|
*/
/**
* \page BoxAlgorithm_GenericStreamReader Generic stream reader
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamReader_Description|
This box is able to read any file saved with the \ref Doc_BoxAlgorithm_GenericStreamWriter box.
It is interesting to notice that such file can contain a variable number of streams. Therefore,
the user is able to add and modify any output he wants on the box. The box does not supposes
anything on the streams contained in the file during authoring in the designer. The streams of
the file are mapped to created output at runtime in an "intelligent way" depending on there types.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamReader_Description|
__________________________________________________________________
Outputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamReader_Outputs|
This box can have as many output you want depending on the content of the file.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamReader_Outputs|
* |OVP_DocBegin_BoxAlgorithm_GenericStreamReader_Output1|
This is the default output.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamReader_Output1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamReader_Settings|
* |OVP_DocEnd_BoxAlgorithm_GenericStreamReader_Settings|
* |OVP_DocBegin_BoxAlgorithm_GenericStreamReader_Setting1|
This setting points to the file to read. This file may contain a variable number of multiplexed
streams. Those streams will be mapped to corresponding outputs at runtime. The mapping is done in
an "intelligent way" because it reorders the streams contained in the file to match the types of
the outputs. If a stream from the file does not find a matching output, a warning is launched.
If an output does not find a matching stream from the file, a warning is also launched.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamReader_Setting1|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamReader_Examples|
* |OVP_DocEnd_BoxAlgorithm_GenericStreamReader_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamReader_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_GenericStreamReader_Miscellaneous|
*/
/**
* \page BoxAlgorithm_GenericStreamWriter Generic stream writer
__________________________________________________________________
Detailed description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Description|
This box is able to dump any OpenViBE stream into a binary file. In the cacse where this box
would have multiple inputs, the streams would be multiplexed in the file. Such file can
be read back with the \ref Doc_BoxAlgorithm_GenericStreamReader
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Description|
__________________________________________________________________
Inputs description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Inputs|
You can add any input you want to this box depending on the number of streams you want to dump.
In the cacse where this box would have multiple inputs, the streams would be multiplexed in the file.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Inputs|
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Input1|
The default input.
<b>Note: it important to correctly configure the type of the inputs</b>. That information will be
used by the \ref Doc_BoxAlgorithm_GenericStreamReader to map the contained streams to its outputs.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Input1|
__________________________________________________________________
Settings description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Settings|
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Settings|
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Setting1|
This setting points to the file to write the streams to.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Setting1|
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Setting2|
Thanks to this setting, you can use compression on each input stream. This means that the basic
structure of the file remains uncompressed but that each stream inside this structure is compressed.
<b>Note: this is not implemented at the moment</b>.
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Setting2|
__________________________________________________________________
Examples description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Examples|
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Examples|
__________________________________________________________________
Miscellaneous description
__________________________________________________________________
* |OVP_DocBegin_BoxAlgorithm_GenericStreamWriter_Miscellaneous|
* |OVP_DocEnd_BoxAlgorithm_GenericStreamWriter_Miscellaneous|
*/
/**
* \page BoxAlgorithm_SignalDecimation Signal Decimation
__________________________________________________________________
Detailed description
__________________________________________________________________