Re: [PATCH 3/5] qv4l2: add ALSA stream to qv4l2

2013-08-05 Thread Bård Eirik Winther
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

2013-08-02 Thread Gregor Jasny

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

2013-08-02 Thread Hans Verkuil
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

2013-08-02 Thread Bård Eirik Winther
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