Re: [PATCH 3/5] qv4l2: add ALSA stream to qv4l2
On Saturday, August 03, 2013 12:19:54 AM you wrote: > Hello, > > > diff --git a/utils/qv4l2/Makefile.am b/utils/qv4l2/Makefile.am > > index 22d4c17..eed25b0 100644 > > --- a/utils/qv4l2/Makefile.am > > +++ b/utils/qv4l2/Makefile.am > > @@ -4,7 +4,8 @@ qv4l2_SOURCES = qv4l2.cpp general-tab.cpp ctrl-tab.cpp > > vbi-tab.cpp v4l2-api.cpp > > capture-win-qt.cpp capture-win-qt.h capture-win-gl.cpp capture-win-gl.h > > \ > > raw2sliced.cpp qv4l2.h capture-win.h general-tab.h vbi-tab.h v4l2-api.h > > raw2sliced.h > > nodist_qv4l2_SOURCES = moc_qv4l2.cpp moc_general-tab.cpp > > moc_capture-win.cpp moc_vbi-tab.cpp qrc_qv4l2.cpp > > -qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la > > ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la > > +qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la > > ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la \ > > + ../libmedia_dev/libmedia_dev.la > > > > if WITH_QV4L2_GL > > qv4l2_CPPFLAGS = $(QTGL_CFLAGS) -DENABLE_GL > > @@ -14,6 +15,12 @@ qv4l2_CPPFLAGS = $(QT_CFLAGS) > > qv4l2_LDFLAGS = $(QT_LIBS) > > endif > > > > +if WITH_QV4L2_ALSA > > +qv4l2_CPPFLAGS += $(ALSA_CFLAGS) -DENABLE_ALSA > > I would prefer if you don't add another define to the command line. To > check for ALSA support please include config.h and use the flag provided > there. That is fine for me. However, this design was to make the alsa code not compile in when not required. While I am at it, should I do the same for OpenGL, that is, remove WITH_QV4L2_GL with a config.h define)? The patch series has already been patched in, but I do have another series that adds features and fixes to the first OpenGL patches. It should not be a problem to change OpenGL accordingly as well. B. > > Thanks, > Gregor > > -- > To unsubscribe from this list: send the line "unsubscribe linux-media" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/5] qv4l2: add ALSA stream to qv4l2
Hello, diff --git a/utils/qv4l2/Makefile.am b/utils/qv4l2/Makefile.am index 22d4c17..eed25b0 100644 --- a/utils/qv4l2/Makefile.am +++ b/utils/qv4l2/Makefile.am @@ -4,7 +4,8 @@ qv4l2_SOURCES = qv4l2.cpp general-tab.cpp ctrl-tab.cpp vbi-tab.cpp v4l2-api.cpp capture-win-qt.cpp capture-win-qt.h capture-win-gl.cpp capture-win-gl.h \ raw2sliced.cpp qv4l2.h capture-win.h general-tab.h vbi-tab.h v4l2-api.h raw2sliced.h nodist_qv4l2_SOURCES = moc_qv4l2.cpp moc_general-tab.cpp moc_capture-win.cpp moc_vbi-tab.cpp qrc_qv4l2.cpp -qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la +qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la \ + ../libmedia_dev/libmedia_dev.la if WITH_QV4L2_GL qv4l2_CPPFLAGS = $(QTGL_CFLAGS) -DENABLE_GL @@ -14,6 +15,12 @@ qv4l2_CPPFLAGS = $(QT_CFLAGS) qv4l2_LDFLAGS = $(QT_LIBS) endif +if WITH_QV4L2_ALSA +qv4l2_CPPFLAGS += $(ALSA_CFLAGS) -DENABLE_ALSA I would prefer if you don't add another define to the command line. To check for ALSA support please include config.h and use the flag provided there. diff --git a/utils/qv4l2/alsa_stream.h b/utils/qv4l2/alsa_stream.h index c68fd6d..b74c3aa 100644 --- a/utils/qv4l2/alsa_stream.h +++ b/utils/qv4l2/alsa_stream.h @@ -1,5 +1,12 @@ -int alsa_thread_startup(const char *pdevice, const char *cdevice, int latency, - FILE *__error_fp, - int __verbose); +#ifndef ALSA_STRAM_H +#define ALSA_STRAM_H unimportant typo here Thanks, Gregor -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/5] qv4l2: add ALSA stream to qv4l2
Hi Bård! Two small comments below... On 08/02/2013 02:05 PM, Bård Eirik Winther wrote: > Changes the ALSA streaming code to work with qv4l2 and allows it to > be compiled in. qv4l2 does not use the streaming function yet. > > Signed-off-by: Bård Eirik Winther > --- > configure.ac | 6 ++ > utils/qv4l2/Makefile.am | 9 - > utils/qv4l2/alsa_stream.c | 21 +++-- > utils/qv4l2/alsa_stream.h | 13 ++--- > 4 files changed, 39 insertions(+), 10 deletions(-) > > diff --git a/configure.ac b/configure.ac > index d74da61..e12507e 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -136,6 +136,11 @@ if test "x$qt_pkgconfig_gl" = "xfalse"; then > AC_MSG_WARN(Qt4 OpenGL or higher is not available) > fi > > +PKG_CHECK_MODULES(ALSA, [alsa], [alsa_pkgconfig=true], > [alsa_pkgconfig=false]) > +if test "x$alsa_pkgconfig" = "xfalse"; then > + AC_MSG_WARN(ALSA library not available) > +fi > + > AC_SUBST([JPEG_LIBS]) > > # The dlopen() function is in the C library for *BSD and in > @@ -243,6 +248,7 @@ AM_CONDITIONAL([WITH_LIBV4L], [test x$enable_libv4l != > xno]) > AM_CONDITIONAL([WITH_V4LUTILS], [test x$enable_v4lutils != xno]) > AM_CONDITIONAL([WITH_QV4L2], [test ${qt_pkgconfig} = true -a x$enable_qv4l2 > != xno]) > AM_CONDITIONAL([WITH_QV4L2_GL], [test WITH_QV4L2 -a ${qt_pkgconfig_gl} = > true]) > +AM_CONDITIONAL([WITH_QV4L2_ALSA], [test WITH_QV4L2 -a ${alsa_pkgconfig} = > true]) > AM_CONDITIONAL([WITH_V4L_PLUGINS], [test x$enable_libv4l != xno -a > x$enable_shared != xno]) > AM_CONDITIONAL([WITH_V4L_WRAPPERS], [test x$enable_libv4l != xno -a > x$enable_shared != xno]) > > diff --git a/utils/qv4l2/Makefile.am b/utils/qv4l2/Makefile.am > index 22d4c17..eed25b0 100644 > --- a/utils/qv4l2/Makefile.am > +++ b/utils/qv4l2/Makefile.am > @@ -4,7 +4,8 @@ qv4l2_SOURCES = qv4l2.cpp general-tab.cpp ctrl-tab.cpp > vbi-tab.cpp v4l2-api.cpp >capture-win-qt.cpp capture-win-qt.h capture-win-gl.cpp capture-win-gl.h \ >raw2sliced.cpp qv4l2.h capture-win.h general-tab.h vbi-tab.h v4l2-api.h > raw2sliced.h > nodist_qv4l2_SOURCES = moc_qv4l2.cpp moc_general-tab.cpp moc_capture-win.cpp > moc_vbi-tab.cpp qrc_qv4l2.cpp > -qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la > ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la > +qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la > ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la \ > + ../libmedia_dev/libmedia_dev.la > > if WITH_QV4L2_GL > qv4l2_CPPFLAGS = $(QTGL_CFLAGS) -DENABLE_GL > @@ -14,6 +15,12 @@ qv4l2_CPPFLAGS = $(QT_CFLAGS) > qv4l2_LDFLAGS = $(QT_LIBS) > endif > > +if WITH_QV4L2_ALSA > +qv4l2_CPPFLAGS += $(ALSA_CFLAGS) -DENABLE_ALSA > +qv4l2_LDFLAGS += $(ALSA_LIBS) -pthread > +qv4l2_SOURCES += alsa_stream.c alsa_stream.h > +endif > + > EXTRA_DIST = exit.png fileopen.png qv4l2_24x24.png qv4l2_64x64.png qv4l2.png > qv4l2.svg snapshot.png \ >video-television.png fileclose.png qv4l2_16x16.png qv4l2_32x32.png > qv4l2.desktop qv4l2.qrc record.png \ >saveraw.png qv4l2.pro > diff --git a/utils/qv4l2/alsa_stream.c b/utils/qv4l2/alsa_stream.c > index 3e33b5e..90d3afb 100644 > --- a/utils/qv4l2/alsa_stream.c > +++ b/utils/qv4l2/alsa_stream.c > @@ -26,9 +26,7 @@ > * > */ > > -#include "config.h" > - > -#ifdef HAVE_ALSA_ASOUNDLIB_H > +#include "alsa_stream.h" > > #include > #include > @@ -40,12 +38,12 @@ > #include > #include > #include > -#include "alsa_stream.h" > > #define ARRAY_SIZE(a) (sizeof(a)/sizeof(*(a))) > > /* Private vars to control alsa thread status */ > static int stop_alsa = 0; > +static snd_htimestamp_t timestamp; > > /* Error handlers */ > snd_output_t *output = NULL; > @@ -422,7 +420,8 @@ static int setparams(snd_pcm_t *phandle, snd_pcm_t > *chandle, > static snd_pcm_sframes_t readbuf(snd_pcm_t *handle, char *buf, long len) > { > snd_pcm_sframes_t r; > - > +snd_pcm_uframes_t frames; > +snd_pcm_htimestamp(handle, &frames, ×tamp); > r = snd_pcm_readi(handle, buf, len); > if (r < 0 && r != -EAGAIN) { > r = snd_pcm_recover(handle, r, 0); > @@ -453,6 +452,7 @@ static snd_pcm_sframes_t writebuf(snd_pcm_t *handle, char > *buf, long len) > len -= r; > snd_pcm_wait(handle, 100); > } > +return -1; > } > > static int alsa_stream(const char *pdevice, const char *cdevice, int latency) > @@ -642,4 +642,13 @@ int alsa_thread_is_running(void) > return alsa_is_running; > } > > -#endif > +void alsa_thread_timestamp(struct timeval *tv) > +{ > + if (alsa_thread_is_running()) { > + tv->tv_sec = timestamp.tv_sec; > + tv->tv_usec = timestamp.tv_nsec / 1000; > + } else { > + tv->tv_sec = 1337; Why 1337? I would expect either 0, or a bool return from this function to signify that there is no valid timestamp. > + tv->tv_usec = 0; > + } > +} > diff --git a/utils/qv4l2/alsa_stream.h b/utils/qv4l2/alsa_stream.h > i
[PATCH 3/5] qv4l2: add ALSA stream to qv4l2
Changes the ALSA streaming code to work with qv4l2 and allows it to be compiled in. qv4l2 does not use the streaming function yet. Signed-off-by: Bård Eirik Winther --- configure.ac | 6 ++ utils/qv4l2/Makefile.am | 9 - utils/qv4l2/alsa_stream.c | 21 +++-- utils/qv4l2/alsa_stream.h | 13 ++--- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index d74da61..e12507e 100644 --- a/configure.ac +++ b/configure.ac @@ -136,6 +136,11 @@ if test "x$qt_pkgconfig_gl" = "xfalse"; then AC_MSG_WARN(Qt4 OpenGL or higher is not available) fi +PKG_CHECK_MODULES(ALSA, [alsa], [alsa_pkgconfig=true], [alsa_pkgconfig=false]) +if test "x$alsa_pkgconfig" = "xfalse"; then + AC_MSG_WARN(ALSA library not available) +fi + AC_SUBST([JPEG_LIBS]) # The dlopen() function is in the C library for *BSD and in @@ -243,6 +248,7 @@ AM_CONDITIONAL([WITH_LIBV4L], [test x$enable_libv4l != xno]) AM_CONDITIONAL([WITH_V4LUTILS], [test x$enable_v4lutils != xno]) AM_CONDITIONAL([WITH_QV4L2], [test ${qt_pkgconfig} = true -a x$enable_qv4l2 != xno]) AM_CONDITIONAL([WITH_QV4L2_GL], [test WITH_QV4L2 -a ${qt_pkgconfig_gl} = true]) +AM_CONDITIONAL([WITH_QV4L2_ALSA], [test WITH_QV4L2 -a ${alsa_pkgconfig} = true]) AM_CONDITIONAL([WITH_V4L_PLUGINS], [test x$enable_libv4l != xno -a x$enable_shared != xno]) AM_CONDITIONAL([WITH_V4L_WRAPPERS], [test x$enable_libv4l != xno -a x$enable_shared != xno]) diff --git a/utils/qv4l2/Makefile.am b/utils/qv4l2/Makefile.am index 22d4c17..eed25b0 100644 --- a/utils/qv4l2/Makefile.am +++ b/utils/qv4l2/Makefile.am @@ -4,7 +4,8 @@ qv4l2_SOURCES = qv4l2.cpp general-tab.cpp ctrl-tab.cpp vbi-tab.cpp v4l2-api.cpp capture-win-qt.cpp capture-win-qt.h capture-win-gl.cpp capture-win-gl.h \ raw2sliced.cpp qv4l2.h capture-win.h general-tab.h vbi-tab.h v4l2-api.h raw2sliced.h nodist_qv4l2_SOURCES = moc_qv4l2.cpp moc_general-tab.cpp moc_capture-win.cpp moc_vbi-tab.cpp qrc_qv4l2.cpp -qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la +qv4l2_LDADD = ../../lib/libv4l2/libv4l2.la ../../lib/libv4lconvert/libv4lconvert.la ../libv4l2util/libv4l2util.la \ + ../libmedia_dev/libmedia_dev.la if WITH_QV4L2_GL qv4l2_CPPFLAGS = $(QTGL_CFLAGS) -DENABLE_GL @@ -14,6 +15,12 @@ qv4l2_CPPFLAGS = $(QT_CFLAGS) qv4l2_LDFLAGS = $(QT_LIBS) endif +if WITH_QV4L2_ALSA +qv4l2_CPPFLAGS += $(ALSA_CFLAGS) -DENABLE_ALSA +qv4l2_LDFLAGS += $(ALSA_LIBS) -pthread +qv4l2_SOURCES += alsa_stream.c alsa_stream.h +endif + EXTRA_DIST = exit.png fileopen.png qv4l2_24x24.png qv4l2_64x64.png qv4l2.png qv4l2.svg snapshot.png \ video-television.png fileclose.png qv4l2_16x16.png qv4l2_32x32.png qv4l2.desktop qv4l2.qrc record.png \ saveraw.png qv4l2.pro diff --git a/utils/qv4l2/alsa_stream.c b/utils/qv4l2/alsa_stream.c index 3e33b5e..90d3afb 100644 --- a/utils/qv4l2/alsa_stream.c +++ b/utils/qv4l2/alsa_stream.c @@ -26,9 +26,7 @@ * */ -#include "config.h" - -#ifdef HAVE_ALSA_ASOUNDLIB_H +#include "alsa_stream.h" #include #include @@ -40,12 +38,12 @@ #include #include #include -#include "alsa_stream.h" #define ARRAY_SIZE(a) (sizeof(a)/sizeof(*(a))) /* Private vars to control alsa thread status */ static int stop_alsa = 0; +static snd_htimestamp_t timestamp; /* Error handlers */ snd_output_t *output = NULL; @@ -422,7 +420,8 @@ static int setparams(snd_pcm_t *phandle, snd_pcm_t *chandle, static snd_pcm_sframes_t readbuf(snd_pcm_t *handle, char *buf, long len) { snd_pcm_sframes_t r; - +snd_pcm_uframes_t frames; +snd_pcm_htimestamp(handle, &frames, ×tamp); r = snd_pcm_readi(handle, buf, len); if (r < 0 && r != -EAGAIN) { r = snd_pcm_recover(handle, r, 0); @@ -453,6 +452,7 @@ static snd_pcm_sframes_t writebuf(snd_pcm_t *handle, char *buf, long len) len -= r; snd_pcm_wait(handle, 100); } +return -1; } static int alsa_stream(const char *pdevice, const char *cdevice, int latency) @@ -642,4 +642,13 @@ int alsa_thread_is_running(void) return alsa_is_running; } -#endif +void alsa_thread_timestamp(struct timeval *tv) +{ + if (alsa_thread_is_running()) { + tv->tv_sec = timestamp.tv_sec; + tv->tv_usec = timestamp.tv_nsec / 1000; + } else { + tv->tv_sec = 1337; + tv->tv_usec = 0; + } +} diff --git a/utils/qv4l2/alsa_stream.h b/utils/qv4l2/alsa_stream.h index c68fd6d..b74c3aa 100644 --- a/utils/qv4l2/alsa_stream.h +++ b/utils/qv4l2/alsa_stream.h @@ -1,5 +1,12 @@ -int alsa_thread_startup(const char *pdevice, const char *cdevice, int latency, - FILE *__error_fp, - int __verbose); +#ifndef ALSA_STRAM_H +#define ALSA_STRAM_H + +#include +#include + +int alsa_thread_startup(const char *pdevice, const char *cdevice, + int latency, FILE *__error_fp, int __verbos