summaryrefslogtreecommitdiffstats
path: root/DOCS/ChangeLog.mpeg
blob: 265a57c16b38f5b1380afe7bf3b6c8f49f09d526 (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
231
232
ChangeLog:
~~~~~~~~~~
v0.2:  [first public release]
- parser: add support for VOB files (audio format still has problems...)
- libmpeg3: improvements in file-type detector, supporting mpegs with RIFF hdr
- libmpeg3: improvements on mpeg3_read_program() to handle damaged files better
- libmpeg3: new functions for separated PTS access: mpeg3_audio_pts() and
  mpeg3_video_pts(), they return timestamp in seconds, format: double
- play: new audio-video sync method, using timestamps from streams.
  much better, even on very damaged files!
- play: measuring of audio buffer size instead constant hard-wired value
- libmpeg3: more improvements to handle better strange files...
- play: drop timestamp correction if > 2 seconds (good for concatenated files)

v0.3:
- much better audio-video sync, using limited timestamp correction
- TVout directory added, with tools & scripts to setup TVout on Matrox cards
  (it is able to play mpegs fullscreen on TV without using X)

v0.5:
- integrating dvdview for video decoding
  (still using libmpeg3 for system stream parsing and audio decoding)
  -> not works... some variable randomly changes (uninitialized pointers
  in dvdview??? c++/c mixing problem?)

v0.6:
- new player from scratch, using my mp3lib for audio, parser.c for demuxing.
  integrated dvdview is still buggy...

v0.7:  [second edition]
- dvdview as separated process, using FIFOs for communication.
- some fixes in dvdview/system/sysdec1.cc, improved re-syncing on reset
- double-buffering support into dvdview's mga_vid class (and some
  changes in the mga_vid kernel module too!)
- EOF problem solved
- background playing option (using MGA Color-Keying and xsetroot)
- rebuild README, added Standard Disclaimer section

