+ /**
+ * IDs for output handlers.
+ * The agent can provide output handlers in order to treat the output
+ * data coming from the HLTOUT nodes.
+ */
+ enum AliHLTOUTHandlerType {
+ kUnknownOutput =0,
+ /** output is in ESD format */
+ kEsd,
+ /** agent can create a raw stream */
+ kRawstream,
+ /** agent provides a chain */
+ kChain,
+ /** agent provides detector specific handler */
+ kProprietary,
+ kLastOutputHandler
+ };
+
+ /**
+ * Output handler description.
+ * \em fModule: module name specific for the handler type
+ * - kRawStream: class name of the Rawstream class
+ * - kChain: blank separated list of chains
+ * - kProprietary: name of the handler class
+ */
+ struct AliHLTOUTHandlerDesc {
+ /** type of the handler */
+ AliHLTOUTHandlerType fHType;
+ /** data type treated by the handler */
+ AliHLTComponentDataType fDt;
+ /** class or chain name */
+ const char* fModule;
+ };
+
+ /**
+ * Get handler description for a data block.
+ * @param dt [in] data type of the block
+ * @param spec [in] specification of the block
+ * @param desc [out] handler description
+ * @return 1 if the agent can provide a handler, 0 if not
+ */
+ virtual int GetHandlerDescription(AliHLTComponentDataType dt,
+ AliHLTUInt32_t spec,
+ AliHLTOUTHandlerDesc& desc) const;
+ /**
+ * Get handler for a data block of the HLTOUT data.
+ * @param dt [in] data type of the block
+ * @param spec [in] specification of the block
+ */
+ virtual AliHLTOUTHandler* GetOutputHandler(AliHLTComponentDataType dt,
+ AliHLTUInt32_t spec) const;
+
+ /**
+ * Get raw stream for a data block.
+ * @param dt [in] data type of the block
+ * @param spec [in] specification of the block
+ * @param pData [in] data control object
+ * @return Rawstream object, NULL if no Rawstream available for data type/spec
+ */
+ virtual AliRawStream* GetRawStream(AliHLTComponentDataType dt,
+ AliHLTUInt32_t spec,
+ const AliHLTOUT* pData) const;
+