/*
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 */

#ifndef AOM_AV1_ENCODER_OPTICAL_FLOW_H_
#define AOM_AV1_ENCODER_OPTICAL_FLOW_H_

#include "aom_scale/yv12config.h"
#include "av1/common/mv.h"
#include "config/aom_config.h"

#ifdef __cplusplus
extern "C" {
#endif

#if CONFIG_OPTICAL_FLOW_API

typedef enum { LUCAS_KANADE, HORN_SCHUNCK } OPTFLOW_METHOD;

typedef enum {
  MV_FILTER_NONE,
  MV_FILTER_SMOOTH,
  MV_FILTER_MEDIAN
} MV_FILTER_TYPE;

typedef struct LOCALMV {
  double row;
  double col;
} LOCALMV;

#define MAX_PYRAMID_LEVELS 5
// default options for optical flow
#define OPFL_WINDOW_SIZE 15
#define OPFL_PYRAMID_LEVELS 3  // total levels
#define OPFL_WARPING_STEPS 3

// parameters specific to Lucas-Kanade
typedef struct lk_params {
  int window_size;
} LK_PARAMS;

// generic structure to contain parameters for all
// optical flow algorithms
typedef struct opfl_params {
  int pyramid_levels;
  int warping_steps;
  LK_PARAMS *lk_params;
  int flags;
} OPFL_PARAMS;

#define OPFL_FLAG_SPARSE 1

void av1_init_opfl_params(OPFL_PARAMS *opfl_params);

void av1_init_lk_params(LK_PARAMS *lk_params);

void av1_optical_flow(const YV12_BUFFER_CONFIG *from_frame,
                      const YV12_BUFFER_CONFIG *to_frame,
                      const int from_frame_idx, const int to_frame_idx,
                      const int bit_depth, const OPFL_PARAMS *opfl_params,
                      const MV_FILTER_TYPE mv_filter,
                      const OPTFLOW_METHOD method, MV *mvs);
#endif

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // AOM_AV1_ENCODER_OPTICAL_FLOW_H_
