diff options
author | iovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a> | 2007-01-18 19:07:14 +0000 |
---|---|---|
committer | iovar <iovar@f606c939-3180-4ac9-a4b8-4b8779d57d0a> | 2007-01-18 19:07:14 +0000 |
commit | 27ef1920cf848e9add94c4106f8a76230efe787a (patch) | |
tree | 1d902efd7f209b2bd8f7143a614e5d3163e0b8dc /recordmydesktop/src/rmdthreads.c | |
parent | a91f146a8e25edc4edbe6fa49ac45b576e336f07 (diff) |
New files: initialize_data.c, rmdthreads.c.
Cleaned-up main, moved initialization tasks to InitializeData and all thread creation
in rmdThreads.
git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@258 f606c939-3180-4ac9-a4b8-4b8779d57d0a
Diffstat (limited to 'recordmydesktop/src/rmdthreads.c')
-rw-r--r-- | recordmydesktop/src/rmdthreads.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/recordmydesktop/src/rmdthreads.c b/recordmydesktop/src/rmdthreads.c new file mode 100644 index 0000000..9a93416 --- /dev/null +++ b/recordmydesktop/src/rmdthreads.c @@ -0,0 +1,111 @@ +/********************************************************************************* +* 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 * +**********************************************************************************/ + + +#include <recordmydesktop.h> + +void rmdThreads(ProgData *pdata){ + pthread_t poll_damage_t, + image_capture_t, + image_encode_t, + image_cache_t, + sound_capture_t, + sound_encode_t, + sound_cache_t, + flush_to_ogg_t; + + + if(pdata->args.delay>0){ + fprintf(stderr,"Will sleep for %d seconds now.\n",pdata->args.delay); + sleep(pdata->args.delay); + } + + /*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); + if(pdata->args.encOnTheFly) + pthread_create(&image_encode_t,NULL,(void *)EncodeImageBuffer,(void *)pdata); + else + pthread_create(&image_cache_t,NULL,(void *)CacheImageBuffer,(void *)pdata); + + if(!pdata->args.nosound){ + pthread_create(&sound_capture_t,NULL,(void *)CaptureSound,(void *)pdata); + if(pdata->args.encOnTheFly) + pthread_create(&sound_encode_t,NULL,(void *)EncodeSoundBuffer,(void *)pdata); + else + 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); + + RegisterCallbacks(&pdata->args); + fprintf(stderr,"Capturing!\n"); + + //wait all threads to finish + + pthread_join(image_capture_t,NULL); + fprintf(stderr,"Shutting down."); + //if no damage events have been received the thread will get stuck + while(!pdata->th_enc_thread_waiting && !pdata->th_encoding_clean){ + usleep(10000); + pthread_cond_signal(&pdata->image_buffer_ready); + } + + if(pdata->args.encOnTheFly){ + pthread_join(image_encode_t,NULL); + } + else + pthread_join(image_cache_t,NULL); + fprintf(stderr,"."); + if(!pdata->args.nosound){ + pthread_join(sound_capture_t,NULL); + fprintf(stderr,"."); + while(!pdata->v_enc_thread_waiting && !pdata->v_encoding_clean){ + usleep(10000); + pthread_cond_signal(&pdata->sound_data_read); + } + if(pdata->args.encOnTheFly){ + pthread_join(sound_encode_t,NULL); + } + else{ + pthread_join(sound_cache_t,NULL); + } + } + else + fprintf(stderr,".."); + + if(pdata->args.encOnTheFly) + pthread_join(flush_to_ogg_t,NULL); + fprintf(stderr,"."); + + if(!pdata->args.full_shots) + pthread_join(poll_damage_t,NULL); + + //Now that we are done with recording we cancel the timer + CancelTimer(); + +} |