summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2007-01-21 18:05:14 +0000
committeriovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2007-01-21 18:05:14 +0000
commitc8beaf22577ee69de28898382d74673a9edcf395 (patch)
treeca4c00ae4bc56efd3e52a861c1e9396d3c15a173
parent4613054faf335a84ab8f413506f4b75bbd72e5eb (diff)
changed formatting of the code, to never go beyond column 80
(rule is purely for visual purposes, macro expansions are not taken into account). git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@262 f606c939-3180-4ac9-a4b8-4b8779d57d0a
-rw-r--r--recordmydesktop/README50
-rw-r--r--recordmydesktop/include/recordmydesktop.h54
-rw-r--r--recordmydesktop/include/rmdfunc.h119
-rw-r--r--recordmydesktop/include/rmdmacro.h222
-rw-r--r--recordmydesktop/include/rmdtypes.h224
-rw-r--r--recordmydesktop/src/bgr_to_yuv.c50
-rw-r--r--recordmydesktop/src/cache_audio.c56
-rw-r--r--recordmydesktop/src/cache_frame.c117
-rw-r--r--recordmydesktop/src/capture_sound.c63
-rw-r--r--recordmydesktop/src/encode_cache.c53
-rw-r--r--recordmydesktop/src/encode_image_buffer.c68
-rw-r--r--recordmydesktop/src/encode_sound_buffer.c78
-rw-r--r--recordmydesktop/src/flush_to_ogg.c106
-rw-r--r--recordmydesktop/src/get_frame.c123
-rw-r--r--recordmydesktop/src/getzpixmap.c62
-rw-r--r--recordmydesktop/src/init_encoder.c235
-rw-r--r--recordmydesktop/src/initialize_data.c109
-rw-r--r--recordmydesktop/src/load_cache.c120
-rw-r--r--recordmydesktop/src/make_dummy_pointer.c75
-rw-r--r--recordmydesktop/src/opendev.c72
-rw-r--r--recordmydesktop/src/parseargs.c167
-rw-r--r--recordmydesktop/src/poll_damage.c74
-rw-r--r--recordmydesktop/src/queryextensions.c67
-rw-r--r--recordmydesktop/src/recordmydesktop.c86
-rw-r--r--recordmydesktop/src/rectinsert.c158
-rw-r--r--recordmydesktop/src/register_callbacks.c77
-rw-r--r--recordmydesktop/src/rmd_cache.c78
-rw-r--r--recordmydesktop/src/rmdthreads.c90
-rw-r--r--recordmydesktop/src/setbrwindow.c97
-rw-r--r--recordmydesktop/src/update_image.c50
-rw-r--r--recordmydesktop/src/wm_check.c67
31 files changed, 1781 insertions, 1286 deletions
diff --git a/recordmydesktop/README b/recordmydesktop/README
index 4f330b5..2896af0 100644
--- a/recordmydesktop/README
+++ b/recordmydesktop/README
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 *
+******************************************************************************/
Complete lisence can be found in the COPYING file.
Installation and compilation instruction can be found in the INSTALL file.
diff --git a/recordmydesktop/include/recordmydesktop.h b/recordmydesktop/include/recordmydesktop.h
index ed522db..e97a8c0 100644
--- a/recordmydesktop/include/recordmydesktop.h
+++ b/recordmydesktop/include/recordmydesktop.h
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 *
+******************************************************************************/
#ifndef RECORDMYDESKTOP_H
@@ -48,8 +48,8 @@ unsigned char Yr[256],Yg[256],Yb[256],
Vr[256],Vg[256],Vb[256];
//the following values are of no effect
//but they might be usefull later for profiling
-unsigned int frames_total,//frames calculated by total time expirations
- frames_lost;//the value of shame
+unsigned int frames_total, //frames calculated by total time expirations
+ frames_lost; //the value of shame
//used to determine frame drop which can
//happen on failure to receive a signal over a condition variable
int capture_busy,
diff --git a/recordmydesktop/include/rmdfunc.h b/recordmydesktop/include/rmdfunc.h
index 447351a..a4908d5 100644
--- a/recordmydesktop/include/rmdfunc.h
+++ b/recordmydesktop/include/rmdfunc.h
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 *
+******************************************************************************/
#ifndef RMDFUNC_H
#define RMDFUNC_H 1
@@ -107,7 +107,10 @@ int RectInsert(RectArea **root,WGeometry *wgeom);
* \retval -10 Grouping the two geoms is possible
*
*/
-int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,int *ngeoms);
+int CollideRects(WGeometry *wgeom1,
+ WGeometry *wgeom2,
+ WGeometry **wgeom_return,
+ int *ngeoms);
/**
* Broadcast time condition variable, increment frame count.
@@ -132,7 +135,8 @@ void RegisterCallbacks(ProgArgs *args);
*
* \param yuv_mutex lock on the buffer
*
-* \param specs DisplaySpecs struct with information about the display to be recorded
+* \param specs DisplaySpecs struct with
+* information about the display to be recorded
*
* \param root Root entry of the list with damaged areas
*
@@ -140,7 +144,8 @@ void RegisterCallbacks(ProgArgs *args);
*
* \param enc Encoding options
*
-* \param datatemp Buffer for pixel data to be retrieved before placed on the yuv buffer
+* \param datatemp Buffer for pixel data to be
+* retrieved before placed on the yuv buffer
*
* \param noshmem don't use MIT_Shm extension
*
@@ -181,7 +186,13 @@ void UpdateImage(Display * dpy,
*
* \returns 0 on Success 1 on Failure
*/
-int GetZPixmap(Display *dpy,Window root,char *data,int x,int y,int width,int height);
+int GetZPixmap(Display *dpy,
+ Window root,
+ char *data,
+ int x,
+ int y,
+ int width,
+ int height);
/**
* Fill ProgArgs struct with arguments entered at execution
@@ -209,7 +220,10 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return);
*
* \note Can be an exit point if extensions are not found
*/
-void QueryExtensions(Display *dpy,ProgArgs *args,int *damage_event,int *damage_error);
+void QueryExtensions(Display *dpy,
+ ProgArgs *args,
+ int *damage_event,
+ int *damage_error);
/**
* Check and align window size
@@ -218,43 +232,53 @@ void QueryExtensions(Display *dpy,ProgArgs *args,int *damage_event,int *damage_e
*
* \param brwin BRWindow struct contaning the initial and final window
*
-* \param specs DisplaySpecs struct with information about the display to be recorded
+* \param specs DisplaySpecs struct with
+* information about the display to be recorded
*
* \param args ProgArgs struct containing the user-set options
*
* \returns 0 on Success 1 on Failure
*/
-int SetBRWindow(Display *dpy,BRWindow *brwin,DisplaySpecs *specs,ProgArgs *args);
+int SetBRWindow(Display *dpy,
+ BRWindow *brwin,
+ DisplaySpecs *specs,
+ ProgArgs *args);
/**
* Create an array containing the data for the dummy pointer
*
-* \param specs DisplaySpecs struct with information about the display to be recorded
+* \param specs DisplaySpecs struct with
+* information about the display to be recorded
*
-* \param size Pointer size, always square, always 16.(exists only for the possibility to create
-* more dummy cursors)
+* \param size Pointer size, always square, always 16.(exists only
+* for the possibility to create more dummy cursors)
* \param color 0 white, 1 black
*
* \param type Always 0.(exists only for the possibility to create
* more dummy cursors)
*
-* \param npxl Return of pixel value that denotes non-drawing, while applying the cursor
-* on the target image
+* \param npxl Return of pixel value that denotes non-drawing, while
+* applying the cursor on the target image
*
* \returns Pointer to pixel data of the cursor
*/
-unsigned char *MakeDummyPointer(DisplaySpecs *specs,int size,int color,int type,unsigned char *npxl);
+unsigned char *MakeDummyPointer(DisplaySpecs *specs,
+ int size,
+ int color,
+ int type,
+ unsigned char *npxl);
/**
-* Sound capturing thread. Data are placed on a list to be picked up by other threads.
+* Sound capturing thread. Data are placed on a
+* list to be picked up by other threads.
*
* \param pdata ProgData struct containing all program data
*/
void *CaptureSound(ProgData *pdata);
/**
-* Sound encoding thread. Picks up data from the buffer queue , encodes and places them
-* on the vorbis stream.
+* Sound encoding thread. Picks up data from the buffer queue ,
+* encodes and places them on the vorbis stream.
*
* \param pdata ProgData struct containing all program data
*/
@@ -266,7 +290,8 @@ void *EncodeSoundBuffer(ProgData *pdata);
*
* \param pcm_dev name of the device
*
-* \param channels desired number of channels(gets modified with the acieved value)
+* \param channels desired number of channels
+* (gets modified with the acieved value)
*
* \param frequency desired frequency(gets modified with the acieved value)
*
@@ -339,7 +364,9 @@ void *CacheImageBuffer(ProgData *pdata);
* \param cache_data_t Caching options
*
*/
-void InitCacheData(ProgData *pdata,EncData *enc_data_t,CacheData *cache_data_t);
+void InitCacheData(ProgData *pdata,
+ EncData *enc_data_t,
+ CacheData *cache_data_t);
/**
* Sound caching thread. Simply writes the pcm buffers on disk
@@ -358,7 +385,8 @@ void *CacheSoundBuffer(ProgData *pdata);
void *LoadCache(ProgData *pdata);
/**
-* As EncodeImageBuffer, only with the assumption that this is not a thread on it's own
+* As EncodeImageBuffer, only with the assumption that
+* this is not a thread on it's own
*
* \param pdata ProgData struct containing all program data
*
@@ -371,7 +399,8 @@ void SyncEncodeImageBuffer(ProgData *pdata);
void CancelTimer(void);
/**
-* As EncodeSoundBuffer, only with the assumption that this is not a thread on it's own
+* As EncodeSoundBuffer, only with the assumption that
+* this is not a thread on it's own
*
* \param pdata ProgData struct containing all program data
*
diff --git a/recordmydesktop/include/rmdmacro.h b/recordmydesktop/include/rmdmacro.h
index 3576a3b..87ac39f 100644
--- a/recordmydesktop/include/rmdmacro.h
+++ b/recordmydesktop/include/rmdmacro.h
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 *
+******************************************************************************/
#ifndef RMDMACRO_H
#define RMDMACRO_H 1
@@ -75,7 +75,8 @@
#define CLIP_EVENT_AREA(e,brwin,wgeom){\
if(((e)->area.x<=(brwin)->rgeom.x)&&((e)->area.y<=(brwin)->rgeom.y)&&\
- ((e)->area.width>=(brwin)->rgeom.width)&&((e)->area.height<(brwin)->rgeom.height)){\
+ ((e)->area.width>=(brwin)->rgeom.width)&&\
+ ((e)->area.height<(brwin)->rgeom.height)){\
(wgeom)->x=(brwin)->rgeom.x;\
(wgeom)->y=(brwin)->rgeom.y;\
(wgeom)->width=(brwin)->rgeom.width;\
@@ -99,33 +100,53 @@
(wgeom)->height=((e)->area.y<=(brwin)->rgeom.y)?\
(e)->area.height-((brwin)->rgeom.y-(e)->area.y):\
((e)->area.y<=(brwin)->rgeom.y+(brwin)->rgeom.height)?\
- (((brwin)->rgeom.height-(e)->area.y+(brwin)->rgeom.y<(e)->area.height)?\
- (brwin)->rgeom.height-(e)->area.y+(brwin)->rgeom.y:(e)->area.height):-1;\
+ (((brwin)->rgeom.height-(e)->area.y+\
+ (brwin)->rgeom.y<(e)->area.height)?\
+ (brwin)->rgeom.height-(e)->area.y+\
+ (brwin)->rgeom.y:(e)->area.height):-1;\
\
- if((wgeom)->width>(brwin)->rgeom.width)(wgeom)->width=(brwin)->rgeom.width;\
- if((wgeom)->height>(brwin)->rgeom.height)(wgeom)->height=(brwin)->rgeom.height;\
+ if((wgeom)->width>(brwin)->rgeom.width)\
+ (wgeom)->width=(brwin)->rgeom.width;\
+ if((wgeom)->height>(brwin)->rgeom.height)\
+ (wgeom)->height=(brwin)->rgeom.height;\
}\
}
#define CLIP_DUMMY_POINTER_AREA(dummy_p_area,brwin,wgeom){\
- (wgeom)->x=((((dummy_p_area).x+(dummy_p_area).width>=(brwin)->rgeom.x)&&\
- ((dummy_p_area).x<=(brwin)->rgeom.x+(brwin)->rgeom.width))?\
- (((dummy_p_area).x<=(brwin)->rgeom.x)?(brwin)->rgeom.x:(dummy_p_area).x):-1);\
- (wgeom)->y=((((dummy_p_area).y+(dummy_p_area).height>=(brwin)->rgeom.y)&&\
- ((dummy_p_area).y<=(brwin)->rgeom.y+(brwin)->rgeom.height))?\
- (((dummy_p_area).y<=(brwin)->rgeom.y)?(brwin)->rgeom.y:(dummy_p_area).y):-1);\
+ (wgeom)->x=((((dummy_p_area).x+\
+ (dummy_p_area).width>=(brwin)->rgeom.x)&&\
+ ((dummy_p_area).x<=(brwin)->rgeom.x+\
+ (brwin)->rgeom.width))?\
+ (((dummy_p_area).x<=(brwin)->rgeom.x)?\
+ (brwin)->rgeom.x:(dummy_p_area).x):-1);\
+ (wgeom)->y=((((dummy_p_area).y+\
+ (dummy_p_area).height>=(brwin)->rgeom.y)&&\
+ ((dummy_p_area).y<=(brwin)->rgeom.y+\
+ (brwin)->rgeom.height))?\
+ (((dummy_p_area).y<=(brwin)->rgeom.y)?\
+ (brwin)->rgeom.y:(dummy_p_area).y):-1);\
(wgeom)->width=((dummy_p_area).x<=(brwin)->rgeom.x)?\
- (dummy_p_area).width-((brwin)->rgeom.x-(dummy_p_area).x):\
- ((dummy_p_area).x<=(brwin)->rgeom.x+(brwin)->rgeom.width)?\
- ((brwin)->rgeom.width-(dummy_p_area).x+(brwin)->rgeom.x<(dummy_p_area).width)?\
- (brwin)->rgeom.width-(dummy_p_area).x+(brwin)->rgeom.x:(dummy_p_area).width:-1;\
+ (dummy_p_area).width-\
+ ((brwin)->rgeom.x-(dummy_p_area).x):\
+ ((dummy_p_area).x<=(brwin)->rgeom.x+\
+ (brwin)->rgeom.width)?\
+ ((brwin)->rgeom.width-(dummy_p_area).x+\
+ (brwin)->rgeom.x<(dummy_p_area).width)?\
+ (brwin)->rgeom.width-(dummy_p_area).x+\
+ (brwin)->rgeom.x:(dummy_p_area).width:-1;\
(wgeom)->height=((dummy_p_area).y<=(brwin)->rgeom.y)?\
- (dummy_p_area).height-((brwin)->rgeom.y-(dummy_p_area).y):\
- ((dummy_p_area).y<=(brwin)->rgeom.y+(brwin)->rgeom.height)?\
- ((brwin)->rgeom.height-(dummy_p_area).y+(brwin)->rgeom.y<(dummy_p_area).height)?\
- (brwin)->rgeom.height-(dummy_p_area).y+(brwin)->rgeom.y:(dummy_p_area).height:-1;\
- if((wgeom)->width>(brwin)->rgeom.width)(wgeom)->width=(brwin)->rgeom.width;\
- if((wgeom)->height>(brwin)->rgeom.height)(wgeom)->height=(brwin)->rgeom.height;\
+ (dummy_p_area).height-\
+ ((brwin)->rgeom.y-(dummy_p_area).y):\
+ ((dummy_p_area).y<=(brwin)->rgeom.y+\
+ (brwin)->rgeom.height)?\
+ ((brwin)->rgeom.height-(dummy_p_area).y+\
+ (brwin)->rgeom.y<(dummy_p_area).height)?\
+ (brwin)->rgeom.height-(dummy_p_area).y+\
+ (brwin)->rgeom.y:(dummy_p_area).height:-1;\
+ if((wgeom)->width>(brwin)->rgeom.width)\
+ (wgeom)->width=(brwin)->rgeom.width;\
+ if((wgeom)->height>(brwin)->rgeom.height)\
+ (wgeom)->height=(brwin)->rgeom.height;\
}
@@ -221,13 +242,21 @@
(t3&__B16_MASK)+(t4&__B16_MASK))/4)&__B16_MASK);\
}
-#define UPDATE_Y_PLANE(data,x_tm,y_tm,height_tm,width_tm,yuv,__copy_type,__bit_depth__){ \
+#define UPDATE_Y_PLANE(data,\
+ x_tm,\
+ y_tm,\
+ height_tm,\
+ width_tm,\
+ yuv,\
+ __copy_type,\
+ __bit_depth__){ \
int k,i;\
register RMD_TYPE_##__bit_depth__ t_val;\
register unsigned char *yuv_y=yuv->y+x_tm+y_tm*yuv->y_width,\
*_yr=Yr,*_yg=Yg,*_yb=Yb;\
- register RMD_TYPE_##__bit_depth__ *datapi=(RMD_TYPE_##__bit_depth__ *)data+\
- ((__copy_type==__X_SHARED)?(x_tm+y_tm*yuv->y_width):0);\
+ register RMD_TYPE_##__bit_depth__ *datapi=(RMD_TYPE_##__bit_depth__ *)data\
+ +((__copy_type==__X_SHARED)?\
+ (x_tm+y_tm*yuv->y_width):0);\
for(k=0;k<height_tm;k++){\
for(i=0;i<width_tm;i++){\
t_val=*datapi;\
@@ -243,16 +272,25 @@
}\
}
-#define UPDATE_UV_PLANES(data,x_tm,y_tm,height_tm,width_tm,yuv,__copy_type,__sampling_type,__bit_depth__){ \
+#define UPDATE_UV_PLANES(data,\
+ x_tm,\
+ y_tm,\
+ height_tm,\
+ width_tm,\
+ yuv,\
+ __copy_type,\
+ __sampling_type,\
+ __bit_depth__){ \
int k,i;\
register RMD_TYPE_##__bit_depth__ t_val;\
register unsigned char *yuv_u=yuv->u+x_tm/2+(y_tm*yuv->uv_width)/2,\
*yuv_v=yuv->v+x_tm/2+(y_tm*yuv->uv_width)/2,\
*_ur=Ur,*_ug=Ug,*_ub=Ub,\
*_vr=Vr,*_vg=Vg,*_vb=Vb;\
- register RMD_TYPE_##__bit_depth__ *datapi=(RMD_TYPE_##__bit_depth__ *)data+\
- ((__copy_type==__X_SHARED)?(x_tm+y_tm*yuv->y_width):0),\
- *datapi_next=NULL;\
+ register RMD_TYPE_##__bit_depth__ *datapi=(RMD_TYPE_##__bit_depth__ *)data\
+ +((__copy_type==__X_SHARED)?\
+ (x_tm+y_tm*yuv->y_width):0),\
+ *datapi_next=NULL;\
if(__sampling_type==__PXL_AVERAGE){\
datapi_next=datapi+\
((__copy_type==__X_SHARED)?(yuv->y_width):(width_tm));\
@@ -280,40 +318,69 @@
}\
yuv_u+=(yuv->y_width-width_tm)/2;\
yuv_v+=(yuv->y_width-width_tm)/2;\
- datapi+=((__copy_type==__X_SHARED)?(2*yuv->y_width-width_tm):width_tm);\
+ datapi+=((__copy_type==__X_SHARED)?\
+ (2*yuv->y_width-width_tm):width_tm);\
if(__sampling_type==__PXL_AVERAGE)\
- datapi_next+=((__copy_type==__X_SHARED)?(2*yuv->y_width-width_tm):width_tm);\
+ datapi_next+=((__copy_type==__X_SHARED)?\
+ (2*yuv->y_width-width_tm):width_tm);\
}\
}
-#define UPDATE_YUV_BUFFER(yuv,data,x_tm,y_tm,width_tm,height_tm,__copy_type,__sampling_type,__color_depth){\
+#define UPDATE_YUV_BUFFER(yuv,\
+ data,\
+ x_tm,\
+ y_tm,\
+ width_tm,\
+ height_tm,\
+ __copy_type,\
+ __sampling_type,\
+ __color_depth){\
if((__color_depth==24)||(__color_depth==32)){\
UPDATE_Y_PLANE(data,x_tm,y_tm,height_tm,width_tm,yuv,__copy_type,32)\
- UPDATE_UV_PLANES(data,x_tm,y_tm,height_tm,width_tm,yuv,__copy_type,__sampling_type,32)\
+ UPDATE_UV_PLANES(data,x_tm,y_tm,height_tm,width_tm,\
+ yuv,__copy_type,__sampling_type,32)\
}\
else if(__color_depth==16){\
UPDATE_Y_PLANE(data,x_tm,y_tm,height_tm,width_tm,yuv,__copy_type,16)\
- UPDATE_UV_PLANES(data,x_tm,y_tm,height_tm,width_tm,yuv,__copy_type,__sampling_type,16)\
+ UPDATE_UV_PLANES(data,x_tm,y_tm,height_tm,width_tm,\
+ yuv,__copy_type,__sampling_type,16)\
}\
}
-#define XFIXES_POINTER_TO_YUV(yuv,data,x_tm,y_tm,width_tm,height_tm,column_discard_stride){\
+#define XFIXES_POINTER_TO_YUV(yuv,\
+ data,\
+ x_tm,\
+ y_tm,\
+ width_tm,\
+ height_tm,\
+ column_discard_stride){\
int i,k,j=0;\
unsigned char avg0,avg1,avg2,avg3;\
int x_2=x_tm/2,y_2=y_tm/2;\
for(k=0;k<height_tm;k++){\
for(i=0;i<width_tm;i++){\
yuv->y[x_tm+i+(k+y_tm)*yuv->y_width]=\
- (yuv->y[x_tm+i+(k+y_tm)*yuv->y_width]*(UCHAR_MAX-data[(j*RMD_ULONG_SIZE_T)+__ABYTE])+\
- (Yr[data[(j*RMD_ULONG_SIZE_T)+__RBYTE]] + Yg[data[(j*RMD_ULONG_SIZE_T)+__GBYTE]] +\
- Yb[data[(j*RMD_ULONG_SIZE_T)+__BBYTE]])*data[(j*RMD_ULONG_SIZE_T)+__ABYTE])/UCHAR_MAX ;\
+ (yuv->y[x_tm+i+(k+y_tm)*yuv->y_width]*\
+ (UCHAR_MAX-data[(j*RMD_ULONG_SIZE_T)+__ABYTE])+\
+ (Yr[data[(j*RMD_ULONG_SIZE_T)+__RBYTE]]+\
+ Yg[data[(j*RMD_ULONG_SIZE_T)+__GBYTE]] +\
+ Yb[data[(j*RMD_ULONG_SIZE_T)+__BBYTE]])*\
+ data[(j*RMD_ULONG_SIZE_T)+__ABYTE])/UCHAR_MAX ;\
if((k%2)&&(i%2)){\
- avg3=AVG_4_PIXELS(data,(width_tm+column_discard_stride),k,i,__ABYTE);\
- avg2=AVG_4_PIXELS(data,(width_tm+column_discard_stride),k,i,__RBYTE);\
- avg1=AVG_4_PIXELS(data,(width_tm+column_discard_stride),k,i,__GBYTE);\
- avg0=AVG_4_PIXELS(data,(width_tm+column_discard_stride),k,i,__BBYTE);\
+ avg3=AVG_4_PIXELS(data,\
+ (width_tm+column_discard_stride),\
+ k,i,__ABYTE);\
+ avg2=AVG_4_PIXELS(data,\
+ (width_tm+column_discard_stride),\
+ k,i,__RBYTE);\
+ avg1=AVG_4_PIXELS(data,\
+ (width_tm+column_discard_stride),\
+ k,i,__GBYTE);\
+ avg0=AVG_4_PIXELS(data,\
+ (width_tm+column_discard_stride),\
+ k,i,__BBYTE);\
yuv->u[x_2+i/2+(k/2+y_2)*yuv->uv_width]=\
(yuv->u[x_2+i/2+(k/2+y_2)*yuv->uv_width]*(UCHAR_MAX-avg3)+\
(Ur[avg2] + Ug[avg1] +Ub[avg0])*avg3)/UCHAR_MAX;\
@@ -327,16 +394,31 @@
}\
}
-#define DUMMY_POINTER_TO_YUV(yuv,data_tm,x_tm,y_tm,width_tm,height_tm,no_pixel){\
+#define DUMMY_POINTER_TO_YUV(yuv,\
+ data_tm,\
+ x_tm,\
+ y_tm,\
+ width_tm,\
+ height_tm,\
+ no_pixel){\
int i,k,j=0;\
int x_2=x_tm/2,y_2=y_tm/2,y_width_2=(yuv)->y_width/2;\
for(k=0;k<height_tm;k++){\
for(i=0;i<width_tm;i++){\
if(data_tm[(j*4)]!=(no_pixel)){\
- (yuv)->y[x_tm+i+(k+y_tm)*(yuv)->y_width]=Yr[data_tm[(j*4)+__RBYTE]] + Yg[data_tm[(j*4)+__GBYTE]] + Yb[data_tm[(j*4)+__BBYTE]];\
+ (yuv)->y[x_tm+i+(k+y_tm)*(yuv)->y_width]=\
+ Yr[data_tm[(j*4)+__RBYTE]] +\
+ Yg[data_tm[(j*4)+__GBYTE]] +\
+ Yb[data_tm[(j*4)+__BBYTE]];\
if((k%2)&&(i%2)){\
- yuv->u[x_2+i/2+(k/2+y_2)*y_width_2]=Ur[data_tm[(k*width_tm+i)*4+__RBYTE]] + Ug[data_tm[(k*width_tm+i)*4+__GBYTE]] + Ub[data_tm[(k*width_tm+i)*4+__BBYTE]];\
- yuv->v[x_2+i/2+(k/2+y_2)*y_width_2]=Vr[data_tm[(k*width_tm+i)*4+__RBYTE]] + Vg[data_tm[(k*width_tm+i)*4+__GBYTE]] + Vb[data_tm[(k*width_tm+i)*4+__BBYTE]] ;\
+ yuv->u[x_2+i/2+(k/2+y_2)*y_width_2]=\
+ Ur[data_tm[(k*width_tm+i)*4+__RBYTE]] +\
+ Ug[data_tm[(k*width_tm+i)*4+__GBYTE]] +\
+ Ub[data_tm[(k*width_tm+i)*4+__BBYTE]];\
+ yuv->v[x_2+i/2+(k/2+y_2)*y_width_2]=\
+ Vr[data_tm[(k*width_tm+i)*4+__RBYTE]] +\
+ Vg[data_tm[(k*width_tm+i)*4+__GBYTE]] +\
+ Vb[data_tm[(k*width_tm+i)*4+__BBYTE]] ;\
}\
}\
j++;\
diff --git a/recordmydesktop/include/rmdtypes.h b/recordmydesktop/include/rmdtypes.h
index 328532f..ea1e517 100644
--- a/recordmydesktop/include/rmdtypes.h
+++ b/recordmydesktop/include/rmdtypes.h
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 *
+******************************************************************************/
#ifndef RMDTYPES_H
#define RMDTYPES_H 1
@@ -104,7 +104,7 @@ typedef struct _BRWindow{ //'basic recorded window' specs
WGeometry geom; //window attributes
WGeometry rgeom; //part of window that is recorded
int nbytes; //size of zpixmap when screenshoting
- Window windowid; //id
+ Window windowid; //id
}BRWindow;
//defaults in the following comment lines may be out of sync with reality
@@ -118,14 +118,14 @@ typedef struct _ProgArgs{
int quietmode; //no messages to stderr,stdout
char *filename; //output file(default out.[ogg|*])
int cursor_color; //black or white=>1 or 0
- int have_dummy_cursor;//disable/enable drawing of the dummy cursor
- int xfixes_cursor; //disable/enable drawing of a cursor obtained
- //through the xfixes extension
- float fps; //desired framerate(default 15)
- unsigned int frequency; //desired frequency (default 22050)
- unsigned int channels; //no of channels(default 2)
- char *device; //default sound device(default according to alsa or oss)
- snd_pcm_uframes_t buffsize;//buffer size(in frames) for sound capturing
+ int have_dummy_cursor; //disable/enable drawing of the dummy cursor
+ int xfixes_cursor; //disable/enable drawing of a cursor obtained
+ //through the xfixes extension
+ float fps; //desired framerate(default 15)
+ unsigned int frequency; //desired frequency (default 22050)
+ unsigned int channels; //no of channels(default 2)
+ char *device; //default sound device
+ snd_pcm_uframes_t buffsize; //buffer size(in frames) for sound capturing
int nosound; //do not record sound(default 0)
int noshared; //do not use shared memory extension(default 1)
int nocondshared; //do not use shared memory on large image aquititions
@@ -133,25 +133,26 @@ typedef struct _ProgArgs{
//(which changes full-shots and with-shared to 1)
int shared_thres; //threshold to use shared memory
int full_shots; //do not poll damage, take full screenshots
- int no_quick_subsample;//average pixels in chroma planes
- int v_bitrate,v_quality,s_quality;//video bitrate,video-sound quality
+ int no_quick_subsample; //average pixels in chroma planes
+ int v_bitrate,v_quality,s_quality; //video bitrate,video-sound quality
int dropframes; //option for theora encoder
int encOnTheFly; //encode while recording, no caching(default 0)
char *workdir; //directory to be used for cache files(default $HOME)
int zerocompression;//image data are always flushed uncompressed
- int overwrite;//overwite a previously existing file(do not add a .number postfix)
+ int overwrite; //overwite a previously existing file
+ //(do not add a .number postfix)
}ProgArgs;
//this struct holds anything related to encoding AND
//writting out to file.
typedef struct _EncData{
- ogg_stream_state m_ogg_ts;//theora
- ogg_stream_state m_ogg_vs;//vorbis
- ogg_page m_ogg_pg;//this could be avoided since
- // it is used only while initializing
- ogg_packet m_ogg_pckt1;//theora stream
- ogg_packet m_ogg_pckt2;//vorbis stream
+ ogg_stream_state m_ogg_ts; //theora
+ ogg_stream_state m_ogg_vs; //vorbis
+ ogg_page m_ogg_pg; //this could be avoided since
+ // it is used only while initializing
+ ogg_packet m_ogg_pckt1; //theora stream
+ ogg_packet m_ogg_pckt2; //vorbis stream
//theora data
theora_state m_th_st;
theora_info m_th_inf;
@@ -173,13 +174,18 @@ typedef struct _EncData{
//this struct will hold a few basic
//information, needed for caching the frames.
typedef struct _CacheData{
- char *workdir, //The directory were the project will be stored, while recording.
+ char *workdir, //The directory were the project
+ //will be stored, while recording.
//Since this will take a lot of space, the user must be
//able to change the location.
- *projname, //This is the name of the folder that will hold the project.
- //It is rMD-session-%d where %d is the pid of the current proccess.
- //This way, running two instances will not create problems
- //and also, a frontend can identify leftovers from a possible crash
+ *projname, //This is the name of the folder that
+ //will hold the project.
+ //It is rMD-session-%d where %d is the pid
+ //of the current proccess.
+ //This way, running two instances
+ //will not create problems
+ //and also, a frontend can identify
+ //leftovers from a possible crash
//and delete them
*imgdata, //workdir+projname+img.out.gz
*audiodata; //workdir+projname+audio.pcm
@@ -204,54 +210,67 @@ typedef struct _SndBuffer{
//threads,so they will have access to the program data, avoiding
//at the same time usage of any globals.
typedef struct _ProgData{
- ProgArgs args;//the program arguments
- DisplaySpecs specs;//Display specific information
- BRWindow brwin;//recording window
- Display *dpy;//curtrent display
- char *window_manager;//name of the window manager at program launch
- XImage *image;//the image that holds the current full screenshot
- XImage *shimage;//the image that holds the current full screenshot(shared memory)
+ ProgArgs args; //the program arguments
+ DisplaySpecs specs; //Display specific information
+ BRWindow brwin; //recording window
+ Display *dpy; //curtrent display
+ char *window_manager; //name of the window manager at program launch
+ XImage *image; //the image that holds the current full screenshot
+ XImage *shimage; //the image that holds the current
+ //full screenshot(shared memory)
XShmSegmentInfo shminfo;//info structure for the image above.
- unsigned char *dummy_pointer;//a dummy pointer to be drawn in every frame
- //data is casted to unsigned for later use in YUV buffer
- int dummy_p_size;//initially 16x16,always square
- unsigned char npxl;//this is the no pixel convention when drawing the dummy pointer
- char *datamain,//the data of image
- *datash,//the data of shimage
- *datatemp;//buffer for the temporary image,which will be
- //preallocated in case shared memory is not used.
- RectArea *rect_root[2];//the interchanging list roots for storing the changed regions
- int list_selector,//selector for the above
- damage_event,//damage event base code
- damage_error,//damage error base code
+ unsigned char *dummy_pointer; //a dummy pointer to be drawn
+ //in every frame
+ //data is casted to unsigned for
+ //later use in YUV buffer
+ int dummy_p_size; //initially 16x16,always square
+ unsigned char npxl; //this is the no pixel convention
+ //when drawing the dummy pointer
+ char *datamain, //the data of image
+ *datash, //the data of shimage
+ *datatemp; //buffer for the temporary image,which will be
+ //preallocated in case shared memory is not used.
+ RectArea *rect_root[2]; //the interchanging list roots for storing
+ //the changed regions
+ int list_selector, //selector for the above
+ damage_event, //damage event base code
+ damage_error, //damage error base code
running;
SndBuffer *sound_buffer;
EncData *enc_data;
CacheData *cache_data;
- int hard_pause;//if sound device doesn't support pause
- //we have to close and reopen
- int avd;//syncronization among audio and video
+ int hard_pause; //if sound device doesn't support pause
+ //we have to close and reopen
+ int avd; //syncronization among audio and video
unsigned int periodtime,
frametime;
- pthread_mutex_t list_mutex[2],//mutexes for concurrency protection of the lists
+ pthread_mutex_t list_mutex[2], //mutexes for concurrency
+ //protection of the lists
sound_buffer_mutex,
- libogg_mutex,//libogg is not thread safe,
- yuv_mutex;//this might not be needed since we only have
- //one read-only and one write-only thread
- //also on previous versions, y component was looped separately
- //and then u and v so this was needed to avoid wrong coloring to render
- //Currently this mutex only prevents the cursor from flickering
- pthread_cond_t time_cond,//this gets a broadcast by the handler whenever it's time to get a screenshot
- pause_cond,//this is blocks execution, when program is paused
- sound_buffer_ready,//sound encoding finished
- sound_data_read,//a buffer is ready for proccessing
- image_buffer_ready,//image encoding finished
- theora_lib_clean,//the flush_ogg thread cannot procceed to creating last
- vorbis_lib_clean;//packages until these two libs are no longer used, by other threads
- int th_encoding_clean,//these indicate a wait condition on the above cond vars
+ libogg_mutex, //libogg is not thread safe,
+ yuv_mutex; //this might not be needed since we only have
+ //one read-only and one write-only thread
+ //also on previous versions,
+ //y component was looped separately
+ //and then u and v so this was needed
+ //to avoid wrong coloring to render
+ //Currently this mutex only prevents
+ //the cursor from flickering
+ pthread_cond_t time_cond, //this gets a broadcast by the handler
+ //whenever it's time to get a screenshot
+ pause_cond, //this is blocks execution,
+ //when program is paused
+ sound_buffer_ready, //sound encoding finished
+ sound_data_read, //a buffer is ready for proccessing
+ image_buffer_ready, //image encoding finished
+ theora_lib_clean, //the flush_ogg thread cannot
+ //procceed to creating last
+ vorbis_lib_clean; //packages until these two libs
+ //are no longer used, by other threads
+ int th_encoding_clean,
v_encoding_clean;
- int v_enc_thread_waiting,
- th_enc_thread_waiting;
+ int v_enc_thread_waiting, //these indicate a wait
+ th_enc_thread_waiting; //condition on the above cond vars
snd_pcm_t *sound_handle;
snd_pcm_uframes_t periodsize;
}ProgData;
@@ -268,17 +287,16 @@ typedef struct _ProgData{
//number of time expirations at the time of
//caching, will enable us to make up for lost frames.
-//default 4+4+2+2+2=14!bad!
-//me add pad, make god of 2 happy!
+
typedef struct _FrameHeader{
- char frame_prefix[4];//always FRAM
- u_int32_t frameno,//number of frame(cached frames)
- current_total;//number of frames that should have been
- //taken at time of caching this one
- u_int16_t Ynum,//number of changed blocks in the Y plane
- Unum,//number of changed blocks in the U plane
- Vnum;//number of changed blocks in the V plane
- u_int16_t pad;//always zero
+ char frame_prefix[4]; //always FRAM
+ u_int32_t frameno, //number of frame(cached frames)
+ current_total; //number of frames that should have been
+ //taken at time of caching this one
+ u_int16_t Ynum, //number of changed blocks in the Y plane
+ Unum, //number of changed blocks in the U plane
+ Vnum; //number of changed blocks in the V plane
+ u_int16_t pad; //always zero
}FrameHeader;
@@ -289,12 +307,12 @@ typedef struct _FrameHeader{
typedef struct _CachedFrame{
FrameHeader *header;
- unsigned char *YBlocks;//identifying number on the grid, starting at top left
- unsigned char *UBlocks;// >> >>
- unsigned char *VBlocks;// >> >>
- unsigned char *YData;//pointer to data for the blocks that have changed,
- unsigned char *UData;//which have to be remapped on the buffer when reading
- unsigned char *VData;
+ unsigned char *YBlocks; //identifying number on the grid,
+ unsigned char *UBlocks; //starting at top left
+ unsigned char *VBlocks; // >> >>
+ unsigned char *YData; //pointer to data for the blocks that have changed,
+ unsigned char *UData; //which have to be remapped
+ unsigned char *VData; //on the buffer when reading
}CachedFrame;
#endif
diff --git a/recordmydesktop/src/bgr_to_yuv.c b/recordmydesktop/src/bgr_to_yuv.c
index 0f775e2..f0632e7 100644
--- a/recordmydesktop/src/bgr_to_yuv.c
+++ b/recordmydesktop/src/bgr_to_yuv.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
diff --git a/recordmydesktop/src/cache_audio.c b/recordmydesktop/src/cache_audio.c
index afd08cf..c8a71da 100644
--- a/recordmydesktop/src/cache_audio.c
+++ b/recordmydesktop/src/cache_audio.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
void *CacheSoundBuffer(ProgData *pdata){
@@ -30,7 +30,8 @@ void *CacheSoundBuffer(ProgData *pdata){
//It's sound is tiny compared to that of image, so
//compressing would reducethe overall size by only an
//insignificant fraction.
- int framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*pdata->args.channels;
+ int framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*
+ pdata->args.channels;
pthread_mutex_t smut;
pthread_mutex_init(&smut,NULL);
while((pdata->running)){
@@ -55,7 +56,8 @@ void *CacheSoundBuffer(ProgData *pdata){
pdata->sound_buffer=pdata->sound_buffer->next;
pthread_mutex_unlock(&pdata->sound_buffer_mutex);
- fwrite(buff->data,pdata->periodsize*framesize,1,pdata->cache_data->afp);
+ fwrite(buff->data,pdata->periodsize*framesize,1,
+ pdata->cache_data->afp);
diff --git a/recordmydesktop/src/cache_frame.c b/recordmydesktop/src/cache_frame.c
index d77308a..07c7c70 100644
--- a/recordmydesktop/src/cache_frame.c
+++ b/recordmydesktop/src/cache_frame.c
@@ -1,38 +1,46 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 CompareBlocks(unsigned char *incoming,unsigned char *old,int blockno,int width, int height,int divisor){
+int CompareBlocks(unsigned char *incoming,
+ unsigned char *old,
+ int blockno,
+ int width,
+ int height,
+ int divisor){
int j,i,
block_i=blockno/divisor,//place on the grid
block_k=blockno%divisor;
- register unsigned char *incoming_reg=&(incoming[block_i*(width*height/divisor)+block_k*width/divisor]),
- *old_reg=&(old[block_i*(width*height/divisor)+block_k*width/divisor]);
+ register unsigned char *incoming_reg=&(incoming[block_i*
+ (width*height/divisor)+
+ block_k*width/divisor]),
+ *old_reg=&(old[block_i*(width*height/divisor)+
+ block_k*width/divisor]);
for(j=0;j<height/divisor;j++){
for(i=0;i<width/divisor;i++){
@@ -46,11 +54,18 @@ int CompareBlocks(unsigned char *incoming,unsigned char *old,int blockno,int wid
return 0;
}
-int FlushBlock(unsigned char *buf,int blockno,int width, int height,int divisor,gzFile *fp,FILE *ucfp){
+int FlushBlock(unsigned char *buf,
+ int blockno,
+ int width,
+ int height,
+ int divisor,
+ gzFile *fp,
+ FILE *ucfp){
int j,
block_i=blockno/divisor,//place on the grid
block_k=blockno%divisor;
- register unsigned char *buf_reg=(&buf[block_i*(width*height/divisor)+block_k*width/divisor]);
+ register unsigned char *buf_reg=(&buf[block_i*(width*height/divisor)
+ +block_k*width/divisor]);
if(ucfp==NULL){
for(j=0;j<height/divisor;j++){//we flush in rows
gzwrite(fp,(void *)buf_reg,width/divisor);
@@ -123,9 +138,12 @@ void *CacheImageBuffer(ProgData *pdata){
prev=current;
current=(current)?0:1;
//copy incoming
- memcpy(yuv[current].y,pdata->enc_data->yuv.y,yuv[current].y_width*yuv[current].y_height);
- memcpy(yuv[current].u,pdata->enc_data->yuv.u,yuv[current].uv_width*yuv[current].uv_height);
- memcpy(yuv[current].v,pdata->enc_data->yuv.v,yuv[current].uv_width*yuv[current].uv_height);
+ memcpy(yuv[current].y,pdata->enc_data->yuv.y,
+ yuv[current].y_width*yuv[current].y_height);
+ memcpy(yuv[current].u,pdata->enc_data->yuv.u,
+ yuv[current].uv_width*yuv[current].uv_height);
+ memcpy(yuv[current].v,pdata->enc_data->yuv.v,
+ yuv[current].uv_width*yuv[current].uv_height);
//release main buffer
pthread_mutex_unlock(&pdata->yuv_mutex);
//get checksums for new
@@ -149,19 +167,25 @@ void *CacheImageBuffer(ProgData *pdata){
}
else{
for(j=0;j<pow(divisor,2);j++){
- if(CompareBlocks(yuv[current].y,yuv[prev].y,j,yuv[current].y_width,yuv[current].y_height,divisor)){
+ if(CompareBlocks(yuv[current].y,yuv[prev].y,j,
+ yuv[current].y_width,
+ yuv[current].y_height,divisor)){
ynum++;
yblocks[ynum-1]=j;
}
}
for(j=0;j<pow(divisor/2,2);j++){
- if(CompareBlocks(yuv[current].u,yuv[prev].u,j,yuv[current].uv_width,yuv[current].uv_height,divisor/2)){
+ if(CompareBlocks(yuv[current].u,yuv[prev].u,j,
+ yuv[current].uv_width,
+ yuv[current].uv_height,divisor/2)){
unum++;
ublocks[unum-1]=j;
}
}
for(j=0;j<pow(divisor/2,2);j++){
- if(CompareBlocks(yuv[current].v,yuv[prev].v,j,yuv[current].uv_width,yuv[current].uv_height,divisor/2)){
+ if(CompareBlocks(yuv[current].v,yuv[prev].v,j,
+ yuv[current].uv_width,
+ yuv[current].uv_height,divisor/2)){
vnum++;
vblocks[vnum-1]=j;
}
@@ -191,7 +215,8 @@ void *CacheImageBuffer(ProgData *pdata){
if(vnum)nbytes+=gzwrite(fp,vblocks,vnum);
}
else{
- nbytes+=sizeof(FrameHeader)*fwrite((void*)&fheader,sizeof(FrameHeader),1,ucfp);
+ nbytes+=sizeof(FrameHeader)*
+ fwrite((void*)&fheader,sizeof(FrameHeader),1,ucfp);
//flush indexes
if(ynum)nbytes+=ynum*fwrite(yblocks,ynum,1,ucfp);
if(unum)nbytes+=unum*fwrite(ublocks,unum,1,ucfp);
@@ -227,18 +252,23 @@ void *CacheImageBuffer(ProgData *pdata){
/**@________________@**/
pdata->avd+=pdata->frametime;
if(nbytes>CACHE_FILE_SIZE_LIMIT){
- if(SwapCacheFilesWrite(pdata->cache_data->imgdata,nth_cache,&fp,&ucfp)){
- fprintf(stderr,"New cache file could not be created.\nEnding recording...\n");
+ if(SwapCacheFilesWrite(pdata->cache_data->imgdata,
+ nth_cache,&fp,&ucfp)){
+ fprintf(stderr,"New cache file could not be created.\n"
+ "Ending recording...\n");
fflush(stderr);
raise(SIGINT); //if for some reason we cannot make a new file
- //we have to stop. If we are out of space,which means
+ //we have to stop. If we are out of space,
+ //which means
//that encoding cannot happen either,
//InitEncoder will cause an abrupt end with an
//error code and the cache will remain intact.
- //If we've chosen separate two-stages, the program will make a
+ //If we've chosen separate two-stages,
+ //the program will make a
//clean exit.
//In either case data will be preserved so if
- //space is freed the recording can be proccessed later.
+ //space is freed the recording
+ //can be proccessed later.
}
nth_cache++;
nbytes=0;
@@ -251,7 +281,8 @@ void *CacheImageBuffer(ProgData *pdata){
free(yuv[i].u);
free(yuv[i].v);
}
- fprintf(stderr,"Saved %d frames in a total of %d requests\n",frameno,frames_total);
+ fprintf(stderr,"Saved %d frames in a total of %d requests\n",
+ frameno,frames_total);
if(!pdata->args.zerocompression){
gzflush(fp,Z_FINISH);
gzclose(fp);
diff --git a/recordmydesktop/src/capture_sound.c b/recordmydesktop/src/capture_sound.c
index 945f322..32f2638 100644
--- a/recordmydesktop/src/capture_sound.c
+++ b/recordmydesktop/src/capture_sound.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -30,7 +30,8 @@
void *CaptureSound(ProgData *pdata){
int frames=pdata->periodsize;
- int framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*pdata->args.channels;
+ int framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*
+ pdata->args.channels;
pthread_mutex_t pmut;
pthread_mutex_init(&pmut,NULL);
@@ -57,7 +58,8 @@ void *CaptureSound(ProgData *pdata){
&pdata->args.buffsize,
NULL,
NULL,
- NULL//let's hope that the device capabilities didn't magically change
+ NULL//let's hope that the device capabilities
+ //didn't magically change
);
if(pdata->sound_handle==NULL){
fprintf(stderr,"Couldn't reopen sound device.Exiting\n");
@@ -79,11 +81,14 @@ void *CaptureSound(ProgData *pdata){
newbuf->data+framesize*sret,
frames-sret);
if(temp_sret==-EPIPE){
- fprintf(stderr,"%s: Underrun occurred.\n",snd_strerror(temp_sret));
+ fprintf(stderr,"%s: Underrun occurred.\n",
+ snd_strerror(temp_sret));
snd_pcm_prepare(pdata->sound_handle);
}
else if (temp_sret<0){
- fprintf(stderr,"An error occured while reading sound data:\n %s\n",snd_strerror(temp_sret));
+ fprintf(stderr,"An error occured while reading sound data:\n"
+ " %s\n",
+ snd_strerror(temp_sret));
snd_pcm_prepare(pdata->sound_handle);
}
else
diff --git a/recordmydesktop/src/encode_cache.c b/recordmydesktop/src/encode_cache.c
index 5063d74..0113b59 100644
--- a/recordmydesktop/src/encode_cache.c
+++ b/recordmydesktop/src/encode_cache.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -33,7 +33,8 @@ void EncodeCache(ProgData *pdata){
load_cache_t;
fprintf(stderr,"Encoding started!\nThis may take several minutes.\n"
- "Pressing Ctrl-C will cancel the procedure (resuming will not be possible, but\n"
+ "Pressing Ctrl-C will cancel the procedure"
+ " (resuming will not be possible, but\n"
"any portion of the video, which is already encoded won't be deleted).\n"
"Please wait...\n");
pdata->running=1;
diff --git a/recordmydesktop/src/encode_image_buffer.c b/recordmydesktop/src/encode_image_buffer.c
index 3c50a6f..97a78ed 100644
--- a/recordmydesktop/src/encode_image_buffer.c
+++ b/recordmydesktop/src/encode_image_buffer.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
void *EncodeImageBuffer(ProgData *pdata){
@@ -36,36 +36,37 @@ void *EncodeImageBuffer(ProgData *pdata){
pdata->th_enc_thread_waiting=0;
encoder_busy=1;
if(Paused)
- pthread_cond_wait(&pdata->pause_cond,&pmut);//this may not be needed
+ pthread_cond_wait(&pdata->pause_cond,&pmut);//this may
+ //not be needed
pthread_mutex_lock(&pdata->yuv_mutex);
-// pthread_mutex_lock(&pdata->libtheora_mutex);
- if(theora_encode_YUVin(&pdata->enc_data->m_th_st,&pdata->enc_data->yuv)){
+
+ if(theora_encode_YUVin(&pdata->enc_data->m_th_st,
+ &pdata->enc_data->yuv)){
fprintf(stderr,"Encoder not ready!\n");
pthread_mutex_unlock(&pdata->yuv_mutex);
}
else{
pthread_mutex_unlock(&pdata->yuv_mutex);
- if(theora_encode_packetout(&pdata->enc_data->m_th_st,0,&pdata->enc_data->m_ogg_pckt1)==1){
+ if(theora_encode_packetout(&pdata->enc_data->m_th_st,0,
+ &pdata->enc_data->m_ogg_pckt1)==1){
pthread_mutex_lock(&pdata->libogg_mutex);
- ogg_stream_packetin(&pdata->enc_data->m_ogg_ts,&pdata->enc_data->m_ogg_pckt1);
+ ogg_stream_packetin(&pdata->enc_data->m_ogg_ts,
+ &pdata->enc_data->m_ogg_pckt1);
pthread_mutex_unlock(&pdata->libogg_mutex);
pdata->avd+=pdata->frametime;
}
}
-// pthread_mutex_unlock(&pdata->libtheora_mutex);
encoder_busy=0;
}
//last packet
pdata->th_encoding_clean=1;
pthread_cond_signal(&pdata->theora_lib_clean);
-// SyncEncodeImageBuffer(pdata);
pthread_exit(&errno);
}
//this function is meant to be called normally
//not through a thread of it's own
void SyncEncodeImageBuffer(ProgData *pdata){
-// pthread_mutex_lock(&pdata->libtheora_mutex);
if(theora_encode_YUVin(&pdata->enc_data->m_th_st,
&pdata->enc_data->yuv)){
fprintf(stderr,"Encoder not ready!\n");
@@ -81,6 +82,5 @@ void SyncEncodeImageBuffer(ProgData *pdata){
pdata->avd+=pdata->frametime;
}
}
-// pthread_mutex_unlock(&pdata->libtheora_mutex);
}
diff --git a/recordmydesktop/src/encode_sound_buffer.c b/recordmydesktop/src/encode_sound_buffer.c
index d4c673b..828855c 100644
--- a/recordmydesktop/src/encode_sound_buffer.c
+++ b/recordmydesktop/src/encode_sound_buffer.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -57,30 +57,32 @@ void *EncodeSoundBuffer(ProgData *pdata){
pdata->sound_buffer=pdata->sound_buffer->next;
pthread_mutex_unlock(&pdata->sound_buffer_mutex);
-// pthread_mutex_lock(&pdata->libvorbis_mutex);
- vorbis_buffer=vorbis_analysis_buffer(&pdata->enc_data->m_vo_dsp,sampread);
+ vorbis_buffer=vorbis_analysis_buffer(&pdata->enc_data->m_vo_dsp,
+ sampread);
for(i=0;i<sampread;i++){
for(j=0;j<pdata->args.channels;j++){
vorbis_buffer[j][i]=((buff->data[count+1]<<8)|
- (0x00ff&(int)buff->data[count]))/32768.f;
+ (0x00ff&(int)buff->data[count]))/32768.f;
count+=2;
}
}
vorbis_analysis_wrote(&pdata->enc_data->m_vo_dsp,sampread);
pthread_mutex_lock(&pdata->libogg_mutex);
- while(vorbis_analysis_blockout(&pdata->enc_data->m_vo_dsp,&pdata->enc_data->m_vo_block)==1){
+ while(vorbis_analysis_blockout(&pdata->enc_data->m_vo_dsp,
+ &pdata->enc_data->m_vo_block)==1){
vorbis_analysis(&pdata->enc_data->m_vo_block,NULL);
vorbis_bitrate_addblock(&pdata->enc_data->m_vo_block);
- while(vorbis_bitrate_flushpacket(&pdata->enc_data->m_vo_dsp,&pdata->enc_data->m_ogg_pckt2)){
- ogg_stream_packetin(&pdata->enc_data->m_ogg_vs,&pdata->enc_data->m_ogg_pckt2);
+ while(vorbis_bitrate_flushpacket(&pdata->enc_data->m_vo_dsp,
+ &pdata->enc_data->m_ogg_pckt2)){
+ ogg_stream_packetin(&pdata->enc_data->m_ogg_vs,
+ &pdata->enc_data->m_ogg_pckt2);
}
}
pthread_mutex_unlock(&pdata->libogg_mutex);
-// pthread_mutex_unlock(&pdata->libvorbis_mutex);
pdata->avd-=pdata->periodtime;
free(buff->data);
@@ -89,7 +91,6 @@ void *EncodeSoundBuffer(ProgData *pdata){
pdata->v_encoding_clean=1;
pthread_cond_signal(&pdata->vorbis_lib_clean);
-// SyncEncodeSoundBuffer(pdata,NULL);
pthread_exit(&errno);
}
@@ -97,7 +98,6 @@ void SyncEncodeSoundBuffer(ProgData *pdata,signed char *buff){
float **vorbis_buffer;
int count=0,i,j;
int sampread=(buff!=NULL)?pdata->periodsize:0;
-// pthread_mutex_lock(&pdata->libvorbis_mutex);
vorbis_buffer=vorbis_analysis_buffer(&pdata->enc_data->m_vo_dsp,sampread);
for(i=0;i<sampread;i++){
for(j=0;j<pdata->args.channels;j++){
@@ -110,19 +110,21 @@ void SyncEncodeSoundBuffer(ProgData *pdata,signed char *buff){
vorbis_analysis_wrote(&pdata->enc_data->m_vo_dsp,sampread);
pthread_mutex_lock(&pdata->libogg_mutex);
- while(vorbis_analysis_blockout(&pdata->enc_data->m_vo_dsp,&pdata->enc_data->m_vo_block)==1){
+ while(vorbis_analysis_blockout(&pdata->enc_data->m_vo_dsp,
+ &pdata->enc_data->m_vo_block)==1){
vorbis_analysis(&pdata->enc_data->m_vo_block,NULL);
vorbis_bitrate_addblock(&pdata->enc_data->m_vo_block);
- while(vorbis_bitrate_flushpacket(&pdata->enc_data->m_vo_dsp,&pdata->enc_data->m_ogg_pckt2)){
- ogg_stream_packetin(&pdata->enc_data->m_ogg_vs,&pdata->enc_data->m_ogg_pckt2);
+ while(vorbis_bitrate_flushpacket(&pdata->enc_data->m_vo_dsp,
+ &pdata->enc_data->m_ogg_pckt2)){
+ ogg_stream_packetin(&pdata->enc_data->m_ogg_vs,
+ &pdata->enc_data->m_ogg_pckt2);
}
}
pthread_mutex_unlock(&pdata->libogg_mutex);
if(!pdata->running)pdata->enc_data->m_ogg_vs.e_o_s=1;
-// pthread_mutex_unlock(&pdata->libvorbis_mutex);
pdata->avd-=pdata->periodtime;
}
diff --git a/recordmydesktop/src/flush_to_ogg.c b/recordmydesktop/src/flush_to_ogg.c
index 10d9553..cc00708 100644
--- a/recordmydesktop/src/flush_to_ogg.c
+++ b/recordmydesktop/src/flush_to_ogg.c
@@ -1,33 +1,34 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
//we copy the page because the next call to ogg_stream_pageout
-//will invalidate it. But we must have pages from both streams at every time in
+//will invalidate it. But we must have pages from
+//both streams at every time in
//order to do correct multiplexing
void ogg_page_cp(ogg_page *new,ogg_page *old){
int i=0;
@@ -76,14 +77,20 @@ void *FlushToOgg(ProgData *pdata){
if(pdata->running){
pthread_mutex_lock(&pdata->libogg_mutex);
if(!videoflag){
- videoflag=ogg_stream_pageout(&pdata->enc_data->m_ogg_ts,&videopage);
- videotime=(videoflag)?theora_granule_time(&pdata->enc_data->m_th_st,ogg_page_granulepos(&videopage)):-1;
+ videoflag=ogg_stream_pageout(&pdata->enc_data->m_ogg_ts,
+ &videopage);
+ videotime=(videoflag)?
+ theora_granule_time(&pdata->enc_data->m_th_st,
+ ogg_page_granulepos(&videopage)):-1;
if(videoflag)ogg_page_cp(&videopage_copy,&videopage);
}
if(!pdata->args.nosound)
if(!audioflag){
- audioflag=ogg_stream_pageout(&pdata->enc_data->m_ogg_vs,&audiopage);
- audiotime=(audioflag)?vorbis_granule_time(&pdata->enc_data->m_vo_dsp,ogg_page_granulepos(&audiopage)):-1;
+ audioflag=ogg_stream_pageout(&pdata->enc_data->m_ogg_vs,
+ &audiopage);
+ audiotime=(audioflag)?
+ vorbis_granule_time(&pdata->enc_data->m_vo_dsp,
+ ogg_page_granulepos(&audiopage)):-1;
if(audioflag)ogg_page_cp(&audiopage_copy,&audiopage);
}
pthread_mutex_unlock(&pdata->libogg_mutex);
@@ -91,8 +98,11 @@ void *FlushToOgg(ProgData *pdata){
else{
if(!th_st_fin && !videoflag){
pthread_mutex_lock(&pdata->libogg_mutex);
- videoflag=ogg_stream_flush(&pdata->enc_data->m_ogg_ts,&videopage);
- videotime=(videoflag)?theora_granule_time(&pdata->enc_data->m_th_st,ogg_page_granulepos(&videopage)):-1;
+ videoflag=ogg_stream_flush(&pdata->enc_data->m_ogg_ts,
+ &videopage);
+ videotime=(videoflag)?
+ theora_granule_time(&pdata->enc_data->m_th_st,
+ ogg_page_granulepos(&videopage)):-1;
if(videoflag)ogg_page_cp(&videopage_copy,&videopage);
pthread_mutex_unlock(&pdata->libogg_mutex);
//we need the last page to properly close the stream
@@ -105,8 +115,11 @@ void *FlushToOgg(ProgData *pdata){
}
if(!pdata->args.nosound && !v_st_fin &&!audioflag){
pthread_mutex_lock(&pdata->libogg_mutex);
- audioflag=ogg_stream_flush(&pdata->enc_data->m_ogg_vs,&audiopage);
- audiotime=(audioflag)?vorbis_granule_time(&pdata->enc_data->m_vo_dsp,ogg_page_granulepos(&audiopage)):-1;
+ audioflag=ogg_stream_flush(&pdata->enc_data->m_ogg_vs,
+ &audiopage);
+ audiotime=(audioflag)?
+ vorbis_granule_time(&pdata->enc_data->m_vo_dsp,
+ ogg_page_granulepos(&audiopage)):-1;
if(audioflag)ogg_page_cp(&audiopage_copy,&audiopage);
pthread_mutex_unlock(&pdata->libogg_mutex);
//we need the last page to properly close the stream
@@ -120,7 +133,8 @@ void *FlushToOgg(ProgData *pdata){
}
if(th_st_fin)videoflag=0;
if(v_st_fin)audioflag=0;
- if((!audioflag && !v_st_fin && !pdata->args.nosound) || (!videoflag && !th_st_fin)){
+ if((!audioflag && !v_st_fin && !pdata->args.nosound)||
+ (!videoflag && !th_st_fin)){
usleep(10000);
continue;
}
@@ -137,8 +151,12 @@ void *FlushToOgg(ProgData *pdata){
audio_or_video=1;
}
if(audio_or_video==1){
- video_bytesout+=fwrite(videopage_copy.header,1,videopage_copy.header_len,pdata->enc_data->fp);
- video_bytesout+=fwrite(videopage_copy.body,1,videopage_copy.body_len,pdata->enc_data->fp);
+ video_bytesout+=fwrite(videopage_copy.header,1,
+ videopage_copy.header_len,
+ pdata->enc_data->fp);
+ video_bytesout+=fwrite(videopage_copy.body,1,
+ videopage_copy.body_len,
+ pdata->enc_data->fp);
videoflag=0;
if(!pdata->running){
pthread_mutex_lock(&pdata->libogg_mutex);
@@ -149,8 +167,12 @@ void *FlushToOgg(ProgData *pdata){
ogg_page_cp_free(&videopage_copy);
}
else{
- audio_bytesout+=fwrite(audiopage_copy.header,1,audiopage_copy.header_len,pdata->enc_data->fp);
- audio_bytesout+=fwrite(audiopage_copy.body,1,audiopage_copy.body_len,pdata->enc_data->fp);
+ audio_bytesout+=fwrite(audiopage_copy.header,1,
+ audiopage_copy.header_len,
+ pdata->enc_data->fp);
+ audio_bytesout+=fwrite(audiopage_copy.body,1,
+ audiopage_copy.body_len,
+ pdata->enc_data->fp);
audioflag=0;
if(!pdata->running){
pthread_mutex_lock(&pdata->libogg_mutex);
@@ -172,6 +194,10 @@ void *FlushToOgg(ProgData *pdata){
// theora_clear(&pdata->enc_data->m_th_st);
if(pdata->enc_data->fp)fclose(pdata->enc_data->fp);
- fprintf(stderr,"\r \nDone.\nWritten %.0f bytes\n(%.0f of which were video data and %.0f audio data)\n\n",video_bytesout+audio_bytesout,video_bytesout,audio_bytesout);
+ fprintf(stderr,"\r \nDone.\nWritten %.0f bytes\n"
+ "(%.0f of which were video data "
+ "and %.0f audio data)\n\n",
+ video_bytesout+audio_bytesout,
+ video_bytesout,audio_bytesout);
pthread_exit(&errno);
}
diff --git a/recordmydesktop/src/get_frame.c b/recordmydesktop/src/get_frame.c
index 83e3058..425049b 100644
--- a/recordmydesktop/src/get_frame.c
+++ b/recordmydesktop/src/get_frame.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -85,8 +85,12 @@ void *GetFrame(ProgData *pdata){
//update previous_position
//(if full_shots is enabled this is skipped since it's pointless)
if(!pdata->args.full_shots){
- CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,&mouse_pos_temp);
- if((mouse_pos_temp.x>=0)&&(mouse_pos_temp.y>=0)&&(mouse_pos_temp.width>0)&&(mouse_pos_temp.height>0))
+ CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,
+ &mouse_pos_temp);
+ if((mouse_pos_temp.x>=0)&&
+ (mouse_pos_temp.y>=0)&&
+ (mouse_pos_temp.width>0)&&
+ (mouse_pos_temp.height>0))
RectInsert(&pdata->rect_root[tlist_sel],&mouse_pos_temp);
}
xcim=XFixesGetCursorImage(pdata->dpy);
@@ -100,8 +104,12 @@ void *GetFrame(ProgData *pdata){
//update previous_position
//(if full_shots is enabled this is skipped since it's pointless)
if(!pdata->args.full_shots){
- CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,&mouse_pos_temp);
- if((mouse_pos_temp.x>=0)&&(mouse_pos_temp.y>=0)&&(mouse_pos_temp.width>0)&&(mouse_pos_temp.height>0))
+ CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,
+ &mouse_pos_temp);
+ if((mouse_pos_temp.x>=0)&&
+ (mouse_pos_temp.y>=0)&&
+ (mouse_pos_temp.width>0)&&
+ (mouse_pos_temp.height>0))
RectInsert(&pdata->rect_root[tlist_sel],&mouse_pos_temp);
}
//find new one
@@ -112,7 +120,9 @@ void *GetFrame(ProgData *pdata){
&mouse_pos_rel.x,&mouse_pos_rel.y,&msk_ret);
}
if(!pdata->args.noshared)
- XShmGetImage(pdata->dpy,pdata->specs.root,pdata->shimage,(pdata->brwin.rgeom.x),(pdata->brwin.rgeom.y),AllPlanes);
+ XShmGetImage(pdata->dpy,pdata->specs.root,pdata->shimage,
+ (pdata->brwin.rgeom.x),
+ (pdata->brwin.rgeom.y),AllPlanes);
if(!pdata->args.full_shots)
UpdateImage(pdata->dpy,
&pdata->enc_data->yuv,
@@ -121,7 +131,9 @@ void *GetFrame(ProgData *pdata){
&pdata->rect_root[tlist_sel],
&pdata->brwin,
pdata->enc_data,
- ((pdata->args.noshared)?(pdata->datatemp):pdata->shimage->data),
+ ((pdata->args.noshared)?
+ (pdata->datatemp):
+ (pdata->shimage->data)),
pdata->args.noshared,
pdata->args.no_quick_subsample);
else{
@@ -151,15 +163,24 @@ void *GetFrame(ProgData *pdata){
}
if(pdata->args.xfixes_cursor){
//avoid segfaults
- CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,&mouse_pos_temp);
+ CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,
+ &mouse_pos_temp);
//draw the cursor
- if((mouse_pos_temp.x>=0)&&(mouse_pos_temp.y>=0)&&(mouse_pos_temp.width>0)&&(mouse_pos_temp.height>0)){
- XFIXES_POINTER_TO_YUV((&pdata->enc_data->yuv),((unsigned char*)xcim->pixels),
- (mouse_pos_temp.x-pdata->brwin.rgeom.x+pdata->enc_data->x_offset),
- (mouse_pos_temp.y-pdata->brwin.rgeom.y+pdata->enc_data->y_offset),
- mouse_pos_temp.width,
- mouse_pos_temp.height,
- (xcim->width-mouse_pos_temp.width));
+ if((mouse_pos_temp.x>=0)&&
+ (mouse_pos_temp.y>=0)&&
+ (mouse_pos_temp.width>0)&&
+ (mouse_pos_temp.height>0)){
+ XFIXES_POINTER_TO_YUV((&pdata->enc_data->yuv),
+ ((unsigned char*)xcim->pixels),
+ (mouse_pos_temp.x-
+ pdata->brwin.rgeom.x+
+ pdata->enc_data->x_offset),
+ (mouse_pos_temp.y-
+ pdata->brwin.rgeom.y+
+ pdata->enc_data->y_offset),
+ mouse_pos_temp.width,
+ mouse_pos_temp.height,
+ (xcim->width-mouse_pos_temp.width));
}
XFree(xcim);
xcim=NULL;
@@ -167,16 +188,24 @@ void *GetFrame(ProgData *pdata){
if(pdata->args.have_dummy_cursor){
//avoid segfaults
- CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,&mouse_pos_temp);
+ CLIP_DUMMY_POINTER_AREA(mouse_pos_abs,&pdata->brwin,
+ &mouse_pos_temp);
//draw the cursor
- if((mouse_pos_temp.x>=0)&&(mouse_pos_temp.y>=0)&&(mouse_pos_temp.width>0)&&(mouse_pos_temp.height>0)){
+ if((mouse_pos_temp.x>=0)&&
+ (mouse_pos_temp.y>=0)&&
+ (mouse_pos_temp.width>0)&&
+ (mouse_pos_temp.height>0)){
DUMMY_POINTER_TO_YUV((&pdata->enc_data->yuv),
- pdata->dummy_pointer,
- (mouse_pos_temp.x-pdata->brwin.rgeom.x+pdata->enc_data->x_offset),
- (mouse_pos_temp.y-pdata->brwin.rgeom.y+pdata->enc_data->y_offset),
- mouse_pos_temp.width,
- mouse_pos_temp.height,
- pdata->npxl);
+ pdata->dummy_pointer,
+ (mouse_pos_temp.x-
+ pdata->brwin.rgeom.x+
+ pdata->enc_data->x_offset),
+ (mouse_pos_temp.y-
+ pdata->brwin.rgeom.y+
+ pdata->enc_data->y_offset),
+ mouse_pos_temp.width,
+ mouse_pos_temp.height,
+ pdata->npxl);
}
}
if(!pdata->args.full_shots){
diff --git a/recordmydesktop/src/getzpixmap.c b/recordmydesktop/src/getzpixmap.c
index 4a7a7de..6deaf15 100644
--- a/recordmydesktop/src/getzpixmap.c
+++ b/recordmydesktop/src/getzpixmap.c
@@ -1,37 +1,43 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 GetZPixmap(Display *dpy,Window root,char *data,int x,int y,int width,int height) {
+int GetZPixmap(Display *dpy,
+ Window root,
+ char *data,
+ int x,
+ int y,
+ int width,
+ int height){
xGetImageReply reply;
xGetImageReq *request;
long nbytes;
-
+
LockDisplay(dpy);
GetReq(GetImage,request);
request->drawable=root;
@@ -52,4 +58,4 @@ int GetZPixmap(Display *dpy,Window root,char *data,int x,int y,int width,int hei
SyncHandle();
return 0;
}
-
+
diff --git a/recordmydesktop/src/init_encoder.c b/recordmydesktop/src/init_encoder.c
index 618c790..34775fd 100644
--- a/recordmydesktop/src/init_encoder.c
+++ b/recordmydesktop/src/init_encoder.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -34,7 +34,8 @@ int IncrementalNaming(char **name){
base_name__=malloc(strlen(*name)+1);
strcpy(base_name__,*name);
- //this will go on an endless loop if you have 65536? files with the same name
+ //this will go on an endless loop if you have 65536?
+ //files with the same name
//or it will crash and die.anyone interested in trying ?
while (stat(*name,&buff)==0){
//create new name
@@ -66,75 +67,87 @@ void InitEncoder(ProgData *pdata,EncData *enc_data_t,int buffer_ready){
y2=rand();
y2+=(y1==y2);
- ogg_stream_init(&(enc_data_t)->m_ogg_ts,y1);
+ ogg_stream_init(&enc_data_t->m_ogg_ts,y1);
if(!pdata->args.nosound)
- ogg_stream_init(&(enc_data_t)->m_ogg_vs,y2);
+ ogg_stream_init(&enc_data_t->m_ogg_vs,y2);
if(!pdata->args.overwrite)
IncrementalNaming(&(pdata)->args.filename);
- (enc_data_t)->fp=fopen((pdata)->args.filename,"w");
- if((enc_data_t)->fp==NULL){
- fprintf(stderr,"Cannot open file %s for writting!\n",(pdata)->args.filename);
+ enc_data_t->fp=fopen((pdata)->args.filename,"w");
+ if(enc_data_t->fp==NULL){
+ fprintf(stderr,"Cannot open file %s for writting!\n",
+ (pdata)->args.filename);
exit(13);
}
- theora_info_init(&(enc_data_t)->m_th_inf);
- (enc_data_t)->m_th_inf.frame_width=(pdata)->brwin.rgeom.width;
- (enc_data_t)->m_th_inf.frame_height=(pdata)->brwin.rgeom.height;
- (enc_data_t)->m_th_inf.width=(((enc_data_t)->m_th_inf.frame_width + 15) >>4)<<4;
- (enc_data_t)->m_th_inf.height=(((enc_data_t)->m_th_inf.frame_height + 15) >>4)<<4;
- (enc_data_t)->m_th_inf.offset_x=(((enc_data_t)->m_th_inf.width-(enc_data_t)->m_th_inf.frame_width)/2)&~1;
- (enc_data_t)->m_th_inf.offset_y=(((enc_data_t)->m_th_inf.height-(enc_data_t)->m_th_inf.frame_height)/2)&~1;
- (enc_data_t)->m_th_inf.fps_numerator=((pdata)->args.fps*100.0);
- (enc_data_t)->m_th_inf.fps_denominator=100;
- (enc_data_t)->m_th_inf.aspect_numerator=1;//(pdata)->brwin.rgeom.width;
- (enc_data_t)->m_th_inf.aspect_denominator=1;//(pdata)->brwin.rgeom.height;
- (enc_data_t)->m_th_inf.colorspace=OC_CS_UNSPECIFIED;
- (enc_data_t)->m_th_inf.pixelformat=OC_PF_420;
- (enc_data_t)->m_th_inf.target_bitrate=(pdata)->args.v_bitrate;
- (enc_data_t)->m_th_inf.quality=(pdata)->args.v_quality;
- (enc_data_t)->m_th_inf.dropframes_p=(pdata)->args.dropframes;
- (enc_data_t)->m_th_inf.quick_p=1;
- (enc_data_t)->m_th_inf.keyframe_auto_p=1;
- (enc_data_t)->m_th_inf.keyframe_frequency=64;
- (enc_data_t)->m_th_inf.keyframe_frequency_force=64;
- (enc_data_t)->m_th_inf.keyframe_data_target_bitrate=(enc_data_t)->m_th_inf.quality*1.5;
- (enc_data_t)->m_th_inf.keyframe_auto_threshold=80;
- (enc_data_t)->m_th_inf.keyframe_mindistance=8;
- (enc_data_t)->m_th_inf.noise_sensitivity=1;
- (enc_data_t)->m_th_inf.sharpness=2;
-
- theora_encode_init(&(enc_data_t)->m_th_st,&(enc_data_t)->m_th_inf);
+ theora_info_init(&enc_data_t->m_th_inf);
+ enc_data_t->m_th_inf.frame_width=(pdata)->brwin.rgeom.width;
+ enc_data_t->m_th_inf.frame_height=(pdata)->brwin.rgeom.height;
+ enc_data_t->m_th_inf.width=((enc_data_t->m_th_inf.frame_width+15)>>4)<<4;
+ enc_data_t->m_th_inf.height=((enc_data_t->m_th_inf.frame_height+15)>>4)<<4;
+ enc_data_t->m_th_inf.offset_x=((enc_data_t->m_th_inf.width-
+ enc_data_t->m_th_inf.frame_width)/2)&~1;
+ enc_data_t->m_th_inf.offset_y=((enc_data_t->m_th_inf.height-
+ enc_data_t->m_th_inf.frame_height)/2)&~1;
+ enc_data_t->m_th_inf.fps_numerator=((pdata)->args.fps*100.0);
+ enc_data_t->m_th_inf.fps_denominator=100;
+ enc_data_t->m_th_inf.aspect_numerator=1;//(pdata)->brwin.rgeom.width;
+ enc_data_t->m_th_inf.aspect_denominator=1;//(pdata)->brwin.rgeom.height;
+ enc_data_t->m_th_inf.colorspace=OC_CS_UNSPECIFIED;
+ enc_data_t->m_th_inf.pixelformat=OC_PF_420;
+ enc_data_t->m_th_inf.target_bitrate=(pdata)->args.v_bitrate;
+ enc_data_t->m_th_inf.quality=(pdata)->args.v_quality;
+ enc_data_t->m_th_inf.dropframes_p=(pdata)->args.dropframes;
+ enc_data_t->m_th_inf.quick_p=1;
+ enc_data_t->m_th_inf.keyframe_auto_p=1;
+ enc_data_t->m_th_inf.keyframe_frequency=64;
+ enc_data_t->m_th_inf.keyframe_frequency_force=64;
+ enc_data_t->m_th_inf.keyframe_data_target_bitrate=
+ enc_data_t->m_th_inf.quality*1.5;
+
+ enc_data_t->m_th_inf.keyframe_auto_threshold=80;
+ enc_data_t->m_th_inf.keyframe_mindistance=8;
+ enc_data_t->m_th_inf.noise_sensitivity=1;
+ enc_data_t->m_th_inf.sharpness=2;
+
+ theora_encode_init(&enc_data_t->m_th_st,&enc_data_t->m_th_inf);
if(!pdata->args.nosound){
int ret;
- vorbis_info_init(&(enc_data_t)->m_vo_inf);
- ret = vorbis_encode_init_vbr(&(enc_data_t)->m_vo_inf,pdata->args.channels,pdata->args.frequency,(float)pdata->args.s_quality*0.1);
+ vorbis_info_init(&enc_data_t->m_vo_inf);
+ ret = vorbis_encode_init_vbr(&enc_data_t->m_vo_inf,
+ pdata->args.channels,
+ pdata->args.frequency,
+ (float)pdata->args.s_quality*0.1);
if(ret){
fprintf(stderr,"Error while setting up vorbis stream quality!\n");
exit(2);
}
- vorbis_comment_init(&(enc_data_t)->m_vo_cmmnt);
- vorbis_analysis_init(&(enc_data_t)->m_vo_dsp,&(enc_data_t)->m_vo_inf);
- vorbis_block_init(&(enc_data_t)->m_vo_dsp,&(enc_data_t)->m_vo_block);
+ vorbis_comment_init(&enc_data_t->m_vo_cmmnt);
+ vorbis_analysis_init(&enc_data_t->m_vo_dsp,&enc_data_t->m_vo_inf);
+ vorbis_block_init(&enc_data_t->m_vo_dsp,&enc_data_t->m_vo_block);
}
- theora_encode_header(&(enc_data_t)->m_th_st,&(enc_data_t)->m_ogg_pckt1);
- ogg_stream_packetin(&(enc_data_t)->m_ogg_ts,&(enc_data_t)->m_ogg_pckt1);
- if(ogg_stream_pageout(&(enc_data_t)->m_ogg_ts,&(enc_data_t)->m_ogg_pg)!=1){
+ theora_encode_header(&enc_data_t->m_th_st,&enc_data_t->m_ogg_pckt1);
+ ogg_stream_packetin(&enc_data_t->m_ogg_ts,&enc_data_t->m_ogg_pckt1);
+ if(ogg_stream_pageout(&enc_data_t->m_ogg_ts,&enc_data_t->m_ogg_pg)!=1){
fprintf(stderr,"Internal Ogg library error.\n");
exit(2);
}
- fwrite((enc_data_t)->m_ogg_pg.header,1,(enc_data_t)->m_ogg_pg.header_len,(enc_data_t)->fp);
- fwrite((enc_data_t)->m_ogg_pg.body,1,(enc_data_t)->m_ogg_pg.body_len,(enc_data_t)->fp);
+ fwrite(enc_data_t->m_ogg_pg.header,1,
+ enc_data_t->m_ogg_pg.header_len,
+ enc_data_t->fp);
+ fwrite(enc_data_t->m_ogg_pg.body,1,
+ enc_data_t->m_ogg_pg.body_len,
+ enc_data_t->fp);
- theora_comment_init(&(enc_data_t)->m_th_cmmnt);
- theora_comment_add_tag(&(enc_data_t)->m_th_cmmnt,"recordMyDesktop",VERSION);
- theora_encode_comment(&(enc_data_t)->m_th_cmmnt,&(enc_data_t)->m_ogg_pckt1);
- ogg_stream_packetin(&(enc_data_t)->m_ogg_ts,&(enc_data_t)->m_ogg_pckt1);
- theora_encode_tables(&(enc_data_t)->m_th_st,&(enc_data_t)->m_ogg_pckt1);
- ogg_stream_packetin(&(enc_data_t)->m_ogg_ts,&(enc_data_t)->m_ogg_pckt1);
+ theora_comment_init(&enc_data_t->m_th_cmmnt);
+ theora_comment_add_tag(&enc_data_t->m_th_cmmnt,"recordMyDesktop",VERSION);
+ theora_encode_comment(&enc_data_t->m_th_cmmnt,&enc_data_t->m_ogg_pckt1);
+ ogg_stream_packetin(&enc_data_t->m_ogg_ts,&enc_data_t->m_ogg_pckt1);
+ theora_encode_tables(&enc_data_t->m_th_st,&enc_data_t->m_ogg_pckt1);
+ ogg_stream_packetin(&enc_data_t->m_ogg_ts,&enc_data_t->m_ogg_pckt1);
if(!pdata->args.nosound){
@@ -142,61 +155,81 @@ void InitEncoder(ProgData *pdata,EncData *enc_data_t,int buffer_ready){
ogg_packet header_comm;
ogg_packet header_code;
- vorbis_analysis_headerout(&(enc_data_t)->m_vo_dsp,&(enc_data_t)->m_vo_cmmnt,&header,&header_comm,&header_code);
- ogg_stream_packetin(&(enc_data_t)->m_ogg_vs,&header);
- if(ogg_stream_pageout(&(enc_data_t)->m_ogg_vs,&(enc_data_t)->m_ogg_pg)!=1){
+ vorbis_analysis_headerout(&enc_data_t->m_vo_dsp,
+ &enc_data_t->m_vo_cmmnt,
+ &header,&header_comm,
+ &header_code);
+ ogg_stream_packetin(&enc_data_t->m_ogg_vs,&header);
+ if(ogg_stream_pageout(&enc_data_t->m_ogg_vs,&enc_data_t->m_ogg_pg)!=1){
fprintf(stderr,"Internal Ogg library error.\n");
exit(2);
}
- fwrite((enc_data_t)->m_ogg_pg.header,1,(enc_data_t)->m_ogg_pg.header_len,(enc_data_t)->fp);
- fwrite((enc_data_t)->m_ogg_pg.body,1,(enc_data_t)->m_ogg_pg.body_len,(enc_data_t)->fp);
-
- ogg_stream_packetin(&(enc_data_t)->m_ogg_vs,&header_comm);
- ogg_stream_packetin(&(enc_data_t)->m_ogg_vs,&header_code);
+ fwrite(enc_data_t->m_ogg_pg.header,1,
+ enc_data_t->m_ogg_pg.header_len,
+ enc_data_t->fp);
+ fwrite(enc_data_t->m_ogg_pg.body,1,
+ enc_data_t->m_ogg_pg.body_len,
+ enc_data_t->fp);
+
+ ogg_stream_packetin(&enc_data_t->m_ogg_vs,&header_comm);
+ ogg_stream_packetin(&enc_data_t->m_ogg_vs,&header_code);
}
while(1){
- int result = ogg_stream_flush(&(enc_data_t)->m_ogg_ts,&(enc_data_t)->m_ogg_pg);
+ int result = ogg_stream_flush(&enc_data_t->m_ogg_ts,
+ &enc_data_t->m_ogg_pg);
if(result<0){
fprintf(stderr,"Internal Ogg library error.\n");
exit(2);
}
if(result==0)break;
- fwrite((enc_data_t)->m_ogg_pg.header,1,(enc_data_t)->m_ogg_pg.header_len,(enc_data_t)->fp);
- fwrite((enc_data_t)->m_ogg_pg.body,1,(enc_data_t)->m_ogg_pg.body_len,(enc_data_t)->fp);
+ fwrite(enc_data_t->m_ogg_pg.header,1,
+ enc_data_t->m_ogg_pg.header_len,
+ enc_data_t->fp);
+ fwrite(enc_data_t->m_ogg_pg.body,1,
+ enc_data_t->m_ogg_pg.body_len,
+ enc_data_t->fp);
}
if(!pdata->args.nosound){
while(1){
- int result=ogg_stream_flush(&(enc_data_t)->m_ogg_vs,&(enc_data_t)->m_ogg_pg);
+ int result=ogg_stream_flush(&enc_data_t->m_ogg_vs,
+ &enc_data_t->m_ogg_pg);
if(result<0){
fprintf(stderr,"Internal Ogg library error.\n");
exit(2);
}
if(result==0)break;
- fwrite((enc_data_t)->m_ogg_pg.header,1,(enc_data_t)->m_ogg_pg.header_len,(enc_data_t)->fp);
- fwrite((enc_data_t)->m_ogg_pg.body,1,(enc_data_t)->m_ogg_pg.body_len,(enc_data_t)->fp);
+ fwrite(enc_data_t->m_ogg_pg.header,1,
+ enc_data_t->m_ogg_pg.header_len,
+ enc_data_t->fp);
+ fwrite(enc_data_t->m_ogg_pg.body,1,
+ enc_data_t->m_ogg_pg.body_len,
+ enc_data_t->fp);
}
}
if(!buffer_ready){
- (enc_data_t)->yuv.y=(unsigned char *)malloc((enc_data_t)->m_th_inf.height*(enc_data_t)->m_th_inf.width);
- (enc_data_t)->yuv.u=(unsigned char *)malloc((enc_data_t)->m_th_inf.height*(enc_data_t)->m_th_inf.width/4);
- (enc_data_t)->yuv.v=(unsigned char *)malloc((enc_data_t)->m_th_inf.height*(enc_data_t)->m_th_inf.width/4);
- (enc_data_t)->yuv.y_width=(enc_data_t)->m_th_inf.width;
- (enc_data_t)->yuv.y_height=(enc_data_t)->m_th_inf.height;
- (enc_data_t)->yuv.y_stride=(enc_data_t)->m_th_inf.width;
-
- (enc_data_t)->yuv.uv_width=(enc_data_t)->m_th_inf.width/2;
- (enc_data_t)->yuv.uv_height=(enc_data_t)->m_th_inf.height/2;
- (enc_data_t)->yuv.uv_stride=(enc_data_t)->m_th_inf.width/2;
- (enc_data_t)->x_offset=(enc_data_t)->m_th_inf.offset_x;
- (enc_data_t)->y_offset=(enc_data_t)->m_th_inf.offset_y;
+ enc_data_t->yuv.y=(unsigned char *)malloc(enc_data_t->m_th_inf.height*
+ enc_data_t->m_th_inf.width);
+ enc_data_t->yuv.u=(unsigned char *)malloc(enc_data_t->m_th_inf.height*
+ enc_data_t->m_th_inf.width/4);
+ enc_data_t->yuv.v=(unsigned char *)malloc(enc_data_t->m_th_inf.height*
+ enc_data_t->m_th_inf.width/4);
+ enc_data_t->yuv.y_width=enc_data_t->m_th_inf.width;
+ enc_data_t->yuv.y_height=enc_data_t->m_th_inf.height;
+ enc_data_t->yuv.y_stride=enc_data_t->m_th_inf.width;
+
+ enc_data_t->yuv.uv_width=enc_data_t->m_th_inf.width/2;
+ enc_data_t->yuv.uv_height=enc_data_t->m_th_inf.height/2;
+ enc_data_t->yuv.uv_stride=enc_data_t->m_th_inf.width/2;
+ enc_data_t->x_offset=enc_data_t->m_th_inf.offset_x;
+ enc_data_t->y_offset=enc_data_t->m_th_inf.offset_y;
}
- theora_info_clear(&(enc_data_t)->m_th_inf);
+ theora_info_clear(&enc_data_t->m_th_inf);
}
diff --git a/recordmydesktop/src/initialize_data.c b/recordmydesktop/src/initialize_data.c
index 93f7858..4830c83 100644
--- a/recordmydesktop/src/initialize_data.c
+++ b/recordmydesktop/src/initialize_data.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -40,7 +40,9 @@ int InitializeData(ProgData *pdata,
fprintf(stderr,"Initializing...\n");
MakeMatrices();
if(pdata->args.have_dummy_cursor){
- pdata->dummy_pointer=MakeDummyPointer(&pdata->specs,16,pdata->args.cursor_color,0,&pdata->npxl);
+ pdata->dummy_pointer=MakeDummyPointer(&pdata->specs,16,
+ pdata->args.cursor_color,0,
+ &pdata->npxl);
pdata->dummy_p_size=16;
}
@@ -72,25 +74,49 @@ int InitializeData(ProgData *pdata,
Running=&pdata->running;
if((pdata->args.noshared)){
- pdata->image=XCreateImage(pdata->dpy, pdata->specs.visual, pdata->specs.depth, ZPixmap, 0,pdata->datamain,pdata->brwin.rgeom.width,
- pdata->brwin.rgeom.height, 8, 0);
+ pdata->image=XCreateImage(pdata->dpy,
+ pdata->specs.visual,
+ pdata->specs.depth,
+ ZPixmap,
+ 0,
+ pdata->datamain,
+ pdata->brwin.rgeom.width,
+ pdata->brwin.rgeom.height,
+ 8,
+ 0);
XInitImage(pdata->image);
- GetZPixmap(pdata->dpy,pdata->specs.root,pdata->image->data,pdata->brwin.rgeom.x,pdata->brwin.rgeom.y,
- pdata->brwin.rgeom.width,pdata->brwin.rgeom.height);
+ GetZPixmap(pdata->dpy,pdata->specs.root,
+ pdata->image->data,
+ pdata->brwin.rgeom.x,
+ pdata->brwin.rgeom.y,
+ pdata->brwin.rgeom.width,
+ pdata->brwin.rgeom.height);
}
if((!pdata->args.noshared)||(!pdata->args.nocondshared)){
- pdata->shimage=XShmCreateImage (pdata->dpy,pdata->specs.visual,pdata->specs.depth,ZPixmap,pdata->datash,
- &pdata->shminfo, pdata->brwin.rgeom.width,pdata->brwin.rgeom.height);
- pdata->shminfo.shmid = shmget (IPC_PRIVATE,
- pdata->shimage->bytes_per_line * pdata->shimage->height,
- IPC_CREAT|0777);
- pdata->shminfo.shmaddr = pdata->shimage->data = shmat (pdata->shminfo.shmid, 0, 0);
+ pdata->shimage=XShmCreateImage(pdata->dpy,
+ pdata->specs.visual,
+ pdata->specs.depth,
+ ZPixmap,pdata->datash,
+ &pdata->shminfo,
+ pdata->brwin.rgeom.width,
+ pdata->brwin.rgeom.height);
+ pdata->shminfo.shmid=shmget (IPC_PRIVATE,
+ pdata->shimage->bytes_per_line*
+ pdata->shimage->height,
+ IPC_CREAT|0777);
+ pdata->shminfo.shmaddr=pdata->shimage->data=shmat(pdata->shminfo.shmid,
+ 0,0);
pdata->shminfo.readOnly = False;
if(!XShmAttach(pdata->dpy,&pdata->shminfo)){
fprintf(stderr,"Failed to attach shared memory to proccess.\n");
return 12;
}
- XShmGetImage(pdata->dpy,pdata->specs.root,pdata->shimage,pdata->brwin.rgeom.x,pdata->brwin.rgeom.y,AllPlanes);
+ XShmGetImage(pdata->dpy,
+ pdata->specs.root,
+ pdata->shimage,
+ pdata->brwin.rgeom.x,
+ pdata->brwin.rgeom.y,
+ AllPlanes);
}
if(!pdata->args.nosound){
pdata->sound_handle=OpenDev( pdata->args.device,
@@ -101,7 +127,10 @@ int InitializeData(ProgData *pdata,
&pdata->periodtime,
&pdata->hard_pause);
if(pdata->sound_handle==NULL){
- fprintf(stderr,"Error while opening/configuring soundcard %s\nTry running with the --no-sound or specify a correct device.\n",pdata->args.device);
+ fprintf(stderr,"Error while opening/configuring soundcard %s\n"
+ "Try running with the --no-sound or specify a "
+ "correct device.\n",
+ pdata->args.device);
return 3;
}
}
@@ -113,7 +142,9 @@ int InitializeData(ProgData *pdata,
for(i=0;i<(pdata->enc_data->yuv.y_width*pdata->enc_data->yuv.y_height);i++)
pdata->enc_data->yuv.y[i]=0;
- for(i=0;i<(pdata->enc_data->yuv.uv_width*pdata->enc_data->yuv.uv_height);i++){
+ for(i=0;
+ i<(pdata->enc_data->yuv.uv_width*pdata->enc_data->yuv.uv_height);
+ i++){
pdata->enc_data->yuv.v[i]=pdata->enc_data->yuv.u[i]=127;
}
diff --git a/recordmydesktop/src/load_cache.c b/recordmydesktop/src/load_cache.c
index 7693774..c9fc96b 100644
--- a/recordmydesktop/src/load_cache.c
+++ b/recordmydesktop/src/load_cache.c
@@ -1,39 +1,45 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
-void LoadBlock(unsigned char *dest,unsigned char *source,int blockno,int width, int height,int divisor){
+void LoadBlock(unsigned char *dest,
+ unsigned char *source,
+ int blockno,
+ int width,
+ int height,
+ int divisor){
int j,
block_i=blockno/divisor,//place on the grid
block_k=blockno%divisor;
for(j=0;j<height/divisor;j++)//we copy rows
- memcpy( &dest[block_i*(width*height/divisor)+j*width+block_k*width/divisor],
+ memcpy( &dest[block_i*(width*height/divisor)+
+ j*width+block_k*width/divisor],
&source[j*width/divisor],
width/divisor);
}
@@ -58,7 +64,8 @@ void *LoadCache(ProgData *pdata){
divisor=16,
blockszy=0,//size of y plane block in bytes
blockszuv=0,//size of u,v plane blocks in bytes
- framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*pdata->args.channels;//audio frame size
+ framesize=((snd_pcm_format_width(SND_PCM_FORMAT_S16_LE))/8)*
+ pdata->args.channels;//audio frame size
signed char *sound_data=(signed char *)malloc(pdata->periodsize*framesize);
//we allocate the frame that we will use
@@ -106,11 +113,13 @@ void *LoadCache(ProgData *pdata){
SyncEncodeImageBuffer(pdata);
}
else if(((!pdata->args.zerocompression)&&
- (gzread(ifp,frame.header,sizeof(FrameHeader))==sizeof(FrameHeader) ))||
+ (gzread(ifp,frame.header,sizeof(FrameHeader))==
+ sizeof(FrameHeader) ))||
((pdata->args.zerocompression)&&
(fread(frame.header,sizeof(FrameHeader),1,ucfp)==1))){
//sync
- missing_frames+=frame.header->current_total-(extra_frames+frame.header->frameno);
+ missing_frames+=frame.header->current_total-
+ (extra_frames+frame.header->frameno);
fprintf(stdout,"\r[%d%%] ",
((frame.header->frameno+extra_frames)*100)/frames_total);
@@ -121,21 +130,35 @@ void *LoadCache(ProgData *pdata){
(
((!pdata->args.zerocompression)&&
- ((gzread(ifp,frame.YBlocks,frame.header->Ynum)==frame.header->Ynum) &&
- (gzread(ifp,frame.UBlocks,frame.header->Unum)==frame.header->Unum) &&
- (gzread(ifp,frame.VBlocks,frame.header->Vnum)==frame.header->Vnum) &&
- (gzread(ifp,frame.YData,blockszy*frame.header->Ynum)==blockszy*frame.header->Ynum) &&
- (gzread(ifp,frame.UData,(blockszuv*frame.header->Unum))==(blockszuv*frame.header->Unum)) &&
- (gzread(ifp,frame.VData,(blockszuv*frame.header->Vnum))==(blockszuv*frame.header->Vnum)))) ||
+ ((gzread(ifp,frame.YBlocks,frame.header->Ynum)==
+ frame.header->Ynum) &&
+ (gzread(ifp,frame.UBlocks,frame.header->Unum)==
+ frame.header->Unum) &&
+ (gzread(ifp,frame.VBlocks,frame.header->Vnum)==
+ frame.header->Vnum) &&
+ (gzread(ifp,frame.YData,blockszy*frame.header->Ynum)==
+ blockszy*frame.header->Ynum) &&
+ (gzread(ifp,frame.UData,(blockszuv*frame.header->Unum))==
+ (blockszuv*frame.header->Unum)) &&
+ (gzread(ifp,frame.VData,(blockszuv*frame.header->Vnum))==
+ (blockszuv*frame.header->Vnum)))) ||
((pdata->args.zerocompression)&&
- ((fread(frame.YBlocks,1,frame.header->Ynum,ucfp)==frame.header->Ynum) &&
- (fread(frame.UBlocks,1,frame.header->Unum,ucfp)==frame.header->Unum) &&
- (fread(frame.VBlocks,1,frame.header->Vnum,ucfp)==frame.header->Vnum) &&
- (frame.header->Ynum==0 ||fread(frame.YData,blockszy,frame.header->Ynum,ucfp)==frame.header->Ynum) &&
- (frame.header->Unum==0 ||fread(frame.UData,blockszuv,frame.header->Unum,ucfp)==frame.header->Unum) &&
- (frame.header->Vnum==0 ||fread(frame.VData,blockszuv,frame.header->Vnum,ucfp)==frame.header->Vnum)))
-
+ ((fread(frame.YBlocks,1,frame.header->Ynum,ucfp)==
+ frame.header->Ynum) &&
+ (fread(frame.UBlocks,1,frame.header->Unum,ucfp)==
+ frame.header->Unum) &&
+ (fread(frame.VBlocks,1,frame.header->Vnum,ucfp)==
+ frame.header->Vnum) &&
+ (frame.header->Ynum==0 ||
+ fread(frame.YData,blockszy,frame.header->Ynum,ucfp)==
+ frame.header->Ynum) &&
+ (frame.header->Unum==0 ||
+ fread(frame.UData,blockszuv,frame.header->Unum,ucfp)==
+ frame.header->Unum) &&
+ (frame.header->Vnum==0 ||
+ fread(frame.VData,blockszuv,frame.header->Vnum,ucfp)==
+ frame.header->Vnum)))
)
){
//load the blocks for each buffer
@@ -163,8 +186,10 @@ void *LoadCache(ProgData *pdata){
yuv->uv_width,
yuv->uv_height,
divisor/2);
- //encode. This is not made in a thread since now blocking is not a problem
- //and this way sync problems can be avoided more easily.
+ //encode. This is not made in a thread since
+ //now blocking is not a problem
+ //and this way sync problems
+ //can be avoided more easily.
SyncEncodeImageBuffer(pdata);
}
else{
@@ -173,7 +198,10 @@ void *LoadCache(ProgData *pdata){
}
}
else{
- if(SwapCacheFilesRead(pdata->cache_data->imgdata,nth_cache,&ifp,&ucfp)){
+ if(SwapCacheFilesRead(pdata->cache_data->imgdata,
+ nth_cache,
+ &ifp,
+ &ucfp)){
raise(SIGINT);
}
else{
diff --git a/recordmydesktop/src/make_dummy_pointer.c b/recordmydesktop/src/make_dummy_pointer.c
index 00a346e..9e0ad3a 100644
--- a/recordmydesktop/src/make_dummy_pointer.c
+++ b/recordmydesktop/src/make_dummy_pointer.c
@@ -1,33 +1,36 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
-
+/******************************************************************************
+* 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>
-unsigned char *MakeDummyPointer(DisplaySpecs *specs,int size,int color,int type,unsigned char *npxl){
+unsigned char *MakeDummyPointer(DisplaySpecs *specs,
+ int size,
+ int color,
+ int type,
+ unsigned char *npxl){
int i,k,o='.';
unsigned long b=(color)?'w':'b',
w=(color)?'b':'w';
@@ -65,12 +68,20 @@ unsigned char *MakeDummyPointer(DisplaySpecs *specs,int size,int color,int type,
*npxl=((wp[0]-1)!=bp[0])?wp[0]-100:wp[0]-102;
for(i=0;i<size;i++){
for(k=0;k<size;k++){
- ret[(i*size+k)*4+__ABYTE]=(pmask[type][i][k]=='w')?wp[0]:(pmask[type][i][k]=='b')?bp[0]:*npxl;
- ret[(i*size+k)*4+__RBYTE]=(pmask[type][i][k]=='w')?wp[1]:(pmask[type][i][k]=='b')?bp[1]:*npxl;
- ret[(i*size+k)*4+__GBYTE]=(pmask[type][i][k]=='w')?wp[2]:(pmask[type][i][k]=='b')?bp[2]:*npxl;
- ret[(i*size+k)*4+__BBYTE]=(pmask[type][i][k]=='w')?wp[3]:(pmask[type][i][k]=='b')?bp[3]:*npxl;
+ ret[(i*size+k)*4+__ABYTE]=(pmask[type][i][k]=='w')?
+ wp[0]:(pmask[type][i][k]=='b')?
+ bp[0]:*npxl;
+ ret[(i*size+k)*4+__RBYTE]=(pmask[type][i][k]=='w')?
+ wp[1]:(pmask[type][i][k]=='b')?
+ bp[1]:*npxl;
+ ret[(i*size+k)*4+__GBYTE]=(pmask[type][i][k]=='w')?
+ wp[2]:(pmask[type][i][k]=='b')?
+ bp[2]:*npxl;
+ ret[(i*size+k)*4+__BBYTE]=(pmask[type][i][k]=='w')?
+ wp[3]:(pmask[type][i][k]=='b')?
+ bp[3]:*npxl;
}
}
-
+
return ret;
}
diff --git a/recordmydesktop/src/opendev.c b/recordmydesktop/src/opendev.c
index 6e13933..5fc24f7 100644
--- a/recordmydesktop/src/opendev.c
+++ b/recordmydesktop/src/opendev.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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 *
+******************************************************************************/
@@ -45,7 +45,7 @@ snd_pcm_t *OpenDev( const char *pcm_dev,
snd_pcm_hw_params_alloca(&hwparams);
- if (snd_pcm_open(&mhandle, pcm_dev, SND_PCM_STREAM_CAPTURE, SND_PCM_ASYNC)<0){
+ if (snd_pcm_open(&mhandle,pcm_dev,SND_PCM_STREAM_CAPTURE,SND_PCM_ASYNC)<0){
fprintf(stderr, "Couldn't open PCM device %s\n", pcm_dev);
return NULL;
}
@@ -55,11 +55,15 @@ snd_pcm_t *OpenDev( const char *pcm_dev,
fprintf(stderr, "Couldn't configure PCM device.\n");
return NULL;
}
- if (snd_pcm_hw_params_set_access(mhandle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)<0) {
+ if (snd_pcm_hw_params_set_access(mhandle,
+ hwparams,
+ SND_PCM_ACCESS_RW_INTERLEAVED)<0){
fprintf(stderr, "Couldn't set access.\n");
return NULL;
}
- if (snd_pcm_hw_params_set_format(mhandle, hwparams, SND_PCM_FORMAT_S16_LE)<0){
+ if (snd_pcm_hw_params_set_format(mhandle,
+ hwparams,
+ SND_PCM_FORMAT_S16_LE)<0){
fprintf(stderr, "Couldn't set format.\n");
return NULL;
}
@@ -68,7 +72,8 @@ snd_pcm_t *OpenDev( const char *pcm_dev,
return NULL;
}
if (*frequency != exactrate){
- fprintf(stderr, "Playback frequency %dHz is not available...\nUsing %dHz instead.\n",*frequency,exactrate);
+ fprintf(stderr, "Playback frequency %dHz is not available...\n"
+ "Using %dHz instead.\n",*frequency,exactrate);
*frequency=exactrate;
}
if (snd_pcm_hw_params_set_channels_near(mhandle, hwparams, channels)<0){
@@ -79,16 +84,16 @@ snd_pcm_t *OpenDev( const char *pcm_dev,
fprintf(stderr,"Channels number should be 1(mono) or 2(stereo).\n");
return NULL;
}
- if (snd_pcm_hw_params_set_periods_near(mhandle, hwparams, &periods,0)<0) {
+ if (snd_pcm_hw_params_set_periods_near(mhandle,hwparams,&periods,0)<0){
fprintf(stderr, "Couldn't set periods.\n");
return NULL;
}
- if (snd_pcm_hw_params_set_buffer_size_near(mhandle, hwparams,buffsize)<0){
+ if (snd_pcm_hw_params_set_buffer_size_near(mhandle,hwparams,buffsize)<0){
fprintf(stderr, "Couldn't set buffer size.\n");
return NULL;
}
- if (snd_pcm_hw_params(mhandle, hwparams)<0){
+ if (snd_pcm_hw_params(mhandle,hwparams)<0){
fprintf(stderr, "Couldn't set hardware parameters.\n");
return NULL;
}
@@ -101,7 +106,8 @@ snd_pcm_t *OpenDev( const char *pcm_dev,
if(periodtime!=NULL)
snd_pcm_hw_params_get_period_time(hwparams,periodtime,0);
- fprintf(stderr,"Recording on device %s is set to:\n%d channels at %dHz\n",pcm_dev,*channels,*frequency);
+ fprintf(stderr,"Recording on device %s is set to:\n%d channels at %dHz\n",
+ pcm_dev,*channels,*frequency);
fprintf(stderr,"Buffer size set to %d frames.\n",(int)(*buffsize));
snd_pcm_prepare(mhandle);
diff --git a/recordmydesktop/src/parseargs.c b/recordmydesktop/src/parseargs.c
index 7340110..36dbbea 100644
--- a/recordmydesktop/src/parseargs.c
+++ b/recordmydesktop/src/parseargs.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -31,12 +31,18 @@
int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
int i;
char *usage="\nUsage:\n"
- "\trecordmydesktop [-h| --help| --version| -delay n[H|h|M|m]| -windowid id_of_window|\n"
- "\t-display DISPLAY| -x X| -y Y|-width N| -height N| -fps N(number>0)| --on-the-fly-encoding|\n"
- "\t -v_quality n| -s_quality n| -v_bitrate n| --no-framedrop| -dummy-cursor color|\n"
- "\t --no-cursor| -freq N(number>0)| -channels N(number>0)|-buffer-size N(number>0)| -device SOUND_DEVICE|\n"
- "\t --no-sound| --with-shared| --no-cond-shared| -shared-threshold n| --full-shots|\n"
- "\t --quick-subsampling| -workdir DIR| --zero-compression| --no-wm-check| --overwite| -o filename]^filename\n\n\n"
+ "\trecordmydesktop [-h| --help| --version|"
+ " -delay n[H|h|M|m]| -windowid id_of_window|\n"
+ "\t-display DISPLAY| -x X| -y Y|-width N| -height N|"
+ " -fps N(number>0)| --on-the-fly-encoding|\n"
+ "\t -v_quality n| -s_quality n| -v_bitrate n| --no-framedrop|"
+ " -dummy-cursor color|\n"
+ "\t --no-cursor| -freq N(number>0)| -channels N(number>0)|"
+ " -buffer-size N(number>0)| -device SOUND_DEVICE|\n"
+ "\t --no-sound| --with-shared| --no-cond-shared| -shared-threshold n|"
+ " --full-shots|\n"
+ "\t --quick-subsampling| -workdir DIR| --zero-compression| --no-wm-check|"
+ " --overwite| -o filename]^filename\n\n\n"
"General Options:\n"
"\t-h or --help\t\tPrint this help and exit.\n"
@@ -52,36 +58,61 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
"\t-dummy-cursor color\tColor of the dummy cursor [black|white]\n"
"\t--no-cursor\t\tDisable drawing of the cursor.\n"
- "\t--with-shared\t\tEnable usage of MIT-shared memory extension at all times.\n"
- "\t--no-cond-shared\tDo not use the MIT-shared memory extension when aquiring large areas.\n"
- "\t-shared-threshold n\tThreshold over which shared memory is used(default 75).\n"
+ "\t--with-shared\t\tEnable usage of"
+ " MIT-shared memory extension at all times.\n"
+
+ "\t--no-cond-shared\tDo not use"
+ " the MIT-shared memory extension when aquiring large areas.\n"
+
+ "\t-shared-threshold n\tThreshold over"
+ " which shared memory is used(default 75).\n"
+
"\t--full-shots\t\tTake full screenshot at every frame(Not recomended!).\n"
- "\t--quick-subsampling\tDo subsampling of the chroma planes by discarding,not averaging.\n"
+ "\t--quick-subsampling\tDo subsampling"
+ " of the chroma planes by discarding,not averaging.\n"
+
"\t-fps N(number>0.0)\tA positive number denoting desired framerate.\n\n"
"Sound Options:\n"
- "\t-channels N\t\tA positive number denoting desired sound channels in recording.\n"
+ "\t-channels N\t\tA positive number denoting"
+ " desired sound channels in recording.\n"
+
"\t-freq N\t\t\tA positive number denoting desired sound frequency.\n"
- "\t-buffer-size N\t\tA positive number denoting the desired sound buffer size(in frames)\n"
+ "\t-buffer-size N\t\tA positive number denoting the desired"
+ " sound buffer size(in frames)\n"
+
"\t-device SOUND_DEVICE\tSound device(default hw0:0).\n"
"\t--no-sound\t\tDo not record sound.\n\n"
"Encoding Options\n"
"\t--on-the-fly-encoding\tEncode the audio-video data, while recording.\n"
- "\t-v_quality n\t\tA number from 0 to 63 for desired encoded video quality(default 63).\n"
- "\t-v_bitrate n\t\tA number from 45000 to 2000000 for desired encoded video bitrate(default 45000).\n"
+ "\t-v_quality n\t\tA number from 0 to 63 for"
+ " desired encoded video quality(default 63).\n"
+
+ "\t-v_bitrate n\t\tA number from 45000 to 2000000"
+ " for desired encoded video bitrate(default 45000).\n"
+
"\t--drop-frames\t\tAllow theora encoder to drop frames.\n"
"\t-s_quality n\t\tDesired audio quality(-1 to 10).\n\n"
"Misc Options:\n"
- "\t--no-wm-check\t\tDo not try to detect the window manager(and set options according to it)\n"
+ "\t--no-wm-check\t\tDo not try to detect"
+ " the window manager(and set options according to it)\n"
+
"\t--zero-compression\tImage data are always cached uncompressed.\n"
- "\t-workdir DIR\t\tLocation where a temporary directory will be created to hold project files(default $HOME).\n"
- "\t-delay n[H|h|M|m]\tNumber of secs(default),minutes or hours before capture starts(number can be float)\n"
- "\t--overwrite\t\tIf there is already a file with the same name, delete it\n"
+ "\t-workdir DIR\t\tLocation where a temporary directory"
+ " will be created to hold project files(default $HOME).\n"
+
+ "\t-delay n[H|h|M|m]\tNumber of secs(default),minutes or hours"
+ " before capture starts(number can be float)\n"
+
+ "\t--overwrite\t\tIf there is already a file with the same name,"
+ " delete it\n"
+
"\t\t\t\t(default is to add a number postfix to the new one).\n"
"\t-o filename\t\tName of recorded video(default out.ogg).\n"
- "\n\tIf no other options are specified, filename can be given without the -o switch.\n\n\n";
+ "\n\tIf no other options are specified, filename can be given "
+ "without the -o switch.\n\n\n";
if(argc==2){
if(argv[1][0]!='-'){
@@ -110,12 +141,14 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
arg_return->delay=(int)num;
}
else{
- fprintf(stderr,"Argument Usage: -delay n[H|h|M|m]\nwhere n is a float number\n");
+ fprintf(stderr,"Argument Usage: -delay n[H|h|M|m]\n"
+ "where n is a float number\n");
return 1;
}
}
else{
- fprintf(stderr,"Argument Usage: -delay n[H|h|M|m]\nwhere n is a float number\n");
+ fprintf(stderr,"Argument Usage: -delay n[H|h|M|m]\n"
+ "where n is a float number\n");
return 1;
}
i++;
@@ -126,12 +159,14 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
if(num>0)
arg_return->windowid=num;
else{
- fprintf(stderr,"Argument Usage: -windowid id_of_window(number)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -windowid id_of_window(number)\n");
return 1;
}
}
else{
- fprintf(stderr,"Argument Usage: -windowid id_of_window(number)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -windowid id_of_window(number)\n");
return 1;
}
i++;
@@ -247,12 +282,14 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
if((num>=0)&&(num<64))
arg_return->v_quality=num;
else{
- fprintf(stderr,"Argument Usage: -v_quality n(number 0-63)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -v_quality n(number 0-63)\n");
return 1;
}
}
else{
- fprintf(stderr,"Argument Usage: -v_quality n(number 0-63)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -v_quality n(number 0-63)\n");
return 1;
}
i++;
@@ -263,12 +300,14 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
if((num>=45000)&&(num<=2000000))
arg_return->v_bitrate=num;
else{
- fprintf(stderr,"Argument Usage: -v_bitrate n(number 45000-2000000)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -v_bitrate n(number 45000-2000000)\n");
return 1;
}
}
else{
- fprintf(stderr,"Argument Usage: -v_bitrate n(number 45000-2000000)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -v_bitrate n(number 45000-2000000)\n");
return 1;
}
i++;
@@ -280,14 +319,16 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
else if(!strcmp(argv[i+1],"black"))
arg_return->cursor_color=1;
else{
- fprintf(stderr,"Argument Usage: -dummy-cursor [black|white]\n");
+ fprintf(stderr,"Argument Usage:"
+ " -dummy-cursor [black|white]\n");
return 1;
}
arg_return->have_dummy_cursor=1;
arg_return->xfixes_cursor=0;
}
else{
- fprintf(stderr,"Argument Usage: -dummy-cursor [black|white]\n");
+ fprintf(stderr,"Argument Usage:"
+ " -dummy-cursor [black|white]\n");
return 1;
}
i++;
@@ -332,12 +373,14 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
if((num>=-1)&&(num<=10))
arg_return->s_quality=num;
else{
- fprintf(stderr,"Argument Usage: -s_quality n(number -1 to 10)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -s_quality n(number -1 to 10)\n");
return 1;
}
}
else{
- fprintf(stderr,"Argument Usage: -s_quality n(number -1 to 10)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -s_quality n(number -1 to 10)\n");
return 1;
}
i++;
@@ -348,12 +391,14 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
if((num>0)&&(num<100))
arg_return->shared_thres=num;
else{
- fprintf(stderr,"Argument Usage: -shared-threshold N(0<number<100)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -shared-threshold N(0<number<100)\n");
return 1;
}
}
else{
- fprintf(stderr,"Argument Usage: -shared-threshold N(0<number<100)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -shared-threshold N(0<number<100)\n");
return 1;
}
i++;
@@ -388,7 +433,8 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
if(num>0)
arg_return->buffsize=num;
else{
- fprintf(stderr,"Argument Usage: -buffer-size N(number>0)\n");
+ fprintf(stderr,"Argument Usage:"
+ " -buffer-size N(number>0)\n");
return 1;
}
}
@@ -434,7 +480,8 @@ int ParseArgs(int argc,char **argv,ProgArgs *arg_return){
return 1;
}
else{
- fprintf(stderr,"\n\tError parsing arguments.\n\tType --help or -h for usage.\n\n");
+ fprintf(stderr,"\n\tError parsing arguments.\n\t"
+ "Type --help or -h for usage.\n\n");
return 1;
}
}
diff --git a/recordmydesktop/src/poll_damage.c b/recordmydesktop/src/poll_damage.c
index a5b384d..4763fa0 100644
--- a/recordmydesktop/src/poll_damage.c
+++ b/recordmydesktop/src/poll_damage.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -65,25 +65,29 @@ void *PollDamage(ProgData *pdata){
for (i = 0; i < nchildren; i++){
XWindowAttributes attribs;
if (XGetWindowAttributes (pdata->dpy,children[i],&attribs)){
- if (!attribs.override_redirect && attribs.depth==pdata->specs.depth)
- XDamageCreate (pdata->dpy, children[i],XDamageReportRawRectangles);
+ if(!attribs.override_redirect && attribs.depth==pdata->specs.depth)
+ XDamageCreate(pdata->dpy,
+ children[i],
+ XDamageReportRawRectangles);
}
}
XFree(children);
- XDamageCreate( pdata->dpy, pdata->brwin.windowid, XDamageReportRawRectangles);
+ XDamageCreate(pdata->dpy,pdata->brwin.windowid,XDamageReportRawRectangles);
while(pdata->running){
- //damage polling doesn't stop,eventually full image may be needed
- //30/10/2006 : when and why did I write the above line? what did I mean?
XNextEvent(pdata->dpy,&event);
if (event.type == MapNotify ){
XWindowAttributes attribs;
- if (!((XMapEvent *)(&event))->override_redirect && XGetWindowAttributes (pdata->dpy,
- event.xcreatewindow.window,
- &attribs)){
- if (!attribs.override_redirect && attribs.depth==pdata->specs.depth)
- XDamageCreate (pdata->dpy,event.xcreatewindow.window,XDamageReportRawRectangles);
+ if (!((XMapEvent *)(&event))->override_redirect&&
+ XGetWindowAttributes(pdata->dpy,
+ event.xcreatewindow.window,
+ &attribs)){
+ if(!attribs.override_redirect&&
+ attribs.depth==pdata->specs.depth)
+ XDamageCreate(pdata->dpy,
+ event.xcreatewindow.window,
+ XDamageReportRawRectangles);
}
}
else if(event.type == pdata->damage_event + XDamageNotify ){
diff --git a/recordmydesktop/src/queryextensions.c b/recordmydesktop/src/queryextensions.c
index 0b311b9..3c28a2a 100644
--- a/recordmydesktop/src/queryextensions.c
+++ b/recordmydesktop/src/queryextensions.c
@@ -1,33 +1,36 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
-void QueryExtensions(Display *dpy,ProgArgs *args,int *damage_event,int *damage_error){
+void QueryExtensions(Display *dpy,
+ ProgArgs *args,
+ int *damage_event,
+ int *damage_error){
int xf_event_basep,
xf_error_basep;
@@ -37,12 +40,18 @@ void QueryExtensions(Display *dpy,ProgArgs *args,int *damage_event,int *damage_e
}
if((!args->noshared)&&(XShmQueryExtension(dpy)==False)){
args->noshared=1;
- fprintf(stderr,"Shared Memory extension not present!\nTry again removing the --with-shared option(if you used it)\nand add the --no-cond-shared option.\n");
+ fprintf(stderr,"Shared Memory extension not present!\n"
+ "Try again removing the --with-shared option"
+ "(if you used it)\nand add the"
+ " --no-cond-shared option.\n");
exit(5);
}
- if((args->xfixes_cursor)&&(XFixesQueryExtension(dpy,&xf_event_basep,&xf_error_basep)==False)){
+ if((args->xfixes_cursor)&&
+ (XFixesQueryExtension(dpy,&xf_event_basep,&xf_error_basep)==False)){
args->xfixes_cursor=0;
- fprintf(stderr,"Xfixes extension not present!\nPlease run with the -dummy-cursor or --no-cursor option.\n");
+ fprintf(stderr,"Xfixes extension not present!\n"
+ "Please run with the -dummy-cursor or"
+ " --no-cursor option.\n");
exit(6);
}
}
diff --git a/recordmydesktop/src/recordmydesktop.c b/recordmydesktop/src/recordmydesktop.c
index 7f41e6e..c832a3e 100644
--- a/recordmydesktop/src/recordmydesktop.c
+++ b/recordmydesktop/src/recordmydesktop.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -54,33 +54,45 @@ int main(int argc,char **argv){
CacheData cache_data;
QUERY_DISPLAY_SPECS(pdata.dpy,&pdata.specs);
- if((pdata.specs.depth!=32)&&(pdata.specs.depth!=24)&&(pdata.specs.depth!=16)){
- fprintf(stderr,"Only 32bpp,24bpp and 16bpp color depth modes are currently supported.\n");
+ if((pdata.specs.depth!=32)&&
+ (pdata.specs.depth!=24)&&
+ (pdata.specs.depth!=16)){
+ fprintf(stderr,"Only 32bpp,24bpp and 16bpp"
+ " color depth modes are currently supported.\n");
exit(10);
}
if(SetBRWindow(pdata.dpy,&pdata.brwin,&pdata.specs,&pdata.args))
exit(11);
- //check if we are under compiz or beryl,in which case we must enable full-shots
+ //check if we are under compiz or beryl,
+ //in which case we must enable full-shots
//and with it use of shared memory.User can override this
- pdata.window_manager=((pdata.args.nowmcheck)?NULL:rmdWMCheck(pdata.dpy,pdata.specs.root));
+ pdata.window_manager=((pdata.args.nowmcheck)?
+ NULL:rmdWMCheck(pdata.dpy,pdata.specs.root));
if(pdata.window_manager==NULL){
fprintf(stderr,"Not taking window manager into account.\n");
}
- //Right now only wm's that I know of performing 3d compositing are beryl and compiz.
+ //Right now only wm's that I know of performing
+ //3d compositing are beryl and compiz.
//No, the blue screen in metacity doesn't count :)
- //names can be compiz for compiz and beryl/beryl-co/beryl-core for beryl(so it's strncmp )
- else if(!strcmp(pdata.window_manager,"compiz") || !strncmp(pdata.window_manager,"beryl",5)){
+ //names can be compiz for compiz and beryl/beryl-co/beryl-core
+ //for beryl(so it's strncmp )
+ else if(!strcmp(pdata.window_manager,"compiz") ||
+ !strncmp(pdata.window_manager,"beryl",5)){
fprintf(stderr,"\nDetected 3d compositing window manager.\n"
"Reverting to full screen capture at every frame.\n"
"To disable this check run with --no-wm-check\n"
- "(though that is not advised, since it will probably produce faulty results).\n\n");
+ "(though that is not advised, since it will "
+ "probably produce faulty results).\n\n");
pdata.args.full_shots=1;
pdata.args.noshared=0;
pdata.args.nocondshared=1;
}
- QueryExtensions(pdata.dpy,&pdata.args,&pdata.damage_event, &pdata.damage_error);
+ QueryExtensions(pdata.dpy,
+ &pdata.args,
+ &pdata.damage_event,
+ &pdata.damage_error);
if((exit_status=InitializeData(&pdata,&enc_data,&cache_data))!=0)
@@ -104,7 +116,8 @@ int main(int argc,char **argv){
}
fprintf(stderr,"Cleanning up cache...\n");
if(PurgeCache(pdata.cache_data,!pdata.args.nosound))
- fprintf(stderr,"Some error occured while cleaning up cache!\n");
+ fprintf(stderr,"Some error occured "
+ "while cleaning up cache!\n");
fprintf(stderr,"Done!!!\n");
}
@@ -118,7 +131,8 @@ int main(int argc,char **argv){
return 1;
}
else{
- fprintf(stderr,"SIGABRT received,file %s removed\n",pdata.args.filename);
+ fprintf(stderr,"SIGABRT received,file %s removed\n",
+ pdata.args.filename);
return 0;
}
}
diff --git a/recordmydesktop/src/rectinsert.c b/recordmydesktop/src/rectinsert.c
index aefeb1e..fea6a1d 100644
--- a/recordmydesktop/src/rectinsert.c
+++ b/recordmydesktop/src/rectinsert.c
@@ -1,35 +1,40 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
-//return 1 and null if geom1 in geom2 ,2 and null if geom2 in geom1,0 if they don't collide
-//-1 and two geoms if they collide and geom1 is broken.//-2 and one or two geoms if they collide and geom2 is broken.
+//return 1 and null if geom1 in geom2 ,2 and null if geom2 in geom1,
+//0 if they don't collide
+//-1 and two geoms if they collide and geom1 is broken.
+//-2 and one or two geoms if they collide and geom2 is broken.
//-10 if group and replace is possible
-int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,int *ngeoms){
+int CollideRects(WGeometry *wgeom1,
+ WGeometry *wgeom2,
+ WGeometry **wgeom_return,
+ int *ngeoms){
//1 fits in 2
if((wgeom1->x>=wgeom2->x)&&
(wgeom1->x+wgeom1->width<=wgeom2->x+wgeom2->width)&&
@@ -59,9 +64,9 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
//this happens because libxdamage may generate many events for one change
//and some of them may be in the the exact same region
//so identical rects would be considered not colliding
-//in order though to avoid endless recursion on the RectInsert
+//in order though to avoid endless recursion on the RectInsert
//function should always start at the next element(which is logical since
-//if any rect makes it to a points none of it's part collides with previous
+//if any rect makes it to a points none of it's part collides with previous
//nodes on the list, too)
int x1[2]={wgeom1->x,wgeom1->x+wgeom1->width};
int y1[2]={wgeom1->y,wgeom1->y+wgeom1->height};
@@ -88,7 +93,8 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
tot2=enclosed[1][0]+enclosed[1][1]+enclosed[1][2]+enclosed[1][3];
if((tot1==2)&&(tot2==2)){//same width or height, which is the best case
//group
- if((enclosed[1][0]&&enclosed[1][1])&&(wgeom1->width==wgeom2->width)){
+ if((enclosed[1][0]&&enclosed[1][1])&&
+ (wgeom1->width==wgeom2->width)){
wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
*ngeoms=1;
wgeom_return[0]->x=wgeom1->x;
@@ -97,17 +103,17 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
wgeom_return[0]->height=wgeom2->height+wgeom2->y-wgeom1->y;
return -10;
}
- else if((enclosed[1][0]&&enclosed[1][2])&&(wgeom1->height==wgeom2->height)){
-// wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
+ else if((enclosed[1][0]&&enclosed[1][2])&&
+ (wgeom1->height==wgeom2->height)){
*ngeoms=1;
wgeom_return[0]->x=wgeom1->x;
wgeom_return[0]->y=wgeom1->y;
wgeom_return[0]->width=wgeom2->width+wgeom2->x-wgeom1->x;
- wgeom_return[0]->height=wgeom1->height;
+ wgeom_return[0]->height=wgeom1->height;
return -10;
}
- else if((enclosed[1][3]&&enclosed[1][1])&&(wgeom1->height==wgeom2->height)){
-// wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
+ else if((enclosed[1][3]&&enclosed[1][1])&&
+ (wgeom1->height==wgeom2->height)){
*ngeoms=1;
wgeom_return[0]->x=wgeom2->x;
wgeom_return[0]->y=wgeom2->y;
@@ -115,8 +121,8 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
wgeom_return[0]->height=wgeom2->height;
return -10;
}
- else if((enclosed[1][3]&&enclosed[1][2])&&(wgeom1->width==wgeom2->width)){
-// wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
+ else if((enclosed[1][3]&&enclosed[1][2])&&
+ (wgeom1->width==wgeom2->width)){
*ngeoms=1;
wgeom_return[0]->x=wgeom2->x;
wgeom_return[0]->y=wgeom2->y;
@@ -128,7 +134,6 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
}
if(tot2==2){
//break geom2
-// wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
wgeom_return[0]->x=wgeom2->x;
wgeom_return[0]->y=wgeom2->y;
wgeom_return[0]->width=wgeom2->width;
@@ -150,14 +155,12 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
}
else if(tot1==2){
//if the first one breaks(which is already inserted)
- //then we reenter the part that was left and the one
+ //then we reenter the part that was left and the one
//that was to be inserted
-// wgeom_return[1]=wgeom2;
wgeom_return[1]->x=wgeom2->x;
wgeom_return[1]->y=wgeom2->y;
wgeom_return[1]->width=wgeom2->width;
wgeom_return[1]->height=wgeom2->height;
-// wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
wgeom_return[0]->x=wgeom1->x;
wgeom_return[0]->y=wgeom1->y;
wgeom_return[0]->width=wgeom1->width;
@@ -178,10 +181,9 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
return -1;
}
- else if(tot2==1){//in which case there is also tot1==1 but we rather not break that
- //break geom2 in two
-// wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
-// wgeom_return[1]=(WGeometry *)malloc(sizeof(WGeometry));
+ else if(tot2==1){ //in which case there is also tot1==1
+ //but we rather not break that
+ //break geom2 in two
*ngeoms=2;
if(enclosed[1][0]){
//first
@@ -205,7 +207,7 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
wgeom_return[1]->x=x1[0];
wgeom_return[1]->y=y1[1];
wgeom_return[1]->width=x2[1]-x1[0];
- wgeom_return[1]->height=wgeom2->height-y1[1]+y2[0];
+ wgeom_return[1]->height=wgeom2->height-y1[1]+y2[0];
}
else if(enclosed[1][2]){
//first(same as [1][0])
@@ -241,8 +243,6 @@ int CollideRects(WGeometry *wgeom1,WGeometry *wgeom2,WGeometry **wgeom_return,in
//geom2 crossing vertically geom1
//and geom2 crossing horizontally geom1
//The proper one can be found by simply checking x,y positions
-// wgeom_return[0]=(WGeometry *)malloc(sizeof(WGeometry));
-// wgeom_return[1]=(WGeometry *)malloc(sizeof(WGeometry));
*ngeoms=2;
if(wgeom2->y<wgeom1->y){
//common
@@ -299,14 +299,17 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
int ngeoms=0,insert_ok=1,i=0;
temp=*root;
- while(insert_ok){//if something is broken list does not procceed(except on -1 collres case)
- int collres/*=0;//*/=CollideRects(&(temp->geom),wgeom,wgeom_return,&ngeoms);
+ while(insert_ok){ //if something is broken list does not procceed
+ //(except on -1 collres case)
+ int collres=CollideRects(&(temp->geom),wgeom,wgeom_return,&ngeoms);
if((!collres))
insert_ok=1;
else{
for(i=0;i<ngeoms;i++){
- wgeom_return[i]->width+=(wgeom_return[i]->width%2)|(wgeom_return[i]->x%2);
- wgeom_return[i]->height+=(wgeom_return[i]->height%2)|(wgeom_return[i]->y%2);
+ wgeom_return[i]->width+=(wgeom_return[i]->width%2)|
+ (wgeom_return[i]->x%2);
+ wgeom_return[i]->height+=(wgeom_return[i]->height%2)|
+ (wgeom_return[i]->y%2);
wgeom_return[i]->width+=(wgeom_return[i]->width%2);
wgeom_return[i]->height+=(wgeom_return[i]->height%2);
wgeom_return[i]->x-=wgeom_return[i]->x%2;
@@ -353,9 +356,11 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
case 2://done,area is already covered
free(newnode);
break;
- case -1://current node is broken and reinserted(in same pos)
+ case -1://current node is broken and reinserted
+ //(in same pos)
//newnode is also reinserted
- if((wgeom_return[0]->width>0)&&(wgeom_return[0]->height>0)){
+ if((wgeom_return[0]->width>0)&&
+ (wgeom_return[0]->height>0)){
temp->geom.x=wgeom_return[0]->x;
temp->geom.y=wgeom_return[0]->y;
temp->geom.width=wgeom_return[0]->width;
@@ -369,11 +374,9 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
insert_ok=1;
}
}
- else{//it might happen that the old and now broken node
- //is of zero width or height(so it isn't reinserted)
- /*TODO this may cause lines to be left not updated
- so maybe it is needed to increase the size by one
- pixel(zero width or height cause BadValue*/
+ else{//it might happen that the old and now broken node
+ //is of zero width or height
+ //(so it isn't reinserted)
if((temp->prev==NULL)&&(temp->next!=NULL)){
*root=(*root)->next;
(*root)->prev=NULL;
@@ -388,7 +391,8 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
total_insertions--;
temp->next->prev=temp->prev;
temp->prev->next=temp->next;
- total_insertions+=RectInsert(&temp->next,wgeom);
+ total_insertions+=RectInsert(&temp->next,
+ wgeom);
}
free(temp);
}
@@ -403,7 +407,9 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
temp->next=newnode;
newnode->prev=temp;
if(ngeoms>1){
- RectArea *newnode1=(RectArea *)malloc(sizeof(RectArea));
+ RectArea *newnode1=
+ (RectArea *)malloc(sizeof(RectArea));
+
newnode1->geom.x=wgeom_return[1]->x;
newnode1->geom.y=wgeom_return[1]->y;
newnode1->geom.width=wgeom_return[1]->width;
@@ -415,8 +421,10 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
}
else{
for(i=0;i<ngeoms;i++){
- if((wgeom_return[i]->width>0)&&(wgeom_return[i]->height>0))
- total_insertions+=RectInsert(&temp->next,wgeom_return[i]);
+ if((wgeom_return[i]->width>0)&&
+ (wgeom_return[i]->height>0))
+ total_insertions+=
+ RectInsert(&temp->next,wgeom_return[i]);
}
}
break;
@@ -426,7 +434,9 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
newnode->geom.x=wgeom_return[0]->x;
newnode->geom.y=wgeom_return[0]->y;
newnode->geom.width=wgeom_return[0]->width;
- newnode->geom.height=wgeom_return[0]->height;
+ newnode->geom.height=
+ wgeom_return[0]->height;
+
*root=newnode;
free(temp);
}
@@ -435,8 +445,10 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
*root=temp->next;
(*root)->prev=NULL;
free(temp);
- if((wgeom_return[0]->width>0)&&(wgeom_return[0]->height>0))
- total_insertions+=RectInsert(root,wgeom_return[0]);
+ if((wgeom_return[0]->width>0)&&
+ (wgeom_return[0]->height>0))
+ total_insertions+=
+ RectInsert(root,wgeom_return[0]);
}
}
else if(temp->next==NULL){//last, enter anyway
@@ -454,8 +466,10 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
temp->prev->next=temp->next;
temp->next->prev=temp->prev;
free(temp);
- if((wgeom_return[0]->width>0)&&(wgeom_return[0]->height>0))
- total_insertions+=RectInsert(&temp1,wgeom_return[0]);
+ if((wgeom_return[0]->width>0)&&
+ (wgeom_return[0]->height>0))
+ total_insertions+=
+ RectInsert(&temp1,wgeom_return[0]);
}
break;
}
@@ -480,8 +494,8 @@ int RectInsert(RectArea **root,WGeometry *wgeom){
free(wgeom_return[1]);
}
return total_insertions;
-}
-
+}
+
void ClearList(RectArea **root){
RectArea *temp;
@@ -490,7 +504,7 @@ void ClearList(RectArea **root){
while(temp->next!=NULL){
temp=temp->next;
free(temp->prev);
-
+
}
free(temp);
*root=NULL;
diff --git a/recordmydesktop/src/register_callbacks.c b/recordmydesktop/src/register_callbacks.c
index 730c47a..27244fe 100644
--- a/recordmydesktop/src/register_callbacks.c
+++ b/recordmydesktop/src/register_callbacks.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -32,9 +32,13 @@ void SetExpired(int signum){
if(capture_busy){
frames_lost++;
}
- pthread_cond_broadcast(time_cond);//sig handlers should not call this func
- //could be a set_expired and main thread
- //doing a while(running) if set_expired broadcast else usleep(n)
+ pthread_cond_broadcast(time_cond); //sig handlers should
+ //not call this func
+ //could be a set_expired
+ // and main thread
+ //doing a while(running)
+ //if set_expired broadcast
+ //else usleep(n)
}
}
@@ -42,11 +46,18 @@ void SetPaused(int signum){
if(!Paused)
Paused=1;
else{
-// pthread_cond_broadcast(pause_cond);//thsi should work, but it doesn't
- int i;//this is a bug
- Paused=0;//normally with the broadcast all the threads should restart, but sound capture thread
- for(i=0;i<15;i++)//remains dead. If a bunch of signals, restarts all threads, why can't a broadcast do the same?
- pthread_cond_signal(pause_cond);//if you have any idea please contact me.
+// pthread_cond_broadcast(pause_cond);//this should work,
+// but it doesn't
+ int i; //this is a bug
+ Paused=0; //normally with the broadcast
+ //all the threads should restart,
+ //but sound capture thread
+ for(i=0;i<15;i++) //remains dead. If a bunch of signals,
+ pthread_cond_signal(pause_cond);//restarts all threads,
+ //why can't a broadcast
+ //do the same?
+ //if you have any idea
+ //please contact me.
//(misses the signal?)
}
}
diff --git a/recordmydesktop/src/rmd_cache.c b/recordmydesktop/src/rmd_cache.c
index 2a49895..8a0894e 100644
--- a/recordmydesktop/src/rmd_cache.c
+++ b/recordmydesktop/src/rmd_cache.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -78,7 +78,8 @@ int PurgeCache(CacheData *cache_data_t,int sound){
while (stat(fname,&buff)==0){
if(remove(fname)){
- fprintf(stderr,"Couldn't remove temporary file %s",cache_data_t->imgdata);
+ fprintf(stderr,"Couldn't remove temporary file %s",
+ cache_data_t->imgdata);
exit_value=1;
}
CacheFileN(cache_data_t->imgdata,&fname,nth_cache);
@@ -87,18 +88,22 @@ int PurgeCache(CacheData *cache_data_t,int sound){
free(fname);
if(sound){
if(remove(cache_data_t->audiodata)){
- fprintf(stderr,"Couldn't remove temporary file %s",cache_data_t->audiodata);
+ fprintf(stderr,"Couldn't remove temporary file %s",
+ cache_data_t->audiodata);
exit_value=1;
}
}
if(remove(cache_data_t->projname)){
- fprintf(stderr,"Couldn't remove temporary directory %s",cache_data_t->projname);
+ fprintf(stderr,"Couldn't remove temporary directory %s",
+ cache_data_t->projname);
exit_value=1;
}
return exit_value;
}
-void InitCacheData(ProgData *pdata,EncData *enc_data_t,CacheData *cache_data_t){
+void InitCacheData(ProgData *pdata,
+ EncData *enc_data_t,
+ CacheData *cache_data_t){
int width,height,offset_x,offset_y,pid;
char pidbuf[8];
@@ -133,7 +138,8 @@ void InitCacheData(ProgData *pdata,EncData *enc_data_t,CacheData *cache_data_t){
I16TOA(pid,pidbuf)
//names are stored relatively to current dir(i.e. no chdir)
- cache_data_t->projname=malloc(strlen(cache_data_t->workdir)+12+strlen(pidbuf)+3);
+ cache_data_t->projname=malloc(strlen(cache_data_t->workdir)+
+ 12+strlen(pidbuf)+3);
//projname
strcpy(cache_data_t->projname,cache_data_t->workdir);
strcat(cache_data_t->projname,"/");
@@ -153,27 +159,31 @@ void InitCacheData(ProgData *pdata,EncData *enc_data_t,CacheData *cache_data_t){
//creating the needed files
if(mkdir(cache_data_t->projname,0777)){
- fprintf(stderr,"Could not create temporary directory %s !!!\n",cache_data_t->projname);
+ fprintf(stderr,"Could not create temporary directory %s !!!\n",
+ cache_data_t->projname);
exit(13);
}
if(!pdata->args.zerocompression){
cache_data_t->ifp=gzopen(cache_data_t->imgdata,"wb0f");
if(cache_data_t->ifp==NULL){
- fprintf(stderr,"Could not create temporary file %s !!!\n",cache_data_t->imgdata);
+ fprintf(stderr,"Could not create temporary file %s !!!\n",
+ cache_data_t->imgdata);
exit(13);
}
}
else{
cache_data_t->uncifp=fopen(cache_data_t->imgdata,"wb0f");
if(cache_data_t->uncifp==NULL){
- fprintf(stderr,"Could not create temporary file %s !!!\n",cache_data_t->imgdata);
+ fprintf(stderr,"Could not create temporary file %s !!!\n",
+ cache_data_t->imgdata);
exit(13);
}
}
if(!pdata->args.nosound){
cache_data_t->afp=fopen(cache_data_t->audiodata,"wb");
if(cache_data_t->afp==NULL){
- fprintf(stderr,"Could not create temporary file %s !!!\n",cache_data_t->audiodata);
+ fprintf(stderr,"Could not create temporary file %s !!!\n",
+ cache_data_t->audiodata);
exit(13);
}
}
diff --git a/recordmydesktop/src/rmdthreads.c b/recordmydesktop/src/rmdthreads.c
index 9a93416..442c67e 100644
--- a/recordmydesktop/src/rmdthreads.c
+++ b/recordmydesktop/src/rmdthreads.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -45,22 +45,46 @@ void rmdThreads(ProgData *pdata){
/*start threads*/
if(!pdata->args.full_shots)
- pthread_create(&poll_damage_t,NULL,(void *)PollDamage,(void *)pdata);
- pthread_create(&image_capture_t,NULL,(void *)GetFrame,(void *)pdata);
+ pthread_create(&poll_damage_t,
+ NULL,
+ (void *)PollDamage,
+ (void *)pdata);
+ pthread_create(&image_capture_t,
+ NULL,
+ (void *)GetFrame,
+ (void *)pdata);
if(pdata->args.encOnTheFly)
- pthread_create(&image_encode_t,NULL,(void *)EncodeImageBuffer,(void *)pdata);
+ pthread_create(&image_encode_t,
+ NULL,
+ (void *)EncodeImageBuffer,
+ (void *)pdata);
else
- pthread_create(&image_cache_t,NULL,(void *)CacheImageBuffer,(void *)pdata);
+ pthread_create(&image_cache_t,
+ NULL,
+ (void *)CacheImageBuffer,
+ (void *)pdata);
if(!pdata->args.nosound){
- pthread_create(&sound_capture_t,NULL,(void *)CaptureSound,(void *)pdata);
+ pthread_create(&sound_capture_t,
+ NULL,
+ (void *)CaptureSound,
+ (void *)pdata);
if(pdata->args.encOnTheFly)
- pthread_create(&sound_encode_t,NULL,(void *)EncodeSoundBuffer,(void *)pdata);
+ pthread_create(&sound_encode_t,
+ NULL,
+ (void *)EncodeSoundBuffer,
+ (void *)pdata);
else
- pthread_create(&sound_cache_t,NULL,(void *)CacheSoundBuffer,(void *)pdata);
+ pthread_create(&sound_cache_t,
+ NULL,
+ (void *)CacheSoundBuffer,
+ (void *)pdata);
}
if(pdata->args.encOnTheFly)
- pthread_create(&flush_to_ogg_t,NULL,(void *)FlushToOgg,(void *)pdata);
+ pthread_create(&flush_to_ogg_t,
+ NULL,
+ (void *)FlushToOgg,
+ (void *)pdata);
RegisterCallbacks(&pdata->args);
fprintf(stderr,"Capturing!\n");
diff --git a/recordmydesktop/src/setbrwindow.c b/recordmydesktop/src/setbrwindow.c
index 2b7b694..936e3fc 100644
--- a/recordmydesktop/src/setbrwindow.c
+++ b/recordmydesktop/src/setbrwindow.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -80,7 +80,8 @@ void SizePack2_8_16(int *start,int *size,int limit){
}
}
- //16 divisble width(needed for shared memory only,but applied anyway since theora wants it, too)
+ //16 divisble width(needed for shared memory only,
+ //but applied anyway since theora wants it, too)
//we already have divisibility by 8 so module
//by 16 is euther 8 or 0
hexoffset=((*size)%16);
@@ -106,7 +107,10 @@ void SizePack2_8_16(int *start,int *size,int limit){
-int SetBRWindow(Display *dpy,BRWindow *brwin,DisplaySpecs *specs,ProgArgs *args){
+int SetBRWindow(Display *dpy,
+ BRWindow *brwin,
+ DisplaySpecs *specs,
+ ProgArgs *args){
//before we start recording we have to make sure the ranges are valid
if(args->windowid==0){//root window
//first set it up
@@ -116,12 +120,16 @@ int SetBRWindow(Display *dpy,BRWindow *brwin,DisplaySpecs *specs,ProgArgs *args)
brwin->geom.height=specs->height;
brwin->rgeom.x=args->x;
brwin->rgeom.y=args->y;
- brwin->rgeom.width=((args->width)?args->width:specs->width-brwin->rgeom.x);
- brwin->rgeom.height=((args->height)?args->height:specs->height-brwin->rgeom.y);
+ brwin->rgeom.width=((args->width)?
+ args->width:specs->width-brwin->rgeom.x);
+ brwin->rgeom.height=((args->height)?
+ args->height:specs->height-brwin->rgeom.y);
//and then check validity
if((brwin->rgeom.x+brwin->rgeom.width>specs->width)||
(brwin->rgeom.y+brwin->rgeom.height>specs->height)){
- fprintf(stderr,"Window size specification out of bounds!(current resolution:%dx%d)\n",specs->width,specs->height);
+ fprintf(stderr,"Window size specification out of bounds!"
+ "(current resolution:%dx%d)\n",
+ specs->width,specs->height);
return 1;
}
}
@@ -135,7 +143,14 @@ int SetBRWindow(Display *dpy,BRWindow *brwin,DisplaySpecs *specs,ProgArgs *args)
fprintf(stderr,"Window must be mapped and visible!\n");
return 1;
}
- XTranslateCoordinates(dpy,specs->root,args->windowid,attribs.x,attribs.y,&transl_x,&transl_y,&wchid);
+ XTranslateCoordinates(dpy,
+ specs->root,
+ args->windowid,
+ attribs.x,
+ attribs.y,
+ &transl_x,
+ &transl_y,
+ &wchid);
brwin->windowid=specs->root;
brwin->geom.x=attribs.x-transl_x;
brwin->geom.y=attribs.y-transl_y;
@@ -149,8 +164,10 @@ int SetBRWindow(Display *dpy,BRWindow *brwin,DisplaySpecs *specs,ProgArgs *args)
brwin->rgeom.x=brwin->geom.x+args->x;
brwin->rgeom.y=brwin->geom.y+args->y;
- brwin->rgeom.width=((args->width)?args->width:brwin->geom.width-args->x);
- brwin->rgeom.height=((args->height)?args->height:brwin->geom.height-args->y);
+ brwin->rgeom.width=((args->width)?
+ args->width:brwin->geom.width-args->x);
+ brwin->rgeom.height=((args->height)?
+ args->height:brwin->geom.height-args->y);
if((args->x+brwin->rgeom.width>brwin->geom.width)||
(args->y+brwin->rgeom.height>brwin->geom.height)){
fprintf(stderr,"Specified Area is larger than window!\n");
@@ -158,20 +175,22 @@ int SetBRWindow(Display *dpy,BRWindow *brwin,DisplaySpecs *specs,ProgArgs *args)
}
}
fprintf(stderr, "Initial recording window is set to:\n"
- "X:%d Y:%d Width:%d Height:%d\n"
- ,brwin->rgeom.x,brwin->rgeom.y,brwin->rgeom.width,brwin->rgeom.height);
+ "X:%d Y:%d Width:%d Height:%d\n",
+ brwin->rgeom.x,brwin->rgeom.y,
+ brwin->rgeom.width,brwin->rgeom.height);
SizePack2_8_16(&brwin->rgeom.x,&brwin->rgeom.width,specs->width);
SizePack2_8_16(&brwin->rgeom.y,&brwin->rgeom.height,specs->height);
fprintf(stderr, "Adjusted recording window is set to:\n"
- "X:%d Y:%d Width:%d Height:%d\n"
- ,brwin->rgeom.x,brwin->rgeom.y,brwin->rgeom.width,brwin->rgeom.height);
+ "X:%d Y:%d Width:%d Height:%d\n",
+ brwin->rgeom.x,brwin->rgeom.y,
+ brwin->rgeom.width,brwin->rgeom.height);
- brwin->nbytes=(((brwin->rgeom.width+15)>>4)<<4)*(((brwin->rgeom.height+15)>>4)<<4)*
+ brwin->nbytes=(((brwin->rgeom.width+15)>>4)<<4)*
+ (((brwin->rgeom.height+15)>>4)<<4)*
((specs->depth==16)?2:4);
-
return 0;
}
diff --git a/recordmydesktop/src/update_image.c b/recordmydesktop/src/update_image.c
index 7ae39ff..9681ce7 100644
--- a/recordmydesktop/src/update_image.c
+++ b/recordmydesktop/src/update_image.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
diff --git a/recordmydesktop/src/wm_check.c b/recordmydesktop/src/wm_check.c
index ac25efb..4429cd3 100644
--- a/recordmydesktop/src/wm_check.c
+++ b/recordmydesktop/src/wm_check.c
@@ -1,28 +1,28 @@
-/*********************************************************************************
-* recordMyDesktop *
-**********************************************************************************
-* *
-* Copyright (C) 2006 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 *
-**********************************************************************************/
+/******************************************************************************
+* 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>
@@ -51,14 +51,17 @@ char *rmdWMCheck(Display *dpy,Window root){
&rt,&fmt,&nitems, &nbytes,
(unsigned char **)((void*)&wm_child))
!= Success ){
- fprintf(stderr,"Error while trying to get a window to identify the window manager.\n");
+ fprintf(stderr,"Error while trying to get a"
+ " window to identify the window manager.\n");
}
- if((wm_child == NULL) || (XGetWindowProperty( dpy,*wm_child,wm_name_atom,0,100,
- False,utf8_string,&rt,
- &fmt,&nitems, &nbytes,
- (unsigned char **)((void*)&wm_name_str))
- != Success )){
- fprintf(stderr,"Warning!!!\nYour window manager appears to be non-compliant!\n");
+ if((wm_child == NULL)||
+ (XGetWindowProperty(dpy,*wm_child,wm_name_atom,0,100,
+ False,utf8_string,&rt,
+ &fmt,&nitems, &nbytes,
+ (unsigned char **)((void*)&wm_name_str))
+ !=Success)){
+ fprintf(stderr,"Warning!!!\nYour window manager appears"
+ " to be non-compliant!\n");
}
}
fprintf(stderr,"Your window manager appears to be %s\n\n",
© All Rights Reserved