build: check for OpenGL either GLX or EGL are requested
[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], [7])
4 m4_define([gst_vaapi_micro_version], [1])
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 # Configure defaults
13 m4_define([default_glapi],              [any])
14
15 # gstreamer-vaapi library (libtool) version number
16 m4_define([gst_vaapi_lt_current],       [7])
17 m4_define([gst_vaapi_lt_current_bias],  [7])
18 m4_define([gst_vaapi_lt_revision],      [0])
19 m4_define([gst_vaapi_lt_age],           [0])
20
21 # glib version number
22 m4_define([glib_version], [2.32])
23
24 # gmodule version number
25 m4_define([gmodule_version], [2.32])
26
27 # gstreamer version number
28 m4_define([gst_version],                [1.6.3])
29 m4_define([gst_plugins_base_version],   [1.6.3])
30 m4_define([gst_plugins_bad_version],    [1.6.3])
31
32 # Wayland minimum version number
33 m4_define([wayland_api_version], [1.0.2])
34
35 # VA-API minimum version number
36 m4_define([va_api_version],     [0.30.4])
37 m4_define([va_api_enc_version], [0.34.0])
38 m4_define([va_api_drm_version], [0.33.0])
39 m4_define([va_api_x11_version], [0.31.0])
40 m4_define([va_api_wld_version], [0.33.0])
41
42 # gtk-doc version number
43 # XXX: introspection annotations require gtk-doc >= 1.12
44 m4_define([gtkdoc_version], [1.12])
45
46 AC_PREREQ([2.69])
47 AC_INIT([GStreamer VA-API Plug-ins], [gst_vaapi_version],
48   [http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],
49   [gstreamer-vaapi])
50
51 AC_CONFIG_HEADERS([config.h])
52 AC_CONFIG_SRCDIR([Makefile.am])
53 AC_CONFIG_MACRO_DIR([m4])
54 AC_CONFIG_AUX_DIR([build-aux])
55
56 AC_CANONICAL_TARGET
57
58 AM_INIT_AUTOMAKE([-Wno-portability 1.14 no-dist-gzip dist-xz tar-ustar subdir-objects])
59
60 dnl Use pretty build output
61 AM_SILENT_RULES([yes])
62
63 dnl Check for tools
64 AC_PROG_CC
65 AM_PROG_CC_C_O
66
67 AC_ARG_VAR([GIT], [Path to git program, if any])
68 AC_PATH_PROG([GIT], [git])
69 AM_CONDITIONAL([HAVE_GIT], [test -n "$GIT"])
70
71 dnl Initialize libtool
72 LT_PREREQ([2.2.6])
73 LT_INIT
74
75 AC_ARG_ENABLE([encoders],
76   AS_HELP_STRING([--enable-encoders],
77     [enable video encoders @<:@default=yes@:>@]),
78   [], [enable_encoders="yes"])
79
80 AC_ARG_ENABLE([drm],
81   AS_HELP_STRING([--enable-drm],
82     [enable DRM backend @<:@default=yes@:>@]),
83   [], [enable_drm="yes"])
84
85 AC_ARG_ENABLE([x11],
86   AS_HELP_STRING([--enable-x11],
87     [enable X11 output @<:@default=yes@:>@]),
88   [], [enable_x11="yes"])
89
90 AC_ARG_ENABLE([glx],
91   AS_HELP_STRING([--enable-glx],
92     [enable OpenGL/X11 output @<:@default=yes@:>@]),
93   [], [enable_glx="yes"])
94
95 AC_ARG_ENABLE([wayland],
96   AC_HELP_STRING([--enable-wayland],
97     [enable Wayland output @<:@default=yes@:>@]),
98   [], [enable_wayland="yes"])
99
100 AC_ARG_ENABLE([egl],
101   AS_HELP_STRING([--enable-egl],
102     [enable EGL output @<:@default=yes@:>@]),
103   [], [enable_egl="yes"])
104
105 AC_ARG_WITH([glapi],
106   AS_HELP_STRING([--with-glapi=APIs],
107     [build with the specified OpenGL APIs @<:@default=default_glapi@:>@]),
108   [GLAPI="$with_glapi"], [GLAPI=default_glapi])
109
110 dnl Check for basic libraries
111 AC_CHECK_LIB([m], [tan])
112
113 dnl Check for Gtk doc
114 GTKDOC_VERSION=gtkdoc_version
115 # gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line
116 m4_ifdef([GTK_DOC_CHECK], [
117 GTK_DOC_CHECK([$GTKDOC_VERSION], [--flavour no-tmpl])], [
118 AM_CONDITIONAL([ENABLE_GTK_DOC], [false])])
119
120 dnl Check for GLib
121 GLIB_VERSION_REQUIRED=glib_version
122 PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $GLIB_VERSION_REQUIRED])
123
124 dnl Check to see if dlopen is in default libraries (like Solaris, which
125 dnl has it in libc), or if libdl is needed to get it.
126 AC_CHECK_FUNC([dlopen], [], [
127   AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
128 AC_SUBST([DLOPEN_LIBS])
129
130 dnl ---------------------------------------------------------------------------
131 dnl -- GStreamer                                                             --
132 dnl ---------------------------------------------------------------------------
133 GST_PKG_VERSION="1.0"
134 AC_SUBST([GST_PKG_VERSION])
135 AC_DEFINE_UNQUOTED([GST_PKG_VERSION_S], ["$GST_PKG_VERSION"],
136   [Defined to the string representation of GStreamer API version])
137
138 dnl Versions for GStreamer and plugins-base
139 GST_VERSION_REQUIRED=gst_version
140 GST_PLUGINS_BASE_VERSION_REQUIRED=gst_plugins_base_version
141 GST_PLUGINS_BAD_VERSION_REQUIRED=gst_plugins_bad_version
142
143 dnl GStreamer Core
144 PKG_CHECK_MODULES([GST],
145   [gstreamer-$GST_PKG_VERSION >= $GST_VERSION_REQUIRED])
146
147 AC_MSG_CHECKING([for GStreamer API version])
148 gst_api_version=`$PKG_CONFIG --modversion "gstreamer-$GST_PKG_VERSION"`
149 gst_major_version=`echo "$gst_api_version" | cut -d'.' -f1`
150 gst_minor_version=`echo "$gst_api_version" | cut -d'.' -f2`
151 GST_API_VERSION="${gst_major_version}.${gst_minor_version}"
152 AC_MSG_RESULT([$GST_API_VERSION])
153 AC_DEFINE_UNQUOTED([GST_API_VERSION_S], ["$GST_API_VERSION"],
154   [Defined to the string representation of GStreamer version])
155
156 PKG_CHECK_MODULES([GST_BASE],
157   [gstreamer-base-$GST_PKG_VERSION >= $GST_VERSION_REQUIRED])
158
159 dnl GStreamer -base plugins
160 PKG_CHECK_MODULES([GST_PLUGINS_BASE],
161   [gstreamer-plugins-base-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
162
163 dnl ... gst_dmabuf_memory_get_fd (gstreamer-allocators)
164 PKG_CHECK_MODULES([GST_ALLOCATORS],
165   [gstreamer-allocators-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
166
167 dnl ... GstVideoOverlayComposition (gstreamer-video)
168 PKG_CHECK_MODULES([GST_VIDEO],
169   [gstreamer-video-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
170
171 dnl ... GStreamer base utils (gstreamer-pbutils)
172 PKG_CHECK_MODULES([GST_PBUTILS],
173   [gstreamer-pbutils-$GST_PKG_VERSION >= $GST_PLUGINS_BASE_VERSION_REQUIRED])
174
175 dnl ... bitstream parsers
176 PKG_CHECK_MODULES([GST_CODEC_PARSERS],
177   [gstreamer-codecparsers-$GST_PKG_VERSION >= $GST_PLUGINS_BAD_VERSION_REQUIRED])
178
179 dnl ... VP9 parser, with required extensions
180 HAVE_GST_VP9_PARSER=0
181 AC_CACHE_CHECK([for VP9 parser],
182     ac_cv_have_gst_vp9_parser, [
183     saved_CPPFLAGS="$CPPFLAGS"
184     CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
185     saved_LIBS="$LIBS"
186     LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
187     AC_COMPILE_IFELSE(
188         [AC_LANG_PROGRAM(
189             [[#include <gst/codecparsers/gstvp9parser.h>]],
190             [[GstVp9FrameHdr frame_hdr;]])],
191         [ac_cv_have_gst_vp9_parser="yes" HAVE_GST_VP9_PARSER=1],
192         [ac_cv_have_gst_vp9_parser="no"]
193     )
194     CPPFLAGS="$saved_CPPFLAGS"
195     LIBS="$saved_LIBS"
196 ])
197
198 AS_IF([test "x$enable_glx" = "xyes" -o "x$enable_egl" = "xyes"],
199   [enable_opengl="yes"], [enable_opengl="no"])
200
201 dnl ... opengl helper libraries
202 HAVE_GSTGL=0
203 if test "x$enable_opengl" = "xyes"; then
204     PKG_CHECK_MODULES([GST_GL],
205         [gstreamer-gl-$GST_PKG_VERSION >= $GST_PLUGINS_BAD_VERSION_REQUIRED],
206         [HAVE_GSTGL=1], [HAVE_GSTGL=0])
207 fi
208
209 if test $HAVE_GSTGL -eq 1; then
210     AC_CACHE_CHECK([for GStreamer OpenGL helper libraries],
211         [ac_cv_have_gst_gl_helpers], [
212         saved_CPPFLAGS="$CPPFLAGS"
213         CPPFLAGS="$CPPFLAGS $GST_GL_CFLAGS $GST_VIDEO_CFLAGS"
214         saved_LIBS="$LIBS"
215         LIBS="$saved_LIBS"
216         AC_CHECK_HEADERS([gst/gl/gl.h], [:], [HAVE_GSTGL=0])
217         AC_COMPILE_IFELSE(
218             [AC_LANG_PROGRAM(
219                 [[#include <gst/gl/gl.h>]],
220                 [[GstGLContext gl_context;]])],
221             [ac_cv_have_gst_gl_helpers="yes"],
222             [ac_cv_have_gst_gl_helpers="no" HAVE_GSTGL=0]
223         )
224         CPPFLAGS="$saved_CPPFLAGS"
225         LIBS="$saved_LIBS"
226     ])
227 fi
228 AM_CONDITIONAL([USE_GST_GL_HELPERS], [test $HAVE_GSTGL -eq 1])
229 AC_DEFINE_UNQUOTED([USE_GST_GL_HELPERS], [$HAVE_GSTGL],
230   [Defined to 1 if GStreamer OpenGL helper libraries are available])
231
232 if test "x$enable_egl" = "xyes" -a $HAVE_GSTGL -ne 1; then
233   AC_MSG_WARN([GStreamer/GL helper libraries not found, disabling EGL support])
234   enable_egl="no"
235 fi
236
237 GST_VAAPI_MAJOR_VERSION=`expr gst_vaapi_lt_current - gst_vaapi_lt_current_bias`
238 AC_DEFINE_UNQUOTED([GST_VAAPI_MAJOR_VERSION_S], ["$GST_VAAPI_MAJOR_VERSION"],
239   [Defined to the string representation of gstreamer-vaapi major version])
240
241 dnl GST_ALL_LDFLAGS:
242 dnl LDFLAGS really should only contain flags, not libs - they get added before
243 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
244 GST_ALL_LDFLAGS="-no-undefined"
245 AC_SUBST([GST_ALL_LDFLAGS])
246
247 dnl GST_PLUGIN_LDFLAGS:
248 dnl this really should only contain flags, not libs - they get added before
249 dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
250 GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^([_]*gst_plugin_desc|gst_.*_get_type)\$\$' $GST_ALL_LDFLAGS"
251 AC_SUBST([GST_PLUGIN_LDFLAGS])
252
253 dnl Check for the GStreamer plugins directory
254 AC_ARG_VAR([GST_PLUGIN_PATH_1_0],
255   [installation path for gstreamer-vaapi plugin elements for GStreamer 1.0])
256 AC_MSG_CHECKING([for GStreamer plugins directory])
257 if test -n "$GST_PLUGIN_PATH_1_0"; then
258     GST_PLUGINS_DIR="$GST_PLUGIN_PATH_1_0"
259 else
260     GST_PLUGINS_DIR=`$PKG_CONFIG gstreamer-$GST_PKG_VERSION --variable pluginsdir`
261     if test -z "$GST_PLUGINS_DIR"; then
262         GST_PLUGINS_DIR="\$(libdir)/gstreamer-$GST_PKG_VERSION"
263     fi
264 fi
265 AC_MSG_RESULT([$GST_PLUGINS_DIR])
266 plugindir="$GST_PLUGINS_DIR"
267 AC_SUBST([plugindir])
268
269 dnl ---------------------------------------------------------------------------
270 dnl -- Renderers                                                             --
271 dnl ---------------------------------------------------------------------------
272
273 dnl Check for DRM/libudev
274 USE_DRM=0
275 if test "x$enable_drm" = "xyes"; then
276     PKG_CHECK_MODULES(DRM, [libdrm], [USE_DRM=1], [USE_DRM=0])
277     PKG_CHECK_MODULES(UDEV, [libudev], [:], [USE_DRM=0])
278
279     if test $USE_DRM -eq 1; then
280         saved_CPPFLAGS="$CPPFLAGS"
281         CPPFLAGS="$CPPFLAGS $DRM_CFLAGS"
282         AC_CHECK_HEADERS([drm_fourcc.h], [:], [USE_DRM=0])
283         CPPFLAGS="$saved_CPPFLAGS"
284     fi
285 fi
286
287 dnl Check for X11
288 USE_X11=0
289 if test "x$enable_x11" = "xyes"; then
290     PKG_CHECK_MODULES(X11, [x11], [USE_X11=1], [USE_X11=0])
291     if test $USE_X11 -eq 1; then
292         saved_CPPFLAGS="$CPPFLAGS"
293         CPPFLAGS="$CPPFLAGS $X11_CFLAGS"
294         AC_CHECK_HEADERS([X11/Xlib.h X11/Xutil.h X11/Xatom.h], [:], [USE_X11=0])
295         CPPFLAGS="$saved_CPPFLAGS"
296     fi
297 fi
298
299 dnl Check for XKB library
300 HAVE_XKBLIB=0
301 if test $USE_X11 -eq 1; then
302     AC_CHECK_HEADERS([X11/XKBlib.h], [HAVE_XKBLIB=1], [:])
303 fi
304 if test $HAVE_XKBLIB -eq 1; then
305     AC_DEFINE_UNQUOTED([HAVE_XKBLIB], 1,
306         [Defined to 1 if the XKB extension exists.])
307 fi
308
309 dnl Check for XRandR
310 HAVE_XRANDR=0
311 if test $USE_X11 -eq 1; then
312     HAVE_XRANDR=1
313     PKG_CHECK_MODULES([XRANDR], [xrandr], [:], [HAVE_XRANDR=0])
314     if test $HAVE_XRANDR -eq 1; then
315         saved_CPPFLAGS="$CPPFLAGS"
316         CPPFLAGS="$CPPFLAGS $XRANDR_CFLAGS"
317         AC_CHECK_HEADERS([X11/extensions/Xrandr.h], [:], [HAVE_XRANDR=0])
318         CPPFLAGS="$saved_CPPFLAGS"
319     fi
320 fi
321 if test $HAVE_XRANDR -eq 1; then
322     AC_DEFINE_UNQUOTED(HAVE_XRANDR, 1,
323         [Defined to 1 if the XRandR extension exists.])
324 fi
325
326 dnl Check for XRender
327 HAVE_XRENDER=0
328 if test $USE_X11 -eq 1; then
329     HAVE_XRENDER=1
330     PKG_CHECK_MODULES([XRENDER], [xrender], [:], [HAVE_XRENDER=0])
331     if test $HAVE_XRENDER -eq 1; then
332         saved_CPPFLAGS="$CPPFLAGS"
333         CPPFLAGS="$CPPFLAGS $XRENDER_CFLAGS"
334         AC_CHECK_HEADERS([X11/extensions/Xrender.h], [:], [HAVE_XRENDER=0])
335         CPPFLAGS="$saved_CPPFLAGS"
336     fi
337 fi
338 if test $HAVE_XRENDER -eq 1; then
339     AC_DEFINE_UNQUOTED([HAVE_XRENDER], [1],
340         [Defined to 1 if the XRender extension exists.])
341 fi
342
343 dnl OpenGL
344 GLES_VERSION_MASK=0
345
346 HAVE_GL=0
347 if test "x$enable_opengl" = "xyes"; then
348 case ",$GLAPI," in
349 (*,any,*|*,gl,*)
350     HAVE_GL=1
351     PKG_CHECK_MODULES([GL], [gl], [:], [HAVE_GL=0])
352     saved_CPPFLAGS="$CPPFLAGS"
353     CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
354     AC_CHECK_HEADERS([GL/gl.h GL/glext.h], [:], [HAVE_GL=0], [
355 #ifdef HAVE_GL_GL_H
356 # include <GL/gl.h>
357 #endif
358     ])
359     CPPFLAGS="$saved_CPPFLAGS"
360     ;;
361 esac
362 fi
363 GLES_VERSION_MASK=`expr $GLES_VERSION_MASK "+" $HAVE_GL "*" 1`
364
365 dnl OpenGL|ESv2
366 HAVE_GLESv2=0
367 if test "x$enable_opengl" = "xyes"; then
368 case ",$GLAPI," in
369 (*,any,*|*,gles2,*)
370     HAVE_GLESv2=1
371     PKG_CHECK_MODULES([GLES2], [glesv2], [:], [HAVE_GLESv2=0])
372     saved_CPPFLAGS="$CPPFLAGS"
373     CPPFLAGS="$CPPFLAGS $GLES2_CFLAGS"
374     AC_CHECK_HEADERS([GLES2/gl2.h GLES2/gl2ext.h], [:],
375         [HAVE_GLESv2=0], [
376 #ifdef HAVE_GLES2_GL2_H
377 # include <GLES2/gl2.h>
378 #endif
379     ])
380     CPPFLAGS="$saved_CPPFLAGS"
381     ;;
382 esac
383 fi
384 GLES_VERSION_MASK=`expr $GLES_VERSION_MASK "+" $HAVE_GLESv2 "*" 4`
385
386 dnl OpenGL|ESv3
387 HAVE_GLESv3=0
388 if test "x$enable_opengl" = "xyes"; then
389 case ",$GLAPI," in
390 (*,any,*|*,gles3,*)
391     HAVE_GLESv3=1
392     PKG_CHECK_MODULES([GLES3], [glesv2], [:], [HAVE_GLESv3=0])
393     saved_CPPFLAGS="$CPPFLAGS"
394     CPPFLAGS="$CPPFLAGS $GLES3_CFLAGS"
395     AC_CHECK_HEADERS([GLES3/gl3.h GLES3/gl3ext.h GLES2/gl2ext.h], [:],
396         [HAVE_GLESv3=0], [
397 #ifdef HAVE_GLES3_GL3_H
398 # include <GLES3/gl3.h>
399 #endif
400     ])
401     CPPFLAGS="$saved_CPPFLAGS"
402     ;;
403 esac
404 fi
405 GLES_VERSION_MASK=`expr $GLES_VERSION_MASK "+" $HAVE_GLESv3 "*" 8`
406
407 dnl ... GLX
408 USE_GLX=0
409 if test "x$enable_glx" = "xyes" -a $HAVE_GL -eq 1 -a $USE_X11 -eq 1; then
410     USE_GLX=1
411     saved_CPPFLAGS="$CPPFLAGS"
412     saved_LIBS="$LIBS"
413     CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
414     LIBS="$LIBS $GL_LIBS"
415     AC_CHECK_HEADERS([GL/glx.h], [:], [USE_GLX=0], [
416 #ifdef HAVE_GL_GL_H
417 # include <GL/gl.h>
418 #endif
419     ])
420     AC_CHECK_LIB([GL], [glXCreateContext], [:], [USE_GLX=0])
421     CPPFLAGS="$saved_CPPFLAGS"
422     LIBS="$saved_LIBS"
423 fi
424
425 dnl ... EGL
426 USE_EGL=0
427 if test "x$enable_egl" = "xyes" -a $GLES_VERSION_MASK -ne 0; then
428     USE_EGL=1
429     PKG_CHECK_MODULES([EGL], [egl], [:], [USE_EGL=0])
430     saved_CPPFLAGS="$CPPFLAGS"
431     saved_LIBS="$LIBS"
432     AC_CHECK_HEADERS([EGL/egl.h], [:], [USE_EGL=0])
433     AC_CHECK_LIB([EGL], [eglGetDisplay], [:], [USE_EGL=0])
434     CPPFLAGS="$saved_CPPFLAGS"
435     LIBS="$saved_LIBS"
436
437     dnl Check for GMODULE
438     GMODULE_VERSION_REQUIRED=gmodule_version
439     PKG_CHECK_MODULES([GMODULE], [gmodule-2.0 >= $GMODULE_VERSION_REQUIRED])
440 fi
441
442 dnl Check for Wayland
443 USE_WAYLAND=0
444 if test "x$enable_wayland" = "xyes"; then
445     PKG_CHECK_MODULES(WAYLAND, [wayland-client >= wayland_api_version],
446         [USE_WAYLAND=1], [USE_WAYLAND=0])
447
448     if test $USE_WAYLAND -eq 1; then
449         saved_CPPFLAGS="$CPPFLAGS"
450         CPPFLAGS="$CPPFLAGS $WAYLAND_CFLAGS"
451         AC_CHECK_HEADERS([wayland-client.h], [:], [USE_WAYLAND=0])
452         CPPFLAGS="$saved_CPPFLAGS"
453     fi
454 fi
455
456 dnl ---------------------------------------------------------------------------
457 dnl -- VA-API                                                                --
458 dnl ---------------------------------------------------------------------------
459
460 dnl Core API
461 PKG_CHECK_MODULES([LIBVA], [libva >= va_api_version])
462 VA_VERSION_STR=`$PKG_CONFIG --modversion libva`
463
464 dnl VA/DRM API
465 HAVE_VA_DRM=0
466 if test $USE_DRM -eq 1; then
467     PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm >= va_api_drm_version],
468         [HAVE_VA_DRM=1], [USE_DRM=0])
469
470     if test $HAVE_VA_DRM -eq 1; then
471         saved_CPPFLAGS="$CPPFLAGS"
472         CPPFLAGS="$LIBVA_DRM_CFLAGS"
473         AC_CHECK_HEADERS([va/va_drm.h], [:], [HAVE_VA_DRM=0 USE_DRM=0])
474         CPPFLAGS="$saved_CPPFLAGS"
475     fi
476 fi
477
478 dnl VA/X11 API
479 if test $USE_X11 -eq 1; then
480   PKG_CHECK_MODULES(LIBVA_X11, [libva-x11 >= va_api_x11_version],
481     [], [USE_X11=0])
482 fi
483
484 dnl Check for va_dec_jpeg.h header
485 saved_CPPFLAGS="$CPPFLAGS"
486 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
487 AC_CHECK_HEADERS([va/va_dec_jpeg.h], [], [], [#include <va/va.h>])
488 CPPFLAGS="$saved_CPPFLAGS"
489
490 dnl Check for JPEG decoding API (0.32.1+)
491 USE_JPEG_DECODER=0
492 AC_CACHE_CHECK([for JPEG decoding API],
493     ac_cv_have_jpeg_decoding_api, [
494     saved_CPPFLAGS="$CPPFLAGS"
495     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
496     saved_LIBS="$LIBS"
497     LIBS="$LIBS $LIBVA_LIBS"
498     AC_COMPILE_IFELSE(
499         [AC_LANG_PROGRAM(
500             [[#include <va/va.h>
501               #ifdef HAVE_VA_VA_DEC_JPEG_H
502               #include <va/va_dec_jpeg.h>
503               #endif
504             ]],
505             [[VAPictureParameterBufferJPEGBaseline pic_param;
506               VASliceParameterBufferJPEGBaseline slice_param;
507               VAHuffmanTableBufferJPEGBaseline huffman_table;
508               VAIQMatrixBufferJPEGBaseline iq_matrix;]])],
509         [ac_cv_have_jpeg_decoding_api="yes" USE_JPEG_DECODER=1],
510         [ac_cv_have_jpeg_decoding_api="no"]
511     )
512     CPPFLAGS="$saved_CPPFLAGS"
513     LIBS="$saved_LIBS"
514 ])
515
516 dnl Check for va_dec_vp8.h header
517 saved_CPPFLAGS="$CPPFLAGS"
518 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
519 AC_CHECK_HEADERS([va/va_dec_vp8.h], [], [], [#include <va/va.h>])
520 CPPFLAGS="$saved_CPPFLAGS"
521
522 dnl Check for VP8 decoding API (0.34+)
523 USE_VP8_DECODER=0
524 AC_CACHE_CHECK([for VP8 decoding API],
525     ac_cv_have_vp8_decoding_api, [
526     saved_CPPFLAGS="$CPPFLAGS"
527     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
528     saved_LIBS="$LIBS"
529     LIBS="$LIBS $LIBVA_LIBS"
530     AC_COMPILE_IFELSE(
531         [AC_LANG_PROGRAM(
532             [[#include <va/va.h>
533               #ifdef HAVE_VA_VA_DEC_VP8_H
534               #include <va/va_dec_vp8.h>
535               #endif
536             ]],
537             [[VAPictureParameterBufferVP8 pic_param;
538               VASliceParameterBufferVP8 slice_param;
539               VAProbabilityDataBufferVP8 prob_data;
540               VAIQMatrixBufferVP8 iq_matrix;
541               slice_param.slice_data_offset = 0;
542               slice_param.slice_data_flag = 0;]])],
543         [ac_cv_have_vp8_decoding_api="yes" USE_VP8_DECODER=1],
544         [ac_cv_have_vp8_decoding_api="no"]
545     )
546     CPPFLAGS="$saved_CPPFLAGS"
547     LIBS="$saved_LIBS"
548 ])
549
550 dnl Check for va_dec_vp9.h header
551 saved_CPPFLAGS="$CPPFLAGS"
552 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
553 AC_CHECK_HEADERS([va/va_dec_vp9.h], [], [], [#include <va/va.h>])
554 CPPFLAGS="$saved_CPPFLAGS"
555
556 dnl Check for VP9 decoding API (0.37+)
557 USE_VP9_DECODER=0
558 AC_CACHE_CHECK([for VP9 decoding API],
559     ac_cv_have_vp9_decoding_api, [
560     saved_CPPFLAGS="$CPPFLAGS"
561     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
562     saved_LIBS="$LIBS"
563     LIBS="$LIBS $LIBVA_LIBS"
564     AC_COMPILE_IFELSE(
565         [AC_LANG_PROGRAM(
566             [[#include <va/va.h>
567               #ifdef HAVE_VA_VA_DEC_VP9_H
568               #include <va/va_dec_vp9.h>
569               #endif
570             ]],
571             [[VADecPictureParameterBufferVP9 pic_param;
572               VASliceParameterBufferVP9 slice_param;
573               VASegmentParameterVP9 seg_param;
574               slice_param.slice_data_offset = 0;
575               slice_param.slice_data_flag = 0;]])],
576         [ac_cv_have_vp9_decoding_api="yes" USE_VP9_DECODER=$HAVE_GST_VP9_PARSER],
577         [ac_cv_have_vp9_decoding_api="no"]
578     )
579     CPPFLAGS="$saved_CPPFLAGS"
580     LIBS="$saved_LIBS"
581 ])
582
583 dnl Check for va_dec_hevc.h header
584 saved_CPPFLAGS="$CPPFLAGS"
585 CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
586 AC_CHECK_HEADERS([va/va_dec_hevc.h], [], [], [#include <va/va.h>])
587 CPPFLAGS="$saved_CPPFLAGS"
588
589 dnl Check for HEVC decoding API (0.38+)
590 USE_HEVC_DECODER=0
591 AC_CACHE_CHECK([for HEVC decoding API],
592     ac_cv_have_hevc_decoding_api, [
593     saved_CPPFLAGS="$CPPFLAGS"
594     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
595     saved_LIBS="$LIBS"
596     LIBS="$LIBS $LIBVA_LIBS"
597     AC_COMPILE_IFELSE(
598         [AC_LANG_PROGRAM(
599             [[#include <va/va.h>
600               #ifdef HAVE_VA_VA_DEC_HEVC_H
601               #include <va/va_dec_hevc.h>
602               #endif
603             ]],
604             [[VAPictureParameterBufferHEVC pic_param;
605               VASliceParameterBufferHEVC slice_param;
606               VAIQMatrixBufferHEVC iq_matrix;
607               slice_param.slice_data_offset = 0;
608               slice_param.slice_data_flag = 0;]])],
609         [ac_cv_have_hevc_decoding_api="yes" USE_HEVC_DECODER=1],
610         [ac_cv_have_hevc_decoding_api="no"]
611     )
612     CPPFLAGS="$saved_CPPFLAGS"
613     LIBS="$saved_LIBS"
614 ])
615
616 dnl Check for vpp (video post-processing) support
617 USE_VA_VPP=0
618 AC_CACHE_CHECK([for video post-postprocessing API],
619     ac_cv_have_va_vpp_api, [
620     saved_CPPFLAGS="$CPPFLAGS"
621     CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
622     saved_LIBS="$LIBS"
623     LIBS="$LIBS $LIBVA_LIBS"
624     AC_COMPILE_IFELSE(
625         [AC_LANG_PROGRAM(
626             [[#include <va/va.h>
627               #include <va/va_vpp.h>]],
628             [[VADisplay va_dpy;
629               VAContextID vpp_ctx;
630               VAProcFilterType filters[VAProcFilterCount];
631               unsigned int num_filters = VAProcFilterCount;
632               vaQueryVideoProcFilters(va_dpy, vpp_ctx, filters, &num_filters);
633               ]])],
634         [ac_cv_have_va_vpp_api="yes" USE_VA_VPP=1],
635         [ac_cv_have_va_vpp_api="no"]
636     )
637     CPPFLAGS="$saved_CPPFLAGS"
638     LIBS="$saved_LIBS"
639 ])
640
641 dnl Check for encoding support
642 USE_ENCODERS=0
643 USE_JPEG_ENCODER=0
644 USE_VP8_ENCODER=0
645 USE_H265_ENCODER=0
646 if test "x$enable_encoders" = "xyes"; then
647     PKG_CHECK_MODULES([LIBVA], [libva >= va_api_enc_version],
648         [HAVE_VA_ENC=1], [HAVE_VA_ENC=0])
649
650     if test $HAVE_VA_ENC -eq 1; then
651         saved_CPPFLAGS="$CPPFLAGS"
652         CPPFLAGS="$LIBVA_CFLAGS"
653         AC_CHECK_HEADERS([va/va_enc_mpeg2.h va/va_enc_h264.h],
654             [USE_ENCODERS=1], [HAVE_VA_ENC=0 USE_ENCODERS=0],
655             [#include <va/va.h>
656             ])
657
658         dnl Check for JPEG Encoding API (0.37.0+)
659         AC_CHECK_HEADERS([va/va_enc_jpeg.h],
660             [USE_JPEG_ENCODER=1], [],
661             [#include <va/va.h>
662             ])
663         AC_CACHE_CHECK([for JPEG encoding API],
664             ac_cv_have_jpeg_encoding_api, [
665             saved_CPPFLAGS="$CPPFLAGS"
666             CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
667             saved_LIBS="$LIBS"
668             LIBS="$LIBS $LIBVA_LIBS"
669             AC_COMPILE_IFELSE(
670                 [AC_LANG_PROGRAM(
671                     [[#include <va/va.h>
672                       #ifdef HAVE_VA_VA_ENC_JPEG_H
673                       #include <va/va_enc_jpeg.h>
674                       #endif
675                     ]],
676                     [[VAEncPictureParameterBufferJPEG pic_param;
677                       VAEncSliceParameterBufferJPEG slice_param;
678                       VAQMatrixBufferJPEG q_matrix;]])],
679                 [ac_cv_have_jpeg_encoding_api="yes" USE_JPEG_ENCODER=1],
680                 [ac_cv_have_jpeg_encoding_api="no"]
681             )
682             CPPFLAGS="$saved_CPPFLAGS"
683             LIBS="$saved_LIBS"
684         ])
685
686         dnl Check for VP8 Encoding API
687         AC_CHECK_HEADERS([va/va_enc_vp8.h],
688             [USE_VP8_ENCODER=1], [],
689             [#include <va/va.h>
690             ])
691         AC_CACHE_CHECK([for VP8 encoding API],
692             ac_cv_have_vp8_encoding_api, [
693             saved_CPPFLAGS="$CPPFLAGS"
694             CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
695             saved_LIBS="$LIBS"
696             LIBS="$LIBS $LIBVA_LIBS"
697             AC_COMPILE_IFELSE(
698                 [AC_LANG_PROGRAM(
699                     [[#include <va/va.h>
700                       #ifdef HAVE_VA_VA_ENC_VP8_H
701                       #include <va/va_enc_vp8.h>
702                       #endif
703                     ]],
704                     [[VAEncSequenceParameterBufferVP8 seq_param;
705                       VAEncPictureParameterBufferVP8 pic_param;
706                       VAQMatrixBufferVP8 q_matrix;]])],
707                 [ac_cv_have_vp8_encoding_api="yes" USE_VP8_ENCODER=1],
708                 [ac_cv_have_vp8_encoding_api="no" USE_VP8_ENCODER=0]
709             )
710             CPPFLAGS="$saved_CPPFLAGS"
711             LIBS="$saved_LIBS"
712         ])
713         CPPFLAGS="$saved_CPPFLAGS"
714
715         dnl Check for H265/HEVC Encoding API
716         AC_CHECK_HEADERS([va/va_enc_hevc.h],
717             [USE_H265_ENCODER=1], [],
718             [#include <va/va.h>
719             ])
720         AC_CACHE_CHECK([for HEVC encoding API],
721             ac_cv_have_hevc_encoding_api, [
722             saved_CPPFLAGS="$CPPFLAGS"
723             CPPFLAGS="$CPPFLAGS $LIBVA_CFLAGS"
724             saved_LIBS="$LIBS"
725             LIBS="$LIBS $LIBVA_LIBS"
726             AC_COMPILE_IFELSE(
727                 [AC_LANG_PROGRAM(
728                     [[#include <va/va.h>
729                       #ifdef HAVE_VA_VA_ENC_HEVC_H
730                       #include <va/va_enc_hevc.h>
731                       #endif
732                     ]],
733                     [[VAEncSequenceParameterBufferHEVC seq_param;
734                       VAEncPictureParameterBufferHEVC pic_param;
735                       VAEncSliceParameterBufferHEVC buf_param;
736                       VAQMatrixBufferHEVC q_matrix;]])],
737                 [ac_cv_have_hevc_encoding_api="yes" USE_H265_ENCODER=1],
738                 [ac_cv_have_hevc_encoding_api="no" USE_H265_ENCODER=0]
739             )
740             CPPFLAGS="$saved_CPPFLAGS"
741             LIBS="$saved_LIBS"
742         ])
743         CPPFLAGS="$saved_CPPFLAGS"
744     fi
745 fi
746
747 dnl VA/Wayland API
748 if test "x$enable_wayland" = "xyes"; then
749   PKG_CHECK_MODULES([LIBVA_WAYLAND], [libva-wayland >= va_api_wld_version],
750     [], [USE_WAYLAND=0])
751 fi
752
753 dnl ---------------------------------------------------------------------------
754 dnl -- Generate files and summary                                            --
755 dnl ---------------------------------------------------------------------------
756
757 case ":$USE_X11:$USE_GLX:$USE_EGL:$USE_WAYLAND:$USE_DRM:" in
758 *:1:*) ;;
759 *) AC_MSG_ERROR([No renderer is enabled]) ;;
760 esac
761
762 AC_DEFINE_UNQUOTED([USE_ENCODERS], [$USE_ENCODERS],
763   [Defined to 1 if video encoders are used])
764 AM_CONDITIONAL([USE_ENCODERS], [test $USE_ENCODERS -eq 1])
765
766 AC_DEFINE_UNQUOTED([USE_JPEG_ENCODER], [$USE_JPEG_ENCODER],
767   [Defined to 1 if JPEG encoder is used])
768 AM_CONDITIONAL([USE_JPEG_ENCODER], [test $USE_JPEG_ENCODER -eq 1])
769
770 AC_DEFINE_UNQUOTED([USE_VP8_ENCODER], [$USE_VP8_ENCODER],
771   [Defined to 1 if VP8 encoder is used])
772 AM_CONDITIONAL([USE_VP8_ENCODER], [test $USE_VP8_ENCODER -eq 1])
773
774 AC_DEFINE_UNQUOTED([USE_H265_ENCODER], [$USE_H265_ENCODER],
775   [Defined to 1 if H265 encoder is used])
776 AM_CONDITIONAL([USE_H265_ENCODER], [test $USE_H265_ENCODER -eq 1])
777
778 AC_DEFINE_UNQUOTED([USE_VA_VPP], [$USE_VA_VPP],
779   [Defined to 1 if video post-processing is used])
780 AM_CONDITIONAL([USE_VA_VPP], [test $USE_VA_VPP -eq 1])
781
782 AC_DEFINE_UNQUOTED([USE_JPEG_DECODER], [$USE_JPEG_DECODER],
783   [Defined to 1 if JPEG decoder is used])
784 AM_CONDITIONAL([USE_JPEG_DECODER], [test $USE_JPEG_DECODER -eq 1])
785
786 AC_DEFINE_UNQUOTED([USE_VP8_DECODER], [$USE_VP8_DECODER],
787   [Defined to 1 if VP8 decoder is used])
788 AM_CONDITIONAL([USE_VP8_DECODER], [test $USE_VP8_DECODER -eq 1])
789
790 AC_DEFINE_UNQUOTED([USE_VP9_DECODER], [$USE_VP9_DECODER],
791   [Defined to 1 if VP9 decoder is used])
792 AM_CONDITIONAL([USE_VP9_DECODER], [test $USE_VP9_DECODER -eq 1])
793
794 AC_DEFINE_UNQUOTED([USE_HEVC_DECODER], [$USE_HEVC_DECODER],
795   [Defined to 1 if HEVC decoder is used])
796 AM_CONDITIONAL([USE_HEVC_DECODER], [test $USE_HEVC_DECODER -eq 1])
797
798 AC_DEFINE_UNQUOTED([USE_DRM], [$USE_DRM],
799   [Defined to 1 if DRM is enabled])
800 AM_CONDITIONAL([USE_DRM], [test $USE_DRM -eq 1])
801
802 AC_DEFINE_UNQUOTED([USE_X11], [$USE_X11],
803   [Defined to 1 if X11 is enabled])
804 AM_CONDITIONAL([USE_X11], [test $USE_X11 -eq 1])
805
806 AC_DEFINE_UNQUOTED([USE_GLX], [$USE_GLX],
807   [Defined to 1 if GLX is enabled])
808 AM_CONDITIONAL([USE_GLX], [test $USE_GLX -eq 1])
809
810 AC_DEFINE_UNQUOTED([USE_EGL], [$USE_EGL],
811   [Defined to 1 if EGL is enabled])
812 AM_CONDITIONAL([USE_EGL], [test $USE_EGL -eq 1])
813
814 AC_DEFINE_UNQUOTED([USE_GLES_VERSION_MASK], [$GLES_VERSION_MASK],
815   [Defined to the set of enabled OpenGL ES APIs])
816
817 AC_DEFINE_UNQUOTED([USE_WAYLAND], [$USE_WAYLAND],
818   [Defined to 1 if WAYLAND is enabled])
819 AM_CONDITIONAL([USE_WAYLAND], [test $USE_WAYLAND -eq 1])
820
821 AC_CONFIG_FILES([
822     Makefile
823     docs/Makefile
824     docs/reference/Makefile
825     docs/reference/plugins/Makefile
826     docs/reference/plugins/plugins-docs.xml
827     gst-libs/Makefile
828     gst-libs/gst/Makefile
829     gst-libs/gst/base/Makefile
830     gst-libs/gst/vaapi/Makefile
831     gst/Makefile
832     gst/vaapi/Makefile
833     tests/Makefile
834 ])
835 AC_OUTPUT
836
837 dnl Print summary
838 yesno() {
839   test $1 -eq 1 && echo yes || echo no
840 }
841
842 VIDEO_OUTPUTS=""
843 AS_IF([test $USE_DRM -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS drm"])
844 AS_IF([test $USE_X11 -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS x11"])
845 AS_IF([test $USE_GLX -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS glx"])
846 AS_IF([test $USE_EGL -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS egl"])
847 AS_IF([test $USE_WAYLAND -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS wayland"])
848
849 echo
850 echo $PACKAGE configuration summary:
851 echo
852 echo Installation Prefix .............. : ${prefix}
853 echo GStreamer API version ............ : $GST_API_VERSION
854 echo VA-API version ................... : $VA_VERSION_STR
855 echo Video encoding ................... : $(yesno $USE_ENCODERS)
856 echo Video outputs .................... : $VIDEO_OUTPUTS
857 echo