Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.
Announcements
The Intel sign-in experience has changed to support enhanced security controls. If you sign in, click here for more information.

blank image for JPEG XR Encoding

danielwang1971
Beginner
250 Views

Hello,

II try to use UIC::JpegExEncoder to compress a Mono 640x480  8bit image.Encodiong seems OK no error.

But the result image is blank. Quality is 75.   Do you have any idea?

Thanks

The Bmp and wdp file attached(Rename Camera 1-1.wdp.jpg to Camera 1-1.wdp). And followed is my code:

bool EncodeJPEGXRImage(CIppImage& image,BaseStreamOutput& out,CJPEGXRIppImageInitParam* param,int thread)

{

  Image                 imageCn;

  Rect                  refgrid;

  Point                 origin;

  RectSize              size;

  ImageDataPtr          dataPtr;

  ImageColorSpec        colorSpec;

  ImageDataOrder        dataOrder;

  ImageSamplingGeometry geometry;

  Ipp32u iChannels;

  Ipp32u iPrecision;

  Ipp32u iFormat;

  Ipp32u iDU;

  Ipp32u bAlphaPresent = 0;

  Ipp16u iTilesUniform[4] = {0};

  Ipp32u iWidth = image.Width();

  Ipp32u iHeight = image.Height();

  InputParams inParams;

  Ipp32u i;

 

intalpha_mode = 0;

 

int   aquality = 1;

  JPEGXREncoder encoder;

  iTilesUniform[0] =  0;

  iTilesUniform[1] =  0;

  iTilesUniform[2] =  (iWidth < 16)?0:iWidth/16;

  iTilesUniform[3] =  (iHeight < 16)?0:iHeight/16;

  inParams.iQuality      = (param->Quality* 255)/100;

 

if(inParams.iQuality < 0) inParams.iQuality = 1;

  aquality = inParams.iQuality;

  inParams.iOverlap      = 0;

  inParams.iBands        = 0;

  inParams.iSampling     = 0;

  inParams.iTrim         = 0;

  inParams.bFrequency    = 0;

  inParams.bCMYKD        = 0;

  inParams.iShift        = -1;

  inParams.bAlphaPlane   = 0;

  inParams.pTilesUniform = iTilesUniform;

 

if(ExcStatusOk != encoder.Init())

   

returnfalse;

 

if(ExcStatusOk != encoder.SetParams(inParams))

   

returnfalse;

 

if(ExcStatusOk != encoder.AttachStream(out))

   

returnfalse;

  iChannels  = image.NChannels();

  iPrecision = image.Precision();

  iFormat    = image.Format();

  iDU        = iPrecision/8;

  size.SetWidth(image.Width());

  size.SetHeight(image.Height());

  origin.SetX(0);

  origin.SetY(0);

  refgrid.SetOrigin(origin);

  refgrid.SetSize(size);

  geometry.SetRefGridRect(refgrid);

  geometry.ReAlloc(iChannels);

  geometry.SetEnumSampling(UIC::S444);

  dataOrder.ReAlloc(Interleaved, iChannels);

  dataOrder.PixelStep()[0] = iChannels * iDU;

  dataOrder.LineStep() [0] = image.Step();

  imageCn.ColorSpec().ReAlloc(iChannels);

  imageCn.ColorSpec().SetEnumColorSpace((ImageEnumColorSpace)image.Color());

  imageCn.ColorSpec().SetColorSpecMethod(Enumerated);

  imageCn.ColorSpec().SetComponentToColorMap(Direct);

 

for(i = 0; i < iChannels; i++)

  {

   

if(iPrecision <= 8)

      imageCn.ColorSpec().DataRange().SetAsRange8u(IPP_MAX_8U);

   

elseif(iPrecision <= 16)

    {

     

if(iFormat == IF_UNSIGNED)

        imageCn.ColorSpec().DataRange().SetAsRange16u(IPP_MAX_16U);

     

elseif(iFormat == IF_FIXED)

        imageCn.ColorSpec().DataRange().SetAsRange16s(IPP_MIN_16S, IPP_MAX_16S);

     

else

        imageCn.ColorSpec().DataRange().SetAsRange16f(IPP_MAX_16U);

    }

   

else

    {

     

if(iFormat == IF_UNSIGNED)

        imageCn.ColorSpec().DataRange().SetAsRange32u(IPP_MAX_32U);

     

elseif(iFormat == IF_FIXED)

        imageCn.ColorSpec().DataRange().SetAsRange32s(IPP_MIN_32S, IPP_MAX_32S);

     

else

        imageCn.ColorSpec().DataRange().SetAsRange32f((Ipp32f)IPP_MIN_32S, (Ipp32f)IPP_MAX_32S);

    }

  }

  dataPtr.p8u = image;

  imageCn.Buffer().Attach(&dataPtr, dataOrder, geometry);

 

if(ExcStatusOk != encoder.AttachImage(imageCn))

   

returnfalse;

 

if(ExcStatusOk != encoder.WriteFileHeader(alpha_mode))

   

returnfalse;

 

// Planar alpha support

 

switch(image.Color())

  {

 

caseRGBA:

 

caseBGRA:

 

caseRGBAP:

 

caseBGRAP:

 

caseCMYKA:

    bAlphaPresent = 1;

   

break;

  }

 

if(bAlphaPresent && alpha_mode == 1)

  {

    CIppImage imagePrimary;

    CIppImage imageAlpha;

    IppiSize  iROI = {image.Width(), image.Height()};

    Ipp8u*    pData = image;

    Ipp8u*    pDataPr;

    Ipp8u*    pDataAl;

    Ipp32u    iStep = image.Step();

    Ipp32u    iPStep, iAStep;

    Ipp32u    i, j;

   

if(0 != imagePrimary.Alloc(image.Width(), image.Height(), iChannels - 1, iPrecision, 1))

     

returnfalse;

   

if(0 != imageAlpha.Alloc(image.Width(), image.Height(), 1, iPrecision, 1))

     

returnfalse;

    pDataPr = imagePrimary;

    iPStep  = imagePrimary.Step();

    pDataAl = imageAlpha;

    iAStep  = imageAlpha.Step();

   

if(iPrecision == 8)

    {

     

if(image.Color() == IC_CMYKA)

      {

       

for(i = 0; i < iHeight; i++)

        {

          Ipp8u* pSrc = pData + iStep * i;

          Ipp8u* pDstPr = pDataPr + iPStep * i;

          Ipp8u* pDstAl = pDataAl + iAStep * i;

         

for(j = 0; j < iWidth; j++, pSrc += 5, pDstPr += 4, pDstAl++)

          {

            pDstPr[0] = pSrc[0];

            pDstPr[1] = pSrc[1];

            pDstPr[2] = pSrc[2];

            pDstPr[3] = pSrc[3];

            pDstAl[0] = pSrc[4];

          }

        }

      }

     

else

      {

        ippiCopy_8u_AC4C3R(pData, iStep, pDataPr, iPStep, iROI);

        ippiCopy_8u_C4C1R(pData + 3, iStep, pDataAl, iAStep, iROI);

      }

    }

   

elseif(iPrecision == 16)

    {

     

if(image.Color() == IC_CMYKA)

      {

       

for(i = 0; i < iHeight; i++)

        {

          Ipp16u* pSrc = (Ipp16u*)(pData + iStep * i);

          Ipp16u* pDstPr = (Ipp16u*)(pDataPr + iPStep * i);

          Ipp16u* pDstAl = (Ipp16u*)(pDataAl + iAStep * i);

         

for(j = 0; j < iWidth; j++, pSrc += 5, pDstPr += 4, pDstAl++)

          {

            pDstPr[0] = pSrc[0];

            pDstPr[1] = pSrc[1];

            pDstPr[2] = pSrc[2];

            pDstPr[3] = pSrc[3];

            pDstAl[0] = pSrc[4];

          }

        }

      }

     

else

      {

        ippiCopy_16s_AC4C3R((Ipp16s*)pData, iStep, (Ipp16s*)pDataPr, iPStep, iROI);

        ippiCopy_16s_C4C1R((Ipp16s*)pData + 3, iStep, (Ipp16s*)pDataAl, iAStep, iROI);

      }

    }

   

else

    {

      ippiCopy_32s_AC4C3R((Ipp32s*)pData, iStep, (Ipp32s*)pDataPr, iPStep, iROI);

      ippiCopy_32s_C4C1R((Ipp32s*)pData + 3, iStep, (Ipp32s*)pDataAl, iAStep, iROI);

    }

    geometry.SetRefGridRect(refgrid);

    geometry.ReAlloc(iChannels - 1);

    geometry.SetEnumSampling(UIC::S444);

    dataOrder.ReAlloc(Interleaved, iChannels - 1);

    dataOrder.PixelStep()[0] = (iChannels - 1) * iDU;

    dataOrder.LineStep() [0] = iPStep;

   

switch(imageCn.ColorSpec().EnumColorSpace())

    {

   

caseBGRA:  imageCn.ColorSpec().SetEnumColorSpace(BGR); break;

   

caseRGBA:  imageCn.ColorSpec().SetEnumColorSpace(RGB); break;

   

caseBGRAP: imageCn.ColorSpec().SetEnumColorSpace(BGR); break;

   

caseRGBAP: imageCn.ColorSpec().SetEnumColorSpace(RGB); break;

   

caseCMYKA: imageCn.ColorSpec().SetEnumColorSpace(CMYK);break;

   

default:

     

returnfalse;

    }

    dataPtr.p8u = pDataPr;

    imageCn.Buffer().Attach(&dataPtr, dataOrder, geometry);

   

if(ExcStatusOk != encoder.AttachImage(imageCn))

     

returnfalse;

   

if(ExcStatusOk != encoder.WriteHeader())

     

returnfalse;

   

if(ExcStatusOk != encoder.WriteData())

     

returnfalse;

   

if(ExcStatusOk != encoder.FreeData())

     

returnfalse;

    geometry.SetRefGridRect(refgrid);

    geometry.ReAlloc(1);

    geometry.SetEnumSampling(UIC::S444);

    dataOrder.ReAlloc(Interleaved, 1);

    dataOrder.PixelStep()[0] = iDU;

    dataOrder.LineStep() [0] = iAStep;

    imageCn.ColorSpec().SetEnumColorSpace(Grayscale);

    dataPtr.p8u = pDataAl;

    imageCn.Buffer().Attach(&dataPtr, dataOrder, geometry);

    inParams.iQuality    = aquality;

    inParams.bAlphaPlane = 1;

   

if(ExcStatusOk != encoder.SetParams(inParams))

     

returnfalse;

   

if(ExcStatusOk != encoder.AttachImage(imageCn))

     

returnfalse;

   

if(ExcStatusOk != encoder.WriteHeader())

     

returnfalse;

   

if(ExcStatusOk != encoder.WriteData())

     

returnfalse;

   

if(ExcStatusOk != encoder.FreeData())

     

returnfalse;

  }

 

else

  {

   

if(ExcStatusOk != encoder.WriteHeader())

     

returnfalse;

   

if(ExcStatusOk != encoder.WriteData())

     

returnfalse;

   

if(ExcStatusOk != encoder.FreeData())

     

returnfalse;

  }

 

returntrue;

}

0 Kudos
3 Replies
Chao_Y_Intel
Employee
250 Views
Hello, The attached input bmp file looks corrupted, and cannot open from here. Could you have a check? Thanks, Chao
danielwang1971
Beginner
250 Views
OK,Please try again. Thanks
danielwang1971
Beginner
250 Views
Hi, I found problem:amount of tiles per rows and columns can't be 0. So the fix is: iTilesUniform[0] = 1; iTilesUniform[1] = 1; Thanks.
Reply