Commit Graph

13239 Commits

Author SHA1 Message Date
Moritz Bunkus
d34d87804c
build system: fix dependencies of QRC files wrt. icons 2020-06-21 20:23:11 +02:00
Moritz Bunkus
cc3713db7b
DTS: use std::size_t instead of just size_t 2020-06-21 20:01:38 +02:00
Moritz Bunkus
c51c1861c9
add developer tool for converting MPEG TS timestamps 2020-06-21 16:13:24 +02:00
Moritz Bunkus
836ce42b73
add developer tool for finding jumps in timestamps in output of mkvinfo -s… 2020-06-21 16:12:42 +02:00
Moritz Bunkus
3607e98e9a
Merge branch 'undefined' of gitlab.com:moni33/mkvtoolnix into main 2020-06-21 16:08:35 +02:00
Moritz Bunkus
525387ae42
MPEG TS reader: MPLS: seek to start position & stop after encountering end timestamp
Associated clip information (CLPI) files contain an index that map
timestamps to file positions (roughly one index entry per
second). When reading an MPLS playlist mkvmerge will now look up each
play item's start timestamp in said index and seek to the nearest file
position and start processing from there — instead of always reading
an M2TS file from the start.

Additionally mkvmerge will now simply stop reading from an M2TS file
once the first packet is encountered whose timestamp is equal to or
larger than the play item's end timestamp. Before the change mkvmerge
would continue reading the rest of the file, potentially accepting
packets whose timestamps are again smaller than the play item's end
timestamp. Not only was that behavior wrong (processing of a play item
must stop once the first timestamp higher than the play item's end
timestamp is encountered), it was also wasting a lot of time.

For file reported in #2824 this reduced overall remuxing time from
more than one hour down to five minutes.

Part of the fix of #2824.
2020-06-21 10:29:24 +02:00
Moritz Bunkus
34365d3abf
MPEG TS reader: MPLS: accept all packets once play item's minimum timestamp was encountered
An MPLS playlist consists of one or more play items. Each play item
has a start and end timestamp. The intended use of the start
timestamp: locate the first packet whose timestamp is equal to or
larger than the play item's start timestamp. Demux that and all
following packets.

Unfortunately mkvmerge interpreted the timestamp differently. It would
compare the timestamps of all packets to the play item's start
timestamp. This is problematic when the timestamps aren't strictly
monotonic, which they often aren't.

For example, on a certain Blu-ray the timestamps for a PGS subtitle
track would look like this:

1. PTS 00:02:46.054911111 PGS type 22 (Presentation Composition)
2. PTS 00:02:46.050422222 PGS type 23 (Window Definition)
3. PTS 00:02:46.041455555 PGS type 20 (Palette Definition)
4. PTS 00:02:46.050422222 PGS type 21 (Object Definition)
5. PTS 00:02:46.050422222 PGS type 128 (End Of Display)

With the play item's start timestamp at 00:02:46.054911111 mkvmerge
would drop packets 2–5 and only keep 1 — destroying the PGS entry in
the process.

Additionally this resulted in the timestamps of the following PGS
subtitle being wrong: it would use the timestamp of the garbled first
entry instead.

Part of the fix of #2824.
2020-06-21 10:29:24 +02:00
Moritz Bunkus
b296fee04e
MPEG TS reader: improve debug messages 2020-06-21 10:29:24 +02:00
Moritz Bunkus
b850c59b95
MPEG TS reader: don't use "bogus subtitle timestamp" heuristic on PGS subtitles
Said heuristic is supposed to recognize faulty files where the
timestamps of teletext subtitles suddenly differ hugely from the
timestamps of surrounding audio/video packets. They often jump back
just as quickly.

Unfortunately regular PGS subtitles as found on regular Blu-rays show
similar behavior. For example:

audio @ 00:00:56.170
subtitles @ 00:00:56.181 (contains content to display)
audio @ 00:00:56.202
audio @ 00:00:56.234
subtitles @ 00:01:05.649 (this is the "stop displaying" packet)
audio @ 00:00:56.266

