From def03d34391fe9ce49efdc3580220f1caaa5c160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Sat, 2 Aug 2014 18:57:32 +0200 Subject: [PATCH] avfilter/deshake: remove avcodec dependency --- configure | 4 +--- libavfilter/deshake.h | 5 ++--- libavfilter/vf_deshake.c | 20 ++++++++------------ 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/configure b/configure index d66fa29d75..c9133237f3 100755 --- a/configure +++ b/configure @@ -2533,8 +2533,7 @@ cropdetect_filter_deps="gpl" dctdnoiz_filter_deps="avcodec" dctdnoiz_filter_select="dct" delogo_filter_deps="gpl" -deshake_filter_deps="avcodec" -deshake_filter_select="me_cmp" +deshake_filter_select="pixelutils" drawtext_filter_deps="libfreetype" ebur128_filter_deps="gpl" flite_filter_deps="libflite" @@ -5253,7 +5252,6 @@ enabled amovie_filter && prepend avfilter_deps "avformat avcodec" enabled aresample_filter && prepend avfilter_deps "swresample" enabled asyncts_filter && prepend avfilter_deps "avresample" enabled atempo_filter && prepend avfilter_deps "avcodec" -enabled deshake_filter && prepend avfilter_deps "avcodec" enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample" enabled elbg_filter && prepend avfilter_deps "avcodec" enabled mcdeint_filter && prepend avfilter_deps "avcodec" diff --git a/libavfilter/deshake.h b/libavfilter/deshake.h index 615953cfe3..f61ed80d53 100644 --- a/libavfilter/deshake.h +++ b/libavfilter/deshake.h @@ -24,8 +24,8 @@ #include "config.h" #include "avfilter.h" -#include "libavcodec/dsputil.h" #include "transform.h" +#include "libavutil/pixelutils.h" #if CONFIG_OPENCL #include "libavutil/opencl.h" #endif @@ -80,8 +80,7 @@ typedef struct { int blocksize; ///< Size of blocks to compare int contrast; ///< Contrast threshold int search; ///< Motion search method - AVCodecContext *avctx; - DSPContext c; ///< Context providing optimized SAD methods + av_pixelutils_sad_fn sad; ///< Sum of the absolute difference function Transform last; ///< Transform from last frame int refcount; ///< Number of reference frames (defines averaging window) FILE *fp; diff --git a/libavfilter/vf_deshake.c b/libavfilter/vf_deshake.c index 50aa451a32..95a6c51413 100644 --- a/libavfilter/vf_deshake.c +++ b/libavfilter/vf_deshake.c @@ -57,7 +57,6 @@ #include "libavutil/mem.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" -#include "libavcodec/dsputil.h" #include "deshake.h" #include "deshake_opencl.h" @@ -132,9 +131,8 @@ static void find_block_motion(DeshakeContext *deshake, uint8_t *src1, int smallest = INT_MAX; int tmp, tmp2; - #define CMP(i, j) deshake->c.sad[0](NULL, src1 + cy * stride + cx, \ - src2 + (j) * stride + (i), stride, \ - deshake->blocksize) + #define CMP(i, j) deshake->sad(src1 + cy * stride + cx, stride,\ + src2 + (j) * stride + (i), stride) if (deshake->search == EXHAUSTIVE) { // Compare every possible position - this is sloooow! @@ -201,7 +199,7 @@ static int block_contrast(uint8_t *src, int x, int y, int stride, int blocksize) int i, j, pos; for (i = 0; i <= blocksize * 2; i++) { - // We use a width of 16 here to match the libavcodec sad functions + // We use a width of 16 here to match the sad function for (j = 0; j <= 15; j++) { pos = (y - i) * stride + (x - j); if (src[pos] < lowest) @@ -263,7 +261,7 @@ static void find_motion(DeshakeContext *deshake, uint8_t *src1, uint8_t *src2, pos = 0; // Find motion for every block and store the motion vector in the counts for (y = deshake->ry; y < height - deshake->ry - (deshake->blocksize * 2); y += deshake->blocksize * 2) { - // We use a width of 16 here to match the libavcodec sad functions + // We use a width of 16 here to match the sad function for (x = deshake->rx; x < width - deshake->rx - 16; x += 16) { // If the contrast is too low, just skip this block as it probably // won't be very useful to us. @@ -351,6 +349,10 @@ static av_cold int init(AVFilterContext *ctx) int ret; DeshakeContext *deshake = ctx->priv; + deshake->sad = av_pixelutils_get_sad_fn(4, 4, 1, deshake); // 16x16, 2nd source unaligned + if (!deshake->sad) + return AVERROR(EINVAL); + deshake->refcount = 20; // XXX: add to options? deshake->blocksize /= 2; deshake->blocksize = av_clip(deshake->blocksize, 4, 128); @@ -413,9 +415,6 @@ static int config_props(AVFilterLink *link) deshake->last.angle = 0; deshake->last.zoom = 0; - deshake->avctx = avcodec_alloc_context3(NULL); - avpriv_dsputil_init(&deshake->c, deshake->avctx); - return 0; } @@ -428,9 +427,6 @@ static av_cold void uninit(AVFilterContext *ctx) av_frame_free(&deshake->ref); if (deshake->fp) fclose(deshake->fp); - if (deshake->avctx) - avcodec_close(deshake->avctx); - av_freep(&deshake->avctx); } static int filter_frame(AVFilterLink *link, AVFrame *in)