summaryrefslogtreecommitdiff
path: root/recordmydesktop/src/rmd_restore.c
diff options
context:
space:
mode:
Diffstat (limited to 'recordmydesktop/src/rmd_restore.c')
-rw-r--r--recordmydesktop/src/rmd_restore.c98
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;
}
© All Rights Reserved