diff options
Diffstat (limited to 'recordmydesktop/src/rmd_rescue.c')
-rw-r--r-- | recordmydesktop/src/rmd_rescue.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/recordmydesktop/src/rmd_rescue.c b/recordmydesktop/src/rmd_rescue.c new file mode 100644 index 0000000..3552103 --- /dev/null +++ b/recordmydesktop/src/rmd_rescue.c @@ -0,0 +1,142 @@ +/****************************************************************************** +* recordMyDesktop * +******************************************************************************* +* * +* Copyright (C) 2006,2007 John Varouhakis * +* * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * +* * +* * +* * +* For further information contact me at johnvarouhakis@gmail.com * +******************************************************************************/ + + + +#include <recordmydesktop.h> + + +int rmdRescue(const char *path){ + + int i=0, + width, + height, + offset_x, + offset_y; + + ProgData pdata; + EncData enc_data; + CacheData cache_data; + + + DEFAULT_ARGS(&pdata.args); + + pdata.enc_data=&enc_data; + pdata.cache_data=&cache_data; + + //projname + cache_data.projname=malloc(strlen(path)+2); + strcpy(cache_data.projname,path); + strcat(cache_data.projname,"/");//having two of these doesn't hurt... + //image data + cache_data.imgdata=malloc(strlen(cache_data.projname)+11); + strcpy(cache_data.imgdata,cache_data.projname); + strcat(cache_data.imgdata,"img.out"); + //audio data + cache_data.audiodata=malloc(strlen(cache_data.projname)+10); + strcpy(cache_data.audiodata,cache_data.projname); + strcat(cache_data.audiodata,"audio.pcm"); + //specsfile + cache_data.specsfile=malloc(strlen(cache_data.projname)+10); + strcpy(cache_data.specsfile,cache_data.projname); + strcat(cache_data.specsfile,"specs.txt"); + + + if(ReadSpecsFile(&pdata)) + return 1; + + + width=((pdata.brwin.rgeom.width + 15) >>4)<<4; + height=((pdata.brwin.rgeom.height + 15) >>4)<<4; + offset_x=((width-pdata.brwin.rgeom.width)/2)&~1; + offset_y=((height-pdata.brwin.rgeom.height)/2)&~1; + + + enc_data.yuv.y=(unsigned char *)malloc(height*width); + enc_data.yuv.u=(unsigned char *)malloc(height*width/4); + enc_data.yuv.v=(unsigned char *)malloc(height*width/4); + enc_data.yuv.y_width=width; + enc_data.yuv.y_height=height; + enc_data.yuv.y_stride=width; + + enc_data.yuv.uv_width=width/2; + enc_data.yuv.uv_height=height/2; + enc_data.yuv.uv_stride=width/2; + enc_data.x_offset=offset_x; + enc_data.y_offset=offset_y; + + for(i=0;i<(enc_data.yuv.y_width*enc_data.yuv.y_height);i++) + enc_data.yuv.y[i]=0; + for(i=0;i<(enc_data.yuv.uv_width*enc_data.yuv.uv_height);i++){ + enc_data.yuv.v[i]=enc_data.yuv.u[i]=127; + } + + yblocks=malloc(sizeof(u_int32_t)*(enc_data.yuv.y_width/Y_UNIT_WIDTH)* + (enc_data.yuv.y_height/Y_UNIT_WIDTH)); + ublocks=malloc(sizeof(u_int32_t)*(enc_data.yuv.y_width/Y_UNIT_WIDTH)* + (enc_data.yuv.y_height/Y_UNIT_WIDTH)); + vblocks=malloc(sizeof(u_int32_t)*(enc_data.yuv.y_width/Y_UNIT_WIDTH)* + (enc_data.yuv.y_height/Y_UNIT_WIDTH)); + + pdata.frametime=(1000000)/pdata.args.fps; + + pthread_mutex_init(&pdata.theora_lib_mutex,NULL); + pthread_mutex_init(&pdata.vorbis_lib_mutex,NULL); + pthread_mutex_init(&pdata.libogg_mutex,NULL); + pthread_cond_init(&pdata.theora_lib_clean,NULL); + pthread_cond_init(&pdata.vorbis_lib_clean,NULL); + pdata.th_encoding_clean=pdata.v_encoding_clean=1; + Aborted=pdata.avd=0; + pdata.sound_buffer=NULL; + pdata.running=1; + Running=&pdata.running; + + RegisterCallbacks(NULL); + fprintf(stderr,"Restoring %s!!!\n",path); + + EncodeCache(&pdata); + + fprintf(stderr,"Done!!!\n"); + fprintf(stderr,"Goodbye!\n"); + CleanUp(); + + return 0; +} + + + + + + + + + + + + + + + |