Here the subtitle packets aren't interleaved by their timestamps with
audio/video properly, triggering the heuristic, which in turn will
reset the timestamp of the second subtitle packet (stop displaying),
often to be smaller than the timestamp of the first subtitle
packet (display something). In such a case the player sees the "stop
displaying" packet before the "display something" packet, and the
result is that something is displayed indefinitely (or until the next
"display something" subtitle comes along).

As such interleaving seems to be normal on Blu-rays, turning off the
heuristic for PGS subtitle tracks is the way to go — especially since
I've never seen huge jumps in PGS subtitle timestamps such as the ones
the heuristic was initially meant for.

Fixes #2736 and partially fixes #2824.
2020-06-21 10:29:22 +02:00
Симеон Цветков
7a376fbb6e Replace subtitles.png
In dark mode this icon doesn't contrast well with the dark background. I've added a tint of white shadow, so now it looks kind of okay on dark background.
2020-06-20 12:25:35 +00:00
Moritz Bunkus
4ffc01007a
GUI: mux: position cursor correctly after removing invalid chars from destination file
Fixes #2855.
2020-06-20 11:12:18 +02:00
Moritz Bunkus
7eee617e7b
Qt: use functor-based QTimer::singleShot() instead of name-based ones 2020-06-20 10:49:06 +02:00
Moritz Bunkus
6401fad9fc
CLPI parser: parse the characteristic point info
That information contains an index mapping timestamps to file
positions. It'll be used by the MPEG transport stream reader to
quickly seek to the start position when handling MPLS playlists.
2020-06-19 19:47:20 +02:00
Moritz Bunkus
a978a569a6
cosmetics: no alignment inside namespace 2020-06-18 13:46:20 +02:00
Moritz Bunkus
e6ad6c2201
GUI: preferences remember selected page on closing & restore on opening
Will not remember & restore over restarts of the program.

