// liblame description
http://ca.geocities.com/dennis_L76/LAME_v3r70/LAME_v3r70.html

// libFAME code
http://lists.debian.org/debian-user-spanish/2005/01/msg00380.html

// libYUV
http://veejay.dyne.org/trac.cgi/browser/trunk/veejay-current/

// YUV conversion code
http://cvlab.epfl.ch/~jpilet/videosource/frame_8cc-source.html

// libFAME yuv format specification
http://www.linuxmanpages.com/man3/fame_start_frame.3.php

// YUV420 format specification
http://encyclopedia.laborlawtalk.com/YUV_4:2:0

// man HOWTOs
http://www.cs.hmc.edu/qref/writing_man_pages.html
http://www.schweikhardt.net/man_page_howto.html

open64 ?


==========================================================================
 TASKS (client)
==========================================================================

MessageBox:
 [x]	- Make it.
 [x]	- Make icons.
 [x]	- Test it.

SplashScreen:
 [ ]	- Make it.
 [ ]	- Make setProgress method, with text.
 [ ]	- Control it from mainwindow constructor.
	  1) Create / Show it in the beginning.
	  2) Call setProgress at key points in the code.
	  3) Hide / Destroy it at the end.

Mainwindow:
 [x]	- Clean out mgui code.
 [x]	- Make generic gui layout code.
 [x]	- Make icons.
 [x]	- Make statusbar.
 [x]	- Make flashing record bar.
 [ ]	- Show network connection status in statusbar.
 [ ]	- Show camera connection status in statusbar.
 [x]	- Save movie messagebox (yes/no/dunno)
 [x]	- Create snapshot thumbnails from dv stream instead of the widget.
 [x]	- Make sure the same frame is shown in thumbnail as the one actually 
	    shot on the server.
 [x]	- Show recordtime in client window.
 [x]	- Clear / update taskbar.
 [ ]	- Make new messagebox when asking to save movie.
	  (Save, Delete, Cancel, Save in one week)
 [x]	- Make "clear" button in mainwindow, to remove last patient, before 
	  the next enters.
 [x]	- Realscale all window components.
 [x]	- Realscale all icons (use highresolution icons and scale them down)
 [ ]	- Test it.

CPRQueryDialog:
 [x]	- Make it!
 [x]	- Clean out unnesessary code.
 [x]	- Make cancel posibility (return code 0 should do something useful)
 [x]	- Insert timer for network connection timeout.
 [x]	- Send connection status info to mainwindow.
 [x]	- Make icon (backspace)
 [ ]	- Test it.

Encoder:
 [x]	- Send savestate signal.
 [x]	- Make all data sent before deleting network object. (flush)
 [x]	- Remove ffmpeg code.
 [x]	- Make use of 2.6 kernel (through raw1394)
 [x]	- Crash bug, when network connection is broken, during transfer.

Decoder:
 [x]	- Enable sound decoding for the network stream.
 [x]	- Remove ffmpeg code.
 [x]	- Make use of 2.6 kernel (through raw1394)
 [x]	- Set flags on frame objects.
 [x]	- Skip every second frame to save cpu (configurable)

Camera:
 [x]	- Add initialize method (constructor should do nothing).
 [%]	- Add getStatus methods. (implemented through error object)

Player:
 [x]	- Remove ffmpeg code.
 [x]	- Use libdv for dv decoding

==========================================================================
 TASKS (server)
==========================================================================

ImgEncoder:
 [x]	- Make libjpeg calls work again.
 [x]	- Save jpeg files in special cpr hierake 'encrypted'!
 [ ]	- Clean up code!
 [ ]	- Make save method configurable in options file.

MovEncoder:
 [x]	- Test Mpeg4. (no good)
 [x]	- Remove ffmpeg code.
 [x]	- Enable sound.
 [x]	- Find good quality settings 
	  (Best quality less than 22mb/s realtime encoded)
 [x]	- Multithread encoding, for multi cpu support.
 [ ]	- libFame frames have no timecodes!!!
 [ ]	- Fix audio sync problem.
 [ ]	- Make audio quality configurable
 [x]	- Files turning too big (>2gb) must automatically close and 
	  continue in another file.

Main:
 [ ]	- Save movie signal handling.
 [x]	- Read server root folder from config.
 [x]	- Use correct filenames and paths.
 [x]	- Check for writabilty before trying to do any writing.
 [x]	- Create fallback, when unable to write the requested filename.
 [x]	- Permissions on server file writing. 
	  Files: u+wr g+r a+x - Directories: u+wrx g+rx a+rx. 
 [ ]	- Permissions on server file writing to be read from config.
 [x]	- Open med create unique

==========================================================================
 TASKS (common)
==========================================================================

Man pages:
 [x]	- Write man page for 'miav'
 [x]	- Write man page for 'miav.conf'

Makesystem:
 [x]	- "Port" to automake/autoconf
 [x]	- Make LibSDL detection in configure script
 [x]	- Make LibJpeg detection in configure script
 [%]	- Make ffmpeg detection in configure script (removed)
 [x]	- Make server standalone compilable (through flag to configure)
 [x]	- Include pixmaps and tools in distdir.
 [x]	- Make pixmaps correctly intalled.
 [x]	- Make QT link correctly on fedora core 1
 [x]	- Make libJpeg link correctly on fedora core 1
 [x]	- Make configuration files installed in $(prefix)/etc/miav

MiavConfig:
 [x]	- Integrate file parser.
 [x]	- Use error object.
 [x]	- Make code for input validity test.
 [x]	- Initialize one global configuration object.
 [x]	- BUG: Parse error when string occur with length 1
 [x]	- Test it.

ErrorObject:
 [x]	- Make it.
 [x]	- Maintain error string stack, instead of appending.
 [x]	- Make it thread safe.
 [x]	- Make pushError take any number parameters and parse them on to sprintf
 [x]	- Make it a superclass.
 [x]	- Create a textmode version subclass (for the server).
 [x]	- Create a QT version subclass (callback to mainwindow with messagebox).
 [x]	- Append to log, whenever error occur.

FFMpegWrapper:
 [%]	- Make it.(FFMPEG is on its way out of the project)


==========================================================================
 SAVE THE MOVIE?
==========================================================================
When the stop button is clicked, a msg box pops up, "Save? [yes, no, dunno]"
network connection is no killed before this has been answered, and an empty 
frame has been send to the server with the answer.

On the serverside, a variable describing wether the file is to be saved (SAVE), 
deleted (DELETE), og scheduled for later descision (LATER).

It is initialized with LATER, in order to prevent errors due to a malfunction
leading to a disconnection.

If a flag is recieved, the state is overwritten.

If the state is SAVE, when the connection is terminated, the file is moved to
a folder containing permanent data store.

If the state is DELETE, the file is moved to a folder containing files scheduled
for deletion, when more space is needed (no files are removed at this point)

If the state is LATER, the file is moved to a folder containing files with this
purpose.

A cron job examines this folder regularly (test how often).
If a file has been here for more than a week, the administrator is contacted by
email.