All NALUs must be converted to RBSP before they're parsed. Otherwise the
wrong values will be used resulting in e.g. wrong picture order and
therefore in wrong timestamps.
Fixes#918 and #1548.
The current MP4 specs (ISO/IEC 14496-15:2015) say that open GOP random
access points aren't normal sync entries anymore. Therefore such frames
aren't present in the normal key frame table anymore. Instead sample
grouping information of type "rap " (random access point) is used for
signalling that decoding can start from those frames, too.
Fixes#1543.
The last frame of a track doesn't need a duration if its rounded
duration equals the rounded default duration. On the other hand the last
frame must not be put into an existing lace if those durations are
different.
Fixes#1545.
The function Util::setToolTip() HTML-escapes the tool tip if it doesn't
start with a <. Otherwise it assumes the caller has taken care of
escaping. So far not all callers did, though; some were inserting
non-escaped translated strings into formatting strings like
"<p>%1</p><p>%2</p>" resulting in invalid HTML and cut-off tool tips
during display.
When appending m_last_timecode is already offset by
m_first_timecode. Therefore subtracting it once more during the progress
calculation will result in negative numbers if m_first_timecode is
non-zero – which is the case when appending files created by splitting
with linking enabled, for example.
This was a regression introduced in c494170. In that commit a check was
introduced to determine whether or not the file had actually to be
modified. This check was wrong for replacing tags.
Certain SBR AAC tracks only have two-bytes long codec-specific
configuration data even though SBR normally requires five-bytes long
data. mkvmerge contains a heuristic for such cases that treats sampling
frequencies of <= 24000 Hz as another indicator for SBR.
However, this breaks in cases of low sampling frequencies like 8000 Hz
which are almost never SBR. This results in the wrong profile being
detected preventing mkvmerge from appending such tracks to track for
which the profile was detected correctly.
This change limits the heuristic to the two most common sampling
frequencies used for such broken SBR AAC files: 22050 Hz and 24000 Hz.
Fixes#1540.
Several container formats provide an internal ID of some kind. mkvmerge
already output that ID for some of the container formats it supports
albeit under different property names:
- Matroska: "number"
- MPEG program streams: "stream_id" and "sub_stream_id", encoded as a
hexadecimal string instead of integers
- MPEG transport streams: "ts_pid"
With this commit the support is extended to other container formats. The
MPEG program and transport stream reader modules output their IDs as the
property "number" (in addition to the older identifiers) in order to
have a consistent naming scheme which makes using the output easier for
other applications.
The changes are:
- QuickTime/MP4: the track ID from the 'tkhd' atom
- MPEG program stream: the sub-stream ID in the upper 32 bits and the
stream ID in the lower 32 bits
- MPEG transport stream: the program ID
- Ogg/OGM: the stream's serial number field
- RealMedia: the track ID
Implements #1541.
In this case the ampersands aren't supposed to indicate a keyboard
shortcut but are supposed to be displayed. Therefore a single & is not
enough; they have to be doubled.