Commit Graph

2296 Commits

Author SHA1 Message Date
Moritz Bunkus
c3a9bba233 re-add ChangeLog with a note to read NEWS.md instead 2016-12-29 17:30:42 +01:00
Moritz Bunkus
d426b2d15f convert date-ordered ChangeLog to more user-centric NEWS.md file 2016-12-29 17:03:57 +01:00
Moritz Bunkus
2761c980b7 bump version number, set release code name, add release message 2016-12-27 23:00:47 +01:00
Moritz Bunkus
fed7b2f2b8 GUI: mux: treat null QStrings as empty when encoding to JSON
QStrings can be null in addition to being empty. A NULL string converts
to a null QVariant, which in turn converts to null JSON object. mkvmerge
expects strings, though.

One way to trigger this is:

• Disable the option "automatically set the file title from source
  files" in the GUI's preferences
• Add a file that contains a title
• Don't touch the "file title" input field
• Start multiplexing
2016-12-27 22:52:37 +01:00
Moritz Bunkus
9470fd423b ChangeLog: fix spelling mistake 2016-12-27 12:48:30 +01:00
Moritz Bunkus
16987b5bc2 bump version number, set release code name, add release message 2016-12-27 12:19:42 +01:00
Moritz Bunkus
f82dee6ba0 ChangeLog: move deprecation warning to the top 2016-12-27 12:17:25 +01:00
Moritz Bunkus
9ddf2595b2 mkvmerge: add identification info about multiplexed tracks
This adds a new track property in JSON/verbose identification mode
called "multiplexed_tracks". It's an array of track IDs that describe
which of the tracks mkvmerge reports as separate ones were originally
part of the same source track (e.g. TrueHD+AC-3 in a single track in
MPEG transport streams).

Implements #1835.
2016-12-26 20:31:49 +01:00
Moritz Bunkus
b7d302f19f AUTHORS, ChangeLog: add information about APE(v2) tags 2016-12-23 21:23:28 +01:00
Moritz Bunkus
d6d9f4007e extract: support --gui-mode for progress reporting 2016-12-22 18:19:00 +01:00
Moritz Bunkus
5237ee063b mkvmerge: assign track numbers for tracks in --track-order first
When the user specifies tracks with "--track-order a,b,c…", she expects
track a to be assigned track number 1, b to be assigned track number 2
and 3 for track c.

The old code did not guarantee this. Instead it might assign track ID 1
to a track not listed in "--track-order".

Fixes the second part of #1832.
2016-12-22 15:20:10 +01:00
Moritz Bunkus
779f2d5cac Matroska reader: only set title if title was present in source file
Otherwise a title set in a later file won't be used. Fixes part of #1832.
2016-12-22 15:12:00 +01:00
Moritz Bunkus
f35ba20dc3 ChangeLog: add warning about deprecated features 2016-12-21 22:14:20 +01:00
Moritz Bunkus
7dac2fe1a7 all: support for JSON-formatted option files
The JSON parser will be used for an option file when the file name ends
in ".json". Such an option file must consist of a single JSON array
containing solely JSON strings.
2016-12-19 21:08:00 +01:00
Moritz Bunkus
5097f0da6c GUIs: require Qt v5.3.0 or newer & remove compatibility code for older versions 2016-12-17 12:41:24 +01:00
Moritz Bunkus
6d655cc051 GUI: header editor, job output: add "save all/close all" menu entries 2016-12-16 15:28:46 +01:00
Moritz Bunkus
fee730737e GUI: chapters: add "close all"/"save all" menu entries 2016-12-13 23:05:48 +01:00
Moritz Bunkus
c827f9d0b6 build system: require more C++14 features
The source will start using the following features from the C++14
standard:

• the "std::make_unique()" Standard Library function
• digit separators
• binary literals
• generic lambdas

gcc's v4.9.x and clang's v3.4 are the oldest releases to support all of
them.
2016-12-13 22:37:14 +01:00
Moritz Bunkus
5c1fe43792 MPEG TS/MPLS: support reading tracks from external M2TS files listed in MPLS
MPLS playlists can contain sub-paths that reference subtitle tracks in
other files than the main audio/video tracks (mostly HDMV TextST
subtitles, it seems). Support for reading the tracks from those files
has been added.
2016-12-12 20:27:46 +01:00
Moritz Bunkus
d302897415 GUI: don't use lock file for instance communication socket
The lock file has proven to be a source of problems time and again on
Windows, see e.g. #1805. In most instances a stale lock file was still
present though the process it referred to wasn't running anymore. Qt is
supposed to clean up such stale lock files automatically, but that
didn't work reliably. The result from the user's POV was that the GUI
simply didn't start as neither the prior instance was still running nor
was the new one showing its UI.

