mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-27 02:43:48 +02:00
Merge pull request #273 from alakhpc/alakhpc/defer-defaultduration
fix(matroska): defer DefaultDuration calculation until TimestampScale is known
This commit is contained in:
@@ -193,6 +193,7 @@ type InternalTrack = {
|
||||
codecId: string | null;
|
||||
codecPrivate: Uint8Array | null;
|
||||
defaultDuration: number | null;
|
||||
defaultDurationNs: number | null;
|
||||
name: string | null;
|
||||
languageCode: string;
|
||||
decodingInstructions: DecodingInstruction[];
|
||||
@@ -536,6 +537,13 @@ export class MatroskaDemuxer extends Demuxer {
|
||||
this.currentSegment.timestampFactor = 1e9 / 1e6;
|
||||
}
|
||||
|
||||
// Compute default duration for all tracks now that we have the timestamp factor
|
||||
for (const track of this.currentSegment.tracks) {
|
||||
if (track.defaultDurationNs !== null) {
|
||||
track.defaultDuration = (this.currentSegment.timestampFactor * track.defaultDurationNs) / 1e9;
|
||||
}
|
||||
}
|
||||
|
||||
// Put default tracks first
|
||||
this.currentSegment.tracks.sort((a, b) => Number(b.disposition.default) - Number(a.disposition.default));
|
||||
|
||||
@@ -996,6 +1004,7 @@ export class MatroskaDemuxer extends Demuxer {
|
||||
codecId: null,
|
||||
codecPrivate: null,
|
||||
defaultDuration: null,
|
||||
defaultDurationNs: null,
|
||||
name: null,
|
||||
languageCode: UNDETERMINED_LANGUAGE,
|
||||
decodingInstructions: [],
|
||||
@@ -1203,9 +1212,7 @@ export class MatroskaDemuxer extends Demuxer {
|
||||
|
||||
case EBMLId.DefaultDuration: {
|
||||
if (!this.currentTrack) break;
|
||||
|
||||
this.currentTrack.defaultDuration
|
||||
= this.currentTrack.segment.timestampFactor * readUnsignedInt(slice, size) / 1e9;
|
||||
this.currentTrack.defaultDurationNs = readUnsignedInt(slice, size);
|
||||
}; break;
|
||||
|
||||
case EBMLId.Name: {
|
||||
|
||||
Reference in New Issue
Block a user