|
Is this what you're looking for? Below is a basic path that adds the required code and the detection of libswscale. There are four points of discussion though: * I used a pair of sws_getContext/sws_freeContext because I'm not clear on the multi-threading aspect. Otherwise sws_getCachedContext could probably be used. * I've taken the SWS_BICUBIC interpolation from the example link, but a simpeler interpolation computation might be sufficient. * On my system the fallback (deprecated function img_convert) is detected, and compiles, but the code fails (apparently somewhere else before my changes are touched. * The output looks okay, but I've not looked at it in detail.
With regards, Gerco.
Index: src/modules/mod_libavcodec/trgt_av.cpp =================================================================== --- src/modules/mod_libavcodec/trgt_av.cpp (revision 2030) +++ src/modules/mod_libavcodec/trgt_av.cpp (working copy) @@ -36,6 +36,9 @@ extern "C" { #include <avformat.h> +#ifdef HAVE_LIBSWSCALE +# include <ffmpeg/swscale.h> +#endif }
#include <synfig/general.h> @@ -386,13 +389,26 @@ }
- if ( pict && context->pix_fmt != PIX_FMT_RGB24 ) + if (pict && context->pix_fmt != PIX_FMT_RGB24) { - //We're using RGBA at the moment, write custom conversion code later (get less accuracy errors) + // We're using RGBA at the moment, write custom conversion code later + // (get less accuracy errors). +#ifdef HAVE_LIBSWSCALE + struct SwsContext* img_convert_ctx = + sws_getContext(context->width, context->height, PIX_FMT_RGB24, + context->width, context->height, context->pix_fmt, + SWS_BICUBIC, NULL, NULL, NULL); + + sws_scale(img_convert_ctx, pict->data, pict->linesize, + 0, context->height, encodable->data, + encodable->linesize); + + sws_freeContext (img_convert_ctx); +#else img_convert((AVPicture *)encodable, context->pix_fmt, - (AVPicture *)pict, PIX_FMT_RGB24, - context->width, context->height); - + (AVPicture *)pict, PIX_FMT_RGB24, + context->width, context->height); +#endif pict = encodable; }
Index: configure.ac =================================================================== --- configure.ac (revision 2030) +++ configure.ac (working copy) @@ -246,7 +246,33 @@ } ; fi
+if test $with_libavcodec = "yes" ; then { + AC_ARG_WITH(libswscale, + [AS_HELP_STRING([--without-libswscale], + [disable support for libswscale (Default=auto)])], + [], + [with_libswscale="yes"] + )
+ if test $with_libswscale != "no" ; then { + AC_CHECK_LIB(swscale, sws_getContext, [], [echo no; with_libswscale="no"], []) + } ; fi + + if test $with_libswscale = "yes" ; then { + LIBAVCODEC_LIBS="$LIBAVCODEC_LIBS -lswscale" + AM_CONDITIONAL(HAVE_LIBSWSCALE, true) + } else { + AM_CONDITIONAL(HAVE_LIBSWSCALE, false) + + AC_CHECK_LIB(avcodec, img_convert, + [AC_MSG_RESULT([ *** Using deprecated function img_convert.])], + [AC_MSG_FAILURE([Neither libswscale nor function img_convert was found.])], + [] + ) + } ; fi +} ; fi + + # FREETYPE2 CHECK--------------------
AC_ARG_WITH(freetype,[ @@ -647,6 +673,7 @@ FreeType2 ------------------------> $with_freetype fontconfig -----------------------> $with_fontconfig libavcodec -----------------------> $with_libavcodec +libswscale -----------------------> $with_libswscale vImage ---------------------------> $with_vimage ImageMagick ----------------------> $with_imagemagick Magick++ -------------------------> $with_magickpp
|