Greg Wright wrote:

Synopsis:

  The alsa driver wasn't working, it would only write a partial buffer
  before returning from _WriteBytes(). This resulted in an assert for
  debug builds and choppy cricket sounds for release builds. The
  following patch fixes this by making ALSA write the whole buffer
  before returning.


Sounds good to me if it sounds good to you... _WriteBytes has an api that looks like it can handle partial writes, an alternative fix would be to move this write-until-everything-is-written loop up into audUnix(?)

Are you using threaded audio? I was getting asserts / problems with the audio thread turned on, and those went away when I turned it off... not sure if the problems here are related.

  I have noticed that the ALSA driver uses about 100% cpu on my system
  when using ALSA as opposed to OSS which uses only about 20%. The
  increase is all SYS time as oppose to user time. The user time for
  both OSS and ALSA are the same.


Weird...





Files Modified:

           audio/device/platform/unix/audlinux_alsa.cpp


Platforms and Profiles Affected:

          linux only.


Branch: HEAD, 150Cay(after branch).



Index: platform/unix/audlinux_alsa.cpp
===================================================================
RCS file: /cvsroot/audio/device/platform/unix/audlinux_alsa.cpp,v
retrieving revision 1.4
diff -u -w -r1.4 audlinux_alsa.cpp
--- platform/unix/audlinux_alsa.cpp    28 Sep 2004 21:04:17 -0000    1.4
+++ platform/unix/audlinux_alsa.cpp    8 Mar 2005 19:48:44 -0000
@@ -856,6 +856,8 @@
     int err = 0;
     unsigned int frames_written = 0;
     snd_pcm_sframes_t num_frames;
+    ULONG32 ulBytesToWrite = ulBuffLength;
+    ULONG32 ulBytesWrote = 0;

     lCount = 0;

@@ -874,15 +876,19 @@
         return m_wLastError;
     }

- num_frames = snd_pcm_bytes_to_frames(m_pAlsaPCMHandle, ulBuffLength);

do
{
+ num_frames = snd_pcm_bytes_to_frames(m_pAlsaPCMHandle, ulBytesToWrite);
err = snd_pcm_writei( m_pAlsaPCMHandle, buffer, num_frames );
+
if (err >= 0)
{
frames_written = err;
- lCount = snd_pcm_frames_to_bytes (m_pAlsaPCMHandle, frames_written);
+ ulBytesWrote = snd_pcm_frames_to_bytes (m_pAlsaPCMHandle, frames_written);
+ buffer += ulBytesWrote;
+ ulBytesToWrite -= ulBytesWrote;
+ lCount += ulBytesWrote;
}
else
{
@@ -906,8 +912,9 @@
m_wLastError = RA_AOE_DEVBUSY;
}
}
- } while (err == -EAGAIN);
+ } while (err == -EAGAIN || (err>0 && ulBytesToWrite>0));


+    HX_ASSERT( lCount == ulBuffLength );
     return m_wLastError;
 }


_______________________________________________ Player-dev mailing list [EMAIL PROTECTED] http://lists.helixcommunity.org/mailman/listinfo/player-dev



--
Ryan Gammon
[EMAIL PROTECTED]
Developer for Helix Player
https://player.helixcommunity.org


_______________________________________________ Audio-dev mailing list [email protected] http://lists.helixcommunity.org/mailman/listinfo/audio-dev

Reply via email to