[oe-commits] org.oe.dev merge of 'b67fa447ea540c7174493e27cff5886f3f4ee90d'
jeremy_laine commit
openembedded-commits at lists.openembedded.org
Sat Dec 1 12:52:08 UTC 2007
merge of 'b67fa447ea540c7174493e27cff5886f3f4ee90d'
and 'f22535c96dd5d39ae39d98a069d0f7fa5ebb4ace'
Author: jeremy_laine at openembedded.org
Branch: org.openembedded.dev
Revision: 65f2a2de9fd90693f2c33ba07aab5da699166173
ViewMTN: http://monotone.openembedded.org/revision/info/65f2a2de9fd90693f2c33ba07aab5da699166173
Files:
1
conf/distro/angstrom-2007.1.conf
conf/distro/angstrom-2008.1.conf
packages/angstrom/angstrom-feed-configs.bb
packages/images/nslu2-minimal-image.bb
packages/flite/flite_1.2.bb
packages/flite/flite_1.3.bb
packages/flite/flite-1.3
packages/flite/flite-1.2/flite-1.2-alsa_support-1.2.diff
packages/flite/flite-1.3/flite-1.3-alsa_support-1.2.diff
packages/flite/flite.inc
Diffs:
#
# mt diff -rb67fa447ea540c7174493e27cff5886f3f4ee90d -r65f2a2de9fd90693f2c33ba07aab5da699166173
#
#
#
# patch "conf/distro/angstrom-2007.1.conf"
# from [05ca84273c41744cd1fec58e61038e6ce197c091]
# to [4f075d6c3bd4ae2a9b4d05a4d9e04b48aaafc380]
#
# patch "conf/distro/angstrom-2008.1.conf"
# from [a44e85b6e6e664e9244ae58e75d3bf2d3d3162cf]
# to [1ea5dcfd838edd17ffbc00d7af4de7866da4c071]
#
# patch "packages/angstrom/angstrom-feed-configs.bb"
# from [e16e9d7e55e13796f4551ba6ba67f36046f98ca0]
# to [510e68c1fe9549ec8bad9baa1ed4a7ce8c59a1af]
#
# patch "packages/images/nslu2-minimal-image.bb"
# from [c16184d9b2ea36248a6bf830e2682da55433caa5]
# to [ba69b1979b2563ba442f7d7bb0453c6168f8bafd]
#
============================================================
--- conf/distro/angstrom-2007.1.conf 05ca84273c41744cd1fec58e61038e6ce197c091
+++ conf/distro/angstrom-2007.1.conf 4f075d6c3bd4ae2a9b4d05a4d9e04b48aaafc380
@@ -29,6 +29,7 @@ IMAGE_LINGUAS = '${@base_less_or_equal("
# Also, it appears that no locales fit in 16Mb for now. "C" locale rules!
IMAGE_LINGUAS = '${@base_less_or_equal("ROOT_FLASH_SIZE", "16", "", "en-gb", d)}'
+# These will be put under package management soon
FEED_URIS += " \
no-arch##${ANGSTROM_URI}/unstable/feed/all \
base##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/base \
@@ -41,6 +42,11 @@ FEED_URIS += " \
# ${MACHINE}##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/machine/${MACHINE} \
# updates##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/updates"
+
+# set feed path variables
+FEED_BASEPATH = "feeds/2007/${ANGSTROM_PKG_FORMAT}/${ANGSTROM_MODE}/"
+
+
#The angstrom-mirrors.bbclass should have everything, but we can use this as a fallback
CVS_TARBALL_STASH ?= "\
http://www.angstrom-distribution.org/unstable/sources/ \
============================================================
--- conf/distro/angstrom-2008.1.conf a44e85b6e6e664e9244ae58e75d3bf2d3d3162cf
+++ conf/distro/angstrom-2008.1.conf 1ea5dcfd838edd17ffbc00d7af4de7866da4c071
@@ -44,6 +44,10 @@ FEED_URIS += " \
gstreamer##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/gstreamer \
${MACHINE}##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/machine/${MACHINE}"
+# set feed path variables
+FEED_BASEPATH = "feeds/2008/${ANGSTROM_PKG_FORMAT}/${ANGSTROM_MODE}/"
+
+
#The angstrom-mirrors.bbclass should have everything, but we can use this as a fallback
CVS_TARBALL_STASH ?= "\
http://www.angstrom-distribution.org/unstable/sources/ \
============================================================
--- packages/angstrom/angstrom-feed-configs.bb e16e9d7e55e13796f4551ba6ba67f36046f98ca0
+++ packages/angstrom/angstrom-feed-configs.bb 510e68c1fe9549ec8bad9baa1ed4a7ce8c59a1af
@@ -1,6 +1,7 @@ DESCRIPTION = "Configuration files for o
DESCRIPTION = "Configuration files for online package repositories aka feeds"
-PR = "1"
+#PV = "${DISTRO_VERSION}"
+PR = "r2"
PACKAGE_ARCH = "${MACHINE_ARCH}"
FEED_BASEPATH ?= "unstable/feed/"
@@ -11,7 +12,7 @@ do_compile() {
echo "src/gz ${feed} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/${feed}" > ${S}/${sysconfdir}/ipkg/${feed}-feed.conf
done
- echo "src/gz ${MACHINE_ARCH} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/${MACHINE_ARCH}" > ${S}/${sysconfdir}/ipkg/${MACHINE_ARCH}-feed.conf
+ echo "src/gz ${MACHINE_ARCH} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/machine/${MACHINE_ARCH}" > ${S}/${sysconfdir}/ipkg/${MACHINE_ARCH}-feed.conf
echo "src/gz no-arch ${ANGSTROM_URI}/${FEED_BASEPATH}/all" > ${S}/${sysconfdir}/ipkg/noarch-feed.conf
}
============================================================
--- packages/images/nslu2-minimal-image.bb c16184d9b2ea36248a6bf830e2682da55433caa5
+++ packages/images/nslu2-minimal-image.bb ba69b1979b2563ba442f7d7bb0453c6168f8bafd
@@ -1,3 +1,5 @@ require minimal-image.bb
require minimal-image.bb
+export IMAGE_BASENAME = "nslu2-minimalist-image"
+
inherit nslu2-image
#
# mt diff -rf22535c96dd5d39ae39d98a069d0f7fa5ebb4ace -r65f2a2de9fd90693f2c33ba07aab5da699166173
#
#
#
# rename "packages/flite/flite_1.2.bb"
# to "packages/flite/flite_1.3.bb"
#
# add_dir "packages/flite/flite-1.3"
#
# add_file "packages/flite/flite-1.2/flite-1.2-alsa_support-1.2.diff"
# content [1323b9a20a5ae18f6e810e3bfd2f87deba1fac32]
#
# add_file "packages/flite/flite-1.3/flite-1.3-alsa_support-1.2.diff"
# content [a6996dbf165f003c1ed309b24fffdc611695c242]
#
# add_file "packages/flite/flite.inc"
# content [85bb5fbc859a7afa126494a7ae04c8024d9e2dd7]
#
# add_file "packages/flite/flite_1.2.bb"
# content [e32b2aed362684c9c359d98839bc237d62603eef]
#
# patch "packages/flite/flite_1.3.bb"
# from [266d6ef692d5121beffde4c7bebca82f6a608814]
# to [363795c4972e7ad5e6d61f99a42533e41f8eaed7]
#
============================================================
--- packages/flite/flite-1.2/flite-1.2-alsa_support-1.2.diff 1323b9a20a5ae18f6e810e3bfd2f87deba1fac32
+++ packages/flite/flite-1.2/flite-1.2-alsa_support-1.2.diff 1323b9a20a5ae18f6e810e3bfd2f87deba1fac32
@@ -0,0 +1,512 @@
+Index: configure
+===================================================================
+--- flite-1.2-release/configure (.../flite-1.2-orig) (revision 10)
++++ flite-1.2-release/configure (.../release-v1.2) (revision 10)
+@@ -1415,16 +1415,16 @@
+ echo "$ac_t""no" 1>&6
+ fi
+
+-ac_safe=`echo "sys/asoundlib.h" | sed 'y%./+-%__p_%'`
+-echo $ac_n "checking for sys/asoundlib.h""... $ac_c" 1>&6
+-echo "configure:1421: checking for sys/asoundlib.h" >&5
++ac_safe=`echo "alsa/asoundlib.h" | sed 'y%./+-%__p_%'`
++echo $ac_n "checking for alsa/asoundlib.h""... $ac_c" 1>&6
++echo "configure:1421: checking for alsa/asoundlib.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+ #line 1426 "configure"
+ #include "confdefs.h"
+-#include <sys/asoundlib.h>
++#include <alsa/asoundlib.h>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+ { (eval echo configure:1431: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+@@ -1445,23 +1445,24 @@
+ echo "$ac_t""yes" 1>&6
+ AUDIODRIVER="alsa"
+ AUDIODEFS=-DCST_AUDIO_ALSA
++ AUDIOLIBS=-lasound
+ else
+ echo "$ac_t""no" 1>&6
+ fi
+
+ ac_safe=`echo "mmsystem.h" | sed 'y%./+-%__p_%'`
+ echo $ac_n "checking for mmsystem.h""... $ac_c" 1>&6
+-echo "configure:1455: checking for mmsystem.h" >&5
++echo "configure:1456: checking for mmsystem.h" >&5
+ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ cat > conftest.$ac_ext <<EOF
+-#line 1460 "configure"
++#line 1461 "configure"
+ #include "confdefs.h"
+ #include <mmsystem.h>
+ EOF
+ ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+-{ (eval echo configure:1465: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
++{ (eval echo configure:1466: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+ if test -z "$ac_err"; then
+ rm -rf conftest*
+Index: include/cst_sts.h
+===================================================================
+--- flite-1.2-release/include/cst_sts.h (.../flite-1.2-orig) (revision 10)
++++ flite-1.2-release/include/cst_sts.h (.../release-v1.2) (revision 10)
+@@ -47,9 +47,9 @@
+ /* else where, this information plus the indexes in the Unit relation */
+ /* allow reconstruction of the signal itself */
+ struct cst_sts_struct {
+- const unsigned short *frame;
+- const int size; /* in samples */
+- const unsigned char *residual;
++ unsigned short *frame;
++ int size; /* in samples */
++ unsigned char *residual;
+ };
+ typedef struct cst_sts_struct cst_sts;
+
+Index: configure.in
+===================================================================
+--- flite-1.2-release/configure.in (.../flite-1.2-orig) (revision 10)
++++ flite-1.2-release/configure.in (.../release-v1.2) (revision 10)
+@@ -131,9 +131,10 @@
+ AC_CHECK_HEADER(sys/audioio.h,
+ [AUDIODRIVER="sun"
+ AUDIODEFS=-DCST_AUDIO_SUNOS])
+-AC_CHECK_HEADER(sys/asoundlib.h,
++AC_CHECK_HEADER(alsa/asoundlib.h,
+ [AUDIODRIVER="alsa"
+- AUDIODEFS=-DCST_AUDIO_ALSA])
++ AUDIODEFS=-DCST_AUDIO_ALSA
++ AUDIOLIBS=-lasound])
+ AC_CHECK_HEADER(mmsystem.h,
+ [AUDIODRIVER="wince"
+ AUDIODEFS=-DCST_AUDIO_WINCE
+Index: src/audio/au_alsa.c
+===================================================================
+--- flite-1.2-release/src/audio/au_alsa.c (.../flite-1.2-orig) (revision 10)
++++ flite-1.2-release/src/audio/au_alsa.c (.../release-v1.2) (revision 10)
+@@ -2,7 +2,7 @@
+ /* */
+ /* Language Technologies Institute */
+ /* Carnegie Mellon University */
+-/* Copyright (c) 2001 */
++/* Copyright (c) 2000 */
+ /* All Rights Reserved. */
+ /* */
+ /* Permission is hereby granted, free of charge, to use and distribute */
+@@ -29,158 +29,283 @@
+ /* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
+ /* THIS SOFTWARE. */
+ /* */
++/*********************************************************************** */
++/* Author: Lukas Loehrer ( */
++/* Date: January 2005 */
+ /*************************************************************************/
+-/* Author: Geoff Harrison (mandrake at cepstral.com) */
+-/* Date: Sepetember 2001 */
+-/*************************************************************************/
+ /* */
+-/* Access to ALSA audio devices */
+-/* */
++/* Native access to alsa audio devices on Linux */
++/* Tested with libasound version 1.0.10 */
+ /*************************************************************************/
+
+-#include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/types.h>
++#include <assert.h>
++#include <errno.h>
++
+ #include "cst_string.h"
+ #include "cst_wave.h"
+ #include "cst_audio.h"
+
+-#include <sys/asoundlib.h>
++#include <alsa/asoundlib.h>
+
+-#include <sys/stat.h>
+-#include <fcntl.h>
+
+-static int alsa_card = 0, alsa_device = 0;
++/*static char *pcm_dev_name = "hw:0,0"; */
++static char *pcm_dev_name ="default";
+
++static inline void print_pcm_state(snd_pcm_t *handle, char *msg)
++{
++ fprintf(stderr, "PCM state at %s = %s\n", msg,
++ snd_pcm_state_name(snd_pcm_state(handle)));
++}
++
+ cst_audiodev *audio_open_alsa(int sps, int channels, cst_audiofmt fmt)
+ {
+- snd_pcm_channel_info_t pinfo;
+- snd_pcm_channel_params_t params;
+- snd_pcm_channel_setup_t setup;
+- snd_pcm_t *pcm;
+- cst_audiodev *ad;
+- int err;
++ cst_audiodev *ad;
++ unsigned int real_rate;
++ int err;
+
+-#ifdef __QNXNTO__
+- if (snd_pcm_open_preferred(&pcm,&alsa_card,&alsa_device,SND_PCM_OPEN_PLAYBACK) < 0)
+- {
+- cst_errmsg("alsa_audio: failed to open audio device\n");
+- cst_error();
+- }
+- if (snd_pcm_plugin_set_disable(pcm,PLUGIN_DISABLE_MMAP) < 0)
+- {
+- cst_errmsg("alsa_audio: failed to disable mmap\n");
+- snd_pcm_close(pcm);
+- cst_error();
+- }
+-#else
+- if (snd_pcm_open(&pcm,alsa_card,alsa_device,SND_PCM_OPEN_PLAYBACK) < 0)
+- {
+- cst_errmsg("alsa_audio: failed to open audio device\n");
+- cst_error();
+- }
+-#endif
++ /* alsa specific stuff */
++ snd_pcm_t *pcm_handle;
++ snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
++ snd_pcm_hw_params_t *hwparams;
++ snd_pcm_format_t format;
++ snd_pcm_access_t access = SND_PCM_ACCESS_RW_INTERLEAVED;
+
++ /* Allocate the snd_pcm_hw_params_t structure on the stack. */
++ snd_pcm_hw_params_alloca(&hwparams);
+
+- memset(&pinfo, 0, sizeof(pinfo));
+- memset(¶ms, 0, sizeof(params));
+- memset(&setup, 0, sizeof(setup));
++ /* Open pcm device */
++ err = snd_pcm_open(&pcm_handle, pcm_dev_name, stream, 0);
++ if (err < 0)
++ {
++ cst_errmsg("audio_open_alsa: failed to open audio device %s. %s\n",
++ pcm_dev_name, snd_strerror(err));
++ return NULL;
++ }
+
+- pinfo.channel = SND_PCM_CHANNEL_PLAYBACK;
+- snd_pcm_plugin_info(pcm,&pinfo);
++ /* Init hwparams with full configuration space */
++ err = snd_pcm_hw_params_any(pcm_handle, hwparams);
++ if (err < 0)
++ {
++ snd_pcm_close(pcm_handle);
++ cst_errmsg("audio_open_alsa: failed to get hardware parameters from audio device. %s\n", snd_strerror(err));
++ return NULL;
++ }
+
+- params.mode = SND_PCM_MODE_BLOCK;
+- params.channel = SND_PCM_CHANNEL_PLAYBACK;
+- params.start_mode = SND_PCM_START_DATA;
+- params.stop_mode = SND_PCM_STOP_STOP;
++ /* Set access mode */
++ err = snd_pcm_hw_params_set_access(pcm_handle, hwparams, access);
++ if (err < 0)
++ {
++ snd_pcm_close(pcm_handle);
++ cst_errmsg("audio_open_alsa: failed to set access mode. %s.\n", snd_strerror(err));
++ return NULL;
++ }
+
+- params.buf.block.frag_size = pinfo.max_fragment_size;
+- params.buf.block.frags_max = 1;
+- params.buf.block.frags_min = 1;
+-
+- params.format.interleave = 1;
+- params.format.rate = sps;
+- params.format.voices = channels;
+-
+- switch (fmt)
+- {
+- case CST_AUDIO_LINEAR16:
++ /* Determine matching alsa sample format */
++ /* This could be implemented in a more */
++ /* flexible way (byte order conversion). */
++ switch (fmt)
++ {
++ case CST_AUDIO_LINEAR16:
+ if (CST_LITTLE_ENDIAN)
+- params.format.format = SND_PCM_SFMT_S16_LE;
++ format = SND_PCM_FORMAT_S16_LE;
+ else
+- params.format.format = SND_PCM_SFMT_S16_BE;
++ format = SND_PCM_FORMAT_S16_BE;
+ break;
+- case CST_AUDIO_LINEAR8:
+- params.format.format = SND_PCM_SFMT_U8;
++ case CST_AUDIO_LINEAR8:
++ format = SND_PCM_FORMAT_U8;
+ break;
+- case CST_AUDIO_MULAW:
+- params.format.format = SND_PCM_SFMT_MU_LAW;
++ case CST_AUDIO_MULAW:
++ format = SND_PCM_FORMAT_MU_LAW;
+ break;
+- }
++ default:
++ snd_pcm_close(pcm_handle);
++ cst_errmsg("audio_open_alsa: failed to find suitable format.\n");
++ return NULL;
++ break;
++ }
+
+- if((err = snd_pcm_plugin_params(pcm,¶ms)) < 0)
+- {
+- cst_errmsg("alsa_audio params setting failed: %s\n",snd_strerror(err));
+- snd_pcm_close(pcm);
+- cst_error();
+- }
+- if((err = snd_pcm_plugin_setup(pcm,SND_PCM_CHANNEL_PLAYBACK)) > 0) {
+- cst_errmsg("alsa_audio sound prepare setting failed: %s\n",snd_strerror(err));
+- snd_pcm_close(pcm);
+- cst_error();
+- }
+- if((err = snd_pcm_plugin_prepare(pcm,SND_PCM_CHANNEL_PLAYBACK)) > 0) {
+- cst_errmsg("alsa_audio sound prepare setting failed: %s\n",snd_strerror(err));
+- snd_pcm_close(pcm);
+- cst_error();
+- }
++ /* Set samble format */
++ err = snd_pcm_hw_params_set_format(pcm_handle, hwparams, format);
++ if (err <0)
++ {
++ snd_pcm_close(pcm_handle);
++ cst_errmsg("audio_open_alsa: failed to set format. %s.\n", snd_strerror(err));
++ return NULL;
++ }
+
+- pinfo.channel = SND_PCM_CHANNEL_PLAYBACK;
+- snd_pcm_plugin_info(pcm,&pinfo);
++ /* Set sample rate near the disired rate */
++ real_rate = sps;
++ err = snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, &real_rate, 0);
++ if (err < 0)
++ {
++ snd_pcm_close(pcm_handle);
++ cst_errmsg("audio_open_alsa: failed to set sample rate near %d. %s.\n", sps, snd_strerror(err));
++ return NULL;
++ }
++ /*FIXME: This is probably too strict */
++ assert(sps == real_rate);
+
+- ad = cst_alloc(cst_audiodev, 1);
+- ad->platform_data = pcm;
+- ad->sps = ad->real_sps = sps;
+- ad->channels = ad->real_channels = channels;
+- ad->fmt = ad->real_fmt = fmt;
++ /* Set number of channels */
++ assert(channels >0);
++ err = snd_pcm_hw_params_set_channels(pcm_handle, hwparams, channels);
++ if (err < 0)
++ {
++ snd_pcm_close(pcm_handle);
++ cst_errmsg("audio_open_alsa: failed to set number of channels to %d. %s.\n", channels, snd_strerror(err));
++ return NULL;
++ }
+
+- return ad;
++ /* Commit hardware parameters */
++ err = snd_pcm_hw_params(pcm_handle, hwparams);
++ if (err < 0)
++ {
++ snd_pcm_close(pcm_handle);
++ cst_errmsg("audio_open_alsa: failed to set hw parameters. %s.\n", snd_strerror(err));
++ return NULL;
++ }
++
++ /* Make sure the device is ready to accept data */
++ assert(snd_pcm_state(pcm_handle) == SND_PCM_STATE_PREPARED);
++
++ /* Write hardware parameters to flite audio device data structure */
++ ad = cst_alloc(cst_audiodev, 1);
++ assert(ad != NULL);
++ ad->real_sps = ad->sps = sps;
++ ad->real_channels = ad->channels = channels;
++ ad->real_fmt = ad->fmt = fmt;
++ ad->platform_data = (void *) pcm_handle;
++
++ return ad;
+ }
+
+ int audio_close_alsa(cst_audiodev *ad)
+ {
+- snd_pcm_t *pcm;
++ int result;
++ snd_pcm_t *pcm_handle;
+
+- if (ad == NULL)
+- return 0;
++ if (ad == NULL)
++ return 0;
+
+- pcm = ad->platform_data;
+- snd_pcm_plugin_flush(pcm,0);
+- snd_pcm_close(pcm);
+- cst_free(ad);
++ pcm_handle = (snd_pcm_t *) ad->platform_data;
++ result = snd_pcm_close(pcm_handle);
++ if (result < 0)
++ {
++ cst_errmsg("audio_close_alsa: Error: %s.\n", snd_strerror(result));
++ }
++ cst_free(ad);
++ return result;
++}
+
+- return 0;
++/* Returns zero if recovery was successful. */
++static int recover_from_error(snd_pcm_t *pcm_handle, ssize_t res)
++{
++ if (res == -EPIPE) /* xrun */
++ {
++ res = snd_pcm_prepare(pcm_handle);
++ if (res < 0)
++ {
++ /* Failed to recover from xrun */
++ cst_errmsg("recover_from_write_error: failed to recover from xrun. %s\n.", snd_strerror(res));
++ return res;
++ }
++ }
++ else if (res == -ESTRPIPE) /* Suspend */
++ {
++ while ((res = snd_pcm_resume(pcm_handle)) == -EAGAIN)
++ {
++ snd_pcm_wait(pcm_handle, 1000);
++ }
++ if (res < 0)
++ {
++ res = snd_pcm_prepare(pcm_handle);
++ if (res <0)
++ {
++ /* Resume failed */
++ cst_errmsg("audio_recover_from_write_error: failed to resume after suspend. %s\n.", snd_strerror(res));
++ return res;
++ }
++ }
++ }
++ else if (res < 0)
++ {
++ /* Unknown failure */
++ cst_errmsg("audio_recover_from_write_error: %s.\n", snd_strerror(res));
++ return res;
++ }
++ return 0;
+ }
+
+ int audio_write_alsa(cst_audiodev *ad, void *samples, int num_bytes)
+ {
+- snd_pcm_t *pcm = ad->platform_data;
++ size_t frame_size;
++ ssize_t num_frames, res;
++ snd_pcm_t *pcm_handle;
++ char *buf = (char *) samples;
+
+- return snd_pcm_plugin_write(pcm,samples,num_bytes);
++ /* Determine frame size in bytes */
++ frame_size = audio_bps(ad->real_fmt) * ad->real_channels;
++ /* Require that only complete frames are handed in */
++ assert((num_bytes % frame_size) == 0);
++ num_frames = num_bytes / frame_size;
++ pcm_handle = (snd_pcm_t *) ad->platform_data;
++
++ while (num_frames > 0)
++ {
++ res = snd_pcm_writei(pcm_handle, buf, num_frames);
++ if (res != num_frames)
++ {
++ if (res == -EAGAIN || (res > 0 && res < num_frames))
++ {
++ snd_pcm_wait(pcm_handle, 100);
++ }
++ else if (recover_from_error(pcm_handle, res) < 0)
++ {
++ return -1;
++ }
++ }
++
++ if (res >0)
++ {
++ num_frames -= res;
++ buf += res * frame_size;
++ }
++ }
++ return num_bytes;
+ }
+
+ int audio_flush_alsa(cst_audiodev *ad)
+ {
+- snd_pcm_t *pcm = ad->platform_data;
+-
+- return snd_pcm_plugin_flush(pcm,0);
++ int result;
++ result = snd_pcm_drain((snd_pcm_t *) ad->platform_data);
++ if (result < 0)
++ {
++ cst_errmsg("audio_flush_alsa: Error: %s.\n", snd_strerror(result));
++ }
++ /* Prepare device for more data */
++ result = snd_pcm_prepare((snd_pcm_t *) ad->platform_data);
++if (result < 0)
++ {
++ cst_errms%s
>>> DIFF TRUNCATED @ 16K
More information about the Openembedded-commits
mailing list