ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / ARDroneLib / VP_SDK / VP_Api / vp_api.h
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Api/vp_api.h b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Api/vp_api.h
new file mode 100644 (file)
index 0000000..cf57a45
--- /dev/null
@@ -0,0 +1,177 @@
+/**
+ *  @file     vp_api.h
+ *  @brief    VP Api. Pipeline definition
+ *  @author   Sylvain Gaeremynck <sylvain.gaeremynck@parrot.fr>
+ *  @author   Aurelien Morelle <aurelien.morelle@parrot.fr>
+ *  @author   Thomas Landais <thomas.landais@parrot.fr>
+ *  @author   Julien Floret <julien.floret.ext@parrot.com>
+ *  @version  2.0
+ *  @date     first release 16/03/2007
+ *  @date     modification  24/05/2007
+ */
+
+#ifndef _VP_API_INCLUDE_H_
+#define _VP_API_INCLUDE_H_
+
+#include <VP_Os/vp_os_signal.h>
+#include <VP_Os/vp_os_types.h>
+#include <VP_Api/vp_api_config.h>
+#include <VP_Api/vp_api_stage.h>
+#include <VP_Api/vp_api_supervisor.h>
+
+
+/**
+ * @enum  _VP_API_IO_TYPES_
+ * @brief Available io stages type
+ */
+typedef enum _VP_API_IO_TYPES_
+{
+  // INPUTS
+  VP_API_INPUT_BUFFER,
+  VP_API_INPUT_CAMIF,
+  VP_API_INPUT_FILE,
+  VP_API_INPUT_SOCKET,
+
+  // FILTERS
+  VP_API_FILTER_ENCODER,
+  VP_API_FILTER_DECODER,
+  VP_API_FFMPEG_ENCODER,
+  VP_API_FFMPEG_DECODER,
+  VP_API_FILTER_VISION,
+  VP_API_VISION_PREPARE,
+  VP_API_FILTER_YUV2RGB,
+  VP_API_JPEG_ENCODER,
+  VP_API_JPEG_DECODER,
+  VP_API_ARWIZ,
+
+  // OUTPUTS
+  VP_API_OUTPUT_CONSOLE,
+  VP_API_OUTPUT_SDL,
+  VP_API_OUTPUT_LCD,
+  VP_API_OUTPUT_FILE,
+  VP_API_OUTPUT_SOCKET,
+
+  // MIXERS
+  VP_API_PIPE
+}
+VP_API_IO_TYPE;
+
+/**
+ * @enum  _VP_API_IO_STATUS_
+ * @brief Stage's state definition
+ */
+typedef enum _VP_API_IO_STATUS_
+{
+  VP_API_STATUS_INIT        = 0, // needs being equal to zero to ease initialization
+  VP_API_STATUS_PROCESSING,
+  VP_API_STATUS_STILL_RUNNING,
+  VP_API_STATUS_ENDED,
+  VP_API_STATUS_ERROR
+}
+VP_API_IO_STATUS;
+
+
+/**
+ * @struct _vp_api_io_data_
+ * @brief  This structure is used by stages to share data in a generic way
+ */
+typedef struct _vp_api_io_data_
+{
+  uint32_t         numBuffers;
+  int8_t         **buffers;
+  uint32_t         indexBuffer;
+
+  int32_t          size;
+  int32_t         *lineSize;
+
+  VP_API_IO_STATUS status;
+
+  vp_os_mutex_t    lock;
+}
+vp_api_io_data_t;
+
+
+/**
+ * @struct _vp_api_io_stage_
+ * @brief  Public definition of a stage
+ *
+ * This structure is used to configure stages
+ * The cfg field can be used to share data between stages in a specific way
+ */
+typedef struct _vp_api_io_stage_
+{
+  VP_API_IO_TYPE        type;
+  void                 *cfg;
+  vp_api_stage_funcs_t  funcs;
+  vp_api_io_data_t      data;
+}
+vp_api_io_stage_t;
+
+
+/**
+ * @struct _vp_api_io_pipeline_
+ * @brief  Public definition of the pipeline
+ *
+ * This structure is used to configure the pipeline
+ */
+typedef struct _vp_api_io_pipeline_
+{
+  uint32_t                nb_stages;
+  vp_api_io_stage_t      *stages;
+  vp_api_handle_msg_t     handle_msg;
+  uint32_t                nb_still_running;
+  vp_api_fifo_t           fifo;
+
+}
+vp_api_io_pipeline_t;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * @fn      C_RESULT vp_api_open(vp_api_io_pipeline_t *pipeline, PIPELINE_HANDLE *handle)
+ * @brief  Creates internally all
+ * @param   pipeline  Pipeline definition
+ * @param   handle    Pipeline handle
+ * @return  VP_SUCCESS or VP_FAILURE
+ */
+C_RESULT
+vp_api_open(vp_api_io_pipeline_t *pipeline, PIPELINE_HANDLE *handle);
+
+
+/**
+ * @fn      C_RESULT vp_api_run(vp_api_io_pipeline_t *pipeline, vp_api_io_data_t *out_data)
+ * @brief   Runs pipeline
+ * @param   pipeline  Pipeline definition
+ * @param   out_data  Output data of the last pipeline stage
+ * @return  VP_SUCCESS or VP_FAILURE
+ */
+C_RESULT
+vp_api_run(vp_api_io_pipeline_t *pipeline, vp_api_io_data_t *out_data);
+
+
+/**
+ * @fn      C_RESULT vp_api_flush(vp_api_io_pipeline_t *pipeline)
+ * @brief   Flushes pipeline
+ * @param   pipeline  Pipeline definition
+ * @return  VP_SUCCESS or VP_FAILURE
+ */
+C_RESULT
+vp_api_flush(vp_api_io_pipeline_t *pipeline);
+
+/**
+ * @fn      C_RESULT vp_api_close(vp_api_io_pipeline_t *pipeline)
+ * @brief   Clean up
+ * @param   pipeline  Pipeline definition
+ * @return  VP_SUCCESS or VP_FAILURE
+ */
+C_RESULT
+vp_api_close(vp_api_io_pipeline_t *pipeline, PIPELINE_HANDLE *handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ! _VP_API_INCLUDE_H_