Exemple #1
0
void read_raw_image(const std::string& url, char** data, size_t& length, size_t& width, size_t& height, size_t& channels, Format& format, const std::string& format_hint) {

  general_ifstream fin(url);
  length = fin.file_size();
  *data = new char[length];
  try {
    fin.read(*data, length);
    if (format_hint == "JPG") {
      format = Format::JPG;
    } else if (format_hint == "PNG") {
      format = Format::PNG;
    } else {
      if (boost::algorithm::iends_with(url, "jpg") ||
          boost::algorithm::iends_with(url, "jpeg")) {
        format = Format::JPG;
      } else if (boost::algorithm::iends_with(url, "png")) {
        format = Format::PNG;
      }
    }
    if (format == Format::JPG) {
      parse_jpeg(*data, length, width, height, channels);
    } else if (format == Format::PNG) {
      parse_png(*data, length, width, height, channels);
    } else {
      log_and_throw(std::string("Unsupported image format. Supported formats are JPG and PNG"));
    }
  } catch (...) {
    delete[] *data;
    *data = NULL;
    length = 0;
    throw;
  }
  fin.close();
};
Exemple #2
0
int main(const int argc, const char **argv)
{
	int in;
	struct stat s;
	uint8_t *data;

	if (argc < 2)
	{
		fprintf(stderr, "Usage: %s infile.jpg\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	const char *filename = argv[1];

	if ((in = open(filename, O_RDONLY)) == -1)
		err(EXIT_FAILURE, "%s", filename);

	if (fstat(in, &s) < 0)
		err(EXIT_FAILURE, "stat %s", filename);

	if (s.st_size == 0)
		errx(EXIT_FAILURE, "%s empty", filename);

	if ((data = mmap(NULL, s.st_size, PROT_READ, MAP_SHARED, in, 0)) == MAP_FAILED)
		err(EXIT_FAILURE, "mmap %s", filename);

	struct jpeg_t jpeg ;
	memset(&jpeg, 0, sizeof(jpeg));
	if (!parse_jpeg(&jpeg, data, s.st_size))
		warnx("Can't parse JPEG");

	//dump_jpeg(&jpeg);
	decode_jpeg(&jpeg);

	munmap(data, s.st_size);
	close(in);

	return EXIT_SUCCESS;
}
static void
process_file (const gchar * fn)
{
  GError *err = NULL;
  gchar *data = NULL;
  gsize size = 0;
  guint i;

  g_print ("===============================================================\n");
  g_print (" %s\n", fn);
  g_print ("===============================================================\n");

  if (!g_file_get_contents (fn, &data, &size, &err)) {
    g_error ("%s", err->message);
    g_error_free (err);
    return;
  }

  parse_jpeg ((const guint8 *) data, size);

  for (i = 0; i < G_N_ELEMENTS (app_segments); ++i) {
    if (app_segments[i] != NULL) {
      GstMapInfo map = GST_MAP_INFO_INIT;

      /* Could parse/extract tags here */
      gst_buffer_map (app_segments[i], &map, GST_MAP_READ);
      g_print ("\tAPP%-2u : %u bytes\n", i, (guint) map.size);
      gst_util_dump_mem ((guchar *) map.data, MIN (map.size, 16));
      gst_buffer_unmap (app_segments[i], &map);
      gst_buffer_unref (app_segments[i]);
      app_segments[i] = NULL;
    }
  }

  g_free (data);
}