Example #1
0
int RGBE_ReadPixels_Raw(NvFile *fp, unsigned char *data, int numpixels)
{
  if (NvFRead(data, 4, numpixels, fp) < (size_t)numpixels)
    return rgbe_error(rgbe_read_error,NULL);

  return RGBE_RETURN_SUCCESS;
}
Example #2
0
// loads 24-bit bmp files into 32-bit RGBA texture
unsigned int *LoadBMP(char const *name, int *width, int *height)
{
    NvFile *f = NvFOpen(name);

    if (f == 0)
    {
        LOGW("error opening %s!\n", name);
        return 0;
    }

    BITMAP_HEADER head;
    BMPV3_INFO_HEADER info;

    NvFRead(&head, sizeof(BITMAP_HEADER), 1, f);
    NvFRead(&info, sizeof(BMPV3_INFO_HEADER), 1, f);
    NvFSeek(f, head.bitmapPtr, SEEK_SET);

    *width = info.bWidth;
    *height = info.bHeight;
    uint *imageData = new uint[info.bWidth * info.bHeight];

    int scanSize = (info.bWidth * (info.bBpp >> 3) + 3) & ~0x3;
    uchar *rdata = new uchar[scanSize];

    for (int y = info.bHeight - 1; y >= 0; y--)
    {
        NvFRead(rdata, scanSize, 1, f);
        // shuffle rgb
        int index = y * info.bWidth;

        for (int i = 0; i < info.bWidth; i++)
        {
            imageData[index + i] = (rdata[i * 3] << 16)
                                   | (rdata[i * 3 + 1] << 8) | rdata[i * 3 + 2] | 0xff000000;
        }
    }

    NvFClose(f);
    delete[] rdata;
    LOGI("loaded %ix%i input image", info.bWidth, info.bHeight);

    return imageData;
}
Example #3
0
/* simple read routine.  will not correctly handle run length encoding */
int RGBE_ReadPixels(NvFile *fp, float *data, int numpixels)
{
  unsigned char rgbe[4];

  while(numpixels-- > 0) {
    if (NvFRead(rgbe, sizeof(rgbe), 1, fp) < 1)
      return rgbe_error(rgbe_read_error,NULL);
    rgbe2float(&data[RGBE_DATA_RED],&data[RGBE_DATA_GREEN],
	       &data[RGBE_DATA_BLUE],rgbe);
    data += RGBE_DATA_SIZE;
  }
  return RGBE_RETURN_SUCCESS;
}
Example #4
0
	void*	cBinaryFile::GetDataFile(UINT e_uiStart)
	{
		if(!m_pData)
		{
			if( !m_pFile )
				return 0;
			long l_lFileSize = UT::GetFileSize(this->m_pFile);
			if( l_lFileSize == 0 )
				return 0;
			m_pData = new char[l_lFileSize];
			NvFRead(m_pData,sizeof(char),l_lFileSize,m_pFile);
		}
		char*l_pOutPutData = m_pData;
		l_pOutPutData += e_uiStart;
		return (void*)l_pOutPutData;
	}
Example #5
0
int RGBE_ReadPixels_Raw_RLE(NvFile *fp, unsigned char *data, int scanline_width,
			int num_scanlines)
{
  unsigned char rgbe[4], *scanline_buffer, *ptr, *ptr_end;
  int i, count;
  unsigned char buf[2];

  if ((scanline_width < 8)||(scanline_width > 0x7fff))
    /* run length encoding is not allowed so read flat*/
    return RGBE_ReadPixels_Raw(fp,data,scanline_width*num_scanlines);

  scanline_buffer = NULL;
  /* read in each successive scanline */
  while(num_scanlines > 0) {
    if (NvFRead(rgbe,sizeof(rgbe),1,fp) < 1) {
      free(scanline_buffer);
      return rgbe_error(rgbe_read_error,NULL);
    }

    if ((rgbe[0] != 2)||(rgbe[1] != 2)||(rgbe[2] & 0x80)) {
      /* this file is not run length encoded */
      data[0] = rgbe[0];
      data[1] = rgbe[1];
      data[2] = rgbe[2];
      data[3] = rgbe[3];
      data += RGBE_DATA_SIZE;
      free(scanline_buffer);
      return RGBE_ReadPixels_Raw(fp,data,scanline_width*num_scanlines-1);
    }

    if ((((int)rgbe[2])<<8 | rgbe[3]) != scanline_width) {
      free(scanline_buffer);
      return rgbe_error(rgbe_format_error,(char*)"wrong scanline width");
    }

    if (scanline_buffer == NULL)
      scanline_buffer = (unsigned char *) malloc(sizeof(unsigned char)*4*scanline_width);

    if (scanline_buffer == NULL) 
      return rgbe_error(rgbe_memory_error,(char*)"unable to allocate buffer space");
    
    ptr = &scanline_buffer[0];
    /* read each of the four channels for the scanline into the buffer */
    for(i=0;i<4;i++) {
      ptr_end = &scanline_buffer[(i+1)*scanline_width];
      while(ptr < ptr_end) {
	    if (NvFRead(buf,sizeof(buf[0])*2,1,fp) < 1) {
	      free(scanline_buffer);
	      return rgbe_error(rgbe_read_error,NULL);
	    }
	    if (buf[0] > 128) {
	      /* a run of the same value */
	      count = buf[0]-128;
	      if ((count == 0)||(count > ptr_end - ptr)) {
	        free(scanline_buffer);
	        return rgbe_error(rgbe_format_error,(char*)"bad scanline data");
	      }
	      while(count-- > 0)
	        *ptr++ = buf[1];
	    }
	    else {
	      /* a non-run */
	      count = buf[0];
	      if ((count == 0)||(count > ptr_end - ptr)) {
	        free(scanline_buffer);
	        return rgbe_error(rgbe_format_error,(char*)"bad scanline data");
	      }
	      *ptr++ = buf[1];
	      if (--count > 0) {
	        if (NvFRead(ptr,sizeof(*ptr)*count,1,fp) < 1) {
	          free(scanline_buffer);
	          return rgbe_error(rgbe_read_error,NULL);
	        }
	        ptr += count;
	      }
	    }
      }
    }
    /* copy byte data to output */
    for(i=0;i<scanline_width;i++) {
      data[0] = scanline_buffer[i];
      data[1] = scanline_buffer[i+scanline_width];
      data[2] = scanline_buffer[i+2*scanline_width];
      data[3] = scanline_buffer[i+3*scanline_width];
      data += 4;
    }
    num_scanlines--;
  }
  free(scanline_buffer);
  return RGBE_RETURN_SUCCESS;
}
Example #6
0
size_t MMfread(void * ptr, size_t size, size_t nmemb, MMFILE * stream)
{
    return NvFRead(ptr, size, nmemb, (NvFile*)stream);
}
size_t crRead(void* buff, size_t elsize, size_t nelem, void* handle)
{
	return NvFRead(buff, elsize, nelem, (NvFile*)handle);
}