Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

blank image for JPEG XR Encoding

danielwang1971
Beginner
1,108 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
Moderator
1,108 Views
Hello, The attached input bmp file looks corrupted, and cannot open from here. Could you have a check? Thanks, Chao
0 Kudos
danielwang1971
Beginner
1,108 Views
OK,Please try again. Thanks
0 Kudos
danielwang1971
Beginner
1,108 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.
0 Kudos
Reply