Commit Graph

29 Commits (d21ac8e2de85274733c163a2e1f62d8bb239c31d)

Author SHA1 Message Date
Dustin Oprea 46b1a0cd17 ifd_enumerate.go: Add date normalization. Skip altitude if zero denominator.
Fixes #43
2020-07-17 02:39:59 -04:00
Dustin Oprea 4e059a6b95 Drop inline RELEASE TO-DOs from v2. They are now active tasks in v3. 2020-07-11 12:12:48 -04:00
Dustin Oprea 9743a98845 Revert "Revert "Report-card fixes""
This reverts commit 4450f89e048a2373cd82a911725b6c54d22632eb.

The next commit has the fixes.
2020-06-12 02:13:36 -04:00
Dustin Oprea 591504aef0 Revert "Report-card fixes"
This reverts commit eb5bd13c98.

Introduced some new issues, here. This is being debugged on a separate
branch.

Fixes #41
2020-06-12 01:52:09 -04:00
Dustin Oprea eb5bd13c98 Report-card fixes 2020-06-10 16:11:13 -04:00
Dustin Oprea 7edf52b885 Timestamps can now be set directly 2020-06-07 01:33:12 -04:00
Dustin Oprea fb98f429ee We now guess at alternative IFDs for invalid tags automatically
This required some backtracking on a change we just pushed a little
while ago.
2020-05-27 00:29:03 -04:00
Dustin Oprea b4c2ca5765 tags.go: Bugfix for bad FindFirst() error handling and not returning if not found
- utility.go: Add GetExifData() to return flat tags and extra data and
  to allow guessing of tags for misplaced IFDs.

