( state: VideoTimelineState, displayTime: number, )
| 481 | } |
| 482 | |
| 483 | export function mapTimelineDisplayTimeToSourceTime( |
| 484 | state: VideoTimelineState, |
| 485 | displayTime: number, |
| 486 | ) { |
| 487 | const duration = normalizeDuration(state.duration); |
| 488 | const displayDuration = getTimelineDisplayDuration({ ...state, duration }); |
| 489 | if (duration <= 0 || displayDuration <= 0 || !isFiniteNumber(displayTime)) { |
| 490 | return 0; |
| 491 | } |
| 492 | |
| 493 | const time = clampEditTime(displayTime, 0, displayDuration); |
| 494 | let sourceCursor = 0; |
| 495 | let displayCursor = 0; |
| 496 | for (const range of getDisplayDeletedRanges({ ...state, duration })) { |
| 497 | const keptDuration = Math.max(0, range.start - sourceCursor); |
| 498 | const displayEnd = displayCursor + keptDuration; |
| 499 | if (time <= displayEnd + EPSILON) { |
| 500 | return roundEditTime( |
| 501 | clampEditTime( |
| 502 | sourceCursor + time - displayCursor, |
| 503 | sourceCursor, |
| 504 | range.start, |
| 505 | ), |
| 506 | ); |
| 507 | } |
| 508 | sourceCursor = range.end; |
| 509 | displayCursor = displayEnd; |
| 510 | } |
| 511 | |
| 512 | return roundEditTime( |
| 513 | clampEditTime(sourceCursor + time - displayCursor, sourceCursor, duration), |
| 514 | ); |
| 515 | } |
| 516 | |
| 517 | export function getTimelineDisplaySegments( |
| 518 | state: VideoTimelineState, |
no test coverage detected