From: Jean-Paul Saman Date: Mon, 27 Apr 2009 10:40:50 +0000 (+0200) Subject: Use pkg-config to detect libraw1394 and libavc1394 X-Git-Url: http://git.videolan.org/?p=vlc.git;a=commitdiff_plain;h=9f0d65737e7d810205b25cbb40f0eac4c758b951 Use pkg-config to detect libraw1394 and libavc1394 --- diff --git a/configure.ac b/configure.ac index 17c1f63..1ec11f8 100644 --- a/configure.ac +++ b/configure.ac @@ -2055,120 +2055,29 @@ AC_ARG_ENABLE(dv, [ --enable-dv dv input module (default disabled)]) if test "${enable_dv}" = "yes" then - AC_ARG_WITH(dv-raw1394, - [ --with-dv-raw1394=PATH libraw1394 headers and libraries]) - AC_ARG_WITH(dv-raw1394-tree, - [ --with-dv-raw1394=PATH libraw1394 tree for static linking]) - - if test -z "${with_dv_raw1394}" -a "${with_dv_raw1394}" != "" - then - AC_MSG_CHECKING(for raw1394 headers in ${with_dv_raw1394}) - if test -f ${with_dv_raw1394}/include/libraw1394/raw1394.h - then - dnl Use ${with_dv_raw1394}/include/libraw1394/raw1394.h - AC_MSG_RESULT(yes) - VLC_ADD_PLUGIN([access_dv]) - VLC_ADD_LIBS([access_dv],[-L${with_dv_raw1394}/lib -lraw1394 -lpthread]) - VLC_ADD_CPPFLAGS([access_dv],[-I${with_dv_raw1394}/include]) - else - dnl No libraw1394 could be found, sorry - AC_MSG_RESULT(no) - AC_MSG_ERROR([cannot find ${with_dv_raw1394}/include/libraw1394/raw1394.h]) - fi - else - AC_CHECK_HEADERS(libraw1394/raw1394.h, - [ VLC_ADD_PLUGIN([access_dv]) - VLC_ADD_LIBS([access_dv],[-lraw1394 -lavc1394]) - ],[ - if test -n "${enable_dv}" - then - AC_MSG_ERROR([cannot find libraw1394 headers]) - fi - ]) - fi - - dnl Check for static linking of libraw1394 - if test -z "${with_dv_raw1394_tree}" -a "${with_dv_raw1394_tree}" != "" - then - AC_MSG_CHECKING(for libraw1394.a in ${with_dv_raw1394_tree}) - real_dv_raw1394_tree="`cd ${with_dv_raw1394_tree} 2>/dev/null && pwd`" - if test -z "${real_dv_raw1394_tree}" - then - dnl The given directory can't be found - AC_MSG_RESULT(no) - AC_MSG_ERROR([cannot cd to ${real_dv_raw1394_tree}]) - fi - if test -f "${real_dv_raw1394_tree}/src/.libs/libraw1394.a" - then - dnl Use a custom libraw1394 - AC_MSG_RESULT(${real_dv_raw1394_tree}/src/.libs/libraw1394.a) + dnl + dnl Check for libraw1394 + dnl + PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 2.0.1, + [ VLC_ADD_PLUGIN([access_dv]) - VLC_ADD_LIBS([access_dv],[-L${real_dv_raw1394_tree}/src/.libs -lraw1394]) - VLC_ADD_CPPFLAGS([access_dv],[-I${real_dv_raw1394_tree}]) - else - dnl The given libraw1394 wasn't built - AC_MSG_RESULT(no) - AC_MSG_ERROR([cannot find ${real_dv_raw1394_tree}/src/.libs/libraw1394.a, make sure you compiled libraw1394 in ${with_dv_raw1394_tree}]) - fi - fi + VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libraw1394`]) + VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libraw1394`]) + ], + [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package ?])] + ) dnl dnl Check for libavc1394 dnl - - AC_ARG_WITH(dv-avc1394, - [ --with-dv-avc1394=PATH libavc1394 headers and libraries]) - AC_ARG_WITH(dv-avc1394-tree, - [ --with-dv-avc1394=PATH libavc1394 tree for static linking]) - - if test -z "${with_dv_avc1394}" -a "${with_dv_avc1394}" != "" - then - AC_MSG_CHECKING(for avc1394 headers in ${with_dv_avc1394}) - if test -f ${with_dv_avc1394}/include/libavc1394/avc1394.h - then - dnl Use ${with_dv_avc1394}/include/libavc1394/avc1394.h - AC_MSG_RESULT(yes) - VLC_ADD_LIBS([access_dv],[-L${with_dv_avc1394}/lib -lavc1394 -lrom1394 -lpthread]) - VLC_ADD_CPPFLAGS([access_dv],[-I${with_avc1394}/include]) - else - dnl No libavc1394 could be found, sorry - AC_MSG_RESULT(no) - AC_MSG_ERROR([cannot find ${with_dv_avc1394}/include/libavc1394/avc1394.h]) - fi - else - AC_CHECK_HEADERS(libavc1394/avc1394.h, - [ VLC_ADD_LIBS([access_dv],[-lavc1394 -lrom1394 -lpthread]) - ],[ - if test -n "${enable_dv}" - then - AC_MSG_ERROR([cannot find libavc1394 headers]) - fi - ]) - fi - - dnl Check for static linking of libavc1394 - if test -z "${with_dv_avc1394_tree}" -a "${with_dv_avc1394_tree}" != "" - then - AC_MSG_CHECKING(for libavc1394.a in ${with_dv_avc1394_tree}) - real_dv_avc1394_tree="`cd ${with_dv_avc1394_tree} 2>/dev/null && pwd`" - if test -z "${real_dv_avc1394_tree}" - then - dnl The given directory can't be found - AC_MSG_RESULT(no) - AC_MSG_ERROR([cannot cd to ${real_dv_avc1394_tree}]) - fi - if test -f "${real_dv_avc1394_tree}/src/.libs/libavc1394.a" - then - dnl Use a custom libavc1394 - AC_MSG_RESULT(${real_dv_avc1394_tree}/src/.libs/libavc1394.a) - VLC_ADD_LIBS([access_dv],[-L${real_dv_avc1394_tree}/src/.libs -lavc1394 -lrom1394 -lpthread]) - VLC_ADD_CPPFLAGS([access_dv],[-I${real_dv_avc1394_tree}]) - else - dnl The given libavc1394 wasn't built - AC_MSG_RESULT(no) - AC_MSG_ERROR([cannot find ${real_dv_avc1394_tree}/src/.libs/libavc1394.a, make sure you compiled libavc1394 in ${with_dv_avc1394_tree}]) - fi - fi + PKG_CHECK_MODULES(LIBAVC1394, libavc1394 >= 0.5.3, + [ + VLC_ADD_PLUGIN([access_dv]) + VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libavc1394`]) + VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libavc1394`]) + ], + [AC_MSG_ERROR([Couldn't find libavc1394 >= 0.5.1, install libavc1394 development package ?])] + ) fi dnl From: Jean-Paul Saman Date: Tue, 12 May 2009 11:20:37 +0000 (+0200) Subject: dc1394 and dv1394: cleanup detection in configure.ac X-Git-Url: http://git.videolan.org/?p=vlc.git;a=commitdiff_plain;h=d6cc0b79ef3c7f15df5ef524b76bbbafe01e84eb dc1394 and dv1394: cleanup detection in configure.ac --- diff --git a/configure.ac b/configure.ac index 1ec11f8..41dc3c2 100644 --- a/configure.ac +++ b/configure.ac @@ -2024,28 +2024,28 @@ AC_ARG_ENABLE(dc1394, [ --enable-dc1394 dc1394 access module (default disabled)]) if test "${enable_dc1394}" = "yes" then - AC_CHECK_HEADERS(libraw1394/raw1394.h, [ - AC_CHECK_LIB( raw1394, raw1394_get_nodecount, [ - AC_CHECK_HEADERS(libdc1394/dc1394_control.h , [ -dnl AC_CHECK_LIB( dc1394_control, dc1394_setup_capture, [ - VLC_ADD_PLUGIN([dc1394]) - VLC_ADD_LIBS([dc1394],[-ldc1394_control -lraw1394]) -dnl ], -dnl [ -dnl AC_MSG_ERROR([libdc1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library]) -dnl ]) - ], - [ - AC_MSG_ERROR([libdc1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library]) - ]) + dnl + dnl Check for libraw1394 + dnl + PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 2.0.1, + [ + VLC_ADD_LIBS([dc1394],[`${PKG_CONFIG} --libs libraw1394`]) + VLC_ADD_CPPFLAGS([dc1394],[`${PKG_CONFIG} --cflags libraw1394`]) ], + [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package])] + ) + + dnl + dnl Check for libdc1394 + dnl + PKG_CHECK_MODULES(LIBDC1394, libdc1394-2 >= 2.0.2, [ - AC_MSG_ERROR([libraw1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library]) - ]) - ], - [ - AC_MSG_ERROR([libraw1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library]) - ]) + VLC_ADD_PLUGIN([dc1394]) + VLC_ADD_LIBS([dc1394],[`${PKG_CONFIG} --libs libdc1394-2`]) + VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libdc1394-2`]) + ], + [AC_MSG_ERROR([Couldn't find libdc1394 >= 2.0.2, install libdc1394 development package])] + ) fi dnl @@ -2060,11 +2060,10 @@ then dnl PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 2.0.1, [ - VLC_ADD_PLUGIN([access_dv]) VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libraw1394`]) VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libraw1394`]) ], - [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package ?])] + [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package])] ) dnl @@ -2076,7 +2075,7 @@ then VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libavc1394`]) VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libavc1394`]) ], - [AC_MSG_ERROR([Couldn't find libavc1394 >= 0.5.1, install libavc1394 development package ?])] + [AC_MSG_ERROR([Couldn't find libavc1394 >= 0.5.1, install libavc1394 development package])] ) fi From: Jean-Baptiste Kempf Date: Wed, 5 Aug 2009 19:28:49 +0000 (+0200) Subject: Simplify dc1394 and dv detection. X-Git-Url: http://git.videolan.org/gitweb.cgi?p=vlc.git;a=commitdiff_plain;h=314bd6d6494fe9b9b948532595bf081be49a46ac;hp=d9f8dcc6bedcc6526642715fc64884c58116587c Simplify dc1394 and dv detection. Be careful, while dv was updated to the new APIs, dc1394 wasn't --- diff --git a/configure.ac b/configure.ac index 9a1cafd..4d628e6 100644 --- a/configure.ac +++ b/configure.ac @@ -1931,66 +1931,11 @@ lternatively you can use --disable-live555 to disable the liveMedia plugin.]) fi dnl -dnl special access module for dc1394 input +dnl - special access module for dc1394 input +dnl - dv module: digital video module check for libraw1394 dnl -AC_ARG_ENABLE(dc1394, - [ --enable-dc1394 dc1394 access module (default disabled)]) -if test "${enable_dc1394}" = "yes" -then - dnl - dnl Check for libraw1394 - dnl - PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 2.0.1, - [ - VLC_ADD_LIBS([dc1394],[`${PKG_CONFIG} --libs libraw1394`]) - VLC_ADD_CPPFLAGS([dc1394],[`${PKG_CONFIG} --cflags libraw1394`]) - ], - [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package])] - ) - - dnl - dnl Check for libdc1394 - dnl - PKG_CHECK_MODULES(LIBDC1394, libdc1394-2 >= 2.0.2, - [ - VLC_ADD_PLUGIN([dc1394]) - VLC_ADD_LIBS([dc1394],[`${PKG_CONFIG} --libs libdc1394-2`]) - VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libdc1394-2`]) - ], - [AC_MSG_ERROR([Couldn't find libdc1394 >= 2.0.2, install libdc1394 development package])] - ) -fi - -dnl -dnl dv module: digital video module check for libraw1394 -dnl -AC_ARG_ENABLE(dv, -[ --enable-dv dv input module (default disabled)]) -if test "${enable_dv}" = "yes" -then - dnl - dnl Check for libraw1394 - dnl - PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 2.0.1, - [ - VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libraw1394`]) - VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libraw1394`]) - ], - [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package])] - ) - - dnl - dnl Check for libavc1394 - dnl - PKG_CHECK_MODULES(LIBAVC1394, libavc1394 >= 0.5.3, - [ - VLC_ADD_PLUGIN([access_dv]) - VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libavc1394`]) - VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libavc1394`]) - ], - [AC_MSG_ERROR([Couldn't find libavc1394 >= 0.5.1, install libavc1394 development package])] - ) -fi +PKG_ENABLE_MODULES_VLC([dc1394], [libraw1394 >= 2.0.1 libdc1394 >= 1.0.0], [dc1394 access module], [auto]) +PKG_ENABLE_MODULES_VLC([access_dv], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV input module], [auto]) dnl dnl dvdread module: check for libdvdread From: Jean-Baptiste Kempf Date: Wed, 5 Aug 2009 20:22:39 +0000 (+0200) Subject: Configure: update macro to deal with the case where you want --enable-foo, but the... X-Git-Url: http://git.videolan.org/gitweb.cgi?p=vlc.git;a=commitdiff_plain;h=a3c7e55ec3ce091203987f32c67f5539f5993fda;hp=314bd6d6494fe9b9b948532595bf081be49a46ac Configure: update macro to deal with the case where you want --enable-foo, but the module name is not foo. So, add a new argument that can be empty This happens for --enable-dv (access_dv) --enable-shout (stream_output_shout) --- diff --git a/configure.ac b/configure.ac index 4d628e6..e1c119e 100644 --- a/configure.ac +++ b/configure.ac @@ -945,10 +945,10 @@ AM_CONDITIONAL(HAVE_MINIZIP, [ test "${have_minizip}" = "yes" ]) dnl Check for hal -PKG_ENABLE_MODULES_VLC([HAL], [hal >= 0.5.0], [Linux HAL services discovery], [auto]) +PKG_ENABLE_MODULES_VLC([HAL], [], [hal >= 0.5.0], [Linux HAL services discovery], [auto]) dnl Check for mtp -PKG_ENABLE_MODULES_VLC([MTP],[libmtp >= 0.3.0],[MTP devices support],[auto]) +PKG_ENABLE_MODULES_VLC([MTP], [], [libmtp >= 0.3.0],[MTP devices support],[auto]) dnl Check for dbus AC_ARG_ENABLE(dbus, @@ -1676,7 +1676,7 @@ AS_IF([test "${enable_sout}" != "no"], [ AM_CONDITIONAL(ENABLE_SOUT, [test "${enable_sout}" != "no"]) dnl Check for libshout -PKG_ENABLE_MODULES_VLC([access_output_shout], [shout >= 2.1], [libshout output plugin], [auto]) +PKG_ENABLE_MODULES_VLC([shout], [access_output_shout], [shout >= 2.1], [libshout output plugin], [auto]) dnl Lua modules AC_ARG_ENABLE(lua, @@ -1731,7 +1731,7 @@ AM_CONDITIONAL(BUILD_HTTPD, [test "${enable_httpd}" != "no"]) dnl dnl libproxy support dnl -PKG_ENABLE_MODULES_VLC([LIBPROXY], [libproxy-1.0], [libproxy support], [auto]) +PKG_ENABLE_MODULES_VLC([LIBPROXY], [], [libproxy-1.0], [libproxy support], [auto]) dnl @@ -1767,7 +1767,7 @@ AS_IF([test "${enable_growl}" != "no"], [ dnl dnl Libnotify notification plugin dnl -PKG_ENABLE_MODULES_VLC([NOTIFY], [libnotify], [libnotify notification], [auto]) +PKG_ENABLE_MODULES_VLC([NOTIFY], [], [libnotify], [libnotify notification], [auto]) dnl dnl Audioscrobbler plugin @@ -1934,8 +1934,8 @@ dnl dnl - special access module for dc1394 input dnl - dv module: digital video module check for libraw1394 dnl -PKG_ENABLE_MODULES_VLC([dc1394], [libraw1394 >= 2.0.1 libdc1394 >= 1.0.0], [dc1394 access module], [auto]) -PKG_ENABLE_MODULES_VLC([access_dv], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV input module], [auto]) +PKG_ENABLE_MODULES_VLC([dc1394], [], [libraw1394 >= 2.0.1 libdc1394 >= 1.0.0], [dc1394 access module], [auto]) +PKG_ENABLE_MODULES_VLC([dv], [access_dv], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV input module], [auto]) dnl dnl dvdread module: check for libdvdread @@ -2324,7 +2324,7 @@ fi dnl dnl gnomeVFS access module dnl -PKG_ENABLE_MODULES_VLC([GNOMEVFS], [gnome-vfs-2.0], [GnomeVFS access module], [auto]) +PKG_ENABLE_MODULES_VLC([GNOMEVFS], [], [gnome-vfs-2.0], [GnomeVFS access module], [auto]) dnl Need to test libcdio and libvcdinfo for a number of things. Do it now. @@ -2561,9 +2561,9 @@ AC_CHECK_FUNCS(inet_ntop,[ dnl dnl ogg demux plugin dnl -PKG_ENABLE_MODULES_VLC([OGG], [ogg >= 1.0], [Ogg demux support], [auto]) +PKG_ENABLE_MODULES_VLC([OGG], [], [ogg >= 1.0], [Ogg demux support], [auto]) if test "${enable_sout}" != "no"; then - PKG_ENABLE_MODULES_VLC([MUX_OGG], [ogg >= 1.0], [Ogg demux support], [auto]) + PKG_ENABLE_MODULES_VLC([MUX_OGG], [], [ogg >= 1.0], [Ogg demux support], [auto]) fi dnl @@ -3207,17 +3207,17 @@ AS_IF([test "${enable_dca}" != "no"], [ dnl dnl Flac plugin dnl -PKG_ENABLE_MODULES_VLC([FLAC], [flac], [libflac decoder/encoder support], [auto]) +PKG_ENABLE_MODULES_VLC([FLAC], [], [flac], [libflac decoder/encoder support], [auto]) dnl dnl Libmpeg2 plugin dnl -PKG_ENABLE_MODULES_VLC([LIBMPEG2], [libmpeg2 > 0.3.2], [libmpeg2 decoder support], [auto]) +PKG_ENABLE_MODULES_VLC([LIBMPEG2], [], [libmpeg2 > 0.3.2], [libmpeg2 decoder support], [auto]) dnl dnl Vorbis plugin dnl -PKG_ENABLE_MODULES_VLC([VORBIS], [ogg vorbis >= 1.1 vorbisenc >= 1.1], [Vorbis decoder and encoder], [auto]) +PKG_ENABLE_MODULES_VLC([VORBIS], [], [ogg vorbis >= 1.1 vorbisenc >= 1.1], [Vorbis decoder and encoder], [auto]) dnl dnl Tremor plugin @@ -3235,7 +3235,7 @@ fi dnl dnl Speex plugin dnl -PKG_ENABLE_MODULES_VLC([SPEEX], [ogg speex >= 1.0.5], [Speex decoder support], [auto]) +PKG_ENABLE_MODULES_VLC([SPEEX], [], [ogg speex >= 1.0.5], [Speex decoder support], [auto]) dnl dnl tarkin decoder plugin @@ -3268,17 +3268,17 @@ fi dnl dnl theora decoder plugin dnl -PKG_ENABLE_MODULES_VLC([THEORA], [ogg theora >= 1.0], [experimental theora codec], [auto]) +PKG_ENABLE_MODULES_VLC([THEORA], [], [ogg theora >= 1.0], [experimental theora codec], [auto]) dnl dnl dirac encoder plugin dnl -PKG_ENABLE_MODULES_VLC([DIRAC], [dirac >= 0.10.0], [dirac encoder], [auto], [], [ -lstdc++]) +PKG_ENABLE_MODULES_VLC([DIRAC], [], [dirac >= 0.10.0], [dirac encoder], [auto]) dnl dnl schroedinger decoder plugin (for dirac format video) dnl -PKG_ENABLE_MODULES_VLC([SCHROEDINGER], [schroedinger-1.0 >= 1.0.6], [dirac decoder using schroedinger], [auto]) +PKG_ENABLE_MODULES_VLC([SCHROEDINGER], [], [schroedinger-1.0 >= 1.0.6], [dirac decoder using schroedinger], [auto]) dnl dnl PNG decoder module @@ -3370,7 +3370,7 @@ fi dnl dnl libfluidsynth (MIDI synthetizer) plugin dnl -PKG_ENABLE_MODULES_VLC([FLUIDSYNTH], [fluidsynth], [MIDI synthetiser with libfluidsynth], [auto]) +PKG_ENABLE_MODULES_VLC([FLUIDSYNTH], [], [fluidsynth], [MIDI synthetiser with libfluidsynth], [auto]) dnl dnl Teletext Modules @@ -3496,7 +3496,7 @@ AS_IF([test "${enable_kate}" != "no"], [ dnl dnl tiger decoder plugin dnl -PKG_ENABLE_MODULES_VLC([TIGER], [tiger >= 0.3.1], [Tiger rendering library for Kate streams],[auto]) +PKG_ENABLE_MODULES_VLC([TIGER], [], [tiger >= 0.3.1], [Tiger rendering library for Kate streams],[auto]) dnl @@ -3903,7 +3903,7 @@ AS_IF([test "${enable_libxml2}" != "no"], [ dnl dnl SVG module dnl -PKG_ENABLE_MODULES_VLC([SVG], [librsvg-2.0 >= 2.9.0], [SVG rendering library],[auto]) +PKG_ENABLE_MODULES_VLC([SVG], [], [librsvg-2.0 >= 2.9.0], [SVG rendering library],[auto]) dnl dnl Snapshot vout module (with cache) @@ -4244,7 +4244,7 @@ fi dnl dnl Pulseaudio module dnl -PKG_ENABLE_MODULES_VLC([PULSE], [libpulse >= 0.9.11], [Pulseaudio support], [auto]) +PKG_ENABLE_MODULES_VLC([PULSE], [], [libpulse >= 0.9.11], [Pulseaudio support], [auto]) dnl dnl Portaudio module @@ -4841,7 +4841,7 @@ fi dnl dnl libprojectM visualization plugin dnl -PKG_ENABLE_MODULES_VLC([projectm], [libprojectM], [projectM visualization plugin], [auto]) +PKG_ENABLE_MODULES_VLC([projectm], [], [libprojectM], [projectM visualization plugin], [auto]) dnl dnl AtmoLight (homebrew AmbiLight) @@ -4860,7 +4860,7 @@ fi dnl dnl Bonjour services discovery dnl -PKG_ENABLE_MODULES_VLC([BONJOUR], [avahi-client >= 0.6], [Bonjour services discovery], [auto]) +PKG_ENABLE_MODULES_VLC([BONJOUR], [], [avahi-client >= 0.6], [Bonjour services discovery], [auto]) dnl dnl Lirc plugin diff --git a/m4/with_pkg.m4 b/m4/with_pkg.m4 index 73854e2..cd36209 100644 --- a/m4/with_pkg.m4 +++ b/m4/with_pkg.m4 @@ -75,24 +75,31 @@ AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ]) -dnl PKG_ENABLE_MODULES_VLC(VARIABLE-PREFIX, MODULES, +dnl PKG_ENABLE_MODULES_VLC(VARIABLE-PREFIX, +dnl VLC_MODULE_NAME dnl (if empty, same as VARIABLE-PREFIX) +dnl PKG MODULES, dnl [DESCRIPTION], [DEFAULT], dnl [EXTRA_CFLAGS], [EXTRA_LIBS]) AC_DEFUN([PKG_ENABLE_MODULES_VLC], [ -PKG_WITH_MODULES([$1],[$2], - VLC_ADD_PLUGIN(m4_tolower([$1])) - VLC_ADD_CFLAGS(m4_tolower([$1]),[$$1_CFLAGS] [$5]) - VLC_ADD_LIBS(m4_tolower([$1]),[$$1_LIBS] [$6]), - AS_IF([test x"$AS_TR_SH([enable_]m4_tolower([$1]))" = "xyes"], - [AC_MSG_ERROR(Library [$2] needed for [m4_tolower([$1]) was not found])], - [AC_MSG_WARN(Library [$2] needed for [m4_tolower([$1]) was not found])] +m4_pushdef([module_name], m4_default(m4_tolower([$2]),m4_tolower([$1]))) +m4_pushdef([enable_arg], m4_tolower([$1])) + +PKG_WITH_MODULES([$1],[$3], + VLC_ADD_PLUGIN(module_name) + VLC_ADD_CFLAGS(module_name,[$$1_CFLAGS] [$6]) + VLC_ADD_LIBS(module_name,[$$1_LIBS] [$7]), + AS_IF([test x"$AS_TR_SH([enable_]enable_arg)" = "xyes"], + [AC_MSG_ERROR(Library [$3] needed for [m4_tolower([$1])] was not found)], + [AC_MSG_WARN(Library [$3] needed for [m4_tolower([$1])] was not found)] ), - [$3],[$4]) - + [$4],[$5]) AM_CONDITIONAL([HAVE_][$1], - [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) + [test "$AS_TR_SH([with_]enable_arg)" = "yes"]) + +m4_popdef([module_name]) +m4_popdef([enable_arg]) ]) From: Rmi Denis-Courmont Date: Sat, 17 Oct 2009 20:28:29 +0000 (+0300) Subject: dc1394: path coming from MRL, need utf8_open() X-Git-Url: http://git.videolan.org/?p=vlc.git;a=commitdiff_plain;h=1188e4a5d039711c0afa64b532578e4c65c34ab4 dc1394: path coming from MRL, need utf8_open() --- diff --git a/modules/access/dc1394.c b/modules/access/dc1394.c index 5d2607a..0c174c6 100644 --- a/modules/access/dc1394.c +++ b/modules/access/dc1394.c @@ -34,7 +34,7 @@ #include #include #include - +#include #ifdef HAVE_FCNTL_H # include @@ -545,7 +545,7 @@ static void OpenAudioDev( demux_t *p_demux ) int i_format = AFMT_S16_LE; int result; - p_sys->fd_audio = open( psz_device, O_RDONLY | O_NONBLOCK ); + p_sys->fd_audio = utf8_open( psz_device, O_RDONLY | O_NONBLOCK ); if( p_sys->fd_audio < 0 ) { msg_Err( p_demux, "cannot open audio device (%s)", psz_device ); From: Jean-Baptiste Kempf Date: Tue, 10 Nov 2009 10:00:01 +0000 (+0100) Subject: dc1394: update to v2 API X-Git-Url: http://git.videolan.org/?p=vlc.git;a=commitdiff_plain;h=577ce5a67c51c812f7ad97bf3e7f7f38913b72d3 dc1394: update to v2 API This patch needs more testing, I think. --- diff --git a/NEWS b/NEWS index fb00eba..1c8ae04 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ Access: * Port of the screen module from Xlib to XCB * Support for the sftp protocol * Support for CDDB servers for Audio-CD on Windows version + * Port of the dc1394 module from libdc1394 to libdc1394 v2.0 Decoders: * Support for Atrac1 diff --git a/configure.ac b/configure.ac index e24c595..5762485 100644 --- a/configure.ac +++ b/configure.ac @@ -2041,7 +2041,7 @@ dnl dnl - special access module for dc1394 input dnl - dv module: digital video module check for libraw1394 dnl -PKG_ENABLE_MODULES_VLC([DC1394], [], [libraw1394 >= 2.0.1 libdc1394 >= 1.0.0], [dc1394 access module], [auto]) +PKG_ENABLE_MODULES_VLC([DC1394], [], [libraw1394 >= 2.0.1 libdc1394-2 >= 2.1.0], [dc1394 access module], [auto]) PKG_ENABLE_MODULES_VLC([DV], [access_dv], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV input module], [auto]) dnl diff --git a/modules/access/dc1394.c b/modules/access/dc1394.c index 0c174c6..75a1146 100644 --- a/modules/access/dc1394.c +++ b/modules/access/dc1394.c @@ -1,9 +1,11 @@ /***************************************************************************** * dc1394.c: firewire input module ***************************************************************************** - * Copyright (C) 2006 the VideoLAN team + * Copyright (C) 2006-2009 VideoLAN * * Authors: Xant Majere + * Rob Shortt - libdc1394 V2 API updates + * Frederic Benoist - updates from Rob's work * ***************************************************************************** * This library is free software; you can redistribute it and/or @@ -35,6 +37,7 @@ #include #include #include +#include #ifdef HAVE_FCNTL_H # include @@ -49,7 +52,7 @@ #include #include -#include +#include #define MAX_IEEE1394_HOSTS 32 #define MAX_CAMERA_NODES 32 @@ -69,39 +72,31 @@ vlc_module_begin () set_callbacks( Open, Close ) vlc_module_end () -typedef struct __dc_camera +struct demux_sys_t { - int port; - nodeid_t node; - u_int64_t uid; -} dc_camera; - -typedef struct demux_sys_t -{ - dc1394_cameracapture camera; - picture_t pic; - int dma_capture; -#define DMA_OFF 0 -#define DMA_ON 1 - int num_ports; - int num_cameras; + /* camera info */ + dc1394_t *p_dccontext; + uint32_t num_cameras; + dc1394camera_t *camera; int selected_camera; - u_int64_t selected_uid; - - dc_camera *camera_nodes; - dc1394_camerainfo camera_info; - dc1394_miscinfo misc_info; - raw1394handle_t fd_video; + uint64_t selected_uid; + picture_t pic; + uint32_t dma_buffers; + dc1394featureset_t features; quadlet_t supported_framerates; + bool reset_bus; + /* video info */ + char *video_device; + dc1394video_mode_t video_mode; int width; int height; int frame_size; int frame_rate; unsigned int brightness; unsigned int focus; - char *dma_device; es_out_id_t *p_es_video; + dc1394video_frame_t *frame; /* audio stuff */ int i_sample_rate; @@ -113,7 +108,7 @@ typedef struct demux_sys_t #define ROTATION_LEFT 1 #define ROTATION_RIGHT 2 es_out_id_t *p_es_audio; -} dc1394_sys; +}; /***************************************************************************** * Local prototypes @@ -125,82 +120,84 @@ static block_t *GrabAudio( demux_t *p_demux ); static int process_options( demux_t *p_demux); /***************************************************************************** - * ScanCameras + * FindCameras *****************************************************************************/ -static void ScanCameras( dc1394_sys *sys, demux_t *p_demux ) +static int FindCamera( demux_sys_t *sys, demux_t *p_demux ) { - struct raw1394_portinfo portinfo[MAX_IEEE1394_HOSTS]; - raw1394handle_t tempFd; - dc1394_camerainfo info; - dc_camera *node_list = NULL; - nodeid_t *nodes = NULL; - int num_ports = 0; - int num_cameras = 0; - int nodecount; - int i, n; - - memset( &portinfo, 0, sizeof(portinfo) ); + dc1394camera_list_t *list; msg_Dbg( p_demux, "Scanning for ieee1394 ports ..." ); - tempFd = raw1394_new_handle(); - if( !tempFd ) + if( dc1394_camera_enumerate (sys->p_dccontext, &list) != DC1394_SUCCESS ) + { + msg_Err(p_demux, "Can not ennumerate cameras"); + dc1394_camera_free_list (list); + dc1394_free( sys->p_dccontext ); + free( sys ); + p_demux->p_sys = NULL; return VLC_EGENERIC; - raw1394_get_port_info( tempFd, portinfo, MAX_IEEE1394_HOSTS); - raw1394_destroy_handle( tempFd ); - - for( i=0; i < MAX_IEEE1394_HOSTS; i++ ) - { - /* check if port exists and has at least one node*/ - if( !portinfo[i].nodes ) - continue; - nodes = NULL; - nodecount = 0; - tempFd = dc1394_create_handle( i ); - - /* skip this port if we can't obtain a valid handle */ - if( !tempFd ) - continue; - msg_Dbg( p_demux, "Found ieee1394 port %d (%s) ... " - "checking for camera nodes", - i, portinfo[i].name ); - num_ports++; - - nodes = dc1394_get_camera_nodes( tempFd, &nodecount, 0 ); - if( nodecount ) - { - msg_Dbg( p_demux, "Found %d dc1394 cameras on port %d (%s)", - nodecount, i, portinfo[i].name ); + } - if( node_list ) - node_list = realloc( node_list, sizeof(dc_camera) * (num_cameras+nodecount) ); - else - node_list = malloc( sizeof(dc_camera) * nodecount); + if( list->num == 0 ) + { + msg_Err(p_demux, "Can not find cameras"); + dc1394_camera_free_list (list); + dc1394_free( sys->p_dccontext ); + free( sys ); + p_demux->p_sys = NULL; + return VLC_EGENERIC; + } + + sys->num_cameras = list->num; + msg_Dbg( p_demux, "Found %d dc1394 cameras.", list->num); - for( n = 0; n < nodecount; n++ ) + if( sys->selected_uid ) + { + int found = 0; + for( unsigned i = 0; i < sys->num_cameras; i++ ) + { + if( list->ids[i].guid == sys->selected_uid ) { - int result = 0; - - result = dc1394_get_camera_info( tempFd, nodes[n], &info ); - if( result == DC1394_SUCCESS ) - { - node_list[num_cameras+n].uid = info.euid_64; - } - node_list[num_cameras+n].node = nodes[n]; - node_list[num_cameras+n].port = i; + sys->camera = dc1394_camera_new(sys->p_dccontext, + list->ids[i].guid); + found++; + break; } - num_cameras += nodecount; } - else - msg_Dbg( p_demux, "no cameras found on port %d (%s)", - i, portinfo[i].name ); - - if( tempFd ) - dc1394_destroy_handle( tempFd ); + if( !found ) + { + msg_Err( p_demux, "Can't find camera with uid : 0x%llx.", + sys->selected_uid ); + dc1394_camera_free_list (list); + dc1394_free( sys->p_dccontext ); + free( sys ); + p_demux->p_sys = NULL; + return VLC_EGENERIC; + } + } + else if( sys->selected_camera >= (int)list->num ) + { + msg_Err( p_demux, "There are not this many cameras. (%d/%d)", + sys->selected_camera, sys->num_cameras ); + dc1394_camera_free_list (list); + dc1394_free( sys->p_dccontext ); + free( sys ); + p_demux->p_sys = NULL; + return VLC_EGENERIC; + } + else if( sys->selected_camera >= 0 ) + { + sys->camera = dc1394_camera_new(sys->p_dccontext, + list->ids[sys->selected_camera].guid); + } + else + { + sys->camera = dc1394_camera_new(sys->p_dccontext, + list->ids[0].guid); } - sys->num_ports = num_ports; - sys->num_cameras = num_cameras; - sys->camera_nodes = node_list; + + dc1394_camera_free_list (list); + return VLC_SUCCESS; } /***************************************************************************** @@ -208,13 +205,12 @@ static void ScanCameras( dc1394_sys *sys, demux_t *p_demux ) *****************************************************************************/ static int Open( vlc_object_t *p_this ) { - demux_t *p_demux = (demux_t*)p_this; - demux_sys_t *p_sys; - es_format_t fmt; - int i; - int i_width; - int i_height; - int result = 0; + demux_t *p_demux = (demux_t*)p_this; + demux_sys_t *p_sys; + es_format_t fmt; + dc1394error_t res; + int i_width; + int i_height; if( strncmp(p_demux->psz_access, "dc1394", 6) != 0 ) return VLC_EGENERIC; @@ -229,22 +225,22 @@ static int Open( vlc_object_t *p_this ) p_demux->p_sys = p_sys = calloc( 1, sizeof( demux_sys_t ) ); if( !p_sys ) return VLC_ENOMEM; + memset( &fmt, 0, sizeof( es_format_t ) ); /* DEFAULTS */ - p_sys->frame_size = MODE_640x480_YUV422; - p_sys->width = 640; - p_sys->height = 480; - p_sys->frame_rate = FRAMERATE_30; - p_sys->brightness = 200; - p_sys->focus = 0; - p_sys->dma_capture = DMA_ON; /* defaults to VIDEO1394 capture mode */ - p_sys->fd_audio = -1; - p_sys->fd_video = NULL; - p_sys->camera_nodes = NULL; - p_sys->selected_camera = 0; - p_sys->dma_device = NULL; - p_sys->selected_uid = 0; + p_sys->video_mode = DC1394_VIDEO_MODE_640x480_YUV422; + p_sys->width = 640; + p_sys->height = 480; + p_sys->frame_rate = DC1394_FRAMERATE_15; + p_sys->brightness = 200; + p_sys->focus = 0; + p_sys->fd_audio = -1; + p_sys->p_dccontext = NULL; + p_sys->camera = NULL; + p_sys->selected_camera = -1; + p_sys->dma_buffers = 1; + p_sys->reset_bus = 0; /* PROCESS INPUT OPTIONS */ if( process_options(p_demux) != VLC_SUCCESS ) @@ -257,223 +253,145 @@ static int Open( vlc_object_t *p_this ) return VLC_EGENERIC; } - msg_Dbg( p_demux, "Selected camera %d", p_sys->selected_camera ); - msg_Dbg( p_demux, "Selected uid 0x%llx", p_sys->selected_uid ); + p_sys->p_dccontext = dc1394_new(); + if( !p_sys->p_dccontext ) + { + msg_Err( p_demux, "Failed to initialise libdc1394"); + free(p_demux->p_sys); + p_demux->p_sys = NULL; + return VLC_EGENERIC; + } + + if( FindCamera( p_sys, p_demux ) != VLC_SUCCESS ) + return VLC_EGENERIC; - ScanCameras( p_sys, p_demux ); - if( !p_sys->camera_nodes ) + if( !p_sys->camera ) { msg_Err( p_demux, "No camera found !!" ); + dc1394_free( p_sys->p_dccontext ); free( p_sys ); p_demux->p_sys = NULL; return VLC_EGENERIC; } - if( p_sys->selected_uid ) + if( p_sys->reset_bus ) { - int found = 0; - for( i=0; i < p_sys->num_cameras; i++ ) + if( dc1394_reset_bus( p_sys->camera ) != DC1394_SUCCESS ) { - if( p_sys->camera_nodes[i].uid == p_sys->selected_uid ) - { - p_sys->selected_camera = i; - found++; - break; - } - } - if( !found ) - { - msg_Err( p_demux, "Can't find camera with uid : 0x%llx.", - p_sys->selected_uid ); + msg_Err( p_demux, "Unable to reset IEEE 1394 bus"); Close( p_this ); return VLC_EGENERIC; } - } - else if( p_sys->selected_camera >= p_sys->num_cameras ) - { - msg_Err( p_demux, "there are not this many cameras. (%d/%d)", - p_sys->selected_camera, p_sys->num_cameras ); - Close( p_this ); - return VLC_EGENERIC; + else msg_Dbg( p_demux, "Successfully reset IEEE 1394 bus"); } - p_sys->fd_video = dc1394_create_handle( - p_sys->camera_nodes[p_sys->selected_camera].port ); - if( (int)p_sys->fd_video < 0 ) + if( dc1394_camera_reset( p_sys->camera ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "Can't init dc1394 handle" ); + msg_Err( p_demux, "Unable to reset camera"); Close( p_this ); return VLC_EGENERIC; } - /* get camera info */ - result = dc1394_get_camera_info( p_sys->fd_video, - p_sys->camera_nodes[p_sys->selected_camera].node, - &p_sys->camera_info ); - if( result != DC1394_SUCCESS ) + if( dc1394_camera_print_info( p_sys->camera, + stderr ) != DC1394_SUCCESS ) { - msg_Err( p_demux ,"unable to get camera info" ); + msg_Err( p_demux, "Unable to print camera info"); Close( p_this ); return VLC_EGENERIC; } - dc1394_print_camera_info( &p_sys->camera_info ); - result = dc1394_get_camera_misc_info( p_sys->fd_video, - p_sys->camera_nodes[p_sys->selected_camera].node, - &p_sys->misc_info ); - if( result != DC1394_SUCCESS ) + if( dc1394_feature_get_all( p_sys->camera, + &p_sys->features ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "unable to get camera misc info" ); + msg_Err( p_demux, "Unable to get feature set"); Close( p_this ); return VLC_EGENERIC; } + // TODO: only print features if verbosity increased + dc1394_feature_print_all(&p_sys->features, stderr); - /* init camera and set some video options */ - result = dc1394_init_camera( p_sys->camera_info.handle, - p_sys->camera_info.id ); - if( result != DC1394_SUCCESS ) +#if 0 //"Note that you need to execute this function only if you use exotic video1394 device names. /dev/video1394, /dev/video1394/* and /dev/video1394-* are automatically recognized." http://damien.douxchamps.net/ieee1394/libdc1394/v2.x/api/capture/ + if( p_sys->video_device ) { - msg_Err( p_demux, "unable to get init dc1394 camera" ); - Close( p_this ); - return VLC_EGENERIC; + if( dc1394_capture_set_device_filename( p_sys->camera, + p_sys->video_device ) != DC1394_SUCCESS ) + { + msg_Err( p_demux, "Unable to set video device"); + Close( p_this ); + return VLC_EGENERIC; + } } +#endif if( p_sys->focus ) { - result = dc1394_set_focus( p_sys->camera_info.handle, - p_sys->camera_nodes[p_sys->selected_camera].node, - p_sys->focus ); - if( result != DC1394_SUCCESS ) + if( dc1394_feature_set_value( p_sys->camera, + DC1394_FEATURE_FOCUS, + p_sys->focus ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "unable to set initial focus to %u", + msg_Err( p_demux, "Unable to set initial focus to %u", p_sys->focus ); } msg_Dbg( p_demux, "Initial focus set to %u", p_sys->focus ); } - result = dc1394_set_brightness( p_sys->camera_info.handle, - p_sys->camera_nodes[p_sys->selected_camera].node, - p_sys->brightness ); - if( result != DC1394_SUCCESS ) - { - msg_Err( p_demux, "unable to set init brightness to %d", - p_sys->brightness); - Close( p_this ); - return VLC_EGENERIC; - } - - result = dc1394_set_video_framerate( p_sys->camera_info.handle, - p_sys->camera_nodes[p_sys->selected_camera].node, - p_sys->frame_rate ); - if( result != DC1394_SUCCESS ) - { - msg_Err( p_demux, "unable to set framerate to %d", - p_sys->frame_rate ); - Close( p_this ); - return VLC_EGENERIC; - } - p_sys->misc_info.framerate = p_sys->frame_rate; - - result = dc1394_set_video_format( p_sys->camera_info.handle, - p_sys->camera_nodes[p_sys->selected_camera].node, - FORMAT_VGA_NONCOMPRESSED ); - if( result != DC1394_SUCCESS ) - { - msg_Err( p_demux, "unable to set video format to VGA_NONCOMPRESSED" ); - Close( p_this ); - return VLC_EGENERIC; - } - p_sys->misc_info.format = FORMAT_VGA_NONCOMPRESSED; - - result = dc1394_set_video_mode( p_sys->camera_info.handle, - p_sys->camera_nodes[p_sys->selected_camera].node, - p_sys->frame_size ); - if( result != DC1394_SUCCESS ) + if( dc1394_feature_set_value( p_sys->camera, + DC1394_FEATURE_FOCUS, + p_sys->brightness ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "unable to set video mode" ); - Close( p_this ); - return VLC_EGENERIC; + msg_Err( p_demux, "Unable to set initial brightness to %u", + p_sys->brightness ); } - p_sys->misc_info.mode = p_sys->frame_size; + msg_Dbg( p_demux, "Initial brightness set to %u", p_sys->brightness ); - /* reprobe everything */ - result = dc1394_get_camera_info( p_sys->camera_info.handle, - p_sys->camera_info.id, - &p_sys->camera_info ); - if( result != DC1394_SUCCESS ) + if( dc1394_video_set_framerate( p_sys->camera, + p_sys->frame_rate ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "Could not get camera basic information!" ); + msg_Err( p_demux, "Unable to set framerate"); Close( p_this ); return VLC_EGENERIC; } - result = dc1394_get_camera_misc_info( p_sys->camera_info.handle, - p_sys->camera_info.id, - &p_sys->misc_info ); - if( result != DC1394_SUCCESS ) + if( dc1394_video_set_mode( p_sys->camera, + p_sys->video_mode ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "Could not get camera misc information!" ); + msg_Err( p_demux, "Unable to set video mode"); Close( p_this ); return VLC_EGENERIC; } - /* set iso_channel */ - result = dc1394_set_iso_channel_and_speed( p_sys->camera_info.handle, - p_sys->camera_info.id, - p_sys->selected_camera, - SPEED_400 ); - if( result != DC1394_SUCCESS ) + if( dc1394_video_set_iso_speed( p_sys->camera, + DC1394_ISO_SPEED_400 ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "Could not set iso channel!" ); + msg_Err( p_demux, "Unable to set iso speed"); Close( p_this ); return VLC_EGENERIC; } - msg_Dbg( p_demux, "Using ISO channel %d", p_sys->misc_info.iso_channel ); - p_sys->misc_info.iso_channel = p_sys->selected_camera; /* and setup capture */ - if( p_sys->dma_capture ) - { - result = dc1394_dma_setup_capture( p_sys->camera_info.handle, - p_sys->camera_info.id, - p_sys->misc_info.iso_channel, - p_sys->misc_info.format, - p_sys->misc_info.mode, - SPEED_400, - p_sys->misc_info.framerate, - 10, 0, - p_sys->dma_device, - &p_sys->camera ); - if( result != DC1394_SUCCESS ) + res = dc1394_capture_setup( p_sys->camera, + p_sys->dma_buffers, + DC1394_CAPTURE_FLAGS_DEFAULT); + if( res != DC1394_SUCCESS ) + { + if( res == DC1394_NO_BANDWIDTH ) { - msg_Err( p_demux ,"unable to setup camera" ); - Close( p_this ); - return VLC_EGENERIC; + msg_Err( p_demux ,"No bandwidth: try adding the " + "\"resetbus\" option" ); } - } - else - { - result = dc1394_setup_capture( p_sys->camera_info.handle, - p_sys->camera_info.id, - p_sys->misc_info.iso_channel, - p_sys->misc_info.format, - p_sys->misc_info.mode, - SPEED_400, - p_sys->misc_info.framerate, - &p_sys->camera ); - if( result != DC1394_SUCCESS) + else { - msg_Err( p_demux ,"unable to setup camera" ); - Close( p_this ); - return VLC_EGENERIC; + msg_Err( p_demux ,"Unable to setup capture" ); } + Close( p_this ); + return VLC_EGENERIC; } /* TODO - UYV444 chroma converter is missing, when it will be available * fourcc will become variable (and not just a fixed value for UYVY) */ - i_width = p_sys->camera.frame_width; - i_height = p_sys->camera.frame_height; + i_width = p_sys->width; + i_height = p_sys->height; if( picture_Setup( &p_sys->pic, VLC_CODEC_UYVY, i_width, i_height, @@ -489,7 +407,7 @@ static int Open( vlc_object_t *p_this ) fmt.video.i_width = i_width; fmt.video.i_height = i_height; - msg_Dbg( p_demux, "added new video es %4.4s %dx%d", + msg_Dbg( p_demux, "Added new video es %4.4s %dx%d", (char*)&fmt.i_codec, fmt.video.i_width, fmt.video.i_height ); p_sys->p_es_video = es_out_Add( p_demux->out, &fmt ); @@ -510,7 +428,7 @@ static int Open( vlc_object_t *p_this ) fmt.i_bitrate = fmt.audio.i_channels * fmt.audio.i_rate * fmt.audio.i_bitspersample; - msg_Dbg( p_demux, "new audio es %d channels %dHz", + msg_Dbg( p_demux, "New audio es %d channels %dHz", fmt.audio.i_channels, fmt.audio.i_rate ); p_sys->p_es_audio = es_out_Add( p_demux->out, &fmt ); @@ -518,23 +436,16 @@ static int Open( vlc_object_t *p_this ) } /* have the camera start sending us data */ - result = dc1394_start_iso_transmission( p_sys->camera_info.handle, - p_sys->camera_info.id ); - if( result != DC1394_SUCCESS ) + if( dc1394_video_set_transmission( p_sys->camera, + DC1394_ON ) != DC1394_SUCCESS ) { - msg_Err( p_demux, "unable to start camera iso transmission" ); - if( p_sys->dma_capture ) - { - dc1394_dma_release_camera( p_sys->fd_video, &p_sys->camera ); - } - else - { - dc1394_release_camera( p_sys->fd_video, &p_sys->camera ); - } + msg_Err( p_demux, "Unable to start camera iso transmission" ); + dc1394_capture_stop( p_sys->camera ); Close( p_this ); return VLC_EGENERIC; } - p_sys->misc_info.is_iso_on = DC1394_TRUE; + msg_Dbg( p_demux, "Set iso transmission" ); + // TODO: reread camera return VLC_SUCCESS; } @@ -548,7 +459,7 @@ static void OpenAudioDev( demux_t *p_demux ) p_sys->fd_audio = utf8_open( psz_device, O_RDONLY | O_NONBLOCK ); if( p_sys->fd_audio < 0 ) { - msg_Err( p_demux, "cannot open audio device (%s)", psz_device ); + msg_Err( p_demux, "Cannot open audio device (%s)", psz_device ); CloseAudioDev( p_demux ); } @@ -558,7 +469,7 @@ static void OpenAudioDev( demux_t *p_demux ) result = ioctl( p_sys->fd_audio, SNDCTL_DSP_SETFMT, &i_format ); if( (result < 0) || (i_format != AFMT_S16_LE) ) { - msg_Err( p_demux, "cannot set audio format (16b little endian) " + msg_Err( p_demux, "Cannot set audio format (16b little endian) " "(%d)", i_format ); CloseAudioDev( p_demux ); } @@ -566,7 +477,7 @@ static void OpenAudioDev( demux_t *p_demux ) result = ioctl( p_sys->fd_audio, SNDCTL_DSP_CHANNELS, &p_sys->channels ); if( result < 0 ) { - msg_Err( p_demux, "cannot set audio channels count (%d)", + msg_Err( p_demux, "Cannot set audio channels count (%d)", p_sys->channels ); CloseAudioDev( p_demux ); } @@ -574,11 +485,12 @@ static void OpenAudioDev( demux_t *p_demux ) result = ioctl( p_sys->fd_audio, SNDCTL_DSP_SPEED, &p_sys->i_sample_rate ); if( result < 0 ) { - msg_Err( p_demux, "cannot set audio sample rate (%s)", p_sys->i_sample_rate ); + msg_Err( p_demux, "Cannot set audio sample rate (%d)", + p_sys->i_sample_rate ); CloseAudioDev( p_demux ); } - msg_Dbg( p_demux, "opened adev=`%s' %s %dHz", + msg_Dbg( p_demux, "Opened adev=`%s' %s %dHz", psz_device, (p_sys->channels > 1) ? "stereo" : "mono", p_sys->i_sample_rate ); @@ -605,37 +517,27 @@ static void Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; - int result = 0; /* Stop data transmission */ - result = dc1394_stop_iso_transmission( p_sys->fd_video, - p_sys->camera.node ); - if( result != DC1394_SUCCESS ) - { - msg_Err( p_demux, "couldn't stop the camera" ); - } + if( dc1394_video_set_transmission( p_sys->camera, + DC1394_OFF ) != DC1394_SUCCESS ) + msg_Err( p_demux, "Unable to stop camera iso transmission" ); /* Close camera */ - if( p_sys->dma_capture ) - { - dc1394_dma_unlisten( p_sys->fd_video, &p_sys->camera ); - dc1394_dma_release_camera( p_sys->fd_video, &p_sys->camera ); - } - else - { - dc1394_release_camera( p_sys->fd_video, &p_sys->camera ); - } + dc1394_capture_stop( p_sys->camera ); - if( p_sys->fd_video ) - dc1394_destroy_handle( p_sys->fd_video ); CloseAudioDev( p_demux ); - free( p_sys->camera_nodes ); - free( p_sys->audio_device ); + dc1394_camera_free(p_sys->camera); + dc1394_free(p_sys->p_dccontext); + + if( p_sys->audio_device ) + free( p_sys->audio_device ); free( p_sys ); } +#if 0 static void MovePixelUYVY( void *src, int spos, void *dst, int dpos ) { char u,v,y; @@ -667,6 +569,7 @@ static void MovePixelUYVY( void *src, int spos, void *dst, int dpos ) dc[1] = y; } } +#endif /***************************************************************************** * Demux: @@ -675,49 +578,35 @@ static block_t *GrabVideo( demux_t *p_demux ) { demux_sys_t *p_sys = p_demux->p_sys; block_t *p_block = NULL; - int result = 0; - if( p_sys->dma_capture ) - { - result = dc1394_dma_single_capture( &p_sys->camera ); - if( result != DC1394_SUCCESS ) - { - msg_Err( p_demux, "unable to capture a frame" ); - return NULL; - } - } - else + if( dc1394_capture_dequeue( p_sys->camera, + DC1394_CAPTURE_POLICY_WAIT, + &p_sys->frame ) != DC1394_SUCCESS ) { - result = dc1394_single_capture( p_sys->camera_info.handle, - &p_sys->camera ); - if( result != DC1394_SUCCESS ) - { - msg_Err( p_demux, "unable to capture a frame" ); - return NULL; - } + msg_Err( p_demux, "Unable to capture a frame" ); + return NULL; } - p_block = block_New( p_demux, p_sys->camera.frame_width * - p_sys->camera.frame_height * 2 ); + p_block = block_New( p_demux, p_sys->frame->size[0] * + p_sys->frame->size[1] * 2 ); if( !p_block ) { - msg_Err( p_demux, "cannot get block" ); + msg_Err( p_demux, "Can not get block" ); return NULL; } - if( !p_sys->camera.capture_buffer ) + if( !p_sys->frame->image ) { - msg_Err (p_demux, "caputer buffer empty"); + msg_Err (p_demux, "Capture buffer empty"); block_Release( p_block ); return NULL; } - memcpy( p_block->p_buffer, (const char *)p_sys->camera.capture_buffer, - p_sys->camera.frame_width * p_sys->camera.frame_height * 2 ); + memcpy( p_block->p_buffer, (const char *)p_sys->frame->image, + p_sys->width * p_sys->height * 2 ); p_block->i_pts = p_block->i_dts = mdate(); - if( p_sys->dma_capture ) - dc1394_dma_done_with_buffer( &p_sys->camera ); + dc1394_capture_enqueue( p_sys->camera, p_sys->frame ); return p_block; } @@ -733,7 +622,7 @@ static block_t *GrabAudio( demux_t *p_demux ) p_block = block_New( p_demux, p_sys->i_audio_max_frame_size ); if( !p_block ) { - msg_Warn( p_demux, "cannot get buffer" ); + msg_Warn( p_demux, "Cannot get buffer" ); return NULL; } @@ -768,8 +657,7 @@ static int Demux( demux_t *p_demux ) p_blocka = GrabAudio( p_demux ); /* Try grabbing video frame */ - if( (int)p_sys->fd_video > 0 ) - p_blockv = GrabVideo( p_demux ); + p_blockv = GrabVideo( p_demux ); if( !p_blocka && !p_blockv ) { @@ -799,6 +687,7 @@ static int Demux( demux_t *p_demux ) *****************************************************************************/ static int Control( demux_t *p_demux, int i_query, va_list args ) { + VLC_UNUSED( p_demux ); switch( i_query ) { /* Special for access_demux */ @@ -831,8 +720,13 @@ static int process_options( demux_t *p_demux ) char *psz_parser; char *token = NULL; char *state = NULL; + const char *in_size = NULL; + const char *in_fmt = NULL; float rate_f; + if( strncmp(p_demux->psz_access, "dc1394", 6) != 0 ) + return VLC_EGENERIC; + psz_dup = strdup( p_demux->psz_path ); psz_parser = psz_dup; for( token = strtok_r( psz_parser,":",&state); token; @@ -847,26 +741,26 @@ static int process_options( demux_t *p_demux ) * video size of 160x120 is temporarily disabled */ msg_Err( p_demux, - "video size of 160x120 is actually disabled for lack of chroma " - "support. It will relased ASAP, until then try an higher size " - "(320x240 and 640x480 are fully supported)" ); - free( psz_dup ); + "video size of 160x120 is actually disabled for lack of" + "chroma support. It will relased ASAP, until then try " + "an higher size (320x240 and 640x480 are fully supported)" ); + free(psz_dup); return VLC_EGENERIC; #if 0 - p_sys->frame_size = MODE_160x120_YUV444; + in_size = "160x120"; p_sys->width = 160; p_sys->height = 120; #endif } else if( strncmp( token, "320x240", 7 ) == 0 ) { - p_sys->frame_size = MODE_320x240_YUV422; + in_size = "320x240"; p_sys->width = 320; p_sys->height = 240; } else if( strncmp( token, "640x480", 7 ) == 0 ) { - p_sys->frame_size = MODE_640x480_YUV422; + in_size = "640x480"; p_sys->width = 640; p_sys->height = 480; } @@ -877,27 +771,62 @@ static int process_options( demux_t *p_demux ) " 160x120, 320x240, and 640x480. " "Please specify one of them. You have specified %s.", token ); - free( psz_dup ); + free(psz_dup); return VLC_EGENERIC; } msg_Dbg( p_demux, "Requested video size : %s",token ); } + if( strncmp( token, "format=", strlen("format=") ) == 0 ) + { + token += strlen("format="); + if( strncmp( token, "YUV411", 6 ) == 0 ) + { + in_fmt = "YUV411"; + } + else if( strncmp( token, "YUV422", 6 ) == 0 ) + { + in_fmt = "YUV422"; + } + else if( strncmp( token, "YUV444", 6 ) == 0 ) + { + in_fmt = "YUV444"; + } + else if( strncmp( token, "RGB8", 4 ) == 0 ) + { + in_fmt = "RGB8"; + } + else if( strncmp( token, "MONO8", 5 ) == 0 ) + { + in_fmt = "MONO8"; + } + else if( strncmp( token, "MONO16", 6 ) == 0 ) + { + in_fmt = "MONO16"; + } + else + { + msg_Err( p_demux, "Invalid format %s.", token ); + free(psz_dup); + return VLC_EGENERIC; + } + msg_Dbg( p_demux, "Requested video format : %s", token ); + } else if( strncmp( token, "fps=", strlen( "fps=" ) ) == 0 ) { token += strlen("fps="); sscanf( token, "%g", &rate_f ); if( rate_f == 1.875 ) - p_sys->frame_rate = FRAMERATE_1_875; + p_sys->frame_rate = DC1394_FRAMERATE_1_875; else if( rate_f == 3.75 ) - p_sys->frame_rate = FRAMERATE_3_75; + p_sys->frame_rate = DC1394_FRAMERATE_3_75; else if( rate_f == 7.5 ) - p_sys->frame_rate = FRAMERATE_7_5; + p_sys->frame_rate = DC1394_FRAMERATE_7_5; else if( rate_f == 15 ) - p_sys->frame_rate = FRAMERATE_15; + p_sys->frame_rate = DC1394_FRAMERATE_15; else if( rate_f == 30 ) - p_sys->frame_rate = FRAMERATE_30; + p_sys->frame_rate = DC1394_FRAMERATE_30; else if( rate_f == 60 ) - p_sys->frame_rate = FRAMERATE_60; + p_sys->frame_rate = DC1394_FRAMERATE_60; else { msg_Err( p_demux , @@ -905,11 +834,16 @@ static int process_options( demux_t *p_demux ) " 1.875, 3.75, 7.5, 15, 30, 60. " "Please specify one of them. You have specified %s.", token); - free( psz_dup ); + free(psz_dup); return VLC_EGENERIC; } msg_Dbg( p_demux, "Requested frame rate : %s",token ); } + else if( strncmp( token, "resetbus", strlen( "resetbus" ) ) == 0 ) + { + token += strlen("resetbus"); + p_sys->reset_bus = 1; + } else if( strncmp( token, "brightness=", strlen( "brightness=" ) ) == 0 ) { int nr = 0; @@ -920,11 +854,27 @@ static int process_options( demux_t *p_demux ) msg_Err( p_demux, "Bad brightness value '%s', " "must be an unsigned integer.", token ); - free( psz_dup ); + free(psz_dup); + return VLC_EGENERIC; + } + } + else if( strncmp( token, "buffers=", strlen( "buffers=" ) ) == 0 ) + { + int nr = 0; + int in_buf = 0; + token += strlen("buffers="); + nr = sscanf( token, "%d", &in_buf); + if( nr != 1 || in_buf < 1 ) + { + msg_Err( p_demux, "DMA buffers must be 1 or greater." ); + free(psz_dup); return VLC_EGENERIC; } + else p_sys->dma_buffers = in_buf; } #if 0 + // NOTE: If controller support is added back, more logic will needed to be added + // after the cameras are scanned. else if( strncmp( token, "controller=", strlen( "controller=" ) ) == 0 ) { int nr = 0; @@ -949,31 +899,15 @@ static int process_options( demux_t *p_demux ) msg_Err( p_demux, "Bad camera number '%s', " "must be an unsigned integer.", token ); - free( psz_dup ); + free(psz_dup); return VLC_EGENERIC; } } - else if( strncmp( token, "capture=", strlen( "capture=" ) ) == 0) + else if( strncmp( token, "vdev=", strlen( "vdev=" ) ) == 0) { - token += strlen("capture="); - if( strncmp(token, "raw1394",7) == 0 ) - { - msg_Dbg( p_demux, "DMA capture disabled!" ); - p_sys->dma_capture = DMA_OFF; - } - else if( strncmp(token,"video1394",9) == 0 ) - { - msg_Dbg( p_demux, "DMA capture enabled!" ); - p_sys->dma_capture = DMA_ON; - } - else - { - msg_Err(p_demux, "Bad capture method value '%s', " - "it can be 'raw1394' or 'video1394'.", - token ); - free( psz_dup ); - return VLC_EGENERIC; - } + token += strlen("vdev="); + p_sys->video_device = strdup(token); + msg_Dbg( p_demux, "Using video device '%s'.", token ); } else if( strncmp( token, "adev=", strlen( "adev=" ) ) == 0 ) { @@ -993,8 +927,17 @@ static int process_options( demux_t *p_demux ) } else if( strncmp( token, "focus=", strlen("focus=" ) ) == 0) { + int nr = 0; token += strlen("focus="); - sscanf( token, "%u", &p_sys->focus ); + nr = sscanf( token, "%u", &p_sys->focus ); + if( nr != 1 ) + { + msg_Err( p_demux, "Bad focus value '%s', " + "must be an unsigned integer.", + token ); + free(psz_dup); + return VLC_EGENERIC; + } } else if( strncmp( token, "uid=", strlen("uid=") ) == 0) { @@ -1002,7 +945,41 @@ static int process_options( demux_t *p_demux ) sscanf( token, "0x%llx", &p_sys->selected_uid ); } } - free( psz_dup ); + + // The mode is a combination of size and format and not every format + // is supported by every size. + if( in_size) + { + if( strcmp( in_size, "160x120") == 0) + { + if( in_fmt && (strcmp( in_fmt, "YUV444") != 0) ) + msg_Err(p_demux, "160x120 only supports YUV444 - forcing"); + p_sys->video_mode = DC1394_VIDEO_MODE_160x120_YUV444; + } + else if( strcmp( in_size, "320x240") == 0) + { + if( in_fmt && (strcmp( in_fmt, "YUV422") != 0) ) + msg_Err(p_demux, "320x240 only supports YUV422 - forcing"); + p_sys->video_mode = DC1394_VIDEO_MODE_320x240_YUV422; + } + } + else + { // 640x480 default + if( in_fmt ) + { + if( strcmp( in_fmt, "RGB8") == 0) + p_sys->video_mode = DC1394_VIDEO_MODE_640x480_RGB8; + else if( strcmp( in_fmt, "MONO8") == 0) + p_sys->video_mode = DC1394_VIDEO_MODE_640x480_MONO8; + else if( strcmp( in_fmt, "MONO16") == 0) + p_sys->video_mode = DC1394_VIDEO_MODE_640x480_MONO16; + else if( strcmp( in_fmt, "YUV411") == 0) + p_sys->video_mode = DC1394_VIDEO_MODE_640x480_YUV411; + else // YUV422 default + p_sys->video_mode = DC1394_VIDEO_MODE_640x480_YUV422; + } + else // YUV422 default + p_sys->video_mode = DC1394_VIDEO_MODE_640x480_YUV422; + } return VLC_SUCCESS; } -