Commit Graph

149 Commits

Author SHA1 Message Date
Martchus 761e3ee44b Mark all "final" tag, track and container classes as such 2020-12-18 21:13:52 +01:00
Martchus 6b469f1c26 Add Locale class to deal with differently specified languages/countries
Different media/tag formats specify languages and countries
differently. This change introduces a Locale class to keep track
of the format being used. So far there are no automatic conversions
implemented so it is entirely up to the user to pass valid values using
a format which matches the one required by the media/tag format.

This change also adds support for Matroska's IETF elements so at least the
raw value can be read, written and is preserved.
2020-12-16 17:48:08 +01:00
Martchus 4cc2dbd9e6 Use flags instead of tons of boolean fields in AbstractTrack 2020-12-16 17:48:08 +01:00
Martchus f371efe642 Don't support IETF language elements explicitely
For now let's just ignore these elements explicitely until they are
actually supported. This way the warnings are at least more specific and
there will be no inconsistency when updating the track language.
2020-11-26 23:18:14 +01:00
Martchus 5d4a211d5d Add IDs of Matroska elements for IETF language info 2020-11-26 23:12:47 +01:00
Martchus cce1e2f96d Apply clang-format 2020-11-14 22:58:55 +01:00
Martchus e7ce9e7ced Improve documentation 2020-11-05 19:52:09 +01:00
Martchus d26e594777 Deprecate 'Year' in favor of 'RecordDate' and 'ReleaseDate', fix handling in ID3v2
1. Convert TYER and related fields of old ID3v2 versions to the new TDRC
  field and only expose that via the generic accessors.
2. When writing an old ID3v2 tag, convert TDRC back to the old fields.
3. One can still manually unset the via 1. auto-populated TDRC to disable 2.
   and write the old fields directly. So the automatic handling does not
   reduce the flexibility of the library.
4. Deprecate 'Year'; it is replaced by the already existing 'RecordDate'
   which is now supposed to be used everywhere where 'Year' was used before
5. Introduce 'ReleaseDate' to support this field which is supported in
   ID3v2.4.0 and Matroska via the generic accessors.
6. Use ISO format when converting tag values of the type DateTime to/from
   string. This is closer to what's used in ID3v2 tags internally. (The
   library still allows the old format as fallback when parsing for
   compatibility.)
2020-04-24 23:15:13 +02:00
Martchus 248a6555f3 Add links to upstream documentation of field IDs for the different formats 2020-04-22 18:43:41 +02:00
Martchus 25b567913b Detect Dolby Digital Plus in Matroska files 2020-03-18 17:48:23 +01:00
Martchus fb4633ad36 Add specific diag msg when abort saveing mkv while parsing orig file 2019-12-30 23:53:53 +01:00
Martchus b2c02e9acc Fix childs -> children 2019-12-30 22:54:11 +01:00
Martchus 7043c3d2a9 Don't suppress IO errors when writing files
* Close or flush streams explicitely so writing is not
  deferred
    * to catch errors in the right place
    * to avoid suppressing errors completely when writing
      would be deferred to the destructor invocation
