/*
    libfame - Fast Assembly MPEG Encoder Library
    Copyright (C) 2000-2001  Damien Vincent

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#ifndef __FAME_MONITOR_H
#define __FAME_MONITOR_H

#include "fame.h"

#define FAME_MONITOR_LOAD_STATS 1


unsigned int activity(fame_yuv_t *frame,
		      unsigned char *shape,
		      unsigned int mb_width,
		      unsigned int mb_height);

unsigned int activity2(fame_yuv_t *ref,
		       fame_yuv_t *frame,
		       unsigned char *shape,
		       unsigned int mb_width,
		       unsigned int mb_height);

typedef struct _fame_monitor_t_ {
  FAME_EXTENDS(fame_object_t);

  void (* init)(struct _fame_monitor_t_ *monitor,
		int (* retrieve_cb)(fame_frame_statistics_t *stats),
		unsigned int mb_width,
		unsigned int mb_height,
		unsigned int total_frames,
		unsigned int flags);
  void (* close)(struct _fame_monitor_t_ *monitor);
  void (* enter)(struct _fame_monitor_t_ *monitor,
		 unsigned int frame_number,
		 fame_yuv_t **ref,
		 fame_yuv_t *frame,
		 unsigned char *shape,
		 char *coding);
  fame_frame_statistics_t* (* leave)(struct _fame_monitor_t_ *monitor,
                                     unsigned int spent,
                                     float quant_scale);

  fame_global_statistics_t global_stats;
  fame_frame_statistics_t *current_frame_stats;
  fame_frame_statistics_t *frame_stats_list;
  int (* retrieve_stats_callback)(fame_frame_statistics_t *frame_stats);
  int keyframe;
  unsigned int mb_width;
  unsigned int mb_height;
  unsigned int old_activity;
  unsigned int flags;
} fame_monitor_t;

#define FAME_MONITOR(x) ((fame_monitor_t *) x)

extern FAME_CONSTRUCTOR(fame_monitor_t);

#endif
