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(); };
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); }