plugins: add support for dma_buf imports.
[platform/upstream/gstreamer.git] / configure.ac
1 # gstreamer-vaapi package version number
2 m4_define([gst_vaapi_major_version], [0])
3 m4_define([gst_vaapi_minor_version], [5])
4 m4_define([gst_vaapi_micro_version], [10])
5 m4_define([gst_vaapi_pre_version],   [1])
6 m4_define([gst_vaapi_version],
7           [gst_vaapi_major_version.gst_vaapi_minor_version.gst_vaapi_micro_version])
8 m4_if(gst_vaapi_pre_version, [0], [], [
9 m4_append([gst_vaapi_version], gst_vaapi_pre_version, [.pre])
10 ])
11
12 # gstreamer-vaapi library (libtool) version number
13 m4_define([gst_vaapi_lt_current],       [6])
14 m4_define([gst0_vaapi_lt_current_bias], [0])
15 m4_define([gst1_vaapi_lt_current_bias], [2])
16 m4_define([gst2_vaapi_lt_current_bias], [4])
17 m4_define([gst4_vaapi_lt_current_bias], [5])
18 m4_define([gst6_vaapi_lt_current_bias], [6])
19 m4_define([gst_vaapi_lt_revision],      [0])
20 m4_define([gst_vaapi_lt_age],           [0])
21
22 # glib version number
23 m4_define([glib_version], [2.28])
24
25 # gstreamer version number
26 m4_define([gst_api_version],            [autodetect])
27 m4_define([gst0_version],               [0.10.36])
28 m4_define([gst0_plugins_base_version],  [0.10.31])
29 m4_define([gst0_plugins_bad_version],   [0.10.22])
30 m4_define([gst1_version],               [1.0.0])
31 m4_define([gst1_plugins_base_version],  [1.0.0])
32 m4_define([gst1_plugins_bad_version],   [1.0.0])
33 m4_define([gst12_version],              [1.1.90])
34 m4_define([gst12_plugins_base_version], [1.1.0])
35 m4_define([gst12_plugins_bad_version],  [1.1.0])
36 m4_define([gst14_version],              [1.2.90])
37 m4_define([gst14_plugins_base_version], [1.3.0])
38 m4_define([gst14_plugins_bad_version],  [1.3.0])
39 m4_define([gst16_version],              [1.5.0])
40 m4_define([gst16_plugins_base_version], [1.5.0])
41 m4_define([gst16_plugins_bad_version],  [1.5.0])
42
43 # Wayland minimum version number
44 m4_define([wayland_api_version], [1.0.0])
45
46 # VA-API minimum version number
47 m4_define([va_api_version],     [0.30.4])
48 m4_define([va_api_enc_version], [0.34.0])
49 m4_define([va_api_drm_version], [0.33.0])
50 m4_define([va_api_x11_version], [0.31.0])
51 m4_define([va_api_wld_version], [0.33.0])
52
53 # libva package version number
54 m4_define([libva_enc_package_version], [1.2.0])
55 m4_define([libva_drm_package_version], [1.1.0])
56 m4_define([libva_x11_package_version], [1.0.3])
57 m4_define([libva_wld_package_version], [1.1.0])
58
59 # gtk-doc version number
60 # XXX: introspection annotations require gtk-doc >= 1.12
61 m4_define([gtkdoc_version], [1.9])
62
63 AC_PREREQ([2.66])
64 AC_INIT([gst_vaapi], [gst_vaapi_version],
65     [gwenole.beauchesne@intel.com],
66     [gstreamer-vaapi])
67
68 AC_CONFIG_HEADERS([config.h])
69 AC_CONFIG_SRCDIR([Makefile.am])
70 AC_CONFIG_MACRO_DIR([m4])
71 AC_CONFIG_AUX_DIR([build-aux])
72
73 AC_CANONICAL_TARGET
74
75 AM_INIT_AUTOMAKE([1.11 tar-ustar no-dist-gzip dist-bzip2])
76
77 TODAY="`LC_ALL=C date +'%a, %d %b %Y %X %z'`"
78 AC_SUBST(TODAY)
79
80 LIBVA_PACKAGE_VERSION=libva_x11_package_version
81 AC_SUBST(LIBVA_PACKAGE_VERSION)
82
83 WAYLAND_API_VERSION=wayland_api_version
84 AC_SUBST(WAYLAND_API_VERSION)
85
86 dnl Use pretty build output with automake >= 1.11
87 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [
88   AM_DEFAULT_VERBOSITY=1
89   AC_SUBST(AM_DEFAULT_VERBOSITY)
90 ])
91
92 dnl Check for tools
93 AC_PROG_CC
94 AM_PROG_CC_C_O
95
96 AC_ARG_VAR([GIT], [Path to git program, if any])
97 AC_PATH_PROG([GIT], [git])
98 AM_CONDITIONAL([HAVE_GIT], [test -n "$GIT"])
99
100 AC_ARG_VAR([YASM], [Path to yasm program, if any])
101 AC_PATH_PROG([YASM], [yasm])
102 if test -z "$YASM" -a "$enable_builtin_libvpx" = "yes"; then
103     AC_MSG_ERROR([yasm is needed to build libvpx sources])
104 fi
105
106 dnl Initialize libtool
107 LT_PREREQ([2.2])
108 LT_INIT
109
110 AC_ARG_ENABLE(builtin_videoparsers,
111     AS_HELP_STRING([--enable-builtin-videoparsers],
112                    [enable built-in videoparsers @<:@default=yes@:>@]),
113     [], [enable_builtin_videoparsers="yes"])
114
115 AC_ARG_ENABLE(builtin_codecparsers,
116     AS_HELP_STRING([--enable-builtin-codecparsers],
117                    [enable built-in codecparsers @<:@default=yes@:>@]),
118     [], [enable_builtin_codecparsers="yes"])
119
120 AC_ARG_ENABLE(builtin_libvpx,
121     AS_HELP_STRING([--enable-builtin-libvpx],
122                    [enable built-in libvpx @<:@default=yes@:>@]),
123     [], [enable_builtin_libvpx="yes"])
124
125 AC_ARG_ENABLE([encoders],
126     AS_HELP_STRING([--enable-encoders],
127                    [enable video encoders @<:@default=yes@:>@]),
128     [], [enable_encoders="yes"])
129
130 AC_ARG_ENABLE(drm,
131     AS_HELP_STRING([--enable-drm],
132                    [enable DRM backend @<:@default=yes@:>@]),
133     [], [enable_drm="yes"])
134
135 AC_ARG_ENABLE(x11,
136     AS_HELP_STRING([--enable-x11],
137                    [enable X11 output @<:@default=yes@:>@]),
138     [], [enable_x11="yes"])
139
140 AC_ARG_ENABLE(glx,
141     AS_HELP_STRING([--enable-glx],
142                    [enable OpenGL/X11 output @<:@default=yes@:>@]),
143     [], [enable_glx="yes"])
144
145 AC_ARG_ENABLE(wayland,
146     AC_HELP_STRING([--enable-wayland],
147                    [enable Wayland output @<:@default=yes@:>@]),
148     [], [enable_wayland="yes"])
149
150 AC_ARG_WITH([gstreamer-api],
151     AC_HELP_STRING([--with-gstreamer-api=VERSION],
152                    [build against the specified GStreamer API version
153                     @<:@default=gst_api_version@:>@]),
154     [GST_API_VERSION="$with_gstreamer_api"], [GST_API_VERSION=gst_api_version])
155
156 dnl Check for basic libraries
157 AC_CHECK_LIB(m, tan)
158
159 dnl Check for Gtk doc
160 GTKDOC_VERSION=gtkdoc_version
161 # gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line
162 m4_ifdef([GTK_DOC_CHECK], [
163 GTK_DOC_CHECK([$GTKDOC_VERSION], [--flavour no-tmpl])], [
164 AM_CONDITIONAL([ENABLE_GTK_DOC], [false])])
165 AC_SUBST(GTKDOC_VERSION)
166
167 dnl Check for GLib
168 GLIB_VERSION_REQUIRED=glib_version
169 PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $GLIB_VERSION_REQUIRED])
170 AC_SUBST(GLIB_VERSION_REQUIRED)
171
172 dnl Check to see if dlopen is in default libraries (like Solaris, which
173 dnl has it in libc), or if libdl is needed to get it.
174 AC_CHECK_FUNC([dlopen], [], [
175     AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
176 AC_SUBST([DLOPEN_LIBS])
177
178 dnl ---------------------------------------------------------------------------
179 dnl -- GStreamer                                                             --
180 dnl ---------------------------------------------------------------------------
181
182 dnl If GStreamer API version is to be autodetected, then always try
183 dnl with the latest version first
184 AC_MSG_CHECKING([for GStreamer API version])
185 if test "$GST_API_VERSION" = "autodetect"; then
186     gst_pkg_versions="1.0 0.10"
187 else
188     AS_VERSION_COMPARE([$GST_API_VERSION], [1.0],
189         [gst_pkg_versions="0.10"], [gst_pkg_versions="1.0"],
190         dnl GStreamer 1.2.x APIs don't have their own namespace
191         [gst_pkg_versions="1.0"])
192 fi
193 for gst_pkg_version in ${gst_pkg_versions}; do
194     if $PKG_CONFIG --exists "gstreamer-$gst_pkg_version"; then
195         gst_version=`$PKG_CONFIG --modversion "gstreamer-$gst_pkg_version"`
196         gst_major_version=`echo "$gst_version" | cut -d'.' -f1`
197         gst_minor_version=`echo "$gst_version" | cut -d'.' -f2`
198         GST_API_VERSION="${gst_major_version}.${gst_minor_version}"
199         GST_PKG_VERSION="$gst_pkg_version"
200         break
201     fi
202 done
203 if test -z "$GST_PKG_VERSION"; then
204     AC_MSG_ERROR([version $GST_API_VERSION not found])
205 fi
206 AC_MSG_RESULT([$GST_API_VERSION])
207
208 dnl Versions for GStreamer and plugins-base
209 case $GST_API_VERSION in
210 0.10)
211     GST_VERSION_REQUIRED=gst0_version
212     GST_PLUGINS_BASE_VERSION_REQUIRED=gst0_plugins_base_version
213     GST_PLUGINS_BAD_VERSION_REQUIRED=gst0_plugins_bad_version
214     ;;
215 1.0)
216     GST_VERSION_REQUIRED=gst1_version
217     GST_PLUGINS_BASE_VERSION_REQUIRED=gst1_plugins_base_version
218     GST_PLUGINS_BAD_VERSION_REQUIRED=gst1_plugins_bad_version
219     ;;
220 1.2)
221     GST_VERSION_REQUIRED=gst12_version
222     GST_PLUGINS_BASE_VERSION_REQUIRED=gst12_plugins_base_version
223     GST_PLUGINS_BAD_VERSION_REQUIRED=gst12_plugins_bad_version
224     ;;
225 1.[[3-4]])
226     GST_VERSION_REQUIRED=gst14_version
227     GST_PLUGINS_BASE_VERSION_REQUIRED=gst14_plugins_base_version
228     GST_PLUGINS_BAD_VERSION_REQUIRED=gst14_plugins_bad_version
229     ;;
230 1.5)
231     GST_VERSION_REQUIRED=gst16_version
232     GST_PLUGINS_BASE_VERSION_REQUIRED=gst16_plugins_base_version
233     GST_PLUGINS_BAD_VERSION_REQUIRED=gst16_plugins_bad_version
234     ;;
235 *)
236     AC_MSG_ERROR([unsupported GStreamer API version $GST_API_VERSION])
237     ;;
238 esac
239 AC_SUBST(GST_API_VERSION)
240 AC_SUBST(GST_VERSION_REQUIRED)
241 AC_SUBST(GST_PLUGINS_BASE_VERSION_REQUIRED)
242 AC_SUBST(GST_PLUGINS_BAD_VERSION_REQUIRED)
243
244 USE_GST_API_0_10="no"
245 USE_GST_API_1_0p="no"
246 USE_GST_API_1_2p="no"
247 AS_VERSION_COMPARE([$GST_API_VERSION], [0.10],
248     [], [USE_GST_API_0_10="yes"], [])
249 AS_VERSION_COMPARE([$GST_API_VERSION], [1.0],
250     [], [USE_GST_API_1_0p="yes"], [USE_GST_API_1_0p="yes"])
251 AS_VERSION_COMPARE([$GST_API_VERSION], [1.2],
252     [], [USE_GST_API_1_2p="yes"], [USE_GST_API_1_2p="yes"])
253 AM_CONDITIONAL([USE_GST_API_0_10], [test "$USE_GST_API_0_10" = "yes"])
254 AM_CONDITIONAL([USE_GST_API_1_0p], [test "$USE_GST_API_1_0p" = "yes"])
255 AM_CONDITIONAL([USE_GST_API_1_2p], [test "$USE_GST_API_1_2p" = "yes"])
256
257 dnl GStreamer 1.2.x APIs don't have their own namespace
258 GST_PKG_VERSION="$GST_API_VERSION"
259 if test "$USE_GST_API_1_2p" = "yes"; then
260     GST_PKG_VERSION="1.0"
261 fi
262 AC_SUBST([GST_PKG_VERSION])
263
264 dnl Validate certain features
265 if test "$USE_GST_API_0_10" = "yes"; then
266     AC_MSG_WARN([support for GStreamer 0.10 is obsolete, and will be removed])
267     if test "$enable_builtin_videoparsers" = "yes"; then
268         AC_MSG_WARN([disabled built-in videoparsers (unsupported)])
269         enable_builtin_videoparsers="no"
270     fi
271 elif test "$USE_GST_API_1_2p" != "yes"; then
272     AC_MSG_WARN([support for GStreamer < 1.2 is deprecated, please upgrade])
273 fi
274
275 dnl GStreamer Core
276 PKG_CHECK_MODULES([GST],
277     [gstreamer-$GST_PKG_VERSION >= $GST_VERSION_REQUIRED])
278 PKG_CHECK_MODULES([GST_BASE],
279     [gstreamer-base-$GST_PKG_VERSION >= $GST_VERSION_REQUIRED])
280
281 AC_CACHE_CHECK([for GstBaseSink::query hook], ac_cv_have_gst_base_sink_query, [
282     saved_CPPFLAGS="$CPPFLAGS"
283     CPPFLAGS="$CPPFLAGS $GST_BASE_CFLAGS"
284     saved_LIBS="$LIBS"
285     LIBS="$LIBS $GST_BASE_LIBS"
286     AC_COMPILE_IFELSE(
287         [AC_LANG_PROGRAM(
288             [[#include <gst/base/gstbasesink.h>]],
289             [[GstBaseSinkClass klass; klass.query = NULL;]])],
290         [ac_cv_have_gst_base_sink_query="yes"],
291         [ac_cv_have_gst_base_sink_query="no"]
292     )
293     CPPFLAGS="$saved_CPPFLAGS"
294     LIBS="$saved_LIBS"
295 ])
296 if test "$ac_cv_have_gst_base_sink_query" != "yes"; then
297     AC_MSG_ERROR([GstBaseSink does not contain the 'query' vfunc])
298 fi
299
300 dnl GStreamer -base plugins
301 PKG_CHECK_MODULES([GST_PLUGINS_BASE],
302     [gstreamer-plugins-base-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
303 if test "$GST_API_VERSION" = "0.10"; then
304 PKG_CHECK_MODULES([GST_INTERFACES],
305     [gstreamer-interfaces-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
306 fi
307
308 dnl ... gst_dmabuf_memory_get_fd (gstreamer-allocators)
309 PKG_CHECK_MODULES([GST_ALLOCATORS],
310     [gstreamer-allocators-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
311
312 dnl ... GstVideoOverlayComposition (gstreamer-video)
313 PKG_CHECK_MODULES([GST_VIDEO],
314     [gstreamer-video-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
315
316 AC_CACHE_CHECK([for GstVideoOverlayComposition],
317     ac_cv_have_gst_video_overlay_composition, [
318     saved_CPPFLAGS="$CPPFLAGS"
319     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_VIDEO_CFLAGS"
320     saved_LIBS="$LIBS"
321     LIBS="$LIBS $GST_LIBS $GST_VIDEO_LIBS"
322     AC_COMPILE_IFELSE(
323         [AC_LANG_PROGRAM(
324             [[#include <gst/video/video-overlay-composition.h>]],
325             [[GstVideoOverlayComposition *c;
326               c = gst_video_overlay_composition_new(0);]])],
327         [ac_cv_have_gst_video_overlay_composition="yes"],
328         [ac_cv_have_gst_video_overlay_composition="no"]
329     )
330     CPPFLAGS="$saved_CPPFLAGS"
331     LIBS="$saved_LIBS"
332 ])
333 if test "$ac_cv_have_gst_video_overlay_composition" != "yes"; then
334     AC_MSG_ERROR([GstVideoOverlayComposition is not available])
335 fi
336
337 AC_CACHE_CHECK([... with advanced format flags],
338     ac_cv_have_gst_video_overlay_hwcaps, [
339     saved_CPPFLAGS="$CPPFLAGS"
340     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_VIDEO_CFLAGS"
341     saved_LIBS="$LIBS"
342     LIBS="$LIBS $GST_LIBS $GST_VIDEO_LIBS"
343     AC_COMPILE_IFELSE(
344         [AC_LANG_PROGRAM(
345             [[#include <gst/video/video-overlay-composition.h>]],
346             [[GstVideoOverlayRectangle *rect;
347               const guint w = 64, h = 64;
348               guint flags = (
349                   GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA|
350                   GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA);
351               rect = gst_video_overlay_rectangle_new_argb(NULL, w, h, w * 4,
352                   0, 0, w, h, flags);
353               gst_video_overlay_rectangle_set_global_alpha(rect, 0.5f);]])],
354         [ac_cv_have_gst_video_overlay_hwcaps="yes"],
355         [ac_cv_have_gst_video_overlay_hwcaps="no"]
356     )
357     CPPFLAGS="$saved_CPPFLAGS"
358     LIBS="$saved_LIBS"
359 ])
360 if test "$ac_cv_have_gst_video_overlay_hwcaps" = "yes"; then
361     AC_DEFINE_UNQUOTED([HAVE_GST_VIDEO_OVERLAY_HWCAPS], 1,
362         [Defined to 1 if GstVideoOverlayComposition API supports HW hints.])
363 fi
364
365 dnl GStreamer -bad plugins (deprecated in GStreamer v1.2)
366 if test "$USE_GST_API_1_2p" != "yes"; then
367 PKG_CHECK_MODULES([GST_BASEVIDEO],
368     [gstreamer-basevideo-$GST_PKG_VERSION >= $GST_PLUGINS_BAD_VERSION_REQUIRED])
369 fi
370
371 dnl ... bitstream parsers
372 if test "$enable_builtin_codecparsers" = "yes"; then
373     ac_cv_have_gst_mpeg2_parser="no"
374     ac_cv_have_gst_h264_parser="no"
375     ac_cv_have_gst_jpeg_parser="no"
376     ac_cv_have_gst_vp8_parser="no"
377 else
378 PKG_CHECK_MODULES([GST_CODEC_PARSERS],
379     [gstreamer-codecparsers-$GST_PKG_VERSION >= $GST_PLUGINS_BAD_VERSION_REQUIRED])
380 fi
381
382 dnl ... MPEG-2 parser, with the required extensions
383 AC_CACHE_CHECK([for MPEG-2 parser],
384     ac_cv_have_gst_mpeg2_parser, [
385     saved_CPPFLAGS="$CPPFLAGS"
386     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
387     saved_LIBS="$LIBS"
388     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
389     AC_COMPILE_IFELSE(
390         [AC_LANG_PROGRAM(
391             [[#include <gst/codecparsers/gstmpegvideoparser.h>]],
392             [[GstMpegVideoSequenceHdr seq_hdr;
393               GstMpegVideoSequenceExt seq_ext;
394               GstMpegVideoSequenceDisplayExt seq_dpy;
395               GstMpegVideoSliceHdr slice_hdr;
396               GstMpegVideoPacket packet;
397               gst_mpeg_video_packet_parse_slice_header(&packet, &slice_hdr,
398                   &seq_hdr, NULL);
399               gst_mpeg_video_finalise_mpeg2_sequence_header(&seq_hdr,
400                   &seq_ext, &seq_dpy);]])],
401         [ac_cv_have_gst_mpeg2_parser="yes"],
402         [ac_cv_have_gst_mpeg2_parser="no"]
403     )
404     CPPFLAGS="$saved_CPPFLAGS"
405     LIBS="$saved_LIBS"
406 ])
407 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_MPEG2],
408     [test "$ac_cv_have_gst_mpeg2_parser" != "yes"])
409
410 dnl ... H.264 parser, with the required extensions
411 AC_CACHE_CHECK([for H.264 parser],
412     ac_cv_have_gst_h264_parser, [
413     saved_CPPFLAGS="$CPPFLAGS"
414     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
415     saved_LIBS="$LIBS"
416     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
417     AC_COMPILE_IFELSE(
418         [AC_LANG_PROGRAM(
419             [[#include <gst/codecparsers/gsth264parser.h>]],
420             [[GstH264SliceHdr slice_hdr;
421               GstH264VUIParams vui_params;
422               GstH264Profile profile = GST_H264_PROFILE_HIGH;
423               slice_hdr.n_emulation_prevention_bytes = 0;
424               vui_params.par_n = 0;
425               vui_params.par_d = 0;]])],
426         [ac_cv_have_gst_h264_parser="yes"],
427         [ac_cv_have_gst_h264_parser="no"]
428     )
429     CPPFLAGS="$saved_CPPFLAGS"
430     LIBS="$saved_LIBS"
431 ])
432 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_H264],
433     [test "$ac_cv_have_gst_h264_parser" != "yes"])
434
435 dnl ... JPEG parser, not upstream yet
436 AC_CACHE_CHECK([for JPEG parser],
437     ac_cv_have_gst_jpeg_parser, [
438     saved_CPPFLAGS="$CPPFLAGS"
439     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
440     saved_LIBS="$LIBS"
441     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
442     AC_COMPILE_IFELSE(
443         [AC_LANG_PROGRAM(
444             [[#include <gst/codecparsers/gstjpegparser.h>]],
445             [[GstJpegImage jpeg_image;]])],
446         [ac_cv_have_gst_jpeg_parser="yes"],
447         [ac_cv_have_gst_jpeg_parser="no"]
448     )
449     CPPFLAGS="$saved_CPPFLAGS"
450     LIBS="$saved_LIBS"
451 ])
452 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_JPEG],
453     [test "$ac_cv_have_gst_jpeg_parser" != "yes"])
454
455 dnl ... VP8 parser, not upstream yet
456 if test "$enable_builtin_libvpx" = "yes"; then
457     ac_cv_have_gst_vp8_parser="no"
458 fi
459 AC_CACHE_CHECK([for VP8 parser],
460     ac_cv_have_gst_vp8_parser, [
461     saved_CPPFLAGS="$CPPFLAGS"
462     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
463     saved_LIBS="$LIBS"
464     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
465     AC_COMPILE_IFELSE(
466         [AC_LANG_PROGRAM(
467             [[#include <gst/codecparsers/gstvp8parser.h>]],
468             [[GstVp8FrameHdr frame_hdr;]])],
469         [ac_cv_have_gst_vp8_parser="yes"],
470         [ac_cv_have_gst_vp8_parser="no"]
471     )
472     CPPFLAGS="$saved_CPPFLAGS"
473     LIBS="$saved_LIBS"
474 ])
475 AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_VP8],
476     [test "$ac_cv_have_gst_vp8_parser" != "yes"])
477 AM_CONDITIONAL([USE_BUILTIN_LIBVPX], [test "$enable_builtin_libvpx" = "yes"])
478
479 dnl ... video parsers
480 AM_CONDITIONAL([USE_LOCAL_VIDEO_PARSERS],
481     [test "$enable_builtin_videoparsers" = "yes"])
482
483 case $GST_API_VERSION in
484 0.10)   lt_bias=gst0_vaapi_lt_current_bias;;
485 1.0)    lt_bias=gst1_vaapi_lt_current_bias;;
486 1.2)    lt_bias=gst2_vaapi_lt_current_bias;;
487 1.[[3-4]]) lt_bias=gst4_vaapi_lt_current_bias;;
488 1.5)    lt_bias=gst6_vaapi_lt_current_bias;;
489 esac
490 GST_VAAPI_MAJOR_VERSION=`expr gst_vaapi_lt_current - "$lt_bias"`
491 AC_SUBST(GST_VAAPI_MAJOR_VERSION)
492
493 dnl GST_VAAPI_LT_LDFLAGS:
494 GST_VAAPI_LT_CURRENT="$GST_VAAPI_MAJOR_VERSION"
495 GST_VAAPI_LT_REV=gst_vaapi_lt_revision
496 GST_VAAPI_LT_AGE=gst_vaapi_lt_age
497 GST_VAAPI_LT_VERSION="$GST_VAAPI_LT_CURRENT:$GST_VAAPI_LT_REV:$GST_VAAPI_LT_AGE"
498 GST_VAAPI_LT_LDFLAGS="-version-info $GST_VAAPI_LT_VERSION"
499 AC_SUBST(GST_VAAPI_LT_VERSION)
500 AC_SUBST(GST_VAAPI_LT_LDFLAGS)
501
502 dnl GST_ALL_LDFLAGS:
503 dnl LDFLAGS really should only contain flags, not libs - they get added before
504 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
505 GST_ALL_LDFLAGS="-no-undefined"
506 AC_SUBST(GST_ALL_LDFLAGS)
507
508 dnl GST_PLUGIN_LDFLAGS:
509 dnl this really should only contain flags, not libs - they get added before
510 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
511 GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^([_]*gst_plugin_desc|gst_.*_get_type)\$\$' $GST_ALL_LDFLAGS"
512 AC_SUBST(GST_PLUGIN_LDFLAGS)
513
514 dnl Check for the GStreamer plugins directory
515 AC_ARG_VAR([GST_PLUGIN_PATH], [installation path for gstreamer-vaapi plugin elements for GStreamer 0.10])
516 AC_ARG_VAR([GST_PLUGIN_PATH_1_0], [installation path for gstreamer-vaapi plugin elements for GStreamer 1.0])
517 AC_MSG_CHECKING([for GStreamer plugins directory])
518 case $GST_PKG_VERSION in
519 0.10)   _gst_plugin_path="$GST_PLUGIN_PATH";;
520 1.0)    _gst_plugin_path="$GST_PLUGIN_PATH_1_0";;
521 esac
522 if test -d "$_gst_plugin_path"; then
523     GST_PLUGINS_DIR="$_gst_plugin_path"
524 else
525     GST_PLUGINS_DIR=`$PKG_CONFIG gstreamer-$GST_PKG_VERSION --variable pluginsdir`
526     if test -z "$GST_PLUGINS_DIR"; then
527         GST_PLUGINS_DIR="\$(libdir)/gstreamer-$GST_PKG_VERSION"
528     fi
529 fi
530 AC_MSG_RESULT([$GST_PLUGINS_DIR])
531 plugindir="$GST_PLUGINS_DIR"
532 AC_SUBST(plugindir)
533
534 dnl ---------------------------------------------------------------------------
535 dnl -- Renderers                                                             --
536 dnl ---------------------------------------------------------------------------
537
538 dnl Check for DRM/libudev
539 USE_DRM=0
540 if test "$enable_drm" = "yes"; then
541     PKG_CHECK_MODULES(DRM, [libdrm], [USE_DRM=1], [USE_DRM=0])
542     PKG_CHECK_MODULES(UDEV, [libudev], [:], [USE_DRM=0])
543
544     if test $USE_DRM -eq 1; then
545         saved_CPPFLAGS="$CPPFLAGS"
546         CPPFLAGS="$CPPFLAGS $DRM_CFLAGS"
547         AC_CHECK_HEADERS([drm_fourcc.h], [:], [USE_DRM=0])
548         CPPFLAGS="$saved_CPPFLAGS"
549     fi
550 fi
551
552 dnl Check for X11
553 USE_X11=0
554 if test "$enable_x11" = "yes"; then
555     PKG_CHECK_MODULES(X11, [x11], [USE_X11=1], [USE_X11=0])
556     if test $USE_X11 -eq 1; then
557         saved_CPPFLAGS="$CPPFLAGS"
558         CPPFLAGS="$CPPFLAGS $X11_CFLAGS"
559         AC_CHECK_HEADERS([X11/Xlib.h X11/Xutil.h X11/Xatom.h], [:], [USE_X11=0])
560         CPPFLAGS="$saved_CPPFLAGS"
561     fi
562 fi
563
564 dnl Check for XKB library
565 HAVE_XKBLIB=0
566 if test $USE_X11 -eq 1; then
567     AC_CHECK_HEADERS([X11/XKBlib.h], [HAVE_XKBLIB=1], [:])
568 fi
569 if test $HAVE_XKBLIB -eq 1; then
570     AC_DEFINE_UNQUOTED([HAVE_XKBLIB], 1,
571         [Defined to 1 if the XKB extension exists.])
572 fi
573
574 dnl Check for XRandR
575 HAVE_XRANDR=0
576 if test $USE_X11 -eq 1; then
577     HAVE_XRANDR=1
578     PKG_CHECK_MODULES([XRANDR], [xrandr], [:], [HAVE_XRANDR=0])
579     if test $HAVE_XRANDR -eq 1; then
580         saved_CPPFLAGS="$CPPFLAGS"
581         CPPFLAGS="$CPPFLAGS $XRANDR_CFLAGS"
582         AC_CHECK_HEADERS([X11/extensions/Xrandr.h], [:], [HAVE_XRANDR=0])
583         CPPFLAGS="$saved_CPPFLAGS"
584     fi
585 fi
586 if test $HAVE_XRANDR -eq 1; then
587     AC_DEFINE_UNQUOTED(HAVE_XRANDR, 1,
588         [Defined to 1 if the XRandR extension exists.])
589 fi
590
591 dnl Check for XRender
592 HAVE_XRENDER=0
593 if test $USE_X11 -eq 1; then
594     HAVE_XRENDER=1
595     PKG_CHECK_MODULES([XRENDER], [xrender], [:], [HAVE_XRENDER=0])
596     if test $HAVE_XRENDER -eq 1; then
597         saved_CPPFLAGS="$CPPFLAGS"
598         CPPFLAGS="$CPPFLAGS $XRENDER_CFLAGS"
599         AC_CHECK_HEADERS([X11/extensions/Xrender.h], [:], [HAVE_XRENDER=0])
600         CPPFLAGS="$saved_CPPFLAGS"
601     fi
602 fi
603 if test $HAVE_XRENDER -eq 1; then
604     AC_DEFINE_UNQUOTED([HAVE_XRENDER], [1],
605         [Defined to 1 if the XRender extension exists.])
606 fi
607
608 dnl OpenGL
609 enable_opengl="no"
610 if test "$enable_glx" = "yes"; then
611     enable_opengl="yes"
612 fi
613
614 HAVE_GL=0
615 if test "$enable_opengl" = "yes"; then
616     HAVE_GL=1
617     PKG_CHECK_MODULES([GL], [gl], [:], [HAVE_GL=0])
618     saved_CPPFLAGS="$CPPFLAGS"
619     CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
620     AC_CHECK_HEADERS([GL/gl.h GL/glext.h], [:], [HAVE_GL=0], [
621 #ifdef HAVE_GL_GL_H
622 # include <GL/gl.h>
623 #endif
624     ])
625     CPPFLAGS="$saved_CPPFLAGS"
626 fi
627
628 dnl ... GLX
629 USE_GLX=0
630 if test "$enable_glx" = "yes" -a $HAVE_GL -eq 1 -a $USE_X11 -eq 1; then
631     USE_GLX=1
632     saved_CPPFLAGS="$CPPFLAGS"
633     saved_LIBS="$LIBS"
634     CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
635     LIBS="$LIBS $GL_LIBS"
636     AC_CHECK_HEADERS([GL/glx.h], [:], [USE_GLX=0], [
637 #ifdef HAVE_GL_GL_H
638 # include <GL/gl.h>
639 #endif
640     ])
641     AC_CHECK_LIB([GL], [glXCreateContext], [:], [USE_GLX=0])
642     CPPFLAGS="$saved_CPPFLAGS"
643     LIBS="$saved_LIBS"
644 fi
645
646 dnl Check for Wayland
647 USE_WAYLAND=0
648 if test "$enable_wayland" = "yes"; then
649     PKG_CHECK_MODULES(WAYLAND, [wayland-client >= wayland_api_version],
650         [USE_WAYLAND=1], [USE_WAYLAND=0])
651
652     if test $USE_WAYLAND -eq 1; then
653         saved_CPPFLAGS="$CPPFLAGS"
654         CPPFLAGS="$CPPFLAGS $WAYLAND_CFLAGS"
655         AC_CHECK_HEADERS([wayland-client.h], [:], [USE_WAYLAND=0])
656         CPPFLAGS="$saved_CPPFLAGS"
657     fi
658 fi
659
660 dnl ---------------------------------------------------------------------------
661 dnl -- VA-API                                                                --
662 dnl ---------------------------------------------------------------------------
663
664 dnl Core API
665 LIBVA_PKGNAME="libva"
666 PKG_CHECK_MODULES(LIBVA, [$LIBVA_PKGNAME >= va_api_version])
667 AC_SUBST(LIBVA_PKGNAME)
668
669 VA_VERSION=`$PKG_CONFIG --modversion libva`
670 VA_MAJOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f1`
671 VA_MINOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f2`
672 VA_MICRO_VERSION=`echo "$VA_VERSION" | cut -d'.' -f3`
673 VA_VERSION_STR="$VA_VERSION"
674
675 dnl VA/DRM API
676 HAVE_VA_DRM=0
677 if test $USE_DRM -eq 1; then
678     PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm >= va_api_drm_version],
679         [HAVE_VA_DRM=1], [USE_DRM=0])
680
681     if test $HAVE_VA_DRM -eq 1; then
682         saved_CPPFLAGS="$CPPFLAGS"
683         CPPFLAGS="$LIBVA_DRM_CFLAGS"
684         AC_CHECK_HEADERS([va/va_drm.h], [:], [HAVE_VA_DRM=0 USE_DRM=0])
685         CPPFLAGS="$saved_CPPFLAGS"
686     fi
687 fi
688
689 dnl VA/X11 API
690 HAVE_VA_X11=0
691 LIBVA_X11_PKGNAME="libva-x11"
692 if test $USE_X11 -eq 1; then
693     PKG_CHECK_MODULES(LIBVA_X11, [$LIBVA_X11_PKGNAME >= va_api_x11_version],
694         [HAVE_VA_X11=1], [USE_X11=0])
695 fi
696 AC_SUBST(LIBVA_X11_PKGNAME)
697
698 dnl Check for va_dec_jpeg.h header
699 saved_CPPFLAGS="$CPPFLAGS"
700 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
701 AC_CHECK_HEADERS([va/va_dec_jpeg.h], [], [], [#include <va/va.h>])
702 CPPFLAGS="$saved_CPPFLAGS"
703
704 dnl Check for JPEG decoding API (0.32.1+)
705 USE_JPEG_DECODER=0
706 AC_CACHE_CHECK([for JPEG decoding API],
707     ac_cv_have_jpeg_decoding_api, [
708     saved_CPPFLAGS="$CPPFLAGS"
709     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
710     saved_LIBS="$LIBS"
711     LIBS="$LIBS $LIBVA_LIBS"
712     AC_COMPILE_IFELSE(
713         [AC_LANG_PROGRAM(
714             [[#include <va/va.h>
715               #ifdef HAVE_VA_VA_DEC_JPEG_H
716               #include <va/va_dec_jpeg.h>
717               #endif
718             ]],
719             [[VAPictureParameterBufferJPEGBaseline pic_param;
720               VASliceParameterBufferJPEGBaseline slice_param;
721               VAHuffmanTableBufferJPEGBaseline huffman_table;
722               VAIQMatrixBufferJPEGBaseline iq_matrix;]])],
723         [ac_cv_have_jpeg_decoding_api="yes" USE_JPEG_DECODER=1],
724         [ac_cv_have_jpeg_decoding_api="no"]
725     )
726     CPPFLAGS="$saved_CPPFLAGS"
727     LIBS="$saved_LIBS"
728 ])
729
730 dnl Check for va_dec_vp8.h header
731 saved_CPPFLAGS="$CPPFLAGS"
732 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
733 AC_CHECK_HEADERS([va/va_dec_vp8.h], [], [], [#include <va/va.h>])
734 CPPFLAGS="$saved_CPPFLAGS"
735
736 dnl Check for VP8 decoding API (0.34+)
737 USE_VP8_DECODER=0
738 AC_CACHE_CHECK([for VP8 decoding API],
739     ac_cv_have_vp8_decoding_api, [
740     saved_CPPFLAGS="$CPPFLAGS"
741     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
742     saved_LIBS="$LIBS"
743     LIBS="$LIBS $LIBVA_LIBS"
744     AC_COMPILE_IFELSE(
745         [AC_LANG_PROGRAM(
746             [[#include <va/va.h>
747               #ifdef HAVE_VA_VA_DEC_VP8_H
748               #include <va/va_dec_vp8.h>
749               #endif
750             ]],
751             [[VAPictureParameterBufferVP8 pic_param;
752               VASliceParameterBufferVP8 slice_param;
753               VAProbabilityDataBufferVP8 prob_data;
754               VAIQMatrixBufferVP8 iq_matrix;
755               slice_param.slice_data_offset = 0;
756               slice_param.slice_data_flag = 0;]])],
757         [ac_cv_have_vp8_decoding_api="yes" USE_VP8_DECODER=1],
758         [ac_cv_have_vp8_decoding_api="no"]
759     )
760     CPPFLAGS="$saved_CPPFLAGS"
761     LIBS="$saved_LIBS"
762 ])
763
764
765 dnl Check for vpp (video post-processing) support
766 USE_VA_VPP=0
767 AC_CACHE_CHECK([for video post-postprocessing API],
768     ac_cv_have_va_vpp_api, [
769     saved_CPPFLAGS="$CPPFLAGS"
770     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
771     saved_LIBS="$LIBS"
772     LIBS="$LIBS $LIBVA_LIBS"
773     AC_COMPILE_IFELSE(
774         [AC_LANG_PROGRAM(
775             [[#include <va/va.h>
776               #include <va/va_vpp.h>]],
777             [[VADisplay va_dpy;
778               VAContextID vpp_ctx;
779               VAProcFilterType filters[VAProcFilterCount];
780               unsigned int num_filters = VAProcFilterCount;
781               vaQueryVideoProcFilters(va_dpy, vpp_ctx, filters, &num_filters);
782               ]])],
783         [ac_cv_have_va_vpp_api="yes" USE_VA_VPP=1],
784         [ac_cv_have_va_vpp_api="no"]
785     )
786     CPPFLAGS="$saved_CPPFLAGS"
787     LIBS="$saved_LIBS"
788 ])
789
790 dnl Check for encoding support
791 USE_ENCODERS=0
792 if test "$enable_encoders" = "yes"; then
793     PKG_CHECK_MODULES([LIBVA], [libva >= va_api_enc_version],
794         [HAVE_VA_ENC=1], [HAVE_VA_ENC=0])
795
796     if test $HAVE_VA_ENC -eq 1; then
797         saved_CPPFLAGS="$CPPFLAGS"
798         CPPFLAGS="$LIBVA_CFLAGS"
799         AC_CHECK_HEADERS([va/va_enc_mpeg2.h va/va_enc_h264.h],
800             [USE_ENCODERS=1], [HAVE_VA_ENC=0 USE_ENCODERS=0],
801             [#include <va/va.h>
802             ])
803         CPPFLAGS="$saved_CPPFLAGS"
804     fi
805 fi
806
807 dnl VA/Wayland API
808 if test "$enable_wayland" = "yes"; then
809     PKG_CHECK_MODULES([LIBVA_WAYLAND], [libva-wayland >= va_api_wld_version],
810         [:], [USE_WAYLAND=0])
811 fi
812
813 dnl ---------------------------------------------------------------------------
814 dnl -- Generate files and summary                                            --
815 dnl ---------------------------------------------------------------------------
816
817 case ":$USE_X11:$USE_GLX:$USE_WAYLAND:$USE_DRM:" in
818 *:1:*)
819     ;;
820 *)
821     AC_MSG_ERROR([No renderer is enabled])
822     ;;
823 esac
824
825 AC_DEFINE_UNQUOTED([USE_ENCODERS], $USE_ENCODERS,
826     [Defined to 1 if video encoders are used])
827 AM_CONDITIONAL([USE_ENCODERS], [test $USE_ENCODERS -eq 1])
828
829 AC_DEFINE_UNQUOTED(USE_VA_VPP, $USE_VA_VPP,
830     [Defined to 1 if video post-processing is used])
831 AM_CONDITIONAL(USE_VA_VPP, test $USE_VA_VPP -eq 1)
832
833 AC_DEFINE_UNQUOTED(USE_JPEG_DECODER, $USE_JPEG_DECODER,
834     [Defined to 1 if JPEG decoder is used])
835 AM_CONDITIONAL(USE_JPEG_DECODER, test $USE_JPEG_DECODER -eq 1)
836
837 AC_DEFINE_UNQUOTED(USE_VP8_DECODER, $USE_VP8_DECODER,
838     [Defined to 1 if VP8 decoder is used])
839 AM_CONDITIONAL(USE_VP8_DECODER, test $USE_VP8_DECODER -eq 1)
840
841 AC_DEFINE_UNQUOTED(USE_DRM, $USE_DRM,
842     [Defined to 1 if DRM is enabled])
843 AM_CONDITIONAL(USE_DRM, test $USE_DRM -eq 1)
844
845 AC_DEFINE_UNQUOTED(USE_X11, $USE_X11,
846     [Defined to 1 if X11 is enabled])
847 AM_CONDITIONAL(USE_X11, test $USE_X11 -eq 1)
848
849 AC_DEFINE_UNQUOTED(USE_GLX, $USE_GLX,
850     [Defined to 1 if GLX is enabled])
851 AM_CONDITIONAL(USE_GLX, test $USE_GLX -eq 1)
852
853 AC_DEFINE_UNQUOTED(USE_WAYLAND, $USE_WAYLAND,
854     [Defined to 1 if WAYLAND is enabled])
855 AM_CONDITIONAL(USE_WAYLAND, test $USE_WAYLAND -eq 1)
856
857 pkgconfigdir=${libdir}/pkgconfig
858 AC_SUBST(pkgconfigdir)
859
860 AC_CONFIG_FILES([
861     Makefile
862     debian.upstream/Makefile
863     debian.upstream/changelog
864     debian.upstream/control
865     debian.upstream/gstreamer$GST_API_VERSION-vaapi-doc.install:\
866 debian.upstream/gstreamer-vaapi-doc.install.in
867     debian.upstream/gstreamer$GST_API_VERSION-vaapi.install:\
868 debian.upstream/gstreamer-vaapi.install.in
869     debian.upstream/libgstvaapi$GST_PKG_VERSION-dev.install:\
870 debian.upstream/libgstvaapi-dev.install.in
871     debian.upstream/libgstvaapi$GST_VAAPI_MAJOR_VERSION.install:\
872 debian.upstream/libgstvaapi.install.in
873     debian.upstream/libgstvaapi-drm-$GST_VAAPI_MAJOR_VERSION.install:\
874 debian.upstream/libgstvaapi-drm.install.in
875     debian.upstream/libgstvaapi-glx-$GST_VAAPI_MAJOR_VERSION.install:\
876 debian.upstream/libgstvaapi-glx.install.in
877     debian.upstream/libgstvaapi-wayland-$GST_VAAPI_MAJOR_VERSION.install:\
878 debian.upstream/libgstvaapi-wayland.install.in
879     debian.upstream/libgstvaapi-x11-$GST_VAAPI_MAJOR_VERSION.install:\
880 debian.upstream/libgstvaapi-x11.install.in
881     docs/Makefile
882     docs/reference/Makefile
883     docs/reference/libs/Makefile
884     docs/reference/libs/libs-docs.xml
885     docs/reference/plugins/Makefile
886     docs/reference/plugins/plugins-docs.xml
887     ext/Makefile
888     ext/libvpx/Makefile
889     gst-libs/Makefile
890     gst-libs/gst/Makefile
891     gst-libs/gst/base/Makefile
892     gst-libs/gst/codecparsers/Makefile
893     gst-libs/gst/vaapi/Makefile
894     gst-libs/gst/video/Makefile
895     gst/Makefile
896     gst/vaapi/Makefile
897     patches/Makefile
898     patches/videoparsers/Makefile
899     pkgconfig/Makefile
900     pkgconfig/gstreamer-vaapi-$GST_PKG_VERSION.pc:\
901 pkgconfig/gstreamer-vaapi.pc.in
902     pkgconfig/gstreamer-vaapi-drm-$GST_PKG_VERSION.pc:\
903 pkgconfig/gstreamer-vaapi-drm.pc.in
904     pkgconfig/gstreamer-vaapi-glx-$GST_PKG_VERSION.pc:\
905 pkgconfig/gstreamer-vaapi-glx.pc.in
906     pkgconfig/gstreamer-vaapi-wayland-$GST_PKG_VERSION.pc:\
907 pkgconfig/gstreamer-vaapi-wayland.pc.in
908     pkgconfig/gstreamer-vaapi-x11-$GST_PKG_VERSION.pc:\
909 pkgconfig/gstreamer-vaapi-x11.pc.in
910     tests/Makefile
911 ])
912 AC_OUTPUT
913
914 dnl Print summary
915 yesno() {
916     test $1 -eq 1 && echo yes || echo no
917 }
918
919 VIDEO_OUTPUTS=""
920 AS_IF([test $USE_DRM -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS drm"])
921 AS_IF([test $USE_X11 -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS x11"])
922 AS_IF([test $USE_GLX -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS glx"])
923 AS_IF([test $USE_WAYLAND -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS wayland"])
924
925 echo
926 echo $PACKAGE configuration summary:
927 echo
928 echo Installation Prefix .............. : ${prefix}
929 echo GStreamer API version ............ : $GST_API_VERSION
930 echo VA-API version ................... : $VA_VERSION_STR
931 echo Video encoding ................... : $(yesno $USE_ENCODERS)
932 echo Video outputs .................... : $VIDEO_OUTPUTS
933 echo