diff options
-rw-r--r-- | recordmydesktop/ChangeLog | 1 | ||||
-rw-r--r-- | recordmydesktop/include/recordmydesktop.h | 2 | ||||
-rw-r--r-- | recordmydesktop/src/bgr_to_yuv.c | 62 |
3 files changed, 33 insertions, 32 deletions
diff --git a/recordmydesktop/ChangeLog b/recordmydesktop/ChangeLog index ac217b0..cf6ffa0 100644 --- a/recordmydesktop/ChangeLog +++ b/recordmydesktop/ChangeLog @@ -6,6 +6,7 @@ extended beyond recording height fixed. *Size adjustement that resulted in extra or missing pixels at borders has been corrected. *The option to drop frames has been added. +*The option to do better subsampling has been added. *Default behavior now is to use shared memory when size of image gets over 75% of total (or a user set threshold). *Many other minor bugfixes. diff --git a/recordmydesktop/include/recordmydesktop.h b/recordmydesktop/include/recordmydesktop.h index 84b647b..a994432 100644 --- a/recordmydesktop/include/recordmydesktop.h +++ b/recordmydesktop/include/recordmydesktop.h @@ -418,7 +418,7 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in void SetExpired(int signum); void RegisterCallbacks(ProgArgs *args); void UpdateImage(Display * dpy,yuv_buffer *yuv,pthread_mutex_t *yuv_mutex,DisplaySpecs *specs,RectArea **root,BRWindow *brwin,EncData *enc,char *datatemp,int noshmem,int no_quick_subsample); -void XImageToYUV(XImage *imgz,yuv_buffer *yuv,int no_quick_subsample); +// void XImageToYUV(XImage *imgz,yuv_buffer *yuv,int no_quick_subsample); int GetZPixmap(Display *dpy,Window root,char *data,int x,int y,int width,int height); int ParseArgs(int argc,char **argv,ProgArgs *arg_return); int QueryExtensions(Display *dpy,ProgArgs *args,int *damage_event,int *damage_error); diff --git a/recordmydesktop/src/bgr_to_yuv.c b/recordmydesktop/src/bgr_to_yuv.c index d2b14f4..2266e94 100644 --- a/recordmydesktop/src/bgr_to_yuv.c +++ b/recordmydesktop/src/bgr_to_yuv.c @@ -27,37 +27,37 @@ #include <recordmydesktop.h> -void XImageToYUV(XImage *imgz,yuv_buffer *yuv,int no_quick_subsample){ - unsigned char *dtap=(unsigned char *)imgz->data; - unsigned char avg2,avg1,avg0; - int i,k,j=0; - - for(k=0;k<(imgz->width*imgz->height);k++){ - yuv->y[k]=Yr[dtap[(k*4)+2]] + Yg[dtap[(k*4)+1]] + Yb[dtap[(k*4)]]; - } - if(!no_quick_subsample){ - for(i=0;i<(imgz->height);i+=2){ - for(k=0;k<(imgz->width);k+=2){ - yuv->u[j]=Ur[dtap[i*imgz->bytes_per_line+k*4+2]] + Ug[dtap[i*imgz->bytes_per_line+k*4+1]] + Ub[dtap[i*imgz->bytes_per_line+k*4]]; - yuv->v[j]=Vr[dtap[i*imgz->bytes_per_line+k*4+2]] + Vg[dtap[i*imgz->bytes_per_line+k*4+1]] + Vb[dtap[i*imgz->bytes_per_line+k*4]] ; - j++; - } - } - } - else{ - for(i=0;i<(imgz->height);i+=2){ - for(k=0;k<(imgz->width);k+=2){ - avg2=AVG_4_PIXELS(dtap,(imgz->width),i,k,2); - avg1=AVG_4_PIXELS(dtap,(imgz->width),i,k,1); - avg0=AVG_4_PIXELS(dtap,(imgz->width),i,k,0); - - yuv->u[j]=Ur[avg2] + Ug[avg1] + Ub[avg0]; - yuv->v[j]=Vr[avg2] + Vg[avg1] + Vb[avg0] ; - j++; - } - } - } -} +// void XImageToYUV(XImage *imgz,yuv_buffer *yuv,int no_quick_subsample){ +// unsigned char *dtap=(unsigned char *)imgz->data; +// unsigned char avg2,avg1,avg0; +// int i,k,j=0; +// +// for(k=0;k<(imgz->width*imgz->height);k++){ +// yuv->y[k]=Yr[dtap[(k*4)+2]] + Yg[dtap[(k*4)+1]] + Yb[dtap[(k*4)]]; +// } +// if(!no_quick_subsample){ +// for(i=0;i<(imgz->height);i+=2){ +// for(k=0;k<(imgz->width);k+=2){ +// yuv->u[j]=Ur[dtap[i*imgz->bytes_per_line+k*4+2]] + Ug[dtap[i*imgz->bytes_per_line+k*4+1]] + Ub[dtap[i*imgz->bytes_per_line+k*4]]; +// yuv->v[j]=Vr[dtap[i*imgz->bytes_per_line+k*4+2]] + Vg[dtap[i*imgz->bytes_per_line+k*4+1]] + Vb[dtap[i*imgz->bytes_per_line+k*4]] ; +// j++; +// } +// } +// } +// else{ +// for(i=0;i<(imgz->height);i+=2){ +// for(k=0;k<(imgz->width);k+=2){ +// avg2=AVG_4_PIXELS(dtap,(imgz->width),i,k,2); +// avg1=AVG_4_PIXELS(dtap,(imgz->width),i,k,1); +// avg0=AVG_4_PIXELS(dtap,(imgz->width),i,k,0); +// +// yuv->u[j]=Ur[avg2] + Ug[avg1] + Ub[avg0]; +// yuv->v[j]=Vr[avg2] + Vg[avg1] + Vb[avg0] ; +// j++; +// } +// } +// } +// } void MakeMatrices(){ |