Exemple #1
0
gboolean
rs_raf_load_meta(const gchar *service, RAWFILE *rawfile, guint offset, RSMetadata *meta)
{
	guint directory;
	guint directory_entries;
	guint entry;
	gushort tag, length;
	gushort temp;

	if (raw_strcmp(rawfile, 0, "FUJIFILM", 8))
	{
		raw_get_uint(rawfile, 84, &meta->preview_start);
		raw_get_uint(rawfile, 88, &meta->preview_length);
		raw_get_uint(rawfile, 92, &directory);

		raw_get_uint(rawfile, directory, &directory_entries);

		offset = directory+4;
		meta->make = MAKE_FUJIFILM;

		if (directory_entries < 256)
		{
			for(entry=0;entry<directory_entries;entry++)
			{
				raw_get_ushort(rawfile, offset, &tag);
				raw_get_ushort(rawfile, offset+2, &length);
				switch(tag)
				{
					case 0x2ff0: /* White balance */
						raw_get_ushort(rawfile, offset+4, &temp);
						meta->cam_mul[G] = temp;
						raw_get_ushort(rawfile, offset+6, &temp);
						meta->cam_mul[R] = temp;
						raw_get_ushort(rawfile, offset+8, &temp);
						meta->cam_mul[G2] = temp;
						raw_get_ushort(rawfile, offset+10, &temp);
						meta->cam_mul[B] = temp;
						rs_metadata_normalize_wb(meta);
						break;
				}
				offset = offset + 4 + length;
			}
		}
		guint meta_offset = 0;
		if (raw_get_uint(rawfile, 100, &meta_offset))
		{
			gushort order = raw_get_byteorder(rawfile);
			rs_filetype_meta_load(".tiff", meta, rawfile, meta_offset);
			raw_set_byteorder(rawfile, order);
			raw_reset_base(rawfile);
		}
		meta->thumbnail = rs_raf_load_thumb(rawfile);
		rs_filetype_meta_load(".tiff", meta, rawfile, meta->preview_start+12);

		return TRUE;
	}
	return FALSE;
}
Exemple #2
0
gboolean
rs_metadata_load_from_file(RSMetadata *metadata, const gchar *filename)
{
	gboolean ret = FALSE;
	RAWFILE *rawfile;

	g_return_val_if_fail(RS_IS_METADATA(metadata), FALSE);
	g_return_val_if_fail(filename != NULL, FALSE);
	g_return_val_if_fail(g_path_is_absolute(filename), FALSE);

	rawfile = raw_open_file(filename);
	if (rawfile)
	{
		ret = rs_filetype_meta_load(filename, metadata, rawfile, 0);
		raw_close_file(rawfile);
	}
	return ret;
}