OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Functions
ossimKakaduCompressor.cpp File Reference
#include "ossimKakaduCompressor.h"
#include "ossimKakaduCommon.h"
#include "ossimKakaduCompressedTarget.h"
#include "ossimKakaduKeywords.h"
#include <ossim/base/ossimBooleanProperty.h>
#include <ossim/base/ossimCommon.h>
#include <ossim/base/ossimException.h>
#include <ossim/base/ossimIpt.h>
#include <ossim/base/ossimKeywordlist.h>
#include <ossim/base/ossimKeywordNames.h>
#include <ossim/base/ossimNotify.h>
#include <ossim/base/ossimNumericProperty.h>
#include <ossim/base/ossimPreferences.h>
#include <ossim/base/ossimStringProperty.h>
#include <ossim/base/ossimTrace.h>
#include <ossim/imaging/ossimImageData.h>
#include <ossim/imaging/ossimImageGeometry.h>
#include <ossim/support_data/ossimGeoTiff.h>
#include <ossim/support_data/ossimGmlSupportData.h>
#include <ossim/support_data/ossimNitfJ2klraTag.h>
#include <jp2.h>
#include <cmath>

Go to the source code of this file.

Functions

void transfer_dwords (kdu_core::kdu_line_buf &dest, kdu_core::kdu_int32 *src, int num_samples, int sample_gap, int src_bits, int original_bits, bool is_signed)
 

Function Documentation

◆ transfer_dwords()

void transfer_dwords ( kdu_core::kdu_line_buf &  dest,
kdu_core::kdu_int32 *  src,
int  num_samples,
int  sample_gap,
int  src_bits,
int  original_bits,
bool  is_signed 
)

Definition at line 199 of file ossimKakaduCompressor.cpp.

202 {
203  if (dest.get_buf16() != NULL)
204  {
205  kdu_core::kdu_sample16 *dp = dest.get_buf16();
206  int upshift = 32-src_bits; assert(upshift >= 0);
207  if (!dest.is_absolute())
208  {
209  if (is_signed)
210  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
211  dp->ival = (kdu_core::kdu_int16)
212  (((*src) << upshift) >> (32-KDU_FIX_POINT));
213  else
214  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
215  dp->ival = (kdu_core::kdu_int16)
216  ((((*src) << upshift)-0x80000000) >> (32-KDU_FIX_POINT));
217  }
218  else
219  { // Reversible processing
220  int downshift = 32-original_bits; assert(downshift >= 0);
221  if (is_signed)
222  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
223  dp->ival = (kdu_core::kdu_int16)
224  (((*src) << upshift) >> downshift);
225  else
226  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
227  dp->ival = (kdu_core::kdu_int16)
228  ((((*src) << upshift) - 0x80000000) >> downshift);
229  }
230  }
231  else
232  {
233  kdu_core::kdu_sample32 *dp = dest.get_buf32();
234  int upshift = 32-src_bits; assert(upshift >= 0);
235  if (!dest.is_absolute())
236  {
237  float scale = 1.0F / (((float)(1<<16)) * ((float)(1<<16)));
238  if (is_signed)
239  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
240  dp->fval = scale * (float)((*src)<<upshift);
241  else
242  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
243  dp->fval = scale * (float)(((*src)<<upshift)-(1<<31));
244  }
245  else
246  {
247  int downshift = 32-original_bits; assert(downshift >= 0);
248  if (is_signed)
249  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
250  dp->ival = ((*src)<<upshift) >> downshift;
251  else
252  for (; num_samples > 0; num_samples--, src+=sample_gap, dp++)
253  dp->ival = (((*src)<<upshift)-(1<<31)) >> downshift;
254  }
255  }
256 }