@@ -435,16 +435,17 @@ private boolean processMakernote(final int makernoteOffset,
435435
436436 String cameraMake = ifd0Directory == null ? null : ifd0Directory .getString (ExifIFD0Directory .TAG_MAKE );
437437
438- final String firstTwoChars = getReaderString (reader , makernoteOffset , 2 );
439- final String firstThreeChars = getReaderString (reader , makernoteOffset , 3 );
440- final String firstFourChars = getReaderString (reader , makernoteOffset , 4 );
441- final String firstFiveChars = getReaderString (reader , makernoteOffset , 5 );
442- final String firstSixChars = getReaderString (reader , makernoteOffset , 6 );
443- final String firstSevenChars = getReaderString (reader , makernoteOffset , 7 );
444- final String firstEightChars = getReaderString (reader , makernoteOffset , 8 );
445- final String firstNineChars = getReaderString (reader , makernoteOffset , 9 );
446- final String firstTenChars = getReaderString (reader , makernoteOffset , 10 );
447- final String firstTwelveChars = getReaderString (reader , makernoteOffset , 12 );
438+ final String firstTwoChars = getReaderString (reader , makernoteOffset , 2 );
439+ final String firstThreeChars = getReaderString (reader , makernoteOffset , 3 );
440+ final String firstFourChars = getReaderString (reader , makernoteOffset , 4 );
441+ final String firstFiveChars = getReaderString (reader , makernoteOffset , 5 );
442+ final String firstSixChars = getReaderString (reader , makernoteOffset , 6 );
443+ final String firstSevenChars = getReaderString (reader , makernoteOffset , 7 );
444+ final String firstEightChars = getReaderString (reader , makernoteOffset , 8 );
445+ final String firstNineChars = getReaderString (reader , makernoteOffset , 9 );
446+ final String firstTenChars = getReaderString (reader , makernoteOffset , 10 );
447+ final String firstTwelveChars = getReaderString (reader , makernoteOffset , 12 );
448+ final String firstFourteenChars = getReaderString (reader , makernoteOffset , 14 );
448449
449450 boolean byteOrderBefore = reader .isMotorolaByteOrder ();
450451
@@ -459,6 +460,12 @@ private boolean processMakernote(final int makernoteOffset,
459460 // http://exiv2.org/makernote.html
460461 pushDirectory (OlympusMakernoteDirectory .class );
461462 TiffReader .processIfd (this , reader , processedIfdOffsets , makernoteOffset + 12 , makernoteOffset );
463+ } else if ("OM SYSTEM\0 \0 \0 II" .equals (firstFourteenChars )) {
464+ // Olympus Makernote (OM SYSTEM)
465+ // Note that data is relative to the beginning of the makernote
466+ // http://exiv2.org/makernote.html
467+ pushDirectory (OlympusMakernoteDirectory .class );
468+ TiffReader .processIfd (this , reader , processedIfdOffsets , makernoteOffset + 14 , makernoteOffset );
462469 } else if (cameraMake != null && cameraMake .toUpperCase ().startsWith ("MINOLTA" )) {
463470 // Cases seen with the model starting with MINOLTA in capitals seem to have a valid Olympus makernote
464471 // area that commences immediately.
0 commit comments