package androidx.exifinterface.media; import android.annotation.SuppressLint; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.location.Location; import android.media.MediaDataSource; import android.media.MediaMetadataRetriever; import android.os.Build; import android.system.Os; import android.system.OsConstants; import android.util.Log; import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RestrictTo; import androidx.core.view.InputDeviceCompat; import androidx.media.AudioAttributesCompat; import c.d.b.a.a; import com.discord.widgets.chat.input.MentionUtilsKt; import com.discord.widgets.chat.input.autocomplete.AutocompleteViewModel; import com.google.android.material.badge.BadgeDrawable; import com.google.android.material.shadow.ShadowDrawableWrapper; import com.google.android.material.snackbar.BaseTransientBottomBar; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.DataInput; import java.io.DataInputStream; import java.io.EOFException; import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilterOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.Charset; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.TimeZone; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.CRC32; public class ExifInterface { public static final short ALTITUDE_ABOVE_SEA_LEVEL = 0; public static final short ALTITUDE_BELOW_SEA_LEVEL = 1; public static final Charset ASCII; public static final int[] BITS_PER_SAMPLE_GREYSCALE_1 = {4}; public static final int[] BITS_PER_SAMPLE_GREYSCALE_2 = {8}; public static final int[] BITS_PER_SAMPLE_RGB = {8, 8, 8}; public static final short BYTE_ALIGN_II = 18761; public static final short BYTE_ALIGN_MM = 19789; public static final int COLOR_SPACE_S_RGB = 1; public static final int COLOR_SPACE_UNCALIBRATED = 65535; public static final short CONTRAST_HARD = 2; public static final short CONTRAST_NORMAL = 0; public static final short CONTRAST_SOFT = 1; public static final int DATA_DEFLATE_ZIP = 8; public static final int DATA_HUFFMAN_COMPRESSED = 2; public static final int DATA_JPEG = 6; public static final int DATA_JPEG_COMPRESSED = 7; public static final int DATA_LOSSY_JPEG = 34892; public static final int DATA_PACK_BITS_COMPRESSED = 32773; public static final int DATA_UNCOMPRESSED = 1; private static final Pattern DATETIME_PRIMARY_FORMAT_PATTERN = Pattern.compile("^(\\d{4}):(\\d{2}):(\\d{2})\\s(\\d{2}):(\\d{2}):(\\d{2})$"); private static final Pattern DATETIME_SECONDARY_FORMAT_PATTERN = Pattern.compile("^(\\d{4})-(\\d{2})-(\\d{2})\\s(\\d{2}):(\\d{2}):(\\d{2})$"); private static final int DATETIME_VALUE_STRING_LENGTH = 19; private static final boolean DEBUG = Log.isLoggable(TAG, 3); public static final byte[] EXIF_ASCII_PREFIX = {65, 83, 67, 73, 73, 0, 0, 0}; private static final ExifTag[] EXIF_POINTER_TAGS = {new ExifTag(TAG_SUB_IFD_POINTER, 330, 4), new ExifTag(TAG_EXIF_IFD_POINTER, 34665, 4), new ExifTag(TAG_GPS_INFO_IFD_POINTER, 34853, 4), new ExifTag(TAG_INTEROPERABILITY_IFD_POINTER, 40965, 4), new ExifTag(TAG_ORF_CAMERA_SETTINGS_IFD_POINTER, 8224, 1), new ExifTag(TAG_ORF_IMAGE_PROCESSING_IFD_POINTER, 8256, 1)}; public static final ExifTag[][] EXIF_TAGS; public static final short EXPOSURE_MODE_AUTO = 0; public static final short EXPOSURE_MODE_AUTO_BRACKET = 2; public static final short EXPOSURE_MODE_MANUAL = 1; public static final short EXPOSURE_PROGRAM_ACTION = 6; public static final short EXPOSURE_PROGRAM_APERTURE_PRIORITY = 3; public static final short EXPOSURE_PROGRAM_CREATIVE = 5; public static final short EXPOSURE_PROGRAM_LANDSCAPE_MODE = 8; public static final short EXPOSURE_PROGRAM_MANUAL = 1; public static final short EXPOSURE_PROGRAM_NORMAL = 2; public static final short EXPOSURE_PROGRAM_NOT_DEFINED = 0; public static final short EXPOSURE_PROGRAM_PORTRAIT_MODE = 7; public static final short EXPOSURE_PROGRAM_SHUTTER_PRIORITY = 4; public static final short FILE_SOURCE_DSC = 3; public static final short FILE_SOURCE_OTHER = 0; public static final short FILE_SOURCE_REFLEX_SCANNER = 2; public static final short FILE_SOURCE_TRANSPARENT_SCANNER = 1; public static final short FLAG_FLASH_FIRED = 1; public static final short FLAG_FLASH_MODE_AUTO = 24; public static final short FLAG_FLASH_MODE_COMPULSORY_FIRING = 8; public static final short FLAG_FLASH_MODE_COMPULSORY_SUPPRESSION = 16; public static final short FLAG_FLASH_NO_FLASH_FUNCTION = 32; public static final short FLAG_FLASH_RED_EYE_SUPPORTED = 64; public static final short FLAG_FLASH_RETURN_LIGHT_DETECTED = 6; public static final short FLAG_FLASH_RETURN_LIGHT_NOT_DETECTED = 4; private static final List FLIPPED_ROTATION_ORDER = Arrays.asList(2, 7, 4, 5); public static final short FORMAT_CHUNKY = 1; public static final short FORMAT_PLANAR = 2; public static final short GAIN_CONTROL_HIGH_GAIN_DOWN = 4; public static final short GAIN_CONTROL_HIGH_GAIN_UP = 2; public static final short GAIN_CONTROL_LOW_GAIN_DOWN = 3; public static final short GAIN_CONTROL_LOW_GAIN_UP = 1; public static final short GAIN_CONTROL_NONE = 0; public static final String GPS_DIRECTION_MAGNETIC = "M"; public static final String GPS_DIRECTION_TRUE = "T"; public static final String GPS_DISTANCE_KILOMETERS = "K"; public static final String GPS_DISTANCE_MILES = "M"; public static final String GPS_DISTANCE_NAUTICAL_MILES = "N"; public static final String GPS_MEASUREMENT_2D = "2"; public static final String GPS_MEASUREMENT_3D = "3"; public static final short GPS_MEASUREMENT_DIFFERENTIAL_CORRECTED = 1; public static final String GPS_MEASUREMENT_INTERRUPTED = "V"; public static final String GPS_MEASUREMENT_IN_PROGRESS = "A"; public static final short GPS_MEASUREMENT_NO_DIFFERENTIAL = 0; public static final String GPS_SPEED_KILOMETERS_PER_HOUR = "K"; public static final String GPS_SPEED_KNOTS = "N"; public static final String GPS_SPEED_MILES_PER_HOUR = "M"; private static final Pattern GPS_TIMESTAMP_PATTERN = Pattern.compile("^(\\d{2}):(\\d{2}):(\\d{2})$"); private static final byte[] HEIF_BRAND_HEIC = {104, 101, 105, 99}; private static final byte[] HEIF_BRAND_MIF1 = {109, 105, 102, 49}; private static final byte[] HEIF_TYPE_FTYP = {102, 116, 121, 112}; public static final byte[] IDENTIFIER_EXIF_APP1; private static final byte[] IDENTIFIER_XMP_APP1; private static final ExifTag[] IFD_EXIF_TAGS; private static final int IFD_FORMAT_BYTE = 1; public static final int[] IFD_FORMAT_BYTES_PER_FORMAT = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 1}; private static final int IFD_FORMAT_DOUBLE = 12; private static final int IFD_FORMAT_IFD = 13; public static final String[] IFD_FORMAT_NAMES = {"", "BYTE", "STRING", "USHORT", "ULONG", "URATIONAL", "SBYTE", "UNDEFINED", "SSHORT", "SLONG", "SRATIONAL", "SINGLE", "DOUBLE", "IFD"}; private static final int IFD_FORMAT_SBYTE = 6; private static final int IFD_FORMAT_SINGLE = 11; private static final int IFD_FORMAT_SLONG = 9; private static final int IFD_FORMAT_SRATIONAL = 10; private static final int IFD_FORMAT_SSHORT = 8; private static final int IFD_FORMAT_STRING = 2; private static final int IFD_FORMAT_ULONG = 4; private static final int IFD_FORMAT_UNDEFINED = 7; private static final int IFD_FORMAT_URATIONAL = 5; private static final int IFD_FORMAT_USHORT = 3; private static final ExifTag[] IFD_GPS_TAGS; private static final ExifTag[] IFD_INTEROPERABILITY_TAGS; private static final int IFD_OFFSET = 8; private static final ExifTag[] IFD_THUMBNAIL_TAGS; private static final ExifTag[] IFD_TIFF_TAGS; private static final int IFD_TYPE_EXIF = 1; private static final int IFD_TYPE_GPS = 2; private static final int IFD_TYPE_INTEROPERABILITY = 3; private static final int IFD_TYPE_ORF_CAMERA_SETTINGS = 7; private static final int IFD_TYPE_ORF_IMAGE_PROCESSING = 8; private static final int IFD_TYPE_ORF_MAKER_NOTE = 6; private static final int IFD_TYPE_PEF = 9; public static final int IFD_TYPE_PREVIEW = 5; public static final int IFD_TYPE_PRIMARY = 0; public static final int IFD_TYPE_THUMBNAIL = 4; private static final int IMAGE_TYPE_ARW = 1; private static final int IMAGE_TYPE_CR2 = 2; private static final int IMAGE_TYPE_DNG = 3; private static final int IMAGE_TYPE_HEIF = 12; private static final int IMAGE_TYPE_JPEG = 4; private static final int IMAGE_TYPE_NEF = 5; private static final int IMAGE_TYPE_NRW = 6; private static final int IMAGE_TYPE_ORF = 7; private static final int IMAGE_TYPE_PEF = 8; private static final int IMAGE_TYPE_PNG = 13; private static final int IMAGE_TYPE_RAF = 9; private static final int IMAGE_TYPE_RW2 = 10; private static final int IMAGE_TYPE_SRW = 11; private static final int IMAGE_TYPE_UNKNOWN = 0; private static final int IMAGE_TYPE_WEBP = 14; private static final ExifTag JPEG_INTERCHANGE_FORMAT_LENGTH_TAG = new ExifTag(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, 514, 4); private static final ExifTag JPEG_INTERCHANGE_FORMAT_TAG = new ExifTag(TAG_JPEG_INTERCHANGE_FORMAT, InputDeviceCompat.SOURCE_DPAD, 4); public static final byte[] JPEG_SIGNATURE = {-1, MARKER_SOI, -1}; public static final String LATITUDE_NORTH = "N"; public static final String LATITUDE_SOUTH = "S"; public static final short LIGHT_SOURCE_CLOUDY_WEATHER = 10; public static final short LIGHT_SOURCE_COOL_WHITE_FLUORESCENT = 14; public static final short LIGHT_SOURCE_D50 = 23; public static final short LIGHT_SOURCE_D55 = 20; public static final short LIGHT_SOURCE_D65 = 21; public static final short LIGHT_SOURCE_D75 = 22; public static final short LIGHT_SOURCE_DAYLIGHT = 1; public static final short LIGHT_SOURCE_DAYLIGHT_FLUORESCENT = 12; public static final short LIGHT_SOURCE_DAY_WHITE_FLUORESCENT = 13; public static final short LIGHT_SOURCE_FINE_WEATHER = 9; public static final short LIGHT_SOURCE_FLASH = 4; public static final short LIGHT_SOURCE_FLUORESCENT = 2; public static final short LIGHT_SOURCE_ISO_STUDIO_TUNGSTEN = 24; public static final short LIGHT_SOURCE_OTHER = 255; public static final short LIGHT_SOURCE_SHADE = 11; public static final short LIGHT_SOURCE_STANDARD_LIGHT_A = 17; public static final short LIGHT_SOURCE_STANDARD_LIGHT_B = 18; public static final short LIGHT_SOURCE_STANDARD_LIGHT_C = 19; public static final short LIGHT_SOURCE_TUNGSTEN = 3; public static final short LIGHT_SOURCE_UNKNOWN = 0; public static final short LIGHT_SOURCE_WARM_WHITE_FLUORESCENT = 16; public static final short LIGHT_SOURCE_WHITE_FLUORESCENT = 15; public static final String LONGITUDE_EAST = "E"; public static final String LONGITUDE_WEST = "W"; public static final byte MARKER = -1; public static final byte MARKER_APP1 = -31; private static final byte MARKER_COM = -2; public static final byte MARKER_EOI = -39; private static final byte MARKER_SOF0 = -64; private static final byte MARKER_SOF1 = -63; private static final byte MARKER_SOF10 = -54; private static final byte MARKER_SOF11 = -53; private static final byte MARKER_SOF13 = -51; private static final byte MARKER_SOF14 = -50; private static final byte MARKER_SOF15 = -49; private static final byte MARKER_SOF2 = -62; private static final byte MARKER_SOF3 = -61; private static final byte MARKER_SOF5 = -59; private static final byte MARKER_SOF6 = -58; private static final byte MARKER_SOF7 = -57; private static final byte MARKER_SOF9 = -55; private static final byte MARKER_SOI = -40; private static final byte MARKER_SOS = -38; private static final int MAX_THUMBNAIL_SIZE = 512; public static final short METERING_MODE_AVERAGE = 1; public static final short METERING_MODE_CENTER_WEIGHT_AVERAGE = 2; public static final short METERING_MODE_MULTI_SPOT = 4; public static final short METERING_MODE_OTHER = 255; public static final short METERING_MODE_PARTIAL = 6; public static final short METERING_MODE_PATTERN = 5; public static final short METERING_MODE_SPOT = 3; public static final short METERING_MODE_UNKNOWN = 0; private static final Pattern NON_ZERO_TIME_PATTERN = Pattern.compile(".*[1-9].*"); private static final ExifTag[] ORF_CAMERA_SETTINGS_TAGS; private static final ExifTag[] ORF_IMAGE_PROCESSING_TAGS; private static final byte[] ORF_MAKER_NOTE_HEADER_1 = {79, 76, 89, 77, 80, 0}; private static final int ORF_MAKER_NOTE_HEADER_1_SIZE = 8; private static final byte[] ORF_MAKER_NOTE_HEADER_2 = {79, 76, 89, 77, 80, 85, 83, 0, 73, 73}; private static final int ORF_MAKER_NOTE_HEADER_2_SIZE = 12; private static final ExifTag[] ORF_MAKER_NOTE_TAGS; private static final short ORF_SIGNATURE_1 = 20306; private static final short ORF_SIGNATURE_2 = 21330; public static final int ORIENTATION_FLIP_HORIZONTAL = 2; public static final int ORIENTATION_FLIP_VERTICAL = 4; public static final int ORIENTATION_NORMAL = 1; public static final int ORIENTATION_ROTATE_180 = 3; public static final int ORIENTATION_ROTATE_270 = 8; public static final int ORIENTATION_ROTATE_90 = 6; public static final int ORIENTATION_TRANSPOSE = 5; public static final int ORIENTATION_TRANSVERSE = 7; public static final int ORIENTATION_UNDEFINED = 0; public static final int ORIGINAL_RESOLUTION_IMAGE = 0; private static final int PEF_MAKER_NOTE_SKIP_SIZE = 6; private static final String PEF_SIGNATURE = "PENTAX"; private static final ExifTag[] PEF_TAGS; public static final int PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO = 1; public static final int PHOTOMETRIC_INTERPRETATION_RGB = 2; public static final int PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO = 0; public static final int PHOTOMETRIC_INTERPRETATION_YCBCR = 6; private static final int PNG_CHUNK_CRC_BYTE_LENGTH = 4; private static final int PNG_CHUNK_TYPE_BYTE_LENGTH = 4; private static final byte[] PNG_CHUNK_TYPE_EXIF = {101, 88, 73, 102}; private static final byte[] PNG_CHUNK_TYPE_IEND = {73, 69, 78, 68}; private static final byte[] PNG_CHUNK_TYPE_IHDR = {73, 72, 68, 82}; private static final byte[] PNG_SIGNATURE = {-119, 80, 78, 71, 13, 10, 26, 10}; private static final int RAF_OFFSET_TO_JPEG_IMAGE_OFFSET = 84; private static final String RAF_SIGNATURE = "FUJIFILMCCD-RAW"; public static final int REDUCED_RESOLUTION_IMAGE = 1; public static final short RENDERED_PROCESS_CUSTOM = 1; public static final short RENDERED_PROCESS_NORMAL = 0; public static final short RESOLUTION_UNIT_CENTIMETERS = 3; public static final short RESOLUTION_UNIT_INCHES = 2; private static final List ROTATION_ORDER = Arrays.asList(1, 6, 3, 8); private static final short RW2_SIGNATURE = 85; public static final short SATURATION_HIGH = 0; public static final short SATURATION_LOW = 0; public static final short SATURATION_NORMAL = 0; public static final short SCENE_CAPTURE_TYPE_LANDSCAPE = 1; public static final short SCENE_CAPTURE_TYPE_NIGHT = 3; public static final short SCENE_CAPTURE_TYPE_PORTRAIT = 2; public static final short SCENE_CAPTURE_TYPE_STANDARD = 0; public static final short SCENE_TYPE_DIRECTLY_PHOTOGRAPHED = 1; public static final short SENSITIVITY_TYPE_ISO_SPEED = 3; public static final short SENSITIVITY_TYPE_REI = 2; public static final short SENSITIVITY_TYPE_REI_AND_ISO = 6; public static final short SENSITIVITY_TYPE_SOS = 1; public static final short SENSITIVITY_TYPE_SOS_AND_ISO = 5; public static final short SENSITIVITY_TYPE_SOS_AND_REI = 4; public static final short SENSITIVITY_TYPE_SOS_AND_REI_AND_ISO = 7; public static final short SENSITIVITY_TYPE_UNKNOWN = 0; public static final short SENSOR_TYPE_COLOR_SEQUENTIAL = 5; public static final short SENSOR_TYPE_COLOR_SEQUENTIAL_LINEAR = 8; public static final short SENSOR_TYPE_NOT_DEFINED = 1; public static final short SENSOR_TYPE_ONE_CHIP = 2; public static final short SENSOR_TYPE_THREE_CHIP = 4; public static final short SENSOR_TYPE_TRILINEAR = 7; public static final short SENSOR_TYPE_TWO_CHIP = 3; public static final short SHARPNESS_HARD = 2; public static final short SHARPNESS_NORMAL = 0; public static final short SHARPNESS_SOFT = 1; private static final int SIGNATURE_CHECK_SIZE = 5000; public static final byte START_CODE = 42; public static final int STREAM_TYPE_EXIF_DATA_ONLY = 1; public static final int STREAM_TYPE_FULL_IMAGE_DATA = 0; public static final short SUBJECT_DISTANCE_RANGE_CLOSE_VIEW = 2; public static final short SUBJECT_DISTANCE_RANGE_DISTANT_VIEW = 3; public static final short SUBJECT_DISTANCE_RANGE_MACRO = 1; public static final short SUBJECT_DISTANCE_RANGE_UNKNOWN = 0; private static final String TAG = "ExifInterface"; public static final String TAG_APERTURE_VALUE = "ApertureValue"; public static final String TAG_ARTIST = "Artist"; public static final String TAG_BITS_PER_SAMPLE = "BitsPerSample"; public static final String TAG_BODY_SERIAL_NUMBER = "BodySerialNumber"; public static final String TAG_BRIGHTNESS_VALUE = "BrightnessValue"; @Deprecated public static final String TAG_CAMARA_OWNER_NAME = "CameraOwnerName"; public static final String TAG_CAMERA_OWNER_NAME = "CameraOwnerName"; public static final String TAG_CFA_PATTERN = "CFAPattern"; public static final String TAG_COLOR_SPACE = "ColorSpace"; public static final String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration"; public static final String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel"; public static final String TAG_COMPRESSION = "Compression"; public static final String TAG_CONTRAST = "Contrast"; public static final String TAG_COPYRIGHT = "Copyright"; public static final String TAG_CUSTOM_RENDERED = "CustomRendered"; public static final String TAG_DATETIME = "DateTime"; public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized"; public static final String TAG_DATETIME_ORIGINAL = "DateTimeOriginal"; public static final String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize"; public static final String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription"; public static final String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio"; public static final String TAG_DNG_VERSION = "DNGVersion"; private static final String TAG_EXIF_IFD_POINTER = "ExifIFDPointer"; public static final String TAG_EXIF_VERSION = "ExifVersion"; public static final String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue"; public static final String TAG_EXPOSURE_INDEX = "ExposureIndex"; public static final String TAG_EXPOSURE_MODE = "ExposureMode"; public static final String TAG_EXPOSURE_PROGRAM = "ExposureProgram"; public static final String TAG_EXPOSURE_TIME = "ExposureTime"; public static final String TAG_FILE_SOURCE = "FileSource"; public static final String TAG_FLASH = "Flash"; public static final String TAG_FLASHPIX_VERSION = "FlashpixVersion"; public static final String TAG_FLASH_ENERGY = "FlashEnergy"; public static final String TAG_FOCAL_LENGTH = "FocalLength"; public static final String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm"; public static final String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit"; public static final String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution"; public static final String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution"; public static final String TAG_F_NUMBER = "FNumber"; public static final String TAG_GAIN_CONTROL = "GainControl"; public static final String TAG_GAMMA = "Gamma"; public static final String TAG_GPS_ALTITUDE = "GPSAltitude"; public static final String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef"; public static final String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation"; public static final String TAG_GPS_DATESTAMP = "GPSDateStamp"; public static final String TAG_GPS_DEST_BEARING = "GPSDestBearing"; public static final String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef"; public static final String TAG_GPS_DEST_DISTANCE = "GPSDestDistance"; public static final String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef"; public static final String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude"; public static final String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef"; public static final String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude"; public static final String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef"; public static final String TAG_GPS_DIFFERENTIAL = "GPSDifferential"; public static final String TAG_GPS_DOP = "GPSDOP"; public static final String TAG_GPS_H_POSITIONING_ERROR = "GPSHPositioningError"; public static final String TAG_GPS_IMG_DIRECTION = "GPSImgDirection"; public static final String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef"; private static final String TAG_GPS_INFO_IFD_POINTER = "GPSInfoIFDPointer"; public static final String TAG_GPS_LATITUDE = "GPSLatitude"; public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef"; public static final String TAG_GPS_LONGITUDE = "GPSLongitude"; public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef"; public static final String TAG_GPS_MAP_DATUM = "GPSMapDatum"; public static final String TAG_GPS_MEASURE_MODE = "GPSMeasureMode"; public static final String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod"; public static final String TAG_GPS_SATELLITES = "GPSSatellites"; public static final String TAG_GPS_SPEED = "GPSSpeed"; public static final String TAG_GPS_SPEED_REF = "GPSSpeedRef"; public static final String TAG_GPS_STATUS = "GPSStatus"; public static final String TAG_GPS_TIMESTAMP = "GPSTimeStamp"; public static final String TAG_GPS_TRACK = "GPSTrack"; public static final String TAG_GPS_TRACK_REF = "GPSTrackRef"; public static final String TAG_GPS_VERSION_ID = "GPSVersionID"; public static final String TAG_IMAGE_DESCRIPTION = "ImageDescription"; public static final String TAG_IMAGE_LENGTH = "ImageLength"; public static final String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID"; public static final String TAG_IMAGE_WIDTH = "ImageWidth"; private static final String TAG_INTEROPERABILITY_IFD_POINTER = "InteroperabilityIFDPointer"; public static final String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex"; public static final String TAG_ISO_SPEED = "ISOSpeed"; public static final String TAG_ISO_SPEED_LATITUDE_YYY = "ISOSpeedLatitudeyyy"; public static final String TAG_ISO_SPEED_LATITUDE_ZZZ = "ISOSpeedLatitudezzz"; @Deprecated public static final String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings"; public static final String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat"; public static final String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength"; public static final String TAG_LENS_MAKE = "LensMake"; public static final String TAG_LENS_MODEL = "LensModel"; public static final String TAG_LENS_SERIAL_NUMBER = "LensSerialNumber"; public static final String TAG_LENS_SPECIFICATION = "LensSpecification"; public static final String TAG_LIGHT_SOURCE = "LightSource"; public static final String TAG_MAKE = "Make"; public static final String TAG_MAKER_NOTE = "MakerNote"; public static final String TAG_MAX_APERTURE_VALUE = "MaxApertureValue"; public static final String TAG_METERING_MODE = "MeteringMode"; public static final String TAG_MODEL = "Model"; public static final String TAG_NEW_SUBFILE_TYPE = "NewSubfileType"; public static final String TAG_OECF = "OECF"; public static final String TAG_OFFSET_TIME = "OffsetTime"; public static final String TAG_OFFSET_TIME_DIGITIZED = "OffsetTimeDigitized"; public static final String TAG_OFFSET_TIME_ORIGINAL = "OffsetTimeOriginal"; public static final String TAG_ORF_ASPECT_FRAME = "AspectFrame"; private static final String TAG_ORF_CAMERA_SETTINGS_IFD_POINTER = "CameraSettingsIFDPointer"; private static final String TAG_ORF_IMAGE_PROCESSING_IFD_POINTER = "ImageProcessingIFDPointer"; public static final String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength"; public static final String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart"; public static final String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage"; public static final String TAG_ORIENTATION = "Orientation"; public static final String TAG_PHOTOGRAPHIC_SENSITIVITY = "PhotographicSensitivity"; public static final String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation"; public static final String TAG_PIXEL_X_DIMENSION = "PixelXDimension"; public static final String TAG_PIXEL_Y_DIMENSION = "PixelYDimension"; public static final String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration"; public static final String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities"; private static final ExifTag TAG_RAF_IMAGE_SIZE = new ExifTag(TAG_STRIP_OFFSETS, AudioAttributesCompat.FLAG_ALL_PUBLIC, 3); public static final String TAG_RECOMMENDED_EXPOSURE_INDEX = "RecommendedExposureIndex"; public static final String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite"; public static final String TAG_RELATED_SOUND_FILE = "RelatedSoundFile"; public static final String TAG_RESOLUTION_UNIT = "ResolutionUnit"; public static final String TAG_ROWS_PER_STRIP = "RowsPerStrip"; public static final String TAG_RW2_ISO = "ISO"; public static final String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw"; public static final String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder"; public static final String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder"; public static final String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder"; public static final String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder"; public static final String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel"; public static final String TAG_SATURATION = "Saturation"; public static final String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType"; public static final String TAG_SCENE_TYPE = "SceneType"; public static final String TAG_SENSING_METHOD = "SensingMethod"; public static final String TAG_SENSITIVITY_TYPE = "SensitivityType"; public static final String TAG_SHARPNESS = "Sharpness"; public static final String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue"; public static final String TAG_SOFTWARE = "Software"; public static final String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse"; public static final String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity"; public static final String TAG_STANDARD_OUTPUT_SENSITIVITY = "StandardOutputSensitivity"; public static final String TAG_STRIP_BYTE_COUNTS = "StripByteCounts"; public static final String TAG_STRIP_OFFSETS = "StripOffsets"; public static final String TAG_SUBFILE_TYPE = "SubfileType"; public static final String TAG_SUBJECT_AREA = "SubjectArea"; public static final String TAG_SUBJECT_DISTANCE = "SubjectDistance"; public static final String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange"; public static final String TAG_SUBJECT_LOCATION = "SubjectLocation"; public static final String TAG_SUBSEC_TIME = "SubSecTime"; public static final String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized"; public static final String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal"; private static final String TAG_SUB_IFD_POINTER = "SubIFDPointer"; public static final String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength"; public static final String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String TAG_THUMBNAIL_ORIENTATION = "ThumbnailOrientation"; public static final String TAG_TRANSFER_FUNCTION = "TransferFunction"; public static final String TAG_USER_COMMENT = "UserComment"; public static final String TAG_WHITE_BALANCE = "WhiteBalance"; public static final String TAG_WHITE_POINT = "WhitePoint"; public static final String TAG_XMP = "Xmp"; public static final String TAG_X_RESOLUTION = "XResolution"; public static final String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients"; public static final String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning"; public static final String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling"; public static final String TAG_Y_RESOLUTION = "YResolution"; private static final int WEBP_CHUNK_SIZE_BYTE_LENGTH = 4; private static final byte[] WEBP_CHUNK_TYPE_ANIM = "ANIM".getBytes(Charset.defaultCharset()); private static final byte[] WEBP_CHUNK_TYPE_ANMF = "ANMF".getBytes(Charset.defaultCharset()); private static final int WEBP_CHUNK_TYPE_BYTE_LENGTH = 4; private static final byte[] WEBP_CHUNK_TYPE_EXIF = {69, 88, 73, 70}; private static final byte[] WEBP_CHUNK_TYPE_VP8 = "VP8 ".getBytes(Charset.defaultCharset()); private static final byte[] WEBP_CHUNK_TYPE_VP8L = "VP8L".getBytes(Charset.defaultCharset()); private static final byte[] WEBP_CHUNK_TYPE_VP8X = "VP8X".getBytes(Charset.defaultCharset()); private static final int WEBP_CHUNK_TYPE_VP8X_DEFAULT_LENGTH = 10; private static final int WEBP_FILE_SIZE_BYTE_LENGTH = 4; private static final byte[] WEBP_SIGNATURE_1 = {82, 73, 70, 70}; private static final byte[] WEBP_SIGNATURE_2 = {87, 69, 66, 80}; private static final byte WEBP_VP8L_SIGNATURE = 47; private static final byte[] WEBP_VP8_SIGNATURE = {-99, 1, START_CODE}; @Deprecated public static final int WHITEBALANCE_AUTO = 0; @Deprecated public static final int WHITEBALANCE_MANUAL = 1; public static final short WHITE_BALANCE_AUTO = 0; public static final short WHITE_BALANCE_MANUAL = 1; public static final short Y_CB_CR_POSITIONING_CENTERED = 1; public static final short Y_CB_CR_POSITIONING_CO_SITED = 2; private static final HashMap sExifPointerTagMap = new HashMap<>(); private static final HashMap[] sExifTagMapsForReading; private static final HashMap[] sExifTagMapsForWriting; private static SimpleDateFormat sFormatterPrimary; private static SimpleDateFormat sFormatterSecondary; private static final HashSet sTagSetForCompatibility = new HashSet<>(Arrays.asList(TAG_F_NUMBER, TAG_DIGITAL_ZOOM_RATIO, TAG_EXPOSURE_TIME, TAG_SUBJECT_DISTANCE, TAG_GPS_TIMESTAMP)); private boolean mAreThumbnailStripsConsecutive; private AssetManager.AssetInputStream mAssetInputStream; private final HashMap[] mAttributes; private Set mAttributesOffsets; private ByteOrder mExifByteOrder; private String mFilename; private boolean mHasThumbnail; private boolean mHasThumbnailStrips; private boolean mIsExifDataOnly; private int mMimeType; private boolean mModified; private int mOffsetToExifData; private int mOrfMakerNoteOffset; private int mOrfThumbnailLength; private int mOrfThumbnailOffset; private FileDescriptor mSeekableFileDescriptor; private byte[] mThumbnailBytes; private int mThumbnailCompression; private int mThumbnailLength; private int mThumbnailOffset; private boolean mXmpIsFromSeparateMarker; /* renamed from: androidx.exifinterface.media.ExifInterface$1 reason: invalid class name */ public class AnonymousClass1 extends MediaDataSource { public long mPosition; public final /* synthetic */ ByteOrderedDataInputStream val$in; public AnonymousClass1(ByteOrderedDataInputStream byteOrderedDataInputStream) { this.val$in = byteOrderedDataInputStream; } @Override // java.io.Closeable, java.lang.AutoCloseable public void close() throws IOException { } @Override // android.media.MediaDataSource public long getSize() throws IOException { return -1; } @Override // android.media.MediaDataSource public int readAt(long j, byte[] bArr, int i, int i2) throws IOException { if (i2 == 0) { return 0; } if (j < 0) { return -1; } try { long j2 = this.mPosition; if (j2 != j) { if (j2 >= 0 && j >= j2 + ((long) this.val$in.available())) { return -1; } this.val$in.seek(j); this.mPosition = j; } if (i2 > this.val$in.available()) { i2 = this.val$in.available(); } int read = this.val$in.read(bArr, i, i2); if (read >= 0) { this.mPosition += (long) read; return read; } } catch (IOException unused) { } this.mPosition = -1; return -1; } } public static class ByteOrderedDataInputStream extends InputStream implements DataInput { private static final ByteOrder BIG_ENDIAN = ByteOrder.BIG_ENDIAN; private static final ByteOrder LITTLE_ENDIAN = ByteOrder.LITTLE_ENDIAN; private ByteOrder mByteOrder; private DataInputStream mDataInputStream; public final int mLength; public int mPosition; public ByteOrderedDataInputStream(InputStream inputStream) throws IOException { this(inputStream, ByteOrder.BIG_ENDIAN); } public ByteOrderedDataInputStream(InputStream inputStream, ByteOrder byteOrder) throws IOException { this.mByteOrder = ByteOrder.BIG_ENDIAN; DataInputStream dataInputStream = new DataInputStream(inputStream); this.mDataInputStream = dataInputStream; int available = dataInputStream.available(); this.mLength = available; this.mPosition = 0; this.mDataInputStream.mark(available); this.mByteOrder = byteOrder; } public ByteOrderedDataInputStream(byte[] bArr) throws IOException { this(new ByteArrayInputStream(bArr)); } @Override // java.io.InputStream public int available() throws IOException { return this.mDataInputStream.available(); } public int getLength() { return this.mLength; } @Override // java.io.InputStream public synchronized void mark(int i) { this.mDataInputStream.mark(i); } public int peek() { return this.mPosition; } @Override // java.io.InputStream public int read() throws IOException { this.mPosition++; return this.mDataInputStream.read(); } @Override // java.io.InputStream public int read(byte[] bArr, int i, int i2) throws IOException { int read = this.mDataInputStream.read(bArr, i, i2); this.mPosition += read; return read; } @Override // java.io.DataInput public boolean readBoolean() throws IOException { this.mPosition++; return this.mDataInputStream.readBoolean(); } @Override // java.io.DataInput public byte readByte() throws IOException { int i = this.mPosition + 1; this.mPosition = i; if (i <= this.mLength) { int read = this.mDataInputStream.read(); if (read >= 0) { return (byte) read; } throw new EOFException(); } throw new EOFException(); } @Override // java.io.DataInput public char readChar() throws IOException { this.mPosition += 2; return this.mDataInputStream.readChar(); } @Override // java.io.DataInput public double readDouble() throws IOException { return Double.longBitsToDouble(readLong()); } @Override // java.io.DataInput public float readFloat() throws IOException { return Float.intBitsToFloat(readInt()); } @Override // java.io.DataInput public void readFully(byte[] bArr) throws IOException { int length = this.mPosition + bArr.length; this.mPosition = length; if (length > this.mLength) { throw new EOFException(); } else if (this.mDataInputStream.read(bArr, 0, bArr.length) != bArr.length) { throw new IOException("Couldn't read up to the length of buffer"); } } @Override // java.io.DataInput public void readFully(byte[] bArr, int i, int i2) throws IOException { int i3 = this.mPosition + i2; this.mPosition = i3; if (i3 > this.mLength) { throw new EOFException(); } else if (this.mDataInputStream.read(bArr, i, i2) != i2) { throw new IOException("Couldn't read up to the length of buffer"); } } @Override // java.io.DataInput public int readInt() throws IOException { int i = this.mPosition + 4; this.mPosition = i; if (i <= this.mLength) { int read = this.mDataInputStream.read(); int read2 = this.mDataInputStream.read(); int read3 = this.mDataInputStream.read(); int read4 = this.mDataInputStream.read(); if ((read | read2 | read3 | read4) >= 0) { ByteOrder byteOrder = this.mByteOrder; if (byteOrder == LITTLE_ENDIAN) { return (read4 << 24) + (read3 << 16) + (read2 << 8) + read; } if (byteOrder == BIG_ENDIAN) { return (read << 24) + (read2 << 16) + (read3 << 8) + read4; } StringBuilder K = a.K("Invalid byte order: "); K.append(this.mByteOrder); throw new IOException(K.toString()); } throw new EOFException(); } throw new EOFException(); } @Override // java.io.DataInput public String readLine() throws IOException { Log.d(ExifInterface.TAG, "Currently unsupported"); return null; } @Override // java.io.DataInput public long readLong() throws IOException { int i = this.mPosition + 8; this.mPosition = i; if (i <= this.mLength) { int read = this.mDataInputStream.read(); int read2 = this.mDataInputStream.read(); int read3 = this.mDataInputStream.read(); int read4 = this.mDataInputStream.read(); int read5 = this.mDataInputStream.read(); int read6 = this.mDataInputStream.read(); int read7 = this.mDataInputStream.read(); int read8 = this.mDataInputStream.read(); if ((read | read2 | read3 | read4 | read5 | read6 | read7 | read8) >= 0) { ByteOrder byteOrder = this.mByteOrder; if (byteOrder == LITTLE_ENDIAN) { return (((long) read8) << 56) + (((long) read7) << 48) + (((long) read6) << 40) + (((long) read5) << 32) + (((long) read4) << 24) + (((long) read3) << 16) + (((long) read2) << 8) + ((long) read); } if (byteOrder == BIG_ENDIAN) { return (((long) read) << 56) + (((long) read2) << 48) + (((long) read3) << 40) + (((long) read4) << 32) + (((long) read5) << 24) + (((long) read6) << 16) + (((long) read7) << 8) + ((long) read8); } StringBuilder K = a.K("Invalid byte order: "); K.append(this.mByteOrder); throw new IOException(K.toString()); } throw new EOFException(); } throw new EOFException(); } @Override // java.io.DataInput public short readShort() throws IOException { int i = this.mPosition + 2; this.mPosition = i; if (i <= this.mLength) { int read = this.mDataInputStream.read(); int read2 = this.mDataInputStream.read(); if ((read | read2) >= 0) { ByteOrder byteOrder = this.mByteOrder; if (byteOrder == LITTLE_ENDIAN) { return (short) ((read2 << 8) + read); } if (byteOrder == BIG_ENDIAN) { return (short) ((read << 8) + read2); } StringBuilder K = a.K("Invalid byte order: "); K.append(this.mByteOrder); throw new IOException(K.toString()); } throw new EOFException(); } throw new EOFException(); } @Override // java.io.DataInput public String readUTF() throws IOException { this.mPosition += 2; return this.mDataInputStream.readUTF(); } @Override // java.io.DataInput public int readUnsignedByte() throws IOException { this.mPosition++; return this.mDataInputStream.readUnsignedByte(); } public long readUnsignedInt() throws IOException { return ((long) readInt()) & 4294967295L; } @Override // java.io.DataInput public int readUnsignedShort() throws IOException { int i = this.mPosition + 2; this.mPosition = i; if (i <= this.mLength) { int read = this.mDataInputStream.read(); int read2 = this.mDataInputStream.read(); if ((read | read2) >= 0) { ByteOrder byteOrder = this.mByteOrder; if (byteOrder == LITTLE_ENDIAN) { return (read2 << 8) + read; } if (byteOrder == BIG_ENDIAN) { return (read << 8) + read2; } StringBuilder K = a.K("Invalid byte order: "); K.append(this.mByteOrder); throw new IOException(K.toString()); } throw new EOFException(); } throw new EOFException(); } public void seek(long j) throws IOException { int i = this.mPosition; if (((long) i) > j) { this.mPosition = 0; this.mDataInputStream.reset(); this.mDataInputStream.mark(this.mLength); } else { j -= (long) i; } int i2 = (int) j; if (skipBytes(i2) != i2) { throw new IOException("Couldn't seek up to the byteCount"); } } public void setByteOrder(ByteOrder byteOrder) { this.mByteOrder = byteOrder; } @Override // java.io.DataInput public int skipBytes(int i) throws IOException { int min = Math.min(i, this.mLength - this.mPosition); int i2 = 0; while (i2 < min) { i2 += this.mDataInputStream.skipBytes(min - i2); } this.mPosition += i2; return i2; } } public static class ByteOrderedDataOutputStream extends FilterOutputStream { private ByteOrder mByteOrder; public final OutputStream mOutputStream; public ByteOrderedDataOutputStream(OutputStream outputStream, ByteOrder byteOrder) { super(outputStream); this.mOutputStream = outputStream; this.mByteOrder = byteOrder; } public void setByteOrder(ByteOrder byteOrder) { this.mByteOrder = byteOrder; } @Override // java.io.FilterOutputStream, java.io.OutputStream public void write(byte[] bArr) throws IOException { this.mOutputStream.write(bArr); } @Override // java.io.FilterOutputStream, java.io.OutputStream public void write(byte[] bArr, int i, int i2) throws IOException { this.mOutputStream.write(bArr, i, i2); } public void writeByte(int i) throws IOException { this.mOutputStream.write(i); } public void writeInt(int i) throws IOException { ByteOrder byteOrder = this.mByteOrder; if (byteOrder == ByteOrder.LITTLE_ENDIAN) { this.mOutputStream.write((i >>> 0) & 255); this.mOutputStream.write((i >>> 8) & 255); this.mOutputStream.write((i >>> 16) & 255); this.mOutputStream.write((i >>> 24) & 255); } else if (byteOrder == ByteOrder.BIG_ENDIAN) { this.mOutputStream.write((i >>> 24) & 255); this.mOutputStream.write((i >>> 16) & 255); this.mOutputStream.write((i >>> 8) & 255); this.mOutputStream.write((i >>> 0) & 255); } } public void writeShort(short s2) throws IOException { ByteOrder byteOrder = this.mByteOrder; if (byteOrder == ByteOrder.LITTLE_ENDIAN) { this.mOutputStream.write((s2 >>> 0) & 255); this.mOutputStream.write((s2 >>> 8) & 255); } else if (byteOrder == ByteOrder.BIG_ENDIAN) { this.mOutputStream.write((s2 >>> 8) & 255); this.mOutputStream.write((s2 >>> 0) & 255); } } public void writeUnsignedInt(long j) throws IOException { writeInt((int) j); } public void writeUnsignedShort(int i) throws IOException { writeShort((short) i); } } public static class ExifAttribute { public static final long BYTES_OFFSET_UNKNOWN = -1; public final byte[] bytes; public final long bytesOffset; public final int format; public final int numberOfComponents; public ExifAttribute(int i, int i2, long j, byte[] bArr) { this.format = i; this.numberOfComponents = i2; this.bytesOffset = j; this.bytes = bArr; } public ExifAttribute(int i, int i2, byte[] bArr) { this(i, i2, -1, bArr); } public static ExifAttribute createByte(String str) { if (str.length() == 1 && str.charAt(0) >= '0' && str.charAt(0) <= '1') { return new ExifAttribute(1, 1, new byte[]{(byte) (str.charAt(0) - '0')}); } byte[] bytes = str.getBytes(ExifInterface.ASCII); return new ExifAttribute(1, bytes.length, bytes); } public static ExifAttribute createDouble(double d, ByteOrder byteOrder) { return createDouble(new double[]{d}, byteOrder); } public static ExifAttribute createDouble(double[] dArr, ByteOrder byteOrder) { ByteBuffer wrap = ByteBuffer.wrap(new byte[(ExifInterface.IFD_FORMAT_BYTES_PER_FORMAT[12] * dArr.length)]); wrap.order(byteOrder); for (double d : dArr) { wrap.putDouble(d); } return new ExifAttribute(12, dArr.length, wrap.array()); } public static ExifAttribute createSLong(int i, ByteOrder byteOrder) { return createSLong(new int[]{i}, byteOrder); } public static ExifAttribute createSLong(int[] iArr, ByteOrder byteOrder) { ByteBuffer wrap = ByteBuffer.wrap(new byte[(ExifInterface.IFD_FORMAT_BYTES_PER_FORMAT[9] * iArr.length)]); wrap.order(byteOrder); for (int i : iArr) { wrap.putInt(i); } return new ExifAttribute(9, iArr.length, wrap.array()); } public static ExifAttribute createSRational(Rational rational, ByteOrder byteOrder) { return createSRational(new Rational[]{rational}, byteOrder); } public static ExifAttribute createSRational(Rational[] rationalArr, ByteOrder byteOrder) { ByteBuffer wrap = ByteBuffer.wrap(new byte[(ExifInterface.IFD_FORMAT_BYTES_PER_FORMAT[10] * rationalArr.length)]); wrap.order(byteOrder); for (Rational rational : rationalArr) { wrap.putInt((int) rational.numerator); wrap.putInt((int) rational.denominator); } return new ExifAttribute(10, rationalArr.length, wrap.array()); } public static ExifAttribute createString(String str) { byte[] bytes = (str + (char) 0).getBytes(ExifInterface.ASCII); return new ExifAttribute(2, bytes.length, bytes); } public static ExifAttribute createULong(long j, ByteOrder byteOrder) { return createULong(new long[]{j}, byteOrder); } public static ExifAttribute createULong(long[] jArr, ByteOrder byteOrder) { ByteBuffer wrap = ByteBuffer.wrap(new byte[(ExifInterface.IFD_FORMAT_BYTES_PER_FORMAT[4] * jArr.length)]); wrap.order(byteOrder); for (long j : jArr) { wrap.putInt((int) j); } return new ExifAttribute(4, jArr.length, wrap.array()); } public static ExifAttribute createURational(Rational rational, ByteOrder byteOrder) { return createURational(new Rational[]{rational}, byteOrder); } public static ExifAttribute createURational(Rational[] rationalArr, ByteOrder byteOrder) { ByteBuffer wrap = ByteBuffer.wrap(new byte[(ExifInterface.IFD_FORMAT_BYTES_PER_FORMAT[5] * rationalArr.length)]); wrap.order(byteOrder); for (Rational rational : rationalArr) { wrap.putInt((int) rational.numerator); wrap.putInt((int) rational.denominator); } return new ExifAttribute(5, rationalArr.length, wrap.array()); } public static ExifAttribute createUShort(int i, ByteOrder byteOrder) { return createUShort(new int[]{i}, byteOrder); } public static ExifAttribute createUShort(int[] iArr, ByteOrder byteOrder) { ByteBuffer wrap = ByteBuffer.wrap(new byte[(ExifInterface.IFD_FORMAT_BYTES_PER_FORMAT[3] * iArr.length)]); wrap.order(byteOrder); for (int i : iArr) { wrap.putShort((short) i); } return new ExifAttribute(3, iArr.length, wrap.array()); } public double getDoubleValue(ByteOrder byteOrder) { Object value = getValue(byteOrder); if (value == null) { throw new NumberFormatException("NULL can't be converted to a double value"); } else if (value instanceof String) { return Double.parseDouble((String) value); } else { if (value instanceof long[]) { long[] jArr = (long[]) value; if (jArr.length == 1) { return (double) jArr[0]; } throw new NumberFormatException("There are more than one component"); } else if (value instanceof int[]) { int[] iArr = (int[]) value; if (iArr.length == 1) { return (double) iArr[0]; } throw new NumberFormatException("There are more than one component"); } else if (value instanceof double[]) { double[] dArr = (double[]) value; if (dArr.length == 1) { return dArr[0]; } throw new NumberFormatException("There are more than one component"); } else if (value instanceof Rational[]) { Rational[] rationalArr = (Rational[]) value; if (rationalArr.length == 1) { return rationalArr[0].calculate(); } throw new NumberFormatException("There are more than one component"); } else { throw new NumberFormatException("Couldn't find a double value"); } } } public int getIntValue(ByteOrder byteOrder) { Object value = getValue(byteOrder); if (value == null) { throw new NumberFormatException("NULL can't be converted to a integer value"); } else if (value instanceof String) { return Integer.parseInt((String) value); } else { if (value instanceof long[]) { long[] jArr = (long[]) value; if (jArr.length == 1) { return (int) jArr[0]; } throw new NumberFormatException("There are more than one component"); } else if (value instanceof int[]) { int[] iArr = (int[]) value; if (iArr.length == 1) { return iArr[0]; } throw new NumberFormatException("There are more than one component"); } else { throw new NumberFormatException("Couldn't find a integer value"); } } } public String getStringValue(ByteOrder byteOrder) { Object value = getValue(byteOrder); if (value == null) { return null; } if (value instanceof String) { return (String) value; } StringBuilder sb = new StringBuilder(); int i = 0; if (value instanceof long[]) { long[] jArr = (long[]) value; while (i < jArr.length) { sb.append(jArr[i]); i++; if (i != jArr.length) { sb.append(","); } } return sb.toString(); } else if (value instanceof int[]) { int[] iArr = (int[]) value; while (i < iArr.length) { sb.append(iArr[i]); i++; if (i != iArr.length) { sb.append(","); } } return sb.toString(); } else if (value instanceof double[]) { double[] dArr = (double[]) value; while (i < dArr.length) { sb.append(dArr[i]); i++; if (i != dArr.length) { sb.append(","); } } return sb.toString(); } else if (!(value instanceof Rational[])) { return null; } else { Rational[] rationalArr = (Rational[]) value; while (i < rationalArr.length) { sb.append(rationalArr[i].numerator); sb.append(MentionUtilsKt.SLASH_CHAR); sb.append(rationalArr[i].denominator); i++; if (i != rationalArr.length) { sb.append(","); } } return sb.toString(); } } /* JADX WARNING: Removed duplicated region for block: B:138:0x0196 A[SYNTHETIC, Splitter:B:138:0x0196] */ /* JADX WARNING: Removed duplicated region for block: B:146:0x01a3 A[SYNTHETIC, Splitter:B:146:0x01a3] */ public Object getValue(ByteOrder byteOrder) { Throwable th; IOException e; ByteOrderedDataInputStream byteOrderedDataInputStream; byte b; byte[] bArr; ByteOrderedDataInputStream byteOrderedDataInputStream2 = null; try { byteOrderedDataInputStream = new ByteOrderedDataInputStream(this.bytes); try { byteOrderedDataInputStream.setByteOrder(byteOrder); boolean z2 = true; int i = 0; switch (this.format) { case 1: case 6: byte[] bArr2 = this.bytes; if (bArr2.length != 1 || bArr2[0] < 0 || bArr2[0] > 1) { String str = new String(this.bytes, ExifInterface.ASCII); try { byteOrderedDataInputStream.close(); } catch (IOException e2) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e2); } return str; } String str2 = new String(new char[]{(char) (this.bytes[0] + 48)}); try { byteOrderedDataInputStream.close(); } catch (IOException e3) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e3); } return str2; case 2: case 7: if (this.numberOfComponents >= ExifInterface.EXIF_ASCII_PREFIX.length) { int i2 = 0; while (true) { bArr = ExifInterface.EXIF_ASCII_PREFIX; if (i2 < bArr.length) { if (this.bytes[i2] != bArr[i2]) { z2 = false; } else { i2++; } } } if (z2) { i = bArr.length; } } StringBuilder sb = new StringBuilder(); while (i < this.numberOfComponents && (b = this.bytes[i]) != 0) { if (b >= 32) { sb.append((char) b); } else { sb.append('?'); } i++; } String sb2 = sb.toString(); try { byteOrderedDataInputStream.close(); } catch (IOException e4) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e4); } return sb2; case 3: int[] iArr = new int[this.numberOfComponents]; while (i < this.numberOfComponents) { iArr[i] = byteOrderedDataInputStream.readUnsignedShort(); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e5) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e5); } return iArr; case 4: long[] jArr = new long[this.numberOfComponents]; while (i < this.numberOfComponents) { jArr[i] = byteOrderedDataInputStream.readUnsignedInt(); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e6) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e6); } return jArr; case 5: Rational[] rationalArr = new Rational[this.numberOfComponents]; while (i < this.numberOfComponents) { rationalArr[i] = new Rational(byteOrderedDataInputStream.readUnsignedInt(), byteOrderedDataInputStream.readUnsignedInt()); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e7) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e7); } return rationalArr; case 8: int[] iArr2 = new int[this.numberOfComponents]; while (i < this.numberOfComponents) { iArr2[i] = byteOrderedDataInputStream.readShort(); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e8) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e8); } return iArr2; case 9: int[] iArr3 = new int[this.numberOfComponents]; while (i < this.numberOfComponents) { iArr3[i] = byteOrderedDataInputStream.readInt(); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e9) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e9); } return iArr3; case 10: Rational[] rationalArr2 = new Rational[this.numberOfComponents]; while (i < this.numberOfComponents) { rationalArr2[i] = new Rational((long) byteOrderedDataInputStream.readInt(), (long) byteOrderedDataInputStream.readInt()); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e10) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e10); } return rationalArr2; case 11: double[] dArr = new double[this.numberOfComponents]; while (i < this.numberOfComponents) { dArr[i] = (double) byteOrderedDataInputStream.readFloat(); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e11) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e11); } return dArr; case 12: double[] dArr2 = new double[this.numberOfComponents]; while (i < this.numberOfComponents) { dArr2[i] = byteOrderedDataInputStream.readDouble(); i++; } try { byteOrderedDataInputStream.close(); } catch (IOException e12) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e12); } return dArr2; default: try { byteOrderedDataInputStream.close(); } catch (IOException e13) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e13); } return null; } } catch (IOException e14) { e = e14; try { Log.w(ExifInterface.TAG, "IOException occurred during reading a value", e); if (byteOrderedDataInputStream != null) { } return null; } catch (Throwable th2) { th = th2; byteOrderedDataInputStream2 = byteOrderedDataInputStream; if (byteOrderedDataInputStream2 != null) { } throw th; } } } catch (IOException e15) { e = e15; byteOrderedDataInputStream = null; Log.w(ExifInterface.TAG, "IOException occurred during reading a value", e); if (byteOrderedDataInputStream != null) { try { byteOrderedDataInputStream.close(); } catch (IOException e16) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e16); } } return null; } catch (Throwable th3) { th = th3; if (byteOrderedDataInputStream2 != null) { try { byteOrderedDataInputStream2.close(); } catch (IOException e17) { Log.e(ExifInterface.TAG, "IOException occurred while closing InputStream", e17); } } throw th; } } public int size() { return ExifInterface.IFD_FORMAT_BYTES_PER_FORMAT[this.format] * this.numberOfComponents; } public String toString() { StringBuilder K = a.K("("); K.append(ExifInterface.IFD_FORMAT_NAMES[this.format]); K.append(", data length:"); return a.w(K, this.bytes.length, ")"); } } @Retention(RetentionPolicy.SOURCE) @RestrictTo({RestrictTo.Scope.LIBRARY}) public @interface ExifStreamType { } public static class ExifTag { public final String name; public final int number; public final int primaryFormat; public final int secondaryFormat; public ExifTag(String str, int i, int i2) { this.name = str; this.number = i; this.primaryFormat = i2; this.secondaryFormat = -1; } public ExifTag(String str, int i, int i2, int i3) { this.name = str; this.number = i; this.primaryFormat = i2; this.secondaryFormat = i3; } public boolean isFormatCompatible(int i) { int i2; int i3 = this.primaryFormat; if (i3 == 7 || i == 7 || i3 == i || (i2 = this.secondaryFormat) == i) { return true; } if ((i3 == 4 || i2 == 4) && i == 3) { return true; } if ((i3 == 9 || i2 == 9) && i == 8) { return true; } return (i3 == 12 || i2 == 12) && i == 11; } } @Retention(RetentionPolicy.SOURCE) @RestrictTo({RestrictTo.Scope.LIBRARY}) public @interface IfdType { } public static class Rational { public final long denominator; public final long numerator; public Rational(double d) { this((long) (d * 10000.0d), 10000); } public Rational(long j, long j2) { if (j2 == 0) { this.numerator = 0; this.denominator = 1; return; } this.numerator = j; this.denominator = j2; } public double calculate() { return ((double) this.numerator) / ((double) this.denominator); } public String toString() { return this.numerator + AutocompleteViewModel.COMMAND_DISCOVER_TOKEN + this.denominator; } } static { ExifTag[] exifTagArr = {new ExifTag(TAG_NEW_SUBFILE_TYPE, 254, 4), new ExifTag(TAG_SUBFILE_TYPE, 255, 4), new ExifTag(TAG_IMAGE_WIDTH, 256, 3, 4), new ExifTag(TAG_IMAGE_LENGTH, 257, 3, 4), new ExifTag(TAG_BITS_PER_SAMPLE, 258, 3), new ExifTag(TAG_COMPRESSION, 259, 3), new ExifTag(TAG_PHOTOMETRIC_INTERPRETATION, 262, 3), new ExifTag(TAG_IMAGE_DESCRIPTION, 270, 2), new ExifTag(TAG_MAKE, 271, 2), new ExifTag(TAG_MODEL, 272, 2), new ExifTag(TAG_STRIP_OFFSETS, AudioAttributesCompat.FLAG_ALL_PUBLIC, 3, 4), new ExifTag(TAG_ORIENTATION, 274, 3), new ExifTag(TAG_SAMPLES_PER_PIXEL, 277, 3), new ExifTag(TAG_ROWS_PER_STRIP, 278, 3, 4), new ExifTag(TAG_STRIP_BYTE_COUNTS, 279, 3, 4), new ExifTag(TAG_X_RESOLUTION, 282, 5), new ExifTag(TAG_Y_RESOLUTION, 283, 5), new ExifTag(TAG_PLANAR_CONFIGURATION, 284, 3), new ExifTag(TAG_RESOLUTION_UNIT, 296, 3), new ExifTag(TAG_TRANSFER_FUNCTION, 301, 3), new ExifTag(TAG_SOFTWARE, 305, 2), new ExifTag(TAG_DATETIME, 306, 2), new ExifTag(TAG_ARTIST, 315, 2), new ExifTag(TAG_WHITE_POINT, 318, 5), new ExifTag(TAG_PRIMARY_CHROMATICITIES, 319, 5), new ExifTag(TAG_SUB_IFD_POINTER, 330, 4), new ExifTag(TAG_JPEG_INTERCHANGE_FORMAT, InputDeviceCompat.SOURCE_DPAD, 4), new ExifTag(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, 514, 4), new ExifTag(TAG_Y_CB_CR_COEFFICIENTS, 529, 5), new ExifTag(TAG_Y_CB_CR_SUB_SAMPLING, 530, 3), new ExifTag(TAG_Y_CB_CR_POSITIONING, 531, 3), new ExifTag(TAG_REFERENCE_BLACK_WHITE, 532, 5), new ExifTag(TAG_COPYRIGHT, 33432, 2), new ExifTag(TAG_EXIF_IFD_POINTER, 34665, 4), new ExifTag(TAG_GPS_INFO_IFD_POINTER, 34853, 4), new ExifTag(TAG_RW2_SENSOR_TOP_BORDER, 4, 4), new ExifTag(TAG_RW2_SENSOR_LEFT_BORDER, 5, 4), new ExifTag(TAG_RW2_SENSOR_BOTTOM_BORDER, 6, 4), new ExifTag(TAG_RW2_SENSOR_RIGHT_BORDER, 7, 4), new ExifTag(TAG_RW2_ISO, 23, 3), new ExifTag(TAG_RW2_JPG_FROM_RAW, 46, 7), new ExifTag(TAG_XMP, 700, 1)}; IFD_TIFF_TAGS = exifTagArr; ExifTag[] exifTagArr2 = {new ExifTag(TAG_EXPOSURE_TIME, 33434, 5), new ExifTag(TAG_F_NUMBER, 33437, 5), new ExifTag(TAG_EXPOSURE_PROGRAM, 34850, 3), new ExifTag(TAG_SPECTRAL_SENSITIVITY, 34852, 2), new ExifTag(TAG_PHOTOGRAPHIC_SENSITIVITY, 34855, 3), new ExifTag(TAG_OECF, 34856, 7), new ExifTag(TAG_SENSITIVITY_TYPE, 34864, 3), new ExifTag(TAG_STANDARD_OUTPUT_SENSITIVITY, 34865, 4), new ExifTag(TAG_RECOMMENDED_EXPOSURE_INDEX, 34866, 4), new ExifTag(TAG_ISO_SPEED, 34867, 4), new ExifTag(TAG_ISO_SPEED_LATITUDE_YYY, 34868, 4), new ExifTag(TAG_ISO_SPEED_LATITUDE_ZZZ, 34869, 4), new ExifTag(TAG_EXIF_VERSION, 36864, 2), new ExifTag(TAG_DATETIME_ORIGINAL, 36867, 2), new ExifTag(TAG_DATETIME_DIGITIZED, 36868, 2), new ExifTag(TAG_OFFSET_TIME, 36880, 2), new ExifTag(TAG_OFFSET_TIME_ORIGINAL, 36881, 2), new ExifTag(TAG_OFFSET_TIME_DIGITIZED, 36882, 2), new ExifTag(TAG_COMPONENTS_CONFIGURATION, 37121, 7), new ExifTag(TAG_COMPRESSED_BITS_PER_PIXEL, 37122, 5), new ExifTag(TAG_SHUTTER_SPEED_VALUE, 37377, 10), new ExifTag(TAG_APERTURE_VALUE, 37378, 5), new ExifTag(TAG_BRIGHTNESS_VALUE, 37379, 10), new ExifTag(TAG_EXPOSURE_BIAS_VALUE, 37380, 10), new ExifTag(TAG_MAX_APERTURE_VALUE, 37381, 5), new ExifTag(TAG_SUBJECT_DISTANCE, 37382, 5), new ExifTag(TAG_METERING_MODE, 37383, 3), new ExifTag(TAG_LIGHT_SOURCE, 37384, 3), new ExifTag(TAG_FLASH, 37385, 3), new ExifTag(TAG_FOCAL_LENGTH, 37386, 5), new ExifTag(TAG_SUBJECT_AREA, 37396, 3), new ExifTag(TAG_MAKER_NOTE, 37500, 7), new ExifTag(TAG_USER_COMMENT, 37510, 7), new ExifTag(TAG_SUBSEC_TIME, 37520, 2), new ExifTag(TAG_SUBSEC_TIME_ORIGINAL, 37521, 2), new ExifTag(TAG_SUBSEC_TIME_DIGITIZED, 37522, 2), new ExifTag(TAG_FLASHPIX_VERSION, 40960, 7), new ExifTag(TAG_COLOR_SPACE, 40961, 3), new ExifTag(TAG_PIXEL_X_DIMENSION, 40962, 3, 4), new ExifTag(TAG_PIXEL_Y_DIMENSION, 40963, 3, 4), new ExifTag(TAG_RELATED_SOUND_FILE, 40964, 2), new ExifTag(TAG_INTEROPERABILITY_IFD_POINTER, 40965, 4), new ExifTag(TAG_FLASH_ENERGY, 41483, 5), new ExifTag(TAG_SPATIAL_FREQUENCY_RESPONSE, 41484, 7), new ExifTag(TAG_FOCAL_PLANE_X_RESOLUTION, 41486, 5), new ExifTag(TAG_FOCAL_PLANE_Y_RESOLUTION, 41487, 5), new ExifTag(TAG_FOCAL_PLANE_RESOLUTION_UNIT, 41488, 3), new ExifTag(TAG_SUBJECT_LOCATION, 41492, 3), new ExifTag(TAG_EXPOSURE_INDEX, 41493, 5), new ExifTag(TAG_SENSING_METHOD, 41495, 3), new ExifTag(TAG_FILE_SOURCE, 41728, 7), new ExifTag(TAG_SCENE_TYPE, 41729, 7), new ExifTag(TAG_CFA_PATTERN, 41730, 7), new ExifTag(TAG_CUSTOM_RENDERED, 41985, 3), new ExifTag(TAG_EXPOSURE_MODE, 41986, 3), new ExifTag(TAG_WHITE_BALANCE, 41987, 3), new ExifTag(TAG_DIGITAL_ZOOM_RATIO, 41988, 5), new ExifTag(TAG_FOCAL_LENGTH_IN_35MM_FILM, 41989, 3), new ExifTag(TAG_SCENE_CAPTURE_TYPE, 41990, 3), new ExifTag(TAG_GAIN_CONTROL, 41991, 3), new ExifTag(TAG_CONTRAST, 41992, 3), new ExifTag(TAG_SATURATION, 41993, 3), new ExifTag(TAG_SHARPNESS, 41994, 3), new ExifTag(TAG_DEVICE_SETTING_DESCRIPTION, 41995, 7), new ExifTag(TAG_SUBJECT_DISTANCE_RANGE, 41996, 3), new ExifTag(TAG_IMAGE_UNIQUE_ID, 42016, 2), new ExifTag("CameraOwnerName", 42032, 2), new ExifTag(TAG_BODY_SERIAL_NUMBER, 42033, 2), new ExifTag(TAG_LENS_SPECIFICATION, 42034, 5), new ExifTag(TAG_LENS_MAKE, 42035, 2), new ExifTag(TAG_LENS_MODEL, 42036, 2), new ExifTag(TAG_GAMMA, 42240, 5), new ExifTag(TAG_DNG_VERSION, 50706, 1), new ExifTag(TAG_DEFAULT_CROP_SIZE, 50720, 3, 4)}; IFD_EXIF_TAGS = exifTagArr2; ExifTag[] exifTagArr3 = {new ExifTag(TAG_GPS_VERSION_ID, 0, 1), new ExifTag(TAG_GPS_LATITUDE_REF, 1, 2), new ExifTag(TAG_GPS_LATITUDE, 2, 5, 10), new ExifTag(TAG_GPS_LONGITUDE_REF, 3, 2), new ExifTag(TAG_GPS_LONGITUDE, 4, 5, 10), new ExifTag(TAG_GPS_ALTITUDE_REF, 5, 1), new ExifTag(TAG_GPS_ALTITUDE, 6, 5), new ExifTag(TAG_GPS_TIMESTAMP, 7, 5), new ExifTag(TAG_GPS_SATELLITES, 8, 2), new ExifTag(TAG_GPS_STATUS, 9, 2), new ExifTag(TAG_GPS_MEASURE_MODE, 10, 2), new ExifTag(TAG_GPS_DOP, 11, 5), new ExifTag(TAG_GPS_SPEED_REF, 12, 2), new ExifTag(TAG_GPS_SPEED, 13, 5), new ExifTag(TAG_GPS_TRACK_REF, 14, 2), new ExifTag(TAG_GPS_TRACK, 15, 5), new ExifTag(TAG_GPS_IMG_DIRECTION_REF, 16, 2), new ExifTag(TAG_GPS_IMG_DIRECTION, 17, 5), new ExifTag(TAG_GPS_MAP_DATUM, 18, 2), new ExifTag(TAG_GPS_DEST_LATITUDE_REF, 19, 2), new ExifTag(TAG_GPS_DEST_LATITUDE, 20, 5), new ExifTag(TAG_GPS_DEST_LONGITUDE_REF, 21, 2), new ExifTag(TAG_GPS_DEST_LONGITUDE, 22, 5), new ExifTag(TAG_GPS_DEST_BEARING_REF, 23, 2), new ExifTag(TAG_GPS_DEST_BEARING, 24, 5), new ExifTag(TAG_GPS_DEST_DISTANCE_REF, 25, 2), new ExifTag(TAG_GPS_DEST_DISTANCE, 26, 5), new ExifTag(TAG_GPS_PROCESSING_METHOD, 27, 7), new ExifTag(TAG_GPS_AREA_INFORMATION, 28, 7), new ExifTag(TAG_GPS_DATESTAMP, 29, 2), new ExifTag(TAG_GPS_DIFFERENTIAL, 30, 3), new ExifTag(TAG_GPS_H_POSITIONING_ERROR, 31, 5)}; IFD_GPS_TAGS = exifTagArr3; ExifTag[] exifTagArr4 = {new ExifTag(TAG_INTEROPERABILITY_INDEX, 1, 2)}; IFD_INTEROPERABILITY_TAGS = exifTagArr4; ExifTag[] exifTagArr5 = {new ExifTag(TAG_NEW_SUBFILE_TYPE, 254, 4), new ExifTag(TAG_SUBFILE_TYPE, 255, 4), new ExifTag(TAG_THUMBNAIL_IMAGE_WIDTH, 256, 3, 4), new ExifTag(TAG_THUMBNAIL_IMAGE_LENGTH, 257, 3, 4), new ExifTag(TAG_BITS_PER_SAMPLE, 258, 3), new ExifTag(TAG_COMPRESSION, 259, 3), new ExifTag(TAG_PHOTOMETRIC_INTERPRETATION, 262, 3), new ExifTag(TAG_IMAGE_DESCRIPTION, 270, 2), new ExifTag(TAG_MAKE, 271, 2), new ExifTag(TAG_MODEL, 272, 2), new ExifTag(TAG_STRIP_OFFSETS, AudioAttributesCompat.FLAG_ALL_PUBLIC, 3, 4), new ExifTag(TAG_THUMBNAIL_ORIENTATION, 274, 3), new ExifTag(TAG_SAMPLES_PER_PIXEL, 277, 3), new ExifTag(TAG_ROWS_PER_STRIP, 278, 3, 4), new ExifTag(TAG_STRIP_BYTE_COUNTS, 279, 3, 4), new ExifTag(TAG_X_RESOLUTION, 282, 5), new ExifTag(TAG_Y_RESOLUTION, 283, 5), new ExifTag(TAG_PLANAR_CONFIGURATION, 284, 3), new ExifTag(TAG_RESOLUTION_UNIT, 296, 3), new ExifTag(TAG_TRANSFER_FUNCTION, 301, 3), new ExifTag(TAG_SOFTWARE, 305, 2), new ExifTag(TAG_DATETIME, 306, 2), new ExifTag(TAG_ARTIST, 315, 2), new ExifTag(TAG_WHITE_POINT, 318, 5), new ExifTag(TAG_PRIMARY_CHROMATICITIES, 319, 5), new ExifTag(TAG_SUB_IFD_POINTER, 330, 4), new ExifTag(TAG_JPEG_INTERCHANGE_FORMAT, InputDeviceCompat.SOURCE_DPAD, 4), new ExifTag(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, 514, 4), new ExifTag(TAG_Y_CB_CR_COEFFICIENTS, 529, 5), new ExifTag(TAG_Y_CB_CR_SUB_SAMPLING, 530, 3), new ExifTag(TAG_Y_CB_CR_POSITIONING, 531, 3), new ExifTag(TAG_REFERENCE_BLACK_WHITE, 532, 5), new ExifTag(TAG_COPYRIGHT, 33432, 2), new ExifTag(TAG_EXIF_IFD_POINTER, 34665, 4), new ExifTag(TAG_GPS_INFO_IFD_POINTER, 34853, 4), new ExifTag(TAG_DNG_VERSION, 50706, 1), new ExifTag(TAG_DEFAULT_CROP_SIZE, 50720, 3, 4)}; IFD_THUMBNAIL_TAGS = exifTagArr5; ExifTag[] exifTagArr6 = {new ExifTag(TAG_ORF_THUMBNAIL_IMAGE, 256, 7), new ExifTag(TAG_ORF_CAMERA_SETTINGS_IFD_POINTER, 8224, 4), new ExifTag(TAG_ORF_IMAGE_PROCESSING_IFD_POINTER, 8256, 4)}; ORF_MAKER_NOTE_TAGS = exifTagArr6; ExifTag[] exifTagArr7 = {new ExifTag(TAG_ORF_PREVIEW_IMAGE_START, 257, 4), new ExifTag(TAG_ORF_PREVIEW_IMAGE_LENGTH, 258, 4)}; ORF_CAMERA_SETTINGS_TAGS = exifTagArr7; ExifTag[] exifTagArr8 = {new ExifTag(TAG_ORF_ASPECT_FRAME, 4371, 3)}; ORF_IMAGE_PROCESSING_TAGS = exifTagArr8; ExifTag[] exifTagArr9 = {new ExifTag(TAG_COLOR_SPACE, 55, 3)}; PEF_TAGS = exifTagArr9; ExifTag[][] exifTagArr10 = {exifTagArr, exifTagArr2, exifTagArr3, exifTagArr4, exifTagArr5, exifTagArr, exifTagArr6, exifTagArr7, exifTagArr8, exifTagArr9}; EXIF_TAGS = exifTagArr10; sExifTagMapsForReading = new HashMap[exifTagArr10.length]; sExifTagMapsForWriting = new HashMap[exifTagArr10.length]; Charset forName = Charset.forName("US-ASCII"); ASCII = forName; IDENTIFIER_EXIF_APP1 = "Exif\u0000\u0000".getBytes(forName); IDENTIFIER_XMP_APP1 = "http://ns.adobe.com/xap/1.0/\u0000".getBytes(forName); Locale locale = Locale.US; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", locale); sFormatterPrimary = simpleDateFormat; simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", locale); sFormatterSecondary = simpleDateFormat2; simpleDateFormat2.setTimeZone(TimeZone.getTimeZone("UTC")); int i = 0; while (true) { ExifTag[][] exifTagArr11 = EXIF_TAGS; if (i < exifTagArr11.length) { sExifTagMapsForReading[i] = new HashMap<>(); sExifTagMapsForWriting[i] = new HashMap<>(); ExifTag[] exifTagArr12 = exifTagArr11[i]; for (ExifTag exifTag : exifTagArr12) { sExifTagMapsForReading[i].put(Integer.valueOf(exifTag.number), exifTag); sExifTagMapsForWriting[i].put(exifTag.name, exifTag); } i++; } else { HashMap hashMap = sExifPointerTagMap; ExifTag[] exifTagArr13 = EXIF_POINTER_TAGS; hashMap.put(Integer.valueOf(exifTagArr13[0].number), 5); hashMap.put(Integer.valueOf(exifTagArr13[1].number), 1); hashMap.put(Integer.valueOf(exifTagArr13[2].number), 2); hashMap.put(Integer.valueOf(exifTagArr13[3].number), 3); hashMap.put(Integer.valueOf(exifTagArr13[4].number), 7); hashMap.put(Integer.valueOf(exifTagArr13[5].number), 8); return; } } } public ExifInterface(@NonNull File file) throws IOException { ExifTag[][] exifTagArr = EXIF_TAGS; this.mAttributes = new HashMap[exifTagArr.length]; this.mAttributesOffsets = new HashSet(exifTagArr.length); this.mExifByteOrder = ByteOrder.BIG_ENDIAN; Objects.requireNonNull(file, "file cannot be null"); initForFilename(file.getAbsolutePath()); } /* JADX WARNING: Removed duplicated region for block: B:22:0x0056 */ public ExifInterface(@NonNull FileDescriptor fileDescriptor) throws IOException { FileInputStream fileInputStream; Throwable th; ExifTag[][] exifTagArr = EXIF_TAGS; this.mAttributes = new HashMap[exifTagArr.length]; this.mAttributesOffsets = new HashSet(exifTagArr.length); this.mExifByteOrder = ByteOrder.BIG_ENDIAN; Objects.requireNonNull(fileDescriptor, "fileDescriptor cannot be null"); this.mAssetInputStream = null; this.mFilename = null; boolean z2 = false; if (isSeekableFD(fileDescriptor)) { this.mSeekableFileDescriptor = fileDescriptor; try { fileDescriptor = Os.dup(fileDescriptor); z2 = true; } catch (Exception e) { throw new IOException("Failed to duplicate file descriptor", e); } } else { this.mSeekableFileDescriptor = null; } try { fileInputStream = new FileInputStream(fileDescriptor); try { loadAttributes(fileInputStream); closeQuietly(fileInputStream); if (z2) { closeFileDescriptor(fileDescriptor); } } catch (Throwable th2) { th = th2; closeQuietly(fileInputStream); if (z2) { closeFileDescriptor(fileDescriptor); } throw th; } } catch (Throwable th3) { fileInputStream = null; th = th3; closeQuietly(fileInputStream); if (z2) { } throw th; } } public ExifInterface(@NonNull InputStream inputStream) throws IOException { this(inputStream, 0); } public ExifInterface(@NonNull InputStream inputStream, int i) throws IOException { ExifTag[][] exifTagArr = EXIF_TAGS; this.mAttributes = new HashMap[exifTagArr.length]; this.mAttributesOffsets = new HashSet(exifTagArr.length); this.mExifByteOrder = ByteOrder.BIG_ENDIAN; Objects.requireNonNull(inputStream, "inputStream cannot be null"); this.mFilename = null; if (i == 1) { BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream, SIGNATURE_CHECK_SIZE); if (!isExifDataOnly(bufferedInputStream)) { Log.w(TAG, "Given data does not follow the structure of an Exif-only data."); return; } this.mIsExifDataOnly = true; this.mAssetInputStream = null; this.mSeekableFileDescriptor = null; inputStream = bufferedInputStream; } else if (inputStream instanceof AssetManager.AssetInputStream) { this.mAssetInputStream = (AssetManager.AssetInputStream) inputStream; this.mSeekableFileDescriptor = null; } else { if (inputStream instanceof FileInputStream) { FileInputStream fileInputStream = (FileInputStream) inputStream; if (isSeekableFD(fileInputStream.getFD())) { this.mAssetInputStream = null; this.mSeekableFileDescriptor = fileInputStream.getFD(); } } this.mAssetInputStream = null; this.mSeekableFileDescriptor = null; } loadAttributes(inputStream); } public ExifInterface(@NonNull String str) throws IOException { ExifTag[][] exifTagArr = EXIF_TAGS; this.mAttributes = new HashMap[exifTagArr.length]; this.mAttributesOffsets = new HashSet(exifTagArr.length); this.mExifByteOrder = ByteOrder.BIG_ENDIAN; Objects.requireNonNull(str, "filename cannot be null"); initForFilename(str); } private void addDefaultValuesForCompatibility() { String attribute = getAttribute(TAG_DATETIME_ORIGINAL); if (attribute != null && getAttribute(TAG_DATETIME) == null) { this.mAttributes[0].put(TAG_DATETIME, ExifAttribute.createString(attribute)); } if (getAttribute(TAG_IMAGE_WIDTH) == null) { this.mAttributes[0].put(TAG_IMAGE_WIDTH, ExifAttribute.createULong(0, this.mExifByteOrder)); } if (getAttribute(TAG_IMAGE_LENGTH) == null) { this.mAttributes[0].put(TAG_IMAGE_LENGTH, ExifAttribute.createULong(0, this.mExifByteOrder)); } if (getAttribute(TAG_ORIENTATION) == null) { this.mAttributes[0].put(TAG_ORIENTATION, ExifAttribute.createULong(0, this.mExifByteOrder)); } if (getAttribute(TAG_LIGHT_SOURCE) == null) { this.mAttributes[1].put(TAG_LIGHT_SOURCE, ExifAttribute.createULong(0, this.mExifByteOrder)); } } private static String byteArrayToHexString(byte[] bArr) { StringBuilder sb = new StringBuilder(bArr.length * 2); for (int i = 0; i < bArr.length; i++) { sb.append(String.format("%02x", Byte.valueOf(bArr[i]))); } return sb.toString(); } private static void closeFileDescriptor(FileDescriptor fileDescriptor) { try { Os.close(fileDescriptor); } catch (Exception unused) { Log.e(TAG, "Error closing fd."); } } private static void closeQuietly(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (RuntimeException e) { throw e; } catch (Exception unused) { } } } private String convertDecimalDegree(double d) { long j = (long) d; double d2 = d - ((double) j); long j2 = (long) (d2 * 60.0d); long round = Math.round((d2 - (((double) j2) / 60.0d)) * 3600.0d * 1.0E7d); return j + "/1," + j2 + "/1," + round + "/10000000"; } private static double convertRationalLatLonToDouble(String str, String str2) { try { String[] split = str.split(",", -1); String[] split2 = split[0].split(AutocompleteViewModel.COMMAND_DISCOVER_TOKEN, -1); double parseDouble = Double.parseDouble(split2[0].trim()) / Double.parseDouble(split2[1].trim()); String[] split3 = split[1].split(AutocompleteViewModel.COMMAND_DISCOVER_TOKEN, -1); String[] split4 = split[2].split(AutocompleteViewModel.COMMAND_DISCOVER_TOKEN, -1); double parseDouble2 = ((Double.parseDouble(split4[0].trim()) / Double.parseDouble(split4[1].trim())) / 3600.0d) + ((Double.parseDouble(split3[0].trim()) / Double.parseDouble(split3[1].trim())) / 60.0d) + parseDouble; if (!str2.equals(LATITUDE_SOUTH)) { if (!str2.equals(LONGITUDE_WEST)) { if (!str2.equals("N")) { if (!str2.equals(LONGITUDE_EAST)) { throw new IllegalArgumentException(); } } return parseDouble2; } } return -parseDouble2; } catch (ArrayIndexOutOfBoundsException | NumberFormatException unused) { throw new IllegalArgumentException(); } } private static long[] convertToLongArray(Object obj) { if (obj instanceof int[]) { int[] iArr = (int[]) obj; long[] jArr = new long[iArr.length]; for (int i = 0; i < iArr.length; i++) { jArr[i] = (long) iArr[i]; } return jArr; } else if (obj instanceof long[]) { return (long[]) obj; } else { return null; } } private static int copy(InputStream inputStream, OutputStream outputStream) throws IOException { byte[] bArr = new byte[8192]; int i = 0; while (true) { int read = inputStream.read(bArr); if (read == -1) { return i; } i += read; outputStream.write(bArr, 0, read); } } private static void copy(InputStream inputStream, OutputStream outputStream, int i) throws IOException { byte[] bArr = new byte[8192]; while (i > 0) { int min = Math.min(i, 8192); int read = inputStream.read(bArr, 0, min); if (read == min) { i -= read; outputStream.write(bArr, 0, read); } else { throw new IOException("Failed to copy the given amount of bytes from the inputstream to the output stream."); } } } private void copyChunksUpToGivenChunkType(ByteOrderedDataInputStream byteOrderedDataInputStream, ByteOrderedDataOutputStream byteOrderedDataOutputStream, byte[] bArr, byte[] bArr2) throws IOException { String str; while (true) { byte[] bArr3 = new byte[4]; if (byteOrderedDataInputStream.read(bArr3) != 4) { StringBuilder K = a.K("Encountered invalid length while copying WebP chunks up tochunk type "); Charset charset = ASCII; K.append(new String(bArr, charset)); if (bArr2 == null) { str = ""; } else { StringBuilder K2 = a.K(" or "); K2.append(new String(bArr2, charset)); str = K2.toString(); } K.append(str); throw new IOException(K.toString()); } copyWebPChunk(byteOrderedDataInputStream, byteOrderedDataOutputStream, bArr3); if (Arrays.equals(bArr3, bArr)) { return; } if (bArr2 != null && Arrays.equals(bArr3, bArr2)) { return; } } } private void copyWebPChunk(ByteOrderedDataInputStream byteOrderedDataInputStream, ByteOrderedDataOutputStream byteOrderedDataOutputStream, byte[] bArr) throws IOException { int readInt = byteOrderedDataInputStream.readInt(); byteOrderedDataOutputStream.write(bArr); byteOrderedDataOutputStream.writeInt(readInt); if (readInt % 2 == 1) { readInt++; } copy(byteOrderedDataInputStream, byteOrderedDataOutputStream, readInt); } @Nullable private ExifAttribute getExifAttribute(@NonNull String str) { Objects.requireNonNull(str, "tag shouldn't be null"); if (TAG_ISO_SPEED_RATINGS.equals(str)) { if (DEBUG) { Log.d(TAG, "getExifAttribute: Replacing TAG_ISO_SPEED_RATINGS with TAG_PHOTOGRAPHIC_SENSITIVITY."); } str = TAG_PHOTOGRAPHIC_SENSITIVITY; } for (int i = 0; i < EXIF_TAGS.length; i++) { ExifAttribute exifAttribute = this.mAttributes[i].get(str); if (exifAttribute != null) { return exifAttribute; } } return null; } private void getHeifAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { String str; String str2; MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever(); try { if (Build.VERSION.SDK_INT >= 23) { mediaMetadataRetriever.setDataSource(new AnonymousClass1(byteOrderedDataInputStream)); } else { FileDescriptor fileDescriptor = this.mSeekableFileDescriptor; if (fileDescriptor != null) { mediaMetadataRetriever.setDataSource(fileDescriptor); } else { String str3 = this.mFilename; if (str3 != null) { mediaMetadataRetriever.setDataSource(str3); } else { mediaMetadataRetriever.release(); return; } } } String extractMetadata = mediaMetadataRetriever.extractMetadata(33); String extractMetadata2 = mediaMetadataRetriever.extractMetadata(34); String extractMetadata3 = mediaMetadataRetriever.extractMetadata(26); String extractMetadata4 = mediaMetadataRetriever.extractMetadata(17); String str4 = null; if ("yes".equals(extractMetadata3)) { str4 = mediaMetadataRetriever.extractMetadata(29); str2 = mediaMetadataRetriever.extractMetadata(30); str = mediaMetadataRetriever.extractMetadata(31); } else if ("yes".equals(extractMetadata4)) { str4 = mediaMetadataRetriever.extractMetadata(18); str2 = mediaMetadataRetriever.extractMetadata(19); str = mediaMetadataRetriever.extractMetadata(24); } else { str2 = null; str = null; } if (str4 != null) { this.mAttributes[0].put(TAG_IMAGE_WIDTH, ExifAttribute.createUShort(Integer.parseInt(str4), this.mExifByteOrder)); } if (str2 != null) { this.mAttributes[0].put(TAG_IMAGE_LENGTH, ExifAttribute.createUShort(Integer.parseInt(str2), this.mExifByteOrder)); } if (str != null) { int i = 1; int parseInt = Integer.parseInt(str); if (parseInt == 90) { i = 6; } else if (parseInt == 180) { i = 3; } else if (parseInt == 270) { i = 8; } this.mAttributes[0].put(TAG_ORIENTATION, ExifAttribute.createUShort(i, this.mExifByteOrder)); } if (!(extractMetadata == null || extractMetadata2 == null)) { int parseInt2 = Integer.parseInt(extractMetadata); int parseInt3 = Integer.parseInt(extractMetadata2); if (parseInt3 > 6) { byteOrderedDataInputStream.seek((long) parseInt2); byte[] bArr = new byte[6]; if (byteOrderedDataInputStream.read(bArr) == 6) { int i2 = parseInt2 + 6; int i3 = parseInt3 - 6; if (Arrays.equals(bArr, IDENTIFIER_EXIF_APP1)) { byte[] bArr2 = new byte[i3]; if (byteOrderedDataInputStream.read(bArr2) == i3) { this.mOffsetToExifData = i2; readExifSegment(bArr2, 0); } else { throw new IOException("Can't read exif"); } } else { throw new IOException("Invalid identifier"); } } else { throw new IOException("Can't read identifier"); } } else { throw new IOException("Invalid exif length"); } } if (DEBUG) { Log.d(TAG, "Heif meta: " + str4 + "x" + str2 + ", rotation " + str); } } finally { mediaMetadataRetriever.release(); } } /* JADX WARNING: Removed duplicated region for block: B:30:0x00b3 A[FALL_THROUGH] */ /* JADX WARNING: Removed duplicated region for block: B:53:0x0170 */ /* JADX WARNING: Removed duplicated region for block: B:74:0x0184 A[SYNTHETIC] */ private void getJpegAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream, int i, int i2) throws IOException { if (DEBUG) { Log.d(TAG, "getJpegAttributes starting with: " + byteOrderedDataInputStream); } char c2 = 0; byteOrderedDataInputStream.mark(0); byteOrderedDataInputStream.setByteOrder(ByteOrder.BIG_ENDIAN); byte readByte = byteOrderedDataInputStream.readByte(); byte b = -1; if (readByte != -1) { StringBuilder K = a.K("Invalid marker: "); K.append(Integer.toHexString(readByte & 255)); throw new IOException(K.toString()); } else if (byteOrderedDataInputStream.readByte() == -40) { int i3 = 2; int i4 = 2; while (true) { byte readByte2 = byteOrderedDataInputStream.readByte(); if (readByte2 == b) { int i5 = i4 + 1; byte readByte3 = byteOrderedDataInputStream.readByte(); boolean z2 = DEBUG; if (z2) { StringBuilder K2 = a.K("Found JPEG segment indicator: "); K2.append(Integer.toHexString(readByte3 & 255)); Log.d(TAG, K2.toString()); } int i6 = i5 + 1; if (readByte3 != -39 && readByte3 != -38) { int readUnsignedShort = byteOrderedDataInputStream.readUnsignedShort() - i3; int i7 = i6 + i3; if (z2) { StringBuilder K3 = a.K("JPEG segment: "); K3.append(Integer.toHexString(readByte3 & 255)); K3.append(" (length: "); K3.append(readUnsignedShort + 2); K3.append(")"); Log.d(TAG, K3.toString()); } if (readUnsignedShort >= 0) { if (readByte3 == -31) { byte[] bArr = new byte[readUnsignedShort]; byteOrderedDataInputStream.readFully(bArr); int i8 = i7 + readUnsignedShort; byte[] bArr2 = IDENTIFIER_EXIF_APP1; if (startsWith(bArr, bArr2)) { byte[] copyOfRange = Arrays.copyOfRange(bArr, bArr2.length, readUnsignedShort); this.mOffsetToExifData = i + i7 + bArr2.length; readExifSegment(copyOfRange, i2); setThumbnailData(new ByteOrderedDataInputStream(copyOfRange)); } else { byte[] bArr3 = IDENTIFIER_XMP_APP1; if (startsWith(bArr, bArr3)) { int length = i7 + bArr3.length; byte[] copyOfRange2 = Arrays.copyOfRange(bArr, bArr3.length, readUnsignedShort); if (getAttribute(TAG_XMP) == null) { this.mAttributes[c2].put(TAG_XMP, new ExifAttribute(1, copyOfRange2.length, (long) length, copyOfRange2)); this.mXmpIsFromSeparateMarker = true; } } } i7 = i8; } else if (readByte3 != -2) { switch (readByte3) { default: switch (readByte3) { default: switch (readByte3) { default: switch (readByte3) { } case -55: case -54: case -53: if (byteOrderedDataInputStream.skipBytes(1) == 1) { this.mAttributes[i2].put(TAG_IMAGE_LENGTH, ExifAttribute.createULong((long) byteOrderedDataInputStream.readUnsignedShort(), this.mExifByteOrder)); this.mAttributes[i2].put(TAG_IMAGE_WIDTH, ExifAttribute.createULong((long) byteOrderedDataInputStream.readUnsignedShort(), this.mExifByteOrder)); readUnsignedShort -= 5; break; } else { throw new IOException("Invalid SOFx"); } } case -59: case -58: case -57: break; } case -64: case -63: case -62: case -61: break; } if (readUnsignedShort >= 0) { throw new IOException("Invalid length"); } else if (byteOrderedDataInputStream.skipBytes(readUnsignedShort) == readUnsignedShort) { i4 = i7 + readUnsignedShort; c2 = 0; i3 = 2; b = -1; } else { throw new IOException("Invalid JPEG segment"); } } else { byte[] bArr4 = new byte[readUnsignedShort]; if (byteOrderedDataInputStream.read(bArr4) != readUnsignedShort) { throw new IOException("Invalid exif"); } else if (getAttribute(TAG_USER_COMMENT) == null) { this.mAttributes[1].put(TAG_USER_COMMENT, ExifAttribute.createString(new String(bArr4, ASCII))); } } readUnsignedShort = 0; if (readUnsignedShort >= 0) { } } else { throw new IOException("Invalid length"); } } } else { StringBuilder K4 = a.K("Invalid marker:"); K4.append(Integer.toHexString(readByte2 & 255)); throw new IOException(K4.toString()); } } byteOrderedDataInputStream.setByteOrder(this.mExifByteOrder); } else { StringBuilder K5 = a.K("Invalid marker: "); K5.append(Integer.toHexString(readByte & 255)); throw new IOException(K5.toString()); } } private int getMimeType(BufferedInputStream bufferedInputStream) throws IOException { bufferedInputStream.mark(SIGNATURE_CHECK_SIZE); byte[] bArr = new byte[SIGNATURE_CHECK_SIZE]; bufferedInputStream.read(bArr); bufferedInputStream.reset(); if (isJpegFormat(bArr)) { return 4; } if (isRafFormat(bArr)) { return 9; } if (isHeifFormat(bArr)) { return 12; } if (isOrfFormat(bArr)) { return 7; } if (isRw2Format(bArr)) { return 10; } if (isPngFormat(bArr)) { return 13; } return isWebpFormat(bArr) ? 14 : 0; } private void getOrfAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { getRawAttributes(byteOrderedDataInputStream); ExifAttribute exifAttribute = this.mAttributes[1].get(TAG_MAKER_NOTE); if (exifAttribute != null) { ByteOrderedDataInputStream byteOrderedDataInputStream2 = new ByteOrderedDataInputStream(exifAttribute.bytes); byteOrderedDataInputStream2.setByteOrder(this.mExifByteOrder); byte[] bArr = ORF_MAKER_NOTE_HEADER_1; byte[] bArr2 = new byte[bArr.length]; byteOrderedDataInputStream2.readFully(bArr2); byteOrderedDataInputStream2.seek(0); byte[] bArr3 = ORF_MAKER_NOTE_HEADER_2; byte[] bArr4 = new byte[bArr3.length]; byteOrderedDataInputStream2.readFully(bArr4); if (Arrays.equals(bArr2, bArr)) { byteOrderedDataInputStream2.seek(8); } else if (Arrays.equals(bArr4, bArr3)) { byteOrderedDataInputStream2.seek(12); } readImageFileDirectory(byteOrderedDataInputStream2, 6); ExifAttribute exifAttribute2 = this.mAttributes[7].get(TAG_ORF_PREVIEW_IMAGE_START); ExifAttribute exifAttribute3 = this.mAttributes[7].get(TAG_ORF_PREVIEW_IMAGE_LENGTH); if (!(exifAttribute2 == null || exifAttribute3 == null)) { this.mAttributes[5].put(TAG_JPEG_INTERCHANGE_FORMAT, exifAttribute2); this.mAttributes[5].put(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, exifAttribute3); } ExifAttribute exifAttribute4 = this.mAttributes[8].get(TAG_ORF_ASPECT_FRAME); if (exifAttribute4 != null) { int[] iArr = (int[]) exifAttribute4.getValue(this.mExifByteOrder); if (iArr == null || iArr.length != 4) { StringBuilder K = a.K("Invalid aspect frame values. frame="); K.append(Arrays.toString(iArr)); Log.w(TAG, K.toString()); } else if (iArr[2] > iArr[0] && iArr[3] > iArr[1]) { int i = (iArr[2] - iArr[0]) + 1; int i2 = (iArr[3] - iArr[1]) + 1; if (i < i2) { int i3 = i + i2; i2 = i3 - i2; i = i3 - i2; } ExifAttribute createUShort = ExifAttribute.createUShort(i, this.mExifByteOrder); ExifAttribute createUShort2 = ExifAttribute.createUShort(i2, this.mExifByteOrder); this.mAttributes[0].put(TAG_IMAGE_WIDTH, createUShort); this.mAttributes[0].put(TAG_IMAGE_LENGTH, createUShort2); } } } } private void getPngAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { if (DEBUG) { Log.d(TAG, "getPngAttributes starting with: " + byteOrderedDataInputStream); } byteOrderedDataInputStream.mark(0); byteOrderedDataInputStream.setByteOrder(ByteOrder.BIG_ENDIAN); byte[] bArr = PNG_SIGNATURE; byteOrderedDataInputStream.skipBytes(bArr.length); int length = bArr.length + 0; while (true) { try { int readInt = byteOrderedDataInputStream.readInt(); int i = length + 4; byte[] bArr2 = new byte[4]; if (byteOrderedDataInputStream.read(bArr2) == 4) { int i2 = i + 4; if (i2 == 16) { if (!Arrays.equals(bArr2, PNG_CHUNK_TYPE_IHDR)) { throw new IOException("Encountered invalid PNG file--IHDR chunk should appearas the first chunk"); } } if (!Arrays.equals(bArr2, PNG_CHUNK_TYPE_IEND)) { if (Arrays.equals(bArr2, PNG_CHUNK_TYPE_EXIF)) { byte[] bArr3 = new byte[readInt]; if (byteOrderedDataInputStream.read(bArr3) == readInt) { int readInt2 = byteOrderedDataInputStream.readInt(); CRC32 crc32 = new CRC32(); crc32.update(bArr2); crc32.update(bArr3); if (((int) crc32.getValue()) == readInt2) { this.mOffsetToExifData = i2; readExifSegment(bArr3, 0); validateImages(); setThumbnailData(new ByteOrderedDataInputStream(bArr3)); return; } throw new IOException("Encountered invalid CRC value for PNG-EXIF chunk.\n recorded CRC value: " + readInt2 + ", calculated CRC value: " + crc32.getValue()); } throw new IOException("Failed to read given length for given PNG chunk type: " + byteArrayToHexString(bArr2)); } int i3 = readInt + 4; byteOrderedDataInputStream.skipBytes(i3); length = i2 + i3; } else { return; } } else { throw new IOException("Encountered invalid length while parsing PNG chunktype"); } } catch (EOFException unused) { throw new IOException("Encountered corrupt PNG file."); } } } private void getRafAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { boolean z2 = DEBUG; if (z2) { Log.d(TAG, "getRafAttributes starting with: " + byteOrderedDataInputStream); } byteOrderedDataInputStream.mark(0); byteOrderedDataInputStream.skipBytes(84); byte[] bArr = new byte[4]; byte[] bArr2 = new byte[4]; byte[] bArr3 = new byte[4]; byteOrderedDataInputStream.read(bArr); byteOrderedDataInputStream.read(bArr2); byteOrderedDataInputStream.read(bArr3); int i = ByteBuffer.wrap(bArr).getInt(); int i2 = ByteBuffer.wrap(bArr2).getInt(); int i3 = ByteBuffer.wrap(bArr3).getInt(); byte[] bArr4 = new byte[i2]; byteOrderedDataInputStream.seek((long) i); byteOrderedDataInputStream.read(bArr4); getJpegAttributes(new ByteOrderedDataInputStream(bArr4), i, 5); byteOrderedDataInputStream.seek((long) i3); byteOrderedDataInputStream.setByteOrder(ByteOrder.BIG_ENDIAN); int readInt = byteOrderedDataInputStream.readInt(); if (z2) { a.c0("numberOfDirectoryEntry: ", readInt, TAG); } for (int i4 = 0; i4 < readInt; i4++) { int readUnsignedShort = byteOrderedDataInputStream.readUnsignedShort(); int readUnsignedShort2 = byteOrderedDataInputStream.readUnsignedShort(); if (readUnsignedShort == TAG_RAF_IMAGE_SIZE.number) { short readShort = byteOrderedDataInputStream.readShort(); short readShort2 = byteOrderedDataInputStream.readShort(); ExifAttribute createUShort = ExifAttribute.createUShort(readShort, this.mExifByteOrder); ExifAttribute createUShort2 = ExifAttribute.createUShort(readShort2, this.mExifByteOrder); this.mAttributes[0].put(TAG_IMAGE_LENGTH, createUShort); this.mAttributes[0].put(TAG_IMAGE_WIDTH, createUShort2); if (DEBUG) { Log.d(TAG, "Updated to length: " + ((int) readShort) + ", width: " + ((int) readShort2)); return; } return; } byteOrderedDataInputStream.skipBytes(readUnsignedShort2); } } private void getRawAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { ExifAttribute exifAttribute; parseTiffHeaders(byteOrderedDataInputStream, byteOrderedDataInputStream.available()); readImageFileDirectory(byteOrderedDataInputStream, 0); updateImageSizeValues(byteOrderedDataInputStream, 0); updateImageSizeValues(byteOrderedDataInputStream, 5); updateImageSizeValues(byteOrderedDataInputStream, 4); validateImages(); if (this.mMimeType == 8 && (exifAttribute = this.mAttributes[1].get(TAG_MAKER_NOTE)) != null) { ByteOrderedDataInputStream byteOrderedDataInputStream2 = new ByteOrderedDataInputStream(exifAttribute.bytes); byteOrderedDataInputStream2.setByteOrder(this.mExifByteOrder); byteOrderedDataInputStream2.seek(6); readImageFileDirectory(byteOrderedDataInputStream2, 9); ExifAttribute exifAttribute2 = this.mAttributes[9].get(TAG_COLOR_SPACE); if (exifAttribute2 != null) { this.mAttributes[1].put(TAG_COLOR_SPACE, exifAttribute2); } } } private void getRw2Attributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { if (DEBUG) { Log.d(TAG, "getRw2Attributes starting with: " + byteOrderedDataInputStream); } getRawAttributes(byteOrderedDataInputStream); ExifAttribute exifAttribute = this.mAttributes[0].get(TAG_RW2_JPG_FROM_RAW); if (exifAttribute != null) { getJpegAttributes(new ByteOrderedDataInputStream(exifAttribute.bytes), (int) exifAttribute.bytesOffset, 5); } ExifAttribute exifAttribute2 = this.mAttributes[0].get(TAG_RW2_ISO); ExifAttribute exifAttribute3 = this.mAttributes[1].get(TAG_PHOTOGRAPHIC_SENSITIVITY); if (exifAttribute2 != null && exifAttribute3 == null) { this.mAttributes[1].put(TAG_PHOTOGRAPHIC_SENSITIVITY, exifAttribute2); } } private void getStandaloneAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { byte[] bArr = IDENTIFIER_EXIF_APP1; byteOrderedDataInputStream.skipBytes(bArr.length); byte[] bArr2 = new byte[byteOrderedDataInputStream.available()]; byteOrderedDataInputStream.readFully(bArr2); this.mOffsetToExifData = bArr.length; readExifSegment(bArr2, 0); } private void getWebpAttributes(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { if (DEBUG) { Log.d(TAG, "getWebpAttributes starting with: " + byteOrderedDataInputStream); } byteOrderedDataInputStream.mark(0); byteOrderedDataInputStream.setByteOrder(ByteOrder.LITTLE_ENDIAN); byteOrderedDataInputStream.skipBytes(WEBP_SIGNATURE_1.length); int readInt = byteOrderedDataInputStream.readInt() + 8; int skipBytes = byteOrderedDataInputStream.skipBytes(WEBP_SIGNATURE_2.length) + 8; while (true) { try { byte[] bArr = new byte[4]; if (byteOrderedDataInputStream.read(bArr) == 4) { int readInt2 = byteOrderedDataInputStream.readInt(); int i = skipBytes + 4 + 4; if (Arrays.equals(WEBP_CHUNK_TYPE_EXIF, bArr)) { byte[] bArr2 = new byte[readInt2]; if (byteOrderedDataInputStream.read(bArr2) == readInt2) { this.mOffsetToExifData = i; readExifSegment(bArr2, 0); setThumbnailData(new ByteOrderedDataInputStream(bArr2)); return; } throw new IOException("Failed to read given length for given PNG chunk type: " + byteArrayToHexString(bArr)); } if (readInt2 % 2 == 1) { readInt2++; } int i2 = i + readInt2; if (i2 != readInt) { if (i2 <= readInt) { int skipBytes2 = byteOrderedDataInputStream.skipBytes(readInt2); if (skipBytes2 == readInt2) { skipBytes = i + skipBytes2; } else { throw new IOException("Encountered WebP file with invalid chunk size"); } } else { throw new IOException("Encountered WebP file with invalid chunk size"); } } else { return; } } else { throw new IOException("Encountered invalid length while parsing WebP chunktype"); } } catch (EOFException unused) { throw new IOException("Encountered corrupt WebP file."); } } } private static Pair guessDataFormat(String str) { if (str.contains(",")) { String[] split = str.split(",", -1); Pair guessDataFormat = guessDataFormat(split[0]); if (((Integer) guessDataFormat.first).intValue() == 2) { return guessDataFormat; } for (int i = 1; i < split.length; i++) { Pair guessDataFormat2 = guessDataFormat(split[i]); int intValue = (((Integer) guessDataFormat2.first).equals(guessDataFormat.first) || ((Integer) guessDataFormat2.second).equals(guessDataFormat.first)) ? ((Integer) guessDataFormat.first).intValue() : -1; int intValue2 = (((Integer) guessDataFormat.second).intValue() == -1 || (!((Integer) guessDataFormat2.first).equals(guessDataFormat.second) && !((Integer) guessDataFormat2.second).equals(guessDataFormat.second))) ? -1 : ((Integer) guessDataFormat.second).intValue(); if (intValue == -1 && intValue2 == -1) { return new Pair<>(2, -1); } if (intValue == -1) { guessDataFormat = new Pair<>(Integer.valueOf(intValue2), -1); } else if (intValue2 == -1) { guessDataFormat = new Pair<>(Integer.valueOf(intValue), -1); } } return guessDataFormat; } else if (str.contains(AutocompleteViewModel.COMMAND_DISCOVER_TOKEN)) { String[] split2 = str.split(AutocompleteViewModel.COMMAND_DISCOVER_TOKEN, -1); if (split2.length == 2) { try { long parseDouble = (long) Double.parseDouble(split2[0]); long parseDouble2 = (long) Double.parseDouble(split2[1]); if (parseDouble >= 0) { if (parseDouble2 >= 0) { if (parseDouble <= 2147483647L) { if (parseDouble2 <= 2147483647L) { return new Pair<>(10, 5); } } return new Pair<>(5, -1); } } return new Pair<>(10, -1); } catch (NumberFormatException unused) { } } return new Pair<>(2, -1); } else { try { Long valueOf = Long.valueOf(Long.parseLong(str)); return (valueOf.longValue() < 0 || valueOf.longValue() > 65535) ? valueOf.longValue() < 0 ? new Pair<>(9, -1) : new Pair<>(4, -1) : new Pair<>(3, 4); } catch (NumberFormatException unused2) { try { Double.parseDouble(str); return new Pair<>(12, -1); } catch (NumberFormatException unused3) { return new Pair<>(2, -1); } } } } private void handleThumbnailFromJfif(ByteOrderedDataInputStream byteOrderedDataInputStream, HashMap hashMap) throws IOException { ExifAttribute exifAttribute = (ExifAttribute) hashMap.get(TAG_JPEG_INTERCHANGE_FORMAT); ExifAttribute exifAttribute2 = (ExifAttribute) hashMap.get(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH); if (exifAttribute != null && exifAttribute2 != null) { int intValue = exifAttribute.getIntValue(this.mExifByteOrder); int intValue2 = exifAttribute2.getIntValue(this.mExifByteOrder); if (this.mMimeType == 7) { intValue += this.mOrfMakerNoteOffset; } int min = Math.min(intValue2, byteOrderedDataInputStream.getLength() - intValue); if (intValue > 0 && min > 0) { this.mHasThumbnail = true; if (this.mFilename == null && this.mAssetInputStream == null && this.mSeekableFileDescriptor == null) { byte[] bArr = new byte[min]; byteOrderedDataInputStream.skip((long) intValue); byteOrderedDataInputStream.read(bArr); this.mThumbnailBytes = bArr; } this.mThumbnailOffset = intValue; this.mThumbnailLength = min; } if (DEBUG) { Log.d(TAG, "Setting thumbnail attributes with offset: " + intValue + ", length: " + min); } } } private void handleThumbnailFromStrips(ByteOrderedDataInputStream byteOrderedDataInputStream, HashMap hashMap) throws IOException { ExifAttribute exifAttribute = (ExifAttribute) hashMap.get(TAG_STRIP_OFFSETS); ExifAttribute exifAttribute2 = (ExifAttribute) hashMap.get(TAG_STRIP_BYTE_COUNTS); if (exifAttribute != null && exifAttribute2 != null) { long[] convertToLongArray = convertToLongArray(exifAttribute.getValue(this.mExifByteOrder)); long[] convertToLongArray2 = convertToLongArray(exifAttribute2.getValue(this.mExifByteOrder)); if (convertToLongArray == null || convertToLongArray.length == 0) { Log.w(TAG, "stripOffsets should not be null or have zero length."); } else if (convertToLongArray2 == null || convertToLongArray2.length == 0) { Log.w(TAG, "stripByteCounts should not be null or have zero length."); } else if (convertToLongArray.length != convertToLongArray2.length) { Log.w(TAG, "stripOffsets and stripByteCounts should have same length."); } else { long j = 0; for (long j2 : convertToLongArray2) { j += j2; } int i = (int) j; byte[] bArr = new byte[i]; int i2 = 1; this.mAreThumbnailStripsConsecutive = true; this.mHasThumbnailStrips = true; this.mHasThumbnail = true; int i3 = 0; int i4 = 0; int i5 = 0; while (i3 < convertToLongArray.length) { int i6 = (int) convertToLongArray[i3]; int i7 = (int) convertToLongArray2[i3]; if (i3 < convertToLongArray.length - i2 && ((long) (i6 + i7)) != convertToLongArray[i3 + 1]) { this.mAreThumbnailStripsConsecutive = false; } int i8 = i6 - i4; if (i8 < 0) { Log.d(TAG, "Invalid strip offset value"); return; } long j3 = (long) i8; if (byteOrderedDataInputStream.skip(j3) != j3) { Log.d(TAG, "Failed to skip " + i8 + " bytes."); return; } int i9 = i4 + i8; byte[] bArr2 = new byte[i7]; if (byteOrderedDataInputStream.read(bArr2) != i7) { Log.d(TAG, "Failed to read " + i7 + " bytes."); return; } i4 = i9 + i7; System.arraycopy(bArr2, 0, bArr, i5, i7); i5 += i7; i3++; i2 = 1; } this.mThumbnailBytes = bArr; if (this.mAreThumbnailStripsConsecutive) { this.mThumbnailOffset = (int) convertToLongArray[0]; this.mThumbnailLength = i; } } } } private void initForFilename(String str) throws IOException { Throwable th; Objects.requireNonNull(str, "filename cannot be null"); FileInputStream fileInputStream = null; this.mAssetInputStream = null; this.mFilename = str; try { FileInputStream fileInputStream2 = new FileInputStream(str); try { if (isSeekableFD(fileInputStream2.getFD())) { this.mSeekableFileDescriptor = fileInputStream2.getFD(); } else { this.mSeekableFileDescriptor = null; } loadAttributes(fileInputStream2); closeQuietly(fileInputStream2); } catch (Throwable th2) { th = th2; fileInputStream = fileInputStream2; closeQuietly(fileInputStream); throw th; } } catch (Throwable th3) { th = th3; closeQuietly(fileInputStream); throw th; } } private static boolean isExifDataOnly(BufferedInputStream bufferedInputStream) throws IOException { byte[] bArr = IDENTIFIER_EXIF_APP1; bufferedInputStream.mark(bArr.length); byte[] bArr2 = new byte[bArr.length]; bufferedInputStream.read(bArr2); bufferedInputStream.reset(); int i = 0; while (true) { byte[] bArr3 = IDENTIFIER_EXIF_APP1; if (i >= bArr3.length) { return true; } if (bArr2[i] != bArr3[i]) { return false; } i++; } } /* JADX WARNING: Removed duplicated region for block: B:52:0x0092 A[Catch:{ all -> 0x008b }] */ /* JADX WARNING: Removed duplicated region for block: B:54:0x009b */ /* JADX WARNING: Removed duplicated region for block: B:57:0x00a1 */ private boolean isHeifFormat(byte[] bArr) throws IOException { Throwable th; Exception e; ByteOrderedDataInputStream byteOrderedDataInputStream = null; try { ByteOrderedDataInputStream byteOrderedDataInputStream2 = new ByteOrderedDataInputStream(bArr); try { long readInt = (long) byteOrderedDataInputStream2.readInt(); byte[] bArr2 = new byte[4]; byteOrderedDataInputStream2.read(bArr2); if (!Arrays.equals(bArr2, HEIF_TYPE_FTYP)) { byteOrderedDataInputStream2.close(); return false; } long j = 16; if (readInt == 1) { readInt = byteOrderedDataInputStream2.readLong(); if (readInt < 16) { byteOrderedDataInputStream2.close(); return false; } } else { j = 8; } if (readInt > ((long) bArr.length)) { readInt = (long) bArr.length; } long j2 = readInt - j; if (j2 < 8) { byteOrderedDataInputStream2.close(); return false; } byte[] bArr3 = new byte[4]; boolean z2 = false; boolean z3 = false; for (long j3 = 0; j3 < j2 / 4; j3++) { if (byteOrderedDataInputStream2.read(bArr3) != 4) { byteOrderedDataInputStream2.close(); return false; } if (j3 != 1) { if (Arrays.equals(bArr3, HEIF_BRAND_MIF1)) { z2 = true; } else if (Arrays.equals(bArr3, HEIF_BRAND_HEIC)) { z3 = true; } if (z2 && z3) { byteOrderedDataInputStream2.close(); return true; } } } byteOrderedDataInputStream2.close(); return false; } catch (Exception e2) { e = e2; byteOrderedDataInputStream = byteOrderedDataInputStream2; try { if (DEBUG) { } if (byteOrderedDataInputStream != null) { } return false; } catch (Throwable th2) { th = th2; if (byteOrderedDataInputStream != null) { } throw th; } } catch (Throwable th3) { th = th3; byteOrderedDataInputStream = byteOrderedDataInputStream2; if (byteOrderedDataInputStream != null) { byteOrderedDataInputStream.close(); } throw th; } } catch (Exception e3) { e = e3; if (DEBUG) { Log.d(TAG, "Exception parsing HEIF file type box.", e); } if (byteOrderedDataInputStream != null) { byteOrderedDataInputStream.close(); } return false; } } private static boolean isJpegFormat(byte[] bArr) throws IOException { int i = 0; while (true) { byte[] bArr2 = JPEG_SIGNATURE; if (i >= bArr2.length) { return true; } if (bArr[i] != bArr2[i]) { return false; } i++; } } /* JADX WARNING: Removed duplicated region for block: B:18:0x0029 */ /* JADX WARNING: Removed duplicated region for block: B:22:0x0030 */ private boolean isOrfFormat(byte[] bArr) throws IOException { Throwable th; boolean z2 = false; ByteOrderedDataInputStream byteOrderedDataInputStream = null; try { ByteOrderedDataInputStream byteOrderedDataInputStream2 = new ByteOrderedDataInputStream(bArr); try { ByteOrder readByteOrder = readByteOrder(byteOrderedDataInputStream2); this.mExifByteOrder = readByteOrder; byteOrderedDataInputStream2.setByteOrder(readByteOrder); short readShort = byteOrderedDataInputStream2.readShort(); if (readShort == 20306 || readShort == 21330) { z2 = true; } byteOrderedDataInputStream2.close(); return z2; } catch (Exception unused) { byteOrderedDataInputStream = byteOrderedDataInputStream2; if (byteOrderedDataInputStream != null) { } return false; } catch (Throwable th2) { th = th2; byteOrderedDataInputStream = byteOrderedDataInputStream2; if (byteOrderedDataInputStream != null) { } throw th; } } catch (Exception unused2) { if (byteOrderedDataInputStream != null) { byteOrderedDataInputStream.close(); } return false; } catch (Throwable th3) { th = th3; if (byteOrderedDataInputStream != null) { byteOrderedDataInputStream.close(); } throw th; } } private boolean isPngFormat(byte[] bArr) throws IOException { int i = 0; while (true) { byte[] bArr2 = PNG_SIGNATURE; if (i >= bArr2.length) { return true; } if (bArr[i] != bArr2[i]) { return false; } i++; } } private boolean isRafFormat(byte[] bArr) throws IOException { byte[] bytes = RAF_SIGNATURE.getBytes(Charset.defaultCharset()); for (int i = 0; i < bytes.length; i++) { if (bArr[i] != bytes[i]) { return false; } } return true; } /* JADX WARNING: Removed duplicated region for block: B:16:0x0025 */ /* JADX WARNING: Removed duplicated region for block: B:20:0x002c */ private boolean isRw2Format(byte[] bArr) throws IOException { Throwable th; boolean z2 = false; ByteOrderedDataInputStream byteOrderedDataInputStream = null; try { ByteOrderedDataInputStream byteOrderedDataInputStream2 = new ByteOrderedDataInputStream(bArr); try { ByteOrder readByteOrder = readByteOrder(byteOrderedDataInputStream2); this.mExifByteOrder = readByteOrder; byteOrderedDataInputStream2.setByteOrder(readByteOrder); if (byteOrderedDataInputStream2.readShort() == 85) { z2 = true; } byteOrderedDataInputStream2.close(); return z2; } catch (Exception unused) { byteOrderedDataInputStream = byteOrderedDataInputStream2; if (byteOrderedDataInputStream != null) { } return false; } catch (Throwable th2) { th = th2; byteOrderedDataInputStream = byteOrderedDataInputStream2; if (byteOrderedDataInputStream != null) { } throw th; } } catch (Exception unused2) { if (byteOrderedDataInputStream != null) { byteOrderedDataInputStream.close(); } return false; } catch (Throwable th3) { th = th3; if (byteOrderedDataInputStream != null) { byteOrderedDataInputStream.close(); } throw th; } } private static boolean isSeekableFD(FileDescriptor fileDescriptor) { try { Os.lseek(fileDescriptor, 0, OsConstants.SEEK_CUR); return true; } catch (Exception unused) { if (!DEBUG) { return false; } Log.d(TAG, "The file descriptor for the given input is not seekable"); return false; } } private boolean isSupportedDataType(HashMap hashMap) throws IOException { ExifAttribute exifAttribute; int intValue; ExifAttribute exifAttribute2 = (ExifAttribute) hashMap.get(TAG_BITS_PER_SAMPLE); if (exifAttribute2 != null) { int[] iArr = (int[]) exifAttribute2.getValue(this.mExifByteOrder); int[] iArr2 = BITS_PER_SAMPLE_RGB; if (Arrays.equals(iArr2, iArr)) { return true; } if (this.mMimeType == 3 && (exifAttribute = (ExifAttribute) hashMap.get(TAG_PHOTOMETRIC_INTERPRETATION)) != null && (((intValue = exifAttribute.getIntValue(this.mExifByteOrder)) == 1 && Arrays.equals(iArr, BITS_PER_SAMPLE_GREYSCALE_2)) || (intValue == 6 && Arrays.equals(iArr, iArr2)))) { return true; } } if (!DEBUG) { return false; } Log.d(TAG, "Unsupported data type value"); return false; } private boolean isSupportedFormatForSavingAttributes() { int i = this.mMimeType; return i == 4 || i == 13 || i == 14; } public static boolean isSupportedMimeType(@NonNull String str) { Objects.requireNonNull(str, "mimeType shouldn't be null"); String lowerCase = str.toLowerCase(Locale.ROOT); lowerCase.hashCode(); char c2 = 65535; switch (lowerCase.hashCode()) { case -1875291391: if (lowerCase.equals("image/x-fuji-raf")) { c2 = 0; break; } break; case -1635437028: if (lowerCase.equals("image/x-samsung-srw")) { c2 = 1; break; } break; case -1594371159: if (lowerCase.equals("image/x-sony-arw")) { c2 = 2; break; } break; case -1487464693: if (lowerCase.equals("image/heic")) { c2 = 3; break; } break; case -1487464690: if (lowerCase.equals("image/heif")) { c2 = 4; break; } break; case -1487394660: if (lowerCase.equals("image/jpeg")) { c2 = 5; break; } break; case -1487018032: if (lowerCase.equals("image/webp")) { c2 = 6; break; } break; case -1423313290: if (lowerCase.equals("image/x-adobe-dng")) { c2 = 7; break; } break; case -985160897: if (lowerCase.equals("image/x-panasonic-rw2")) { c2 = '\b'; break; } break; case -879258763: if (lowerCase.equals("image/png")) { c2 = '\t'; break; } break; case -332763809: if (lowerCase.equals("image/x-pentax-pef")) { c2 = '\n'; break; } break; case 1378106698: if (lowerCase.equals("image/x-olympus-orf")) { c2 = 11; break; } break; case 2099152104: if (lowerCase.equals("image/x-nikon-nef")) { c2 = '\f'; break; } break; case 2099152524: if (lowerCase.equals("image/x-nikon-nrw")) { c2 = '\r'; break; } break; case 2111234748: if (lowerCase.equals("image/x-canon-cr2")) { c2 = 14; break; } break; } switch (c2) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case '\b': case '\t': case '\n': case 11: case '\f': case '\r': case 14: return true; default: return false; } } private boolean isThumbnail(HashMap hashMap) throws IOException { ExifAttribute exifAttribute = (ExifAttribute) hashMap.get(TAG_IMAGE_LENGTH); ExifAttribute exifAttribute2 = (ExifAttribute) hashMap.get(TAG_IMAGE_WIDTH); if (exifAttribute == null || exifAttribute2 == null) { return false; } return exifAttribute.getIntValue(this.mExifByteOrder) <= 512 && exifAttribute2.getIntValue(this.mExifByteOrder) <= 512; } private boolean isWebpFormat(byte[] bArr) throws IOException { int i = 0; while (true) { byte[] bArr2 = WEBP_SIGNATURE_1; if (i >= bArr2.length) { int i2 = 0; while (true) { byte[] bArr3 = WEBP_SIGNATURE_2; if (i2 >= bArr3.length) { return true; } if (bArr[WEBP_SIGNATURE_1.length + i2 + 4] != bArr3[i2]) { return false; } i2++; } } else if (bArr[i] != bArr2[i]) { return false; } else { i++; } } } private void loadAttributes(@NonNull InputStream inputStream) { Objects.requireNonNull(inputStream, "inputstream shouldn't be null"); for (int i = 0; i < EXIF_TAGS.length; i++) { try { this.mAttributes[i] = new HashMap<>(); } catch (IOException e) { boolean z2 = DEBUG; if (z2) { Log.w(TAG, "Invalid image: ExifInterface got an unsupported image format file(ExifInterface supports JPEG and some RAW image formats only) or a corrupted JPEG file to ExifInterface.", e); } addDefaultValuesForCompatibility(); if (!z2) { return; } } catch (Throwable th) { addDefaultValuesForCompatibility(); if (DEBUG) { printAttributes(); } throw th; } } if (!this.mIsExifDataOnly) { BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream, SIGNATURE_CHECK_SIZE); this.mMimeType = getMimeType(bufferedInputStream); inputStream = bufferedInputStream; } ByteOrderedDataInputStream byteOrderedDataInputStream = new ByteOrderedDataInputStream(inputStream); if (!this.mIsExifDataOnly) { switch (this.mMimeType) { case 0: case 1: case 2: case 3: case 5: case 6: case 8: case 11: getRawAttributes(byteOrderedDataInputStream); break; case 4: getJpegAttributes(byteOrderedDataInputStream, 0, 0); addDefaultValuesForCompatibility(); if (DEBUG) { printAttributes(); return; } return; case 7: getOrfAttributes(byteOrderedDataInputStream); break; case 9: getRafAttributes(byteOrderedDataInputStream); addDefaultValuesForCompatibility(); if (DEBUG) { printAttributes(); return; } return; case 10: getRw2Attributes(byteOrderedDataInputStream); addDefaultValuesForCompatibility(); if (DEBUG) { printAttributes(); return; } return; case 12: getHeifAttributes(byteOrderedDataInputStream); break; case 13: getPngAttributes(byteOrderedDataInputStream); addDefaultValuesForCompatibility(); if (DEBUG) { printAttributes(); return; } return; case 14: getWebpAttributes(byteOrderedDataInputStream); addDefaultValuesForCompatibility(); if (DEBUG) { printAttributes(); return; } return; } } else { getStandaloneAttributes(byteOrderedDataInputStream); } byteOrderedDataInputStream.seek((long) this.mOffsetToExifData); setThumbnailData(byteOrderedDataInputStream); addDefaultValuesForCompatibility(); if (!DEBUG) { return; } printAttributes(); } private static Long parseDateTime(@Nullable String str, @Nullable String str2, @Nullable String str3) { if (str != null && NON_ZERO_TIME_PATTERN.matcher(str).matches()) { ParsePosition parsePosition = new ParsePosition(0); try { Date parse = sFormatterPrimary.parse(str, parsePosition); if (parse == null && (parse = sFormatterSecondary.parse(str, parsePosition)) == null) { return null; } long time = parse.getTime(); if (str3 != null) { int i = 1; String substring = str3.substring(0, 1); int parseInt = Integer.parseInt(str3.substring(1, 3)); int parseInt2 = Integer.parseInt(str3.substring(4, 6)); if ((BadgeDrawable.DEFAULT_EXCEED_MAX_BADGE_NUMBER_SUFFIX.equals(substring) || "-".equals(substring)) && ":".equals(str3.substring(3, 4)) && parseInt <= 14) { int i2 = ((parseInt * 60) + parseInt2) * 60 * 1000; if (!"-".equals(substring)) { i = -1; } time += (long) (i2 * i); } } if (str2 != null) { try { long parseLong = Long.parseLong(str2); while (parseLong > 1000) { parseLong /= 10; } time += parseLong; } catch (NumberFormatException unused) { } } return Long.valueOf(time); } catch (IllegalArgumentException unused2) { } } return null; } private void parseTiffHeaders(ByteOrderedDataInputStream byteOrderedDataInputStream, int i) throws IOException { ByteOrder readByteOrder = readByteOrder(byteOrderedDataInputStream); this.mExifByteOrder = readByteOrder; byteOrderedDataInputStream.setByteOrder(readByteOrder); int readUnsignedShort = byteOrderedDataInputStream.readUnsignedShort(); int i2 = this.mMimeType; if (i2 == 7 || i2 == 10 || readUnsignedShort == 42) { int readInt = byteOrderedDataInputStream.readInt(); if (readInt < 8 || readInt >= i) { throw new IOException(a.j("Invalid first Ifd offset: ", readInt)); } int i3 = readInt - 8; if (i3 > 0 && byteOrderedDataInputStream.skipBytes(i3) != i3) { throw new IOException(a.j("Couldn't jump to first Ifd: ", i3)); } return; } StringBuilder K = a.K("Invalid start code: "); K.append(Integer.toHexString(readUnsignedShort)); throw new IOException(K.toString()); } private void printAttributes() { for (int i = 0; i < this.mAttributes.length; i++) { StringBuilder L = a.L("The size of tag group[", i, "]: "); L.append(this.mAttributes[i].size()); Log.d(TAG, L.toString()); for (Map.Entry entry : this.mAttributes[i].entrySet()) { ExifAttribute value = entry.getValue(); StringBuilder K = a.K("tagName: "); K.append(entry.getKey()); K.append(", tagType: "); K.append(value.toString()); K.append(", tagValue: '"); K.append(value.getStringValue(this.mExifByteOrder)); K.append("'"); Log.d(TAG, K.toString()); } } } private ByteOrder readByteOrder(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { short readShort = byteOrderedDataInputStream.readShort(); if (readShort == 18761) { if (DEBUG) { Log.d(TAG, "readExifSegment: Byte Align II"); } return ByteOrder.LITTLE_ENDIAN; } else if (readShort == 19789) { if (DEBUG) { Log.d(TAG, "readExifSegment: Byte Align MM"); } return ByteOrder.BIG_ENDIAN; } else { StringBuilder K = a.K("Invalid byte order: "); K.append(Integer.toHexString(readShort)); throw new IOException(K.toString()); } } private void readExifSegment(byte[] bArr, int i) throws IOException { ByteOrderedDataInputStream byteOrderedDataInputStream = new ByteOrderedDataInputStream(bArr); parseTiffHeaders(byteOrderedDataInputStream, bArr.length); readImageFileDirectory(byteOrderedDataInputStream, i); } /* JADX WARNING: Removed duplicated region for block: B:103:0x026a */ /* JADX WARNING: Removed duplicated region for block: B:46:0x0108 */ /* JADX WARNING: Removed duplicated region for block: B:47:0x010d */ /* JADX WARNING: Removed duplicated region for block: B:65:0x018e */ /* JADX WARNING: Removed duplicated region for block: B:66:0x0192 */ /* JADX WARNING: Removed duplicated region for block: B:92:0x0206 */ private void readImageFileDirectory(ByteOrderedDataInputStream byteOrderedDataInputStream, int i) throws IOException { short s2; short s3; boolean z2; long j; long j2; int i2; ExifTag exifTag; int i3; long j3; int i4; long j4; int i5 = i; this.mAttributesOffsets.add(Integer.valueOf(byteOrderedDataInputStream.mPosition)); if (byteOrderedDataInputStream.mPosition + 2 <= byteOrderedDataInputStream.mLength) { short readShort = byteOrderedDataInputStream.readShort(); if (DEBUG) { a.c0("numberOfDirectoryEntry: ", readShort, TAG); } if ((readShort * 12) + byteOrderedDataInputStream.mPosition <= byteOrderedDataInputStream.mLength && readShort > 0) { char c2 = 0; short s4 = 0; while (s4 < readShort) { int readUnsignedShort = byteOrderedDataInputStream.readUnsignedShort(); int readUnsignedShort2 = byteOrderedDataInputStream.readUnsignedShort(); int readInt = byteOrderedDataInputStream.readInt(); long peek = ((long) byteOrderedDataInputStream.peek()) + 4; ExifTag exifTag2 = sExifTagMapsForReading[i5].get(Integer.valueOf(readUnsignedShort)); boolean z3 = DEBUG; if (z3) { Object[] objArr = new Object[5]; objArr[c2] = Integer.valueOf(i); objArr[1] = Integer.valueOf(readUnsignedShort); objArr[2] = exifTag2 != null ? exifTag2.name : null; objArr[3] = Integer.valueOf(readUnsignedShort2); objArr[4] = Integer.valueOf(readInt); Log.d(TAG, String.format("ifdType: %d, tagNumber: %d, tagName: %s, dataFormat: %d, numberOfComponents: %d", objArr)); } if (exifTag2 != null) { if (readUnsignedShort2 > 0) { int[] iArr = IFD_FORMAT_BYTES_PER_FORMAT; if (readUnsignedShort2 < iArr.length) { if (exifTag2.isFormatCompatible(readUnsignedShort2)) { if (readUnsignedShort2 == 7) { readUnsignedShort2 = exifTag2.primaryFormat; } s3 = readShort; s2 = s4; j = ((long) readInt) * ((long) iArr[readUnsignedShort2]); if (j < 0 || j > 2147483647L) { if (z3) { a.c0("Skip the tag entry since the number of components is invalid: ", readInt, TAG); } z2 = false; if (z2) { byteOrderedDataInputStream.seek(peek); } else { if (j > 4) { int readInt2 = byteOrderedDataInputStream.readInt(); if (z3) { a.c0("seek to data offset: ", readInt2, TAG); } i3 = readUnsignedShort2; if (this.mMimeType == 7) { if (TAG_MAKER_NOTE.equals(exifTag2.name)) { this.mOrfMakerNoteOffset = readInt2; } else if (i5 == 6 && TAG_ORF_THUMBNAIL_IMAGE.equals(exifTag2.name)) { this.mOrfThumbnailOffset = readInt2; this.mOrfThumbnailLength = readInt; ExifAttribute createUShort = ExifAttribute.createUShort(6, this.mExifByteOrder); exifTag = exifTag2; ExifAttribute createULong = ExifAttribute.createULong((long) this.mOrfThumbnailOffset, this.mExifByteOrder); i2 = readInt; ExifAttribute createULong2 = ExifAttribute.createULong((long) this.mOrfThumbnailLength, this.mExifByteOrder); this.mAttributes[4].put(TAG_COMPRESSION, createUShort); this.mAttributes[4].put(TAG_JPEG_INTERCHANGE_FORMAT, createULong); this.mAttributes[4].put(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH, createULong2); j4 = (long) readInt2; j2 = j; if (j4 + j > ((long) byteOrderedDataInputStream.mLength)) { byteOrderedDataInputStream.seek(j4); } else { if (z3) { a.c0("Skip the tag entry since data offset is invalid: ", readInt2, TAG); } byteOrderedDataInputStream.seek(peek); } } } i2 = readInt; exifTag = exifTag2; j4 = (long) readInt2; j2 = j; if (j4 + j > ((long) byteOrderedDataInputStream.mLength)) { } } else { j2 = j; i3 = readUnsignedShort2; i2 = readInt; exifTag = exifTag2; } Integer num = sExifPointerTagMap.get(Integer.valueOf(readUnsignedShort)); if (z3) { StringBuilder sb = new StringBuilder(); sb.append("nextIfdType: "); sb.append(num); sb.append(" byteCount: "); j3 = j2; sb.append(j3); Log.d(TAG, sb.toString()); } else { j3 = j2; } if (num != null) { long j5 = -1; if (i3 != 3) { if (i3 == 4) { j5 = byteOrderedDataInputStream.readUnsignedInt(); } else if (i3 == 8) { i4 = byteOrderedDataInputStream.readShort(); } else if (i3 == 9 || i3 == 13) { i4 = byteOrderedDataInputStream.readInt(); } if (z3) { Log.d(TAG, String.format("Offset: %d, tagName: %s", Long.valueOf(j5), exifTag.name)); } if (j5 > 0 || j5 >= ((long) byteOrderedDataInputStream.mLength)) { if (z3) { Log.d(TAG, "Skip jump into the IFD since its offset is invalid: " + j5); } } else if (!this.mAttributesOffsets.contains(Integer.valueOf((int) j5))) { byteOrderedDataInputStream.seek(j5); readImageFileDirectory(byteOrderedDataInputStream, num.intValue()); } else if (z3) { Log.d(TAG, "Skip jump into the IFD since it has already been read: IfdType " + num + " (at " + j5 + ")"); } byteOrderedDataInputStream.seek(peek); } else { i4 = byteOrderedDataInputStream.readUnsignedShort(); } j5 = (long) i4; if (z3) { } if (j5 > 0) { } if (z3) { } byteOrderedDataInputStream.seek(peek); } else { int peek2 = byteOrderedDataInputStream.peek() + this.mOffsetToExifData; byte[] bArr = new byte[((int) j3)]; byteOrderedDataInputStream.readFully(bArr); ExifAttribute exifAttribute = new ExifAttribute(i3, i2, (long) peek2, bArr); this.mAttributes[i].put(exifTag.name, exifAttribute); if (TAG_DNG_VERSION.equals(exifTag.name)) { this.mMimeType = 3; } if (((TAG_MAKE.equals(exifTag.name) || TAG_MODEL.equals(exifTag.name)) && exifAttribute.getStringValue(this.mExifByteOrder).contains(PEF_SIGNATURE)) || (TAG_COMPRESSION.equals(exifTag.name) && exifAttribute.getIntValue(this.mExifByteOrder) == 65535)) { this.mMimeType = 8; } if (((long) byteOrderedDataInputStream.peek()) != peek) { byteOrderedDataInputStream.seek(peek); } } } s4 = (short) (s2 + 1); c2 = 0; i5 = i; readShort = s3; } else { z2 = true; if (z2) { } s4 = (short) (s2 + 1); c2 = 0; i5 = i; readShort = s3; } } else if (z3) { StringBuilder K = a.K("Skip the tag entry since data format ("); K.append(IFD_FORMAT_NAMES[readUnsignedShort2]); K.append(") is unexpected for tag: "); K.append(exifTag2.name); Log.d(TAG, K.toString()); } } } s3 = readShort; s2 = s4; if (z3) { a.c0("Skip the tag entry since data format is invalid: ", readUnsignedShort2, TAG); } j = 0; z2 = false; if (z2) { } s4 = (short) (s2 + 1); c2 = 0; i5 = i; readShort = s3; } else if (z3) { a.c0("Skip the tag entry since tag number is not defined: ", readUnsignedShort, TAG); } s3 = readShort; s2 = s4; j = 0; z2 = false; if (z2) { } s4 = (short) (s2 + 1); c2 = 0; i5 = i; readShort = s3; } if (byteOrderedDataInputStream.peek() + 4 <= byteOrderedDataInputStream.mLength) { int readInt3 = byteOrderedDataInputStream.readInt(); boolean z4 = DEBUG; if (z4) { Log.d(TAG, String.format("nextIfdOffset: %d", Integer.valueOf(readInt3))); } long j6 = (long) readInt3; if (j6 <= 0 || readInt3 >= byteOrderedDataInputStream.mLength) { if (z4) { a.c0("Stop reading file since a wrong offset may cause an infinite loop: ", readInt3, TAG); } } else if (!this.mAttributesOffsets.contains(Integer.valueOf(readInt3))) { byteOrderedDataInputStream.seek(j6); if (this.mAttributes[4].isEmpty()) { readImageFileDirectory(byteOrderedDataInputStream, 4); } else if (this.mAttributes[5].isEmpty()) { readImageFileDirectory(byteOrderedDataInputStream, 5); } } else if (z4) { a.c0("Stop reading file since re-reading an IFD may cause an infinite loop: ", readInt3, TAG); } } } } } private void removeAttribute(String str) { for (int i = 0; i < EXIF_TAGS.length; i++) { this.mAttributes[i].remove(str); } } private void retrieveJpegImageSize(ByteOrderedDataInputStream byteOrderedDataInputStream, int i) throws IOException { ExifAttribute exifAttribute = this.mAttributes[i].get(TAG_IMAGE_LENGTH); ExifAttribute exifAttribute2 = this.mAttributes[i].get(TAG_IMAGE_WIDTH); if (exifAttribute == null || exifAttribute2 == null) { ExifAttribute exifAttribute3 = this.mAttributes[i].get(TAG_JPEG_INTERCHANGE_FORMAT); ExifAttribute exifAttribute4 = this.mAttributes[i].get(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH); if (exifAttribute3 != null && exifAttribute4 != null) { int intValue = exifAttribute3.getIntValue(this.mExifByteOrder); int intValue2 = exifAttribute3.getIntValue(this.mExifByteOrder); byteOrderedDataInputStream.seek((long) intValue); byte[] bArr = new byte[intValue2]; byteOrderedDataInputStream.read(bArr); getJpegAttributes(new ByteOrderedDataInputStream(bArr), intValue, i); } } } private void saveJpegAttributes(InputStream inputStream, OutputStream outputStream) throws IOException { if (DEBUG) { Log.d(TAG, "saveJpegAttributes starting with (inputStream: " + inputStream + ", outputStream: " + outputStream + ")"); } DataInputStream dataInputStream = new DataInputStream(inputStream); ByteOrderedDataOutputStream byteOrderedDataOutputStream = new ByteOrderedDataOutputStream(outputStream, ByteOrder.BIG_ENDIAN); if (dataInputStream.readByte() == -1) { byteOrderedDataOutputStream.writeByte(-1); if (dataInputStream.readByte() == -40) { byteOrderedDataOutputStream.writeByte(-40); ExifAttribute exifAttribute = null; if (getAttribute(TAG_XMP) != null && this.mXmpIsFromSeparateMarker) { exifAttribute = this.mAttributes[0].remove(TAG_XMP); } byteOrderedDataOutputStream.writeByte(-1); byteOrderedDataOutputStream.writeByte(-31); writeExifSegment(byteOrderedDataOutputStream); if (exifAttribute != null) { this.mAttributes[0].put(TAG_XMP, exifAttribute); } byte[] bArr = new byte[4096]; while (dataInputStream.readByte() == -1) { byte readByte = dataInputStream.readByte(); if (readByte == -39 || readByte == -38) { byteOrderedDataOutputStream.writeByte(-1); byteOrderedDataOutputStream.writeByte(readByte); copy(dataInputStream, byteOrderedDataOutputStream); return; } else if (readByte != -31) { byteOrderedDataOutputStream.writeByte(-1); byteOrderedDataOutputStream.writeByte(readByte); int readUnsignedShort = dataInputStream.readUnsignedShort(); byteOrderedDataOutputStream.writeUnsignedShort(readUnsignedShort); int i = readUnsignedShort - 2; if (i >= 0) { while (i > 0) { int read = dataInputStream.read(bArr, 0, Math.min(i, 4096)); if (read < 0) { break; } byteOrderedDataOutputStream.write(bArr, 0, read); i -= read; } } else { throw new IOException("Invalid length"); } } else { int readUnsignedShort2 = dataInputStream.readUnsignedShort() - 2; if (readUnsignedShort2 >= 0) { byte[] bArr2 = new byte[6]; if (readUnsignedShort2 >= 6) { if (dataInputStream.read(bArr2) != 6) { throw new IOException("Invalid exif"); } else if (Arrays.equals(bArr2, IDENTIFIER_EXIF_APP1)) { int i2 = readUnsignedShort2 - 6; if (dataInputStream.skipBytes(i2) != i2) { throw new IOException("Invalid length"); } } } byteOrderedDataOutputStream.writeByte(-1); byteOrderedDataOutputStream.writeByte(readByte); byteOrderedDataOutputStream.writeUnsignedShort(readUnsignedShort2 + 2); if (readUnsignedShort2 >= 6) { readUnsignedShort2 -= 6; byteOrderedDataOutputStream.write(bArr2); } while (readUnsignedShort2 > 0) { int read2 = dataInputStream.read(bArr, 0, Math.min(readUnsignedShort2, 4096)); if (read2 < 0) { break; } byteOrderedDataOutputStream.write(bArr, 0, read2); readUnsignedShort2 -= read2; } } else { throw new IOException("Invalid length"); } } } throw new IOException("Invalid marker"); } throw new IOException("Invalid marker"); } throw new IOException("Invalid marker"); } private void savePngAttributes(InputStream inputStream, OutputStream outputStream) throws IOException { Throwable th; if (DEBUG) { Log.d(TAG, "savePngAttributes starting with (inputStream: " + inputStream + ", outputStream: " + outputStream + ")"); } DataInputStream dataInputStream = new DataInputStream(inputStream); ByteOrder byteOrder = ByteOrder.BIG_ENDIAN; ByteOrderedDataOutputStream byteOrderedDataOutputStream = new ByteOrderedDataOutputStream(outputStream, byteOrder); byte[] bArr = PNG_SIGNATURE; copy(dataInputStream, byteOrderedDataOutputStream, bArr.length); int i = this.mOffsetToExifData; if (i == 0) { int readInt = dataInputStream.readInt(); byteOrderedDataOutputStream.writeInt(readInt); copy(dataInputStream, byteOrderedDataOutputStream, readInt + 4 + 4); } else { copy(dataInputStream, byteOrderedDataOutputStream, ((i - bArr.length) - 4) - 4); dataInputStream.skipBytes(dataInputStream.readInt() + 4 + 4); } ByteArrayOutputStream byteArrayOutputStream = null; try { ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream(); try { ByteOrderedDataOutputStream byteOrderedDataOutputStream2 = new ByteOrderedDataOutputStream(byteArrayOutputStream2, byteOrder); writeExifSegment(byteOrderedDataOutputStream2); byte[] byteArray = ((ByteArrayOutputStream) byteOrderedDataOutputStream2.mOutputStream).toByteArray(); byteOrderedDataOutputStream.write(byteArray); CRC32 crc32 = new CRC32(); crc32.update(byteArray, 4, byteArray.length - 4); byteOrderedDataOutputStream.writeInt((int) crc32.getValue()); closeQuietly(byteArrayOutputStream2); copy(dataInputStream, byteOrderedDataOutputStream); } catch (Throwable th2) { th = th2; byteArrayOutputStream = byteArrayOutputStream2; closeQuietly(byteArrayOutputStream); throw th; } } catch (Throwable th3) { th = th3; closeQuietly(byteArrayOutputStream); throw th; } } /* JADX WARNING: Removed duplicated region for block: B:58:0x01ac A[Catch:{ Exception -> 0x01f1, all -> 0x01ee }] */ /* JADX WARNING: Removed duplicated region for block: B:59:0x01b8 A[Catch:{ Exception -> 0x01f1, all -> 0x01ee }] */ private void saveWebpAttributes(InputStream inputStream, OutputStream outputStream) throws IOException { Throwable th; Exception e; int i; int i2; int i3; int i4; if (DEBUG) { Log.d(TAG, "saveWebpAttributes starting with (inputStream: " + inputStream + ", outputStream: " + outputStream + ")"); } ByteOrder byteOrder = ByteOrder.LITTLE_ENDIAN; ByteOrderedDataInputStream byteOrderedDataInputStream = new ByteOrderedDataInputStream(inputStream, byteOrder); ByteOrderedDataOutputStream byteOrderedDataOutputStream = new ByteOrderedDataOutputStream(outputStream, byteOrder); byte[] bArr = WEBP_SIGNATURE_1; copy(byteOrderedDataInputStream, byteOrderedDataOutputStream, bArr.length); byte[] bArr2 = WEBP_SIGNATURE_2; byteOrderedDataInputStream.skipBytes(bArr2.length + 4); ByteArrayOutputStream byteArrayOutputStream = null; try { ByteArrayOutputStream byteArrayOutputStream2 = new ByteArrayOutputStream(); try { ByteOrderedDataOutputStream byteOrderedDataOutputStream2 = new ByteOrderedDataOutputStream(byteArrayOutputStream2, byteOrder); int i5 = this.mOffsetToExifData; if (i5 != 0) { copy(byteOrderedDataInputStream, byteOrderedDataOutputStream2, ((i5 - ((bArr.length + 4) + bArr2.length)) - 4) - 4); byteOrderedDataInputStream.skipBytes(4); byteOrderedDataInputStream.skipBytes(byteOrderedDataInputStream.readInt()); writeExifSegment(byteOrderedDataOutputStream2); } else { byte[] bArr3 = new byte[4]; if (byteOrderedDataInputStream.read(bArr3) == 4) { byte[] bArr4 = WEBP_CHUNK_TYPE_VP8X; boolean z2 = true; if (Arrays.equals(bArr3, bArr4)) { int readInt = byteOrderedDataInputStream.readInt(); byte[] bArr5 = new byte[(readInt % 2 == 1 ? readInt + 1 : readInt)]; byteOrderedDataInputStream.read(bArr5); bArr5[0] = (byte) (8 | bArr5[0]); if (((bArr5[0] >> 1) & 1) != 1) { z2 = false; } byteOrderedDataOutputStream2.write(bArr4); byteOrderedDataOutputStream2.writeInt(readInt); byteOrderedDataOutputStream2.write(bArr5); if (z2) { copyChunksUpToGivenChunkType(byteOrderedDataInputStream, byteOrderedDataOutputStream2, WEBP_CHUNK_TYPE_ANIM, null); while (true) { byte[] bArr6 = new byte[4]; inputStream.read(bArr6); if (!Arrays.equals(bArr6, WEBP_CHUNK_TYPE_ANMF)) { break; } copyWebPChunk(byteOrderedDataInputStream, byteOrderedDataOutputStream2, bArr6); } writeExifSegment(byteOrderedDataOutputStream2); } else { copyChunksUpToGivenChunkType(byteOrderedDataInputStream, byteOrderedDataOutputStream2, WEBP_CHUNK_TYPE_VP8, WEBP_CHUNK_TYPE_VP8L); writeExifSegment(byteOrderedDataOutputStream2); } } else { byte[] bArr7 = WEBP_CHUNK_TYPE_VP8; if (Arrays.equals(bArr3, bArr7) || Arrays.equals(bArr3, WEBP_CHUNK_TYPE_VP8L)) { int readInt2 = byteOrderedDataInputStream.readInt(); int i6 = readInt2 % 2 == 1 ? readInt2 + 1 : readInt2; byte[] bArr8 = new byte[3]; if (Arrays.equals(bArr3, bArr7)) { byteOrderedDataInputStream.read(bArr8); byte[] bArr9 = new byte[3]; if (byteOrderedDataInputStream.read(bArr9) != 3 || !Arrays.equals(WEBP_VP8_SIGNATURE, bArr9)) { throw new IOException("Encountered error while checking VP8 signature"); } i4 = byteOrderedDataInputStream.readInt(); i3 = (i4 << 18) >> 18; i2 = (i4 << 2) >> 18; i6 -= 10; } else if (!Arrays.equals(bArr3, WEBP_CHUNK_TYPE_VP8L)) { i4 = 0; i3 = 0; i2 = 0; } else if (byteOrderedDataInputStream.readByte() == 47) { i4 = byteOrderedDataInputStream.readInt(); i = i4 & 8; i6 -= 5; i2 = ((i4 << 4) >> 18) + 1; i3 = ((i4 << 18) >> 18) + 1; byteOrderedDataOutputStream2.write(bArr4); byteOrderedDataOutputStream2.writeInt(10); byte[] bArr10 = new byte[10]; bArr10[0] = (byte) (bArr10[0] | 8); bArr10[0] = (byte) (bArr10[0] | (i << 4)); int i7 = i3 - 1; int i8 = i2 - 1; bArr10[4] = (byte) i7; bArr10[5] = (byte) (i7 >> 8); bArr10[6] = (byte) (i7 >> 16); bArr10[7] = (byte) i8; bArr10[8] = (byte) (i8 >> 8); bArr10[9] = (byte) (i8 >> 16); byteOrderedDataOutputStream2.write(bArr10); byteOrderedDataOutputStream2.write(bArr3); byteOrderedDataOutputStream2.writeInt(readInt2); if (!Arrays.equals(bArr3, bArr7)) { byteOrderedDataOutputStream2.write(bArr8); byteOrderedDataOutputStream2.write(WEBP_VP8_SIGNATURE); byteOrderedDataOutputStream2.writeInt(i4); } else if (Arrays.equals(bArr3, WEBP_CHUNK_TYPE_VP8L)) { byteOrderedDataOutputStream2.write(47); byteOrderedDataOutputStream2.writeInt(i4); } copy(byteOrderedDataInputStream, byteOrderedDataOutputStream2, i6); writeExifSegment(byteOrderedDataOutputStream2); } else { throw new IOException("Encountered error while checking VP8L signature"); } i = 0; byteOrderedDataOutputStream2.write(bArr4); byteOrderedDataOutputStream2.writeInt(10); byte[] bArr10 = new byte[10]; bArr10[0] = (byte) (bArr10[0] | 8); bArr10[0] = (byte) (bArr10[0] | (i << 4)); int i7 = i3 - 1; int i8 = i2 - 1; bArr10[4] = (byte) i7; bArr10[5] = (byte) (i7 >> 8); bArr10[6] = (byte) (i7 >> 16); bArr10[7] = (byte) i8; bArr10[8] = (byte) (i8 >> 8); bArr10[9] = (byte) (i8 >> 16); byteOrderedDataOutputStream2.write(bArr10); byteOrderedDataOutputStream2.write(bArr3); byteOrderedDataOutputStream2.writeInt(readInt2); if (!Arrays.equals(bArr3, bArr7)) { } copy(byteOrderedDataInputStream, byteOrderedDataOutputStream2, i6); writeExifSegment(byteOrderedDataOutputStream2); } } } else { throw new IOException("Encountered invalid length while parsing WebP chunk type"); } } copy(byteOrderedDataInputStream, byteOrderedDataOutputStream2); int size = byteArrayOutputStream2.size(); byte[] bArr11 = WEBP_SIGNATURE_2; byteOrderedDataOutputStream.writeInt(size + bArr11.length); byteOrderedDataOutputStream.write(bArr11); byteArrayOutputStream2.writeTo(byteOrderedDataOutputStream); closeQuietly(byteArrayOutputStream2); } catch (Exception e2) { e = e2; byteArrayOutputStream = byteArrayOutputStream2; try { throw new IOException("Failed to save WebP file", e); } catch (Throwable th2) { th = th2; closeQuietly(byteArrayOutputStream); throw th; } } catch (Throwable th3) { th = th3; byteArrayOutputStream = byteArrayOutputStream2; closeQuietly(byteArrayOutputStream); throw th; } } catch (Exception e3) { e = e3; throw new IOException("Failed to save WebP file", e); } } private void setThumbnailData(ByteOrderedDataInputStream byteOrderedDataInputStream) throws IOException { HashMap hashMap = this.mAttributes[4]; ExifAttribute exifAttribute = hashMap.get(TAG_COMPRESSION); if (exifAttribute != null) { int intValue = exifAttribute.getIntValue(this.mExifByteOrder); this.mThumbnailCompression = intValue; if (intValue != 1) { if (intValue == 6) { handleThumbnailFromJfif(byteOrderedDataInputStream, hashMap); return; } else if (intValue != 7) { return; } } if (isSupportedDataType(hashMap)) { handleThumbnailFromStrips(byteOrderedDataInputStream, hashMap); return; } return; } this.mThumbnailCompression = 6; handleThumbnailFromJfif(byteOrderedDataInputStream, hashMap); } private static boolean startsWith(byte[] bArr, byte[] bArr2) { if (bArr == null || bArr2 == null || bArr.length < bArr2.length) { return false; } for (int i = 0; i < bArr2.length; i++) { if (bArr[i] != bArr2[i]) { return false; } } return true; } private void swapBasedOnImageSize(int i, int i2) throws IOException { if (!this.mAttributes[i].isEmpty() && !this.mAttributes[i2].isEmpty()) { ExifAttribute exifAttribute = this.mAttributes[i].get(TAG_IMAGE_LENGTH); ExifAttribute exifAttribute2 = this.mAttributes[i].get(TAG_IMAGE_WIDTH); ExifAttribute exifAttribute3 = this.mAttributes[i2].get(TAG_IMAGE_LENGTH); ExifAttribute exifAttribute4 = this.mAttributes[i2].get(TAG_IMAGE_WIDTH); if (exifAttribute == null || exifAttribute2 == null) { if (DEBUG) { Log.d(TAG, "First image does not contain valid size information"); } } else if (exifAttribute3 != null && exifAttribute4 != null) { int intValue = exifAttribute.getIntValue(this.mExifByteOrder); int intValue2 = exifAttribute2.getIntValue(this.mExifByteOrder); int intValue3 = exifAttribute3.getIntValue(this.mExifByteOrder); int intValue4 = exifAttribute4.getIntValue(this.mExifByteOrder); if (intValue < intValue3 && intValue2 < intValue4) { HashMap[] hashMapArr = this.mAttributes; HashMap hashMap = hashMapArr[i]; hashMapArr[i] = hashMapArr[i2]; hashMapArr[i2] = hashMap; } } else if (DEBUG) { Log.d(TAG, "Second image does not contain valid size information"); } } else if (DEBUG) { Log.d(TAG, "Cannot perform swap since only one image data exists"); } } private void updateImageSizeValues(ByteOrderedDataInputStream byteOrderedDataInputStream, int i) throws IOException { ExifAttribute exifAttribute; ExifAttribute exifAttribute2; ExifAttribute exifAttribute3 = this.mAttributes[i].get(TAG_DEFAULT_CROP_SIZE); ExifAttribute exifAttribute4 = this.mAttributes[i].get(TAG_RW2_SENSOR_TOP_BORDER); ExifAttribute exifAttribute5 = this.mAttributes[i].get(TAG_RW2_SENSOR_LEFT_BORDER); ExifAttribute exifAttribute6 = this.mAttributes[i].get(TAG_RW2_SENSOR_BOTTOM_BORDER); ExifAttribute exifAttribute7 = this.mAttributes[i].get(TAG_RW2_SENSOR_RIGHT_BORDER); if (exifAttribute3 != null) { if (exifAttribute3.format == 5) { Rational[] rationalArr = (Rational[]) exifAttribute3.getValue(this.mExifByteOrder); if (rationalArr == null || rationalArr.length != 2) { StringBuilder K = a.K("Invalid crop size values. cropSize="); K.append(Arrays.toString(rationalArr)); Log.w(TAG, K.toString()); return; } exifAttribute2 = ExifAttribute.createURational(rationalArr[0], this.mExifByteOrder); exifAttribute = ExifAttribute.createURational(rationalArr[1], this.mExifByteOrder); } else { int[] iArr = (int[]) exifAttribute3.getValue(this.mExifByteOrder); if (iArr == null || iArr.length != 2) { StringBuilder K2 = a.K("Invalid crop size values. cropSize="); K2.append(Arrays.toString(iArr)); Log.w(TAG, K2.toString()); return; } exifAttribute2 = ExifAttribute.createUShort(iArr[0], this.mExifByteOrder); exifAttribute = ExifAttribute.createUShort(iArr[1], this.mExifByteOrder); } this.mAttributes[i].put(TAG_IMAGE_WIDTH, exifAttribute2); this.mAttributes[i].put(TAG_IMAGE_LENGTH, exifAttribute); } else if (exifAttribute4 == null || exifAttribute5 == null || exifAttribute6 == null || exifAttribute7 == null) { retrieveJpegImageSize(byteOrderedDataInputStream, i); } else { int intValue = exifAttribute4.getIntValue(this.mExifByteOrder); int intValue2 = exifAttribute6.getIntValue(this.mExifByteOrder); int intValue3 = exifAttribute7.getIntValue(this.mExifByteOrder); int intValue4 = exifAttribute5.getIntValue(this.mExifByteOrder); if (intValue2 > intValue && intValue3 > intValue4) { ExifAttribute createUShort = ExifAttribute.createUShort(intValue2 - intValue, this.mExifByteOrder); ExifAttribute createUShort2 = ExifAttribute.createUShort(intValue3 - intValue4, this.mExifByteOrder); this.mAttributes[i].put(TAG_IMAGE_LENGTH, createUShort); this.mAttributes[i].put(TAG_IMAGE_WIDTH, createUShort2); } } } private void validateImages() throws IOException { swapBasedOnImageSize(0, 5); swapBasedOnImageSize(0, 4); swapBasedOnImageSize(5, 4); ExifAttribute exifAttribute = this.mAttributes[1].get(TAG_PIXEL_X_DIMENSION); ExifAttribute exifAttribute2 = this.mAttributes[1].get(TAG_PIXEL_Y_DIMENSION); if (!(exifAttribute == null || exifAttribute2 == null)) { this.mAttributes[0].put(TAG_IMAGE_WIDTH, exifAttribute); this.mAttributes[0].put(TAG_IMAGE_LENGTH, exifAttribute2); } if (this.mAttributes[4].isEmpty() && isThumbnail(this.mAttributes[5])) { HashMap[] hashMapArr = this.mAttributes; hashMapArr[4] = hashMapArr[5]; hashMapArr[5] = new HashMap<>(); } if (!isThumbnail(this.mAttributes[4])) { Log.d(TAG, "No image meets the size requirements of a thumbnail image."); } } private int writeExifSegment(ByteOrderedDataOutputStream byteOrderedDataOutputStream) throws IOException { ExifTag[][] exifTagArr = EXIF_TAGS; int[] iArr = new int[exifTagArr.length]; int[] iArr2 = new int[exifTagArr.length]; for (ExifTag exifTag : EXIF_POINTER_TAGS) { removeAttribute(exifTag.name); } removeAttribute(JPEG_INTERCHANGE_FORMAT_TAG.name); removeAttribute(JPEG_INTERCHANGE_FORMAT_LENGTH_TAG.name); for (int i = 0; i < EXIF_TAGS.length; i++) { for (Object obj : this.mAttributes[i].entrySet().toArray()) { Map.Entry entry = (Map.Entry) obj; if (entry.getValue() == null) { this.mAttributes[i].remove(entry.getKey()); } } } if (!this.mAttributes[1].isEmpty()) { this.mAttributes[0].put(EXIF_POINTER_TAGS[1].name, ExifAttribute.createULong(0, this.mExifByteOrder)); } if (!this.mAttributes[2].isEmpty()) { this.mAttributes[0].put(EXIF_POINTER_TAGS[2].name, ExifAttribute.createULong(0, this.mExifByteOrder)); } if (!this.mAttributes[3].isEmpty()) { this.mAttributes[1].put(EXIF_POINTER_TAGS[3].name, ExifAttribute.createULong(0, this.mExifByteOrder)); } if (this.mHasThumbnail) { this.mAttributes[4].put(JPEG_INTERCHANGE_FORMAT_TAG.name, ExifAttribute.createULong(0, this.mExifByteOrder)); this.mAttributes[4].put(JPEG_INTERCHANGE_FORMAT_LENGTH_TAG.name, ExifAttribute.createULong((long) this.mThumbnailLength, this.mExifByteOrder)); } for (int i2 = 0; i2 < EXIF_TAGS.length; i2++) { int i3 = 0; for (Map.Entry entry2 : this.mAttributes[i2].entrySet()) { int size = entry2.getValue().size(); if (size > 4) { i3 += size; } } iArr2[i2] = iArr2[i2] + i3; } int i4 = 8; for (int i5 = 0; i5 < EXIF_TAGS.length; i5++) { if (!this.mAttributes[i5].isEmpty()) { iArr[i5] = i4; i4 = (this.mAttributes[i5].size() * 12) + 2 + 4 + iArr2[i5] + i4; } } if (this.mHasThumbnail) { this.mAttributes[4].put(JPEG_INTERCHANGE_FORMAT_TAG.name, ExifAttribute.createULong((long) i4, this.mExifByteOrder)); this.mThumbnailOffset = i4; i4 += this.mThumbnailLength; } if (this.mMimeType == 4) { i4 += 8; } if (DEBUG) { for (int i6 = 0; i6 < EXIF_TAGS.length; i6++) { Log.d(TAG, String.format("index: %d, offsets: %d, tag count: %d, data sizes: %d, total size: %d", Integer.valueOf(i6), Integer.valueOf(iArr[i6]), Integer.valueOf(this.mAttributes[i6].size()), Integer.valueOf(iArr2[i6]), Integer.valueOf(i4))); } } if (!this.mAttributes[1].isEmpty()) { this.mAttributes[0].put(EXIF_POINTER_TAGS[1].name, ExifAttribute.createULong((long) iArr[1], this.mExifByteOrder)); } if (!this.mAttributes[2].isEmpty()) { this.mAttributes[0].put(EXIF_POINTER_TAGS[2].name, ExifAttribute.createULong((long) iArr[2], this.mExifByteOrder)); } if (!this.mAttributes[3].isEmpty()) { this.mAttributes[1].put(EXIF_POINTER_TAGS[3].name, ExifAttribute.createULong((long) iArr[3], this.mExifByteOrder)); } int i7 = this.mMimeType; if (i7 == 4) { byteOrderedDataOutputStream.writeUnsignedShort(i4); byteOrderedDataOutputStream.write(IDENTIFIER_EXIF_APP1); } else if (i7 == 13) { byteOrderedDataOutputStream.writeInt(i4); byteOrderedDataOutputStream.write(PNG_CHUNK_TYPE_EXIF); } else if (i7 == 14) { byteOrderedDataOutputStream.write(WEBP_CHUNK_TYPE_EXIF); byteOrderedDataOutputStream.writeInt(i4); } byteOrderedDataOutputStream.writeShort(this.mExifByteOrder == ByteOrder.BIG_ENDIAN ? BYTE_ALIGN_MM : BYTE_ALIGN_II); byteOrderedDataOutputStream.setByteOrder(this.mExifByteOrder); byteOrderedDataOutputStream.writeUnsignedShort(42); byteOrderedDataOutputStream.writeUnsignedInt(8); for (int i8 = 0; i8 < EXIF_TAGS.length; i8++) { if (!this.mAttributes[i8].isEmpty()) { byteOrderedDataOutputStream.writeUnsignedShort(this.mAttributes[i8].size()); int size2 = (this.mAttributes[i8].size() * 12) + iArr[i8] + 2 + 4; for (Map.Entry entry3 : this.mAttributes[i8].entrySet()) { int i9 = sExifTagMapsForWriting[i8].get(entry3.getKey()).number; ExifAttribute value = entry3.getValue(); int size3 = value.size(); byteOrderedDataOutputStream.writeUnsignedShort(i9); byteOrderedDataOutputStream.writeUnsignedShort(value.format); byteOrderedDataOutputStream.writeInt(value.numberOfComponents); if (size3 > 4) { byteOrderedDataOutputStream.writeUnsignedInt((long) size2); size2 += size3; } else { byteOrderedDataOutputStream.write(value.bytes); if (size3 < 4) { while (size3 < 4) { byteOrderedDataOutputStream.writeByte(0); size3++; } } } } if (i8 != 0 || this.mAttributes[4].isEmpty()) { byteOrderedDataOutputStream.writeUnsignedInt(0); } else { byteOrderedDataOutputStream.writeUnsignedInt((long) iArr[4]); } for (Map.Entry entry4 : this.mAttributes[i8].entrySet()) { byte[] bArr = entry4.getValue().bytes; if (bArr.length > 4) { byteOrderedDataOutputStream.write(bArr, 0, bArr.length); } } } } if (this.mHasThumbnail) { byteOrderedDataOutputStream.write(getThumbnailBytes()); } if (this.mMimeType == 14 && i4 % 2 == 1) { byteOrderedDataOutputStream.writeByte(0); } byteOrderedDataOutputStream.setByteOrder(ByteOrder.BIG_ENDIAN); return i4; } public void flipHorizontally() { int i = 1; switch (getAttributeInt(TAG_ORIENTATION, 1)) { case 1: i = 2; break; case 2: break; case 3: i = 4; break; case 4: i = 3; break; case 5: i = 6; break; case 6: i = 5; break; case 7: i = 8; break; case 8: i = 7; break; default: i = 0; break; } setAttribute(TAG_ORIENTATION, Integer.toString(i)); } public void flipVertically() { int i = 1; switch (getAttributeInt(TAG_ORIENTATION, 1)) { case 1: i = 4; break; case 2: i = 3; break; case 3: i = 2; break; case 4: break; case 5: i = 8; break; case 6: i = 7; break; case 7: i = 6; break; case 8: i = 5; break; default: i = 0; break; } setAttribute(TAG_ORIENTATION, Integer.toString(i)); } public double getAltitude(double d) { double attributeDouble = getAttributeDouble(TAG_GPS_ALTITUDE, -1.0d); int i = -1; int attributeInt = getAttributeInt(TAG_GPS_ALTITUDE_REF, -1); if (attributeDouble < ShadowDrawableWrapper.COS_45 || attributeInt < 0) { return d; } if (attributeInt != 1) { i = 1; } return attributeDouble * ((double) i); } @Nullable public String getAttribute(@NonNull String str) { Objects.requireNonNull(str, "tag shouldn't be null"); ExifAttribute exifAttribute = getExifAttribute(str); if (exifAttribute != null) { if (!sTagSetForCompatibility.contains(str)) { return exifAttribute.getStringValue(this.mExifByteOrder); } if (str.equals(TAG_GPS_TIMESTAMP)) { int i = exifAttribute.format; if (i == 5 || i == 10) { Rational[] rationalArr = (Rational[]) exifAttribute.getValue(this.mExifByteOrder); if (rationalArr != null && rationalArr.length == 3) { return String.format("%02d:%02d:%02d", Integer.valueOf((int) (((float) rationalArr[0].numerator) / ((float) rationalArr[0].denominator))), Integer.valueOf((int) (((float) rationalArr[1].numerator) / ((float) rationalArr[1].denominator))), Integer.valueOf((int) (((float) rationalArr[2].numerator) / ((float) rationalArr[2].denominator)))); } StringBuilder K = a.K("Invalid GPS Timestamp array. array="); K.append(Arrays.toString(rationalArr)); Log.w(TAG, K.toString()); return null; } StringBuilder K2 = a.K("GPS Timestamp format is not rational. format="); K2.append(exifAttribute.format); Log.w(TAG, K2.toString()); return null; } try { return Double.toString(exifAttribute.getDoubleValue(this.mExifByteOrder)); } catch (NumberFormatException unused) { } } return null; } @Nullable public byte[] getAttributeBytes(@NonNull String str) { Objects.requireNonNull(str, "tag shouldn't be null"); ExifAttribute exifAttribute = getExifAttribute(str); if (exifAttribute != null) { return exifAttribute.bytes; } return null; } public double getAttributeDouble(@NonNull String str, double d) { Objects.requireNonNull(str, "tag shouldn't be null"); ExifAttribute exifAttribute = getExifAttribute(str); if (exifAttribute == null) { return d; } try { return exifAttribute.getDoubleValue(this.mExifByteOrder); } catch (NumberFormatException unused) { return d; } } public int getAttributeInt(@NonNull String str, int i) { Objects.requireNonNull(str, "tag shouldn't be null"); ExifAttribute exifAttribute = getExifAttribute(str); if (exifAttribute == null) { return i; } try { return exifAttribute.getIntValue(this.mExifByteOrder); } catch (NumberFormatException unused) { return i; } } @Nullable public long[] getAttributeRange(@NonNull String str) { Objects.requireNonNull(str, "tag shouldn't be null"); if (!this.mModified) { ExifAttribute exifAttribute = getExifAttribute(str); if (exifAttribute != null) { return new long[]{exifAttribute.bytesOffset, (long) exifAttribute.bytes.length}; } return null; } throw new IllegalStateException("The underlying file has been modified since being parsed"); } @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY}) public Long getDateTime() { return parseDateTime(getAttribute(TAG_DATETIME), getAttribute(TAG_SUBSEC_TIME), getAttribute(TAG_OFFSET_TIME)); } @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY}) public Long getDateTimeDigitized() { return parseDateTime(getAttribute(TAG_DATETIME_DIGITIZED), getAttribute(TAG_SUBSEC_TIME_DIGITIZED), getAttribute(TAG_OFFSET_TIME_DIGITIZED)); } @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY}) public Long getDateTimeOriginal() { return parseDateTime(getAttribute(TAG_DATETIME_ORIGINAL), getAttribute(TAG_SUBSEC_TIME_ORIGINAL), getAttribute(TAG_OFFSET_TIME_ORIGINAL)); } @Nullable @SuppressLint({"AutoBoxing"}) public Long getGpsDateTime() { String attribute = getAttribute(TAG_GPS_DATESTAMP); String attribute2 = getAttribute(TAG_GPS_TIMESTAMP); if (!(attribute == null || attribute2 == null)) { Pattern pattern = NON_ZERO_TIME_PATTERN; if (pattern.matcher(attribute).matches() || pattern.matcher(attribute2).matches()) { String str = attribute + ' ' + attribute2; ParsePosition parsePosition = new ParsePosition(0); try { Date parse = sFormatterPrimary.parse(str, parsePosition); if (parse == null && (parse = sFormatterSecondary.parse(str, parsePosition)) == null) { return null; } return Long.valueOf(parse.getTime()); } catch (IllegalArgumentException unused) { } } } return null; } @Deprecated public boolean getLatLong(float[] fArr) { double[] latLong = getLatLong(); if (latLong == null) { return false; } fArr[0] = (float) latLong[0]; fArr[1] = (float) latLong[1]; return true; } @Nullable public double[] getLatLong() { String attribute = getAttribute(TAG_GPS_LATITUDE); String attribute2 = getAttribute(TAG_GPS_LATITUDE_REF); String attribute3 = getAttribute(TAG_GPS_LONGITUDE); String attribute4 = getAttribute(TAG_GPS_LONGITUDE_REF); if (attribute == null || attribute2 == null || attribute3 == null || attribute4 == null) { return null; } try { return new double[]{convertRationalLatLonToDouble(attribute, attribute2), convertRationalLatLonToDouble(attribute3, attribute4)}; } catch (IllegalArgumentException unused) { StringBuilder K = a.K("Latitude/longitude values are not parsable. "); K.append(String.format("latValue=%s, latRef=%s, lngValue=%s, lngRef=%s", attribute, attribute2, attribute3, attribute4)); Log.w(TAG, K.toString()); return null; } } public int getRotationDegrees() { switch (getAttributeInt(TAG_ORIENTATION, 1)) { case 3: case 4: return BaseTransientBottomBar.ANIMATION_FADE_DURATION; case 5: case 8: return 270; case 6: case 7: return 90; default: return 0; } } @Nullable public byte[] getThumbnail() { int i = this.mThumbnailCompression; if (i == 6 || i == 7) { return getThumbnailBytes(); } return null; } @Nullable public Bitmap getThumbnailBitmap() { if (!this.mHasThumbnail) { return null; } if (this.mThumbnailBytes == null) { this.mThumbnailBytes = getThumbnailBytes(); } int i = this.mThumbnailCompression; if (i == 6 || i == 7) { return BitmapFactory.decodeByteArray(this.mThumbnailBytes, 0, this.mThumbnailLength); } if (i == 1) { int length = this.mThumbnailBytes.length / 3; int[] iArr = new int[length]; for (int i2 = 0; i2 < length; i2++) { byte[] bArr = this.mThumbnailBytes; int i3 = i2 * 3; iArr[i2] = (bArr[i3] << 16) + 0 + (bArr[i3 + 1] << 8) + bArr[i3 + 2]; } ExifAttribute exifAttribute = this.mAttributes[4].get(TAG_IMAGE_LENGTH); ExifAttribute exifAttribute2 = this.mAttributes[4].get(TAG_IMAGE_WIDTH); if (!(exifAttribute == null || exifAttribute2 == null)) { return Bitmap.createBitmap(iArr, exifAttribute2.getIntValue(this.mExifByteOrder), exifAttribute.getIntValue(this.mExifByteOrder), Bitmap.Config.ARGB_8888); } } return null; } /* JADX WARNING: Removed duplicated region for block: B:29:0x0051 A[SYNTHETIC, Splitter:B:29:0x0051] */ /* JADX WARNING: Removed duplicated region for block: B:44:0x008c */ /* JADX WARNING: Removed duplicated region for block: B:59:0x00ab */ /* JADX WARNING: Removed duplicated region for block: B:65:0x00b6 */ @Nullable public byte[] getThumbnailBytes() { FileDescriptor fileDescriptor; Throwable th; InputStream inputStream; Exception e; InputStream inputStream2 = null; if (!this.mHasThumbnail) { return null; } byte[] bArr = this.mThumbnailBytes; if (bArr != null) { return bArr; } try { inputStream = this.mAssetInputStream; if (inputStream != null) { try { if (inputStream.markSupported()) { inputStream.reset(); } else { Log.d(TAG, "Cannot read thumbnail from inputstream without mark/reset support"); closeQuietly(inputStream); return null; } } catch (Exception e2) { e = e2; fileDescriptor = null; try { Log.d(TAG, "Encountered exception while getting thumbnail", e); closeQuietly(inputStream); if (fileDescriptor != null) { } return null; } catch (Throwable th2) { th = th2; inputStream2 = inputStream; closeQuietly(inputStream2); if (fileDescriptor != null) { } throw th; } } catch (Throwable th3) { th = th3; fileDescriptor = null; inputStream2 = inputStream; closeQuietly(inputStream2); if (fileDescriptor != null) { } throw th; } } else if (this.mFilename != null) { inputStream = new FileInputStream(this.mFilename); } else { FileDescriptor dup = Os.dup(this.mSeekableFileDescriptor); try { Os.lseek(dup, 0, OsConstants.SEEK_SET); fileDescriptor = dup; inputStream = new FileInputStream(dup); if (inputStream == null) { try { if (inputStream.skip((long) (this.mThumbnailOffset + this.mOffsetToExifData)) == ((long) (this.mThumbnailOffset + this.mOffsetToExifData))) { byte[] bArr2 = new byte[this.mThumbnailLength]; if (inputStream.read(bArr2) == this.mThumbnailLength) { this.mThumbnailBytes = bArr2; closeQuietly(inputStream); if (fileDescriptor != null) { closeFileDescriptor(fileDescriptor); } return bArr2; } throw new IOException("Corrupted image"); } throw new IOException("Corrupted image"); } catch (Exception e3) { e = e3; Log.d(TAG, "Encountered exception while getting thumbnail", e); closeQuietly(inputStream); if (fileDescriptor != null) { } return null; } } else { throw new FileNotFoundException(); } } catch (Exception e4) { e = e4; fileDescriptor = dup; inputStream = null; Log.d(TAG, "Encountered exception while getting thumbnail", e); closeQuietly(inputStream); if (fileDescriptor != null) { } return null; } catch (Throwable th4) { th = th4; fileDescriptor = dup; closeQuietly(inputStream2); if (fileDescriptor != null) { } throw th; } } fileDescriptor = null; if (inputStream == null) { } } catch (Exception e5) { inputStream = null; e = e5; fileDescriptor = null; Log.d(TAG, "Encountered exception while getting thumbnail", e); closeQuietly(inputStream); if (fileDescriptor != null) { closeFileDescriptor(fileDescriptor); } return null; } catch (Throwable th5) { th = th5; fileDescriptor = null; closeQuietly(inputStream2); if (fileDescriptor != null) { closeFileDescriptor(fileDescriptor); } throw th; } } @Nullable public long[] getThumbnailRange() { if (this.mModified) { throw new IllegalStateException("The underlying file has been modified since being parsed"); } else if (!this.mHasThumbnail) { return null; } else { if (!this.mHasThumbnailStrips || this.mAreThumbnailStripsConsecutive) { return new long[]{(long) (this.mThumbnailOffset + this.mOffsetToExifData), (long) this.mThumbnailLength}; } return null; } } public boolean hasAttribute(@NonNull String str) { return getExifAttribute(str) != null; } public boolean hasThumbnail() { return this.mHasThumbnail; } public boolean isFlipped() { int attributeInt = getAttributeInt(TAG_ORIENTATION, 1); return attributeInt == 2 || attributeInt == 7 || attributeInt == 4 || attributeInt == 5; } public boolean isThumbnailCompressed() { if (!this.mHasThumbnail) { return false; } int i = this.mThumbnailCompression; return i == 6 || i == 7; } public void resetOrientation() { setAttribute(TAG_ORIENTATION, Integer.toString(1)); } public void rotate(int i) { if (i % 90 == 0) { int attributeInt = getAttributeInt(TAG_ORIENTATION, 1); List list = ROTATION_ORDER; int i2 = 0; if (list.contains(Integer.valueOf(attributeInt))) { int indexOf = ((i / 90) + list.indexOf(Integer.valueOf(attributeInt))) % 4; if (indexOf < 0) { i2 = 4; } i2 = list.get(indexOf + i2).intValue(); } else { List list2 = FLIPPED_ROTATION_ORDER; if (list2.contains(Integer.valueOf(attributeInt))) { int indexOf2 = ((i / 90) + list2.indexOf(Integer.valueOf(attributeInt))) % 4; if (indexOf2 < 0) { i2 = 4; } i2 = list2.get(indexOf2 + i2).intValue(); } } setAttribute(TAG_ORIENTATION, Integer.toString(i2)); return; } throw new IllegalArgumentException("degree should be a multiple of 90"); } /* JADX WARNING: Code restructure failed: missing block: B:48:0x00b2, code lost: r8 = move-exception; */ /* JADX WARNING: Code restructure failed: missing block: B:49:0x00b3, code lost: r9 = null; r1 = r6; r6 = r8; r8 = null; */ /* JADX WARNING: Code restructure failed: missing block: B:50:0x00b8, code lost: r7 = e; */ /* JADX WARNING: Code restructure failed: missing block: B:51:0x00b9, code lost: r8 = null; r9 = null; r1 = r6; */ /* JADX WARNING: Code restructure failed: missing block: B:52:0x00bd, code lost: r0 = th; */ /* JADX WARNING: Code restructure failed: missing block: B:53:0x00be, code lost: r9 = null; */ /* JADX WARNING: Code restructure failed: missing block: B:62:0x00cf, code lost: android.system.Os.lseek(r13.mSeekableFileDescriptor, 0, android.system.OsConstants.SEEK_SET); r1 = new java.io.FileOutputStream(r13.mSeekableFileDescriptor); */ /* JADX WARNING: Code restructure failed: missing block: B:63:0x00de, code lost: r1 = new java.io.FileOutputStream(r13.mFilename); */ /* JADX WARNING: Code restructure failed: missing block: B:85:0x0131, code lost: r2.delete(); */ /* JADX WARNING: Failed to process nested try/catch */ /* JADX WARNING: Removed duplicated region for block: B:52:0x00bd A[ExcHandler: all (th java.lang.Throwable), Splitter:B:19:0x0056] */ /* JADX WARNING: Removed duplicated region for block: B:62:0x00cf A[Catch:{ Exception -> 0x00fa, all -> 0x00f7 }] */ /* JADX WARNING: Removed duplicated region for block: B:63:0x00de A[Catch:{ Exception -> 0x00fa, all -> 0x00f7 }] */ /* JADX WARNING: Removed duplicated region for block: B:85:0x0131 */ public void saveAttributes() throws IOException { FileOutputStream fileOutputStream; Throwable th; Exception e; FileInputStream fileInputStream; BufferedOutputStream bufferedOutputStream; Throwable th2; BufferedInputStream bufferedInputStream; BufferedOutputStream bufferedOutputStream2; Exception exc; Throwable th3; FileInputStream fileInputStream2; Exception e2; FileOutputStream fileOutputStream2; if (!isSupportedFormatForSavingAttributes()) { throw new IOException("ExifInterface only supports saving attributes on JPEG, PNG, or WebP formats."); } else if (this.mSeekableFileDescriptor == null && this.mFilename == null) { throw new IOException("ExifInterface does not support saving attributes for the current input."); } else { this.mModified = true; this.mThumbnailBytes = getThumbnail(); FileInputStream fileInputStream3 = null; try { File createTempFile = File.createTempFile("temp", "tmp"); if (this.mFilename != null) { fileInputStream = new FileInputStream(this.mFilename); } else { Os.lseek(this.mSeekableFileDescriptor, 0, OsConstants.SEEK_SET); fileInputStream = new FileInputStream(this.mSeekableFileDescriptor); } try { fileOutputStream = new FileOutputStream(createTempFile); try { copy(fileInputStream, fileOutputStream); closeQuietly(fileInputStream); closeQuietly(fileOutputStream); try { FileInputStream fileInputStream4 = new FileInputStream(createTempFile); if (this.mFilename != null) { bufferedOutputStream2 = new FileOutputStream(this.mFilename); } else { Os.lseek(this.mSeekableFileDescriptor, 0, OsConstants.SEEK_SET); bufferedOutputStream2 = new FileOutputStream(this.mSeekableFileDescriptor); } bufferedInputStream = new BufferedInputStream(fileInputStream4); try { bufferedOutputStream = new BufferedOutputStream(bufferedOutputStream2); try { int i = this.mMimeType; if (i == 4) { saveJpegAttributes(bufferedInputStream, bufferedOutputStream); } else if (i == 13) { savePngAttributes(bufferedInputStream, bufferedOutputStream); } else if (i == 14) { saveWebpAttributes(bufferedInputStream, bufferedOutputStream); } closeQuietly(bufferedInputStream); closeQuietly(bufferedOutputStream); createTempFile.delete(); this.mThumbnailBytes = null; } catch (Exception e3) { exc = e3; fileInputStream3 = fileInputStream4; try { fileInputStream2 = new FileInputStream(createTempFile); try { if (this.mFilename == null) { } copy(fileInputStream2, fileOutputStream2); } catch (Exception e4) { e2 = e4; try { throw new IOException("Failed to save new file. Original file is stored in " + createTempFile.getAbsolutePath(), e2); } catch (Throwable th4) { th3 = th4; fileInputStream3 = fileInputStream2; closeQuietly(fileInputStream3); closeQuietly(bufferedOutputStream2); throw th3; } } catch (Throwable th5) { th3 = th5; fileInputStream3 = fileInputStream2; closeQuietly(fileInputStream3); closeQuietly(bufferedOutputStream2); throw th3; } try { closeQuietly(fileInputStream2); closeQuietly(fileOutputStream2); throw new IOException("Failed to save new file", exc); } catch (Throwable th6) { th2 = th6; fileInputStream3 = bufferedInputStream; closeQuietly(fileInputStream3); closeQuietly(bufferedOutputStream); if (0 == 0) { } throw th2; } } catch (Exception e5) { fileInputStream2 = fileInputStream3; e2 = e5; throw new IOException("Failed to save new file. Original file is stored in " + createTempFile.getAbsolutePath(), e2); } catch (Throwable th7) { th3 = th7; closeQuietly(fileInputStream3); closeQuietly(bufferedOutputStream2); throw th3; } } } catch (Exception e6) { bufferedOutputStream = null; fileInputStream3 = fileInputStream4; exc = e6; fileInputStream2 = new FileInputStream(createTempFile); if (this.mFilename == null) { } copy(fileInputStream2, fileOutputStream2); closeQuietly(fileInputStream2); closeQuietly(fileOutputStream2); throw new IOException("Failed to save new file", exc); } catch (Throwable th8) { th2 = th8; bufferedOutputStream = null; fileInputStream3 = bufferedInputStream; closeQuietly(fileInputStream3); closeQuietly(bufferedOutputStream); if (0 == 0) { } throw th2; } } catch (Exception e7) { Exception e8 = e7; bufferedInputStream = null; bufferedOutputStream = null; exc = e8; bufferedOutputStream2 = bufferedOutputStream; fileInputStream2 = new FileInputStream(createTempFile); if (this.mFilename == null) { } copy(fileInputStream2, fileOutputStream2); closeQuietly(fileInputStream2); closeQuietly(fileOutputStream2); throw new IOException("Failed to save new file", exc); } catch (Throwable th9) { } } catch (Exception e9) { e = e9; fileInputStream3 = fileInputStream; try { throw new IOException("Failed to copy original file to temp file", e); } catch (Throwable th10) { th = th10; closeQuietly(fileInputStream3); closeQuietly(fileOutputStream); throw th; } } catch (Throwable th11) { th = th11; fileInputStream3 = fileInputStream; closeQuietly(fileInputStream3); closeQuietly(fileOutputStream); throw th; } } catch (Exception e10) { e = e10; fileOutputStream = null; fileInputStream3 = fileInputStream; throw new IOException("Failed to copy original file to temp file", e); } catch (Throwable th12) { th = th12; fileOutputStream = null; fileInputStream3 = fileInputStream; closeQuietly(fileInputStream3); closeQuietly(fileOutputStream); throw th; } } catch (Exception e11) { e = e11; fileOutputStream = null; throw new IOException("Failed to copy original file to temp file", e); } catch (Throwable th13) { th = th13; fileOutputStream = null; closeQuietly(fileInputStream3); closeQuietly(fileOutputStream); throw th; } } } public void setAltitude(double d) { String str = d >= ShadowDrawableWrapper.COS_45 ? "0" : "1"; setAttribute(TAG_GPS_ALTITUDE, new Rational(Math.abs(d)).toString()); setAttribute(TAG_GPS_ALTITUDE_REF, str); } public void setAttribute(@NonNull String str, @Nullable String str2) { ExifTag exifTag; int i; String str3; String str4 = str; String str5 = str2; Objects.requireNonNull(str4, "tag shouldn't be null"); if ((TAG_DATETIME.equals(str4) || TAG_DATETIME_ORIGINAL.equals(str4) || TAG_DATETIME_DIGITIZED.equals(str4)) && str5 != null) { boolean find = DATETIME_PRIMARY_FORMAT_PATTERN.matcher(str5).find(); boolean find2 = DATETIME_SECONDARY_FORMAT_PATTERN.matcher(str5).find(); if (str2.length() != 19 || (!find && !find2)) { Log.w(TAG, "Invalid value for " + str4 + " : " + str5); return; } else if (find2) { str5 = str5.replaceAll("-", ":"); } } if (TAG_ISO_SPEED_RATINGS.equals(str4)) { if (DEBUG) { Log.d(TAG, "setAttribute: Replacing TAG_ISO_SPEED_RATINGS with TAG_PHOTOGRAPHIC_SENSITIVITY."); } str4 = TAG_PHOTOGRAPHIC_SENSITIVITY; } int i2 = 2; int i3 = 1; if (str5 != null && sTagSetForCompatibility.contains(str4)) { if (str4.equals(TAG_GPS_TIMESTAMP)) { Matcher matcher = GPS_TIMESTAMP_PATTERN.matcher(str5); if (!matcher.find()) { Log.w(TAG, "Invalid value for " + str4 + " : " + str5); return; } str5 = Integer.parseInt(matcher.group(1)) + "/1," + Integer.parseInt(matcher.group(2)) + "/1," + Integer.parseInt(matcher.group(3)) + "/1"; } else { try { str5 = new Rational(Double.parseDouble(str5)).toString(); } catch (NumberFormatException unused) { Log.w(TAG, "Invalid value for " + str4 + " : " + str5); return; } } } char c2 = 0; int i4 = 0; while (i4 < EXIF_TAGS.length) { if ((i4 != 4 || this.mHasThumbnail) && (exifTag = sExifTagMapsForWriting[i4].get(str4)) != null) { if (str5 == null) { this.mAttributes[i4].remove(str4); } else { Pair guessDataFormat = guessDataFormat(str5); int i5 = -1; if (exifTag.primaryFormat == ((Integer) guessDataFormat.first).intValue() || exifTag.primaryFormat == ((Integer) guessDataFormat.second).intValue()) { i = exifTag.primaryFormat; } else { int i6 = exifTag.secondaryFormat; if (i6 == -1 || !(i6 == ((Integer) guessDataFormat.first).intValue() || exifTag.secondaryFormat == ((Integer) guessDataFormat.second).intValue())) { int i7 = exifTag.primaryFormat; if (i7 == i3 || i7 == 7 || i7 == i2) { i = i7; } else if (DEBUG) { StringBuilder P = a.P("Given tag (", str4, ") value didn't match with one of expected formats: "); String[] strArr = IFD_FORMAT_NAMES; P.append(strArr[exifTag.primaryFormat]); String str6 = ""; if (exifTag.secondaryFormat == -1) { str3 = str6; } else { StringBuilder K = a.K(", "); K.append(strArr[exifTag.secondaryFormat]); str3 = K.toString(); } P.append(str3); P.append(" (guess: "); P.append(strArr[((Integer) guessDataFormat.first).intValue()]); if (((Integer) guessDataFormat.second).intValue() != -1) { StringBuilder K2 = a.K(", "); K2.append(strArr[((Integer) guessDataFormat.second).intValue()]); str6 = K2.toString(); } P.append(str6); P.append(")"); Log.d(TAG, P.toString()); } } else { i = exifTag.secondaryFormat; } } switch (i) { case 1: this.mAttributes[i4].put(str4, ExifAttribute.createByte(str5)); continue; case 2: case 7: this.mAttributes[i4].put(str4, ExifAttribute.createString(str5)); continue; case 3: String[] split = str5.split(",", -1); int[] iArr = new int[split.length]; for (int i8 = 0; i8 < split.length; i8++) { iArr[i8] = Integer.parseInt(split[i8]); } this.mAttributes[i4].put(str4, ExifAttribute.createUShort(iArr, this.mExifByteOrder)); continue; case 4: String[] split2 = str5.split(",", -1); long[] jArr = new long[split2.length]; for (int i9 = 0; i9 < split2.length; i9++) { jArr[i9] = Long.parseLong(split2[i9]); } this.mAttributes[i4].put(str4, ExifAttribute.createULong(jArr, this.mExifByteOrder)); continue; case 5: String[] split3 = str5.split(",", -1); Rational[] rationalArr = new Rational[split3.length]; int i10 = 0; while (i10 < split3.length) { String[] split4 = split3[i10].split(AutocompleteViewModel.COMMAND_DISCOVER_TOKEN, i5); rationalArr[i10] = new Rational((long) Double.parseDouble(split4[0]), (long) Double.parseDouble(split4[1])); i10++; i5 = -1; } this.mAttributes[i4].put(str4, ExifAttribute.createURational(rationalArr, this.mExifByteOrder)); continue; case 6: case 8: case 11: default: if (DEBUG) { a.c0("Data format isn't one of expected formats: ", i, TAG); break; } else { continue; } case 9: String[] split5 = str5.split(",", -1); int[] iArr2 = new int[split5.length]; for (int i11 = 0; i11 < split5.length; i11++) { iArr2[i11] = Integer.parseInt(split5[i11]); } this.mAttributes[i4].put(str4, ExifAttribute.createSLong(iArr2, this.mExifByteOrder)); continue; case 10: String[] split6 = str5.split(",", -1); Rational[] rationalArr2 = new Rational[split6.length]; int i12 = 0; while (i12 < split6.length) { String[] split7 = split6[i12].split(AutocompleteViewModel.COMMAND_DISCOVER_TOKEN, -1); rationalArr2[i12] = new Rational((long) Double.parseDouble(split7[c2]), (long) Double.parseDouble(split7[i3])); i12++; c2 = 0; i3 = 1; split6 = split6; } this.mAttributes[i4].put(str4, ExifAttribute.createSRational(rationalArr2, this.mExifByteOrder)); continue; case 12: String[] split8 = str5.split(",", -1); double[] dArr = new double[split8.length]; for (int i13 = 0; i13 < split8.length; i13++) { dArr[i13] = Double.parseDouble(split8[i13]); } this.mAttributes[i4].put(str4, ExifAttribute.createDouble(dArr, this.mExifByteOrder)); continue; } } } i4++; i2 = 2; c2 = 0; i3 = 1; } } @RestrictTo({RestrictTo.Scope.LIBRARY}) public void setDateTime(@NonNull Long l) { setAttribute(TAG_DATETIME, sFormatterPrimary.format(new Date(l.longValue()))); setAttribute(TAG_SUBSEC_TIME, Long.toString(l.longValue() % 1000)); } public void setGpsInfo(Location location) { if (location != null) { setAttribute(TAG_GPS_PROCESSING_METHOD, location.getProvider()); setLatLong(location.getLatitude(), location.getLongitude()); setAltitude(location.getAltitude()); setAttribute(TAG_GPS_SPEED_REF, "K"); setAttribute(TAG_GPS_SPEED, new Rational((double) ((location.getSpeed() * ((float) TimeUnit.HOURS.toSeconds(1))) / 1000.0f)).toString()); String[] split = sFormatterPrimary.format(new Date(location.getTime())).split("\\s+", -1); setAttribute(TAG_GPS_DATESTAMP, split[0]); setAttribute(TAG_GPS_TIMESTAMP, split[1]); } } public void setLatLong(double d, double d2) { if (d < -90.0d || d > 90.0d || Double.isNaN(d)) { throw new IllegalArgumentException("Latitude value " + d + " is not valid."); } else if (d2 < -180.0d || d2 > 180.0d || Double.isNaN(d2)) { throw new IllegalArgumentException("Longitude value " + d2 + " is not valid."); } else { setAttribute(TAG_GPS_LATITUDE_REF, d >= ShadowDrawableWrapper.COS_45 ? "N" : LATITUDE_SOUTH); setAttribute(TAG_GPS_LATITUDE, convertDecimalDegree(Math.abs(d))); setAttribute(TAG_GPS_LONGITUDE_REF, d2 >= ShadowDrawableWrapper.COS_45 ? LONGITUDE_EAST : LONGITUDE_WEST); setAttribute(TAG_GPS_LONGITUDE, convertDecimalDegree(Math.abs(d2))); } } }