// 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

- file permissions
- multithreded encoding
- fopen med create unique



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

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

SplashScreen:
 [ ]	- Make it.

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.
 [ ]	- Test it.
 [x]	- Show recordtime in client window.
 [ ]	- Clear / update taskbar.
 [ ]	- Make new messagebox when asking to save movie.
	  (Save, Delete, Cancel, Save in one week)

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)

Decoder:
 [ ]	- 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.

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.

MovEncoder:
 [x]	- Test Mpeg4. (no good)
 [x]	- Remove ffmpeg code.
 [ ]	- Enable sound.
 [x]	- Find good quality settings (Best quality less than 22mb/s realtime encoded)

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.
 [ ]	- Permissions on sesrver file writing to be read from config.

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

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

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.
 [ ]	- Make code for input validity test.
 [x]	- Initialize one global configuration object.

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
 [ ]	- Make it a superclass.
 [ ]	- Create a textmode version subclass (for the server).
 [ ]	- Create a QT version subclass (callback to mainwindow with messagebox).
 [ ]	- 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.

==========================================================================
 Semphores and mutexes in the client network architechture
==========================================================================
,-----------.
| DV stream |
`-----------'
      |
      V
,-----------.
| Decoder   |
`-----------'
      |      \
      V       \
,-----------.  \
| Player    |   \
`-----------'    \
                  \  ,-----------.
                   ->| Encoder   |
                     `-----------'