Exemplo n.º 1
0
GdkPixbuf *
rs_raf_load_thumb(RAWFILE *rawfile)
{
	GdkPixbuf *pixbuf = NULL;
	guint start;
	guint length;

	if (raw_strcmp(rawfile, 0, "FUJIFILM", 8))
	{
		raw_get_uint(rawfile, 84, &start);
		raw_get_uint(rawfile, 88, &length);
		pixbuf = raw_get_pixbuf(rawfile, start, length);
	}

	if (pixbuf)
	{
		GdkPixbuf *pixbuf2;
		gint width = gdk_pixbuf_get_width(pixbuf);
		gint height = gdk_pixbuf_get_height(pixbuf);
		rs_constrain_to_bounding_box(128, 128, &width, &height);
		pixbuf2 = gdk_pixbuf_scale_simple(pixbuf, width, height, GDK_INTERP_BILINEAR);

		g_object_unref(pixbuf);
		pixbuf = pixbuf2;

		/* Apparently raf-files does not contain any information about rotation ?! */
	}

	return pixbuf;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
0
/*
 * Search registration device
 */
DevCB* searchDevCB(RAW_U8 *devnm )
{
	LIST	*q;
	DevCB	*devcb;

	for ( q = UsedDevCB.next; q != &UsedDevCB; q = q->next ) {
		devcb = (DevCB*)q;

		if (raw_strcmp((char*)devcb->devnm, (char*)devnm) == 0 ) {
			return devcb; /* Found */
		}
	}

	return 0;
}