It is only used by exif.c (and e.g. EXIF_TAG_NAME_LENGTH is an implementation detail anyway). Also remove the sentinel, as it is used in conjunction with FF_ARRAY_ELEMS.
Unified · Split
| @@ -28,6 +28,133 @@ · 27 unmodified lines | ||
| 28 | 28 | #include "exif.h" |
| 29 | 29 | #include "tiff_common.h" |
| 30 | 30 | |
| 31 | +#define EXIF_TAG_NAME_LENGTH 32 | |
| 32 | + | |
| 33 | +struct exif_tag { | |
| 34 | + char name[EXIF_TAG_NAME_LENGTH]; | |
| 35 | + uint16_t id; | |
| 36 | +}; | |
| 37 | + | |
| 38 | +static const struct exif_tag tag_list[] = { // JEITA CP-3451 EXIF specification: | |
| 39 | + {"GPSVersionID", 0x00}, // <- Table 12 GPS Attribute Information | |
| 40 | + {"GPSLatitudeRef", 0x01}, | |
| 41 | + {"GPSLatitude", 0x02}, | |
| 42 | + {"GPSLongitudeRef", 0x03}, | |
| 43 | + {"GPSLongitude", 0x04}, | |
| 44 | + {"GPSAltitudeRef", 0x05}, | |
| 45 | + {"GPSAltitude", 0x06}, | |
| 46 | + {"GPSTimeStamp", 0x07}, | |
| 47 | + {"GPSSatellites", 0x08}, | |
| 48 | + {"GPSStatus", 0x09}, | |
| 49 | + {"GPSMeasureMode", 0x0A}, | |
| 50 | + {"GPSDOP", 0x0B}, | |
| 51 | + {"GPSSpeedRef", 0x0C}, | |
| 52 | + {"GPSSpeed", 0x0D}, | |
| 53 | + {"GPSTrackRef", 0x0E}, | |
| 54 | + {"GPSTrack", 0x0F}, | |
| 55 | + {"GPSImgDirectionRef", 0x10}, | |
| 56 | + {"GPSImgDirection", 0x11}, | |
| 57 | + {"GPSMapDatum", 0x12}, | |
| 58 | + {"GPSDestLatitudeRef", 0x13}, | |
| 59 | + {"GPSDestLatitude", 0x14}, | |
| 60 | + {"GPSDestLongitudeRef", 0x15}, | |
| 61 | + {"GPSDestLongitude", 0x16}, | |
| 62 | + {"GPSDestBearingRef", 0x17}, | |
| 63 | + {"GPSDestBearing", 0x18}, | |
| 64 | + {"GPSDestDistanceRef", 0x19}, | |
| 65 | + {"GPSDestDistance", 0x1A}, | |
| 66 | + {"GPSProcessingMethod", 0x1B}, | |
| 67 | + {"GPSAreaInformation", 0x1C}, | |
| 68 | + {"GPSDateStamp", 0x1D}, | |
| 69 | + {"GPSDifferential", 0x1E}, | |
| 70 | + {"ImageWidth", 0x100}, // <- Table 3 TIFF Rev. 6.0 Attribute Information Used in Exif | |
| 71 | + {"ImageLength", 0x101}, | |
| 72 | + {"BitsPerSample", 0x102}, | |
| 73 | + {"Compression", 0x103}, | |
| 74 | + {"PhotometricInterpretation", 0x106}, | |
| 75 | + {"Orientation", 0x112}, | |
| 76 | + {"SamplesPerPixel", 0x115}, | |
| 77 | + {"PlanarConfiguration", 0x11C}, | |
| 78 | + {"YCbCrSubSampling", 0x212}, | |
| 79 | + {"YCbCrPositioning", 0x213}, | |
| 80 | + {"XResolution", 0x11A}, | |
| 81 | + {"YResolution", 0x11B}, | |
| 82 | + {"ResolutionUnit", 0x128}, | |
| 83 | + {"StripOffsets", 0x111}, | |
| 84 | + {"RowsPerStrip", 0x116}, | |
| 85 | + {"StripByteCounts", 0x117}, | |
| 86 | + {"JPEGInterchangeFormat", 0x201}, | |
| 87 | + {"JPEGInterchangeFormatLength",0x202}, | |
| 88 | + {"TransferFunction", 0x12D}, | |
| 89 | + {"WhitePoint", 0x13E}, | |
| 90 | + {"PrimaryChromaticities", 0x13F}, | |
| 91 | + {"YCbCrCoefficients", 0x211}, | |
| 92 | + {"ReferenceBlackWhite", 0x214}, | |
| 93 | + {"DateTime", 0x132}, | |
| 94 | + {"ImageDescription", 0x10E}, | |
| 95 | + {"Make", 0x10F}, | |
| 96 | + {"Model", 0x110}, | |
| 97 | + {"Software", 0x131}, | |
| 98 | + {"Artist", 0x13B}, | |
| 99 | + {"Copyright", 0x8298}, | |
| 100 | + {"ExifVersion", 0x9000}, // <- Table 4 Exif IFD Attribute Information (1) | |
| 101 | + {"FlashpixVersion", 0xA000}, | |
| 102 | + {"ColorSpace", 0xA001}, | |
| 103 | + {"ComponentsConfiguration", 0x9101}, | |
| 104 | + {"CompressedBitsPerPixel", 0x9102}, | |
| 105 | + {"PixelXDimension", 0xA002}, | |
| 106 | + {"PixelYDimension", 0xA003}, | |
| 107 | + {"MakerNote", 0x927C}, | |
| 108 | + {"UserComment", 0x9286}, | |
| 109 | + {"RelatedSoundFile", 0xA004}, | |
| 110 | + {"DateTimeOriginal", 0x9003}, | |
| 111 | + {"DateTimeDigitized", 0x9004}, | |
| 112 | + {"SubSecTime", 0x9290}, | |
| 113 | + {"SubSecTimeOriginal", 0x9291}, | |
| 114 | + {"SubSecTimeDigitized", 0x9292}, | |
| 115 | + {"ImageUniqueID", 0xA420}, | |
| 116 | + {"ExposureTime", 0x829A}, // <- Table 5 Exif IFD Attribute Information (2) | |
| 117 | + {"FNumber", 0x829D}, | |
| 118 | + {"ExposureProgram", 0x8822}, | |
| 119 | + {"SpectralSensitivity", 0x8824}, | |
| 120 | + {"ISOSpeedRatings", 0x8827}, | |
| 121 | + {"OECF", 0x8828}, | |
| 122 | + {"ShutterSpeedValue", 0x9201}, | |
| 123 | + {"ApertureValue", 0x9202}, | |
| 124 | + {"BrightnessValue", 0x9203}, | |
| 125 | + {"ExposureBiasValue", 0x9204}, | |
| 126 | + {"MaxApertureValue", 0x9205}, | |
| 127 | + {"SubjectDistance", 0x9206}, | |
| 128 | + {"MeteringMode", 0x9207}, | |
| 129 | + {"LightSource", 0x9208}, | |
| 130 | + {"Flash", 0x9209}, | |
| 131 | + {"FocalLength", 0x920A}, | |
| 132 | + {"SubjectArea", 0x9214}, | |
| 133 | + {"FlashEnergy", 0xA20B}, | |
| 134 | + {"SpatialFrequencyResponse", 0xA20C}, | |
| 135 | + {"FocalPlaneXResolution", 0xA20E}, | |
| 136 | + {"FocalPlaneYResolution", 0xA20F}, | |
| 137 | + {"FocalPlaneResolutionUnit", 0xA210}, | |
| 138 | + {"SubjectLocation", 0xA214}, | |
| 139 | + {"ExposureIndex", 0xA215}, | |
| 140 | + {"SensingMethod", 0xA217}, | |
| 141 | + {"FileSource", 0xA300}, | |
| 142 | + {"SceneType", 0xA301}, | |
| 143 | + {"CFAPattern", 0xA302}, | |
| 144 | + {"CustomRendered", 0xA401}, | |
| 145 | + {"ExposureMode", 0xA402}, | |
| 146 | + {"WhiteBalance", 0xA403}, | |
| 147 | + {"DigitalZoomRatio", 0xA404}, | |
| 148 | + {"FocalLengthIn35mmFilm", 0xA405}, | |
| 149 | + {"SceneCaptureType", 0xA406}, | |
| 150 | + {"GainControl", 0xA407}, | |
| 151 | + {"Contrast", 0xA408}, | |
| 152 | + {"Saturation", 0xA409}, | |
| 153 | + {"Sharpness", 0xA40A}, | |
| 154 | + {"DeviceSettingDescription", 0xA40B}, | |
| 155 | + {"SubjectDistanceRange", 0xA40C} | |
| 156 | +// {"InteroperabilityIndex", 0x1}, // <- Table 13 Interoperability IFD Attribute Information | |
| 157 | +}; | |
| 31 | 158 | |
| 32 | 159 | static const char *exif_get_tag_name(uint16_t id) |
| 33 | 160 | { |
| @@ -32,136 +32,6 @@ · 31 unmodified lines | ||
| 32 | 32 | #include "libavutil/dict.h" |
| 33 | 33 | #include "bytestream.h" |
| 34 | 34 | |
| 35 | −#define EXIF_MAX_IFD_RECURSION 2 | |
| 36 | −#define EXIF_TAG_NAME_LENGTH 32 | |
| 37 | − | |
| 38 | −struct exif_tag { | |
| 39 | − char name[EXIF_TAG_NAME_LENGTH]; | |
| 40 | − uint16_t id; | |
| 41 | −}; | |
| 42 | − | |
| 43 | −static const struct exif_tag tag_list[] = { // JEITA CP-3451 EXIF specification: | |
| 44 | − {"GPSVersionID", 0x00}, // <- Table 12 GPS Attribute Information | |
| 45 | − {"GPSLatitudeRef", 0x01}, | |
| 46 | − {"GPSLatitude", 0x02}, | |
| 47 | − {"GPSLongitudeRef", 0x03}, | |
| 48 | − {"GPSLongitude", 0x04}, | |
| 49 | − {"GPSAltitudeRef", 0x05}, | |
| 50 | − {"GPSAltitude", 0x06}, | |
| 51 | − {"GPSTimeStamp", 0x07}, | |
| 52 | − {"GPSSatellites", 0x08}, | |
| 53 | − {"GPSStatus", 0x09}, | |
| 54 | − {"GPSMeasureMode", 0x0A}, | |
| 55 | − {"GPSDOP", 0x0B}, | |
| 56 | − {"GPSSpeedRef", 0x0C}, | |
| 57 | − {"GPSSpeed", 0x0D}, | |
| 58 | − {"GPSTrackRef", 0x0E}, | |
| 59 | − {"GPSTrack", 0x0F}, | |
| 60 | − {"GPSImgDirectionRef", 0x10}, | |
| 61 | − {"GPSImgDirection", 0x11}, | |
| 62 | − {"GPSMapDatum", 0x12}, | |
| 63 | − {"GPSDestLatitudeRef", 0x13}, | |
| 64 | − {"GPSDestLatitude", 0x14}, | |
| 65 | − {"GPSDestLongitudeRef", 0x15}, | |
| 66 | − {"GPSDestLongitude", 0x16}, | |
| 67 | − {"GPSDestBearingRef", 0x17}, | |
| 68 | − {"GPSDestBearing", 0x18}, | |
| 69 | − {"GPSDestDistanceRef", 0x19}, | |
| 70 | − {"GPSDestDistance", 0x1A}, | |
| 71 | − {"GPSProcessingMethod", 0x1B}, | |
| 72 | − {"GPSAreaInformation", 0x1C}, | |
| 73 | − {"GPSDateStamp", 0x1D}, | |
| 74 | − {"GPSDifferential", 0x1E}, | |
| 75 | − {"ImageWidth", 0x100}, // <- Table 3 TIFF Rev. 6.0 Attribute Information Used in Exif | |
| 76 | − {"ImageLength", 0x101}, | |
| 77 | − {"BitsPerSample", 0x102}, | |
| 78 | − {"Compression", 0x103}, | |
| 79 | − {"PhotometricInterpretation", 0x106}, | |
| 80 | − {"Orientation", 0x112}, | |
| 81 | − {"SamplesPerPixel", 0x115}, | |
| 82 | − {"PlanarConfiguration", 0x11C}, | |
| 83 | − {"YCbCrSubSampling", 0x212}, | |
| 84 | − {"YCbCrPositioning", 0x213}, | |
| 85 | − {"XResolution", 0x11A}, | |
| 86 | − {"YResolution", 0x11B}, | |
| 87 | − {"ResolutionUnit", 0x128}, | |
| 88 | − {"StripOffsets", 0x111}, | |
| 89 | − {"RowsPerStrip", 0x116}, | |
| 90 | − {"StripByteCounts", 0x117}, | |
| 91 | − {"JPEGInterchangeFormat", 0x201}, | |
| 92 | − {"JPEGInterchangeFormatLength",0x202}, | |
| 93 | − {"TransferFunction", 0x12D}, | |
| 94 | − {"WhitePoint", 0x13E}, | |
| 95 | − {"PrimaryChromaticities", 0x13F}, | |
| 96 | − {"YCbCrCoefficients", 0x211}, | |
| 97 | − {"ReferenceBlackWhite", 0x214}, | |
| 98 | − {"DateTime", 0x132}, | |
| 99 | − {"ImageDescription", 0x10E}, | |
| 100 | − {"Make", 0x10F}, | |
| 101 | − {"Model", 0x110}, | |
| 102 | − {"Software", 0x131}, | |
| 103 | − {"Artist", 0x13B}, | |
| 104 | − {"Copyright", 0x8298}, | |
| 105 | − {"ExifVersion", 0x9000}, // <- Table 4 Exif IFD Attribute Information (1) | |
| 106 | − {"FlashpixVersion", 0xA000}, | |
| 107 | − {"ColorSpace", 0xA001}, | |
| 108 | − {"ComponentsConfiguration", 0x9101}, | |
| 109 | − {"CompressedBitsPerPixel", 0x9102}, | |
| 110 | − {"PixelXDimension", 0xA002}, | |
| 111 | − {"PixelYDimension", 0xA003}, | |
| 112 | − {"MakerNote", 0x927C}, | |
| 113 | − {"UserComment", 0x9286}, | |
| 114 | − {"RelatedSoundFile", 0xA004}, | |
| 115 | − {"DateTimeOriginal", 0x9003}, | |
| 116 | − {"DateTimeDigitized", 0x9004}, | |
| 117 | − {"SubSecTime", 0x9290}, | |
| 118 | − {"SubSecTimeOriginal", 0x9291}, | |
| 119 | − {"SubSecTimeDigitized", 0x9292}, | |
| 120 | − {"ImageUniqueID", 0xA420}, | |
| 121 | − {"ExposureTime", 0x829A}, // <- Table 5 Exif IFD Attribute Information (2) | |
| 122 | − {"FNumber", 0x829D}, | |
| 123 | − {"ExposureProgram", 0x8822}, | |
| 124 | − {"SpectralSensitivity", 0x8824}, | |
| 125 | − {"ISOSpeedRatings", 0x8827}, | |
| 126 | − {"OECF", 0x8828}, | |
| 127 | − {"ShutterSpeedValue", 0x9201}, | |
| 128 | − {"ApertureValue", 0x9202}, | |
| 129 | − {"BrightnessValue", 0x9203}, | |
| 130 | − {"ExposureBiasValue", 0x9204}, | |
| 131 | − {"MaxApertureValue", 0x9205}, | |
| 132 | − {"SubjectDistance", 0x9206}, | |
| 133 | − {"MeteringMode", 0x9207}, | |
| 134 | − {"LightSource", 0x9208}, | |
| 135 | − {"Flash", 0x9209}, | |
| 136 | − {"FocalLength", 0x920A}, | |
| 137 | − {"SubjectArea", 0x9214}, | |
| 138 | − {"FlashEnergy", 0xA20B}, | |
| 139 | − {"SpatialFrequencyResponse", 0xA20C}, | |
| 140 | − {"FocalPlaneXResolution", 0xA20E}, | |
| 141 | − {"FocalPlaneYResolution", 0xA20F}, | |
| 142 | − {"FocalPlaneResolutionUnit", 0xA210}, | |
| 143 | − {"SubjectLocation", 0xA214}, | |
| 144 | − {"ExposureIndex", 0xA215}, | |
| 145 | − {"SensingMethod", 0xA217}, | |
| 146 | − {"FileSource", 0xA300}, | |
| 147 | − {"SceneType", 0xA301}, | |
| 148 | − {"CFAPattern", 0xA302}, | |
| 149 | − {"CustomRendered", 0xA401}, | |
| 150 | − {"ExposureMode", 0xA402}, | |
| 151 | − {"WhiteBalance", 0xA403}, | |
| 152 | − {"DigitalZoomRatio", 0xA404}, | |
| 153 | − {"FocalLengthIn35mmFilm", 0xA405}, | |
| 154 | − {"SceneCaptureType", 0xA406}, | |
| 155 | − {"GainControl", 0xA407}, | |
| 156 | − {"Contrast", 0xA408}, | |
| 157 | − {"Saturation", 0xA409}, | |
| 158 | − {"Sharpness", 0xA40A}, | |
| 159 | − {"DeviceSettingDescription", 0xA40B}, | |
| 160 | − {"SubjectDistanceRange", 0xA40C} | |
| 161 | −// {"InteroperabilityIndex", 0x1}, // <- Table 13 Interoperability IFD Attribute Information | |
| 162 | −// {"", 0x0} | |
| 163 | −}; | |
| 164 | − | |
| 165 | 35 | /** Recursively decodes all IFD's and |
| 166 | 36 | * adds included TAGS into the metadata dictionary. */ |
| 167 | 37 | int avpriv_exif_decode_ifd(void *logctx, const uint8_t *buf, int size, |