summaryrefslogtreecommitdiff
path: root/TODO
blob: 88a409910bee72e9fc4828858706a953ee707093 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
// Multicast code
http://cvs.icculus.org/cvs/smpeg2/plaympeg.c?rev=1.4

// Multicast info
http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ipmulti.htm#xtocid4

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

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

MessageBox:
 [x]	- Make it.
 [x]	- Make icons.
 [x]	- Test it.
 [ ]	- Make it scaleable (using the unit calculation from mainwindow)

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)
 [x]	- Add mute/unmute buttons to the interface.
 [x]	- Calculate the number of screenshot thumbnails in the history.
 [ ]	- Show the audio (muted/unmuted) status in the statusbar.
 [ ]	- Show recording status in the statusbar.
 [ ]	- Use QLinguist
 [ ]	- Test it.
 [ ]	- Reimplement freeze using a buffered image (so it does not disappear
	  when the window is redrawn)

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.
 [x]	- Send the mute/unmute signal to the server.

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)
 [x]	- Add dv file fallback, when firewire fails.

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
 [x]	- Create library functions for drawing in the decoded videoframes,
          for use with overlay.
 [x]	- Draw networkstatus, recordingtime, and record indication when
          fullscreen.
 [ ]	- Draw the sound status in the overlay (muted/unmuted).

AboutBox
 [x]	- Make it
 [ ]	- Make quit button (Somewhat hidden from the main program.)

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

ImgEncoder:
 [x]	- Make libjpeg calls work again.
 [x]	- Save jpeg files in special cpr hieracy '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.
 [x]	- libFame frames have no timecodes!!!
 [x]	- Fix audio sync problem.
 [x]	- Make audio quality configurable
 [x]	- Files turning too big (>2gb) must automatically close and 
	  continue in another file
 [x]	- Add ISO11172 multiplexing
 [ ]	- Double check the ISO11172 compliance.

AudioEncoder:
 [ ]	- 

Multiplexer:
 [ ]	- Timecodes are stirred!

Main:
 [x]	- 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'
 [ ]	- Update the man pages to represent the actual conf file.

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.