summaryrefslogtreecommitdiff
path: root/src/findcut.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/findcut.c')
-rw-r--r--src/findcut.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/findcut.c b/src/findcut.c
index b5b0976..816b27b 100644
--- a/src/findcut.c
+++ b/src/findcut.c
@@ -29,12 +29,12 @@ main(int argc, char **argv)
struct video_decode *cut_vd;
struct video_frame *cur_frame = NULL, *cut_frame = NULL;
int ret, ch;
- int diff_flag = 0, time_flag = 0, range_flag = 0;
+ int diff_flag = 0, time_flag = 0, range_flag = 0, last_flag = 0;
int64_t timestamp = 0;
int64_t threshold = 10;
double diff = 0.0;
- while ((ch = getopt(argc, argv, "dtThr")) != -1) {
+ while ((ch = getopt(argc, argv, "dtThrl")) != -1) {
switch (ch) {
case 'd':
diff_flag = 1; /* print diff of every frame */
@@ -48,6 +48,9 @@ main(int argc, char **argv)
case 'r':
range_flag = 1;
break;
+ case 'l':
+ last_flag = 1;
+ break;
case 'h':
default:
usage();
@@ -71,14 +74,16 @@ main(int argc, char **argv)
if (ret < 0)
return -ret;
+ int64_t last_time=0;
for (int i = 0; video_decode_get_frame(video_vd, &cur_frame) > 0; ++i) {
diff = frame_diff(cut_frame, cur_frame);
if (diff <= threshold || diff_flag) {
+ int64_t time = last_flag ? last_time : cur_frame->dts;
if (time_flag)
- printf("%" PRId64, cur_frame->dts);
+ printf("%" PRId64, time);
else
- print_time(cur_frame->dts);
+ print_time(time);
if (range_flag) {
printf(" ");
@@ -92,6 +97,7 @@ main(int argc, char **argv)
printf(" %f\n", diff);
fflush(stdout);
}
+ last_time=cur_frame->dts;
}
video_decode_free_frame(&cur_frame);