diff options
Diffstat (limited to 'recordmydesktop/src/rmd_restore.c')
-rw-r--r-- | recordmydesktop/src/rmd_restore.c | 98 |
1 files changed, 91 insertions, 7 deletions
diff --git a/recordmydesktop/src/rmd_restore.c b/recordmydesktop/src/rmd_restore.c index f080c61..3cba0db 100644 --- a/recordmydesktop/src/rmd_restore.c +++ b/recordmydesktop/src/rmd_restore.c @@ -25,19 +25,103 @@ ******************************************************************************/ + #include <recordmydesktop.h> -int rmdRestore(char *path){ +int rmdRestore(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); -/* -EncodeCache(&pdata); -fprintf(stderr,"Done!!!\n"); -fprintf(stderr,"Goodbye!\n"); -CleanUp(); -*/ + fprintf(stderr,"Done!!!\n"); + fprintf(stderr,"Goodbye!\n"); + CleanUp(); return 0; } |