git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30480
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
int fd() const { return m_fd; }
// read/write (unbuffered)
int fd() const { return m_fd; }
// read/write (unbuffered)
- // returns number of bytes read or ofsInvalid on error
- size_t Read(void *pBuf, size_t nCount);
+ // returns number of bytes read or wxInvalidOffset on error
+ ssize_t Read(void *pBuf, size_t nCount);
// returns the number of bytes written
size_t Write(const void *pBuf, size_t nCount);
// returns true on success
// returns the number of bytes written
size_t Write(const void *pBuf, size_t nCount);
// returns true on success
// ----------------------------------------------------------------------------
// read
// ----------------------------------------------------------------------------
// read
-size_t wxFile::Read(void *pBuf, size_t nCount)
+ssize_t wxFile::Read(void *pBuf, size_t nCount)
{
wxCHECK( (pBuf != NULL) && IsOpened(), 0 );
{
wxCHECK( (pBuf != NULL) && IsOpened(), 0 );
if ( iRc == -1 )
{
wxLogSysError(_("can't read from file descriptor %d"), m_fd);
if ( iRc == -1 )
{
wxLogSysError(_("can't read from file descriptor %d"), m_fd);
- return (size_t)wxInvalidOffset;
+ return wxInvalidOffset;
// read the whole file in memory
m_pData = new size_t8[nSize];
// read the whole file in memory
m_pData = new size_t8[nSize];
- if ( fileMsg.Read(m_pData, nSize) != nSize + (size_t)0 ) {
+ if ( fileMsg.Read(m_pData, nSize) != nSize ) {
wxDELETEA(m_pData);
return false;
}
wxDELETEA(m_pData);
return false;
}
size_t wxFileInputStream::OnSysRead(void *buffer, size_t size)
{
size_t wxFileInputStream::OnSysRead(void *buffer, size_t size)
{
- size_t ret = m_file->Read(buffer, size);
+ ssize_t ret = m_file->Read(buffer, size);
// NB: we can't use a switch here because HP-UX CC doesn't allow
// switching over long long (which size_t is in 64bit mode)
// NB: we can't use a switch here because HP-UX CC doesn't allow
// switching over long long (which size_t is in 64bit mode)
// nothing read, so nothing more to read
m_lasterror = wxSTREAM_EOF;
}
// nothing read, so nothing more to read
m_lasterror = wxSTREAM_EOF;
}
- else if ( ret == (size_t)wxInvalidOffset )
+ else if ( ret == wxInvalidOffset )
{
m_lasterror = wxSTREAM_READ_ERROR;
ret = 0;
{
m_lasterror = wxSTREAM_READ_ERROR;
ret = 0;
size_t wxFFileInputStream::OnSysRead(void *buffer, size_t size)
{
size_t wxFFileInputStream::OnSysRead(void *buffer, size_t size)
{
- size_t ret = m_file->Read(buffer, size);
+ ssize_t ret = m_file->Read(buffer, size);
if (m_file->Eof())
m_lasterror = wxSTREAM_EOF;
if (m_file->Eof())
m_lasterror = wxSTREAM_EOF;
- if (ret == (size_t)wxInvalidOffset)
+ if (ret == wxInvalidOffset)
{
m_lasterror = wxSTREAM_READ_ERROR;
ret = 0;
{
m_lasterror = wxSTREAM_READ_ERROR;
ret = 0;
- size_t count = file.Read(buf, WXSIZEOF(buf));
- if ( count == (size_t)wxInvalidOffset )
+ ssize_t count = file.Read(buf, WXSIZEOF(buf));
+ if ( count == wxInvalidOffset )
{
wxLogError(_("Failed to read PID from lock file."));
}
{
wxLogError(_("Failed to read PID from lock file."));
}
// Created: 25/10/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart, Open Source Applications Foundation
// Created: 25/10/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart, Open Source Applications Foundation
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
// ----------------------------------------------------------------------------
// wxSoundData
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// wxSoundData
// ----------------------------------------------------------------------------
void wxSoundData::IncRef()
{
#if wxUSE_THREADS
void wxSoundData::IncRef()
{
#if wxUSE_THREADS
private:
int OpenDSP(const wxSoundData *data);
bool InitDSP(int dev, const wxSoundData *data);
private:
int OpenDSP(const wxSoundData *data);
bool InitDSP(int dev, const wxSoundData *data);
int m_DSPblkSize; // Size of the DSP buffer
bool m_needConversion;
};
int m_DSPblkSize; // Size of the DSP buffer
bool m_needConversion;
};
volatile wxSoundPlaybackStatus *status)
{
int dev = OpenDSP(data);
volatile wxSoundPlaybackStatus *status)
{
int dev = OpenDSP(data);
if (dev < 0)
return false;
if (dev < 0)
return false;
l += i;
} while (play && l < datasize);
} while (flags & wxSOUND_LOOP);
l += i;
} while (play && l < datasize);
} while (flags & wxSOUND_LOOP);
close(dev);
return true;
}
close(dev);
return true;
}
int wxSoundBackendOSS::OpenDSP(const wxSoundData *data)
{
int dev = -1;
int wxSoundBackendOSS::OpenDSP(const wxSoundData *data)
{
int dev = -1;
if ((dev = open(AUDIODEV, O_WRONLY, 0)) <0)
return -1;
if ((dev = open(AUDIODEV, O_WRONLY, 0)) <0)
return -1;
if (!InitDSP(dev, data) || m_needConversion)
{
close(dev);
if (!InitDSP(dev, data) || m_needConversion)
{
close(dev);
}
m_needConversion = false;
}
m_needConversion = false;
tmp = data->m_bitsPerSample;
if (ioctl(dev, SNDCTL_DSP_SAMPLESIZE, &tmp) < 0)
{
tmp = data->m_bitsPerSample;
if (ioctl(dev, SNDCTL_DSP_SAMPLESIZE, &tmp) < 0)
{
_T("Unable to set DSP sample size to %d (wants %d)"),
data->m_bitsPerSample, tmp);
m_needConversion = true;
_T("Unable to set DSP sample size to %d (wants %d)"),
data->m_bitsPerSample, tmp);
m_needConversion = true;
unsigned stereo = data->m_channels == 1 ? 0 : 1;
tmp = stereo;
if (ioctl(dev, SNDCTL_DSP_STEREO, &tmp) < 0)
unsigned stereo = data->m_channels == 1 ? 0 : 1;
tmp = stereo;
if (ioctl(dev, SNDCTL_DSP_STEREO, &tmp) < 0)
- wxLogTrace(_T("sound"), _T("Unable to set DSP to %s."), stereo? _T("stereo"):_T("mono"));
+ wxLogTrace(_T("sound"), _T("Unable to set DSP to %s."), stereo? _T("stereo"):_T("mono"));
m_needConversion = true;
}
m_needConversion = true;
}
// problems. Sound cards will sometimes use things like 44101 when you
// ask for 44100. No need overriding this and having strange output
// file rates for something that we can't hear anyways.
// problems. Sound cards will sometimes use things like 44101 when you
// ask for 44100. No need overriding this and having strange output
// file rates for something that we can't hear anyways.
- if (data->m_samplingRate - tmp > (tmp * .01) ||
- tmp - data->m_samplingRate > (tmp * .01)) {
- wxLogTrace(_T("sound"),
+ if (data->m_samplingRate - tmp > (tmp * .01) ||
+ tmp - data->m_samplingRate > (tmp * .01)) {
+ wxLogTrace(_T("sound"),
_T("Unable to set DSP sampling rate to %d (wants %d)"),
data->m_samplingRate, tmp);
m_needConversion = true;
_T("Unable to set DSP sampling rate to %d (wants %d)"),
data->m_samplingRate, tmp);
m_needConversion = true;
}
// Do this last because some drivers can adjust the buffer sized based on
}
// Do this last because some drivers can adjust the buffer sized based on
#endif // HAVE_SYS_SOUNDCARD_H
// ----------------------------------------------------------------------------
#endif // HAVE_SYS_SOUNDCARD_H
// ----------------------------------------------------------------------------
wxSoundData *data, unsigned flags)
: wxThread(), m_adapt(adaptor), m_data(data), m_flags(flags) {}
virtual ExitCode Entry();
wxSoundData *data, unsigned flags)
: wxThread(), m_adapt(adaptor), m_data(data), m_flags(flags) {}
virtual ExitCode Entry();
protected:
wxSoundSyncOnlyAdaptor *m_adapt;
wxSoundData *m_data;
protected:
wxSoundSyncOnlyAdaptor *m_adapt;
wxSoundData *m_data;
void wxSoundSyncOnlyAdaptor::Stop()
{
wxLogTrace(_T("sound"), _T("asking audio to stop"));
void wxSoundSyncOnlyAdaptor::Stop()
{
wxLogTrace(_T("sound"), _T("asking audio to stop"));
#if wxUSE_THREADS
// tell the player thread (if running) to stop playback ASAP:
m_status.m_stopRequested = true;
#if wxUSE_THREADS
// tell the player thread (if running) to stop playback ASAP:
m_status.m_stopRequested = true;
// acquire the mutex to be sure no sound is being played, then
// release it because we don't need it for anything (the effect of this
// is that calling thread will wait until playback thread reacts to
// acquire the mutex to be sure no sound is being played, then
// release it because we don't need it for anything (the effect of this
// is that calling thread will wait until playback thread reacts to
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
wxSoundBackend *wxSound::ms_backend = NULL;
// ----------------------------------------------------------------------------
wxSoundBackend *wxSound::ms_backend = NULL;
{
wxASSERT_MSG( !isResource,
_T("Loading sound from resources is only supported on Windows") );
{
wxASSERT_MSG( !isResource,
_T("Loading sound from resources is only supported on Windows") );
wxFile fileWave;
if (!fileWave.Open(fileName, wxFile::read))
wxFile fileWave;
if (!fileWave.Open(fileName, wxFile::read))
- size_t len = fileWave.Length();
+ wxFileOffset len = fileWave.Length();
wxUint8 *data = new wxUint8[len];
if (fileWave.Read(data, len) != len)
{
wxUint8 *data = new wxUint8[len];
if (fileWave.Read(data, len) != len)
{
fileName.c_str());
return false;
}
fileName.c_str());
return false;
}
wxLogTrace(_T("sound"), _T("unloading backend"));
Stop();
wxLogTrace(_T("sound"), _T("unloading backend"));
Stop();
delete ms_backend;
ms_backend = NULL;
#if wxUSE_LIBSDL && wxUSE_PLUGINS
delete ms_backend;
ms_backend = NULL;
#if wxUSE_LIBSDL && wxUSE_PLUGINS
wxUint32 uiSize;
wxUint16 uiFormatTag;
wxUint16 uiChannels;
wxUint32 uiSize;
wxUint16 uiFormatTag;
wxUint16 uiChannels;
return false;
memcpy(&ul,&data[FMT_INDEX + waveformat.uiSize + 12], 4);
ul = wxUINT32_SWAP_ON_BE(ul);
return false;
memcpy(&ul,&data[FMT_INDEX + waveformat.uiSize + 12], 4);
ul = wxUINT32_SWAP_ON_BE(ul);
//WAS: if (ul + FMT_INDEX + waveformat.uiSize + 16 != length)
if (ul + FMT_INDEX + waveformat.uiSize + 16 > length)
return false;
//WAS: if (ul + FMT_INDEX + waveformat.uiSize + 16 != length)
if (ul + FMT_INDEX + waveformat.uiSize + 16 > length)
return false;
if (waveformat.uiFormatTag != WAVE_FORMAT_PCM)
return false;
if (waveformat.uiFormatTag != WAVE_FORMAT_PCM)
return false;
-
- if (waveformat.ulSamplesPerSec !=
+
+ if (waveformat.ulSamplesPerSec !=
waveformat.ulAvgBytesPerSec / waveformat.uiBlockAlign)
return false;
waveformat.ulAvgBytesPerSec / waveformat.uiBlockAlign)
return false;
m_data = new wxSoundData;
m_data->m_channels = waveformat.uiChannels;
m_data->m_samplingRate = waveformat.ulSamplesPerSec;
m_data = new wxSoundData;
m_data->m_channels = waveformat.uiChannels;
m_data->m_samplingRate = waveformat.ulSamplesPerSec;
else
m_data->m_dataWithHeader = (wxUint8*)data;
else
m_data->m_dataWithHeader = (wxUint8*)data;
(&m_data->m_dataWithHeader[FMT_INDEX + waveformat.uiSize + 8]);
return true;
(&m_data->m_dataWithHeader[FMT_INDEX + waveformat.uiSize + 8]);
return true;
char *buf = new char[len + 1];
buf[len] = '\0';
char *buf = new char[len + 1];
buf[len] = '\0';
- if ( file.Read(buf, len) == (size_t)wxInvalidOffset ) {
+ if ( file.Read(buf, len) == wxInvalidOffset ) {
delete [] buf;
return false;
delete [] buf;
return false;
char *buf = new char[len + 1];
buf[len] = '\0';
char *buf = new char[len + 1];
buf[len] = '\0';
- if ( file.Read(buf, len) == (size_t)wxInvalidOffset ) {
+ if ( file.Read(buf, len) == wxInvalidOffset ) {
delete [] buf;
return false;
delete [] buf;
return false;
+ Revision 1.33 2004/11/12 03:30:07 RL
+ Cruft cleanup from MJW, strip the tabs out of sound.cpp
+
Revision 1.32 2004/11/10 21:02:58 VZ
new set of fixes for problems due to huge files support: drop wxFileSize_t, use wxFileOffset only, make wxInvalidOffset an int (main part of the patch 1063498)
Revision 1.32 2004/11/10 21:02:58 VZ
new set of fixes for problems due to huge files support: drop wxFileSize_t, use wxFileOffset only, make wxInvalidOffset an int (main part of the patch 1063498)