Home | History | Annotate | Download | only in include
      1 /*******************************************************************
      2  * morpho_easy_hdr.h
      3  * [CP932/CRLF] {  p }
      4  *------------------------------------------------------------------
      5  * Copyright (C) 2010-2012 Morpho,Inc.
      6  *******************************************************************/
      7 
      8 #ifndef MORPHO_EASY_HDR_H
      9 #define MORPHO_EASY_HDR_H
     10 
     11 /*******************************************************************/
     12 
     13 #include "morpho_api.h"
     14 #include "morpho_error.h"
     15 #include "morpho_image_data.h"
     16 #include "morpho_rect_int.h"
     17 
     18 /*******************************************************************/
     19 
     20 #define MORPHO_EASY_HDR_VER "Morpho EasyHDR Ver.2.0.1 2012/07/18"
     21 
     22 /*-----------------------------------------------------------------*/
     23 
     24 /* (input-limitaion) */
     25 
     26 #define MORPHO_EASY_HDR_MIN_IMAGE_WIDTH    100
     27 #define MORPHO_EASY_HDR_MAX_IMAGE_WIDTH   8192
     28 #define MORPHO_EASY_HDR_MIN_IMAGE_HEIGHT   100
     29 #define MORPHO_EASY_HDR_MAX_IMAGE_HEIGHT  8192
     30 #define MORPHO_EASY_HDR_MIN_NIMAGES   2
     31 #define MORPHO_EASY_HDR_MAX_NIMAGES  10
     32 
     33 /*-----------------------------------------------------------------*/
     34 
     35 /* (parameter) */
     36 
     37 #define MORPHO_EASY_HDR_DISABLED 0
     38 #define MORPHO_EASY_HDR_ENABLED  1
     39 
     40 #define MORPHO_EASY_HDR_IMAGE_ALIGNMENT_DEFAULT  MORPHO_EASY_HDR_ENABLED
     41 
     42 #define MORPHO_EASY_HDR_GHOST_REMOVAL_DEFAULT  MORPHO_EASY_HDR_ENABLED
     43 
     44 #define MORPHO_EASY_HDR_AUTO_SCALING_DEFAULT  MORPHO_EASY_HDR_ENABLED
     45 
     46 #define MORPHO_EASY_HDR_FACE_DETECTION_DEFAULT  MORPHO_EASY_HDR_ENABLED
     47 
     48 #define MORPHO_EASY_HDR_FAIL_SOFT_MERGING_DEFAULT  MORPHO_EASY_HDR_ENABLED
     49 
     50 #define MORPHO_EASY_HDR_GHOST_DETECTION_SENSITIVITY_LEVEL_MIN      0
     51 #define MORPHO_EASY_HDR_GHOST_DETECTION_SENSITIVITY_LEVEL_MAX     10
     52 #define MORPHO_EASY_HDR_GHOST_DETECTION_SENSITIVITY_LEVEL_DEFAULT  7
     53 
     54 #define MORPHO_EASY_HDR_MERGE_SMOOTHNESS_LEVEL_MIN      0
     55 #define MORPHO_EASY_HDR_MERGE_SMOOTHNESS_LEVEL_MAX     10
     56 #define MORPHO_EASY_HDR_MERGE_SMOOTHNESS_LEVEL_DEFAULT  6
     57 
     58 #define MORPHO_EASY_HDR_MERGE_PARAM_MIN        0
     59 #define MORPHO_EASY_HDR_MERGE_PARAM_MAX      255
     60 #define MORPHO_EASY_HDR_MERGE_PARAM1_DEFAULT   0
     61 #define MORPHO_EASY_HDR_MERGE_PARAM2_DEFAULT 128
     62 #define MORPHO_EASY_HDR_MERGE_PARAM3_DEFAULT   0
     63 #define MORPHO_EASY_HDR_MERGE_PARAM4_DEFAULT 255
     64 
     65 #define MORPHO_EASY_HDR_RELIABLE_RECT_RATE_THRESHOLD_MIN       0
     66 #define MORPHO_EASY_HDR_RELIABLE_RECT_RATE_THRESHOLD_MAX     100
     67 #define MORPHO_EASY_HDR_RELIABLE_RECT_RATE_THRESHOLD_DEFAULT  80
     68 
     69 #define MORPHO_EASY_HDR_GHOST_RATE_THRESHOLD_MIN       0
     70 #define MORPHO_EASY_HDR_GHOST_RATE_THRESHOLD_MAX     100
     71 #define MORPHO_EASY_HDR_GHOST_RATE_THRESHOLD_DEFAULT  90
     72 
     73 #define MORPHO_EASY_HDR_CC_OFFSET_MIN          0
     74 #define MORPHO_EASY_HDR_CC_OFFSET_MAX        255
     75 #define MORPHO_EASY_HDR_CC_Y_OFFSET_DEFAULT    0
     76 #define MORPHO_EASY_HDR_CC_C_OFFSET_DEFAULT    0
     77 
     78 #define MORPHO_EASY_HDR_CC_GAIN_MIN        100
     79 #define MORPHO_EASY_HDR_CC_GAIN_MAX       2000
     80 #define MORPHO_EASY_HDR_CC_Y_GAIN_DEFAULT 1000
     81 #define MORPHO_EASY_HDR_CC_C_GAIN_DEFAULT 1000
     82 
     83 #define MORPHO_EASY_HDR_CC_GAMMA_MIN        100
     84 #define MORPHO_EASY_HDR_CC_GAMMA_MAX       2000
     85 #define MORPHO_EASY_HDR_CC_Y_GAMMA_DEFAULT 1000
     86 #define MORPHO_EASY_HDR_CC_C_GAMMA_DEFAULT 1000
     87 
     88 /*-----------------------------------------------------------------*/
     89 
     90 /* (merge-status) */
     91 
     92 #define MORPHO_EASY_HDR_OK                             0x00000000
     93 #define MORPHO_EASY_HDR_ERROR_IMAGE_ALIGNMENT_FAILURE  0x00000001
     94 #define MORPHO_EASY_HDR_ERROR_EXP_ESTIMATION_FAILURE   0x00000002
     95 #define MORPHO_EASY_HDR_ERROR_MOSTLY_GHOST             0x00000004
     96 #define MORPHO_EASY_HDR_ERROR_INTERNAL                 0x80000000
     97 
     98 /*******************************************************************/
     99 
    100 typedef struct _morpho_EasyHDR morpho_EasyHDR;
    101 typedef struct _morpho_EasyHDR_Callback morpho_EasyHDR_Callback;
    102 
    103 /*-----------------------------------------------------------------*/
    104 
    105 /** EasyHDR */
    106 struct _morpho_EasyHDR
    107 {
    108     void *p; /**< \|C^ */
    109 };
    110 
    111 /** EasyHDR Callback (for multi-thread processing) */
    112 struct _morpho_EasyHDR_Callback
    113 {
    114     void *p; /**< R[obNnl */
    115 
    116     void * (* thread_create )(void *p, int index, void *(*start_routine)(void *arg), void *arg);
    117     int    (* thread_destroy)(void *p, void *thread);
    118     int    (* thread_join   )(void *p, void *thread, void **value_ptr);
    119 
    120     void * (* mutex_create )(void *p);
    121     int    (* mutex_destroy)(void *p, void *mutex);
    122     int    (* mutex_lock   )(void *p, void *mutex);
    123     int    (* mutex_trylock)(void *p, void *mutex);
    124     int    (* mutex_unlock )(void *p, void *mutex);
    125 
    126     void * (* cond_create   )(void *p);
    127     int    (* cond_destroy  )(void *p, void *cond);
    128     int    (* cond_wait     )(void *p, void *cond, void *lock);
    129     int    (* cond_signal   )(void *p, void *cond);
    130     int    (* cond_broadcast)(void *p, void *cond);
    131 };
    132 
    133 /*******************************************************************/
    134 
    135 #ifdef __cplusplus
    136 extern "C"
    137 {
    138 #endif
    139 
    140 /*-----------------------------------------------------------------*/
    141 
    142 /**
    143  * o[W
    144  *
    145  * @return o[W(MORPHO_EASY_HDR_VER)
    146  */
    147 MORPHO_API(char const *)
    148 morpho_EasyHDR_getVersion(void);
    149 
    150 /*-----------------------------------------------------------------*/
    151 
    152 /**
    153  * KvTCY
    154  *
    155  * @param[in]  max_width   
    156  * @param[in]  max_height  
    157  * @param[in]  format      tH[}bg
    158  *
    159  * @return KvTCY(byte)
    160  */
    161 MORPHO_API(int)
    162 morpho_EasyHDR_getBufferSize(
    163     int max_width,
    164     int max_height,
    165     char const *format);
    166 
    167 /**
    168  * 
    169  *
    170  * gpXbh0lA
    171  * ssB
    172  *
    173  * gpXbh1lA
    174  * ssB
    175  *
    176  * gpXbh2lA
    177  * }`Xbhs(s)sB
    178  * callback KlKvB
    179  *
    180  * ysJz
    181  *     ?_UNKNOWN  0_INITIALIZED
    182  *
    183  * @param[in,out]  p            EasyHDR CX^X
    184  * @param[out]     buffer       EasyHDR|C^
    185  * @param[in]      buffer_size  EasyHDRTCY
    186  * @param[in]      nthreads     gpXbh (RA)
    187  * @param[in]      callback     R[obNQ
    188  *
    189  * @return G[R[h (see morpho_error.h)
    190  */
    191 MORPHO_API(int)
    192 morpho_EasyHDR_initialize(
    193     morpho_EasyHDR *p,
    194     void *buffer,
    195     int buffer_size,
    196     int nthreads,
    197     morpho_EasyHDR_Callback const *callback);
    198 
    199 /**
    200  * N[Abv
    201  * initialize() ss\
    202  *
    203  * @param[in,out]  p  EasyHDR CX^X
    204  *
    205  * @return G[R[h (see morpho_error.h)
    206  */
    207 MORPHO_API(int)
    208 morpho_EasyHDR_finalize(
    209     morpho_EasyHDR *p);
    210 
    211 /*-----------------------------------------------------------------*/
    212 
    213 /**
    214  * JnEs
    215  * setImageFormat() ss\
    216  *
    217  * ysJ (s)z
    218  *     0_INITIALIZED  (1_PROCESSING)  0_INITIALIZED ()
    219  *                                      2_SUSPENDED   (suspend()o)
    220  *
    221  * ysJ (s)z
    222  *     0_INITIALIZED  3_PAUSED      ()
    223  *                    0_INITIALIZED ()
    224  *
    225  * @param[in,out]  p             EasyHDR CX^X
    226  * @param[out]     output_image   (u1vw\)
    227  * @param[in,out]  input_images  Q (GW)
    228  * @param[in]      nimages       
    229  *
    230  * @return G[R[h (see morpho_error.h)
    231  */
    232 MORPHO_API(int)
    233 morpho_EasyHDR_merge(
    234     morpho_EasyHDR *p,
    235     morpho_ImageData *output_image,
    236     morpho_ImageData *input_images[],
    237     int nimages);
    238 
    239 /*-----------------------------------------------------------------*/
    240 
    241 /**
    242  * ps
    243  *
    244  * merge() ss\
    245  *
    246  * s(initialize()  nthreads  0 w)L
    247  *
    248  * ysJ (s)z
    249  *     3_PAUSED  3_PAUSED      ()
    250  *               0_INITIALIZED ()
    251  *
    252  * @param[in,out]  p  EasyHDR CX^X
    253  *
    254  * @return G[R[h (see morpho_error.h)
    255  */
    256 MORPHO_API(int)
    257 morpho_EasyHDR_process(
    258     morpho_EasyHDR *p);
    259 
    260 /*-----------------------------------------------------------------*/
    261 
    262 /**
    263  * f (ReLXgo)
    264  * merge() ss\
    265  *
    266  * ysJ (s)z
    267  *     1_PROCESSING  2_SUSPENDED
    268  *
    269  * @param[in,out]  p  EasyHDR CX^X
    270  *
    271  * @return G[R[h (see morpho_error.h)
    272  */
    273 MORPHO_API(int)
    274 morpho_EasyHDR_suspend(
    275     morpho_EasyHDR *p);
    276 
    277 /**
    278  * J
    279  * suspend() ss\
    280  *
    281  * ysJ (s)z
    282  *     2_SUSPENDED  (1_PROCESSING)  0_INITIALIZED ()
    283  *                                    2_SUSPENDED   (suspend()o)
    284  *
    285  * @param[in,out]  p  EasyHDR CX^X
    286  *
    287  * @return G[R[h (see morpho_error.h)
    288  */
    289 MORPHO_API(int)
    290 morpho_EasyHDR_resume(
    291     morpho_EasyHDR *p);
    292 
    293 /*-----------------------------------------------------------------*/
    294 
    295 /**
    296  * tH[}bg
    297  * initialize() ss\
    298  *
    299  * @param[in,out]  p       EasyHDR CX^X
    300  * @param[in]      format  tH[}bg
    301  *
    302  * @return G[R[h (see morpho_error.h)
    303  */
    304 MORPHO_API(int)
    305 morpho_EasyHDR_setImageFormat(
    306     morpho_EasyHDR *p,
    307     char const *format);
    308 
    309 /**
    310  * tH[}bg
    311  * setImageFormat() ss\
    312  *
    313  * @param[in,out]  p            EasyHDR CX^X
    314  * @param[out]     buffer       tH[}bgi[obt@
    315  * @param[in]      buffer_size  obt@TCY(I[)
    316  *
    317  * @return G[R[h (see morpho_error.h)
    318  */
    319 MORPHO_API(int)
    320 morpho_EasyHDR_getImageFormat(
    321     morpho_EasyHDR *p,
    322     char *buffer,
    323     int buffer_size);
    324 
    325 /*-----------------------------------------------------------------*/
    326 
    327 /**
    328  * u()L
    329  * initialize() ss\
    330  *
    331  * value:
    332  *   MOR_EASY_HDR_ENABLED  : u
    333  *   MOR_EASY_HDR_DISABLED : u
    334  *
    335  * @param[in,out]  p      EasyHDR CX^X
    336  * @param[in]      value  l
    337  *
    338  * @return G[R[h (see morpho_error.h)
    339  */
    340 MORPHO_API(int)
    341 morpho_EasyHDR_setImageAlignmentStatus(
    342     morpho_EasyHDR *p,
    343     int value);
    344 
    345 /**
    346  * u()L
    347  * initialize() ss\
    348  *
    349  * @param[in,out]  p      EasyHDR CX^X
    350  * @param[out]     value  li[
    351  *
    352  * @return G[R[h (see morpho_error.h)
    353  */
    354 MORPHO_API(int)
    355 morpho_EasyHDR_getImageAlignmentStatus(
    356     morpho_EasyHDR *p,
    357     int *value);
    358 
    359 /*-----------------------------------------------------------------*/
    360 
    361 /**
    362  * S[Xg()L
    363  * initialize() ss\
    364  *
    365  * value:
    366  *   MOR_EASY_HDR_ENABLED  : S[Xg
    367  *   MOR_EASY_HDR_DISABLED : S[Xg
    368  *
    369  * @param[in,out]  p      EasyHDR CX^X
    370  * @param[in]      value  l
    371  *
    372  * @return G[R[h (see morpho_error.h)
    373  */
    374 MORPHO_API(int)
    375 morpho_EasyHDR_setGhostRemovalStatus(
    376     morpho_EasyHDR *p,
    377     int value);
    378 
    379 /**
    380  * S[Xg()L
    381  * initialize() ss\
    382  *
    383  * @param[in,out]  p      EasyHDR CX^X
    384  * @param[out]     value  li[
    385  *
    386  * @return G[R[h (see morpho_error.h)
    387  */
    388 MORPHO_API(int)
    389 morpho_EasyHDR_getGhostRemovalStatus(
    390     morpho_EasyHDR *p,
    391     int *value);
    392 
    393 /*-----------------------------------------------------------------*/
    394 
    395 /**
    396  * g(NbsO)L
    397  * initialize() ss\
    398  *
    399  * value:
    400  *   MOR_EASY_HDR_ENABLED  : g
    401  *   MOR_EASY_HDR_DISABLED : g
    402  *
    403  * @param[in,out]  p      EasyHDR CX^X
    404  * @param[in]      value  l
    405  *
    406  * @return G[R[h (see morpho_error.h)
    407  */
    408 MORPHO_API(int)
    409 morpho_EasyHDR_setAutoScalingStatus(
    410     morpho_EasyHDR *p,
    411     int value);
    412 
    413 /**
    414  * g(NbsO)L
    415  * initialize() ss\
    416  *
    417  * @param[in,out]  p      EasyHDR CX^X
    418  * @param[out]     value  li[
    419  *
    420  * @return G[R[h (see morpho_error.h)
    421  */
    422 MORPHO_API(int)
    423 morpho_EasyHDR_getAutoScalingStatus(
    424     morpho_EasyHDR *p,
    425     int *value);
    426 
    427 /*-----------------------------------------------------------------*/
    428 
    429 /**
    430  * oL
    431  * initialize() ss\
    432  *
    433  * value:
    434  *   MOR_EASY_HDR_ENABLED  : o
    435  *   MOR_EASY_HDR_DISABLED : o
    436  *
    437  * @param[in,out]  p      EasyHDR CX^X
    438  * @param[in]      value  l
    439  *
    440  * @return G[R[h (see morpho_error.h)
    441  */
    442 MORPHO_API(int)
    443 morpho_EasyHDR_setFaceDetectionStatus(
    444     morpho_EasyHDR *p,
    445     int value);
    446 
    447 /**
    448  * oL
    449  * initialize() ss\
    450  *
    451  * @param[in,out]  p      EasyHDR CX^X
    452  * @param[out]     value  li[
    453  *
    454  * @return G[R[h (see morpho_error.h)
    455  */
    456 MORPHO_API(int)
    457 morpho_EasyHDR_getFaceDetectionStatus(
    458     morpho_EasyHDR *p,
    459     int *value);
    460 
    461 /*-----------------------------------------------------------------*/
    462 
    463 /**
    464  * Fail-soft-merging L
    465  * initialize() ss\
    466  *
    467  * value:
    468  *   MOR_EASY_HDR_ENABLED  : Fail-soft-merging 
    469  *   MOR_EASY_HDR_DISABLED : Fail-soft-merging 
    470  *
    471  * @param[in,out]  p      EasyHDR CX^X
    472  * @param[in]      value  l
    473  *
    474  * @return G[R[h (see morpho_error.h)
    475  */
    476 MORPHO_API(int)
    477 morpho_EasyHDR_setFailSoftMergingStatus(
    478     morpho_EasyHDR *p,
    479     int value);
    480 
    481 /**
    482  * Fail-soft-merging L
    483  * initialize() ss\
    484  *
    485  * @param[in,out]  p      EasyHDR CX^X
    486  * @param[out]     value  li[
    487  *
    488  * @return G[R[h (see morpho_error.h)
    489  */
    490 MORPHO_API(int)
    491 morpho_EasyHDR_getFailSoftMergingStatus(
    492     morpho_EasyHDR *p,
    493     int *value);
    494 
    495 /*-----------------------------------------------------------------*/
    496 
    497 /**
    498  * S[Xgxx
    499  * initialize() ss\
    500  *
    501  * @param[in,out]  p      EasyHDR CX^X
    502  * @param[in]      value  l
    503  *
    504  * @return G[R[h (see morpho_error.h)
    505  */
    506 MORPHO_API(int)
    507 morpho_EasyHDR_setGhostDetectionSensitivityLevel(
    508     morpho_EasyHDR *p,
    509     int value);
    510 
    511 /**
    512  * S[Xgxx
    513  * initialize() ss\
    514  *
    515  * @param[in,out]  p      EasyHDR CX^X
    516  * @param[out]     value  li[
    517  *
    518  * @return G[R[h (see morpho_error.h)
    519  */
    520 MORPHO_API(int)
    521 morpho_EasyHDR_getGhostDetectionSensitivityLevel(
    522     morpho_EasyHDR *p,
    523     int *value);
    524 
    525 /*-----------------------------------------------------------------*/
    526 
    527 /**
    528  * 
    529  * initialize() ss\
    530  *
    531  * @param[in,out]  p      EasyHDR CX^X
    532  * @param[in]      value  l
    533  *
    534  * @return G[R[h (see morpho_error.h)
    535  */
    536 MORPHO_API(int)
    537 morpho_EasyHDR_setMergeSmoothnessLevel(
    538     morpho_EasyHDR *p,
    539     int value);
    540 
    541 /**
    542  * 
    543  * initialize() ss\
    544  *
    545  * @param[in,out]  p      EasyHDR CX^X
    546  * @param[out]     value  li[
    547  *
    548  * @return G[R[h (see morpho_error.h)
    549  */
    550 MORPHO_API(int)
    551 morpho_EasyHDR_getMergeSmoothnessLevel(
    552     morpho_EasyHDR *p,
    553     int *value);
    554 
    555 /*-----------------------------------------------------------------*/
    556 
    557 /**
    558  * p[^
    559  * initialize() ss\
    560  *
    561  * @param[in,out]  p       EasyHDR CX^X
    562  * @param[in]      value1  l
    563  * @param[in]      value2  l
    564  * @param[in]      value3  l
    565  * @param[in]      value4  l
    566  *
    567  * @return G[R[h (see morpho_error.h)
    568  */
    569 MORPHO_API(int)
    570 morpho_EasyHDR_setMergeParameters(
    571     morpho_EasyHDR *p,
    572     int value1,
    573     int value2,
    574     int value3,
    575     int value4);
    576 
    577 /**
    578  * p[^
    579  * initialize() ss\
    580  *
    581  * @param[in,out]  p       EasyHDR CX^X
    582  * @param[out]     value1  li[
    583  * @param[out]     value2  li[
    584  * @param[out]     value3  li[
    585  * @param[out]     value4  li[
    586  *
    587  * @return G[R[h (see morpho_error.h)
    588  */
    589 MORPHO_API(int)
    590 morpho_EasyHDR_getMergeParameters(
    591     morpho_EasyHDR *p,
    592     int *value1,
    593     int *value2,
    594     int *value3,
    595     int *value4);
    596 
    597 /*-----------------------------------------------------------------*/
    598 
    599 /**
    600  * Ll
    601  * initialize() ss\
    602  *
    603  * @param[in,out]  p     EasyHDR CX^X
    604  * @param[in]      rate  l ( rate % `)
    605  *
    606  * @return G[R[h (see morpho_error.h)
    607  */
    608 MORPHO_API(int)
    609 morpho_EasyHDR_setReliableRectRateThreshold(
    610     morpho_EasyHDR *p,
    611     int rate);
    612 
    613 /**
    614  * Ll
    615  * initialize() ss\
    616  *
    617  * @param[in,out]  p     EasyHDR CX^X
    618  * @param[out]     rate  li[
    619  *
    620  * @return G[R[h (see morpho_error.h)
    621  */
    622 MORPHO_API(int)
    623 morpho_EasyHDR_getReliableRectRateThreshold(
    624     morpho_EasyHDR *p,
    625     int *rate);
    626 
    627 /**
    628  * L
    629  * initialize() ss\
    630  * (LlZbg merge() )
    631  *
    632  * @param[in,out]  p     EasyHDR CX^X
    633  * @param[out]     rect  li[
    634  *
    635  * @return G[R[h (see morpho_error.h)
    636  */
    637 MORPHO_API(int)
    638 morpho_EasyHDR_getReliableRect(
    639     morpho_EasyHDR *p,
    640     morpho_RectInt *rect);
    641 
    642 /*-----------------------------------------------------------------*/
    643 
    644 /**
    645  * S[Xgl
    646  * initialize() ss\
    647  *
    648  * @param[in,out]  p     EasyHDR CX^X
    649  * @param[in]      rate  l
    650  *
    651  * @return G[R[h (see morpho_error.h)
    652  */
    653 MORPHO_API(int)
    654 morpho_EasyHDR_setGhostRateThreshold(
    655     morpho_EasyHDR *p,
    656     int rate);
    657 
    658 /**
    659  * S[Xgl
    660  * initialize() ss\
    661  *
    662  * @param[in,out]  p     EasyHDR CX^X
    663  * @param[out]     rate  li[
    664  *
    665  * @return G[R[h (see morpho_error.h)
    666  */
    667 MORPHO_API(int)
    668 morpho_EasyHDR_getGhostRateThreshold(
    669     morpho_EasyHDR *p,
    670     int *rate);
    671 
    672 /*-----------------------------------------------------------------*/
    673 
    674 /**
    675  * Fp[^
    676  * initialize() ss\
    677  *
    678  * @param[in,out]  p         EasyHDR CX^X
    679  * @param[in]      y_offset  l
    680  * @param[in]      y_gain    l
    681  * @param[in]      y_gamma   l
    682  * @param[in]      c_offset  l
    683  * @param[in]      c_gain    l
    684  * @param[in]      c_gamma   l
    685  *
    686  * @return G[R[h (see morpho_error.h)
    687  */
    688 MORPHO_API(int)
    689 morpho_EasyHDR_setColorCorrectionParameters(
    690     morpho_EasyHDR *p,
    691     int y_offset,
    692     int y_gain,
    693     int y_gamma,
    694     int c_offset,
    695     int c_gain,
    696     int c_gamma);
    697 
    698 /**
    699  * Fp[^
    700  * initialize() ss\
    701  *
    702  * @param[in,out]  p         EasyHDR CX^X
    703  * @param[out]     y_offset  li[
    704  * @param[out]     y_gain    li[
    705  * @param[out]     y_gamma   li[
    706  * @param[out]     c_offset  li[
    707  * @param[out]     c_gain    li[
    708  * @param[out]     c_gamma   li[
    709  *
    710  * @return G[R[h (see morpho_error.h)
    711  */
    712 MORPHO_API(int)
    713 morpho_EasyHDR_getColorCorrectionParameters(
    714     morpho_EasyHDR *p,
    715     int *y_offset,
    716     int *y_gain,
    717     int *y_gamma,
    718     int *c_offset,
    719     int *c_gain,
    720     int *c_gamma);
    721 
    722 /*-----------------------------------------------------------------*/
    723 
    724 /**
    725  * Xe[^X
    726  * initialize() ss\
    727  *
    728  * Xe[^XR[h
    729  *   MORPHO_EASY_HDR_OK
    730  *   MORPHO_EASY_HDR_ERROR_*
    731  *
    732  * @param[in,out]  p  EasyHDR CX^X
    733  *
    734  * @return Xe[^XR[h (MORPHO_EASMORPHO_EASY_HDR_ERROR_
    735  */
    736 MORPHO_API(int)
    737 morpho_EasyHDR_getMergeStatus(
    738     morpho_EasyHDR *p);
    739 
    740 /*-----------------------------------------------------------------*/
    741 
    742 /**
    743  * TlC (ok)
    744  * morpho_EasyHDR_setImageFormat() ss\
    745  *
    746  * @param[in,out]  p                EasyHDR CX^X
    747  * @param[out]     thumbnail_image  o
    748  * @param[in]      output_image     
    749  *
    750  * @return G[R[h (see morpho_error.h)
    751  */
    752 MORPHO_API(int)
    753 morpho_EasyHDR_makeThumbnail(
    754     morpho_EasyHDR *p,
    755     morpho_ImageData *thumbnail_image,
    756     morpho_ImageData const *output_image);
    757 
    758 /*-----------------------------------------------------------------*/
    759 
    760 #ifdef __cplusplus
    761 } /* extern "C" */
    762 #endif
    763 
    764 /*******************************************************************/
    765 
    766 #endif /* !MORPHO_EASY_HDR_H */
    767 
    768 /*******************************************************************/
    769 /* [EOF] */
    770