Therefore we just skip trying to lock that file. Instead the new
instance will simply try to connect to the communication socket. If that
connection succeeds, it can be reasonably sure another instance is
running. If it fails, though, the GUI simply removes any lingering
socket file and tries to set it up again. Even if the removal &
subsequent setup fails, the GUI should still come up as a second
instance.
2016-12-08 21:30:03 +01:00
Moritz Bunkus
f19cf2420e teletext: handle data unit ID 0x02, too; discard rows for pages from non-current magazines 2016-12-08 20:31:45 +01:00
Moritz Bunkus
8279c32755 ChangeLog: update 2016-12-05 17:30:31 +01:00
Moritz Bunkus
f26fc024a4 MPEG TS: look for M2TS and CLPI files in correct dirs when adding MPLS from BACKUP dir 2016-12-03 20:12:14 +01:00
Moritz Bunkus
a7d3d257a9 ChangeLog: update 2016-12-03 14:46:07 +01:00
Moritz Bunkus
3f8d7feab8 GUI: mux: add "copy title to destination file name" option 2016-12-03 12:58:19 +01:00
Moritz Bunkus
449e2bf82c GUI: mux: cache file identification results
The GUI will now cache file identification results on disc. When the
same file is identified a second time the cached results are used
instead leading to a huge speed gain, especially when scanning Blu-ray
playlists multiple times.

Both positive and negative results are cached.

Cache results are invalidated whenever one of the following conditions
is met:

• if the source file's modification time stamp differs from when the
  result was cached
• if the source file's size in bytes differs from when the result was
  cached
• if the current version of MKVToolNix GUI differs from the version used
  to write the cached result
2016-12-03 12:24:17 +01:00
Moritz Bunkus
02b655f299 GUI: mux: scan MPLS playlists when user adds a *.bdmv file 2016-12-02 20:48:28 +01:00
Moritz Bunkus
e4ce3175da MPEG TS: signal misdetection properly for files smaller than 4 bytes 2016-12-02 16:16:40 +01:00
Moritz Bunkus
1eaed22b95 GUI: mux: display unchecked attached files as disabled
Second part of the implementation of #1819.
2016-12-02 16:13:42 +01:00
Moritz Bunkus
70c9fb6c66 fix ChangeLog & make it a bit clearer 2016-12-02 16:04:14 +01:00
Moritz Bunkus
0236d614fa GUI: mux: display unchecked tracks as disabled
Implements #1819.
2016-12-02 10:17:47 +01:00
Moritz Bunkus
ed00e18877 MPEG TS reader: update TextST CodecPrivate format to what current MakeMKV uses
At the end of 2014 Mike from MakeMKV and me where debating how to store
TextST in Matroska. MakeMKV was already able to do that and used this as
the format for CodecPrivate:

• One byte: character set used according to "Blu-ray Disc Read-Only
  Format: table 5-22: Character code"
• n bytes: the "dialog style segment"
• 2 bytes: number of frames in the file

This information partially superfluous, partially harmful. We decided to
only allow UTF-8 in Matroska (we only had Blu-rays that used UTF-8
anyway; this gets rid of the first byte). We also decided that having a
frame counter served no purpose (the format doesn't need it, nor should
players require such information up front), and it made splitting &
joining operations harder than they have to be.

Therefore current versions of MakeMKV only include the "dialog style
segment" in CodecPrivate, and that's what mkvmerge will do, too.

