================================================================================
=             OpenCL Implementations of Discrete Wavelet Transform             =
================================================================================

Created
-------
2016

Authors
-------
* Kula Michal
* Barina David
* Zemcik Pavel

Acknowledgements
----------------

This software  has been supported by the Technology Agency of the Czech
Republic (TA CR) Competence Centres project V3C - Visual Computing Competence
Center (no. TE01020415).

Description
-----------
Implementations of separable and non-separable block-based methods for 2-D
discrete wavelet transform with CDF 9/7 wavelet. The wavelet transform
implementations are written using OpenCL language.

Location
--------

Files
-----
bin/kernels/gpu.cl -- GPU implementations of 2-D wavelet transform

Libraries
-----
OpenMP (integrated in Visual Studio)
OpenCL 1.2
OpenCV 3.0.0

Console parameters
-----
  --show-input /show-input                             Show input video file while converting
  --show-output /show-output                           Show output video file while converting
  --help /help -h /h                                   Print this help
  --input /input -i /i                                 Set path to input image/video file
  --device /device -d /d                               Set device {c,cpu,g,gpu}
  --print-devices /print-devices                       Print devices info
  --benchmark-proc /benchmark-proc                     Benchmark process only execution (virtual data)
  --disable-gen-filter-body /disable-gen-filter-body   Disable generation of filter body
  --frame-count /frame-count                           Set frame process count
  --cam /cam                                           Camera number
  --hor-pairs /hor-pairs                               Pixel pairs to process by thread in horizontal transform
  --vert-pairs /vert-pairs                             pixel pairs to process by thread in vertical transform
  --hor-x /hor-x                                       Width of group in horizontal transform
  --hor-y /hor-y                                       Height of group in horizontal transform
  --vert-x /vert-x                                     Width of group in vertical transform
  --vert-y /vert-y                                     Height of group in vertical transform
  --comb-x /comb-x                                     Width of group in combined transform
  --comb-y /comb-y                                     Height of group in combined transform
  --hor-kernel /hor-kernel                             Horizontal pass kernel name
  --vert-kernel /vert-kernel                           Vertical pass kernel name
  --comb-kernel /comb-kernel                           Combined pass kernel name
  --output-type /output-type                           Set output type {full,f,csv,c}
  --comb-corn-proc /comb-corn-proc                     Process horizontal corners in comb out kernels
  --warp-size /warp-size                               Size of warp
  --non-atomic-warp /non-atomic-warp                   Warp instructions is not executed atomicaly
  --hor-proc /hor-proc                                 Set type of hor process {blaz_normal,bn,blaz_register,br,laan,l}
  --vert-proc /vert-proc                               Set type of vert process {blaz_normal,bn,blaz_register,br,laan,l}
  --engine-type /engine-type                           Set benchmark type {opencl,openmp,openclcomb}
  --hor-func /hor-func                                 Horizontal pass function name in OpenMP
  --vert-func /vert-func                               Vertical pass function name in OpenMP
  --interlaced /interlaced                             Wavelet use output interlaced
  --max-depth /max-depth                               Maximum depth of transformation
  --wavelet-type /wavelet-type                         Type of wavelet {CDF53,CDF97,CDF137}
  --resize-x /resize-x                                 Resolution in x axis to resize
  --resize-y /resize-y                                 Resolution in y axis to resize
  --subdevice-size /subdevice-size                     Size of subdevice
  --image-mem /image-mem                               Type of image memory {texture,global}
  --disable-double-buffering /disable-double-buffering Disable double buffering
  --repeat-count /repeat-count                         Wavelet execution repeat count <0,inf) (only for memless-exec)
  --memless-exec /memless-exec                         Memoryless execution
