diff options
author | Paul B Mahol <onemda@gmail.com> | 2013-07-05 15:07:20 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2013-07-05 15:07:33 +0000 |
commit | 9dd14477884c40ec2079fa63ca19fa47d39056bd (patch) | |
tree | f2127f578cf4d75e71dd49738a2ba7d75854ce0b | |
parent | 4e8d6b315c8d046498642c0d155488be326133a3 (diff) | |
download | ffmpeg-9dd14477884c40ec2079fa63ca19fa47d39056bd.tar.gz |
lavfi/cropdetect: export cropdetect info to frame metadata
Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r-- | libavfilter/vf_cropdetect.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c index 28ae887181..68d683a4ad 100644 --- a/libavfilter/vf_cropdetect.c +++ b/libavfilter/vf_cropdetect.c @@ -112,15 +112,23 @@ static int config_input(AVFilterLink *inlink) return 0; } +#define SET_META(key, value) \ + snprintf(buf, sizeof(buf), "%d", value); \ + av_dict_set(metadata, #key, buf, 0) \ + static int filter_frame(AVFilterLink *inlink, AVFrame *frame) { AVFilterContext *ctx = inlink->dst; CropDetectContext *s = ctx->priv; int bpp = s->max_pixsteps[0]; int w, h, x, y, shrink_by; + AVDictionary **metadata; + char buf[32]; // ignore first 2 frames - they may be empty if (++s->frame_nb > 0) { + metadata = avpriv_frame_get_metadatap(frame); + // Reset the crop area every reset_count frames, if reset_count is > 0 if (s->reset_count > 0 && s->frame_nb > s->reset_count) { s->x1 = frame->width - 1; @@ -181,6 +189,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) h -= shrink_by; y += (shrink_by/2 + 1) & ~1; + SET_META("lavfi.cropdetect.x1", s->x1); + SET_META("lavfi.cropdetect.x2", s->x2); + SET_META("lavfi.cropdetect.y1", s->y1); + SET_META("lavfi.cropdetect.y2", s->y2); + SET_META("lavfi.cropdetect.w", w); + SET_META("lavfi.cropdetect.h", h); + SET_META("lavfi.cropdetect.x", x); + SET_META("lavfi.cropdetect.y", y); + av_log(ctx, AV_LOG_INFO, "x1:%d x2:%d y1:%d y2:%d w:%d h:%d x:%d y:%d pts:%"PRId64" t:%f crop=%d:%d:%d:%d\n", s->x1, s->x2, s->y1, s->y2, w, h, x, y, frame->pts, |