* Improve comments
2019-12-15 19:43:16 +01:00
Martchus 86b980f609 Apply clang-format 2019-06-20 22:56:59 +02:00
Martchus c8973c742c Remove unused functions of MatroskaSeekInfo 2019-06-17 19:11:20 +02:00
Martchus 480857b1b6 Parse "SeekHead" elements referenced by "Seek" elements
Follow at least one level of indirection by default
2019-06-17 19:11:00 +02:00
Martchus 0c2056c2f9 Refactor WaveFormatHeader::parse() 2019-06-16 18:06:31 +02:00
Martchus c9e1dde70b Adapt to changes in c++utilities 2019-06-12 20:40:45 +02:00
Martchus 5ad00a083c Adapt to changes in c++utilities 2019-06-10 23:11:39 +02:00
Martchus c17db5f2f6 Apply cmake-format and clang-format 2019-05-04 21:03:09 +02:00
Martchus 3288d49d62 Support 'file://' URLs also when saving 2019-05-04 16:04:37 +02:00
Martchus 7efa7a0d5a Adapt to c++utilities v5 2019-05-04 16:04:21 +02:00
Martchus 3332314eb6 Prepare logging errors when parsing AVC config 2018-08-23 23:20:17 +02:00
Martchus 1dc8fb4839 Detect AV1 in MKV 2018-07-28 14:54:46 +02:00
Martchus a2ff0f418f Fix typo occured -> occurred 2018-07-23 14:44:06 +02:00
Martchus 7d709ce9af Add Tag::supportsMultipleValues() 2018-07-13 12:25:00 +02:00
Martchus af4b43ff79 Replace typedef with using 2018-07-12 12:34:38 +02:00
Martchus e81c6bb169 Implement small TODOs for v8 2018-07-12 12:34:38 +02:00
Martchus a87ad5f5ec Don't use global variable for backup directory 2018-07-12 12:34:38 +02:00
Martchus 9361e0bc13 Use constexpr where possible 2018-07-12 12:34:38 +02:00
Martchus 3265e0bea4 Fix documentation which was still using the old namespace 2018-06-03 20:38:32 +02:00
Martchus e87f788dce Prevent multiple heap allocations in MatroskaEditionEntry::label() 2018-06-02 23:05:04 +02:00
Martchus b665d2557a Fix missing break in MatroskaChapter::internalParse() 2018-06-02 23:05:04 +02:00
Martchus 0a640c9f7f Fix warnings, mostly about implicit int conversions
This should fix all non-erros, leaving only warnings which
are indeed potential problems.

The following warnings should be safe to ignore:

* Conversions of various offsets from uint64 to
  std::streamoff/int64 are safe because such offsets have
  been obtained via tellg() and other functions
  returning std::streamoff in the first place.
* It also works vice-versa since tellg() should not
  return negative offsets with exceptions enabled.
* Conversions from char to unsigned char are also ok.
* Unused diag arguments can be ignored (those might be
  useful later).
* Annotate all intended fallthoughs.
2018-06-02 23:04:53 +02:00
Martchus 8887ae81cf Don't use exception in MatroskaTag::internallyGetKnownField() 2018-05-13 20:40:30 +02:00
Martchus 2431889b64 Apply clang-format 2018-05-13 00:25:14 +02:00
Martchus 62999e0be6 Fix usage of enable_if with GCC 8
Seems like the trick with the three dots isn't working
with GCC 8 anymore. So let's make it a default template
parameter then.

Not sure whether GCC 8 is here correct and whether this
workaround causes further trouble.
2018-05-07 23:52:38 +02:00
Martchus cbb54d5aeb Allow custom writing application 2018-03-20 21:41:05 +01:00
Martchus 59024a66a0 Don't clear field before parsing by default 2018-03-11 22:27:12 +01:00
Martchus c0336ed4bb Apply clang-format 2018-03-07 01:17:50 +01:00
Martchus efa67d6a1a Improve siblingById() and subelementByPath()
* Use 2 functions instead of flag parameter
* Support const correctness
2018-03-07 00:30:08 +01:00
Martchus 0e15c74103 Move everything into namespace TagParser 2018-03-06 23:09:15 +01:00
Martchus 36511fcc13 Add progress feedback and diagnostics replacing status provider 2018-03-06 22:44:01 +01:00
Martchus 652e4809b4 Use unordered_map in MatroskaCuePositionUpdater
std::unordered_map should be faster than std::map
2018-03-06 22:44:01 +01:00
Martchus e705de3704 Handle Mkv files with unknown element sizes correctly
Those elements are still assumed to fill the max available
space. However, if it turns out one "child" is more likely
a sibling, the wrong assumption is fixed.
2018-03-06 22:44:01 +01:00
Martchus 5ed20c7e8e Add function to determine Mkv element level by ID
Does not cover all element IDs but should be more
than sufficient for its purpose.
2018-03-06 22:44:01 +01:00
Martchus 038d30587c Uniform spelling of Matroska IDs 2018-03-06 22:44:01 +01:00
Martchus 7a02e8a325 Uniform/simplify typedefs in templates
* Begin type names with capital letter
* Remove typedefs for implementation type
* Remove useless/obsolete comments
* Simplify relevant code
2018-03-06 22:44:01 +01:00
Martchus 0daabba17a Use static polymorphism in FieldMapBasedTag 2018-03-06 22:44:01 +01:00
Martchus 138fa32f29 Restructure FieldMapBasedTag to use CRTP 2018-03-06 22:44:01 +01:00