[FFmpeg-cvslog] vf_blackframe: port missing features from libmpcodecs blackframe

Stefano Sabatini git at videolan.org
Thu Jul 21 13:11:10 CEST 2011


ffmpeg | branch: master | Stefano Sabatini <stefano.sabatini-lala at poste.it> | Sun Jul 17 17:05:14 2011 +0200| [c76974524a622745f3e8e105eb84793ccdb87d0b] | committer: Stefano Sabatini

vf_blackframe: port missing features from libmpcodecs blackframe

Use and show picref->video->pict_type and key_frame information.
The pict_type and key_frame information was not available at the time
of the port.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c76974524a622745f3e8e105eb84793ccdb87d0b
---

 libavfilter/avfilter.h      |    2 +-
 libavfilter/vf_blackframe.c |   11 +++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index d89ac26..05cac39 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -30,7 +30,7 @@
 
 #define LIBAVFILTER_VERSION_MAJOR  2
 #define LIBAVFILTER_VERSION_MINOR 27
-#define LIBAVFILTER_VERSION_MICRO  0
+#define LIBAVFILTER_VERSION_MICRO  1
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                LIBAVFILTER_VERSION_MINOR, \
diff --git a/libavfilter/vf_blackframe.c b/libavfilter/vf_blackframe.c
index 41b4a92..843e827 100644
--- a/libavfilter/vf_blackframe.c
+++ b/libavfilter/vf_blackframe.c
@@ -34,6 +34,7 @@ typedef struct {
     unsigned int bthresh; ///< black threshold
     unsigned int frame;   ///< frame number
     unsigned int nblack;  ///< number of black pixels counted so far
+    unsigned int last_keyframe; ///< frame number of the last received key-frame
 } BlackFrameContext;
 
 static int query_formats(AVFilterContext *ctx)
@@ -56,6 +57,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
     blackframe->bthresh = 32;
     blackframe->nblack = 0;
     blackframe->frame = 0;
+    blackframe->last_keyframe = 0;
 
     if (args)
         sscanf(args, "%u:%u", &blackframe->bamount, &blackframe->bthresh);
@@ -95,11 +97,16 @@ static void end_frame(AVFilterLink *inlink)
     AVFilterBufferRef *picref = inlink->cur_buf;
     int pblack = 0;
 
+    if (picref->video->key_frame)
+        blackframe->last_keyframe = blackframe->frame;
+
     pblack = blackframe->nblack * 100 / (inlink->w * inlink->h);
     if (pblack >= blackframe->bamount)
-        av_log(ctx, AV_LOG_INFO, "frame:%u pblack:%u pos:%"PRId64" pts:%"PRId64" t:%f\n",
+        av_log(ctx, AV_LOG_INFO, "frame:%u pblack:%u pos:%"PRId64" pts:%"PRId64" t:%f "
+               "type:%c last_keyframe:%d\n",
                blackframe->frame, pblack, picref->pos, picref->pts,
-               picref->pts == AV_NOPTS_VALUE ? -1 : picref->pts * av_q2d(inlink->time_base));
+               picref->pts == AV_NOPTS_VALUE ? -1 : picref->pts * av_q2d(inlink->time_base),
+               av_get_picture_type_char(picref->video->pict_type), blackframe->last_keyframe);
 
     blackframe->frame++;
     blackframe->nblack = 0;



More information about the ffmpeg-cvslog mailing list