From c24d052bb7223efce1885e1577b0f9daeb3a3e7c Mon Sep 17 00:00:00 2001 From: Vincent Penquerc'h Date: Fri, 19 Aug 2011 19:17:15 +0100 Subject: [PATCH] vp8: probe for the new tuning API to keep building with older libvpx https://bugzilla.gnome.org/show_bug.cgi?id=656928 --- configure.ac | 11 +++++++++++ ext/vp8/gstvp8enc.c | 22 ++++++++++++++++++++++ ext/vp8/gstvp8enc.h | 2 ++ 3 files changed, 35 insertions(+) diff --git a/configure.ac b/configure.ac index f1619c7e54..8cb02a91bc 100644 --- a/configure.ac +++ b/configure.ac @@ -1692,6 +1692,17 @@ AG_GST_CHECK_FEATURE(VP8, [VP8 decoder], vp8, [ HAVE_VP8=yes AC_DEFINE(HAVE_VP8_ENCODER, 1, [Defined if the VP8 encoder is available]) VPX_LIBS="-lvpx" + + AC_TRY_COMPILE([ +#include +#include +int foo=VP8E_SET_TUNING; + ], [ +return 0; + ], [ + AC_DEFINE(HAVE_VP8ENC_TUNING, 1, [Defined if the VP8 encoder has tuning API]) + ], [ + ]) ]) AC_CHECK_LIB(vpx, vpx_codec_vp8_dx_algo, [ HAVE_VP8=yes diff --git a/ext/vp8/gstvp8enc.c b/ext/vp8/gstvp8enc.c index 2e61fd3394..f0d282f220 100644 --- a/ext/vp8/gstvp8enc.c +++ b/ext/vp8/gstvp8enc.c @@ -101,7 +101,13 @@ gst_vp8_enc_coder_hook_free (GstVP8EncCoderHook * hook) #define DEFAULT_LAG_IN_FRAMES 0 #define DEFAULT_SHARPNESS 0 #define DEFAULT_NOISE_SENSITIVITY 0 +#ifdef HAVE_VP8ENC_TUNING #define DEFAULT_TUNE VP8_TUNE_PSNR +#else +typedef enum +{ VP8_TUNE_NONE } vp8e_tuning; +#define DEFAULT_TUNE VP8_TUNE_NONE +#endif #define DEFAULT_STATIC_THRESHOLD 0 #define DEFAULT_DROP_FRAME 0 #define DEFAULT_RESIZE_ALLOWED TRUE @@ -186,8 +192,12 @@ static GType gst_vp8_enc_tune_get_type (void) { static const GEnumValue values[] = { +#ifdef HAVE_VP8ENC_TUNING {VP8_TUNE_PSNR, "Tune for PSNR", "psnr"}, {VP8_TUNE_SSIM, "Tune for SSIM", "ssim"}, +#else + {VP8_TUNE_NONE, "none", "none"}, +#endif {0, NULL, NULL} }; static volatile GType id = 0; @@ -542,7 +552,12 @@ gst_vp8_enc_set_property (GObject * object, guint prop_id, gst_vp8_enc->noise_sensitivity = g_value_get_int (value); break; case PROP_TUNE: +#ifdef HAVE_VP8ENC_TUNING gst_vp8_enc->tuning = g_value_get_enum (value); +#else + GST_WARNING_OBJECT (gst_vp8_enc, + "The tuning property is unsupported by this libvpx"); +#endif break; case PROP_STATIC_THRESHOLD: gst_vp8_enc->static_threshold = g_value_get_int (value); @@ -626,7 +641,12 @@ gst_vp8_enc_get_property (GObject * object, guint prop_id, GValue * value, g_value_set_int (value, gst_vp8_enc->noise_sensitivity); break; case PROP_TUNE: +#ifdef HAVE_VP8ENC_TUNING g_value_set_enum (value, gst_vp8_enc->tuning); +#else + GST_WARNING_OBJECT (gst_vp8_enc, + "The tuning property is unsupported by this libvpx"); +#endif break; case PROP_STATIC_THRESHOLD: g_value_set_int (value, gst_vp8_enc->static_threshold); @@ -800,8 +820,10 @@ gst_vp8_enc_set_format (GstBaseVideoEncoder * base_video_encoder, status = vpx_codec_control (&encoder->encoder, VP8E_SET_ARNR_TYPE, encoder->arnr_type); #endif +#ifdef HAVE_VP8ENC_TUNING status = vpx_codec_control (&encoder->encoder, VP8E_SET_TUNING, encoder->tuning); +#endif status = vpx_codec_control (&encoder->encoder, VP8E_SET_ENABLEAUTOALTREF, diff --git a/ext/vp8/gstvp8enc.h b/ext/vp8/gstvp8enc.h index 420963529b..3b01512978 100644 --- a/ext/vp8/gstvp8enc.h +++ b/ext/vp8/gstvp8enc.h @@ -78,7 +78,9 @@ struct _GstVP8Enc unsigned int lag_in_frames; int sharpness; int noise_sensitivity; +#ifdef HAVE_VP8ENC_TUNING vp8e_tuning tuning; +#endif int static_threshold; gboolean drop_frame; gboolean resize_allowed;