Adding additional locks when adding/changing audio data. Reducing FrameMapper to a single frame at a time (increase seek speed and decrease crashes). Fixing crash on Time keyframes where it would sometimes calculate an invalid frame number.

This commit is contained in:
Jonathan Thomas
2017-07-19 16:05:07 -05:00
parent 4e3dd937e2
commit c30dbb90d8
4 changed files with 47 additions and 34 deletions

View File

@@ -57,7 +57,7 @@ void Clip::init_settings()
rotation = Keyframe(0.0);
// Init time & volume
time = Keyframe(0.0);
time = Keyframe(1.0);
volume = Keyframe(1.0);
// Init audio waveform color
@@ -277,7 +277,7 @@ tr1::shared_ptr<Frame> Clip::GetFrame(long int requested_frame) throw(ReaderClos
// Is a time map detected
long int new_frame_number = requested_frame;
if (time.Values.size() > 1)
new_frame_number = time.GetLong(requested_frame);
new_frame_number = adjust_frame_number_minimum(time.GetLong(requested_frame));
// Now that we have re-mapped what frame number is needed, go and get the frame pointer
tr1::shared_ptr<Frame> original_frame = GetOrCreateFrame(new_frame_number);
@@ -365,7 +365,7 @@ tr1::shared_ptr<Frame> Clip::get_time_mapped_frame(tr1::shared_ptr<Frame> frame,
resampler = new AudioResampler();
// Get new frame number
int new_frame_number = round(time.GetValue(frame_number));
int new_frame_number = adjust_frame_number_minimum(round(time.GetValue(frame_number)));
// Create a new frame
int samples_in_frame = Frame::GetSamplesPerFrame(new_frame_number, reader->info.fps, reader->info.sample_rate, frame->GetAudioChannelsCount());