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 @@ -13,8 +13,12 @@ /* * $Id$ */ // Sun 03-17-2002 L.J.Potter <ljp@llornkcor.com> +extern "C" { +#include "adpcm.h" +} + #include <sys/utsname.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> @@ -56,8 +60,15 @@ typedef struct _waveheader { #define PCM_CODE 1 #define WAVE_MONO 1 #define WAVE_STEREO 2 +struct adpcm_state encoder_state; +//struct adpcm_state decoder_state; + +#define WAVE_FORMAT_DVI_ADPCM (0x0011) +#define WAVE_FORMAT_PCM (0x0001) + + #include "vmemo.h" #include <qpe/qpeapplication.h> #include <qpe/resource.h> @@ -195,10 +206,9 @@ static char * vmemo_xpm[] = { " n n n n n n n n n "}; VMemo::VMemo( QWidget *parent, const char *_name ) - : QWidget( parent, _name ) -{ + : QWidget( parent, _name ) { setFixedHeight( 18 ); setFixedWidth( 14 ); recording = FALSE; @@ -212,8 +222,9 @@ VMemo::VMemo( QWidget *parent, const char *_name ) Config vmCfg("Vmemo"); vmCfg.setGroup("Defaults"); int toggleKey = setToggleButton(vmCfg.readNumEntry("toggleKey", -1)); + useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0); qDebug("toggleKey %d", toggleKey); if(release.find("embedix",0,TRUE) !=-1) @@ -242,14 +253,12 @@ VMemo::VMemo( QWidget *parent, const char *_name ) hide(); } } -VMemo::~VMemo() -{ +VMemo::~VMemo() { } -void VMemo::receive( const QCString &msg, const QByteArray &data ) -{ +void VMemo::receive( const QCString &msg, const QByteArray &data ) { qDebug("receive"); QDataStream stream( data, IO_ReadOnly ); if (msg == "toggleRecord()") { if (recording) { @@ -263,25 +272,22 @@ void VMemo::receive( const QCString &msg, const QByteArray &data ) } } } -void VMemo::paintEvent( QPaintEvent* ) -{ +void VMemo::paintEvent( QPaintEvent* ) { QPainter p(this); p.drawPixmap( 0, 1,( const char** ) vmemo_xpm ); } -void VMemo::mousePressEvent( QMouseEvent * me) -{ +void VMemo::mousePressEvent( QMouseEvent * me) { // just to be safe if (recording) { recording = FALSE; return; } /* No mousePress/mouseRelease recording on the iPAQ. The REC button on the iPAQ calls these functions mousePressEvent and mouseReleaseEvent with a NULL parameter. */ - if ( me->button() != LeftButton) - + if ( me->button() != LeftButton || me != NULL) // if (!systemZaurus && me != NULL) return; if(!recording) @@ -289,10 +295,9 @@ void VMemo::mousePressEvent( QMouseEvent * me) else stopRecording(); } -void VMemo::mouseReleaseEvent( QMouseEvent * ) -{ +void VMemo::mouseReleaseEvent( QMouseEvent * ) { // if(usingIcon && !recording) // stopRecording(); } @@ -374,11 +379,12 @@ bool VMemo::startRecording() { QMessageBox::critical(0, "vmemo", err, "Abort"); ::close(dsp); return FALSE; } - QString cmd; - cmd.sprintf("mv %s "+fileName,pointer); + record(); + QString cmd; + cmd.sprintf("mv %s "+fileName, pointer); // move tmp file to regular file here system(cmd.latin1()); QArray<int> cats(1); @@ -391,10 +397,8 @@ bool VMemo::startRecording() { l.setName(dlName); l.setType("audio/x-wav"); l.setCategories(cats); l.writeLink(); - - record(); return TRUE; } @@ -413,10 +417,9 @@ void VMemo::stopRecording() { if( cfg.readNumEntry("hideIcon",0) == 1 ) hide(); } -int VMemo::openDSP() -{ +int VMemo::openDSP() { Config cfg("Vmemo"); cfg.setGroup("Record"); speed = cfg.readNumEntry("SampleRate", 22050); @@ -466,10 +469,9 @@ int VMemo::openDSP() return 1; } -int VMemo::openWAV(const char *filename) -{ +int VMemo::openWAV(const char *filename) { track.setName(filename); if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw)) { errorMsg=filename; return -1; @@ -483,9 +485,12 @@ int VMemo::openWAV(const char *filename) wh.length=0; wh.chunk_type = WAVE; wh.sub_chunk = FMT; 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; wh.sample_fq = speed; wh.byte_p_sec = speed * channels * resolution/8; wh.byte_p_spl = channels * (resolution / 8); @@ -498,10 +503,9 @@ int VMemo::openWAV(const char *filename) return 1; } -void VMemo::record(void) -{ +void VMemo::record(void) { int length=0, result, value; QString msg; msg.sprintf("Recording format %d", format); qDebug(msg); @@ -510,86 +514,48 @@ void VMemo::record(void) int sRate=config.readNumEntry("SizeLimit", 30); t_timer->start( sRate * 1000+1000, TRUE); - 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; perror("dev/dsp's is a lookin' messy"); QMessageBox::message("Vmemo"," Done1 recording\n"+ fileName); } @@ -599,9 +565,9 @@ void VMemo::record(void) } // qDebug("file has length of %d lasting %d seconds", // length, (( length / speed) / channels) / 2 ); // medialplayer states wrong length in secs - } + // } //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<// value = length+36; |