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
100typedef struct _morpho_EasyHDR morpho_EasyHDR;
101typedef struct _morpho_EasyHDR_Callback morpho_EasyHDR_Callback;
102
103/*-----------------------------------------------------------------*/
104
105/** EasyHDR */
106struct _morpho_EasyHDR
107{
108    void *p; /**< à\¢ÌÖÌ|C^ */
109};
110
111/** EasyHDR Callback (for multi-thread processing) */
112struct _morpho_EasyHDR_Callback
113{
114    void *p; /**< R[obNÖÌæêøƵÄn³êél */
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
136extern "C"
137{
138#endif
139
140/*-----------------------------------------------------------------*/
141
142/**
143 * o[W¶ñðæ¾
144 *
145 * @return o[W¶ñ(MORPHO_EASY_HDR_VER)
146 */
147MORPHO_API(char const *)
148morpho_EasyHDR_getVersion(void);
149
150/*-----------------------------------------------------------------*/
151
152/**
153 * KvÈTCYðæ¾
154 *
155 * @param[in]  max_width   üÍæÌÅå
156 * @param[in]  max_height  üÍæÌÅå³
157 * @param[in]  format      ætH[}bg¶ñ
158 *
159 * @return KvÈTCY(byte)
160 */
161MORPHO_API(int)
162morpho_EasyHDR_getBufferSize(
163    int max_width,
164    int max_height,
165    char const *format);
166
167/**
168 * ú»
169 *
170 * gpXbhÉ0ȺÌlðÝèµ½êA
171 * ªÀsðs¤B
172 *
173 * gpXbhÉ1ÈãÌlðÝèµ½êA
174 * êÀsðs¤B
175 *
176 * gpXbhÉ2ÈãÌlðÝèµ½êA
177 * }`XbhÉæéÀñÀs(êÀs)ðs¤B
178 * callback ÉKØÈlðÝè·éKv èB
179 *
180 * yÀsóÔÌJÚz
181 *     ?_UNKNOWN ¨ 0_INITIALIZED
182 *
183 * @param[in,out]  p            EasyHDR CX^X
184 * @param[out]     buffer       EasyHDRÉèÄéÖÌ|C^
185 * @param[in]      buffer_size  EasyHDRÉèÄéÌTCY
186 * @param[in]      nthreads     gpXbh (RA)
187 * @param[in]      callback     R[obNÖQ
188 *
189 * @return G[R[h (see morpho_error.h)
190 */
191MORPHO_API(int)
192morpho_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() ÀsãÉÀsÂ\
202 *
203 * @param[in,out]  p  EasyHDR CX^X
204 *
205 * @return G[R[h (see morpho_error.h)
206 */
207MORPHO_API(int)
208morpho_EasyHDR_finalize(
209    morpho_EasyHDR *p);
210
211/*-----------------------------------------------------------------*/
212
213/**
214 * ¬ÌJnEÀs
215 * setImageFormat() ÀsãÉÀsÂ\
216 *
217 * yÀsóÔÌJÚ (êÀs)z
218 *     0_INITIALIZED ¨ (1_PROCESSING) ¨ 0_INITIALIZED (®¹)
219 *                                     ¨ 2_SUSPENDED   (suspend()ÄÑoµ)
220 *
221 * yÀsóÔÌJÚ (ªÀs)z
222 *     0_INITIALIZED ¨ 3_PAUSED      ()
223 *                   ¨ 0_INITIALIZED (®¹)
224 *
225 * @param[in,out]  p             EasyHDR CX^X
226 * @param[out]     output_image  Êæ (u1ÚvÌüÍæðwèÂ\)
227 * @param[in,out]  input_images  üÍæQ (GWÉæÁÄ«·¦çêé)
228 * @param[in]      nimages       üÍæÌ
229 *
230 * @return G[R[h (see morpho_error.h)
231 */
232MORPHO_API(int)
233morpho_EasyHDR_merge(
234    morpho_EasyHDR *p,
235    morpho_ImageData *output_image,
236    morpho_ImageData *input_images[],
237    int nimages);
238
239/*-----------------------------------------------------------------*/
240
241/**
242 * ¬Ìp±Às
243 *
244 * merge() ÀsãÉÀsÂ\
245 *
246 * ªÀs(initialize() Å nthreads É 0 ðw赽ƫ)ÌÝLø
247 *
248 * yÀsóÔÌJÚ (ªÀ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 */
256MORPHO_API(int)
257morpho_EasyHDR_process(
258    morpho_EasyHDR *p);
259
260/*-----------------------------------------------------------------*/
261
262/**
263 * ¬Ìf (ÊReLXg©çÌÄÑoµÉæé)
264 * merge() ÀsÉÀsÂ\
265 *
266 * yÀsóÔÌJÚ (êÀ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 */
273MORPHO_API(int)
274morpho_EasyHDR_suspend(
275    morpho_EasyHDR *p);
276
277/**
278 * ¬ÌÄJ
279 * suspend() ÀsãÉÀsÂ\
280 *
281 * yÀsóÔÌJÚ (êÀ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 */
289MORPHO_API(int)
290morpho_EasyHDR_resume(
291    morpho_EasyHDR *p);
292
293/*-----------------------------------------------------------------*/
294
295/**
296 * ætH[}bgÌÝè
297 * initialize() ÀsãÉÀsÂ\
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 */
304MORPHO_API(int)
305morpho_EasyHDR_setImageFormat(
306    morpho_EasyHDR *p,
307    char const *format);
308
309/**
310 * ætH[}bgÌæ¾
311 * setImageFormat() ÀsãÉÀsÂ\
312 *
313 * @param[in,out]  p            EasyHDR CX^X
314 * @param[out]     buffer       ætH[}bgð çí·¶ñªi[³êéobt@
315 * @param[in]      buffer_size  obt@ÌTCY(I[¶ÜÞ)
316 *
317 * @return G[R[h (see morpho_error.h)
318 */
319MORPHO_API(int)
320morpho_EasyHDR_getImageFormat(
321    morpho_EasyHDR *p,
322    char *buffer,
323    int buffer_size);
324
325/*-----------------------------------------------------------------*/
326
327/**
328 * Êuí¹(èÔêâ³)ÌL³ÌÝè
329 * initialize() ÀsãÉÀsÂ\
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 */
340MORPHO_API(int)
341morpho_EasyHDR_setImageAlignmentStatus(
342    morpho_EasyHDR *p,
343    int value);
344
345/**
346 * Êuí¹(èÔêâ³)ÌL³Ìæ¾
347 * initialize() ÀsãÉÀsÂ\
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 */
354MORPHO_API(int)
355morpho_EasyHDR_getImageAlignmentStatus(
356    morpho_EasyHDR *p,
357    int *value);
358
359/*-----------------------------------------------------------------*/
360
361/**
362 * S[Xg(íÊÌÔêâ³)ÌL³ÌÝè
363 * initialize() ÀsãÉÀsÂ\
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 */
374MORPHO_API(int)
375morpho_EasyHDR_setGhostRemovalStatus(
376    morpho_EasyHDR *p,
377    int value);
378
379/**
380 * S[Xg(íÊÌÔêâ³)ÌL³Ìæ¾
381 * initialize() ÀsãÉÀsÂ\
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 */
388MORPHO_API(int)
389morpho_EasyHDR_getGhostRemovalStatus(
390    morpho_EasyHDR *p,
391    int *value);
392
393/*-----------------------------------------------------------------*/
394
395/**
396 * ©®gå(NbsO)ÌL³ÌÝè
397 * initialize() ÀsãÉÀsÂ\
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 */
408MORPHO_API(int)
409morpho_EasyHDR_setAutoScalingStatus(
410    morpho_EasyHDR *p,
411    int value);
412
413/**
414 * ©®gå(NbsO)ÌL³Ìæ¾
415 * initialize() ÀsãÉÀsÂ\
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 */
422MORPHO_API(int)
423morpho_EasyHDR_getAutoScalingStatus(
424    morpho_EasyHDR *p,
425    int *value);
426
427/*-----------------------------------------------------------------*/
428
429/**
430 * çoâ³ÌL³ÌÝè
431 * initialize() ÀsãÉÀsÂ\
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 */
442MORPHO_API(int)
443morpho_EasyHDR_setFaceDetectionStatus(
444    morpho_EasyHDR *p,
445    int value);
446
447/**
448 * çoâ³ÌL³Ìæ¾
449 * initialize() ÀsãÉÀsÂ\
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 */
456MORPHO_API(int)
457morpho_EasyHDR_getFaceDetectionStatus(
458    morpho_EasyHDR *p,
459    int *value);
460
461/*-----------------------------------------------------------------*/
462
463/**
464 * Fail-soft-merging ÌL³ÌÝè
465 * initialize() ÀsãÉÀsÂ\
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 */
476MORPHO_API(int)
477morpho_EasyHDR_setFailSoftMergingStatus(
478    morpho_EasyHDR *p,
479    int value);
480
481/**
482 * Fail-soft-merging ÌL³Ìæ¾
483 * initialize() ÀsãÉÀsÂ\
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 */
490MORPHO_API(int)
491morpho_EasyHDR_getFailSoftMergingStatus(
492    morpho_EasyHDR *p,
493    int *value);
494
495/*-----------------------------------------------------------------*/
496
497/**
498 * S[Xg»è´xxÌÝè
499 * initialize() ÀsãÉÀsÂ\
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 */
506MORPHO_API(int)
507morpho_EasyHDR_setGhostDetectionSensitivityLevel(
508    morpho_EasyHDR *p,
509    int value);
510
511/**
512 * S[Xg»è´xxÌæ¾
513 * initialize() ÀsãÉÀsÂ\
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 */
520MORPHO_API(int)
521morpho_EasyHDR_getGhostDetectionSensitivityLevel(
522    morpho_EasyHDR *p,
523    int *value);
524
525/*-----------------------------------------------------------------*/
526
527/**
528 * ¬Èß穳ÌÝè
529 * initialize() ÀsãÉÀsÂ\
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 */
536MORPHO_API(int)
537morpho_EasyHDR_setMergeSmoothnessLevel(
538    morpho_EasyHDR *p,
539    int value);
540
541/**
542 * ¬Èß穳Ìæ¾
543 * initialize() ÀsãÉÀsÂ\
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 */
550MORPHO_API(int)
551morpho_EasyHDR_getMergeSmoothnessLevel(
552    morpho_EasyHDR *p,
553    int *value);
554
555/*-----------------------------------------------------------------*/
556
557/**
558 * ¬p[^ÌÝè
559 * initialize() ÀsãÉÀsÂ\
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 */
569MORPHO_API(int)
570morpho_EasyHDR_setMergeParameters(
571    morpho_EasyHDR *p,
572    int value1,
573    int value2,
574    int value3,
575    int value4);
576
577/**
578 * ¬p[^Ìæ¾
579 * initialize() ÀsãÉÀsÂ\
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 */
589MORPHO_API(int)
590morpho_EasyHDR_getMergeParameters(
591    morpho_EasyHDR *p,
592    int *value1,
593    int *value2,
594    int *value3,
595    int *value4);
596
597/*-----------------------------------------------------------------*/
598
599/**
600 * LøÌæèlÌÝè
601 * initialize() ÀsãÉÀsÂ\
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 */
608MORPHO_API(int)
609morpho_EasyHDR_setReliableRectRateThreshold(
610    morpho_EasyHDR *p,
611    int rate);
612
613/**
614 * LøÌæèlÌæ¾
615 * initialize() ÀsãÉÀsÂ\
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 */
622MORPHO_API(int)
623morpho_EasyHDR_getReliableRectRateThreshold(
624    morpho_EasyHDR *p,
625    int *rate);
626
627/**
628 * LøÌæÌæ¾
629 * initialize() ÀsãÉÀsÂ\
630 * (LøÈlªZbg³êéÌÍ 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 */
637MORPHO_API(int)
638morpho_EasyHDR_getReliableRect(
639    morpho_EasyHDR *p,
640    morpho_RectInt *rect);
641
642/*-----------------------------------------------------------------*/
643
644/**
645 * S[XgèlÌÝè
646 * initialize() ÀsãÉÀsÂ\
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 */
653MORPHO_API(int)
654morpho_EasyHDR_setGhostRateThreshold(
655    morpho_EasyHDR *p,
656    int rate);
657
658/**
659 * S[XgèlÌæ¾
660 * initialize() ÀsãÉÀsÂ\
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 */
667MORPHO_API(int)
668morpho_EasyHDR_getGhostRateThreshold(
669    morpho_EasyHDR *p,
670    int *rate);
671
672/*-----------------------------------------------------------------*/
673
674/**
675 * Fâ³p[^ÌÝè
676 * initialize() ÀsãÉÀsÂ\
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 */
688MORPHO_API(int)
689morpho_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 * Fâ³p[^Ìæ¾
700 * initialize() ÀsãÉÀsÂ\
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 */
712MORPHO_API(int)
713morpho_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() ÀsãÉÀsÂ\
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 */
736MORPHO_API(int)
737morpho_EasyHDR_getMergeStatus(
738    morpho_EasyHDR *p);
739
740/*-----------------------------------------------------------------*/
741
742/**
743 * TlCÌì¬ (oÍæÌk¬)
744 * morpho_EasyHDR_setImageFormat() ÀsãÉÀsÂ\
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 */
752MORPHO_API(int)
753morpho_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