/* LICENSE:
  =========================================================================
    CMPack'04 Source Code Release for OPEN-R SDK 1.1.5-r2 for ERS7
    Copyright (C) 2004 Multirobot Lab [Project Head: Manuela Veloso]
    School of Computer Science, Carnegie Mellon University
    All rights reserved.
  ========================================================================= */

#ifndef INCLUDED_SPOutVisionEncoder_h
#define INCLUDED_SPOutVisionEncoder_h

#include "../headers/SPOutEncoder.h"
#include "Vision.h" /* get rle definition */
#include "VisionInterface.h"

/*------------------------------------------------------------------
CLASS
  SPOutVisionEncoder

DESCRIPTION
  Encodes SPOut output related to vision.
------------------------------------------------------------------*/
class SPOutVisionEncoder : public SPOutEncoder {
public:
  static int encodeVisionRaw(uchar *buf,
                             double body_angle,double body_height,
                             double tilt,double pan,double roll,
                             CMVision::image_yuv<uchar> &img);

  static int encodeVisionRaw(uchar *buf,
                             double body_angle,double body_height,
                             double tilt,double pan,double roll,
                             CMVision::image_yuv<uchar> &img,
                             CMVision::image_yuv<uchar> &mask);
  
  static int encodeVisionRLE(uchar *buf,
                             double body_angle,double body_height,
                             double tilt,double pan,double roll,
                             int image_x_size,int image_y_size,
                             int num_runs, run *runs);
  
  static int encodeVisionObjs(uchar *buf, ObjectInfo *obj_info);

  static int encodeVisionRadialMap(uchar *buf, RadialObjectMap *vis_map);

protected:
private: // methods
private: // data
  static uchar *encodeAngles(uchar *buf,
                             double body_angle,double body_height,
                             double tilt,double pan,double roll);

  static uchar *encodeVisionRun(uchar *buf, run *run);
};

#endif
