MakeMKV includes such a tag in the track statistics tags that conveys
two pieces of information:
1. that the source was a Blu-ray disc (the first two digits being `00`)
2. what the track's ID on the MPEG TS level was (the last four digits,
in hexdecimal)
mkvmerge will add that tag when reading an MPLS.
When reading a Matroska file mkvmerge will keep the `SOURCE_ID` tag if
it exists.
Implements #2774.
The Blu-ray specs state that `out_time` is the end time of the last
video presentation unit from the corresponding play item. Therefore a
packet with `timestamp == out_time` must not be copied anymore.
Part of the fix of #2789.
MPLS play items contain timestamp restrictions (`in_time` and
`out_time`) that determine which part of the referenced file must be
copied. So far only the first play item's restrictions were
honored. For all other play items in an MPLS playlist the whole files
were copied.
mkvmerge's structure already read those restrictions and passed them
on to all the readers created for the individual files. However, those
readers did not act on them.
Now the restrictions are set before the file headers are read, and the
function parsing those headers takes them into account.
Fixes#2789.
One list less was parsed then was actually present in the hevcC,
causing e.g. no picture parameter sets to be available to the ES
parser. Therefore no frames were output.
Fixes#2782.
Using the three-argument variant of the `connect()` call means that Qt
doesn't have an object to track; it just calls a functor. If that
functor uses a pointer to an object, then removing said object means
that the functor will still be called and access a pointer to invalid
memory.
Using the four-argument variant instead allows Qt to automatically
remove the connection when the object in question is removed.
This happens in the case that a multiplexer tab is opened (e.g. on
program startup) closed, and later the preferences are changed.
Fixes#2785.