113 lines
5.2 KiB
C
113 lines
5.2 KiB
C
|
///
|
||
|
/// @file dwt.h
|
||
|
/// @author Martin Jirman (207962@mail.muni.cz)
|
||
|
/// @brief Entry points for CUDA implementaion of 9/7 and 5/3 DWT.
|
||
|
/// @date 2011-01-20 11:41
|
||
|
///
|
||
|
///
|
||
|
///
|
||
|
/// Copyright (c) 2011 Martin Jirman
|
||
|
/// All rights reserved.
|
||
|
///
|
||
|
/// Redistribution and use in source and binary forms, with or without
|
||
|
/// modification, are permitted provided that the following conditions are met:
|
||
|
///
|
||
|
/// * Redistributions of source code must retain the above copyright
|
||
|
/// notice, this list of conditions and the following disclaimer.
|
||
|
/// * Redistributions in binary form must reproduce the above copyright
|
||
|
/// notice, this list of conditions and the following disclaimer in the
|
||
|
/// documentation and/or other materials provided with the distribution.
|
||
|
///
|
||
|
/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||
|
/// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
/// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
/// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||
|
/// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
/// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
/// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
/// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
/// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
/// POSSIBILITY OF SUCH DAMAGE.
|
||
|
///
|
||
|
///
|
||
|
///
|
||
|
/// Following conditions are common for all four DWT functions:
|
||
|
/// - Both input and output images are stored in GPU memory with no padding
|
||
|
/// of lines or interleaving of pixels.
|
||
|
/// - DWT coefficients are stored as follows: Each band is saved as one
|
||
|
/// consecutive chunk (no padding/stride/interleaving). Deepest level bands
|
||
|
/// (smallest ones) are stored first (at the beginning of the input/output
|
||
|
/// buffers), less deep bands follow. There is no padding between stored
|
||
|
/// bands in the buffer. Order of bands of the same level in the buffer is
|
||
|
/// following: Low-low band (or deeper level subbands) is stored first.
|
||
|
/// Vertical-low/horizontal-high band follows. Vertical-high/horizonal-low
|
||
|
/// band is saved next and finally, the high-high band is saved. Out of all
|
||
|
/// low-low bands, only th edeepest one is saved (right at the beginning of
|
||
|
/// the buffer), others are replaced with deeper level subbands.
|
||
|
/// - Input images of all functions won't be preserved (will be overwritten).
|
||
|
/// - Input and output buffers can't overlap.
|
||
|
/// - Size of output buffer must be greater or equal to size of input buffer.
|
||
|
///
|
||
|
/// There are no common compile time settings (buffer size, etc...) for
|
||
|
/// all DWTs, because each DTW type needs different amount of GPU resources.
|
||
|
/// Instead, each DWT type has its own compile time settings, which can be
|
||
|
/// found in *.cu file, where it is implemented.
|
||
|
///
|
||
|
|
||
|
#ifndef DWT_CUDA_H
|
||
|
#define DWT_CUDA_H
|
||
|
|
||
|
|
||
|
namespace dwt_cuda {
|
||
|
|
||
|
|
||
|
/// Forward 5/3 2D DWT. See common rules (above) for more details.
|
||
|
/// @param in Expected to be normalized into range [-128, 127].
|
||
|
/// Will not be preserved (will be overwritten).
|
||
|
/// @param out output buffer on GPU
|
||
|
/// @param sizeX width of input image (in pixels)
|
||
|
/// @param sizeY height of input image (in pixels)
|
||
|
/// @param levels number of recursive DWT levels
|
||
|
void fdwt53(int * in, int * out, int sizeX, int sizeY, int levels);
|
||
|
|
||
|
|
||
|
/// Reverse 5/3 2D DWT. See common rules (above) for more details.
|
||
|
/// @param in Input DWT coefficients. Format described in common rules.
|
||
|
/// Will not be preserved (will be overwritten).
|
||
|
/// @param out output buffer on GPU - will contain original image
|
||
|
/// in normalized range [-128, 127].
|
||
|
/// @param sizeX width of input image (in pixels)
|
||
|
/// @param sizeY height of input image (in pixels)
|
||
|
/// @param levels number of recursive DWT levels
|
||
|
void rdwt53(int * in, int * out, int sizeX, int sizeY, int levels);
|
||
|
|
||
|
|
||
|
/// Forward 9/7 2D DWT. See common rules (above) for more details.
|
||
|
/// @param in Input DWT coefficients. Should be normalized (in range
|
||
|
/// [-0.5, 0.5]). Will not be preserved (will be overwritten).
|
||
|
/// @param out output buffer on GPU - format specified in common rules
|
||
|
/// @param sizeX width of input image (in pixels)
|
||
|
/// @param sizeY height of input image (in pixels)
|
||
|
/// @param levels number of recursive DWT levels
|
||
|
void fdwt97(float * in, float * out, int sizeX, int sizeY, int levels);
|
||
|
|
||
|
|
||
|
/// Reverse 9/7 2D DWT. See common rules (above) for more details.
|
||
|
/// @param in Input DWT coefficients. Format described in common rules.
|
||
|
/// Will not be preserved (will be overwritten).
|
||
|
/// @param out output buffer on GPU - will contain original image
|
||
|
/// in normalized range [-0.5, 0.5].
|
||
|
/// @param sizeX width of input image (in pixels)
|
||
|
/// @param sizeY height of input image (in pixels)
|
||
|
/// @param levels number of recursive DWT levels
|
||
|
void rdwt97(float * in, float * out, int sizeX, int sizeY, int levels);
|
||
|
|
||
|
|
||
|
} // namespace dwt_cuda
|
||
|
|
||
|
|
||
|
|
||
|
#endif // DWT_CUDA_H
|
||
|
|