v0.71:
- better missing-stream detection (counting only the real packets)
- check for file and missing streams before fork()
- fixed ugly byteorder bug when reading header dword
- new system stream sync method (doesn't requires SYSTEM_HEADER_START_CODE)
- seeking (byte or second pos), works *only* with streams with immediate
  SYSTEM_HEADER frames.

v0.8:  [seeking works]
- implementing own video packet reader -> disabling the whole streaming part
  of dvdview.
- saving system headers, and re-sent after starting dvdview (seeking/resync)
  -> allow seeking in single-header mpeg files (contact2.mpg)
- advanced resync and seek_sec method, using video-packet type-checks
- fix read() problem, when not enough bytes available in fifo (see man 2 read)
- removed unused objects (postproc,options,streaming) from dvdview's Makefile
  (smaller executable, faster compile)
- sec. and bytepos seek fixed, works well now.
- simple console gui, using my getch2 (from mailer3 source) for keyboard.
  allows seek,pause,quit functions (for testing only)
  it's time to begin develop some nice GUI with skins, plugins etc :)
- improved runtime seeking, added force_redraw variable, and PTS audio
  correction after every seek.

v0.81:
- fps fixed (other than 25fps supported again)
- EOF handling fixed again
- nosound support (currently only system streams supported, not video-only)
  also see -nosound commandline option
- mga_vid: changed mmap() to allow double buffering in 704x528
- mga_vid: double buffering is optional from now (dvdview option -db )
* it successfully plays .VOB files (without sound)
- PTS/DTS support in mpeg-2 system streams (.vob files)
- PCM audio (48kHz stereo, unsigned, swapped byteorder) playing implemented
* it "plays" .VOB files with PCM sound, but it's too sloooooow :(((
- some optimization of dvdview's bitstream handler (see FillBits & GetBitsFast)

v0.82:  [VOB support]
- updated dvdview from current CVS version (1.2.0-pre) -> about 25% faster!!!
* it's now fast enough for VOB playback
- AC3 audio support (using Aaron Holtzman's libac3 from ac3dec package)
- new, simpler Makefile for libac3
- re-organized text files (README splitted to ChangeLog and AUTHORS)

v0.83:  [ALSA support]
- some timing code to fix audio syncing with ALSA drivers (test it! I can't)
  use -alsa cmdline option to enable this experimental code!
- cmdline option (-abs) for overriding audio buffer size (default: measured)
  why is it needed? some audio drivers has bad implementaion of select(),
  so measuring buffer size gives false result.
  if you hear sound before picture window appears, then you should use this!

v0.84:
- multiple DVD audio channels/streams support (use -aid option to select chn.)
- cmdline option for maximum PTS time correction (-mc <value>)
- PTS sync code moved to frame display loop -> more precise timing
  now it sync audio after every 5 decoded frames
- cmdline option for override frame rate (-fps <rate>)
  some .VOB files has bad frame rate value in headers (why? any ideas?)
- ac3 audio seeking works (some hack in libac3's parse.c)

v0.85:  [first non-experimental release]
- directory structure changed
- better documentation, added new INSTALL
- every Makefile uses OPTFLAGS environment variable, see INSTALL
- help (run mpg12play without any parameters or with -h/--help)
- fixed byte seeking (-sb)
- allow selecting mpeg audio channel, see -aid (streams 0x1C0-1DF)
- allow selecting video channel, see -vid   (0x1E0-1EF)
- allow audio format override, see -afm
- new streaming system (with 4k buffering)
- initial VCD (Video CD) support, use -vcd to select track, and give
  device name as filename (e.g.: mpg12play -vcd 2 /dev/cdrom)
  Problems with dual streaming, it's very slow! reads every sectors twice...
- VCD cache system... -> solved dual (A+V) streaming slowdown

v0.86:  [cleanup]
- last_frame_* thing removed + control fifo read() fixed -> better and
  linear (no seek-back) resync if dvdview dies
- better nosound timing (uses -alsa timer), seeking works
- resync_to_pts eliminated (using new max_pts_correction)
- cleanups, error checks, small fixes in the whole player.c
- removed some unused old code
- exit code moved to exit_player(), removed redundancy, fixed kill order

v0.87:
- i've found the reason of bad fps value with some vob files...
  the fps is correct, but the dvdview doesn't decode all the frames
  (reads repeat_first_field flag but don't rely on it)
- new demuxer code: read & demux input stream only at once, and uses two
  memory FIFO-s for packages. also new reader code, everyting named ds_*()
  The new demuxer can autodetect video and audio stream ids, if not
  specified with -aid / -vid option, and better implementation of -afm
- vcd cache is optional (and disabled by default), because unneccesary with 
  new demux/streaming code

v0.90pre:
- new codec added: mpeg2dec by Aaron Holtzman
  after doing some fixes (see at bottom), it's able to play mpeg1/mpeg2 video
- FIFO API changed: after frame_complete command (0x0) the codec must
  send the fps*10000 and the length*100 value. length is 1.00 for a simple
  frame, and >=1 for mpeg2 fields (eliminates the fps problem)
  Now, using mpeg2dec we are able to play .vob files with correct fps timing!
- better AC3 resync after seek (new func. in libac3: ac3_bitstream_reset())
  using ac3_decode_frame() instead ds_fill_buffer() when syncing PTS

v0.90pre2:
- mpeg2dec integrated into player binary
- using pipe() instead of named pipes
- using shared memory (mmap(...MAP_ANON...)) for packet transfer to codec
- stream_select() thing removed
- some optimization in demuxer code
- measuring codec CPU usage (relative to video time!!!, so it can be >100%
  on a slow system)  This value must be <=100% for continous video playback.

v0.90pre3:
- ugly bug fixed causing packet loss at codec restarting
  (i wrote control_fifo instead of control_fifo2 into codec controller)
- video init part moved to the player
- using shared memory for image buffers to avoid green flashes when
  codec restarted...
- new shared memory allocation code (the mmap() thing worked only with 
  kernel 2.4.x). thanx to LGB for the info and help...  see linux/shmem.[ch]
- config.h moved, Makefiles changed a bit (added libvo path, thanx to LGB)
  you may select CPU extensions (3Dnow/MMX/SSE) *only* at config.h
- meaningfull error messages if video stream cannot be synced
  (many user asked about "missing video stream" error...)

v0.90pre4:
- included new mpeg2dec source (with SSE idct code)

v0.90pre5:
- libvo: OpenGL video renderer code by me
- included new mpeg2dec and ac3dec from today CVS snapshot
- new docs: SPEED and MTRR
- seq. head processing and video init code moved into player.c, just
  before fork()'ing, so the child inherits all this info!
- removed all sequenceheader[] code, it's unneeded now
- source cleanup, removed some debug printf()'s, old comments
- EOF problem seems to be solved (maybe at the cleanup???)
- implemented bitrate (and free framerate) reading into mpeg2dec/header.c
- seeking skip times are better, based on bitrate


Changed in libac3 source:
~~~~~~~~~~~~~~~~~~~~~~~~~
- ac3.h replaced with the old version from v0.6.0
- decode.c modified to fit my interface
- stats.h: use stats_* functions only if DEBUG defined

Changed in libmpeg2 source:
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- header.c: implemented repeat_first_field thing (see picture.repeat_count)
- HACK_MODE set to 1 (default is 0, which works only with mpeg2 streams)
- decode.c: some changes added, active only if MPG12PLAY #defined
- header.c: implemented bitrate (and free framerate) reading

Changed in libvo source:
~~~~~~~~~~~~~~~~~~~~~~~~
- fixed bug in mga_vid vo module: used dest_width/height instead src_*
  (dst is important only for the card, we need (for memory, etc) the src size!)
- added OpenGL video renderer (based on x11 rendere and Pontscho's opengl code)

Changed in DVDview source:
~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cc:  replaced with my code
Makefile: removed unneccesary objects, added optimization flags
output/out_mgavid.cc & .hh:  added double-buffering and color-keying support
system/userpack.cc & .hh: new code, by me  (interface to my packet reader)
video12/vdecoder.hh: added GetSeqHeader() function (for accessing FPS value)
video12/vdecoder.cc: commented out calls to PrintDataBin() (debug info only)

TODO:
~~~~~
- multiple video packets (whole frame) transfer to codec - DONE
- B-frame skipping (DVD for slow systems)
- VCD support - DONE
- DVD Audio downsampling (for 44kHz cards)
- SEEKing in VOB files with AC3 sound (some hack needed in libac3) - DONE
- own AC3 frame reader -> better resync after seek - DONE
- player source is really ugly now... it's time to some cleanup - DONE?
- seek/resync without immediate SYSTEM_HEADER frames. - DONE
- end of file detecion !!! - DONE - NOT done (see matrix.vob!) - DONE
- other than 25fps movies - DONE
- test with mono sound - DONE (currently playing as stereo)
- nosound (no audio card or no audio stream) - DONE
- .vob support (non-crypted DVD/mpeg2 stream) - DONE
- AC3 and PCM audio support - DONE
- audio-only and video-only file support
- nice GUI (something new written in gtk or modify xmovie's gui)
- Xv support - DONE (libvo has it)
- easier compile, maybe new ./configure and makefiles - DONE?
- decss support (encrypted dvd)
- test speed with pgcc (does it worth?)