Implements #2852.
2020-06-17 20:26:30 +02:00
Moritz Bunkus
c6b4e27088
update AUTHORS & NEWS.md for David Byrant's WavPack fixes 2020-06-17 15:27:01 +02:00
Moritz Bunkus
14e89ada45
cosmetics: alignment, style adjustments 2020-06-17 15:18:53 +02:00
Moritz Bunkus
c4a85e3c2a
tests: add case for WavPack file created by v5 of the program 2020-06-17 15:10:21 +02:00
Moritz Bunkus
3475ecaa66
Merge remote-tracking branch 'dvbryant/wavpack5-fixes' into main 2020-06-17 14:37:35 +02:00
Moritz Bunkus
9190810c88
tests: add case for MPEG TS h.264/AVC with single frame & unbounded PES size
Test case for #2849.
2020-06-17 13:33:24 +02:00
Moritz Bunkus
8e3f2cf52d
MPEG TS reader: flush PES content with unbounded size at end-of-detection
PES packets with an unbounded size only end at the start of the
following PES packet for the same track (a TS packet with the "payload
unit start" flag set for the same PID). For tracks that consist only
of a single PES packet there is no "following PES packet for the same
track", obviously. Therefore the end of the file counts as its end,
too.

Part 2/2 of the fix for #2849.
2020-06-17 13:30:35 +02:00
Moritz Bunkus
7ccd98e740
MPEG TS reader: flush h.264 & h.265 parsers on end-of-detection
Otherwise tracks consisting of a single key frame won't be detected as
those key frames are buffered by the parsers in order to determine
frame order.

Part 1/2 of the fix for #2849.
2020-06-17 13:27:40 +02:00
Moritz Bunkus
0947a950fd
mkvmerge: free memory properly after write errors
Fixes #2843.
2020-06-07 11:02:03 +02:00
Moritz Bunkus
6a91cc4192
GUI: replace functions & enums deprecated in Qt 5.15 2020-06-05 15:53:38 +02:00
Симеон Цветков
d9d34c4e5d Update org.bunkus.mkvtoolnix-gui.appdata.xml (+ Bulgarian translation) 2020-06-04 15:55:32 +00:00
Moritz Bunkus
b324ce18f2
GUI: header editor: add "remove all attachments" context menu option
Implements #2835.
2020-06-03 18:54:57 +02:00
Moritz Bunkus
80590e6c5b
GUI: languages: only show "und" at top if not part of "often used language" 2020-06-03 15:51:05 +02:00
Moritz Bunkus
7e601565f1
ISO 639: remove now-unused default list of "popular languages" 2020-06-03 15:51:04 +02:00
Moritz Bunkus
018b7156f4
GUI: change default list of "often used languages"
The previous default list was derived from the list of spoken
languages sorted by native speakers. This list was so long that in
addition the option "only show often used languages" was enabled so as
not to confuse users with very long drop-down boxes where the top list
was very long.

Unfortunately this resulted in users being confused because their
particular language wasn't present in the drop-down boxes, and they
didn't know that this is a feature that can be customized.

The default settings matter a lot for user experience; most users
rather assume the program's buggy than they can configure a specific
feature to work as they expect.

The new default is to only include the following entries at the
top and all the other available languages below (meaning "only show
often used languages" is off by default again):

- mul: multiple languages
- zxx: no linguistic content
- qaa: reserved for local use
- mis: uncoded languages
- eng: English

Additionally the system's default user interface language will be
included, too.

Implements #2716.
2020-06-03 15:51:04 +02:00
Moritz Bunkus
5e6331645d
GUI: mux: default list of languages to recognize in file names: all languages
The previous default list was derived from the list of spoken
languages sorted by native speakers.

Unfortunately this resulted in users being confused because their
particular language wasn't recognized in file names, and they didn't
know that this is a feature that can be customized.

The default settings matter a lot for user experience; most users
rather assume the program's buggy than they can configure a specific
feature to work as they expect.

The new default is to include all languages by default. Advanced users
can still remove languages if they encounter too many false positives.
2020-06-03 15:51:04 +02:00
Moritz Bunkus
a3589da3d1
translation: determine default UI language as ISO 639-2 language code
Required for #2716.
2020-06-03 15:51:04 +02:00
Moritz Bunkus
e32e665c2a
update list of ISO 639 languages 2020-06-02 20:03:59 +02:00
Moritz Bunkus
3e4f59d3ab
build system: add dev target for updating ISO 639 language list 2020-06-02 19:33:10 +02:00
Moritz Bunkus
673f06ec32
move ISO 639 language codes to separate file for auto-generation 2020-06-02 17:27:52 +02:00
David Bryant
b60c565bb5 WavPack handling: add support for version 5 files
Specifically:

• remove block checksums during input or extraction
• parse block during input for non-standard sample rate
• parse block during input for DSD sample rate
2020-05-31 16:17:30 -07:00
Moritz Bunkus
005224b68b
bump version number, set release code name 2020-05-30 14:11:27 +02:00
Moritz Bunkus
7c7606e760
NEWS: re-order entries for easier consumption 2020-05-30 14:07:49 +02:00
Dian Li
bedd76ac43
translations: update Chinese Simplified 2020-05-30 13:59:43 +02:00
Burak Yavuz
4f85e88fff
translations: update Turkish 2020-05-30 13:59:36 +02:00
Timofey Lisunov
34a8ae6bb0
translations: update Russian 2020-05-30 13:59:29 +02:00
TMTisFree
54841c632e
translations: update French 2020-05-30 13:59:21 +02:00
Antoni Bella Pérez
97f3631307
translations: update Catalan 2020-05-30 13:59:11 +02:00
Roberto Boriotti
868984ac54
translations: update Italian 2020-05-30 13:59:06 +02:00
Roberto Boriotti
0757608f2d
man page translations: update Italian 2020-05-30 13:59:01 +02:00
Burak Yavuz
016708face
translations: update Turkish 2020-05-22 12:59:26 +02:00
Timofey Lisunov
d0a9c1c4d1
translations: update Russian 2020-05-22 12:59:21 +02:00
TMTisFree
622ebacae6
translations: update French 2020-05-22 12:59:10 +02:00
Israel Lucas Torrijos
7576ec8a75
translations: update Spanish 2020-05-22 12:59:05 +02:00
Antoni Bella Pérez
c9d4517281
translations: update Catalan 2020-05-22 12:58:51 +02:00
Moritz Bunkus
5963c4539e
translations: update list of translatable strings; update German translation 2020-05-22 12:56:37 +02:00