summaryrefslogtreecommitdiff
path: root/recordmydesktop/src
diff options
context:
space:
mode:
Diffstat (limited to 'recordmydesktop/src')
-rw-r--r--recordmydesktop/src/cache_audio.c11
-rw-r--r--recordmydesktop/src/capture_sound.c44
-rw-r--r--recordmydesktop/src/encode_sound_buffer.c9
-rw-r--r--recordmydesktop/src/initialize_data.c9
-rw-r--r--recordmydesktop/src/load_cache.c14
-rw-r--r--recordmydesktop/src/opendev.c47
-rw-r--r--recordmydesktop/src/parseargs.c4
7 files changed, 129 insertions, 9 deletions
diff --git a/recordmydesktop/src/cache_audio.c b/recordmydesktop/src/cache_audio.c
index c8a71da..178bb7c 100644
--- a/recordmydesktop/src/cache_audio.c
+++ b/recordmydesktop/src/cache_audio.c
@@ -30,8 +30,10 @@ void *CacheSoundBuffer(ProgData *pdata){
//It's sound is tiny compared to that of image, so
//compressing would reducethe overall size by only an
//insignificant fraction.
+#ifdef HAVE_LIBASOUND
int framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*
pdata->args.channels;
+#endif
pthread_mutex_t smut;
pthread_mutex_init(&smut,NULL);
while((pdata->running)){
@@ -55,10 +57,13 @@ void *CacheSoundBuffer(ProgData *pdata){
//advance the list
pdata->sound_buffer=pdata->sound_buffer->next;
pthread_mutex_unlock(&pdata->sound_buffer_mutex);
-
- fwrite(buff->data,pdata->periodsize*framesize,1,
+#ifdef HAVE_LIBASOUND
+ fwrite(buff->data,1,pdata->periodsize*framesize,
pdata->cache_data->afp);
-
+#else
+ fwrite(buff->data,1,pdata->args.buffsize,
+ pdata->cache_data->afp);
+#endif
pdata->avd-=pdata->periodtime;
diff --git a/recordmydesktop/src/capture_sound.c b/recordmydesktop/src/capture_sound.c
index 32f2638..d9bb340 100644
--- a/recordmydesktop/src/capture_sound.c
+++ b/recordmydesktop/src/capture_sound.c
@@ -29,9 +29,11 @@
void *CaptureSound(ProgData *pdata){
+#ifdef HAVE_LIBASOUND
int frames=pdata->periodsize;
int framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*
pdata->args.channels;
+#endif
pthread_mutex_t pmut;
pthread_mutex_init(&pmut,NULL);
@@ -42,6 +44,7 @@ void *CaptureSound(ProgData *pdata){
int sret=0;
SndBuffer *newbuf,*tmp;
if(Paused){
+#ifdef HAVE_LIBASOUND
if(!pdata->hard_pause){
snd_pcm_pause(pdata->sound_handle,1);
pthread_cond_wait(&pdata->pause_cond,&pmut);
@@ -68,14 +71,33 @@ void *CaptureSound(ProgData *pdata){
pthread_exit(&errno);
}
}
+#else
+ close(pdata->sound_handle);
+ pthread_cond_wait(&pdata->pause_cond,&pmut);
+ pdata->sound_handle=
+ OpenDev(pdata->args.device,
+ pdata->args.channels,
+ pdata->args.frequency);
+ if(pdata->sound_handle<0){
+ fprintf(stderr,"Couldn't reopen sound device.Exiting\n");
+ pdata->running=0;
+ errno=3;
+ pthread_exit(&errno);
+ }
+#endif
}
//create new buffer
newbuf=(SndBuffer *)malloc(sizeof(SndBuffer *));
+#ifdef HAVE_LIBASOUND
newbuf->data=(signed char *)malloc(frames*framesize);
+#else
+ newbuf->data=(signed char *)malloc(pdata->args.buffsize);
+#endif
newbuf->next=NULL;
//read data into new buffer
+#ifdef HAVE_LIBASOUND
while(sret<frames){
int temp_sret=snd_pcm_readi(pdata->sound_handle,
newbuf->data+framesize*sret,
@@ -94,7 +116,23 @@ void *CaptureSound(ProgData *pdata){
else
sret+=temp_sret;
}
-
+#else
+ sret=0;
+ //oss recording loop
+ do{
+ int temp_sret=read(pdata->sound_handle,
+ &newbuf->data[sret],
+ pdata->args.buffsize);
+ if(temp_sret<0){
+ fprintf(stderr,"An error occured while reading from soundcard"
+ "%s\n"
+ "Error description:\n"
+ "%s\n",pdata->args.device,strerror(errno));
+ }
+ else
+ sret+=temp_sret;
+ }while(sret<pdata->args.buffsize);
+#endif
//queue the new buffer
pthread_mutex_lock(&pdata->sound_buffer_mutex);
tmp=pdata->sound_buffer;
@@ -111,7 +149,11 @@ void *CaptureSound(ProgData *pdata){
//signal that there are data to be proccessed
pthread_cond_signal(&pdata->sound_data_read);
}
+#ifdef HAVE_LIBASOUND
snd_pcm_close(pdata->sound_handle);
+#else
+ close(pdata->sound_handle);
+#endif
pthread_exit(&errno);
}
diff --git a/recordmydesktop/src/encode_sound_buffer.c b/recordmydesktop/src/encode_sound_buffer.c
index 828855c..2ea76cc 100644
--- a/recordmydesktop/src/encode_sound_buffer.c
+++ b/recordmydesktop/src/encode_sound_buffer.c
@@ -28,8 +28,11 @@
#include <recordmydesktop.h>
void *EncodeSoundBuffer(ProgData *pdata){
-
+#ifdef HAVE_LIBASOUND
int sampread=pdata->periodsize;
+#else
+ int sampread=pdata->args.buffsize>>1;
+#endif
pthread_mutex_t smut;
pthread_mutex_init(&smut,NULL);
pdata->v_encoding_clean=0;
@@ -97,7 +100,11 @@ void *EncodeSoundBuffer(ProgData *pdata){
void SyncEncodeSoundBuffer(ProgData *pdata,signed char *buff){
float **vorbis_buffer;
int count=0,i,j;
+#ifdef HAVE_LIBASOUND
int sampread=(buff!=NULL)?pdata->periodsize:0;
+#else
+ int sampread=(buff!=NULL)?(pdata->args.buffsize>>1):0;
+#endif
vorbis_buffer=vorbis_analysis_buffer(&pdata->enc_data->m_vo_dsp,sampread);
for(i=0;i<sampread;i++){
for(j=0;j<pdata->args.channels;j++){
diff --git a/recordmydesktop/src/initialize_data.c b/recordmydesktop/src/initialize_data.c
index 4830c83..8d86856 100644
--- a/recordmydesktop/src/initialize_data.c
+++ b/recordmydesktop/src/initialize_data.c
@@ -119,6 +119,7 @@ int InitializeData(ProgData *pdata,
AllPlanes);
}
if(!pdata->args.nosound){
+#ifdef HAVE_LIBASOUND
pdata->sound_handle=OpenDev( pdata->args.device,
&pdata->args.channels,
&pdata->args.frequency,
@@ -127,6 +128,14 @@ int InitializeData(ProgData *pdata,
&pdata->periodtime,
&pdata->hard_pause);
if(pdata->sound_handle==NULL){
+#else
+ pdata->sound_handle=OpenDev(pdata->args.device,
+ pdata->args.channels,
+ pdata->args.frequency);
+ pdata->periodtime=(1000000*pdata->args.buffsize)/
+ ((pdata->args.channels<<1)*pdata->args.frequency);
+ if(pdata->sound_handle<0){
+#endif
fprintf(stderr,"Error while opening/configuring soundcard %s\n"
"Try running with the --no-sound or specify a "
"correct device.\n",
diff --git a/recordmydesktop/src/load_cache.c b/recordmydesktop/src/load_cache.c
index 6098bc7..a5b1581 100644
--- a/recordmydesktop/src/load_cache.c
+++ b/recordmydesktop/src/load_cache.c
@@ -131,10 +131,14 @@ void *LoadCache(ProgData *pdata){
blocknum_x=pdata->enc_data->yuv.y_width/Y_UNIT_WIDTH,
blocknum_y=pdata->enc_data->yuv.y_height/Y_UNIT_WIDTH,
blockszy=Y_UNIT_BYTES,//size of y plane block in bytes
- blockszuv=UV_UNIT_BYTES,//size of u,v plane blocks in bytes
- framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*
+ blockszuv=UV_UNIT_BYTES;//size of u,v plane blocks in bytes
+#ifdef HAVE_LIBASOUND
+ int framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*
pdata->args.channels;//audio frame size
signed char *sound_data=(signed char *)malloc(pdata->periodsize*framesize);
+#else
+ signed char *sound_data=(signed char *)malloc(pdata->args.buffsize);
+#endif
u_int32_t YBlocks[(yuv->y_width*yuv->y_height)/Y_UNIT_BYTES],
UBlocks[(yuv->uv_width*yuv->uv_height)/UV_UNIT_BYTES],
VBlocks[(yuv->uv_width*yuv->uv_height)/UV_UNIT_BYTES];
@@ -250,7 +254,11 @@ void *LoadCache(ProgData *pdata){
//audio load and encoding
else{
if(!audio_end){
- int nbytes=fread(sound_data,pdata->periodsize*framesize,1,afp);
+#ifdef HAVE_LIBASOUND
+ int nbytes=fread(sound_data,1,pdata->periodsize*framesize,afp);
+#else
+ int nbytes=fread(sound_data,1,pdata->args.buffsize,afp);
+#endif
if(nbytes<=0)
audio_end=1;
else
diff --git a/recordmydesktop/src/opendev.c b/recordmydesktop/src/opendev.c
index 5fc24f7..7810ec6 100644
--- a/recordmydesktop/src/opendev.c
+++ b/recordmydesktop/src/opendev.c
@@ -29,6 +29,7 @@
#include <recordmydesktop.h>
+#ifdef HAVE_LIBASOUND
snd_pcm_t *OpenDev( const char *pcm_dev,
unsigned int *channels,
@@ -114,4 +115,50 @@ snd_pcm_t *OpenDev( const char *pcm_dev,
return mhandle;
}
+#else
+int OpenDev( const char *pcm_dev,
+ unsigned int channels,
+ unsigned int frequency){
+ int fd ;
+ fd=open(pcm_dev,O_RDONLY);
+
+ if(fd!=-1){
+ unsigned int value;
+
+ if(ioctl(fd,SNDCTL_DSP_GETFMTS,&value)<0){
+ fprintf(stderr,"Couldn't get audio format list\n");
+ return -1;
+ }
+ if(value & AFMT_S16_LE){
+ value=AFMT_S16_LE;
+ }
+ else if(value & AFMT_S16_BE){
+ value=AFMT_S16_BE;
+ }
+ else{
+ fprintf(stderr,"Soundcard doesn't support signed 16-bit-data\n");
+ return -1;
+ }
+ if(ioctl(fd,SNDCTL_DSP_SETFMT,&value)<0){
+ fprintf(stderr,"Couldn't set audio format\n" );
+ return -1;
+ }
+ value = channels;
+ if(ioctl(fd,SNDCTL_DSP_CHANNELS,&value)<0){
+ fprintf(stderr,"Cannot set the number of channels\n" );
+ return -1;
+ }
+ value = frequency;
+ if(ioctl(fd,SNDCTL_DSP_SPEED,&value)<0){
+ fprintf(stderr,"Couldn't set audio frequency\n" );
+ return -1;
+ }
+ if(fcntl(fd,F_SETFL,fcntl(fd,F_GETFL) & ~O_NONBLOCK)<0){
+ fprintf(stderr,"Couldn't set audio blocking mode\n" );
+ return -1;
+ }
+ }
+ return fd;
+}
+#endif
diff --git a/recordmydesktop/src/parseargs.c b/recordmydesktop/src/parseargs.c
index 36dbbea..9cda42b 100644
--- a/recordmydesktop/src/parseargs.c
+++ b/recordmydesktop/src/parseargs.c
@@ -81,7 +81,9 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
"\t-buffer-size N\t\tA positive number denoting the desired"
" sound buffer size(in frames)\n"
- "\t-device SOUND_DEVICE\tSound device(default hw0:0).\n"
+ "\t-device SOUND_DEVICE\tSound device(default "
+ DEFAULT_AUDIO_DEVICE
+ ").\n"
"\t--no-sound\t\tDo not record sound.\n\n"
"Encoding Options\n"
© All Rights Reserved