#include "player.h"
#include "clip_list.h"
-#include "context.h"
+#include "shared/context.h"
#include "defs.h"
#include "shared/ffmpeg_raii.h"
#include "frame_on_disk.h"
-#include "httpd.h"
+#include "shared/httpd.h"
#include "jpeg_frame_view.h"
#include "shared/mux.h"
#include "shared/timebase.h"
double speed = 0.5;
int64_t in_pts_start_next_clip = -1;
+ steady_clock::time_point next_frame_start;
for (int frameno = 0; ; ++frameno) { // Ends when the clip ends.
double out_pts = out_pts_origin + TIMEBASE * frameno / output_framerate;
- steady_clock::time_point next_frame_start =
+ next_frame_start =
origin + microseconds(lrint((out_pts - out_pts_origin) * 1e6 / TIMEBASE));
int64_t in_pts = lrint(in_pts_origin + TIMEBASE * frameno * speed / output_framerate);
pts = lrint(out_pts);
// (ie., move less than 1% of an _output_ frame), do so.
// TODO: Snap secondary (fade-to) clips in the same fashion.
bool snapped = false;
- for (int64_t snap_pts : { frame_lower.pts, frame_upper.pts }) {
- double snap_pts_as_frameno = (snap_pts - in_pts_origin) * output_framerate / TIMEBASE / speed;
+ for (FrameOnDisk snap_frame : { frame_lower, frame_upper }) {
+ double snap_pts_as_frameno = (snap_frame.pts - in_pts_origin) * output_framerate / TIMEBASE / speed;
if (fabs(snap_pts_as_frameno - frameno) < 0.01) {
- FrameOnDisk snap_frame = frame_lower;
- snap_frame.pts = snap_pts;
auto display_func = [this, primary_stream_idx, snap_frame, secondary_frame, fade_alpha]{
destination->setFrame(primary_stream_idx, snap_frame, secondary_frame, fade_alpha);
};
snap_frame, secondary_frame, fade_alpha);
}
}
- in_pts_origin += snap_pts - in_pts;
+ in_pts_origin += snap_frame.pts - in_pts;
snapped = true;
break;
}
got_next_clip = false;
// Start the next clip from the point where the fade went out.
- origin = steady_clock::now();
+ origin = next_frame_start;
in_pts_origin = in_pts_start_next_clip;
goto got_clip;
}