Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (C) 2013 Wei Gao <weigao@multicorewareinc.com>
  3.  * Copyright (C) 2013 Lenny Wang
  4.  *
  5.  * This file is part of FFmpeg.
  6.  *
  7.  * FFmpeg is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * FFmpeg is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with FFmpeg; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20.  */
  21.  
  22. #ifndef AVFILTER_DESHAKE_H
  23. #define AVFILTER_DESHAKE_H
  24.  
  25. #include "config.h"
  26. #include "avfilter.h"
  27. #include "transform.h"
  28. #include "libavutil/pixelutils.h"
  29. #if CONFIG_OPENCL
  30. #include "libavutil/opencl.h"
  31. #endif
  32.  
  33.  
  34. enum SearchMethod {
  35.     EXHAUSTIVE,        ///< Search all possible positions
  36.     SMART_EXHAUSTIVE,  ///< Search most possible positions (faster)
  37.     SEARCH_COUNT
  38. };
  39.  
  40. typedef struct {
  41.     int x;             ///< Horizontal shift
  42.     int y;             ///< Vertical shift
  43. } IntMotionVector;
  44.  
  45. typedef struct {
  46.     double x;             ///< Horizontal shift
  47.     double y;             ///< Vertical shift
  48. } MotionVector;
  49.  
  50. typedef struct {
  51.     MotionVector vec;     ///< Motion vector
  52.     double angle;         ///< Angle of rotation
  53.     double zoom;          ///< Zoom percentage
  54. } Transform;
  55.  
  56. #if CONFIG_OPENCL
  57.  
  58. typedef struct {
  59.     cl_command_queue command_queue;
  60.     cl_program program;
  61.     cl_kernel kernel_luma;
  62.     cl_kernel kernel_chroma;
  63.     int in_plane_size[8];
  64.     int out_plane_size[8];
  65.     int plane_num;
  66.     cl_mem cl_inbuf;
  67.     size_t cl_inbuf_size;
  68.     cl_mem cl_outbuf;
  69.     size_t cl_outbuf_size;
  70. } DeshakeOpenclContext;
  71.  
  72. #endif
  73.  
  74. #define MAX_R 64
  75.  
  76. typedef struct {
  77.     const AVClass *class;
  78.     int counts[2*MAX_R+1][2*MAX_R+1]; /// < Scratch buffer for motion search
  79.     double *angles;            ///< Scratch buffer for block angles
  80.     unsigned angles_size;
  81.     AVFrame *ref;              ///< Previous frame
  82.     int rx;                    ///< Maximum horizontal shift
  83.     int ry;                    ///< Maximum vertical shift
  84.     int edge;                  ///< Edge fill method
  85.     int blocksize;             ///< Size of blocks to compare
  86.     int contrast;              ///< Contrast threshold
  87.     int search;                ///< Motion search method
  88.     av_pixelutils_sad_fn sad;  ///< Sum of the absolute difference function
  89.     Transform last;            ///< Transform from last frame
  90.     int refcount;              ///< Number of reference frames (defines averaging window)
  91.     FILE *fp;
  92.     Transform avg;
  93.     int cw;                    ///< Crop motion search to this box
  94.     int ch;
  95.     int cx;
  96.     int cy;
  97.     char *filename;            ///< Motion search detailed log filename
  98.     int opencl;
  99. #if CONFIG_OPENCL
  100.     DeshakeOpenclContext opencl_ctx;
  101. #endif
  102.     int (* transform)(AVFilterContext *ctx, int width, int height, int cw, int ch,
  103.                       const float *matrix_y, const float *matrix_uv, enum InterpolateMethod interpolate,
  104.                       enum FillMethod fill, AVFrame *in, AVFrame *out);
  105. } DeshakeContext;
  106.  
  107. #endif /* AVFILTER_DESHAKE_H */
  108.