Diffstat (limited to 'core/applets/vmemo/vmemo.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/applets/vmemo/vmemo.cpp | 150 |
1 files changed, 58 insertions, 92 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp index b77e3b8..b5239eb 100644 --- a/core/applets/vmemo/vmemo.cpp +++ b/core/applets/vmemo/vmemo.cpp @@ -16,2 +16,6 @@ // Sun 03-17-2002 L.J.Potter <ljp@llornkcor.com> +extern "C" { +#include "adpcm.h" +} + #include <sys/utsname.h> @@ -59,2 +63,9 @@ typedef struct _waveheader { +struct adpcm_state encoder_state; +//struct adpcm_state decoder_state; + +#define WAVE_FORMAT_DVI_ADPCM (0x0011) +#define WAVE_FORMAT_PCM (0x0001) + + #include "vmemo.h" @@ -198,4 +209,3 @@ static char * vmemo_xpm[] = { VMemo::VMemo( QWidget *parent, const char *_name ) - : QWidget( parent, _name ) -{ + : QWidget( parent, _name ) { setFixedHeight( 18 ); @@ -215,2 +225,3 @@ VMemo::VMemo( QWidget *parent, const char *_name ) int toggleKey = setToggleButton(vmCfg.readNumEntry("toggleKey", -1)); + useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0); @@ -245,8 +256,6 @@ VMemo::VMemo( QWidget *parent, const char *_name ) -VMemo::~VMemo() -{ +VMemo::~VMemo() { } -void VMemo::receive( const QCString &msg, const QByteArray &data ) -{ +void VMemo::receive( const QCString &msg, const QByteArray &data ) { qDebug("receive"); @@ -266,4 +275,3 @@ void VMemo::receive( const QCString &msg, const QByteArray &data ) -void VMemo::paintEvent( QPaintEvent* ) -{ +void VMemo::paintEvent( QPaintEvent* ) { QPainter p(this); @@ -272,4 +280,3 @@ void VMemo::paintEvent( QPaintEvent* ) -void VMemo::mousePressEvent( QMouseEvent * me) -{ +void VMemo::mousePressEvent( QMouseEvent * me) { // just to be safe @@ -281,4 +288,3 @@ void VMemo::mousePressEvent( QMouseEvent * me) mousePressEvent and mouseReleaseEvent with a NULL parameter. */ - if ( me->button() != LeftButton) - + if ( me->button() != LeftButton || me != NULL) // if (!systemZaurus && me != NULL) @@ -292,4 +298,3 @@ void VMemo::mousePressEvent( QMouseEvent * me) -void VMemo::mouseReleaseEvent( QMouseEvent * ) -{ +void VMemo::mouseReleaseEvent( QMouseEvent * ) { // if(usingIcon && !recording) @@ -377,5 +382,6 @@ bool VMemo::startRecording() { } - QString cmd; - cmd.sprintf("mv %s "+fileName,pointer); + record(); + QString cmd; + cmd.sprintf("mv %s "+fileName, pointer); // move tmp file to regular file here @@ -394,4 +400,2 @@ bool VMemo::startRecording() { l.writeLink(); - - record(); @@ -416,4 +420,3 @@ void VMemo::stopRecording() { -int VMemo::openDSP() -{ +int VMemo::openDSP() { Config cfg("Vmemo"); @@ -469,4 +472,3 @@ int VMemo::openDSP() -int VMemo::openWAV(const char *filename) -{ +int VMemo::openWAV(const char *filename) { track.setName(filename); @@ -486,3 +488,6 @@ int VMemo::openWAV(const char *filename) wh.sc_len = 16; - wh.format = PCM_CODE; + if(useADPCM) + wh.format = WAVE_FORMAT_DVI_ADPCM;//PCM_CODE; + else + wh.format = PCM_CODE; wh.modus = channels; @@ -501,4 +506,3 @@ int VMemo::openWAV(const char *filename) -void VMemo::record(void) -{ +void VMemo::record(void) { int length=0, result, value; @@ -513,80 +517,42 @@ void VMemo::record(void) - if(systemZaurus) { +// if(systemZaurus) { +// } else { // 16 bit only capabilities - msg.sprintf("Recording format zaurus"); + msg.sprintf("Recording format other"); qDebug(msg); - signed short sound[1024], monoBuffer[1024]; - - if(format==AFMT_S16_LE) { + int bufsize=1024; + int bytesWritten=0; + signed short sound[1024], monoBuffer[1024]; + char abuf[bufsize/2]; + short sbuf[bufsize]; + while(recording) { - while(recording) { - - result = read(dsp, sound, 1024); // 8192 - // int j=0; - - for (int i = 0; i < result; i++) { //since Z is mono do normally - monoBuffer[i] = sound[i]; + if(useADPCM) + result = read( dsp, sbuf, bufsize); // 8192 + else + result = read(dsp, sound, 1024); // 8192 + if( result <= 0) { + perror("recording error "); +// qDebug(currentFileName); + QMessageBox::message(tr("Note"),tr("error recording")); + recording=FALSE;; + break; } - length+=write(wav, monoBuffer, result); - if(length<0) - recording=false; - // for (int i = 0; i < result; i+=2) { - // monoBuffer[j] = sound[i]; - // // monoBuffer[j] = (sound[i]+sound[i+1])/2; - - // j++; - // } - qApp->processEvents(); - // printf("%d\r",length); - // fflush(stdout); - } - - } else { //AFMT_U8 - // 8bit unsigned - unsigned short sound[1024], monoBuffer[1024]; - while(recording) { - result = read(dsp, sound, 1024); // 8192 - // int j=0; + if(useADPCM) { + adpcm_coder( sbuf, abuf, result/2, &encoder_state); + bytesWritten = ::write(wav, abuf, result/4); - // if(systemZaurus) { + } else { + for (int i = 0; i < result; i++) { //since Z is mono do normally + monoBuffer[i] = sound[i]; + } - for (int i = 0; i < result; i++) { //since Z is mono do normally - monoBuffer[i] = sound[i]; + length+=write(wav, monoBuffer, result); } - - length+=write(wav, monoBuffer, result); - - // for (int i = 0; i < result; i+=2) { - // monoBuffer[j] = (sound[i]+sound[i+1])/2; - // j++; - // } - // length+=write(wav, monoBuffer, result/2); - length += result; - // printf("%d\r",length); - // fflush(stdout); - } - - qApp->processEvents(); - } - - } else { // 16 bit only capabilities - - - msg.sprintf("Recording format other"); - qDebug(msg); - - signed short sound[1024];//, monoBuffer[512]; - - while(recording) { - - result = read(dsp, sound, 1024); // 8192 - - write(wav, sound, result); - length += result; + length +=bytesWritten; if(length<0) { - recording=false; @@ -602,3 +568,3 @@ void VMemo::record(void) // medialplayer states wrong length in secs - } + // } |