diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/help.raw | 1 | ||||
| -rw-r--r-- | src/imlib.c | 27 | ||||
| -rw-r--r-- | src/options.c | 4 | ||||
| -rw-r--r-- | src/options.h | 1 | 
4 files changed, 21 insertions, 12 deletions
| diff --git a/src/help.raw b/src/help.raw index 03c8348..067e35f 100644 --- a/src/help.raw +++ b/src/help.raw @@ -35,6 +35,7 @@ OPTIONS   -d, --draw-filename       Show the filename in the image window       --draw-tinted         Show overlay texts on semi-transparent background       --draw-exif           Show some Exif information (if compiled with exif=1) +     --auto-rotate         Rotate images according to Exif info (if compiled with exif=1)   -^, --title TITLE         Set window title (see FORMAT SPECIFIERS)   -D, --slideshow-delay NUM Set delay between automatically changing slides       --cycle-once          Exit after one loop through the slideshow diff --git a/src/imlib.c b/src/imlib.c index 16fbfba..193f5f8 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -259,19 +259,22 @@ int feh_load_image(Imlib_Image * im, feh_file * file)  	}  #ifdef HAVE_LIBEXIF -	file->ed = exif_get_data(file->filename); - -	if (file->ed) { -		entry = exif_content_get_entry(file->ed->ifd[EXIF_IFD_0], 0x0112); -		if (entry != NULL) { -			if (*(entry->data) == 3) -				gib_imlib_image_orientate(*im, 2); -			else if (*(entry->data) == 6) -				gib_imlib_image_orientate(*im, 1); -			else if (*(entry->data) == 8) -				gib_imlib_image_orientate(*im, 3); -		} +	int orientation = 0; +	ExifData *exifData = exif_data_new_from_file(file->filename); +	if (exifData) { +		ExifByteOrder byteOrder = exif_data_get_byte_order(exifData); +		ExifEntry *exifEntry = exif_data_get_entry(exifData, EXIF_TAG_ORIENTATION); +		if (exifEntry && opt.auto_rotate) +			orientation = exif_get_short(exifEntry->data, byteOrder);  	} +	file->ed = exifData; + +	if (orientation == 3) +		gib_imlib_image_orientate(*im, 2); +	else if (orientation == 6) +		gib_imlib_image_orientate(*im, 1); +	else if (orientation == 8) +		gib_imlib_image_orientate(*im, 3);  #endif  	D(("Loaded ok\n")); diff --git a/src/options.c b/src/options.c index 9e2ff5a..56323a8 100644 --- a/src/options.c +++ b/src/options.c @@ -396,6 +396,7 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  		{"no-jump-on-resort", 0, 0, 220},  #ifdef HAVE_LIBEXIF  		{"draw-exif"     , 0, 0, 223}, +		{"auto-rotate"   , 0, 0, 242},  #endif  		{"cycle-once"    , 0, 0, 224},  		{"no-xinerama"   , 0, 0, 225}, @@ -730,6 +731,9 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  		case 223:  			opt.draw_exif = 1;  			break; +		case 242: +			opt.auto_rotate = 1; +			break;  #endif  		case 224:  			opt.cycle_once = 1; diff --git a/src/options.h b/src/options.h index c7ce689..5a5ce84 100644 --- a/src/options.h +++ b/src/options.h @@ -51,6 +51,7 @@ struct __fehoptions {  	unsigned char draw_filename;  #ifdef HAVE_LIBEXIF  	unsigned char draw_exif; +	unsigned char auto_rotate;  #endif  	unsigned char list;  	unsigned char quiet; | 
