Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ set(rtprocess_SRCS
demosaic/vng4.cc
demosaic/xtransfast.cc
preprocess/CA_correct.cc
postprocess/hilite_recon.cc)
postprocess/hilite_recon.cc
c_api/librtprocess_c_api.cc)

add_library(rtprocess ${rtprocess_SRCS})
target_include_directories(rtprocess
Expand Down
102 changes: 102 additions & 0 deletions src/c_api/librtprocess_c_api.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/*
* This file is part of librtprocess.
*
* Copyright (c) 2018 Carlo Vaccari
*
* librtprocess is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the license, or
* (at your option) any later version.
*
* librtprocess 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with librtprocess. If not, see <http://www.gnu.org/licenses/>.
*/

// C API Wrapper for librtprocess

#include "librtprocess.h"

extern "C"
{

rpError rt_process_bayerborder_demosaic(int winw, int winh, int lborders, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2])
{
return bayerborder_demosaic(winw, winh, lborders, rawData, red, green, blue, cfarray);
}

void rt_process_xtransborder_demosaic(int winw, int winh, int border, const float * const *rawData, float **red, float **green, float **blue, const unsigned xtrans[6][6])
{
return xtransborder_demosaic(winw, winh, border, rawData, red, green, blue, xtrans);
}

rpError rt_process_ahd_demosaic(int width, int height, const float* const* rawData, float** red, float** green, float** blue, const unsigned cfarray[2][2], const float rgb_cam[3][4], bool(* setProgCancel)(double))
{
return ahd_demosaic(width, height, rawData, red, green, blue, cfarray, rgb_cam, setProgCancel);
}

rpError rt_process_amaze_demosaic(int raw_width, int raw_height, int winx, int winy, int winw, int winh, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), double initGain, int border, float inputScale, float outputScale, size_t chunkSize, bool measure)
{
return amaze_demosaic(raw_width, raw_height, winx, winy, winw, winh, rawData, red, green, blue, cfarray, setProgCancel, initGain, border, inputScale, outputScale, chunkSize ? chunkSize : 2, measure);
}

rpError rt_process_bayerfast_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), double initGain)
{
return bayerfast_demosaic(width, height, rawData, red, green, blue, cfarray, setProgCancel, initGain);
}

rpError rt_process_dcb_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), int iterations, bool dcb_enhance)
{
return dcb_demosaic(width, height, rawData, red, green, blue, cfarray, setProgCancel, iterations, dcb_enhance);
}

rpError rt_process_hphd_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double))
{
return hphd_demosaic(width, height, rawData, red, green, blue, cfarray, setProgCancel);
}

rpError rt_process_rcd_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), size_t chunkSize, bool measure, bool multiThread)
{
return rcd_demosaic(width, height, rawData, red, green, blue, cfarray, setProgCancel, chunkSize ? chunkSize : 2, measure, multiThread);
}

rpError rt_process_markesteijn_demosaic(int width, int height, const float * const *rawdata, float **red, float **green, float **blue, const unsigned xtrans[6][6], const float rgb_cam[3][4], bool(* setProgCancel)(double), const int passes, const bool useCieLab, size_t chunkSize, bool measure)
{
return markesteijn_demosaic(width, height, rawdata, red, green, blue, xtrans, rgb_cam, setProgCancel, passes, useCieLab, chunkSize ? chunkSize: 2, measure);
}

rpError rt_process_xtransfast_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned xtrans[6][6], bool(* setProgCancel)(double))
{
return xtransfast_demosaic(width, height, rawData, red, green, blue, xtrans, setProgCancel);
}

rpError rt_process_vng4_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double))
{
return vng4_demosaic(width, height, rawData, red, green, blue, cfarray, setProgCancel);
}

rpError rt_process_igv_demosaic(int winw, int winh, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double))
{
return igv_demosaic(winw, winh, rawData, red, green, blue, cfarray, setProgCancel);
}

rpError rt_process_lmmse_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), int iterations)
{
return lmmse_demosaic(width, height, rawData, red, green, blue, cfarray, setProgCancel, iterations);
}

rpError rt_process_CA_correct(int winx, int winy, int winw, int winh, const bool autoCA, size_t autoIterations, const double cared, const double cablue, bool avoidColourshift, const float * const *rawDataIn, float **rawDataOut, const unsigned cfarray[2][2], bool(* setProgCancel)(double), double fitParams[2][2][16], bool fitParamsIn, float inputScale, float outputScale, size_t chunkSize, bool measure)
{
return CA_correct(winx, winy, winw, winh, autoCA, autoIterations, cared, cablue, avoidColourshift, rawDataIn, rawDataOut, cfarray, setProgCancel, fitParams, fitParamsIn, inputScale != 0 ? inputScale : (float)65535, outputScale != 0 ? outputScale : (float)65535, chunkSize ? chunkSize: 2, measure);
}

