mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-28 03:13:51 +02:00
Support rotation metadata in Matroska muxer
This commit is contained in:
@@ -99,6 +99,7 @@ export enum EBMLId {
|
||||
Primaries = 0x55bb,
|
||||
Range = 0x55b9,
|
||||
Projection = 0x7670,
|
||||
ProjectionType = 0x7671,
|
||||
ProjectionPoseRoll = 0x7675,
|
||||
}
|
||||
|
||||
|
||||
@@ -230,6 +230,8 @@ export class MatroskaMuxer extends Muxer {
|
||||
}
|
||||
|
||||
private videoSpecificTrackInfo(trackData: MatroskaVideoTrackData) {
|
||||
const { frameRate, rotation } = trackData.track.metadata;
|
||||
|
||||
const elements: EBMLElement['data'] = [
|
||||
(trackData.info.decoderConfig.description
|
||||
? {
|
||||
@@ -237,10 +239,10 @@ export class MatroskaMuxer extends Muxer {
|
||||
data: toUint8Array(trackData.info.decoderConfig.description),
|
||||
}
|
||||
: null),
|
||||
(trackData.track.metadata.frameRate
|
||||
(frameRate
|
||||
? {
|
||||
id: EBMLId.DefaultDuration,
|
||||
data: 1e9 / trackData.track.metadata.frameRate,
|
||||
data: 1e9 / frameRate,
|
||||
}
|
||||
: null),
|
||||
];
|
||||
@@ -272,6 +274,21 @@ export class MatroskaMuxer extends Muxer {
|
||||
],
|
||||
}
|
||||
: null),
|
||||
(typeof rotation === 'number' && rotation !== 0
|
||||
? {
|
||||
id: EBMLId.Projection,
|
||||
data: [
|
||||
{
|
||||
id: EBMLId.ProjectionType,
|
||||
data: 0, // rectangular
|
||||
},
|
||||
{
|
||||
id: EBMLId.ProjectionPoseRoll,
|
||||
data: (rotation + 180) % 360 - 180, // [0, 270] -> [-180, 90]
|
||||
},
|
||||
],
|
||||
}
|
||||
: null),
|
||||
] };
|
||||
|
||||
elements.push(videoElement);
|
||||
|
||||
Reference in New Issue
Block a user