summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--recordmydesktop/include/recordmydesktop.h2
-rw-r--r--recordmydesktop/include/rmdtypes.h8
-rw-r--r--recordmydesktop/src/initialize_data.c1
-rw-r--r--recordmydesktop/src/recordmydesktop.c5
-rw-r--r--recordmydesktop/src/register_callbacks.c14
-rw-r--r--recordmydesktop/src/register_callbacks.h2
-rw-r--r--recordmydesktop/src/rmd_jack.c9
-rw-r--r--recordmydesktop/src/rmd_rescue.c3
-rw-r--r--recordmydesktop/src/rmdthreads.c2
9 files changed, 33 insertions, 13 deletions
diff --git a/recordmydesktop/include/recordmydesktop.h b/recordmydesktop/include/recordmydesktop.h
index adbc233..1a5c3fa 100644
--- a/recordmydesktop/include/recordmydesktop.h
+++ b/recordmydesktop/include/recordmydesktop.h
@@ -50,7 +50,7 @@ u_int32_t *yblocks,
/**Globals*/
//I've read somewhere that I'll go to hell for using globals...
-int Paused,*Running,Aborted,PauseStateChanged;
+int Paused, Aborted, PauseStateChanged;
pthread_cond_t *time_cond,*pause_cond;
pthread_mutex_t pause_mutex,time_mutex;
unsigned char Yr[256],Yg[256],Yb[256],
diff --git a/recordmydesktop/include/rmdtypes.h b/recordmydesktop/include/rmdtypes.h
index 7fdb59b..5d31fda 100644
--- a/recordmydesktop/include/rmdtypes.h
+++ b/recordmydesktop/include/rmdtypes.h
@@ -103,6 +103,9 @@ typedef int boolean;
#define FALSE (0)
#define TRUE (!FALSE)
+// Forward declarations
+typedef struct _ProgData ProgData;
+
typedef struct _DisplaySpecs{ //this struct holds some basic information
int screen; //about the display,needed mostly for
unsigned int width; //validity checks at startup
@@ -243,6 +246,7 @@ typedef struct _SndBuffer{
#ifdef HAVE_JACK_H
typedef struct _JackData{
+ ProgData *pdata; //pointer to prog data
void *jack_lib_handle; //handle for jack library (loaded with dlopen).
jack_client_t *client;
unsigned int buffersize, //buffer size for every port in frames.
@@ -269,7 +273,7 @@ typedef struct _HotKey{ //Hold info about the shortcuts
//It's usage is mostly to be given as an argument to the
//threads,so they will have access to the program data, avoiding
//at the same time usage of any globals.
-typedef struct _ProgData{
+struct _ProgData {
/**recordMyDesktop specific structs*/
ProgArgs args; //the program arguments
DisplaySpecs specs; //Display specific information
@@ -345,7 +349,7 @@ typedef struct _ProgData{
int sound_handle;
u_int32_t periodsize;
#endif
-}ProgData;
+};
//This is the header of every frame.
diff --git a/recordmydesktop/src/initialize_data.c b/recordmydesktop/src/initialize_data.c
index 30a0ab8..df30292 100644
--- a/recordmydesktop/src/initialize_data.c
+++ b/recordmydesktop/src/initialize_data.c
@@ -112,7 +112,6 @@ int InitializeData(ProgData *pdata,
pdata->running=1;
time_cond=&pdata->time_cond;
pause_cond=&pdata->pause_cond;
- Running=&pdata->running;
PauseStateChanged=0;
if(!pdata->args.nosound){
diff --git a/recordmydesktop/src/recordmydesktop.c b/recordmydesktop/src/recordmydesktop.c
index 8c46ab7..e2b394e 100644
--- a/recordmydesktop/src/recordmydesktop.c
+++ b/recordmydesktop/src/recordmydesktop.c
@@ -58,7 +58,10 @@ int main(int argc,char **argv){
CacheData cache_data;
#ifdef HAVE_JACK_H
JackData jdata;
- pdata.jdata=&jdata;
+
+ // Give jack access to program data, mainly for program state
+ jdata.pdata = &pdata;
+ pdata.jdata = &jdata;
#endif
// Query display specs
diff --git a/recordmydesktop/src/register_callbacks.c b/recordmydesktop/src/register_callbacks.c
index 79ee3fe..c16f7b1 100644
--- a/recordmydesktop/src/register_callbacks.c
+++ b/recordmydesktop/src/register_callbacks.c
@@ -30,6 +30,11 @@
#include "register_callbacks.h"
+// There seem to be no way of passing user data to the signal handler,
+// so hack around not being able to pass ProgData to them
+static int *pdata_running = NULL;
+
+
static void SetPaused(int signum) {
PauseStateChanged = 1;
@@ -39,7 +44,9 @@ static void SetRunning(int signum) {
if (!Paused){
- *Running = 0;
+ if (pdata_running != NULL) {
+ *pdata_running = 0;
+ }
if (signum == SIGABRT) {
Aborted = 1;
@@ -47,11 +54,14 @@ static void SetRunning(int signum) {
}
}
-void RegisterCallbacks(ProgArgs *prog_data) {
+void RegisterCallbacks(ProgData *pata) {
struct sigaction pause_act;
struct sigaction end_act;
+ // Is there some way to pass pata to the signal handlers?
+ pdata_running = &pata->running;
+
// Setup pause_act
sigfillset(&pause_act.sa_mask);
pause_act.sa_flags = SA_RESTART;
diff --git a/recordmydesktop/src/register_callbacks.h b/recordmydesktop/src/register_callbacks.h
index a0a4522..1fb3b76 100644
--- a/recordmydesktop/src/register_callbacks.h
+++ b/recordmydesktop/src/register_callbacks.h
@@ -35,7 +35,7 @@
* Set up all callbacks and signal handlers
* \param pdata ProgData struct containing all program data
*/
-void RegisterCallbacks(ProgArgs *args);
+void RegisterCallbacks(ProgData *prog_data);
#endif
diff --git a/recordmydesktop/src/rmd_jack.c b/recordmydesktop/src/rmd_jack.c
index ed03a8a..1718c09 100644
--- a/recordmydesktop/src/rmd_jack.c
+++ b/recordmydesktop/src/rmd_jack.c
@@ -91,8 +91,10 @@ static int JackCapture(jack_nframes_t nframes,void *jdata_t) {
int i=0;
JackData *jdata=(JackData *)jdata_t;
- if((!*Running)||(Paused) || (!jdata->capture_started))
+ if (!jdata->pdata->running || Paused || !jdata->capture_started) {
return 0;
+ }
+
for(i= 0;i<jdata->nports;i++)
jdata->portbuf[i]=jack_port_get_buffer_p(jdata->ports[i],nframes);
//vorbis analysis buffer wants uninterleaved data
@@ -206,8 +208,11 @@ static int LoadJackLib(void *jack_lib_handle) {
//encode the result(if not on the fly)
//an exit cleanly.
static void JackShutdown(void *jdata_t) {
+ JackData *jdata = (JackData *)jdata_t;
+
+ jdata->pdata->running = 0;
+
fprintf (stderr, "JACK shutdown\n");
- *Running=0;
}
int StartJackClient(JackData *jdata){
diff --git a/recordmydesktop/src/rmd_rescue.c b/recordmydesktop/src/rmd_rescue.c
index 827a004..f49cd1b 100644
--- a/recordmydesktop/src/rmd_rescue.c
+++ b/recordmydesktop/src/rmd_rescue.c
@@ -111,9 +111,8 @@ int rmdRescue(const char *path){
Aborted=pdata.avd=0;
pdata.sound_buffer=NULL;
pdata.running=1;
- Running=&pdata.running;
- RegisterCallbacks(NULL);
+ RegisterCallbacks(&pdata);
fprintf(stderr,"Restoring %s!!!\n",path);
EncodeCache(&pdata);
diff --git a/recordmydesktop/src/rmdthreads.c b/recordmydesktop/src/rmdthreads.c
index bbdb166..705c383 100644
--- a/recordmydesktop/src/rmdthreads.c
+++ b/recordmydesktop/src/rmdthreads.c
@@ -92,7 +92,7 @@ void rmdThreads(ProgData *pdata){
(void *)FlushToOgg,
(void *)pdata);
- RegisterCallbacks(&pdata->args);
+ RegisterCallbacks(pdata);
pdata->timer_alive=1;
pthread_create(&timer_t,
NULL,
© All Rights Reserved