Skip to content

Commit 3227b16

Browse files
committed
fixup
1 parent 041848a commit 3227b16

1 file changed

Lines changed: 19 additions & 17 deletions

File tree

src/player/play.cpp

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ enum class PlaybackRequest {
6868
NextFile,
6969
PrevFile,
7070
RestartFile,
71-
SeekForward,
72-
SeekBackward,
71+
Seek,
7372
};
7473

7574
struct marshal {
@@ -84,6 +83,7 @@ struct marshal {
8483
double current_drop_pct;
8584
PlaybackRequest request;
8685
double seek_delta;
86+
int64_t time_adjust_ns;
8787
};
8888

8989
static constexpr double kNcplayerSeekSeconds = 5.0;
@@ -128,6 +128,10 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts,
128128
struct timespec now;
129129
clock_gettime(CLOCK_MONOTONIC, &now);
130130
int64_t ns = timespec_to_ns(&now) - timespec_to_ns(start);
131+
ns += marsh->time_adjust_ns;
132+
if(ns < 0){
133+
ns = 0;
134+
}
131135
marsh->blitter = vopts->blitter;
132136
if(marsh->blitter == NCBLIT_DEFAULT){
133137
marsh->blitter = ncvisual_media_defblitter(nc, vopts->scaling);
@@ -247,23 +251,23 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts,
247251
marsh->show_fps = !marsh->show_fps;
248252
continue;
249253
}else if(keyp == NCKey::Up){
250-
marsh->request = PlaybackRequest::SeekBackward;
251-
marsh->seek_delta = kNcplayerSeekMinutes;
254+
marsh->request = PlaybackRequest::Seek;
255+
marsh->seek_delta = -kNcplayerSeekMinutes;
252256
ncplane_destroy(subp);
253257
return 2;
254258
}else if(keyp == NCKey::Down){
255-
marsh->request = PlaybackRequest::SeekForward;
259+
marsh->request = PlaybackRequest::Seek;
256260
marsh->seek_delta = kNcplayerSeekMinutes;
257261
ncplane_destroy(subp);
258262
return 2;
259263
}else if(keyp == NCKey::Right){
260-
marsh->request = PlaybackRequest::SeekForward;
264+
marsh->request = PlaybackRequest::Seek;
261265
marsh->seek_delta = kNcplayerSeekSeconds;
262266
ncplane_destroy(subp);
263267
return 2;
264268
}else if(keyp == NCKey::Left){
265-
marsh->request = PlaybackRequest::SeekBackward;
266-
marsh->seek_delta = kNcplayerSeekSeconds;
269+
marsh->request = PlaybackRequest::Seek;
270+
marsh->seek_delta = -kNcplayerSeekSeconds;
267271
ncplane_destroy(subp);
268272
return 2;
269273
}else if(keyp != 'q'){
@@ -595,6 +599,7 @@ int rendered_mode_player_inner(NotCurses& nc, int argc, char** argv,
595599
ncplane_erase(n);
596600

597601
PlaybackRequest pending_request = PlaybackRequest::None;
602+
int64_t seek_time_offset_ns = 0;
598603
while(true){
599604
bool restart_stream = false;
600605
if(ffmpeg_has_audio(*ncv)){
@@ -623,7 +628,8 @@ int rendered_mode_player_inner(NotCurses& nc, int argc, char** argv,
623628
.current_fps = 0.0,
624629
.current_drop_pct = 0.0,
625630
.request = PlaybackRequest::None,
626-
.seek_delta = kNcplayerSeekSeconds,
631+
.seek_delta = 0.0,
632+
.time_adjust_ns = seek_time_offset_ns,
627633
};
628634
r = ncv->stream(&vopts, timescale, perframe, &marsh);
629635
pending_request = marsh.request;
@@ -646,16 +652,11 @@ int rendered_mode_player_inner(NotCurses& nc, int argc, char** argv,
646652
free(stdn->get_userptr());
647653
stdn->set_userptr(nullptr);
648654
restart_stream = false;
649-
if(pending_request == PlaybackRequest::SeekForward ||
650-
pending_request == PlaybackRequest::SeekBackward){
655+
if(pending_request == PlaybackRequest::Seek){
651656
double delta = marsh.seek_delta;
652-
if(delta <= 0){
653-
delta = kNcplayerSeekSeconds;
654-
}
655-
if(pending_request == PlaybackRequest::SeekBackward){
656-
delta = -delta;
657-
}
658657
if(ncvisual_seek(*ncv, delta) == 0){
658+
int64_t delta_ns = (int64_t)(delta * (double)NANOSECS_IN_SEC);
659+
seek_time_offset_ns += delta_ns;
659660
pending_request = PlaybackRequest::None;
660661
restart_stream = true;
661662
}else{
@@ -709,6 +710,7 @@ int rendered_mode_player_inner(NotCurses& nc, int argc, char** argv,
709710

710711
if(loop && pending_request == PlaybackRequest::None){
711712
restart_stream = true;
713+
seek_time_offset_ns = 0;
712714
}
713715
}
714716

0 commit comments

Comments
 (0)