text: /*********************************************************************/
  /* Copyright (c) 2017-2018, EPFL/Blue Brain Project                  */
  /*                          Raphael Dumusc <raphael.dumusc@epfl.ch>  */
  /* All rights reserved.                                              */
  /*                                                                   */
  /* Redistribution and use in source and binary forms, with or        */
  /* without modification, are permitted provided that the following   */
  /* conditions are met:                                               */
  /*                                                                   */
  /*   1. Redistributions of source code must retain the above         */
  /*      copyright notice, this list of conditions and the following  */
  /*      disclaimer.                                                  */
  /*                                                                   */
  /*   2. Redistributions in binary form must reproduce the above      */
  /*      copyright notice, this list of conditions and the following  */
  /*      disclaimer in the documentation and/or other materials       */
  /*      provided with the distribution.                              */
  /*                                                                   */
  /*    THIS  SOFTWARE  IS  PROVIDED  BY  THE  ECOLE  POLYTECHNIQUE    */
  /*    FEDERALE DE LAUSANNE  ''AS IS''  AND ANY EXPRESS OR IMPLIED    */
  /*    WARRANTIES, INCLUDING, BUT  NOT  LIMITED  TO,  THE  IMPLIED    */
  /*    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  A PARTICULAR    */
  /*    PURPOSE  ARE  DISCLAIMED.  IN  NO  EVENT  SHALL  THE  ECOLE    */
  /*    POLYTECHNIQUE  FEDERALE  DE  LAUSANNE  OR  CONTRIBUTORS  BE    */
  /*    LIABLE  FOR  ANY  DIRECT,  INDIRECT,  INCIDENTAL,  SPECIAL,    */
  /*    EXEMPLARY,  OR  CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT NOT    */
  /*    LIMITED TO,  PROCUREMENT  OF  SUBSTITUTE GOODS OR SERVICES;    */
  /*    LOSS OF USE, DATA, OR  PROFITS;  OR  BUSINESS INTERRUPTION)    */
  /*    HOWEVER CAUSED AND  ON ANY THEORY OF LIABILITY,  WHETHER IN    */
  /*    CONTRACT, STRICT LIABILITY,  OR TORT  (INCLUDING NEGLIGENCE    */
  /*    OR OTHERWISE) ARISING  IN ANY WAY  OUT OF  THE USE OF  THIS    */
  /*    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   */
  /*                                                                   */
  /* The views and conclusions contained in the software and           */
  /* documentation are those of the authors and should not be          */
  /* interpreted as representing official policies, either expressed   */
  /* or implied, of Ecole polytechnique federale de Lausanne.          */
  /*********************************************************************/
  
  #ifndef PIXELSTREAMPROCESSOR_H
  #define PIXELSTREAMPROCESSOR_H
  
  #include "types.h"
  
  /**
   * Abstract class for processing pixel stream frames before rendering.
   */
  class PixelStreamProcessor
  {
  public:
      /** Virtual destructor. */
      virtual ~PixelStreamProcessor();
  
      /**
       * Get the assembled image for a tile.
       *
       * @param tileIndex for the target image.
       * @param decoder for jpeg decompression.
       * @return the assembled image.
       * @throw std::runtime_error on tile decoding error.
       */
      virtual ImagePtr getTileImage(uint tileIndex,
                                    deflect::server::TileDecoder& decoder) = 0;
  
      /** @return the rectangle of the tile. */
      virtual QRect getTileRect(uint tileIndex) const = 0;
  
      /** @return the list of visible tiles for the given area. */
      virtual Indices computeVisibleSet(const QRectF& visibleArea,
                                        uint channel) const = 0;
  
      /** @return the total number of assembled tiles. */
      virtual size_t getTilesCount() const = 0;
  
  protected:
      /** @return the coordinates of the tile as a QRect. */
      QRect toRect(const deflect::server::Tile& tile) const;
  };
  
  #endif
  