private boolean needToParseOffsetsInCurrentIfd() { switch( mIfdType ) { case IfdId.TYPE_IFD_0: return isIfdRequested( IfdId.TYPE_IFD_EXIF ) || isIfdRequested( IfdId.TYPE_IFD_GPS ) || isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ) || isIfdRequested( IfdId.TYPE_IFD_1 ); case IfdId.TYPE_IFD_1: return isThumbnailRequested(); case IfdId.TYPE_IFD_EXIF: // The offset to interoperability IFD is located in Exif IFD return isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ); default: return false; } }
private boolean needToParseOffsetsInCurrentIfd() { switch( mIfdType ) { case IfdId.TYPE_IFD_0: return isIfdRequested( IfdId.TYPE_IFD_EXIF ) || isIfdRequested( IfdId.TYPE_IFD_GPS ) || isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ) || isIfdRequested( IfdId.TYPE_IFD_1 ); case IfdId.TYPE_IFD_1: return isThumbnailRequested(); case IfdId.TYPE_IFD_EXIF: // The offset to interoperability IFD is located in Exif IFD return isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ); default: return false; } }
private void registerIfd( int ifdType, long offset ) { // Cast unsigned int to int since the offset is always smaller // than the size of M_EXIF (65536) mCorrespondingEvent.put( (int) offset, new IfdEvent( ifdType, isIfdRequested( ifdType ) ) ); }
private void registerIfd( int ifdType, long offset ) { // Cast unsigned int to int since the offset is always smaller // than the size of M_EXIF (65536) mCorrespondingEvent.put( (int) offset, new IfdEvent( ifdType, isIfdRequested( ifdType ) ) ); }
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 ); } } }
mIfdType = IfdId.TYPE_IFD_0; if( isIfdRequested( IfdId.TYPE_IFD_0 ) || needToParseOffsetsInCurrentIfd() ) { registerIfd( IfdId.TYPE_IFD_0, offset ); if( 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 );
if( mIfdType == IfdId.TYPE_IFD_0 && ( isIfdRequested( IfdId.TYPE_IFD_1 ) || isThumbnailRequested() ) ) { if( ifdOffset > 0 ) { registerIfd( IfdId.TYPE_IFD_1, ifdOffset );
if( mIfdType == IfdId.TYPE_IFD_0 && ( isIfdRequested( IfdId.TYPE_IFD_1 ) || isThumbnailRequested() ) ) { if( ifdOffset > 0 ) { registerIfd( IfdId.TYPE_IFD_1, ifdOffset );
int ifd = tag.getIfd(); 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 ) ); if( isIfdRequested( IfdId.TYPE_IFD_GPS ) ) { registerIfd( IfdId.TYPE_IFD_GPS, tag.getValueAt( 0 ) ); if( isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ) ) { registerIfd( IfdId.TYPE_IFD_INTEROPERABILITY, tag.getValueAt( 0 ) );
int ifd = tag.getIfd(); 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 ) ); if( isIfdRequested( IfdId.TYPE_IFD_GPS ) ) { registerIfd( IfdId.TYPE_IFD_GPS, tag.getValueAt( 0 ) ); if( isIfdRequested( IfdId.TYPE_IFD_INTEROPERABILITY ) ) { registerIfd( IfdId.TYPE_IFD_INTEROPERABILITY, tag.getValueAt( 0 ) );