diff --git a/src/isobmff/isobmff-demuxer.ts b/src/isobmff/isobmff-demuxer.ts index d52e160..02be3fb 100644 --- a/src/isobmff/isobmff-demuxer.ts +++ b/src/isobmff/isobmff-demuxer.ts @@ -3177,22 +3177,16 @@ const offsetFragmentTrackDataByTimestamp = (trackData: FragmentTrackData, timest /** Extracts the rotation component from a transformation matrix, in degrees. */ const extractRotationFromMatrix = (matrix: TransformationMatrix) => { - const [m11, , , m21] = matrix; + const [a, b] = matrix; // (1, 0) projects onto (a, b), so that's all we need - const scaleX = Math.hypot(m11, m21); + const radians = Math.atan2(b, a); - const cosTheta = m11 / scaleX; - const sinTheta = m21 / scaleX; - - // Invert the rotation because matrices are post-multiplied in ISOBMFF - const result = -Math.atan2(sinTheta, cosTheta) * (180 / Math.PI); - - if (!Number.isFinite(result)) { + if (!Number.isFinite(radians)) { // Can happen if the entire matrix is 0, for example return 0; } - return result; + return radians * (180 / Math.PI); }; const sampleTableIsEmpty = (sampleTable: SampleTable) => {