/*********************************************************************
  mpeg.hh

  purpose:
    MPEG-file reader. The external program 'dvdview' is used to
    decode the bit-stream.

  notes:

  to do:

  author(s):
   - Dirk Farin, dirk.farin@gmx.de

  modifications:
   27/Apr/01 - Dirk Farin - first implementation
 ********************************************************************************
    LibVideoGfx - video processing library
    Copyright (C) 2002  Dirk Farin

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 ********************************************************************************/

#ifndef LIBVIDEOGFX_GRAPHICS_FILEIO_READ_MPEG_HH
#define LIBVIDEOGFX_GRAPHICS_FILEIO_READ_MPEG_HH

#include <stdio.h>
#include <libvideogfx/graphics/datatypes/image.hh>

namespace videogfx {

  class FileReader_MPEG
  {
  public:
    FileReader_MPEG();
    ~FileReader_MPEG();

    // initialization

    void Open(const char* filename);

    // usage

    bool IsEOF() const;
    void SkipToImage(int nr);
    bool ReadImage(Image<Pixel>&);

  private:
    FILE* d_fh;

    int  d_next_framenr;  // number of next frame to be returned by ReadImage()

    mutable bool d_image_cache_full;
    mutable Image<Pixel> d_next_image_cache;

    bool Preload(Image<Pixel>& dest) const;
  };

}

#endif
