<!DOCTYPE module SYSTEM "module.dtd">

<module name="video_rtp_stream" dir="computer_vision">
  <doc>
    <description>
      Video streaming for Linux based devices.
      Works e.g. in conjunction with Parrot Drones where the autopilot is the Paparazzi autopilot.
      Sends a RTP/UDP stream of the camera image, a.k.a. live video
    </description>
    <configure name="VIEWVIDEO_USE_NETCAT" value="FALSE|TRUE" description="Use netcat for transferring images instead of RTP stream (default: FALSE)"/>
    <configure name="VIEWVIDEO_HOST" value="192.168.1.255" description="GCS IP (default: MODEM_HOST)"/>
    <configure name="VIEWVIDEO_PORT_OUT" value="5000" description="Port (default: 5000)"/>
    <configure name="VIEWVIDEO_PORT2_OUT" value="6000" description="Port (default: 6000)"/>
    <configure name="VIEWVIDEO_BROADCAST" value="FALSE|TRUE" description="Enable broadcast of image stream (default: TRUE)"/>

    <define name="VIEWVIDEO_CAMERA" value="front_camera|bottom_camera" description="Video device to use"/>
    <define name="VIEWVIDEO_CAMERA2" value="front_camera|bottom_camera" description="Video device to use"/>
    <define name="VIEWVIDEO_DOWNSIZE_FACTOR" value="4" description="Reduction factor of the video stream, the image width and height should be divisible by this factor"/>
    <define name="VIEWVIDEO_QUALITY_FACTOR" value="50" description="JPEG encoding compression factor [0-99]"/>
    <define name="VIEWVIDEO_FPS" value="5" description="Image frequency for the RTP viewer (recommended >=5Hz)"/>
    <define name="VIEWVIDEO_USE_RTP" value="TRUE|FALSE" description="Enable RTP at startup for transferring images (default: TRUE)"/>
  </doc>
  <settings>
    <dl_settings>
      <dl_settings name="video">
        <dl_setting var="viewvideo.use_rtp" min="0" step="1" max="1" values="FALSE|TRUE" shortname="rtp" module="computer_vision/viewvideo" param="VIEWVIDEO_USE_RTP"/>
      </dl_settings>
    </dl_settings>
  </settings>

  <depends>video_thread</depends>
  <header>
    <file name="viewvideo.h"/>
  </header>

  <init fun="viewvideo_init()"/>
  <makefile target="ap|nps">

    <file name="viewvideo.c"/>
    <!-- Include the needed Computer Vision files -->
    <include name="modules/computer_vision"/>
    <file name="rtp.c" dir="modules/computer_vision/lib/encoding"/>

    <!-- Define the network connection to send images over -->
    <raw>
      include $(CFG_SHARED)/udp.makefile

      VIEWVIDEO_HOST        ?= $(MODEM_HOST)
      VIEWVIDEO_PORT_OUT    ?= 5000
      VIEWVIDEO_PORT2_OUT   ?= 6000
      VIEWVIDEO_BROADCAST   ?= TRUE
      VIEWVIDEO_USE_NETCAT  ?= FALSE

      VIEWVID_CFLAGS  = -DVIEWVIDEO_HOST=$(VIEWVIDEO_HOST) -DVIEWVIDEO_PORT_OUT=$(VIEWVIDEO_PORT_OUT) -DVIEWVIDEO_PORT2_OUT=$(VIEWVIDEO_PORT2_OUT)
      ifneq (,$(findstring $(VIEWVIDEO_USE_NETCAT),0 FALSE))
        ap.CFLAGS += $(VIEWVID_CFLAGS) -DVIEWVIDEO_BROADCAST=$(VIEWVIDEO_BROADCAST)
        nps.CFLAGS += $(VIEWVID_CFLAGS) -DVIEWVIDEO_BROADCAST=FALSE
      else
        $(TARGET).CFLAGS += $(VIEWVID_CFLAGS) -DVIEWVIDEO_USE_NETCAT
      endif
    </raw>

  </makefile>
</module>
