summaryrefslogtreecommitdiff
path: root/recordmydesktop/src/flush_to_ogg.c
diff options
context:
space:
mode:
authorbiocrasher <biocrasher@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2006-07-13 00:08:45 +0000
committerbiocrasher <biocrasher@f606c939-3180-4ac9-a4b8-4b8779d57d0a>2006-07-13 00:08:45 +0000
commitdad971c4a423e39a6cc6886585d25150e0d12c8f (patch)
tree2cce86963b3fb5de48768395f9a071bb52e3bba6 /recordmydesktop/src/flush_to_ogg.c
parentf635ae4bbdb7397764fbc4b1b1cfd6cde2d2ecce (diff)
This commit was generated by cvs2svn to compensate for changes in r3,
which included commits to RCS files with non-trunk default branches. git-svn-id: https://recordmydesktop.svn.sourceforge.net/svnroot/recordmydesktop/trunk@4 f606c939-3180-4ac9-a4b8-4b8779d57d0a
Diffstat (limited to 'recordmydesktop/src/flush_to_ogg.c')
-rw-r--r--recordmydesktop/src/flush_to_ogg.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/recordmydesktop/src/flush_to_ogg.c b/recordmydesktop/src/flush_to_ogg.c
new file mode 100644
index 0000000..c32302c
--- /dev/null
+++ b/recordmydesktop/src/flush_to_ogg.c
@@ -0,0 +1,64 @@
+#include <recordmydesktop.h>
+
+void *FlushToOgg(void *pdata){
+ int videoflag=0,audioflag=0;
+ double video_bytesout=0,audio_bytesout=0;
+ ogg_page videopage,audiopage;
+ int prev=0;
+ while(((ProgData *)pdata)->running){
+// if(Paused)pthread_cond_wait(&((ProgData *)pdata)->pause_cond,&((ProgData *)pdata)->pause_cond_mutex);
+// if(!prev){
+ videoflag=ogg_stream_pageout(&((ProgData *)pdata)->enc_data->m_ogg_ts,&videopage);
+ if(videoflag){
+ video_bytesout+=fwrite(videopage.header,1,videopage.header_len,((ProgData *)pdata)->enc_data->fp);
+ video_bytesout+=fwrite(videopage.body,1,videopage.body_len,((ProgData *)pdata)->enc_data->fp);
+ videoflag=0;
+// prev=(!((ProgData *)pdata)->args.nosound);
+
+
+// }
+ if(!((ProgData *)pdata)->args.nosound){
+
+ audioflag=ogg_stream_pageout(&((ProgData *)pdata)->enc_data->m_ogg_vs,&audiopage);
+
+ if(audioflag){
+ audio_bytesout+=fwrite(audiopage.header,1,audiopage.header_len,((ProgData *)pdata)->enc_data->fp);
+ audio_bytesout+=fwrite(audiopage.body,1,audiopage.body_len,((ProgData *)pdata)->enc_data->fp);
+ audioflag=0;
+ prev=0;
+ }
+ }
+// else
+// if(!did_one)
+// usleep(10000);
+ }
+ else /*if(((ProgData *)pdata)->args.nosound)*/
+ usleep(10000);
+
+ }
+ //last packages
+ videoflag=ogg_stream_flush(&((ProgData *)pdata)->enc_data->m_ogg_ts,&videopage);
+ if(videoflag){
+ video_bytesout+=fwrite(videopage.header,1,videopage.header_len,((ProgData *)pdata)->enc_data->fp);
+ video_bytesout+=fwrite(videopage.body,1,videopage.body_len,((ProgData *)pdata)->enc_data->fp);
+ videoflag=0;
+ }
+ if(!((ProgData *)pdata)->args.nosound)
+ audioflag=ogg_stream_flush(&((ProgData *)pdata)->enc_data->m_ogg_vs,&audiopage);
+ if(audioflag){
+ audio_bytesout+=fwrite(audiopage.header,1,audiopage.header_len,((ProgData *)pdata)->enc_data->fp);
+ audio_bytesout+=fwrite(audiopage.body,1,audiopage.body_len,((ProgData *)pdata)->enc_data->fp);
+ audioflag=0;
+ }
+
+ ogg_stream_clear(&((ProgData *)pdata)->enc_data->m_ogg_ts);
+ if(!((ProgData *)pdata)->args.nosound)
+ ogg_stream_clear(&((ProgData *)pdata)->enc_data->m_ogg_vs);
+//this always gives me a segfault :(
+// theora_clear(&((ProgData *)pdata)->enc_data->m_th_st);
+
+ if(((ProgData *)pdata)->enc_data->fp)fclose(((ProgData *)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);
+ pthread_exit(&errno);
+}
© All Rights Reserved