From a4807b4810c2e41d6d3b156aa433b4c75ca75c6f Mon Sep 17 00:00:00 2001 From: Martin Lucina Date: Sat, 30 Jan 2010 21:04:14 +0100 Subject: Add architecture description, make ESC quit the app --- zmq-camera.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/zmq-camera.c b/zmq-camera.c index 61c7edd..2192165 100644 --- a/zmq-camera.c +++ b/zmq-camera.c @@ -34,6 +34,41 @@ #include +/* + * Overall architecture: + * + * zmq-camera uses 3 application threads: + * + * 1) the main thread, which receives and displays video from either the + * sender thread using inproc://local-camera if running in sender mode (-s) + * or from a remote endpoint specified by the user if running in + * receive-only mode (-r). + * + * the main thread also receives and handles signals and timers, + * using inproc://local-signal and periodically polls for UI events. + * + * 2) the signal handling thread, which handles all signals synchronously + * using a sigwait() loop and sends a single message for each signal + * received to the main thread. + * + * 3) the sender thread which does the actual video capture and sends one + * message per raw video frame both to inproc://local-camera so that the + * user sees what they are sending and to the remote endpoint specified. + * + * Message formats: + * + * inproc://local-signal + * + * [ signo (int) ] + * + * Video data: + * + * [ width (uint32_t in network byte order), + * height (uint32_t in network byte order), + * (RGB24 pixel data) ] + * + */ + #define FOURCC(a,b,c,d) (unsigned int)((((unsigned int)d)<<24)+\ (((unsigned int)c)<<16)+(((unsigned int)b)<<8)+a) @@ -552,11 +587,15 @@ int main (int argc, char *argv []) { if (event.type == SDL_QUIT) quit = 1; + if (event.type == SDL_KEYDOWN) + if (event.key.keysym.sym == SDLK_ESCAPE) + quit = 1; } } /* TODO: Send a 'stop' message to sender thread rather than killing it - forcefully by terminating the main thread. */ + forcefully by terminating the main thread. This would allow it + to call zmq_close() correctly and us to call zmq_term() here. */ /* Cleanup */ SDL_Quit (); -- cgit v1.2.3