Commit 53b978f8 authored by Sam Hocevar's avatar Sam Hocevar

  * ./BUGS: added a list of known bugs. Please add your findings!
  * ./MODULES: added a short description of each module. Maybe we should
    add more details to make this file really useful.
  * ./doc/bugreport-howto.txt: wishful thinking...
  * ./Makefile: added a workaround for the fact that .c files don't depend
    on <videolan/vlc.h>.
  * ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
    single file.
  * ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
    and --noaltivec options to vlc.
  * ./ removed the --disable-mmx option, now useless because
    of the vlc --no* options.
  * ./src/interface/main.c: fixed a crash caused by the memcpy module
    being released too early.
  * ./include/video.h: more vout4 changes, including margin support, more
    FOURCC formats recognized, transparent support of identical or almost
    identical FOURCC formats.
  * ./include/video_output.h: added a vout_Render function to video output
    modules which is to be executed before vout_Display.
  * ./include/common.h: this header is back.
  * ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
    functions, mostly taken from vout3's yuv functions, but heavily modified
    to use FAST_MEMCPY and to handle image dimensions which are not multiples
    of 16. Not all functions have been written yet, though.
  * ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
    functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
    with accelerated MMX versions.
  * ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
    4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
    makes it possible to display 4:2:2 files on most video cards without the
    quality loss of 4:2:0 downsampling.
  * ./plugins/filter/*: thanks to the vout_Render function, all filters now
    output their data perfectly in sync.
  * ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
  * ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
  * ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
parent bf7ee74f
List of known vlc bugs
$Id: BUGS,v 1.1 2002/01/04 14:01:33 sam Exp $
Please try to keep this file up to date. Also, grep for FIXME in the
source files for more and more bugs to fix.
For information on how to post a useful bug report, please read
* vlc_cond_broadcast unimplemented on most plaforms.
* --<moduletype> <module>:<args> doesn't work anymore.
* There is a memory leak in the input because the input thread is
never joined for termination.
* vlc:foo targets don't work anymore.
Video output:
* We don't render subtitles on RGB surfaces.
* The DirectX video output plugin is broken because of vout4.
* The GGI video output plugin is broken because of vout4.
* The BeOS video output plugin is broken because of vout4.
* The QNX video output plugin is broken because of vout4.
Chroma transformations:
* The only working YUV2RGB transformation function is the MMX version
of the 4:2:0 to RGB16 function.
* Most chroma transformation modules completely ignore margins.
* Most chroma transformation modules restrict the width of a picture
to multiples of 8 or even 16. We can achieve better than that.
* Most filters completely ignore margins.
Gtk interface:
* Playing like a madman with the `Playlist' button makes the interface
* Saving preferences does not work at all.
......@@ -1048,7 +1048,7 @@ Mon, 5 Mar 2001 00:41:16 +0100
It will allow to watch some DVD that went through menus by default.
* Beginning of menus in gnome interface.
* Fix bug in ac3dec for mono streams
* BeOS: bew video output method, the vlc now uses BBitmap instead of
* BeOS: new video output method, the vlc now uses BBitmap instead of
BDirectWindow (better performances)
* BeOS: added resizing
* BeOS: added beta support for overlay
List of vlc plugins
$Id: MODULES,v 1.1 2002/01/04 14:01:34 sam Exp $
* ac3_adec: software AC3 decoder.
* ac3_spdif: AC3 decoder using SPDIF pass-through.
* alsa: audio output module using the ALSA API.
* arts: audio output module using the aRts sound daemon.
* beos: audio output, video output, and interface module for BeOS.
* chroma_i420_rgb: planar YUV to packed RGB conversion functions.
* chroma_i420_rgb_mmx: MMX accelerated version of chroma_i420_rgb.
* chroma_i420_yuy2: planar 4:2:0 YUV to packed YUV conversion functions.
* chroma_i420_yuy2_mmx: MMX accelerated version of chroma_i420_yuy2.
* chroma_i422_yuy2: planar 4:2:2 YUV to packed YUV conversion functions.
* chroma_i422_yuy2_mmx: MMX accelerated version of chroma_i422_yuy2.
* directx: audio output and video output module using the DirectX API.
* dsp: audio output module using the OSS /dev/dsp interface.
* dummy: dummy audio output, video output, interface and input modules.
* null: a module with no capabilities.
* dvd: input module for accessing DVDs.
* dvdread: input module for accessing DVDs, uses libdvdread.
* esd: audio output module using the Esound sound daemon.
* fb: video output module for the Linux framebuffer.
* filter_deinterlace: naive deinterlacing filter.
* filter_transform: filter for horizontal and vertical image flips and
90 rotations.
* filter_invert: inverse video filter.
* filter_distort: miscellaneous image effects filter.
* filter_wall: image wall filter.
* ggi: video output module using the GGI API.
* glide: video output module using the Glide API.
* gnome: interface using the GNOME widget set.
* gtk: interface using the Gtk+ widget set.
* downmix: downmix module, used by the AC3 decoder.
* downmixsse: SSE accelerated version of downmix.
* downmix3dn: 3D Now! accelerated version of downmix.
* idct: inverse DCT module, used by the video decoder.
* idctclassic: another version of idct.
* idctmmx: MMX accelerated version of idct.
* idctmmxext: MMX EXT accelerated version of idct.
* idctaltivec: AltiVec accelerated version of idct.
* imdct: iMDCT module, used by the AC3 decoder.
* imdct3dn: 3D Now! accelerated version of imdct.
* imdctsse: SSE accelerated version of imdct.
* kde: interface module using the KDE widget set.
* lpcm_adec: LPCM audio decoder.
* macosx: audio output, video output and interface module for Mac OS X.
* mad: MPEG and MPEG2 audio decoder using the libmad library.
* memcpy: memory chunk copying module.
* memcpymmx: MMX accelerated version of memcpy.
* memcpymmxext: MMX EXT accelerated version of memcpy.
* memcpy3dn: 3D Now! accelerated version of memcpy.
* mga: video output module for Matrox cards using the Linux mga kernel
* motion: motion compensation module, used by the video decoder.
* motionmmx: MMX accelerated version of motion.
* motionmmxext: MMX EXT accelerated version of motion.
* motion3dnow: 3D Now! accelerated version of motion.
* motionaltivec: AltiVec accelerated version of motion.
* mpeg_es: input module for MPEG ES decapsulation.
* mpeg_ps: input module for MPEG PS decapsulation.
* mpeg_ts: input module for MPEG TS decapsulation.
* mpeg_adec: MPEG and MPEG2 audio decoder.
* mpeg_vdec: MPEG and MPEG2 video decoder.
* qt: interface module using the Qt widget set.
* sdl: audio output and video output module using the SDL library.
* spudec: DVD subtitles decoder.
* ncurses: interface module using the ncurses library.
* rc: interface module using stdio.
* vcd: input module for accessing Video CDs.
* x11: video output module using the X11 API.
* xvideo: video output module using the XVideo API.
......@@ -55,8 +55,12 @@ PLUGINS_TARGETS := ac3_adec/ac3_adec \
alsa/alsa \
arts/arts \
beos/beos \
chroma/chroma_yv12_rgb8 \
chroma/chroma_yv12_rgb16 \
chroma/chroma_i420_rgb \
chroma/chroma_i420_rgb_mmx \
chroma/chroma_i420_yuy2 \
chroma/chroma_i420_yuy2_mmx \
chroma/chroma_i422_yuy2 \
chroma/chroma_i422_yuy2_mmx \
directx/directx \
dsp/dsp \
dummy/dummy \
......@@ -111,9 +115,7 @@ PLUGINS_TARGETS := ac3_adec/ac3_adec \
text/rc \
vcd/vcd \
x11/x11 \
x11/xvideo \
yuv/yuv \
# C Objects
......@@ -157,6 +159,24 @@ VLC_OBJ := $(C_OBJ) $(CPP_OBJ) $(BUILTIN_OBJ) $(RESOURCE_OBJ)
H_OBJ := src/misc/modules_builtin.h
# Included headers which don't get noticed by Makefile.dep
H_DEP := videolan/vlc.h \
defs.h \
config.h \
int_types.h \
modules_inner.h \
common.h \
beos_specific.h \
darwin_specific.h \
win32_specific.h \
intf_msg.h \
threads.h \
mtime.h \
modules.h \
# Other lists of files
......@@ -526,12 +546,14 @@ $(C_DEP): %.d: FORCE
$(CPP_DEP): %.dpp: FORCE
@$(MAKE) -s --no-print-directory -f Makefile.dep $@
$(C_OBJ): %.o: Makefile.opts Makefile.dep Makefile $(H_OBJ)
$(C_OBJ): %.o: Makefile.opts Makefile.dep Makefile
$(C_OBJ): %.o: $(H_OBJ) $(H_DEP:%=include/%)
$(C_OBJ): %.o: .dep/%.d
$(C_OBJ): %.o: %.c
$(CC) $(CFLAGS) $(CFLAGS_VLC) -c -o $@ $<
$(CPP_OBJ): %.o: Makefile.opts Makefile.dep Makefile
$(CPP_OBJ): %.o: $(H_OBJ) $(H_DEP:%=include/%)
$(CPP_OBJ): %.o: .dep/%.dpp
$(CPP_OBJ): %.o: %.cpp
$(CC) $(CFLAGS) $(CFLAGS_VLC) -c -o $@ $<
......@@ -57,6 +57,7 @@ clean:
$(OBJ_ALL): ../../Makefile.modules ../../Makefile.dep ../../Makefile Makefile
$(OBJ_ALL): $(H_DEP:%=../../include/%)
$(C_DEP): %.d: FORCE
@$(MAKE) -s --no-print-directory -f ../../Makefile.dep $@ CFLAGS="$(CFLAGS) $(CFLAGS_EXTRA)"
This diff is collapsed.
......@@ -252,7 +252,7 @@ dnl Checks for __attribute__(aligned()) directive
AC_CACHE_CHECK([__attribute__ ((aligned ())) support],
CFLAGS="${save_CFLAGS} -Werror"
CFLAGS="${save_CFLAGS} -Werror"
for ac_cv_c_attr_align_try in 2 4 8 16 32 64; do
[static char c __attribute__ ((aligned($ac_cv_c_attr_align_try))) = 0; return c;],
......@@ -297,13 +297,13 @@ ARCH=${target_cpu}
dnl default modules
BUILTINS="${BUILTINS} mpeg_es mpeg_ps mpeg_ts memcpy idct idctclassic motion imdct downmix mpeg_adec lpcm_adec ac3_adec mpeg_vdec"
PLUGINS="${PLUGINS} ac3_spdif spudec chroma_yv12_rgb16 filter_deinterlace filter_invert filter_wall filter_transform filter_distort"
BUILTINS="${BUILTINS} mpeg_es mpeg_ps mpeg_ts memcpy idct idctclassic motion imdct downmix chroma_i420_rgb chroma_i420_yuy2 chroma_i422_yuy2 mpeg_adec lpcm_adec ac3_adec mpeg_vdec"
PLUGINS="${PLUGINS} ac3_spdif spudec filter_deinterlace filter_invert filter_wall filter_transform filter_distort"
dnl Accelerated modules
MMX_MODULES="memcpymmx idctmmx motionmmx"
MMX_MODULES="memcpymmx idctmmx motionmmx chroma_i420_rgb_mmx chroma_i420_yuy2_mmx chroma_i422_yuy2_mmx"
MMXEXT_MODULES="memcpymmxext idctmmxext motionmmxext"
THREEDNOW_MODULES="memcpy3dn imdct3dn downmix3dn"
SSE_MODULES="imdctsse downmixsse"
......@@ -576,14 +576,13 @@ AC_ARG_ENABLE(release,
dnl MMX acceleration
dnl x86 accelerations
[ --disable-mmx Disable MMX optimizations (default enabled for x86)],
[ if test x$enableval = xyes; then ARCH="${ARCH} mmx";
[ if test x${target_cpu} = xi686 -o x${target_cpu} = xi586 -o x${target_cpu} = xx86 -o x${target_cpu} = xi386; then ARCH="${ARCH} mmx";
if test x${target_cpu} = xi686 -o x${target_cpu} = xi586 -o x${target_cpu} = xx86 -o x${target_cpu} = xi386
ARCH="${ARCH} mmx"
dnl AltiVec acceleration
......@@ -808,7 +807,7 @@ AC_ARG_WITH(mad,
[ --with-mad[=PATH] libmad module (default disabled)],
[ if test "x$with_val" != "xno"; then
if test -n $with_val; then
LIB_MAD="-L$with_val/lib -lmad"
Bug report HOWTO
- - - - - - - - - -
* General rules
- Be sure the problem you are reporting is not already known, or
maybe even already solved. Source of information include the BUGS
file, the mailing-list archives at
and your old friend Google.
- Be sure to be using a recent version. Bug reports against old
versions of vlc are likely to be ignored, because changes in the
program may make it impossible to reproduce the bug, or may even have
fixed it.
- Give as many details as possible about your problem! Better too
much than not enough.
- Don't forget to say which version of vlc you are using (0.2.91,
CVS snapshot from 21 Dec 2001, Debian packages 0.2.92-4). It is
important to tell us where you got the packages from (web site, CVS,
- Also, your platform is very important. vlc runs on a lot of
different operating systems, so you should at least provide your
operating system name and version (Windows 98, Debian Linux woody,
BeOS, ...) and your CPU (Pentium 3, Sparc, PowerPC, ...).
* Reporting a ./configure or make issue
- Give the full log showing the problem:
./configure <options> > logfile.txt 2>&1
make 2>&1 > logfile.txt 2>&1
- When dealing with a ./configure issue, please provide the generated
config.log file.
- Your compiler brand and version may be relevant here as well.
* Reporting a crash
- Try to reproduce the crash and to explain how you reproduced it.
- A gdb backtrace can be useful. For it to have any meaning, vlc
should have been compiled with debug symbols (add the --enable-debug
flag to ./configure)
* Where to send bug reports?
- The vlc-devel mailing-list is probably the best place to send your
bug report, just email it to <>. If you are
concerned by the size of the attached files, you can put them on a
website and post their address instead.
......@@ -172,6 +172,10 @@ Select the CSS decryption verbosity level, 0, 1 or 2.
.B \-\-input <method>
Choose the input method, "dvd", "ps", "ts" for instance.
.B \-\-nommx, \-\-no3dnow, \-\-nommxext, \-\-nosse, \-\-noaltivec
Disable the CPU's MMX, 3D Now!, MMX EXT, SSE or AltiVec support. This may
be useful when you suspect a bug in an accelerated module.
.B \-h, \-\-help
Print help and exit.
......@@ -2,7 +2,7 @@
* css.c: Functions for DVD authentification and unscrambling
* Copyright (C) 1999-2001 VideoLAN
* $Id: css.c,v 1.18 2001/12/30 07:09:54 sam Exp $
* $Id: css.c,v 1.19 2002/01/04 14:01:34 sam Exp $
* Author: Stphane Borel <>
* Hkan Hjort <>
......@@ -325,7 +325,7 @@ int CSSGetDiscKey( dvdcss_handle dvdcss )
} while( ( playerkeys[i].i_offset != -1 ) &&
( memcmp( test_key, disc_key, KEY_SIZE ) ) );
/* The decrypted disk key will replace the disk key hash */
/* The decrypted disk key will replace the disk key hash */
memcpy( dvdcss->css.disc.p_disc_key, disc_key, KEY_SIZE );
* common.h: common definitions
* Collection of useful common types and macros definitions
* Copyright (C) 1998, 1999, 2000 VideoLAN
* $Id: common.h,v 1.64 2002/01/04 14:01:34 sam Exp $
* Authors: Samuel Hocevar <>
* Vincent Seguin <>
* Gildas Bazin <>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
* Required system headers
#include <string.h> /* strerror() */
* Basic types definitions
typedef u8 byte_t;
/* Boolean type */
# include <sys/types.h>
#elif defined(BOOLEAN_T_IN_PTHREAD_H)
# include <pthread.h>
#elif defined(BOOLEAN_T_IN_CTHREADS_H)
# include <cthreads.h>
typedef int boolean_t;
#ifdef SYS_GNU
# define _MACH_I386_BOOLEAN_H_
/* ptrdiff_t definition */
# include <stddef.h>
# include <malloc.h>
# ifndef _PTRDIFF_T
# define _PTRDIFF_T
/* Not portable in a 64-bit environment. */
typedef int ptrdiff_t;
# endif
/* Counter for statistics and profiling */
typedef unsigned long count_t;
/* DCT elements types */
typedef s16 dctelem_t;
/* Video buffer types */
typedef u8 yuv_data_t;
* mtime_t: high precision date or time interval
* Store an high precision date or time interval. The maximum precision is the
* micro-second, and a 64 bits integer is used to avoid any overflow (maximum
* time interval is then 292271 years, which should be long enough for any
* video). Date are stored as a time interval since a common date.
* Note that date and time intervals can be manipulated using regular
* arithmetic operators, and that no special functions are required.
typedef s64 mtime_t;
* Classes declaration
/* Plugins */
struct plugin_bank_s;
struct plugin_info_s;
typedef struct plugin_bank_s * p_plugin_bank_t;
typedef struct plugin_info_s * p_plugin_info_t;
/* Plugins */
struct playlist_s;
struct playlist_item_s;
struct module_s;
typedef struct playlist_s * p_playlist_t;
typedef struct playlist_item_s * p_playlist_item_t;
/* Interface */
struct intf_thread_s;
struct intf_sys_s;
struct intf_console_s;
struct intf_msg_s;
struct intf_channel_s;
typedef struct intf_thread_s * p_intf_thread_t;
typedef struct intf_sys_s * p_intf_sys_t;
typedef struct intf_console_s * p_intf_console_t;
typedef struct intf_msg_s * p_intf_msg_t;
typedef struct intf_channel_s * p_intf_channel_t;
/* Input */
struct input_thread_s;
struct input_channel_s;
struct input_cfg_s;
struct input_area_s;
typedef struct input_thread_s * p_input_thread_t;
typedef struct input_channel_s * p_input_channel_t;
typedef struct input_cfg_s * p_input_cfg_t;
typedef struct input_area_s * p_input_area_t;
/* Audio */
struct aout_thread_s;
struct aout_sys_s;
typedef struct aout_thread_s * p_aout_thread_t;
typedef struct aout_sys_s * p_aout_sys_t;
/* Video */
struct vout_thread_s;
struct vout_font_s;
struct vout_sys_s;
struct chroma_sys_s;
struct vdec_thread_s;
struct vpar_thread_s;
struct video_parser_s;
typedef struct vout_thread_s * p_vout_thread_t;
typedef struct vout_font_s * p_vout_font_t;
typedef struct vout_sys_s * p_vout_sys_t;
typedef struct chroma_sys_s * p_chroma_sys_t;
typedef struct vdec_thread_s * p_vdec_thread_t;
typedef struct vpar_thread_s * p_vpar_thread_t;
typedef struct video_parser_s * p_video_parser_t;
/* Decoders */
struct decoder_config_s;
struct decoder_fifo_s;
/* Misc */
struct macroblock_s;
struct data_packet_s;
struct imdct_s;
struct complex_s;
struct dm_par_s;
struct picture_s;
struct picture_sys_s;
struct picture_heap_s;
struct es_descriptor_s;
struct pgrm_descriptor_s;
struct pes_packet_s;
struct input_area_s;
struct bit_stream_s;
struct probedata_s;
* Macros and inline functions
# include <sys/param.h>
#elif defined(WIN32)
/* Swap bytes in 16 bit value. */
# define __bswap_constant_16(x) \
((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
# if defined __GNUC__ && __GNUC__ >= 2
# define __bswap_16(x) \
(__extension__ \
({ register unsigned short int __v; \
if (__builtin_constant_p (x)) \
__v = __bswap_constant_16 (x); \
else \
__asm__ __volatile__ ("rorw $8, %w0" \
: "=r" (__v) \
: "0" ((unsigned short int) (x)) \
: "cc"); \
__v; }))
# else
/* This is better than nothing. */
# define __bswap_16(x) __bswap_constant_16 (x)
# endif
/* Swap bytes in 32 bit value. */
# define __bswap_constant_32(x) \
((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
(((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
# if defined __GNUC__ && __GNUC__ >= 2
/* To swap the bytes in a word the i486 processors and up provide the
`bswap' opcode. On i386 we have to use three instructions. */
# if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__
# define __bswap_32(x) \
(__extension__ \
({ register unsigned int __v; \
if (__builtin_constant_p (x)) \
__v = __bswap_constant_32 (x); \
else \
__asm__ __volatile__ ("rorw $8, %w0;" \
"rorl $16, %0;" \
"rorw $8, %w0" \
: "=r" (__v) \
: "0" ((unsigned int) (x)) \
: "cc"); \
__v; }))
# else
# define __bswap_32(x) \
(__extension__ \
({ register unsigned int __v; \
if (__builtin_constant_p (x)) \
__v = __bswap_constant_32 (x); \
else \