- aufnahme freie kriterien: schauspieler, genre, rating, verknüpft
- scheduler neuaufnahme höhere qualität
- Player
  - recording browser
  - xine
  - simple planning
- reschedule (regularly and when changed)
- cron (xmltv, channel scan)
- messaging, logging on player
- scanner: avoid initial tuning data, see w_scan countries.c and MythTV libs/libmythtv/frequencytables.cpp
- network, Store
- DVB EIT
- MPEG TS demux/split
  (for recording multiple channels from the same DVB transponder)
- Implement CA in Java
  (so that we know whether decoding worked - critical for reliability -
  and which channels can be decoded) 
- config
  - GUI for setting up the server, esp. stations, cards and stores
  - backend/native part to query info about DVB cards

- movie player
  - mplayer
    - OSD
    - HD
      - "mpegts" (libmpdemux/demux_ts.c)
        - demuxer immediately with a proper picture, but
        - HD: has a bug which makes it a CPU hog
        - CA: doesn't detect ES streams appearing later in the TS stream
      - lavf (libavformat/mpegts.c)
        - is fast and works with HD content for me, but
        - keeps crashing (which makes it impossible to use), at least in -mt branch
        - skip: doesn't decode the first 2 seconds correctly (as mpegts does),
          but shows a grey blocky picture.
          Probably just doesn't ignore data until an I frame (it should)
  - xine
    - HTTP Range
Improve
- storage allocator
  - find free size
  - etc.
- Scheduler
 - all cards in parallel
 - quality for stations
- EPG/Planner
 - UI size
 - rating "-10"
 - more recording options
- XMLTV Importer
 - SAX
- recording
 - consider DVB EIT PDC and RST, for late programmes

Later:
- devices
  - IP
  - Analog TV
  - ATSC
- commercial flagging

Design questions:
- Scheduler reuses classes from recorder. Similar with Recording in Core.

Scheduler algorithm:
- find all in recording WHERE done = FALSE. JOIN with recording_plan, JOIN with film, broadcast, station, channel, device. if any JOIN fails: error
- schedule first broadcast for each
- check overlaps. if # of overlaping recordings (for a certain time) > devices for that channel, mark for reschedule.
- try to reschedule lower pri first. outcomes: possible, impossible, possible but suboptimal (e.g. lower quality). if lower pri results in "suboptimal", but higher priv results in "possible", reschedule higher priv, i.e. value quality over priority.
- reschedule: find other times, for each, see whether that fits. if none fit, go through each again, this time mark the *other* recording as rescheduling and recurse. XXX loops?
