Many improvements for smooth audio playback when 'time' keyframes are used for time remapping.

- Added new Frame::ReverseAudio() helper method - for time keyframe support playing backwards audio
- Fixed math rounding error on time keyframe Resampler, to use the rounded source samples value
- Removed some unused args and Frame audio methods
- Reset FrameMapper resample context when non-adjacent frames are requested
- Correctly reverse Frame audio if a time keyframe is present, and reversing audio
- Rewrite Keyframe::IsIncreasing() function, to give accurate direction of time keyframes at any index (special logic to support first and last indexes)
- Fixed Keyframe unit tests - since logic has changed a bit
- Improved time mapping unit tests
- Replace many c-style casts with static_cast
- Added new sine.wav test file
This commit is contained in:
Jonathan Thomas
2023-03-10 01:15:14 -06:00
parent d104664da3
commit 09ce05bbf2
15 changed files with 144 additions and 181 deletions

View File

@@ -729,7 +729,7 @@ void FFmpegReader::UpdateAudioInfo() {
info.height = 480;
// Use timeline to set correct width & height (if any)
Clip *parent = (Clip *) ParentClip();
Clip *parent = static_cast<Clip *>(ParentClip());
if (parent) {
if (parent->ParentTimeline()) {
// Set max width/height based on parent clip's timeline (if attached to a timeline)
@@ -1403,7 +1403,7 @@ void FFmpegReader::ProcessVideoPacket(int64_t requested_frame) {
int max_width = info.width;
int max_height = info.height;
Clip *parent = (Clip *) ParentClip();
Clip *parent = static_cast<Clip *>(ParentClip());
if (parent) {
if (parent->ParentTimeline()) {
// Set max width/height based on parent clip's timeline (if attached to a timeline)