F.A.Q.

1. Compilation and installation.
Q. I receive complaints about 'undefined reference to __strcpy_small' when compiling.

A. This problem appears with some versions of glibc when avifile is compiled with optimizations turned on. You can do the following to solve the problem:

  • Reconfigure avifile without '--enable-release' option. Make sure that your CFLAGS environment variable does not contain any -Ox flags ( -O2, -O3, etc. ). Rebuild it.
  • If it does not help, open plugins/libwin32/loader/Makefile.am with any editor and add -D__USE_STRING_INLINES to the end of line 7 ( the one which starts with -D__WINE__ ). After rebuilding everything should be O.K.

    Q. I receive this or analogous error when compiling:
    mywidget.moc:36: syntax error before `('
    mywidget.moc:57: new declaration `static void
    MyWidget::staticMetaObject()'
    mywidget.h:21: ambiguates old declaration `static class QMetaObject * MyWidget::staticMetaObject()'
    make: *** [mywidget.o] Error 1

    A. You experience a mismatch of 'moc' utility version and version of Qt headers. Since version of Qt headers is checked in ./configure script, something is most probably wrong with 'moc'. Check for /usr/bin/moc - RedHat installer uses to put 'moc' from Qt 1.44 there.

    Q. I receive error messages about "undefined reference to 'XF86VidModeGetModeLine'" when compiling.

    A. The exact origin of this problem is yet undefined, but it's known that it only happens with SDL 1.1.7 and downgrading to 1.1.6 solves it.

    Q. I receive this or analogous error when trying to run AVI player:
    aviplay: error in loading shared libraries: aviplay: undefined symbol: new_metaaccess__11QMetaObjecti

    A. Dynamic linker cannot find proper Qt 2.x shared library. Make a link (your-qt-dir)/lib/libqt.so.2 => /usr/lib/libqt.so.2 or add your qt 2.x dir to /etc/ld.so.conf. Make sure that you use the same Qt in compilation and in run-time.

    Q. Everything has compiled flawlessly, but I can't find aviplay binary anywhere! What's wrong?

    A. Aviplay wasn't built because ./configure failed to find Qt headers and/or libraries. Look through its output. Depending on it, you may need to install newer version of Qt or specify path to headers and libraries in ./configure options. Do not forget to delete ./config.cache before re-running script.

    Q. I receive this or analogous error when trying to run AVI player:
    aviplay: error in loading shared libraries: aviplay: undefined symbol: __pure_virtual / __eh_rtime_match / __start_cp_handler.
    Avifile is installed from RPM.

    A. Most probably your version of glibc is different from the one used when building RPMs. Try to rebuild avifile from source.


    2. Running Qt utils.
    Q. When I try to play DivX ;-) movies, I hear sound, but don't see any picture ( nothing but black window ).

    A. You forgot to install Win32 DLLs. Download archive with DLLs from download page and thoroughly read README file for instructions how to install them.

    Q. Aviplay and other utilities frequently hang up on my RedHat 7.0 system.

    A. Either report the problem and expect it to be fixed in the next version, or go and upgrade your C++ compiler and libraries ( packages gcc, gcc-c++, glibc & glibc-devel ) from ftp://rawhide.redhat.com/rawhide/i386/rawhide/RPMS/.

    Q. Your AVI player runs, but it drops lots of frames on my P3/650. Is there anything I can do?

    A. Check file doc/VIDEO-PERFORMANCE from source distribution. It contains instructions for improving your performance by tweaking some video card settings.

    Q. Your AVI player runs, but it drops lots of frames on my K6-2/300. Is there anything I can do?

    A. I don't think so. K6-2 is much slower in decoding DivX ;-) than any Intel P6 CPU with the same price.

    Q. Do you use XFree 4.x XVideo extension for video acceleration?

    A. Yes. This extension allows to reduce CPU load and perform hardware scaling of picture. Unfortunately, it is not yet supported by drivers of all popular video cards. Supported cards, as of the end of December 2000, are:
  • Matrox G400.
  • All NVIDIA cards with installed binary drivers, available from http://www.nvidia.com.
  • Trident Blade series.
  • Intel I810.
  • ATI Rage 128 and Radeon.
  • S3 ViRGE.
  • SiS 630.
    We can also expect such support to be added in near future to:
  • Matrox G200.
  • ATI Rage Pro.
  • 3dfx video cards.
    It is necessary to have SDL compiled with support of XFree86 4.0 for this extension to be used. Otherwise you'll receive message 'no hardware acceleration detected!' in the console every time you open the file with aviplay, even if your card is actually supported.

    Q. Is it possible to adjust quality/CPU setting or picture properties ( brightness/contrast/saturation ), the same way as we do it in Windows?

    A. Yes, but only for movies encoded using DivX ;-), Indeo Video 5.0 or Windows Media 7 codecs.

    Q. Can I play ASF files with your player?

    A. Yes, but with some important limitations. Stable branch ( 0.5x ) of this library includes an ASF parser, taken from VirtualDub 1.3c by Avery Lee. It was taken almost verbatim ( I do not even understand how it works :) ). Its author does not support his sources any more, because he was forced by Microsoft to remove the parser from VirtualDub. They claim that ASF format is patented and its open-source parsing is illegal. Patenting a file format is crazy, but I suspect that it might possible. Since I am not a lawyer, I've just added these sources until MS proves me that I infringe their patents. :)
    As I mentioned earlier, I do not understand how it works, and thus cannot answer questions about problems playing ASF files.



    3. Video capture.
    Q. 'qtvidcap' program from 0.6 version of avifile crashes immediately after starting.

    A. Remove file .avirc from your home directory and re-run the program.

    Q. What video compressors should I use for video capture?

    A. Qtvidcap allows you to choose among 3 'real-time' video compressors: DivX ;-), Indeo Video 5 Quick, Motion JPEG. They are ordered by processor usage: DivX;-) is most processor-consuming of these three and has highest compression ratio. Indeo Video is faster, but compresses data worse. Morgan Multimedia Motion JPEG compressor is _very_ fast, so it can be used on slow computers, but it's not freeware. See details about it at http://www.morgan-multimedia.com.

    Q. What are frames 'dropped in capture' and 'dropped in encoder'? How do I get rid of them?

    A. Capture device driver can produce only a limited number of frames per second. For ideal source it is usually 25 or sometimes 30, depending on country. When 'qtvidcap' tries to capture frames faster than device driver is able to produce, first drop number - 'dropped in capture' - starts to grow.
    Note that I said 'for ideal source'. If you are capturing from video tape, there's a possibility that the source was slightly damaged - for example, by unstable tape speed while recording. It'll as well result in increased numbers of frames, dropped in capture. Here is the patch for BTTV ( 0.7.39 ) that fixes this problem to some extent. Apply it to BTTV driver sources, rebuild it and add "cropfield=1" to module options.
    'qtvidcap' typically produces approx. 5% of frames 'dropped in capture' if it's compiled without --enable-release configure option. Release version does not have this problem.
    Frames are 'dropped in encoder' when your system is not powerful enough to encode them and write them to disk. Enable bus-master DMA hard disk mode: turn on 'Block devices'->'Generic PCI bus-master DMA support' in kernel config, rebuild kernel and type as root:
    hdparm -d1 /dev/hda
    replacing /dev/hda with the name of your hard disk.
    If the problem persists, try to reduce capture parameters and/or change video compressor.

    Q. Your vidcap & recompressor programs crash when I attempt to encode anything into DivX ;-) on my Pentium III / Celeron Coppermine.

    A. DivX ;-) encoder DLL detects and uses SSE optimizations ( a set of Pentium III - specific instructions ) if they are available. Linux kernel 2.2 does not support SSE. You need to upgrade to kernel 2.4 and specify 'Pentium III' in Processor type.