File indexing completed on 2025-01-19 03:54:54
0001 /*****************************************************************************/ 0002 // Copyright 2006-2019 Adobe Systems Incorporated 0003 // All Rights Reserved. 0004 // 0005 // NOTICE: Adobe permits you to use, modify, and distribute this file in 0006 // accordance with the terms of the Adobe license agreement accompanying it. 0007 /*****************************************************************************/ 0008 0009 /** \file 0010 * Indirection mechanism for performance-critical routines that might be replaced 0011 * with hand-optimized or hardware-specific implementations. 0012 */ 0013 0014 /*****************************************************************************/ 0015 0016 #ifndef __dng_bottlenecks__ 0017 #define __dng_bottlenecks__ 0018 0019 /*****************************************************************************/ 0020 0021 #include "dng_classes.h" 0022 #include "dng_types.h" 0023 0024 /*****************************************************************************/ 0025 0026 typedef void (ZeroBytesProc) 0027 (void *dPtr, 0028 uint32 count); 0029 0030 typedef void (CopyBytesProc) 0031 (const void *sPtr, 0032 void *dPtr, 0033 uint32 count); 0034 0035 /*****************************************************************************/ 0036 0037 typedef void (SwapBytes16Proc) 0038 (uint16 *dPtr, 0039 uint32 count); 0040 0041 typedef void (SwapBytes32Proc) 0042 (uint32 *dPtr, 0043 uint32 count); 0044 0045 /*****************************************************************************/ 0046 0047 typedef void (SetArea8Proc) 0048 (uint8 *dPtr, 0049 uint8 value, 0050 uint32 rows, 0051 uint32 cols, 0052 uint32 planes, 0053 int32 rowStep, 0054 int32 colStep, 0055 int32 planeStep); 0056 0057 typedef void (SetArea16Proc) 0058 (uint16 *dPtr, 0059 uint16 value, 0060 uint32 rows, 0061 uint32 cols, 0062 uint32 planes, 0063 int32 rowStep, 0064 int32 colStep, 0065 int32 planeStep); 0066 0067 typedef void (SetArea32Proc) 0068 (uint32 *dPtr, 0069 uint32 value, 0070 uint32 rows, 0071 uint32 cols, 0072 uint32 planes, 0073 int32 rowStep, 0074 int32 colStep, 0075 int32 planeStep); 0076 0077 /*****************************************************************************/ 0078 0079 typedef void (CopyArea8Proc) 0080 (const uint8 *sPtr, 0081 uint8 *dPtr, 0082 uint32 rows, 0083 uint32 cols, 0084 uint32 planes, 0085 int32 sRowStep, 0086 int32 sColStep, 0087 int32 sPlaneStep, 0088 int32 dRowStep, 0089 int32 dColStep, 0090 int32 dPlaneStep); 0091 0092 typedef void (CopyArea16Proc) 0093 (const uint16 *sPtr, 0094 uint16 *dPtr, 0095 uint32 rows, 0096 uint32 cols, 0097 uint32 planes, 0098 int32 sRowStep, 0099 int32 sColStep, 0100 int32 sPlaneStep, 0101 int32 dRowStep, 0102 int32 dColStep, 0103 int32 dPlaneStep); 0104 0105 typedef void (CopyArea32Proc) 0106 (const uint32 *sPtr, 0107 uint32 *dPtr, 0108 uint32 rows, 0109 uint32 cols, 0110 uint32 planes, 0111 int32 sRowStep, 0112 int32 sColStep, 0113 int32 sPlaneStep, 0114 int32 dRowStep, 0115 int32 dColStep, 0116 int32 dPlaneStep); 0117 0118 typedef void (CopyArea8_16Proc) 0119 (const uint8 *sPtr, 0120 uint16 *dPtr, 0121 uint32 rows, 0122 uint32 cols, 0123 uint32 planes, 0124 int32 sRowStep, 0125 int32 sColStep, 0126 int32 sPlaneStep, 0127 int32 dRowStep, 0128 int32 dColStep, 0129 int32 dPlaneStep); 0130 0131 typedef void (CopyArea8_S16Proc) 0132 (const uint8 *sPtr, 0133 int16 *dPtr, 0134 uint32 rows, 0135 uint32 cols, 0136 uint32 planes, 0137 int32 sRowStep, 0138 int32 sColStep, 0139 int32 sPlaneStep, 0140 int32 dRowStep, 0141 int32 dColStep, 0142 int32 dPlaneStep); 0143 0144 typedef void (CopyArea8_32Proc) 0145 (const uint8 *sPtr, 0146 uint32 *dPtr, 0147 uint32 rows, 0148 uint32 cols, 0149 uint32 planes, 0150 int32 sRowStep, 0151 int32 sColStep, 0152 int32 sPlaneStep, 0153 int32 dRowStep, 0154 int32 dColStep, 0155 int32 dPlaneStep); 0156 0157 typedef void (CopyArea16_S16Proc) 0158 (const uint16 *sPtr, 0159 int16 *dPtr, 0160 uint32 rows, 0161 uint32 cols, 0162 uint32 planes, 0163 int32 sRowStep, 0164 int32 sColStep, 0165 int32 sPlaneStep, 0166 int32 dRowStep, 0167 int32 dColStep, 0168 int32 dPlaneStep); 0169 0170 typedef void (CopyArea16_32Proc) 0171 (const uint16 *sPtr, 0172 uint32 *dPtr, 0173 uint32 rows, 0174 uint32 cols, 0175 uint32 planes, 0176 int32 sRowStep, 0177 int32 sColStep, 0178 int32 sPlaneStep, 0179 int32 dRowStep, 0180 int32 dColStep, 0181 int32 dPlaneStep); 0182 0183 typedef void (CopyArea8_R32Proc) 0184 (const uint8 *sPtr, 0185 real32 *dPtr, 0186 uint32 rows, 0187 uint32 cols, 0188 uint32 planes, 0189 int32 sRowStep, 0190 int32 sColStep, 0191 int32 sPlaneStep, 0192 int32 dRowStep, 0193 int32 dColStep, 0194 int32 dPlaneStep, 0195 uint32 pixelRange); 0196 0197 typedef void (CopyArea16_R32Proc) 0198 (const uint16 *sPtr, 0199 real32 *dPtr, 0200 uint32 rows, 0201 uint32 cols, 0202 uint32 planes, 0203 int32 sRowStep, 0204 int32 sColStep, 0205 int32 sPlaneStep, 0206 int32 dRowStep, 0207 int32 dColStep, 0208 int32 dPlaneStep, 0209 uint32 pixelRange); 0210 0211 typedef void (CopyAreaS16_R32Proc) 0212 (const int16 *sPtr, 0213 real32 *dPtr, 0214 uint32 rows, 0215 uint32 cols, 0216 uint32 planes, 0217 int32 sRowStep, 0218 int32 sColStep, 0219 int32 sPlaneStep, 0220 int32 dRowStep, 0221 int32 dColStep, 0222 int32 dPlaneStep, 0223 uint32 pixelRange); 0224 0225 typedef void (CopyAreaR32_8Proc) 0226 (const real32 *sPtr, 0227 uint8 *dPtr, 0228 uint32 rows, 0229 uint32 cols, 0230 uint32 planes, 0231 int32 sRowStep, 0232 int32 sColStep, 0233 int32 sPlaneStep, 0234 int32 dRowStep, 0235 int32 dColStep, 0236 int32 dPlaneStep, 0237 uint32 pixelRange); 0238 0239 typedef void (CopyAreaR32_16Proc) 0240 (const real32 *sPtr, 0241 uint16 *dPtr, 0242 uint32 rows, 0243 uint32 cols, 0244 uint32 planes, 0245 int32 sRowStep, 0246 int32 sColStep, 0247 int32 sPlaneStep, 0248 int32 dRowStep, 0249 int32 dColStep, 0250 int32 dPlaneStep, 0251 uint32 pixelRange); 0252 0253 typedef void (CopyAreaR32_S16Proc) 0254 (const real32 *sPtr, 0255 int16 *dPtr, 0256 uint32 rows, 0257 uint32 cols, 0258 uint32 planes, 0259 int32 sRowStep, 0260 int32 sColStep, 0261 int32 sPlaneStep, 0262 int32 dRowStep, 0263 int32 dColStep, 0264 int32 dPlaneStep, 0265 uint32 pixelRange); 0266 0267 /*****************************************************************************/ 0268 0269 typedef void (RepeatArea8Proc) 0270 (const uint8 *sPtr, 0271 uint8 *dPtr, 0272 uint32 rows, 0273 uint32 cols, 0274 uint32 planes, 0275 int32 rowStep, 0276 int32 colStep, 0277 int32 planeStep, 0278 uint32 repeatV, 0279 uint32 repeatH, 0280 uint32 phaseV, 0281 uint32 phaseH); 0282 0283 typedef void (RepeatArea16Proc) 0284 (const uint16 *sPtr, 0285 uint16 *dPtr, 0286 uint32 rows, 0287 uint32 cols, 0288 uint32 planes, 0289 int32 rowStep, 0290 int32 colStep, 0291 int32 planeStep, 0292 uint32 repeatV, 0293 uint32 repeatH, 0294 uint32 phaseV, 0295 uint32 phaseH); 0296 0297 typedef void (RepeatArea32Proc) 0298 (const uint32 *sPtr, 0299 uint32 *dPtr, 0300 uint32 rows, 0301 uint32 cols, 0302 uint32 planes, 0303 int32 rowStep, 0304 int32 colStep, 0305 int32 planeStep, 0306 uint32 repeatV, 0307 uint32 repeatH, 0308 uint32 phaseV, 0309 uint32 phaseH); 0310 0311 /*****************************************************************************/ 0312 0313 typedef void (ShiftRight16Proc) 0314 (uint16 *dPtr, 0315 uint32 rows, 0316 uint32 cols, 0317 uint32 planes, 0318 int32 rowStep, 0319 int32 colStep, 0320 int32 planeStep, 0321 uint32 shift); 0322 0323 /*****************************************************************************/ 0324 0325 typedef void (BilinearRow16Proc) 0326 (const uint16 *sPtr, 0327 uint16 *dPtr, 0328 uint32 cols, 0329 uint32 patPhase, 0330 uint32 patCount, 0331 const uint32 * kernCounts, 0332 const int32 * const * kernOffsets, 0333 const uint16 * const * kernWeights, 0334 uint32 sShift); 0335 0336 typedef void (BilinearRow32Proc) 0337 (const real32 *sPtr, 0338 real32 *dPtr, 0339 uint32 cols, 0340 uint32 patPhase, 0341 uint32 patCount, 0342 const uint32 * kernCounts, 0343 const int32 * const * kernOffsets, 0344 const real32 * const * kernWeights, 0345 uint32 sShift); 0346 0347 /*****************************************************************************/ 0348 0349 typedef void (BaselineABCtoRGBProc) 0350 (const real32 *sPtrA, 0351 const real32 *sPtrB, 0352 const real32 *sPtrC, 0353 real32 *dPtrR, 0354 real32 *dPtrG, 0355 real32 *dPtrB, 0356 uint32 count, 0357 const dng_vector &cameraWhite, 0358 const dng_matrix &cameraToRGB); 0359 0360 typedef void (BaselineABCDtoRGBProc) 0361 (const real32 *sPtrA, 0362 const real32 *sPtrB, 0363 const real32 *sPtrC, 0364 const real32 *sPtrD, 0365 real32 *dPtrR, 0366 real32 *dPtrG, 0367 real32 *dPtrB, 0368 uint32 count, 0369 const dng_vector &cameraWhite, 0370 const dng_matrix &cameraToRGB); 0371 0372 /*****************************************************************************/ 0373 0374 typedef void (BaselineHueSatMapProc) 0375 (const real32 *sPtrR, 0376 const real32 *sPtrG, 0377 const real32 *sPtrB, 0378 real32 *dPtrR, 0379 real32 *dPtrG, 0380 real32 *dPtrB, 0381 uint32 count, 0382 const dng_hue_sat_map &lut, 0383 const dng_1d_table *encodeTable, 0384 const dng_1d_table *decodeTable); 0385 0386 /*****************************************************************************/ 0387 0388 typedef void (BaselineGrayToRGBProc) 0389 (const real32 *sPtrR, 0390 const real32 *sPtrG, 0391 const real32 *sPtrB, 0392 real32 *dPtrG, 0393 uint32 count, 0394 const dng_matrix &matrix); 0395 0396 typedef void (BaselineRGBtoRGBProc) 0397 (const real32 *sPtrR, 0398 const real32 *sPtrG, 0399 const real32 *sPtrB, 0400 real32 *dPtrR, 0401 real32 *dPtrG, 0402 real32 *dPtrB, 0403 uint32 count, 0404 const dng_matrix &matrix); 0405 0406 /*****************************************************************************/ 0407 0408 typedef void (Baseline1DTableProc) 0409 (const real32 *sPtr, 0410 real32 *dPtr, 0411 uint32 count, 0412 const dng_1d_table &table); 0413 0414 /*****************************************************************************/ 0415 0416 typedef void (BaselineRGBToneProc) 0417 (const real32 *sPtrR, 0418 const real32 *sPtrG, 0419 const real32 *sPtrB, 0420 real32 *dPtrR, 0421 real32 *dPtrG, 0422 real32 *dPtrB, 0423 uint32 count, 0424 const dng_1d_table &table); 0425 0426 /*****************************************************************************/ 0427 0428 typedef void (ResampleDown16Proc) 0429 (const uint16 *sPtr, 0430 uint16 *dPtr, 0431 uint32 sCount, 0432 int32 sRowStep, 0433 const int16 *wPtr, 0434 uint32 wCount, 0435 uint32 pixelRange); 0436 0437 typedef void (ResampleDown32Proc) 0438 (const real32 *sPtr, 0439 real32 *dPtr, 0440 uint32 sCount, 0441 int32 sRowStep, 0442 const real32 *wPtr, 0443 uint32 wCount); 0444 0445 /*****************************************************************************/ 0446 0447 typedef void (ResampleAcross16Proc) 0448 (const uint16 *sPtr, 0449 uint16 *dPtr, 0450 uint32 dCount, 0451 const int32 *coord, 0452 const int16 *wPtr, 0453 uint32 wCount, 0454 uint32 wStep, 0455 uint32 pixelRange); 0456 0457 typedef void (ResampleAcross32Proc) 0458 (const real32 *sPtr, 0459 real32 *dPtr, 0460 uint32 dCount, 0461 const int32 *coord, 0462 const real32 *wPtr, 0463 uint32 wCount, 0464 uint32 wStep); 0465 0466 /*****************************************************************************/ 0467 0468 typedef bool (EqualBytesProc) 0469 (const void *sPtr, 0470 const void *dPtr, 0471 uint32 count); 0472 0473 typedef bool (EqualArea8Proc) 0474 (const uint8 *sPtr, 0475 const uint8 *dPtr, 0476 uint32 rows, 0477 uint32 cols, 0478 uint32 planes, 0479 int32 sRowStep, 0480 int32 sColStep, 0481 int32 sPlaneStep, 0482 int32 dRowStep, 0483 int32 dColStep, 0484 int32 dPlaneStep); 0485 0486 typedef bool (EqualArea16Proc) 0487 (const uint16 *sPtr, 0488 const uint16 *dPtr, 0489 uint32 rows, 0490 uint32 cols, 0491 uint32 planes, 0492 int32 sRowStep, 0493 int32 sColStep, 0494 int32 sPlaneStep, 0495 int32 dRowStep, 0496 int32 dColStep, 0497 int32 dPlaneStep); 0498 0499 typedef bool (EqualArea32Proc) 0500 (const uint32 *sPtr, 0501 const uint32 *dPtr, 0502 uint32 rows, 0503 uint32 cols, 0504 uint32 planes, 0505 int32 sRowStep, 0506 int32 sColStep, 0507 int32 sPlaneStep, 0508 int32 dRowStep, 0509 int32 dColStep, 0510 int32 dPlaneStep); 0511 0512 /*****************************************************************************/ 0513 0514 typedef void (VignetteMask16Proc) 0515 (uint16 *mPtr, 0516 uint32 rows, 0517 uint32 cols, 0518 int32 rowStep, 0519 int64 offsetH, 0520 int64 offsetV, 0521 int64 stepH, 0522 int64 stepV, 0523 uint32 tBits, 0524 const uint16 *table); 0525 0526 typedef void (Vignette16Proc) 0527 (int16 *sPtr, 0528 const uint16 *mPtr, 0529 uint32 rows, 0530 uint32 cols, 0531 uint32 planes, 0532 int32 sRowStep, 0533 int32 sPlaneStep, 0534 int32 mRowStep, 0535 uint32 mBits); 0536 0537 /*****************************************************************************/ 0538 0539 typedef void (Vignette32Proc) 0540 (real32 *sPtr, 0541 const uint16 *mPtr, 0542 uint32 rows, 0543 uint32 cols, 0544 uint32 planes, 0545 int32 sRowStep, 0546 int32 sPlaneStep, 0547 int32 mRowStep, 0548 uint32 mBits, 0549 uint16 blackLevel); 0550 0551 /*****************************************************************************/ 0552 0553 typedef void (MapArea16Proc) 0554 (uint16 *dPtr, 0555 uint32 count0, 0556 uint32 count1, 0557 uint32 count2, 0558 int32 step0, 0559 int32 step1, 0560 int32 step2, 0561 const uint16 *map); 0562 0563 /*****************************************************************************/ 0564 0565 typedef void (BaselineMapPoly32Proc) 0566 (real32 *dPtr, 0567 const int32 rowStep, 0568 const uint32 rows, 0569 const uint32 cols, 0570 const uint32 rowPitch, 0571 const uint32 colPitch, 0572 const real32 *coefficients, 0573 const uint32 degree, 0574 uint16 blackLevel); 0575 0576 /*****************************************************************************/ 0577 0578 struct dng_suite 0579 { 0580 ZeroBytesProc *ZeroBytes; 0581 CopyBytesProc *CopyBytes; 0582 SwapBytes16Proc *SwapBytes16; 0583 SwapBytes32Proc *SwapBytes32; 0584 SetArea8Proc *SetArea8; 0585 SetArea16Proc *SetArea16; 0586 SetArea32Proc *SetArea32; 0587 CopyArea8Proc *CopyArea8; 0588 CopyArea16Proc *CopyArea16; 0589 CopyArea32Proc *CopyArea32; 0590 CopyArea8_16Proc *CopyArea8_16; 0591 CopyArea8_S16Proc *CopyArea8_S16; 0592 CopyArea8_32Proc *CopyArea8_32; 0593 CopyArea16_S16Proc *CopyArea16_S16; 0594 CopyArea16_32Proc *CopyArea16_32; 0595 CopyArea8_R32Proc *CopyArea8_R32; 0596 CopyArea16_R32Proc *CopyArea16_R32; 0597 CopyAreaS16_R32Proc *CopyAreaS16_R32; 0598 CopyAreaR32_8Proc *CopyAreaR32_8; 0599 CopyAreaR32_16Proc *CopyAreaR32_16; 0600 CopyAreaR32_S16Proc *CopyAreaR32_S16; 0601 RepeatArea8Proc *RepeatArea8; 0602 RepeatArea16Proc *RepeatArea16; 0603 RepeatArea32Proc *RepeatArea32; 0604 ShiftRight16Proc *ShiftRight16; 0605 BilinearRow16Proc *BilinearRow16; 0606 BilinearRow32Proc *BilinearRow32; 0607 BaselineABCtoRGBProc *BaselineABCtoRGB; 0608 BaselineABCDtoRGBProc *BaselineABCDtoRGB; 0609 BaselineHueSatMapProc *BaselineHueSatMap; 0610 BaselineGrayToRGBProc *BaselineRGBtoGray; 0611 BaselineRGBtoRGBProc *BaselineRGBtoRGB; 0612 Baseline1DTableProc *Baseline1DTable; 0613 BaselineRGBToneProc *BaselineRGBTone; 0614 ResampleDown16Proc *ResampleDown16; 0615 ResampleDown32Proc *ResampleDown32; 0616 ResampleAcross16Proc *ResampleAcross16; 0617 ResampleAcross32Proc *ResampleAcross32; 0618 EqualBytesProc *EqualBytes; 0619 EqualArea8Proc *EqualArea8; 0620 EqualArea16Proc *EqualArea16; 0621 EqualArea32Proc *EqualArea32; 0622 VignetteMask16Proc *VignetteMask16; 0623 Vignette16Proc *Vignette16; 0624 Vignette32Proc *Vignette32; 0625 MapArea16Proc *MapArea16; 0626 BaselineMapPoly32Proc *BaselineMapPoly32; 0627 }; 0628 0629 /*****************************************************************************/ 0630 0631 extern dng_suite gDNGSuite; 0632 0633 /*****************************************************************************/ 0634 0635 inline void DoZeroBytes (void *dPtr, 0636 uint32 count) 0637 { 0638 0639 (gDNGSuite.ZeroBytes) (dPtr, 0640 count); 0641 0642 } 0643 0644 inline void DoCopyBytes (const void *sPtr, 0645 void *dPtr, 0646 uint32 count) 0647 { 0648 0649 (gDNGSuite.CopyBytes) (sPtr, 0650 dPtr, 0651 count); 0652 0653 } 0654 0655 /*****************************************************************************/ 0656 0657 inline void DoSwapBytes16 (uint16 *dPtr, 0658 uint32 count) 0659 { 0660 0661 (gDNGSuite.SwapBytes16) (dPtr, 0662 count); 0663 0664 } 0665 0666 inline void DoSwapBytes32 (uint32 *dPtr, 0667 uint32 count) 0668 { 0669 0670 (gDNGSuite.SwapBytes32) (dPtr, 0671 count); 0672 0673 } 0674 0675 /*****************************************************************************/ 0676 0677 inline void DoSetArea8 (uint8 *dPtr, 0678 uint8 value, 0679 uint32 rows, 0680 uint32 cols, 0681 uint32 planes, 0682 int32 rowStep, 0683 int32 colStep, 0684 int32 planeStep) 0685 { 0686 0687 (gDNGSuite.SetArea8) (dPtr, 0688 value, 0689 rows, 0690 cols, 0691 planes, 0692 rowStep, 0693 colStep, 0694 planeStep); 0695 0696 } 0697 0698 inline void DoSetArea16 (uint16 *dPtr, 0699 uint16 value, 0700 uint32 rows, 0701 uint32 cols, 0702 uint32 planes, 0703 int32 rowStep, 0704 int32 colStep, 0705 int32 planeStep) 0706 { 0707 0708 (gDNGSuite.SetArea16) (dPtr, 0709 value, 0710 rows, 0711 cols, 0712 planes, 0713 rowStep, 0714 colStep, 0715 planeStep); 0716 0717 } 0718 0719 inline void DoSetArea32 (uint32 *dPtr, 0720 uint32 value, 0721 uint32 rows, 0722 uint32 cols, 0723 uint32 planes, 0724 int32 rowStep, 0725 int32 colStep, 0726 int32 planeStep) 0727 { 0728 0729 (gDNGSuite.SetArea32) (dPtr, 0730 value, 0731 rows, 0732 cols, 0733 planes, 0734 rowStep, 0735 colStep, 0736 planeStep); 0737 0738 } 0739 0740 /*****************************************************************************/ 0741 0742 inline void DoCopyArea8 (const uint8 *sPtr, 0743 uint8 *dPtr, 0744 uint32 rows, 0745 uint32 cols, 0746 uint32 planes, 0747 int32 sRowStep, 0748 int32 sColStep, 0749 int32 sPlaneStep, 0750 int32 dRowStep, 0751 int32 dColStep, 0752 int32 dPlaneStep) 0753 { 0754 0755 (gDNGSuite.CopyArea8) (sPtr, 0756 dPtr, 0757 rows, 0758 cols, 0759 planes, 0760 sRowStep, 0761 sColStep, 0762 sPlaneStep, 0763 dRowStep, 0764 dColStep, 0765 dPlaneStep); 0766 0767 } 0768 0769 inline void DoCopyArea16 (const uint16 *sPtr, 0770 uint16 *dPtr, 0771 uint32 rows, 0772 uint32 cols, 0773 uint32 planes, 0774 int32 sRowStep, 0775 int32 sColStep, 0776 int32 sPlaneStep, 0777 int32 dRowStep, 0778 int32 dColStep, 0779 int32 dPlaneStep) 0780 { 0781 0782 (gDNGSuite.CopyArea16) (sPtr, 0783 dPtr, 0784 rows, 0785 cols, 0786 planes, 0787 sRowStep, 0788 sColStep, 0789 sPlaneStep, 0790 dRowStep, 0791 dColStep, 0792 dPlaneStep); 0793 0794 } 0795 0796 inline void DoCopyArea32 (const uint32 *sPtr, 0797 uint32 *dPtr, 0798 uint32 rows, 0799 uint32 cols, 0800 uint32 planes, 0801 int32 sRowStep, 0802 int32 sColStep, 0803 int32 sPlaneStep, 0804 int32 dRowStep, 0805 int32 dColStep, 0806 int32 dPlaneStep) 0807 { 0808 0809 (gDNGSuite.CopyArea32) (sPtr, 0810 dPtr, 0811 rows, 0812 cols, 0813 planes, 0814 sRowStep, 0815 sColStep, 0816 sPlaneStep, 0817 dRowStep, 0818 dColStep, 0819 dPlaneStep); 0820 0821 } 0822 0823 inline void DoCopyArea8_16 (const uint8 *sPtr, 0824 uint16 *dPtr, 0825 uint32 rows, 0826 uint32 cols, 0827 uint32 planes, 0828 int32 sRowStep, 0829 int32 sColStep, 0830 int32 sPlaneStep, 0831 int32 dRowStep, 0832 int32 dColStep, 0833 int32 dPlaneStep) 0834 { 0835 0836 (gDNGSuite.CopyArea8_16) (sPtr, 0837 dPtr, 0838 rows, 0839 cols, 0840 planes, 0841 sRowStep, 0842 sColStep, 0843 sPlaneStep, 0844 dRowStep, 0845 dColStep, 0846 dPlaneStep); 0847 0848 } 0849 0850 inline void DoCopyArea8_S16 (const uint8 *sPtr, 0851 int16 *dPtr, 0852 uint32 rows, 0853 uint32 cols, 0854 uint32 planes, 0855 int32 sRowStep, 0856 int32 sColStep, 0857 int32 sPlaneStep, 0858 int32 dRowStep, 0859 int32 dColStep, 0860 int32 dPlaneStep) 0861 { 0862 0863 (gDNGSuite.CopyArea8_S16) (sPtr, 0864 dPtr, 0865 rows, 0866 cols, 0867 planes, 0868 sRowStep, 0869 sColStep, 0870 sPlaneStep, 0871 dRowStep, 0872 dColStep, 0873 dPlaneStep); 0874 0875 } 0876 0877 inline void DoCopyArea8_32 (const uint8 *sPtr, 0878 uint32 *dPtr, 0879 uint32 rows, 0880 uint32 cols, 0881 uint32 planes, 0882 int32 sRowStep, 0883 int32 sColStep, 0884 int32 sPlaneStep, 0885 int32 dRowStep, 0886 int32 dColStep, 0887 int32 dPlaneStep) 0888 { 0889 0890 (gDNGSuite.CopyArea8_32) (sPtr, 0891 dPtr, 0892 rows, 0893 cols, 0894 planes, 0895 sRowStep, 0896 sColStep, 0897 sPlaneStep, 0898 dRowStep, 0899 dColStep, 0900 dPlaneStep); 0901 0902 } 0903 0904 inline void DoCopyArea16_S16 (const uint16 *sPtr, 0905 int16 *dPtr, 0906 uint32 rows, 0907 uint32 cols, 0908 uint32 planes, 0909 int32 sRowStep, 0910 int32 sColStep, 0911 int32 sPlaneStep, 0912 int32 dRowStep, 0913 int32 dColStep, 0914 int32 dPlaneStep) 0915 { 0916 0917 (gDNGSuite.CopyArea16_S16) (sPtr, 0918 dPtr, 0919 rows, 0920 cols, 0921 planes, 0922 sRowStep, 0923 sColStep, 0924 sPlaneStep, 0925 dRowStep, 0926 dColStep, 0927 dPlaneStep); 0928 0929 } 0930 0931 inline void DoCopyArea16_32 (const uint16 *sPtr, 0932 uint32 *dPtr, 0933 uint32 rows, 0934 uint32 cols, 0935 uint32 planes, 0936 int32 sRowStep, 0937 int32 sColStep, 0938 int32 sPlaneStep, 0939 int32 dRowStep, 0940 int32 dColStep, 0941 int32 dPlaneStep) 0942 { 0943 0944 (gDNGSuite.CopyArea16_32) (sPtr, 0945 dPtr, 0946 rows, 0947 cols, 0948 planes, 0949 sRowStep, 0950 sColStep, 0951 sPlaneStep, 0952 dRowStep, 0953 dColStep, 0954 dPlaneStep); 0955 0956 } 0957 0958 inline void DoCopyArea8_R32 (const uint8 *sPtr, 0959 real32 *dPtr, 0960 uint32 rows, 0961 uint32 cols, 0962 uint32 planes, 0963 int32 sRowStep, 0964 int32 sColStep, 0965 int32 sPlaneStep, 0966 int32 dRowStep, 0967 int32 dColStep, 0968 int32 dPlaneStep, 0969 uint32 pixelRange) 0970 { 0971 0972 (gDNGSuite.CopyArea8_R32) (sPtr, 0973 dPtr, 0974 rows, 0975 cols, 0976 planes, 0977 sRowStep, 0978 sColStep, 0979 sPlaneStep, 0980 dRowStep, 0981 dColStep, 0982 dPlaneStep, 0983 pixelRange); 0984 0985 } 0986 0987 inline void DoCopyArea16_R32 (const uint16 *sPtr, 0988 real32 *dPtr, 0989 uint32 rows, 0990 uint32 cols, 0991 uint32 planes, 0992 int32 sRowStep, 0993 int32 sColStep, 0994 int32 sPlaneStep, 0995 int32 dRowStep, 0996 int32 dColStep, 0997 int32 dPlaneStep, 0998 uint32 pixelRange) 0999 { 1000 1001 (gDNGSuite.CopyArea16_R32) (sPtr, 1002 dPtr, 1003 rows, 1004 cols, 1005 planes, 1006 sRowStep, 1007 sColStep, 1008 sPlaneStep, 1009 dRowStep, 1010 dColStep, 1011 dPlaneStep, 1012 pixelRange); 1013 1014 } 1015 1016 inline void DoCopyAreaS16_R32 (const int16 *sPtr, 1017 real32 *dPtr, 1018 uint32 rows, 1019 uint32 cols, 1020 uint32 planes, 1021 int32 sRowStep, 1022 int32 sColStep, 1023 int32 sPlaneStep, 1024 int32 dRowStep, 1025 int32 dColStep, 1026 int32 dPlaneStep, 1027 uint32 pixelRange) 1028 { 1029 1030 (gDNGSuite.CopyAreaS16_R32) (sPtr, 1031 dPtr, 1032 rows, 1033 cols, 1034 planes, 1035 sRowStep, 1036 sColStep, 1037 sPlaneStep, 1038 dRowStep, 1039 dColStep, 1040 dPlaneStep, 1041 pixelRange); 1042 1043 } 1044 1045 inline void DoCopyAreaR32_8 (const real32 *sPtr, 1046 uint8 *dPtr, 1047 uint32 rows, 1048 uint32 cols, 1049 uint32 planes, 1050 int32 sRowStep, 1051 int32 sColStep, 1052 int32 sPlaneStep, 1053 int32 dRowStep, 1054 int32 dColStep, 1055 int32 dPlaneStep, 1056 uint32 pixelRange) 1057 { 1058 1059 (gDNGSuite.CopyAreaR32_8) (sPtr, 1060 dPtr, 1061 rows, 1062 cols, 1063 planes, 1064 sRowStep, 1065 sColStep, 1066 sPlaneStep, 1067 dRowStep, 1068 dColStep, 1069 dPlaneStep, 1070 pixelRange); 1071 1072 } 1073 1074 inline void DoCopyAreaR32_16 (const real32 *sPtr, 1075 uint16 *dPtr, 1076 uint32 rows, 1077 uint32 cols, 1078 uint32 planes, 1079 int32 sRowStep, 1080 int32 sColStep, 1081 int32 sPlaneStep, 1082 int32 dRowStep, 1083 int32 dColStep, 1084 int32 dPlaneStep, 1085 uint32 pixelRange) 1086 { 1087 1088 (gDNGSuite.CopyAreaR32_16) (sPtr, 1089 dPtr, 1090 rows, 1091 cols, 1092 planes, 1093 sRowStep, 1094 sColStep, 1095 sPlaneStep, 1096 dRowStep, 1097 dColStep, 1098 dPlaneStep, 1099 pixelRange); 1100 1101 } 1102 1103 inline void DoCopyAreaR32_S16 (const real32 *sPtr, 1104 int16 *dPtr, 1105 uint32 rows, 1106 uint32 cols, 1107 uint32 planes, 1108 int32 sRowStep, 1109 int32 sColStep, 1110 int32 sPlaneStep, 1111 int32 dRowStep, 1112 int32 dColStep, 1113 int32 dPlaneStep, 1114 uint32 pixelRange) 1115 { 1116 1117 (gDNGSuite.CopyAreaR32_S16) (sPtr, 1118 dPtr, 1119 rows, 1120 cols, 1121 planes, 1122 sRowStep, 1123 sColStep, 1124 sPlaneStep, 1125 dRowStep, 1126 dColStep, 1127 dPlaneStep, 1128 pixelRange); 1129 1130 } 1131 1132 /*****************************************************************************/ 1133 1134 inline void DoRepeatArea8 (const uint8 *sPtr, 1135 uint8 *dPtr, 1136 uint32 rows, 1137 uint32 cols, 1138 uint32 planes, 1139 int32 rowStep, 1140 int32 colStep, 1141 int32 planeStep, 1142 uint32 repeatV, 1143 uint32 repeatH, 1144 uint32 phaseV, 1145 uint32 phaseH) 1146 { 1147 1148 (gDNGSuite.RepeatArea8) (sPtr, 1149 dPtr, 1150 rows, 1151 cols, 1152 planes, 1153 rowStep, 1154 colStep, 1155 planeStep, 1156 repeatV, 1157 repeatH, 1158 phaseV, 1159 phaseH); 1160 1161 } 1162 1163 inline void DoRepeatArea16 (const uint16 *sPtr, 1164 uint16 *dPtr, 1165 uint32 rows, 1166 uint32 cols, 1167 uint32 planes, 1168 int32 rowStep, 1169 int32 colStep, 1170 int32 planeStep, 1171 uint32 repeatV, 1172 uint32 repeatH, 1173 uint32 phaseV, 1174 uint32 phaseH) 1175 { 1176 1177 (gDNGSuite.RepeatArea16) (sPtr, 1178 dPtr, 1179 rows, 1180 cols, 1181 planes, 1182 rowStep, 1183 colStep, 1184 planeStep, 1185 repeatV, 1186 repeatH, 1187 phaseV, 1188 phaseH); 1189 1190 } 1191 1192 inline void DoRepeatArea32 (const uint32 *sPtr, 1193 uint32 *dPtr, 1194 uint32 rows, 1195 uint32 cols, 1196 uint32 planes, 1197 int32 rowStep, 1198 int32 colStep, 1199 int32 planeStep, 1200 uint32 repeatV, 1201 uint32 repeatH, 1202 uint32 phaseV, 1203 uint32 phaseH) 1204 { 1205 1206 (gDNGSuite.RepeatArea32) (sPtr, 1207 dPtr, 1208 rows, 1209 cols, 1210 planes, 1211 rowStep, 1212 colStep, 1213 planeStep, 1214 repeatV, 1215 repeatH, 1216 phaseV, 1217 phaseH); 1218 1219 } 1220 1221 /*****************************************************************************/ 1222 1223 inline void DoShiftRight16 (uint16 *dPtr, 1224 uint32 rows, 1225 uint32 cols, 1226 uint32 planes, 1227 int32 rowStep, 1228 int32 colStep, 1229 int32 planeStep, 1230 uint32 shift) 1231 { 1232 1233 (gDNGSuite.ShiftRight16) (dPtr, 1234 rows, 1235 cols, 1236 planes, 1237 rowStep, 1238 colStep, 1239 planeStep, 1240 shift); 1241 1242 } 1243 1244 /*****************************************************************************/ 1245 1246 inline void DoBilinearRow16 (const uint16 *sPtr, 1247 uint16 *dPtr, 1248 uint32 cols, 1249 uint32 patPhase, 1250 uint32 patCount, 1251 const uint32 * kernCounts, 1252 const int32 * const * kernOffsets, 1253 const uint16 * const * kernWeights, 1254 uint32 sShift) 1255 { 1256 1257 (gDNGSuite.BilinearRow16) (sPtr, 1258 dPtr, 1259 cols, 1260 patPhase, 1261 patCount, 1262 kernCounts, 1263 kernOffsets, 1264 kernWeights, 1265 sShift); 1266 1267 } 1268 1269 inline void DoBilinearRow32 (const real32 *sPtr, 1270 real32 *dPtr, 1271 uint32 cols, 1272 uint32 patPhase, 1273 uint32 patCount, 1274 const uint32 * kernCounts, 1275 const int32 * const * kernOffsets, 1276 const real32 * const * kernWeights, 1277 uint32 sShift) 1278 { 1279 1280 (gDNGSuite.BilinearRow32) (sPtr, 1281 dPtr, 1282 cols, 1283 patPhase, 1284 patCount, 1285 kernCounts, 1286 kernOffsets, 1287 kernWeights, 1288 sShift); 1289 1290 } 1291 1292 /*****************************************************************************/ 1293 1294 inline void DoBaselineABCtoRGB (const real32 *sPtrA, 1295 const real32 *sPtrB, 1296 const real32 *sPtrC, 1297 real32 *dPtrR, 1298 real32 *dPtrG, 1299 real32 *dPtrB, 1300 uint32 count, 1301 const dng_vector &cameraWhite, 1302 const dng_matrix &cameraToRGB) 1303 { 1304 1305 (gDNGSuite.BaselineABCtoRGB) (sPtrA, 1306 sPtrB, 1307 sPtrC, 1308 dPtrR, 1309 dPtrG, 1310 dPtrB, 1311 count, 1312 cameraWhite, 1313 cameraToRGB); 1314 1315 } 1316 1317 inline void DoBaselineABCDtoRGB (const real32 *sPtrA, 1318 const real32 *sPtrB, 1319 const real32 *sPtrC, 1320 const real32 *sPtrD, 1321 real32 *dPtrR, 1322 real32 *dPtrG, 1323 real32 *dPtrB, 1324 uint32 count, 1325 const dng_vector &cameraWhite, 1326 const dng_matrix &cameraToRGB) 1327 { 1328 1329 (gDNGSuite.BaselineABCDtoRGB) (sPtrA, 1330 sPtrB, 1331 sPtrC, 1332 sPtrD, 1333 dPtrR, 1334 dPtrG, 1335 dPtrB, 1336 count, 1337 cameraWhite, 1338 cameraToRGB); 1339 1340 } 1341 1342 /*****************************************************************************/ 1343 1344 inline void DoBaselineHueSatMap (const real32 *sPtrR, 1345 const real32 *sPtrG, 1346 const real32 *sPtrB, 1347 real32 *dPtrR, 1348 real32 *dPtrG, 1349 real32 *dPtrB, 1350 uint32 count, 1351 const dng_hue_sat_map &lut, 1352 const dng_1d_table *encodeTable, 1353 const dng_1d_table *decodeTable) 1354 { 1355 1356 (gDNGSuite.BaselineHueSatMap) (sPtrR, 1357 sPtrG, 1358 sPtrB, 1359 dPtrR, 1360 dPtrG, 1361 dPtrB, 1362 count, 1363 lut, 1364 encodeTable, 1365 decodeTable); 1366 1367 } 1368 1369 /*****************************************************************************/ 1370 1371 inline void DoBaselineRGBtoGray (const real32 *sPtrR, 1372 const real32 *sPtrG, 1373 const real32 *sPtrB, 1374 real32 *dPtrG, 1375 uint32 count, 1376 const dng_matrix &matrix) 1377 { 1378 1379 (gDNGSuite.BaselineRGBtoGray) (sPtrR, 1380 sPtrG, 1381 sPtrB, 1382 dPtrG, 1383 count, 1384 matrix); 1385 1386 } 1387 1388 inline void DoBaselineRGBtoRGB (const real32 *sPtrR, 1389 const real32 *sPtrG, 1390 const real32 *sPtrB, 1391 real32 *dPtrR, 1392 real32 *dPtrG, 1393 real32 *dPtrB, 1394 uint32 count, 1395 const dng_matrix &matrix) 1396 { 1397 1398 (gDNGSuite.BaselineRGBtoRGB) (sPtrR, 1399 sPtrG, 1400 sPtrB, 1401 dPtrR, 1402 dPtrG, 1403 dPtrB, 1404 count, 1405 matrix); 1406 1407 } 1408 1409 /*****************************************************************************/ 1410 1411 inline void DoBaseline1DTable (const real32 *sPtr, 1412 real32 *dPtr, 1413 uint32 count, 1414 const dng_1d_table &table) 1415 { 1416 1417 (gDNGSuite.Baseline1DTable) (sPtr, 1418 dPtr, 1419 count, 1420 table); 1421 1422 } 1423 1424 /*****************************************************************************/ 1425 1426 inline void DoBaselineRGBTone (const real32 *sPtrR, 1427 const real32 *sPtrG, 1428 const real32 *sPtrB, 1429 real32 *dPtrR, 1430 real32 *dPtrG, 1431 real32 *dPtrB, 1432 uint32 count, 1433 const dng_1d_table &table) 1434 { 1435 1436 (gDNGSuite.BaselineRGBTone) (sPtrR, 1437 sPtrG, 1438 sPtrB, 1439 dPtrR, 1440 dPtrG, 1441 dPtrB, 1442 count, 1443 table); 1444 1445 } 1446 1447 /*****************************************************************************/ 1448 1449 inline void DoResampleDown16 (const uint16 *sPtr, 1450 uint16 *dPtr, 1451 uint32 sCount, 1452 int32 sRowStep, 1453 const int16 *wPtr, 1454 uint32 wCount, 1455 uint32 pixelRange) 1456 { 1457 1458 (gDNGSuite.ResampleDown16) (sPtr, 1459 dPtr, 1460 sCount, 1461 sRowStep, 1462 wPtr, 1463 wCount, 1464 pixelRange); 1465 1466 } 1467 1468 inline void DoResampleDown32 (const real32 *sPtr, 1469 real32 *dPtr, 1470 uint32 sCount, 1471 int32 sRowStep, 1472 const real32 *wPtr, 1473 uint32 wCount) 1474 { 1475 1476 (gDNGSuite.ResampleDown32) (sPtr, 1477 dPtr, 1478 sCount, 1479 sRowStep, 1480 wPtr, 1481 wCount); 1482 1483 } 1484 1485 /*****************************************************************************/ 1486 1487 inline void DoResampleAcross16 (const uint16 *sPtr, 1488 uint16 *dPtr, 1489 uint32 dCount, 1490 const int32 *coord, 1491 const int16 *wPtr, 1492 uint32 wCount, 1493 uint32 wStep, 1494 uint32 pixelRange) 1495 { 1496 1497 (gDNGSuite.ResampleAcross16) (sPtr, 1498 dPtr, 1499 dCount, 1500 coord, 1501 wPtr, 1502 wCount, 1503 wStep, 1504 pixelRange); 1505 1506 } 1507 1508 inline void DoResampleAcross32 (const real32 *sPtr, 1509 real32 *dPtr, 1510 uint32 dCount, 1511 const int32 *coord, 1512 const real32 *wPtr, 1513 uint32 wCount, 1514 uint32 wStep) 1515 { 1516 1517 (gDNGSuite.ResampleAcross32) (sPtr, 1518 dPtr, 1519 dCount, 1520 coord, 1521 wPtr, 1522 wCount, 1523 wStep); 1524 1525 } 1526 1527 /*****************************************************************************/ 1528 1529 inline bool DoEqualBytes (const void *sPtr, 1530 const void *dPtr, 1531 uint32 count) 1532 { 1533 1534 return (gDNGSuite.EqualBytes) (sPtr, 1535 dPtr, 1536 count); 1537 1538 } 1539 1540 inline bool DoEqualArea8 (const uint8 *sPtr, 1541 const uint8 *dPtr, 1542 uint32 rows, 1543 uint32 cols, 1544 uint32 planes, 1545 int32 sRowStep, 1546 int32 sColStep, 1547 int32 sPlaneStep, 1548 int32 dRowStep, 1549 int32 dColStep, 1550 int32 dPlaneStep) 1551 { 1552 1553 return (gDNGSuite.EqualArea8) (sPtr, 1554 dPtr, 1555 rows, 1556 cols, 1557 planes, 1558 sRowStep, 1559 sColStep, 1560 sPlaneStep, 1561 dRowStep, 1562 dColStep, 1563 dPlaneStep); 1564 1565 } 1566 1567 inline bool DoEqualArea16 (const uint16 *sPtr, 1568 const uint16 *dPtr, 1569 uint32 rows, 1570 uint32 cols, 1571 uint32 planes, 1572 int32 sRowStep, 1573 int32 sColStep, 1574 int32 sPlaneStep, 1575 int32 dRowStep, 1576 int32 dColStep, 1577 int32 dPlaneStep) 1578 { 1579 1580 return (gDNGSuite.EqualArea16) (sPtr, 1581 dPtr, 1582 rows, 1583 cols, 1584 planes, 1585 sRowStep, 1586 sColStep, 1587 sPlaneStep, 1588 dRowStep, 1589 dColStep, 1590 dPlaneStep); 1591 1592 } 1593 1594 inline bool DoEqualArea32 (const uint32 *sPtr, 1595 const uint32 *dPtr, 1596 uint32 rows, 1597 uint32 cols, 1598 uint32 planes, 1599 int32 sRowStep, 1600 int32 sColStep, 1601 int32 sPlaneStep, 1602 int32 dRowStep, 1603 int32 dColStep, 1604 int32 dPlaneStep) 1605 { 1606 1607 return (gDNGSuite.EqualArea32) (sPtr, 1608 dPtr, 1609 rows, 1610 cols, 1611 planes, 1612 sRowStep, 1613 sColStep, 1614 sPlaneStep, 1615 dRowStep, 1616 dColStep, 1617 dPlaneStep); 1618 1619 } 1620 1621 /*****************************************************************************/ 1622 1623 inline void DoVignetteMask16 (uint16 *mPtr, 1624 uint32 rows, 1625 uint32 cols, 1626 int32 rowStep, 1627 int64 offsetH, 1628 int64 offsetV, 1629 int64 stepH, 1630 int64 stepV, 1631 uint32 tBits, 1632 const uint16 *table) 1633 { 1634 1635 (gDNGSuite.VignetteMask16) (mPtr, 1636 rows, 1637 cols, 1638 rowStep, 1639 offsetH, 1640 offsetV, 1641 stepH, 1642 stepV, 1643 tBits, 1644 table); 1645 1646 } 1647 1648 /*****************************************************************************/ 1649 1650 inline void DoVignette16 (int16 *sPtr, 1651 const uint16 *mPtr, 1652 uint32 rows, 1653 uint32 cols, 1654 uint32 planes, 1655 int32 sRowStep, 1656 int32 sPlaneStep, 1657 int32 mRowStep, 1658 uint32 mBits) 1659 { 1660 1661 (gDNGSuite.Vignette16) (sPtr, 1662 mPtr, 1663 rows, 1664 cols, 1665 planes, 1666 sRowStep, 1667 sPlaneStep, 1668 mRowStep, 1669 mBits); 1670 1671 } 1672 1673 /*****************************************************************************/ 1674 1675 inline void DoVignette32 (real32 *sPtr, 1676 const uint16 *mPtr, 1677 uint32 rows, 1678 uint32 cols, 1679 uint32 planes, 1680 int32 sRowStep, 1681 int32 sPlaneStep, 1682 int32 mRowStep, 1683 uint32 mBits, 1684 uint16 blackLevel) 1685 { 1686 1687 (gDNGSuite.Vignette32) (sPtr, 1688 mPtr, 1689 rows, 1690 cols, 1691 planes, 1692 sRowStep, 1693 sPlaneStep, 1694 mRowStep, 1695 mBits, 1696 blackLevel); 1697 1698 } 1699 1700 /*****************************************************************************/ 1701 1702 inline void DoMapArea16 (uint16 *dPtr, 1703 uint32 count0, 1704 uint32 count1, 1705 uint32 count2, 1706 int32 step0, 1707 int32 step1, 1708 int32 step2, 1709 const uint16 *map) 1710 { 1711 1712 (gDNGSuite.MapArea16) (dPtr, 1713 count0, 1714 count1, 1715 count2, 1716 step0, 1717 step1, 1718 step2, 1719 map); 1720 1721 } 1722 1723 /*****************************************************************************/ 1724 1725 inline void DoBaselineMapPoly32 (real32 *dPtr, 1726 const int32 rowStep, 1727 const uint32 rows, 1728 const uint32 cols, 1729 const uint32 rowPitch, 1730 const uint32 colPitch, 1731 const real32 *coefficients, 1732 const uint32 degree, 1733 uint16 blackLevel) 1734 { 1735 1736 (gDNGSuite.BaselineMapPoly32) (dPtr, 1737 rowStep, 1738 rows, 1739 cols, 1740 rowPitch, 1741 colPitch, 1742 coefficients, 1743 degree, 1744 blackLevel); 1745 1746 } 1747 1748 /*****************************************************************************/ 1749 1750 #endif 1751 1752 /*****************************************************************************/