summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/advtime.c32
-rw-r--r--src/video_decode.c8
-rw-r--r--src/video_decode.h12
3 files changed, 40 insertions, 12 deletions
diff --git a/src/advtime.c b/src/advtime.c
index 265d18c..4c329da 100644
--- a/src/advtime.c
+++ b/src/advtime.c
@@ -4,6 +4,8 @@
#include <stdint.h>
#include <unistd.h>
+#include <libavutil/rational.h>
+
#include "video_decode.h"
#include "util.h"
@@ -97,20 +99,42 @@ main(int argc, char **argv)
if (ret < 0)
return -ret;
+ printf("fps: %d\n", vd->fmt_ctx->fps_probe_size);
+ printf("streams: %d\n", vd->fmt_ctx->nb_streams);
+ printf("filename: %s\n", vd->fmt_ctx->filename);
+ printf("streams: %d\n", vd->fmt_ctx->streams[0]->duration);
+ printf("duration: %d\n", vd->fmt_ctx->streams[1]->duration);
+ printf("nb_frames: %d\n", vd->fmt_ctx->streams[0]->nb_frames);
+ printf("avg frame rate: %f\n",
+ av_q2d(vd->fmt_ctx->streams[0]->avg_frame_rate));
+ printf("real frame rate: %f\n",
+ av_q2d(vd->fmt_ctx->streams[0]->r_frame_rate));
+ printf("first: %ji\n", vd->fmt_ctx->streams[0]->first_dts);
+ printf("cur: %ji\n", vd->fmt_ctx->streams[0]->cur_dts);
+ printf("reference: %ji\n", vd->fmt_ctx->streams[0]->reference_dts);
+
for (int i = 0; video_decode_get_frame(vd, &frame_b) > 0; ++i) {
- printf("%d\t", i);
+// printf("first: %ji\t", vd->fmt_ctx->streams[0]->first_dts);
+// printf("cur: %ji\t", vd->fmt_ctx->streams[0]->cur_dts);
+// printf("reference: %ji\n", vd->fmt_ctx->streams[0]->reference_dts);
+
+
+// printf("%d\t", i);
if (average_flag == 1)
printf("%f", frame_average(frame_a));
if (average_flag == 1 && diff_flag == 1)
printf("\t");
- if (diff_flag == 1)
- printf("%f", diff = frame_diff(frame_a, frame_b));
+ if (diff_flag == 1) {
+ diff = frame_diff(frame_a, frame_b);
+// printf("%f", diff);
+ }
if (diff > 40.0) {
+ printf("cut: %d\n", i);
snprintf(filename, BUFSIZ, "img/%04i.pgm", i);
frame_mix(frame_a, frame_b);
if (pgm_save(frame_a->data, frame_a->stride,
@@ -119,7 +143,7 @@ main(int argc, char **argv)
exit(EXIT_FAILURE);
}
- printf("\n");
+// printf("\n");
video_decode_free_frame(&frame_a);
frame_a = frame_b;
}
diff --git a/src/video_decode.c b/src/video_decode.c
index b3c8e4d..993fd14 100644
--- a/src/video_decode.c
+++ b/src/video_decode.c
@@ -10,14 +10,6 @@
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
-
-struct video_decode {
- AVFormatContext *fmt_ctx;
- AVCodecContext *codec_ctx;
- AVCodec *codec;
- int stream;
-};
-
struct video_frame_priv {
struct video_frame base;
AVFrame *frame;
diff --git a/src/video_decode.h b/src/video_decode.h
index 2505b8b..9da7f63 100644
--- a/src/video_decode.h
+++ b/src/video_decode.h
@@ -2,6 +2,11 @@
#define _VIDEO_DECODE_H_
#include <stdint.h>
+#include <libavutil/avutil.h>
+#include <libavutil/error.h>
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+#include <libswscale/swscale.h>
struct video_decode;
struct video_frame {
@@ -9,6 +14,13 @@ struct video_frame {
int width, height, stride;
};
+struct video_decode {
+ AVFormatContext *fmt_ctx;
+ AVCodecContext *codec_ctx;
+ AVCodec *codec;
+ int stream;
+};
+
int
video_decode_init(struct video_decode **vd, char *file, int64_t timestamp);