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
|
ABOUT LIBMPEG2
libmpeg2 is a free library for decoding mpeg-2 and mpeg-1 video
streams. It is released under the terms of the GPL license.
The main goals in libmpeg2 development are:
* Conformance - libmpeg2 is able to decode all mpeg streams that
conform to certain restrictions: "constrained parameters" for
mpeg-1, and "main profile" for mpeg-2. In practice, this is
what most people are using. For streams that follow these
restrictions, we believe libmpeg2 is 100% conformant to the
mpeg standards - and we have a pretty extensive test suite to
check this.
* Speed - there has been huge efforts there, and we believe
libmpeg2 is the fastest library around for what it
does. Please tell us if you find a faster one ! With typical
video streams as found on DVD's, and doing only decoding with
no display, you should be able to get about 110 fps on a
PIII/666, or 150 fps on an Athlon/950. This is less than 20
cycles per output pixel. In a real player program, the display
routines will probably take as much time as the actual
decoding !
* Portability - most of the code is written in C, and when we
use platform-specific optimizations (typically assembly
routines, currently used for the motion compensation and the
inverse cosine transform stages) we always have a generic C
routine to fall back on. This should be portable to all
architectures - at least we have heard reports from people
running this code on x86, ppc, sparc, arm and
sh4. Assembly-optimized implementations are available on x86
(MMX) and ppc (altivec) architectures. Ultrasparc (VIS) is
probably the next on the list - we'll see.
* Reuseability - we do not want libmpeg2 to include any
project-specific code, but it should still include enough
features to be used by very diverse projects. We are only
starting to get there - the best way to help here is to give
us some feedback !
The project homepage is at http://libmpeg2.sourceforge.net/
MPEG2DEC
mpeg2dec is a test program for libmpeg2. It decodes mpeg-1 and mpeg-2
video streams, and also includes a demultiplexer for mpeg-1 and mpeg-2
program streams. It is purposely kept simple : it does not include
features like reading files from a DVD, CSS, fullscreen output,
navigation, etc... The main purpose of mpeg2dec is to have a simple
test bed for libmpeg2.
The libmpeg2 source code is always distributed in the mpeg2dec
package, to make it easier for people to test it.
The basic usage is to just type "mpeg2dec file" where file is a
demultiplexed mpeg video file.
The "-s" option must be used for multiplexed (audio and video) mpeg
files using the "program stream" format. These files are usualy found
on the internet or on unencrypted DVDs.
The "-t" option must be used for multiplexed (audio and video) mpeg
files using the "transport stream" format. These files are usualy
found in digital TV applications.
The "-o" option is used to select a given output module - for example
to redirect the output to a file. This is also used for performance
testing and conformance testing.
The "-c" option is used to disable all optimizations.
OTHER PROJECTS USING LIBMPEG2
libmpeg2 is being used by various other projects, including:
* xine (http://xine.sourceforge.net/) - started as a simple
mpeg-2 audio and video decoder, but it since became a
full-featured DVD and video media player.
* VideoLAN (http://www.videolan.org/) - video streaming over an
ethernet network, can also be used as a standalone player.
* MPlayer (http://www.MPlayerHQ.hu) - another good player, it is
also very robust against damaged streams.
* movietime (http://movietime.sourceforge.net/) - still quite
young, but it looks very promising !
* mpeg2decX (http://homepage1.nifty.com/~toku/software_en.html) -
a graphical interface for mpeg2dec for macintosh osX.
* TCVP (http://tcvp.sf.net) - video and music player for unix.
* drip (http://drip.sourceforge.net/) - a DVD to DIVX transcoder.
* PoMP
(http://www.dmclab.hanyang.ac.kr/research/project/PoDS/PoDS_sw.htm) -
a research player optimized to minimize disk power consumption.
* OMS (http://www.linuxvideo.org/oms/)
* XMPS (http://xmps.sourceforge.net/)
* GStreamer (http://www.gstreamer.net/) - a framework for
streaming media; it has an mpeg2 decoding plugin based on
libmpeg2.
* mpeglib (http://mpeglib.sourceforge.net/) - a video decoding
library that usess libmpeg2 when decoding mpeg streams.
* daphne (http://daphne.rulecity.com/) - a laserdisc arcade game
simulator.
* GOPchop (http://outflux.net/unix/software/GOPchop/) - a
GOP-accurate editor for MPEG2 streams.
If you use libmpeg2 in another project, let us know !
TASKS
There are several places where we could easily use some help:
* Documentation: libmpeg2 still has no documentation. Every
project using it has had to figure things out by looking at
the header files, at the mpeg2dec sample application, and by
asking questions. Writing down a nice documentation would make
the code more easily reuseable.
* Testing: If you find any stream that does not decode right
with libmpeg2, let us know ! The best thing would be to mail
to the libmpeg2-devel mailing list. Also, it would be nice to
build a stress test so we can make sure libmpeg2 never crashes
on bad streams.
* Coding: There is a small TODO list in the mpeg2dec package,
you can have a look there ! Most items are pretty terse
though.
* Porting: If you're porting to a new architecture, you might
want to experiment with the compile flags defined in
configure.in . When you figure out whats fastest on your
platform, send us a patch !
* Assembly optimizations: We only have x86 and altivec
optimizations yet, it would be worthwhile writing routines for
other architectures, especially those that have SIMD
instruction set extensions ! Also the yuv2rgb x86 routines
could probably be optimized a lot.
CVS SNAPSHOTS
A daily snapshot is created using "make distcheck" every night and
uploaded to http://libmpeg2.sourceforge.net/files/mpeg2dec-snapshot.tar.gz .
It is easier to use than the CVS repository, because you do not need
to have the right versions of automake, autoconf and libtool
installed. It might be convenient when working on a libmpeg2 port for
example.
CVS REPOSITORY
The latest libmpeg2 and mpeg2dec source code can always be found by
anonymous CVS:
# export CVSROOT=:pserver:anonymous@cvs.libmpeg2.sourceforge.net:/cvsroot/libmpeg2
# cvs login (Just press Return when prompted for a password)
# cvs checkout mpeg2dec
You can also browse the latest changes online at
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/libmpeg2/mpeg2dec/
The other CVS modules are mpeg2dec-streams for the test suite, and
mpeg2dec-livid for the CVS history of the project while it was still
hosted on the linuxvideo.org servers.
MAILING LISTS
See the subscription information at http://libmpeg2.sourceforge.net/lists.html
libmpeg2-devel
This is the main mailing list for technical discussion about
libmpeg2. Anyone wanting to work on libmpeg2, or maybe just stay
informed about the development process, should probably subscribe to
this list.
libmpeg2-checkins
All libmpeg2 checkins are announced there. This is a good way to keep
track of what goes into CVS.
libmpeg2-announce
This is a very low traffic mailing list, only for announcements of new
versions of libmpeg2. Only project administrators can post there.
|