rpError rt_process_HLRecovery_inpaint(const int width, const int height, float **red, float **green, float **blue, const float chmax[3], const float clmax[3], bool(* setProgCancel)(double))
{
return HLRecovery_inpaint(width, height, red, green, blue, chmax, clmax, setProgCancel);
}

} // extern "C"
37 changes: 35 additions & 2 deletions src/include/librtprocess.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@

#include <stddef.h>

#include <functional>
#include <cstddef>
#ifndef __cplusplus
#include <stdbool.h>
#endif



#ifndef LIBRTPROCESS_STATIC
// DLL interface export/import macros are only available for MSVC for now,
Expand All @@ -44,6 +47,12 @@
#endif

enum rpError {RP_NO_ERROR, RP_MEMORY_ERROR, RP_WRONG_CFA, RP_CACORRECT_ERROR};

#ifdef __cplusplus

#include <functional>
#include <cstddef>

RTPROCESS_API rpError bayerborder_demosaic(int winw, int winh, int lborders, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2]);
RTPROCESS_API void xtransborder_demosaic(int winw, int winh, int border, const float * const *rawData, float **red, float **green, float **blue, const unsigned xtrans[6][6]);
RTPROCESS_API rpError ahd_demosaic (int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], const float rgb_cam[3][4], const std::function<bool(double)> &setProgCancel);
Expand All @@ -61,4 +70,28 @@ RTPROCESS_API rpError lmmse_demosaic(int width, int height, const float * const
RTPROCESS_API rpError CA_correct(int winx, int winy, int winw, int winh, const bool autoCA, std::size_t autoIterations, const double cared, const double cablue, bool avoidColourshift, const float * const *rawDataIn, float **rawDataOut, const unsigned cfarray[2][2], const std::function<bool(double)> &setProgCancel, double fitParams[2][2][16], bool fitParamsIn, float inputScale = 65535.f, float outputScale = 65535.f, size_t chunkSize = 2, bool measure = false);
RTPROCESS_API rpError HLRecovery_inpaint(const int width, const int height, float **red, float **green, float **blue, const float chmax[3], const float clmax[3], const std::function<bool(double)> &setProgCancel);

extern "C" {

#endif

RTPROCESS_API enum rpError rt_process_bayerborder_demosaic(int winw, int winh, int lborders, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2]);
RTPROCESS_API void rt_process_xtransborder_demosaic(int winw, int winh, int border, const float * const *rawData, float **red, float **green, float **blue, const unsigned xtrans[6][6]);
RTPROCESS_API enum rpError rt_process_ahd_demosaic(int width, int height, const float* const* rawData, float** red, float** green, float** blue, const unsigned cfarray[2][2], const float rgb_cam[3][4], bool(* setProgCancel)(double));
RTPROCESS_API enum rpError rt_process_amaze_demosaic(int raw_width, int raw_height, int winx, int winy, int winw, int winh, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), double initGain, int border, float inputScale, float outputScale, size_t chunkSize, bool measure);
RTPROCESS_API enum rpError rt_process_bayerfast_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), double initGain);
RTPROCESS_API enum rpError rt_process_dcb_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), int iterations, bool dcb_enhance);
RTPROCESS_API enum rpError rt_process_hphd_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double));
RTPROCESS_API enum rpError rt_process_rcd_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), size_t chunkSize, bool measure, bool multiThread);
RTPROCESS_API enum rpError rt_process_markesteijn_demosaic(int width, int height, const float * const *rawdata, float **red, float **green, float **blue, const unsigned xtrans[6][6], const float rgb_cam[3][4], bool(* setProgCancel)(double), const int passes, const bool useCieLab, size_t chunkSize, bool measure);
RTPROCESS_API enum rpError rt_process_xtransfast_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned xtrans[6][6], bool(* setProgCancel)(double));
RTPROCESS_API enum rpError rt_process_vng4_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double));
RTPROCESS_API enum rpError rt_process_igv_demosaic(int winw, int winh, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double));
RTPROCESS_API enum rpError rt_process_lmmse_demosaic(int width, int height, const float * const *rawData, float **red, float **green, float **blue, const unsigned cfarray[2][2], bool(* setProgCancel)(double), int iterations);
RTPROCESS_API enum rpError rt_process_CA_correct(int winx, int winy, int winw, int winh, const bool autoCA, size_t autoIterations, const double cared, const double cablue, bool avoidColourshift, const float * const *rawDataIn, float **rawDataOut, const unsigned cfarray[2][2], bool(* setProgCancel)(double), double fitParams[2][2][16], bool fitParamsIn, float inputScale, float outputScale, size_t chunkSize, bool measure);
RTPROCESS_API enum rpError rt_process_HLRecovery_inpaint(const int width, const int height, float **red, float **green, float **blue, const float chmax[3], const float clmax[3], bool(* setProgCancel)(double));

#ifdef __cplusplus
}
#endif

#endif