[FFmpeg-devel] [PATCH] libavdevice: v4l2: use libv4l2 when requested.

Måns Rullgård mans
Thu May 13 22:48:28 CEST 2010


Konstantin Pavlov <thresh at altlinux.ru> writes:

> From: Konstantin Pavlov <thresh at altlinux.org>
>
> This adds support for numerous pixfmts used in web cameras through
> libv4l2.
> ---
>  configure          |    7 +++++++
>  libavdevice/v4l2.c |    9 +++++++++
>  2 files changed, 16 insertions(+), 0 deletions(-)

A review of the configure part was requested, so here it is.  Note,
however, that I still oppose using this library.

> diff --git a/configure b/configure
> index 2b206c1..b2f5c91 100755
> --- a/configure
> +++ b/configure
> @@ -181,6 +181,7 @@ External library support:
>    --enable-libschroedinger enable Dirac support via libschroedinger [no]
>    --enable-libspeex        enable Speex decoding via libspeex [no]
>    --enable-libtheora       enable Theora encoding via libtheora [no]
> +  --enable-libv4l2         enable libv4l2 support [no]
>    --enable-libvorbis       enable Vorbis encoding via libvorbis,
>                             native implementation exists [no]
>    --enable-libx264         enable H.264 encoding via x264 [no]
> @@ -926,6 +927,7 @@ CONFIG_LIST="
>      libschroedinger
>      libspeex
>      libtheora
> +    libv4l2
>      libvorbis
>      libx264
>      libxvid
> @@ -1323,6 +1325,8 @@ zmbv_encoder_select="zlib"
>  vaapi_deps="va_va_h"
>  vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
>
> +libv4l2_deps="libv4l2_h"

Unnecessary.

>  # parsers
>  h264_parser_select="golomb h264dsp"
>
> @@ -2546,6 +2550,7 @@ check_header termios.h
>  check_header vdpau/vdpau.h
>  check_header vdpau/vdpau_x11.h
>  check_header X11/extensions/XvMClib.h
> +check_header libv4l2.h

Unnecessary.

>  check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex
>
> @@ -2616,6 +2621,7 @@ enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
>                             require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
>  enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
>  enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
> +enabled libv4l2    && require  libv4l2 libv4l2.h v4l2_open $(pkg-config --libs libv4l2)

Please avoid pkg-config if possible.  Does a simple -lv4l2 (or
whatever it's called) not work properly?

>  enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
>  enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 -lm &&
>                        { check_cpp_condition x264.h "X264_BUILD >= 83" ||
> @@ -2885,6 +2891,7 @@ echo "librtmp enabled           ${librtmp-no}"
>  echo "libschroedinger enabled   ${libschroedinger-no}"
>  echo "libspeex enabled          ${libspeex-no}"
>  echo "libtheora enabled         ${libtheora-no}"
> +echo "libv4l2 enabled           ${libv4l2-no}"
>  echo "libvorbis enabled         ${libvorbis-no}"
>  echo "libx264 enabled           ${libx264-no}"
>  echo "libxvid enabled           ${libxvid-no}"
> diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
> index ce88903..85f2089 100644
> --- a/libavdevice/v4l2.c
> +++ b/libavdevice/v4l2.c
> @@ -44,6 +44,15 @@
>  #include <time.h>
>  #include <strings.h>
>
> +#if CONFIG_LIBV4L2
> +#include <libv4l2.h>
> +#define open    v4l2_open
> +#define close   v4l2_close
> +#define ioctl   v4l2_ioctl
> +#define mmap    v4l2_mmap
> +#define munmap  v4l2_munmap
> +#endif

If this isn't a hack, I don't know what is.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list