The Matroska reader was already producing the new format.
2016-11-30 20:08:50 +01:00
Moritz Bunkus
01b1f6de5a bump version number, set release code name, add release message 2016-11-29 19:48:40 +01:00
Moritz Bunkus
a213cba968 mkvmerge, mkvextract: add support for HDMV TextST subtitles 2016-11-28 16:41:43 +01:00
Moritz Bunkus
a259e5d308 VobSub extraction: add "langidx" header line if missing
Implements #1810.
2016-11-20 19:33:43 +01:00
Moritz Bunkus
99649d47b7 GUI: mux: add column for source file's directory in track list
Implements #1809.
2016-11-14 22:07:24 +01:00
Moritz Bunkus
a037109a7c GUI: mux: add "select all tracks of selected files" context menu action
Inspired by #1809.
2016-11-14 13:49:35 +01:00
Moritz Bunkus
8045bd2191 GUI: watch jobs: disable "acknowledge" button if no unacknowledged exist
Fixes #1802.
2016-11-07 22:57:26 +01:00
Moritz Bunkus
4faa000b84 ChangeLog updatee 2016-11-01 23:03:48 +01:00
Moritz Bunkus
91b8baf53d ChangeLog update 2016-10-23 23:41:54 +02:00
Moritz Bunkus
06c7ebc13f Bump version number, add release message, set release code name 2016-10-16 16:49:00 +02:00
Moritz Bunkus
7a5732f0d8 mkvextract: VobSub: store container level duration in SPU bitstream
The bitstream duration will only be updated if it differs at least
1ms. This restriction is in place in order not to modify the bitstream
data just because Matroska's default resolution for timestamps is only
1ms.

This is the second and last part of the fix for #1771.
2016-10-16 16:34:18 +02:00
Moritz Bunkus
8c17034ec4 VobSub packetizer: store container level duration in SPU bitstream
The bitstream duration will only be updated if it differs at least
1ms. This restriction is in place in order not to modify the bitstream
data just because Matroska's default resolution for timestamps is only
1ms.

Fixes #1771.
2016-10-16 16:19:13 +02:00
Moritz Bunkus
80938fe0ce h.264: include all SPS/PPS NALUs before key frames after changed SPS/PPS content
In some h.264 bitstreams the SPS and/or PPS settings change, meaning the
bitstream contains SPS/PPS NALUs with an ID that was encountered before,
but with different content. The specs say that the newly encountered
SPS/PPS settings are to be used from that point on.

So far this wasn't properly handled by mkvmerge. It would only include
the changed SPS/PPS NALUs at the point where the change
occurred. However, an application seeking to a point after such a change
would have no knowledge of the change and use the SPS/PPS from the AVCC
stored in CodecPrivate. It would therefore try to decode the pictures
with the wrong settings leading to image corruption and worse.

With this change mkvmerge will include all currently active SPS and PPS
NALUs in front of every key frame (every frame marked as "key" in
Matroska, that is) once it encounters at least one SPS or PPS NALU with
changed content.

Fixes #1711.
2016-10-15 12:20:27 +02:00
Moritz Bunkus
b5654132b3 all tools: add support for "field order" video track header element 2016-10-12 22:53:22 +02:00
Moritz Bunkus
27c15b8414 ChangeLog, AUTHORS: add James Almer 2016-10-12 22:52:44 +02:00
Moritz Bunkus
2cac968f95 MPEG TS: remove alignment bytes for Blu-ray PCM audio with odd channel count
On Blu-rays PCM audio with an odd number of channels will still contain
empty bytes for an extra alignment channel (e.g. with 3 channels at 24
bits/sample the source actually contains 3+1channels * 24bits/channel /
8bits/byte = 4 * 3bytes = 12 bytes.

That extra "channel" is located after all the others and only contains 0
bytes.

mkvmerge will now simply remove these extra bytes. Otherwise players see
and use more data than the timestamps and track parameters imply causing
both noise artifacts as well as slowed playback.
2016-10-12 20:43:53 +02:00
Moritz Bunkus
da9cd9e15d MPEG TS: don't detect MPEG TS if first bytes equal h.264/h.265 marker 2016-10-10 18:19:21 +02:00
Moritz Bunkus
99803c9ff7 WAV reader: use track properties from bitstream for AC-3 and DTS 2016-10-09 21:34:22 +02:00
Moritz Bunkus
b155c85aaf WAV reader: require 5 consecutive DTS headers during byte swap/14-in-16 detection
The original code tried all four possible combinations of byte swapping
yes/no and 14-in-16 yes/no and aborted as soon as a single DTS header
was found. This can be a false positive, though, and with one test file
provided by a user this has indeed been the case.

The new code does the same detection but requires five consecutive DTS
headers to be found before the detection is deemed to be successful.
2016-10-09 21:24:45 +02:00