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 ) - 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 ) 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?)