private ExifParser( InputStream inputStream, int options, ExifInterface iRef ) throws IOException, ExifInvalidFormatException { if( inputStream == null ) { throw new IOException( "Null argument inputStream to ExifParser" ); } Log.v( TAG, "Reading exif..." ); mSections = new ArrayList<Section>(0); mInterface = iRef; mTiffStream = seekTiffData( inputStream ); mOptions = options; // Log.d( TAG, "sections size: " + mSections.size() ); if( mTiffStream == null ) { return; } parseTiffHeader( mTiffStream ); long offset = mTiffStream.readUnsignedInt(); if( offset > Integer.MAX_VALUE ) { throw new ExifInvalidFormatException( "Invalid offset " + offset ); } mIfd0Position = (int) offset; mIfdType = IfdId.TYPE_IFD_0; if( isIfdRequested( IfdId.TYPE_IFD_0 ) || needToParseOffsetsInCurrentIfd() ) { registerIfd( IfdId.TYPE_IFD_0, offset ); if( offset != DEFAULT_IFD0_OFFSET ) { mDataAboveIfd0 = new byte[(int) offset - DEFAULT_IFD0_OFFSET]; read( mDataAboveIfd0 ); } } }
registerIfd( IfdId.TYPE_IFD_0, offset ); if( offset > DEFAULT_IFD0_OFFSET ) { mDataAboveIfd0 = new byte[(int) offset - DEFAULT_IFD0_OFFSET];
if( isIfdRequested( IfdId.TYPE_IFD_1 ) || isThumbnailRequested() ) { if( ifdOffset != 0 ) { registerIfd( IfdId.TYPE_IFD_1, ifdOffset );
if( isIfdRequested( IfdId.TYPE_IFD_1 ) || isThumbnailRequested() ) { if( ifdOffset != 0 ) { registerIfd( IfdId.TYPE_IFD_1, ifdOffset );
registerIfd( IfdId.TYPE_IFD_1, ifdOffset );
registerIfd( IfdId.TYPE_IFD_1, ifdOffset );
if( tid == TAG_EXIF_IFD && checkAllowed( ifd, ExifInterface.TAG_EXIF_IFD ) ) { if( isIfdRequested( IfdId.TYPE_IFD_EXIF ) || isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ) ) { registerIfd( IfdId.TYPE_IFD_EXIF, tag.getValueAt( 0 ) ); registerIfd( IfdId.TYPE_IFD_GPS, tag.getValueAt( 0 ) ); registerIfd( IfdId.TYPE_IFD_INTEROPERABILITY, tag.getValueAt( 0 ) );
if( tid == TAG_EXIF_IFD && checkAllowed( ifd, ExifInterface.TAG_EXIF_IFD ) ) { if( isIfdRequested( IfdId.TYPE_IFD_EXIF ) || isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ) ) { registerIfd( IfdId.TYPE_IFD_EXIF, tag.getValueAt( 0 ) ); registerIfd( IfdId.TYPE_IFD_GPS, tag.getValueAt( 0 ) ); registerIfd( IfdId.TYPE_IFD_INTEROPERABILITY, tag.getValueAt( 0 ) );