- exif-read-tool/main.go: Implement tag guessing
2020-05-26 21:28:27 -04:00
Dustin Oprea de4b8921bd Log guesses about implementation incongruities for invalid tags
2020/05/25 19:21:33 exif.utility: [WARNING]  Tag with ID (0x0201) in IFD [IFD/Exif] is not recognized and will be ignored.
2020/05/25 19:21:33 exif.utility: [WARNING]  (cont'd) Tag [JPEGInterchangeFormat] with the same ID has been found in IFD [IFD] and may be related. The tag you were looking for might have been written to the wrong IFD by a buggy implementation.
2020/05/25 19:21:33 exif.utility: [WARNING]  Tag with ID (0x0202) in IFD [IFD/Exif] is not recognized and will be ignored.
2020/05/25 19:21:33 exif.utility: [WARNING]  (cont'd) Tag [JPEGInterchangeFormatLength] with the same ID has been found in IFD [IFD] and may be related. The tag you were looking for might have been written to the wrong IFD by a buggy implementation.

Closes #38
2020-05-25 19:22:47 -04:00
Dustin Oprea 75b5552112 tags.go: 'Get' functions now take an exifcommon.IfdIdentity 2020-05-24 11:07:46 -04:00
Dustin Oprea 1a12aec48f utility.go: Drop FqIfdPath. Now fully obsolete. 2020-05-20 15:12:04 -04:00
Dustin Oprea 015129a9ef Use RELEASE() notes to denote future backwards-incompatible TODOs 2020-05-20 14:33:28 -04:00
Dustin Oprea 08ac8466dd ifd.go: Add type system for IFD IDs, names, and paths
This allows us to pass around individual tokens that we can use to
generate IDs, names, and qualified and non-qualified IFD paths, rather
than [necessarily] having to pass or store them individually.

The previous global variables were strings. Now they are IfdIdentity structs
and have been renamed to be more accurate (in general, as well as for this).
The previous variables have been kept but are now just assigned to the newer
variables. This is backwards-compatibility that will be removed in the future.
2020-05-20 14:07:16 -04:00
Dustin Oprea 753e5191d6 utility.go: Reduce duplication in `GetFlatExifData()` and just use `Scan()` 2020-05-19 02:47:07 -04:00
Dustin Oprea 76635a8c89 utility.go: Bugfix for excessive loading and reloading of tag-indices 2020-05-18 01:23:35 -04:00
Dustin Oprea af2e8222eb utility.go: ExifTag now has UnitCount field 2020-05-18 01:14:56 -04:00
Dustin Oprea d2495e29dd utility.go: Skip unknown tags in GetFlatExifData
This makes its behavior consistent with other iteration/enumeration
functions and also mitigates handling errors by unsuspecting callers.
2020-05-17 19:40:38 -04:00
Dustin Oprea 7f6eb3d9f3 utility.go: Add formatted values to ExifTag 2020-05-16 17:31:02 -04:00
Dustin Oprea 70b6dc8a1a utility.go: Bugfix for non-FQ IFD-paths in GetFlatExifData 2020-05-16 07:54:40 -04:00
Dustin Oprea 95ec440155 ifd_enumerate.go: Bugfix for scan() fully-qualified IFD paths not being fully-qualified 2020-05-16 06:42:42 -04:00
Dustin Oprea c74ff0d0b0 utility.go: Add GpsDegreesEquals 2020-05-06 01:32:01 -04:00
Dustin Oprea 45986dbda3 Now a specific error for unparseable undefined tags 2020-05-02 16:23:19 -04:00
Dustin Oprea 90b66e3d11 Renamed V2 constant
From ErrUnhandledUnknownTypedTag to ErrUnhandledUndefinedTypedTag. The
release just happened. There should be minimal fallout.
2020-01-13 13:44:00 -05:00
Dustin Oprea 0c670ca7c2 ifd_tag_entry.go: Renamed RawBytes() to GetRawBytes()
It used to be a simple getter but now it does stuff.
2020-01-12 18:56:35 -05:00
Dustin Oprea 173d686dd9 Visit interface now just gets the ITE struct
That, rather than just a couple of values from it. Primarily because we
want to not have callers involve themselves with the value context
unless they want to.

- ifd_tag_entry.go: ITEs now provide `Format()` and `FormatFirst()`
  methods.

- We dumped several spots of code that could just reuse functions to
  format, decode, or get raw bytes rather than dealing with undefined
  vs not undefined logic themselves.

  - This is now possible due to prior change.

- ifd_tag_entry.go: No longer exports GetValueContext(). Users shouldn't
  usually have to touch it, now.

- Added some commenting.

This commit almost represents everything we have been trying to achieve,
now made possible by the last several commits.
2020-01-12 18:56:35 -05:00
Dustin Oprea 1bdfa9b10e Empower ITEs to resolve values and raw bytes directly
They'll also now embed all of the information they need to know since it
is all known where the ITEs are created. This prevents the user from
having to be involved in it. This makes it much more straightforward and
enjoyable to use.

- ifd_tag_entry.go
  - newIfdTagEntry now takes and embeds `addressableBytes` and
    `byteOrder`.
  - We've dumped the `value` member that let the caller preload a parsed
    value (or bytes?). It's no longer necessary since this led to
    inconsistencies and the ITE can produce these values directly, now.
  - `Value()` obviously no longer takes `addressableValue` and
    `byteOrder` since now embedded.
  - `Value()` will now see and return ErrUnhandledUnknownTypedTag
    directly (not wrapping it, since this is a handled case).

- common/type.go: FormatFromType now uses Stringer as a fallback if
  possible. All undefined-tag wrapper types implement it, so the same
  function can handle both undefined and non-undefined values, and the
  individual types can control the strings presented in simple listing.

- Dropped "resolveValue" parameters from all of the collect, visit, and
  parsing functions. Resolution is now a later step performed by the
  caller on the ITEs, directly.

  - This parameter was protection against undefined-type values
    disrupting simple enumeration, but now the user can simply produce
    the list of tags and can either choose to decode their value or not,
    directly. If they do, they, as of earlier, recent commits, also have
    the ability to properly manage unhandled undefined-values so they
    don't crash.

- The ITEs can now create ValueContext structs directly
  (GetValueContext()), though it might not be necessary now that the
  ITEs can produce the values and encodings directly.

  - This also allowed us to dump several other GetValueContext()
    implementations elsewhere since it is now self-reliant on this type
    and those methods were essentially kludges for the lack of this.

- Dump a bunch of "Value" methods from ITEs which just weren't useful or
  simple enough. Replaced by the above.

- Fixed `(Ifd).String()` to have a pointer receiver.
2020-01-12 18:56:35 -05:00
Dustin Oprea 32a5d88770 New integration of common/ and undefined/ subpackages
- common/type.go: Add FormatFromType() .
- Renamed common/type_encode.go to common/value_encoder.go .
2020-01-12 18:56:35 -05:00
Dustin Oprea bf3bc4e542 Refactor undefined-type tag processing 2020-01-12 18:56:35 -05:00
Dustin Oprea 903910b6a7 Add v2 release module 2020-01-02 07:06:28 -05:00