summaryrefslogtreecommitdiff
path: root/recordmydesktop/src/get_frame.c
diff options
context:
space:
mode:
Diffstat (limited to 'recordmydesktop/src/get_frame.c')
-rw-r--r--recordmydesktop/src/get_frame.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/recordmydesktop/src/get_frame.c b/recordmydesktop/src/get_frame.c
index 44f2ec4..1d6a126 100644
--- a/recordmydesktop/src/get_frame.c
+++ b/recordmydesktop/src/get_frame.c
@@ -33,6 +33,8 @@ void *GetFrame(void *pdata){
uint msk_ret;
WGeometry mouse_pos_abs,mouse_pos_rel,mouse_pos_temp;
Window root_ret,child_ret;
+ int pixel_total=((ProgData *)pdata)->brwin.rgeom.width*((ProgData *)pdata)->brwin.rgeom.height;
+
mouse_pos_abs.x=0;
mouse_pos_abs.y=0;
mouse_pos_abs.width=((ProgData *)pdata)->dummy_p_size;
@@ -52,7 +54,24 @@ void *GetFrame(void *pdata){
((ProgData *)pdata)->list_selector=((((ProgData *)pdata)->list_selector+1)%2);
pthread_mutex_lock(&((ProgData *)pdata)->list_mutex[tlist_sel]);
}
-
+ //here we measure the list and decide which way we will go
+ if(!((ProgData *)pdata)->args.nocondshared){
+ int level=0;
+ RectArea *temp=((ProgData *)pdata)->rect_root[tlist_sel];
+
+ if(temp!=NULL){
+ do{
+ level+=temp->geom.width*temp->geom.height;
+ temp=temp->next;
+ }while(temp!=NULL);
+ level*=100;
+ level/=pixel_total;
+ ((ProgData *)pdata)->args.noshared=(level<((ProgData *)pdata)->args.shared_thres);
+// if(!((ProgData *)pdata)->args.noshared){
+// fprintf(stderr,"shared screenshot with %d\n",level);
+// }
+ }
+ }
if(((ProgData *)pdata)->args.have_dummy_cursor){
//dummy pointer sequence
//update previous_position
@@ -70,7 +89,7 @@ void *GetFrame(void *pdata){
&mouse_pos_rel.x,&mouse_pos_rel.y,&msk_ret);
}
if(!((ProgData *)pdata)->args.noshared)
- XShmGetImage(((ProgData *)pdata)->dpy,((ProgData *)pdata)->specs.root,((ProgData *)pdata)->image,(((ProgData *)pdata)->brwin.rgeom.x),(((ProgData *)pdata)->brwin.rgeom.y),AllPlanes);
+ XShmGetImage(((ProgData *)pdata)->dpy,((ProgData *)pdata)->specs.root,((ProgData *)pdata)->shimage,(((ProgData *)pdata)->brwin.rgeom.x),(((ProgData *)pdata)->brwin.rgeom.y),AllPlanes);
if(!((ProgData *)pdata)->args.full_shots)
UpdateImage(((ProgData *)pdata)->dpy,
&((ProgData *)pdata)->enc_data->yuv,
@@ -79,7 +98,7 @@ void *GetFrame(void *pdata){
&((ProgData *)pdata)->rect_root[tlist_sel],
&((ProgData *)pdata)->brwin,
((ProgData *)pdata)->enc_data,
- ((((ProgData *)pdata)->args.noshared)?(((ProgData *)pdata)->datatemp):((ProgData *)pdata)->image->data),
+ ((((ProgData *)pdata)->args.noshared)?(((ProgData *)pdata)->datatemp):((ProgData *)pdata)->shimage->data),
((ProgData *)pdata)->args.noshared);
else{
if(((ProgData *)pdata)->args.noshared){
@@ -96,7 +115,7 @@ void *GetFrame(void *pdata){
}
else{
pthread_mutex_lock(&((ProgData *)pdata)->yuv_mutex);
- XImageToYUV(((ProgData *)pdata)->image,&((ProgData *)pdata)->enc_data->yuv);
+ XImageToYUV(((ProgData *)pdata)->shimage,&((ProgData *)pdata)->enc_data->yuv);
pthread_mutex_unlock(&((ProgData *)pdata)->yuv_mutex);
}
}
© All Rights Reserved