Remove various unported plugins
authorSebastian Dröge <sebastian@centricular.com>
Wed, 21 Dec 2016 09:00:47 +0000 (11:00 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 21 Dec 2016 09:17:11 +0000 (11:17 +0200)
If they were not ported after 4+ years it seems unlikely that anybody is
ever going to need them again. They're still in the GIT history if
needed.

https://bugzilla.gnome.org/show_bug.cgi?id=774530

225 files changed:
config.h.meson
configure.ac
docs/plugins/Makefile.am
docs/plugins/gst-plugins-bad-plugins-sections.txt
docs/plugins/gst-plugins-bad-plugins.signals
ext/Makefile.am
ext/apexsink/LGPL-3.0.txt [deleted file]
ext/apexsink/Makefile.am [deleted file]
ext/apexsink/gstapexplugin.c [deleted file]
ext/apexsink/gstapexraop.c [deleted file]
ext/apexsink/gstapexraop.h [deleted file]
ext/apexsink/gstapexsink.c [deleted file]
ext/apexsink/gstapexsink.h [deleted file]
ext/libvisual/Makefile.am [deleted file]
ext/libvisual/visual-gl.c [deleted file]
ext/meson.build
ext/nas/Makefile.am [deleted file]
ext/nas/nassink.c [deleted file]
ext/nas/nassink.h [deleted file]
ext/sdl/Makefile.am [deleted file]
ext/sdl/gstsdl.c [deleted file]
ext/sdl/sdlaudiosink.c [deleted file]
ext/sdl/sdlaudiosink.h [deleted file]
ext/sdl/sdlvideosink.c [deleted file]
ext/sdl/sdlvideosink.h [deleted file]
ext/sndio/Makefile.am [deleted file]
ext/sndio/gstsndio.c [deleted file]
ext/sndio/sndiosink.c [deleted file]
ext/sndio/sndiosink.h [deleted file]
ext/sndio/sndiosrc.c [deleted file]
ext/sndio/sndiosrc.h [deleted file]
ext/timidity/gsttimidity.c [deleted file]
ext/timidity/gsttimidity.h [deleted file]
ext/wildmidi/Makefile.am [moved from ext/timidity/Makefile.am with 50% similarity]
ext/wildmidi/README [moved from ext/timidity/README with 100% similarity]
ext/wildmidi/gstwildmidi.c [moved from ext/timidity/gstwildmidi.c with 100% similarity]
ext/wildmidi/gstwildmidi.h [moved from ext/timidity/gstwildmidi.h with 100% similarity]
ext/xvid/Makefile.am [deleted file]
ext/xvid/gstxvid.c [deleted file]
ext/xvid/gstxvid.h [deleted file]
ext/xvid/gstxviddec.c [deleted file]
ext/xvid/gstxviddec.h [deleted file]
ext/xvid/gstxvidenc.c [deleted file]
ext/xvid/gstxvidenc.h [deleted file]
gst/audiobuffer/Makefile.am [deleted file]
gst/audiobuffer/gstaudioringbuffer.c [deleted file]
gst/audiobuffer/meson.build [deleted file]
gst/cdxaparse/Makefile.am [deleted file]
gst/cdxaparse/gstcdxaparse.c [deleted file]
gst/cdxaparse/gstcdxaparse.h [deleted file]
gst/cdxaparse/gstvcdparse.c [deleted file]
gst/cdxaparse/gstvcdparse.h [deleted file]
gst/cdxaparse/meson.build [deleted file]
gst/dccp/Makefile.am [deleted file]
gst/dccp/gstdccp.c [deleted file]
gst/dccp/gstdccp.h [deleted file]
gst/dccp/gstdccp_common.h [deleted file]
gst/dccp/gstdccpclientsink.c [deleted file]
gst/dccp/gstdccpclientsink.h [deleted file]
gst/dccp/gstdccpclientsrc.c [deleted file]
gst/dccp/gstdccpclientsrc.h [deleted file]
gst/dccp/gstdccpplugin.c [deleted file]
gst/dccp/gstdccpserversink.c [deleted file]
gst/dccp/gstdccpserversink.h [deleted file]
gst/dccp/gstdccpserversrc.c [deleted file]
gst/dccp/gstdccpserversrc.h [deleted file]
gst/dccp/meson.build [deleted file]
gst/faceoverlay/Makefile.am [deleted file]
gst/faceoverlay/gstfaceoverlay.c [deleted file]
gst/faceoverlay/gstfaceoverlay.h [deleted file]
gst/faceoverlay/meson.build [deleted file]
gst/games/Makefile.am [deleted file]
gst/games/gstpuzzle.c [deleted file]
gst/games/gstvideoimage.c [deleted file]
gst/games/gstvideoimage.h [deleted file]
gst/games/meson.build [deleted file]
gst/hdvparse/Makefile.am [deleted file]
gst/hdvparse/gsthdvparse.c [deleted file]
gst/hdvparse/gsthdvparse.h [deleted file]
gst/hdvparse/meson.build [deleted file]
gst/meson.build
gst/mixmatrix/Makefile.am [deleted file]
gst/mixmatrix/meson.build [deleted file]
gst/mixmatrix/mixmatrix.c [deleted file]
gst/mve/Makefile.am [deleted file]
gst/mve/TODO [deleted file]
gst/mve/gstmve.c [deleted file]
gst/mve/gstmvedemux.c [deleted file]
gst/mve/gstmvedemux.h [deleted file]
gst/mve/gstmvemux.c [deleted file]
gst/mve/gstmvemux.h [deleted file]
gst/mve/meson.build [deleted file]
gst/mve/mve.h [deleted file]
gst/mve/mveaudiodec.c [deleted file]
gst/mve/mveaudioenc.c [deleted file]
gst/mve/mvevideodec16.c [deleted file]
gst/mve/mvevideodec8.c [deleted file]
gst/mve/mvevideoenc16.c [deleted file]
gst/mve/mvevideoenc8.c [deleted file]
gst/nuvdemux/Makefile.am [deleted file]
gst/nuvdemux/gstnuvdemux.c [deleted file]
gst/nuvdemux/gstnuvdemux.h [deleted file]
gst/nuvdemux/meson.build [deleted file]
gst/overlay/Makefile.am [deleted file]
gst/overlay/gstoverlay.c [deleted file]
gst/overlay/gstoverlay.h [deleted file]
gst/overlay/meson.build [deleted file]
gst/patchdetect/Makefile.am [deleted file]
gst/patchdetect/gstpatchdetect.c [deleted file]
gst/patchdetect/gstpatchdetect.h [deleted file]
gst/patchdetect/meson.build [deleted file]
gst/rtjpeg/.gitignore [deleted file]
gst/rtjpeg/Makefile.am [deleted file]
gst/rtjpeg/README [deleted file]
gst/rtjpeg/RTjpeg.c [deleted file]
gst/rtjpeg/RTjpeg.h [deleted file]
gst/rtjpeg/gstrtjpeg.c [deleted file]
gst/rtjpeg/gstrtjpegdec.c [deleted file]
gst/rtjpeg/gstrtjpegdec.h [deleted file]
gst/rtjpeg/gstrtjpegenc.c [deleted file]
gst/rtjpeg/gstrtjpegenc.h [deleted file]
gst/rtjpeg/meson.build [deleted file]
gst/sdi/Makefile.am [deleted file]
gst/sdi/gstsdi.c [deleted file]
gst/sdi/gstsdidemux.c [deleted file]
gst/sdi/gstsdidemux.h [deleted file]
gst/sdi/gstsdimux.c [deleted file]
gst/sdi/gstsdimux.h [deleted file]
gst/sdi/meson.build [deleted file]
gst/tta/Makefile.am [deleted file]
gst/tta/crc32.h [deleted file]
gst/tta/filters.h [deleted file]
gst/tta/gsttta.c [deleted file]
gst/tta/gstttadec.c [deleted file]
gst/tta/gstttadec.h [deleted file]
gst/tta/gstttaparse.c [deleted file]
gst/tta/gstttaparse.h [deleted file]
gst/tta/meson.build [deleted file]
gst/tta/ttadec.h [deleted file]
gst/vbidec/Makefile.am [deleted file]
gst/vbidec/gstvbidec.c [deleted file]
gst/vbidec/gstvbidec.h [deleted file]
gst/vbidec/meson.build [deleted file]
gst/vbidec/vbidata.c [deleted file]
gst/vbidec/vbidata.h [deleted file]
gst/vbidec/vbiscreen.c [deleted file]
gst/vbidec/vbiscreen.h [deleted file]
meson.build
po/POTFILES.in
po/POTFILES.skip
sys/Makefile.am
sys/avc/Makefile.am [deleted file]
sys/avc/gstavcplugin.cpp [deleted file]
sys/avc/gstavcsrc.cpp [deleted file]
sys/avc/gstavcsrc.h [deleted file]
sys/dxr3/.gitignore [deleted file]
sys/dxr3/Makefile.am [deleted file]
sys/dxr3/ac3_padder.c [deleted file]
sys/dxr3/ac3_padder.h [deleted file]
sys/dxr3/dxr3audiosink.c [deleted file]
sys/dxr3/dxr3audiosink.h [deleted file]
sys/dxr3/dxr3common.h [deleted file]
sys/dxr3/dxr3init.c [deleted file]
sys/dxr3/dxr3marshal.list [deleted file]
sys/dxr3/dxr3spusink.c [deleted file]
sys/dxr3/dxr3spusink.h [deleted file]
sys/dxr3/dxr3videosink.c [deleted file]
sys/dxr3/dxr3videosink.h [deleted file]
sys/linsys/Makefile.am [deleted file]
sys/linsys/gstlinsys.c [deleted file]
sys/linsys/gstlinsyssdisink.c [deleted file]
sys/linsys/gstlinsyssdisink.h [deleted file]
sys/linsys/gstlinsyssdisrc.c [deleted file]
sys/linsys/gstlinsyssdisrc.h [deleted file]
sys/linsys/include/asi.h [deleted file]
sys/linsys/include/master.h [deleted file]
sys/linsys/include/sdi.h [deleted file]
sys/linsys/include/sdiaudio.h [deleted file]
sys/linsys/include/sdivideo.h [deleted file]
sys/meson.build
sys/pvr2d/Makefile.am [deleted file]
sys/pvr2d/gstpvr.c [deleted file]
sys/pvr2d/gstpvr.h [deleted file]
sys/pvr2d/gstpvrbufferpool.c [deleted file]
sys/pvr2d/gstpvrbufferpool.h [deleted file]
sys/pvr2d/gstpvrvideosink.c [deleted file]
sys/pvr2d/gstpvrvideosink.h [deleted file]
sys/pvr2d/pvr_includes/dri2_ws.h [deleted file]
sys/pvr2d/pvr_includes/img_defs.h [deleted file]
sys/pvr2d/pvr_includes/img_types.h [deleted file]
sys/pvr2d/pvr_includes/pvr2d.h [deleted file]
sys/pvr2d/pvr_includes/services.h [deleted file]
sys/pvr2d/pvr_includes/servicesext.h [deleted file]
sys/pvr2d/pvr_includes/wsegl.h [deleted file]
sys/qcam/Makefile.am [deleted file]
sys/qcam/dark.c [deleted file]
sys/qcam/exposure.c [deleted file]
sys/qcam/gstqcamsrc.c [deleted file]
sys/qcam/gstqcamsrc.h [deleted file]
sys/qcam/qcam-Linux.c [deleted file]
sys/qcam/qcam-Linux.h [deleted file]
sys/qcam/qcam-lib.c [deleted file]
sys/qcam/qcam-os.c [deleted file]
sys/qcam/qcam-os.h [deleted file]
sys/qcam/qcam.h [deleted file]
sys/qcam/qcamip.h [deleted file]
sys/wininet/Makefile.am [deleted file]
sys/wininet/gstwininetsrc.c [deleted file]
sys/wininet/gstwininetsrc.h [deleted file]
tests/check/Makefile.am
tests/check/elements/timidity.c [deleted file]
tests/icles/dccp/README [deleted file]
tests/icles/dccp/call/DCCPClient.c [deleted file]
tests/icles/dccp/call/DCCPServer.c [deleted file]
tests/icles/dccp/call/README [deleted file]
tests/icles/dccp/file/DCCPClientSaveFile.c [deleted file]
tests/icles/dccp/file/DCCPServerSendFile.c [deleted file]
tests/icles/dccp/mic/DCCPClientPlayMic.c [deleted file]
tests/icles/dccp/mic/DCCPServerMic.c [deleted file]
tests/icles/dccp/mp3/DCCPClientPlayMP3.c [deleted file]
tests/icles/dccp/mp3/DCCPServerSendMP3.c [deleted file]
tests/icles/dccp/mp3Speex/DCCPClientPlaySpeexMP3.c [deleted file]
tests/icles/dccp/mp3Speex/DCCPServerSendSpeexMP3.c [deleted file]
tests/icles/dccp/mp3Stream/DCCPClientPlayMP3Stream.c [deleted file]
tests/icles/dccp/mp3Stream/DCCPServerSendMP3Stream.c [deleted file]

index 551e431..e24ba97 100644 (file)
@@ -94,9 +94,6 @@
 /* Define to enable Android Media (used by androidmedia). */
 #mesondefine HAVE_ANDROID_MEDIA
 
-/* Define to enable AirPort Express Wireless sink (used by apexsink). */
-#mesondefine HAVE_APEXSINK
-
 /* Define to enable Apple video (used by applemedia). */
 #mesondefine HAVE_APPLE_MEDIA
 
 /* Define to 1 if you have the <fcntl.h> header file. */
 #mesondefine HAVE_FCNTL_H
 
-/* FIONREAD ioctl found in sys/filio.h */
-#mesondefine HAVE_FIONREAD_IN_SYS_FILIO
-
-/* FIONREAD ioctl found in sys/ioclt.h */
-#mesondefine HAVE_FIONREAD_IN_SYS_IOCTL
-
 /* Define to enable Flite plugin (used by flite). */
 #mesondefine HAVE_FLITE
 
 /* Define if libusb 1.x is installed */
 #mesondefine HAVE_LIBUSB
 
-/* Define to enable libvisual visualization library (used by libvisual). */
-#mesondefine HAVE_LIBVISUAL
-
-/* Define to enable Linear Systems SDI plugin (used by linsys). */
-#mesondefine HAVE_LINSYS
-
 /* Define if we have liblrdf */
 #mesondefine HAVE_LRDF
 
 /* Define to enable MythTV client plugins (used by mythtvsrc). */
 #mesondefine HAVE_MYTHTV
 
-/* Define to enable nas plug-in (used by nassink). */
-#mesondefine HAVE_NAS
-
 /* Define to enable neon http client plugins (used by neonhttpsrc). */
 #mesondefine HAVE_NEON
 
 /* Define to enable Schroedinger video codec (used by schro). */
 #mesondefine HAVE_SCHRO
 
-/* Define to enable SDL plug-in (used by sdlvideosink sdlaudiosink). */
-#mesondefine HAVE_SDL
-
 /* Define to enable POSIX shared memory source and sink (used by shm). */
 #mesondefine HAVE_SHM
 
 /* Define to enable sndfile plug-in (used by sfdec sfenc). */
 #mesondefine HAVE_SNDFILE
 
-/* Define to enable sndio audio (used by sndio). */
-#mesondefine HAVE_SNDIO
-
 /* Define to enable soundtouch plug-in (used by soundtouch). */
 #mesondefine HAVE_SOUNDTOUCH
 
 /* Define if libtiger is available */
 #mesondefine HAVE_TIGER
 
-/* Define to enable timidity midi soft synth plugin (used by timidity). */
-#mesondefine HAVE_TIMIDITY
-
 /* Define to 1 if you have the <unistd.h> header file. */
 #mesondefine HAVE_UNISTD_H
 
 /* Define to 1 if you have the <windows.h> header file. */
 #mesondefine HAVE_WINDOWS_H
 
-/* Define to enable Windows internet library (used by wininet). */
-#mesondefine HAVE_WININET
-
-/* Define to 1 if you have the <wininet.h> header file. */
-#mesondefine HAVE_WININET_H
-
 /* Define to enable Winks plug-in (used by winks). */
 #mesondefine HAVE_WINKS
 
 /* Define if you have X11 library */
 #mesondefine HAVE_X11
 
-/* Define to enable xvid plugins (used by xvid). */
-#mesondefine HAVE_XVID
-
 /* Define to enable ZBar barcode detector (used by zbar). */
 #mesondefine HAVE_ZBAR
 
 /* library dir */
 #mesondefine LIBDIR
 
-/* directory in which the detected libvisual's plugins are located */
-#mesondefine LIBVISUAL_PLUGINSBASEDIR
-
 /* gettext locale dir */
 #mesondefine LOCALEDIR
 
 /* the target CPU */
 #mesondefine TARGET_CPU
 
-/* Define location of timidity.cfg */
-#mesondefine TIMIDITY_CFG
-
 /* Use Mali FB EGL platform */
 #mesondefine USE_EGL_MALI_FB
 
index 10bdca7..dfe2f9d 100644 (file)
@@ -164,16 +164,8 @@ AX_CREATE_STDINT_H
 AC_CHECK_HEADERS([pthread.h], HAVE_PTHREAD_H=yes)
 AM_CONDITIONAL(HAVE_PTHREAD_H, test "x$HAVE_PTHREAD_H" = "xyes")
 
-if test "x$HAVE_PTHREAD_H" != "xyes"; then
-  GST_PLUGINS_SELECTED=`echo $GST_PLUGINS_SELECTED | $SED -e s/dccp//`
-fi
-
 dnl *** checks for types/defines ***
 
-dnl Check for FIONREAD ioctl declaration
-dnl used in gst/dccp
-GST_CHECK_FIONREAD
-
 dnl *** checks for structures ***
 
 dnl *** checks for compiler characteristics ***
@@ -467,21 +459,6 @@ dnl used in examples
 AG_GST_DEFAULT_ELEMENTS
 
 dnl *** plug-ins to include ***
-dnl Non ported plugins (non-dependant, then dependant)
-dnl Make sure you have a space before and after all plugins
-GST_PLUGINS_NONPORTED=" cdxaparse \
- dccp faceoverlay \
- hdvparse \
- mve nuvdemux \
- patchdetect \
- sdi tta \
- linsys \
- apexsink \
- nas sdl timidity \
- wininet \
- xvid sndio libvisual"
-
-AC_SUBST(GST_PLUGINS_NONPORTED)
 
 dnl these are all the gst plug-ins, compilable without additional libs
 AG_GST_CHECK_PLUGIN(accurip)
@@ -498,13 +475,10 @@ AG_GST_CHECK_PLUGIN(audiovisualizers)
 AG_GST_CHECK_PLUGIN(autoconvert)
 AG_GST_CHECK_PLUGIN(bayer)
 AG_GST_CHECK_PLUGIN(camerabin2)
-AG_GST_CHECK_PLUGIN(cdxaparse)
 AG_GST_CHECK_PLUGIN(coloreffects)
-AG_GST_CHECK_PLUGIN(dccp)
 AG_GST_CHECK_PLUGIN(debugutils)
 AG_GST_CHECK_PLUGIN(dvbsuboverlay)
 AG_GST_CHECK_PLUGIN(dvdspu)
-AG_GST_CHECK_PLUGIN(faceoverlay)
 AG_GST_CHECK_PLUGIN(festival)
 AG_GST_CHECK_PLUGIN(fieldanalysis)
 AG_GST_CHECK_PLUGIN(freeverb)
@@ -512,7 +486,6 @@ AG_GST_CHECK_PLUGIN(frei0r)
 AG_GST_CHECK_PLUGIN(gaudieffects)
 AG_GST_CHECK_PLUGIN(geometrictransform)
 AG_GST_CHECK_PLUGIN(gdp)
-AG_GST_CHECK_PLUGIN(hdvparse)
 AG_GST_CHECK_PLUGIN(id3tag)
 AG_GST_CHECK_PLUGIN(inter)
 AG_GST_CHECK_PLUGIN(interlace)
@@ -526,17 +499,13 @@ AG_GST_CHECK_PLUGIN(mpegdemux)
 AG_GST_CHECK_PLUGIN(mpegtsdemux)
 AG_GST_CHECK_PLUGIN(mpegtsmux)
 AG_GST_CHECK_PLUGIN(mpegpsmux)
-AG_GST_CHECK_PLUGIN(mve)
 AG_GST_CHECK_PLUGIN(mxf)
 AG_GST_CHECK_PLUGIN(netsim)
-AG_GST_CHECK_PLUGIN(nuvdemux)
 AG_GST_CHECK_PLUGIN(onvif)
-AG_GST_CHECK_PLUGIN(patchdetect)
 AG_GST_CHECK_PLUGIN(pcapparse)
 AG_GST_CHECK_PLUGIN(pnm)
 AG_GST_CHECK_PLUGIN(rawparse)
 AG_GST_CHECK_PLUGIN(removesilence)
-AG_GST_CHECK_PLUGIN(sdi)
 AG_GST_CHECK_PLUGIN(sdp)
 AG_GST_CHECK_PLUGIN(segmentclip)
 AG_GST_CHECK_PLUGIN(siren)
@@ -545,7 +514,6 @@ AG_GST_CHECK_PLUGIN(speed)
 AG_GST_CHECK_PLUGIN(subenc)
 AG_GST_CHECK_PLUGIN(stereo)
 AG_GST_CHECK_PLUGIN(timecode)
-AG_GST_CHECK_PLUGIN(tta)
 AG_GST_CHECK_PLUGIN(videofilters)
 AG_GST_CHECK_PLUGIN(videoparsers)
 AG_GST_CHECK_PLUGIN(videosignal)
@@ -600,13 +568,6 @@ if test "x$HAVE_WINSOCK2_H" = "xyes"; then
   AC_SUBST(WINSOCK2_LIBS)
 fi
 
-if test "x$HAVE_PTHREAD_H" = "xyes"; then
-  DCCP_LIBS="$DCCP_LIBS $PTHREAD_LIBS"
-  AC_SUBST(DCCP_LIBS)
-else
-  AG_GST_DISABLE_PLUGIN(dccp)
-fi
-
 dnl *** opengl ***
 AC_ARG_ENABLE([opengl],
      [  --enable-opengl         Enable Desktop OpenGL support @<:@default=auto@:>@],
@@ -2098,24 +2059,6 @@ AG_GST_CHECK_FEATURE(VOAACENC, [vo-aacenc library], vo-aacenc, [
   AG_GST_PKG_CHECK_MODULES(VOAACENC, vo-aacenc >= 0.1.0)
 ])
 
-dnl *** apexsink ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_APEXSINK, true)
-AG_GST_CHECK_FEATURE(APEXSINK, [AirPort Express Wireless sink], apexsink, [
-  PKG_CHECK_MODULES(APEXSINK, [ openssl >= 0.9.5  libcrypto ], [
-    HAVE_APEXSINK="yes"
-    saved_LIBS="$LIBS"
-    LIBS=""
-    AC_SEARCH_LIBS(socket, [socket], [ ], [ APEXSINK="no" ])
-    AC_SEARCH_LIBS(gethostbyname, [nsl], [ ], [ APEXSINK="no" ])
-    APEXSINK_LIBS="$APEXSINK_LIBS $LIBS"
-    LIBS="$saved_LIBS"
-    AC_SUBST(APEXSINK_CFLAGS)
-    AC_SUBST(APEXSINK_LIBS)
-  ], [
-    APEXSINK="no"
-  ])
-])
-
 dnl *** bs2b ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_BS2B, true)
 AG_GST_CHECK_FEATURE(BS2B, [bs2b], bs2b, [
@@ -2525,19 +2468,6 @@ AG_GST_CHECK_FEATURE(TTML, [TTML plugin], ttml, [
   fi
 ])
 
-dnl *** linsys ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_LINSYS, true)
-AG_GST_CHECK_FEATURE(LINSYS, [Linear Systems SDI plugin], linsys, [
-  case "$host" in
-    *-*linux*)
-      HAVE_LINSYS=yes
-      ;;
-    *)
-      HAVE_LINSYS=no
-      ;;
-  esac
-])
-
 dnl *** modplug ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_MODPLUG, true)
 AG_GST_CHECK_FEATURE(MODPLUG, modplug, modplug, [
@@ -2745,21 +2675,6 @@ AG_GST_CHECK_FEATURE(MUSEPACK, [musepackdec], musepack, [
     ], [HAVE_MUSEPACK="no"])])
 ])
 
-dnl *** nas ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_NAS, true)
-AG_GST_CHECK_FEATURE(NAS, [nas plug-in], nassink, [
-  HAVE_NAS="no"
-  if test "x$HAVE_X" = "xyes"; then
-    save_cppflags=$CFLAGS
-    CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-    AG_GST_CHECK_LIBHEADER(NAS, audio, AuOpenServer, $X_LIBS, audio/audiolib.h,
-      NAS_LIBS="$X_LIBS -laudio" NAS_CFLAGS="$X_CFLAGS")
-    CPPFLAGS="$save_cppflags"
-  fi
-  AC_SUBST(NAS_CFLAGS)
-  AC_SUBST(NAS_LIBS)
-])
-
 dnl *** neon ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_NEON, true)
 AG_GST_CHECK_FEATURE(NEON, [neon http client plugins], neonhttpsrc, [
@@ -2901,20 +2816,6 @@ AG_GST_CHECK_FEATURE(OPUS, [opus], opus, [
   AC_SUBST(OPUS_LIBS)
 ])
 
-dnl *** pvr ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_PVR, true)
-AG_GST_CHECK_FEATURE(PVR, [pvrvideosink], pvr, [
-  PKG_CHECK_MODULES([PVR], [libtimemmgr], HAVE_PVR=yes, HAVE_PVR=no)
-  AC_SUBST(PVR_CFLAGS)
-  AC_SUBST(PVR_LIBS)
-])
-
- AC_ARG_WITH([pvr-external-headers],
-              AS_HELP_STRING([--with-pvr-external-headers],[Use system installed PVR2D headers]),
-              [AS_IF([test "x$with_pvr_external_headers" = "xno"],
-                     [PVR_CFLAGS="$PVR_CFLAGS -I\$(srcdir)/pvr_includes"])],
-              [PVR_CFLAGS="$PVR_CFLAGS -I\$(srcdir)/pvr_includes"])
-
 dnl *** rsvg ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_RSVG, true)
 AG_GST_CHECK_FEATURE(RSVG, [rsvg decoder], rsvg, [
@@ -3077,50 +2978,6 @@ AG_GST_CHECK_FEATURE(VULKAN, [Vulkan elements], vulkan, [
   ], [])
 ])
 
-dnl *** libvisual ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_LIBVISUAL, true)
-AG_GST_CHECK_FEATURE(LIBVISUAL, [libvisual visualization library], libvisual, [
-  AG_GST_PKG_CHECK_MODULES(LIBVISUAL, libvisual-0.4 >= 0.4.0)
-  if test x$HAVE_LIBVISUAL = xyes; then
-    LIBVIS_PLUGINSDIR="`$PKG_CONFIG --variable=pluginsbasedir libvisual-0.4`"
-  fi
-  AC_MSG_NOTICE([libvisual pluginsdir: $LIBVIS_PLUGINSDIR])
-  if test x$LIBVIS_PLUGINSDIR != x; then
-    AC_DEFINE_UNQUOTED(LIBVISUAL_PLUGINSBASEDIR,
-        "$LIBVIS_PLUGINSDIR",
-        [directory in which the detected libvisual's plugins are located])
-  fi
-])
-
-dnl *** timidity ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_TIMIDITY, true)
-AG_GST_CHECK_FEATURE(TIMIDITY, [timidity midi soft synth plugin], timidity, [
-  PKG_CHECK_MODULES(TIMIDITY, libtimidity, [
-    HAVE_TIMIDITY="yes",
-       AC_MSG_CHECKING([for timidity.cfg])
-       timidity_cfg=""
-       if test -r /etc/timidity.cfg; then
-         timidity_cfg=/etc/timidity.cfg
-       elif test -r /etc/timidity/timidity.cfg; then
-         timidity_cfg=/etc/timidity/timidity.cfg
-       elif test -r /usr/share/timidity/timidity.cfg; then
-         timidity_cfg=/usr/share/timidity/timidity.cfg
-       elif test -r /usr/local/share/timidity/timidity.cfg; then
-         timidity_cfg=/usr/local/share/timidity/timidity.cfg
-       fi
-       if test "x$timidity_cfg" != "x"; then
-         AC_MSG_RESULT($timidity_cfg)
-      AC_DEFINE_UNQUOTED(TIMIDITY_CFG, "$timidity_cfg", [Define location of timidity.cfg])
-       else
-         AC_MSG_RESULT([not found])
-       fi
-  ], [
-    HAVE_TIMIDITY="no"
-  ])
-  AC_SUBST(TIMIDITY_CFLAGS)
-  AC_SUBST(TIMIDITY_LIBS)
-])
-
 dnl *** teletextdec ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_TELETEXTDEC, true)
 AG_GST_CHECK_FEATURE(TELETEXTDEC, [Teletext decoder], teletextdec, [
@@ -3149,12 +3006,6 @@ AG_GST_CHECK_FEATURE(WILDMIDI, [wildmidi midi soft synth plugin], wildmidi, [
   AC_SUBST(WILDMIDI_LIBS)
 ])
 
-dnl *** SDL ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_SDL, true)
-AG_GST_CHECK_FEATURE(SDL, [SDL plug-in], sdlvideosink sdlaudiosink, [
-    AM_PATH_SDL(, HAVE_SDL=yes, HAVE_SDL=no)
-])
-
 dnl **** Smooth Streaming ****
 translit(dnm, m, l) AM_CONDITIONAL(USE_SMOOTHSTREAMING, true)
 AG_GST_CHECK_FEATURE(SMOOTHSTREAMING, [Smooth Streaming plug-in], smoothstreaming, [
@@ -3247,36 +3098,6 @@ AG_GST_CHECK_FEATURE(GME, [gme decoder], gme, [
   fi
 ])
 
-dnl *** XVID ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_XVID, true)
-AG_GST_CHECK_FEATURE(XVID, [xvid plugins], xvid, [
-  HAVE_XVID=no
-  AC_CHECK_HEADER(xvid.h, [
-    OLD_LIBS="$LIBS"
-    LIBS="$PTHREAD_LIBS $LIBM"
-    AC_CHECK_LIB(xvidcore, xvid_encore, [
-      AC_CHECK_LIB(xvidcore, xvid_decore, [
-        AC_CHECK_LIB(xvidcore, xvid_global, [
-          AC_MSG_CHECKING([for up-to-date XviD API version])
-          AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <xvid.h>]], [[
-              #if XVID_API_MAJOR(XVID_API) != 4
-              #error "Incompatible XviD API version"
-              #endif
-             #if XVID_API_MAJOR(XVID_API) == 4 && XVID_API_MINOR(XVID_API) < 3
-              #error "Incompatible XviD API version"
-             #endif
-          ]])],[ AC_MSG_RESULT(yes)
-            XVID_LIBS="-lxvidcore $LIBM"
-            AC_SUBST(XVID_LIBS)
-            HAVE_XVID=yes
-          ],[AC_MSG_RESULT(no) ])
-        ], )
-      ], )
-    ], )
-    LIBS="$OLD_LIBS"
-  ], )
-])
-
 dnl *** dvb ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_DVB, true)
 AG_GST_CHECK_FEATURE(DVB, [DVB Source], dvb, [
@@ -3295,16 +3116,6 @@ AG_GST_CHECK_FEATURE(DVB, [DVB Source], dvb, [
   ], [HAVE_DVB="no"])
 ])
 
-dnl *** wininet ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_WININET, true)
-AG_GST_CHECK_FEATURE(WININET, [Windows internet library], wininet, [
-  AC_MSG_CHECKING([Checking for windows internet support])
-  AC_CHECK_HEADERS([windows.h wininet.h],
-      [HAVE_WININET="yes"], [HAVE_WININET="no"],
-      [AC_INCLUDES_DEFAULT
-#include <windows.h>])
-])
-
 dnl *** acm ***
 translit(dnm, m, l) AM_CONDITIONAL(USE_ACM, true)
 AG_GST_CHECK_FEATURE(ACM, [Windows ACM library], acm, [
@@ -3398,19 +3209,6 @@ AG_GST_CHECK_FEATURE(SPANDSP, [Spandsp], spandsp, [
 AC_SUBST(SPANDSP_CFLAGS)
 AC_SUBST(SPANDSP_LIBS)
 
-dnl *** sndio ***
-translit(dnm, m, l) AM_CONDITIONAL(USE_SNDIO, true)
-AG_GST_CHECK_FEATURE(SNDIO, [sndio audio], sndio, [
-  AC_CHECK_HEADER(sndio.h, HAVE_SNDIO="yes", HAVE_SNDIO="no")
-  if test "x$HAVE_SNDIO" = "xyes"; then
-    AC_CHECK_LIB(sndio, sio_open, HAVE_SNDIO="yes", HAVE_SNDIO="no")
-    if test "x$HAVE_SNDIO" = "xyes"; then
-      SNDIO_LIBS=-lsndio
-      AC_SUBST(SNDIO_LIBS)
-    fi
-  fi
-])
-
 dnl *** hls-crypto ***
 AC_ARG_WITH([hls-crypto],
   AS_HELP_STRING([--with-hls-crypto=auto|nettle|libgcrypt|openssl], [
@@ -3509,7 +3307,6 @@ dnl but we still need to set the conditionals
 AM_CONDITIONAL(USE_ASSRENDER, false)
 AM_CONDITIONAL(USE_VOAMRWBENC, false)
 AM_CONDITIONAL(USE_VOAACENC, false)
-AM_CONDITIONAL(USE_APEXSINK, false)
 AM_CONDITIONAL(USE_BS2B, false)
 AM_CONDITIONAL(USE_BZ2, false)
 AM_CONDITIONAL(USE_CHROMAPRINT, false)
@@ -3544,12 +3341,10 @@ AM_CONDITIONAL(USE_LADSPA, false)
 AM_CONDITIONAL(USE_LV2, false)
 AM_CONDITIONAL(USE_LIBDE265, false)
 AM_CONDITIONAL(USE_LIBMMS, false)
-AM_CONDITIONAL(USE_LINSYS, false)
 AM_CONDITIONAL(USE_MODPLUG, false)
 AM_CONDITIONAL(USE_MPEG2ENC, false)
 AM_CONDITIONAL(USE_MPLEX, false)
 AM_CONDITIONAL(USE_MUSEPACK, false)
-AM_CONDITIONAL(USE_NAS, false)
 AM_CONDITIONAL(USE_NEON, false)
 AM_CONDITIONAL(USE_OFA, false)
 AM_CONDITIONAL(USE_OPENAL, false)
@@ -3558,12 +3353,8 @@ AM_CONDITIONAL(USE_OPENEXR, false)
 AM_CONDITIONAL(USE_OPENJPEG, false)
 AM_CONDITIONAL(USE_OPENNI2, false)
 AM_CONDITIONAL(USE_OPUS, false)
-AM_CONDITIONAL(USE_PVR, false)
 AM_CONDITIONAL(USE_QT, false)
-AM_CONDITIONAL(USE_LIBVISUAL, false)
-AM_CONDITIONAL(USE_TIMIDITY, false)
 AM_CONDITIONAL(USE_WILDMIDI, false)
-AM_CONDITIONAL(USE_SDL, false)
 AM_CONDITIONAL(USE_SMOOTHSTREAMING, false)
 AM_CONDITIONAL(USE_SNDFILE, false)
 AM_CONDITIONAL(USE_SOUNDTOUCH, false)
@@ -3571,9 +3362,7 @@ AM_CONDITIONAL(USE_SPANDSP, false)
 AM_CONDITIONAL(USE_SPC, false)
 AM_CONDITIONAL(USE_SRTP, false)
 AM_CONDITIONAL(USE_GME, false)
-AM_CONDITIONAL(USE_XVID, false)
 AM_CONDITIONAL(USE_DVB, false)
-AM_CONDITIONAL(USE_WININET, false)
 AM_CONDITIONAL(USE_ACM, false)
 AM_CONDITIONAL(USE_VDPAU, false)
 AM_CONDITIONAL(USE_SBC, false)
@@ -3582,7 +3371,6 @@ AM_CONDITIONAL(USE_ZBAR, false)
 AM_CONDITIONAL(USE_RSVG, false)
 AM_CONDITIONAL(USE_RTMP, false)
 AM_CONDITIONAL(USE_TELETEXTDEC, false)
-AM_CONDITIONAL(USE_SNDIO, false)
 AM_CONDITIONAL(USE_UVCH264, false)
 AM_CONDITIONAL(USE_WEBP, false)
 AM_CONDITIONAL(USE_WEBRTCDSP, false)
@@ -3690,13 +3478,10 @@ gst/audiovisualizers/Makefile
 gst/autoconvert/Makefile
 gst/bayer/Makefile
 gst/camerabin2/Makefile
-gst/cdxaparse/Makefile
 gst/coloreffects/Makefile
-gst/dccp/Makefile
 gst/debugutils/Makefile
 gst/dvbsuboverlay/Makefile
 gst/dvdspu/Makefile
-gst/faceoverlay/Makefile
 gst/festival/Makefile
 gst/fieldanalysis/Makefile
 gst/freeverb/Makefile
@@ -3704,7 +3489,6 @@ gst/frei0r/Makefile
 gst/gaudieffects/Makefile
 gst/geometrictransform/Makefile
 gst/gdp/Makefile
-gst/hdvparse/Makefile
 gst/id3tag/Makefile
 gst/inter/Makefile
 gst/interlace/Makefile
@@ -3719,17 +3503,13 @@ gst/mpegtsdemux/Makefile
 gst/mpegtsmux/Makefile
 gst/mpegtsmux/tsmux/Makefile
 gst/mpegpsmux/Makefile
-gst/mve/Makefile
 gst/mxf/Makefile
 gst/netsim/Makefile
-gst/nuvdemux/Makefile
 gst/onvif/Makefile
-gst/patchdetect/Makefile
 gst/pcapparse/Makefile
 gst/pnm/Makefile
 gst/rawparse/Makefile
 gst/removesilence/Makefile
-gst/sdi/Makefile
 gst/sdp/Makefile
 gst/segmentclip/Makefile
 gst/siren/Makefile
@@ -3737,7 +3517,6 @@ gst/smooth/Makefile
 gst/speed/Makefile
 gst/subenc/Makefile
 gst/stereo/Makefile
-gst/tta/Makefile
 gst/timecode/Makefile
 gst/videofilters/Makefile
 gst/videoparsers/Makefile
@@ -3787,7 +3566,6 @@ sys/dshowvideosink/Makefile
 sys/dvb/Makefile
 sys/fbdev/Makefile
 sys/kms/Makefile
-sys/linsys/Makefile
 sys/msdk/Makefile
 sys/nvenc/Makefile
 sys/opensles/Makefile
@@ -3796,9 +3574,7 @@ sys/tinyalsa/Makefile
 sys/uvch264/Makefile
 sys/vcd/Makefile
 sys/vdpau/Makefile
-sys/pvr2d/Makefile
 sys/wasapi/Makefile
-sys/wininet/Makefile
 sys/winks/Makefile
 sys/winscreencap/Makefile
 tests/Makefile
@@ -3835,7 +3611,6 @@ tests/icles/Makefile
 ext/voamrwbenc/Makefile
 ext/voaacenc/Makefile
 ext/assrender/Makefile
-ext/apexsink/Makefile
 ext/bs2b/Makefile
 ext/bz2/Makefile
 ext/chromaprint/Makefile
@@ -3861,13 +3636,11 @@ ext/ladspa/Makefile
 ext/lv2/Makefile
 ext/libde265/Makefile
 ext/libmms/Makefile
-ext/libvisual/Makefile
 ext/Makefile
 ext/modplug/Makefile
 ext/mpeg2enc/Makefile
 ext/mplex/Makefile
 ext/musepack/Makefile
-ext/nas/Makefile
 ext/neon/Makefile
 ext/ofa/Makefile
 ext/openal/Makefile
@@ -3883,23 +3656,20 @@ ext/resindvd/Makefile
 ext/rtmp/Makefile
 ext/sbc/Makefile
 ext/schroedinger/Makefile
-ext/sdl/Makefile
 ext/smoothstreaming/Makefile
 ext/sndfile/Makefile
 ext/soundtouch/Makefile
 ext/spandsp/Makefile
-ext/sndio/Makefile
 ext/srtp/Makefile
 ext/teletextdec/Makefile
 ext/gme/Makefile
 ext/spc/Makefile
-ext/timidity/Makefile
+ext/wildmidi/Makefile
 ext/vulkan/Makefile
 ext/vulkan/xcb/Makefile
 ext/vulkan/wayland/Makefile
 ext/webp/Makefile
 ext/x265/Makefile
-ext/xvid/Makefile
 ext/zbar/Makefile
 ext/dtls/Makefile
 ext/webrtcdsp/Makefile
index 87dbd46..69e8f88 100644 (file)
@@ -103,10 +103,7 @@ EXTRA_HFILES = \
        $(top_srcdir)/ext/rtmp/gstrtmpsink.h \
        $(top_srcdir)/ext/spandsp/gstspanplc.h \
        $(top_srcdir)/ext/spandsp/gstdtmfdetect.h \
-       $(top_srcdir)/ext/sdl/sdlaudiosink.h \
-       $(top_srcdir)/ext/sdl/sdlvideosink.h \
-       $(top_srcdir)/ext/timidity/gsttimidity.h \
-       $(top_srcdir)/ext/timidity/gstwildmidi.h \
+       $(top_srcdir)/ext/wildmidi/gstwildmidi.h \
        $(top_srcdir)/ext/voaacenc/gstvoaacenc.h \
        $(top_srcdir)/ext/voamrwbenc/gstvoamrwbenc.h \
        $(top_srcdir)/ext/webrtcdsp/gstwebrtcdsp.h \
@@ -121,10 +118,6 @@ EXTRA_HFILES = \
        $(top_srcdir)/gst/audiovisualizers/gstwavescope.h \
        $(top_srcdir)/gst/camerabin2/gstcamerabin2.h \
        $(top_srcdir)/gst/coloreffects/gstcoloreffects.h \
-       $(top_srcdir)/gst/dccp/gstdccpclientsink.h \
-       $(top_srcdir)/gst/dccp/gstdccpclientsrc.h \
-       $(top_srcdir)/gst/dccp/gstdccpserversink.h \
-       $(top_srcdir)/gst/dccp/gstdccpserversrc.h \
        $(top_srcdir)/gst/debugutils/fpsdisplaysink.h \
        $(top_srcdir)/gst/dvdspu/gstdvdspu.h \
        $(top_srcdir)/gst/festival/gstfestival.h \
@@ -156,7 +149,6 @@ EXTRA_HFILES = \
        $(top_srcdir)/gst/mpegtsmux/mpegtsmux.h \
        $(top_srcdir)/gst/mxf/mxfdemux.h \
        $(top_srcdir)/gst/mxf/mxfmux.h \
-       $(top_srcdir)/gst/nuvdemux/gstnuvdemux.h \
        $(top_srcdir)/gst/pcapparse/gstpcapparse.h \
        $(top_srcdir)/gst/rawparse/gstaudioparse.h \
        $(top_srcdir)/gst/rawparse/gstvideoparse.h \
index 1e4a5cf..8d420a3 100644 (file)
@@ -836,62 +836,6 @@ gst_dc1394_get_type
 </SECTION>
 
 <SECTION>
-<FILE>element-dccpclientsink</FILE>
-<TITLE>dccpclientsink</TITLE>
-GstDCCPClientSink
-<SUBSECTION Standard>
-GstDCCPClientSinkClass
-GST_DCCP_CLIENT_SINK
-GST_DCCP_CLIENT_SINK_CLASS
-GST_IS_DCCP_CLIENT_SINK
-GST_IS_DCCP_CLIENT_SINK_CLASS
-GST_TYPE_DCCP_CLIENT_SINK
-gst_dccp_client_sink_get_type
-</SECTION>
-
-<SECTION>
-<FILE>element-dccpclientsrc</FILE>
-<TITLE>dccpclientsrc</TITLE>
-GstDCCPClientSrc
-<SUBSECTION Standard>
-GstDCCPClientSrcClass
-GST_DCCP_CLIENT_SRC
-GST_DCCP_CLIENT_SRC_CLASS
-GST_IS_DCCP_CLIENT_SRC
-GST_IS_DCCP_CLIENT_SRC_CLASS
-GST_TYPE_DCCP_CLIENT_SRC
-gst_dccp_client_src_get_type
-</SECTION>
-
-<SECTION>
-<FILE>element-dccpserversink</FILE>
-<TITLE>dccpserversink</TITLE>
-GstDCCPServerSink
-<SUBSECTION Standard>
-GstDCCPServerSinkClass
-GST_DCCP_SERVER_SINK
-GST_DCCP_SERVER_SINK_CLASS
-GST_IS_DCCP_SERVER_SINK
-GST_IS_DCCP_SERVER_SINK_CLASS
-GST_TYPE_DCCP_SERVER_SINK
-gst_dccp_server_sink_get_type
-</SECTION>
-
-<SECTION>
-<FILE>element-dccpserversrc</FILE>
-<TITLE>dccpserversrc</TITLE>
-GstDCCPServerSrc
-<SUBSECTION Standard>
-GstDCCPServerSrcClass
-GST_DCCP_SERVER_SRC
-GST_DCCP_SERVER_SRC_CLASS
-GST_IS_DCCP_SERVER_SRC
-GST_IS_DCCP_SERVER_SRC_CLASS
-GST_TYPE_DCCP_SERVER_SRC
-gst_dccp_server_src_get_type
-</SECTION>
-
-<SECTION>
 <FILE>element-debugspy</FILE>
 <TITLE>debugspy</TITLE>
 GstDebugSpy
@@ -2818,21 +2762,6 @@ gst_net_sim_get_type
 </SECTION>
 
 <SECTION>
-<FILE>element-nuvdemux</FILE>
-<TITLE>nuvdemux</TITLE>
-GstNuvDemux
-<SUBSECTION Standard>
-GstNuvDemuxClass
-GstNuvDemuxState
-GST_NUV_DEMUX
-GST_NUV_DEMUX_CLASS
-GST_IS_NUV_DEMUX
-GST_IS_NUV_DEMUX_CLASS
-GST_TYPE_NUV_DEMUX
-gst_nuv_demux_get_type
-</SECTION>
-
-<SECTION>
 <FILE>element-neonhttpsrc</FILE>
 <TITLE>neonhttpsrc</TITLE>
 GstNeonhttpSrc
@@ -3297,37 +3226,6 @@ gst_rtp_onvif_timestamp_get_type
 </SECTION>
 
 <SECTION>
-<FILE>element-sdlaudiosink</FILE>
-<TITLE>sdlaudiosink</TITLE>
-GstSDLAudioSink
-<SUBSECTION Standard>
-GstSDLAudioSinkClass
-GST_SDLAUDIOSINK
-GST_SDLAUDIOSINK_CLASS
-GST_IS_SDLAUDIOSINK
-GST_IS_SDLAUDIOSINK_CLASS
-GST_TYPE_SDLAUDIOSINK
-gst_sdlaudio_sink_get_type
-<SUBSECTION Private>
-gstsdl_semaphore
-</SECTION>
-
-<SECTION>
-<FILE>element-sdlvideosink</FILE>
-<TITLE>sdlvideosink</TITLE>
-GstSDLVideoSink
-<SUBSECTION Standard>
-GstSDLVideoSinkFlags
-GstSDLVideoSinkClass
-GST_SDLVIDEOSINK
-GST_SDLVIDEOSINK_CLASS
-GST_IS_SDLVIDEOSINK
-GST_IS_SDLVIDEOSINK_CLASS
-GST_TYPE_SDLVIDEOSINK
-gst_sdlvideosink_get_type
-</SECTION>
-
-<SECTION>
 <FILE>element-sdpdemux</FILE>
 <TITLE>sdpdemux</TITLE>
 GstSDPDemux
@@ -3842,20 +3740,6 @@ gst_tone_generate_src_get_type
 </SECTION>
 
 <SECTION>
-<FILE>element-timidity</FILE>
-<TITLE>timidity</TITLE>
-GstTimidity
-<SUBSECTION Standard>
-GstTimidityClass
-GST_TIMIDITY
-GST_TIMIDITY_CLASS
-GST_IS_TIMIDITY
-GST_IS_TIMIDITY_CLASS
-GST_TYPE_TIMIDITY
-gst_timidity_get_type
-</SECTION>
-
-<SECTION>
 <FILE>element-tunnel</FILE>
 <TITLE>tunnel</TITLE>
 GstTunnel
index 7fecee4..87145c2 100644 (file)
@@ -33,38 +33,6 @@ gint64  arg3
 </SIGNAL>
 
 <SIGNAL>
-<NAME>GstDCCPClientSrc::connected</NAME>
-<RETURNS>void</RETURNS>
-<FLAGS>f</FLAGS>
-GstDCCPClientSrc *gstdccpclientsrc
-gint  arg1
-</SIGNAL>
-
-<SIGNAL>
-<NAME>GstDCCPServerSink::connected</NAME>
-<RETURNS>void</RETURNS>
-<FLAGS>f</FLAGS>
-GstDCCPServerSink *gstdccpserversink
-gint  arg1
-</SIGNAL>
-
-<SIGNAL>
-<NAME>GstDCCPClientSink::connected</NAME>
-<RETURNS>void</RETURNS>
-<FLAGS>f</FLAGS>
-GstDCCPClientSink *gstdccpclientsink
-gint  arg1
-</SIGNAL>
-
-<SIGNAL>
-<NAME>GstDCCPServerSrc::connected</NAME>
-<RETURNS>void</RETURNS>
-<FLAGS>f</FLAGS>
-GstDCCPServerSrc *gstdccpserversrc
-gint  arg1
-</SIGNAL>
-
-<SIGNAL>
 <NAME>GstCameraBin::img-done</NAME>
 <RETURNS>gboolean</RETURNS>
 <FLAGS>l</FLAGS>
index fdce19e..534b9ac 100644 (file)
@@ -10,12 +10,6 @@ else
 VOAMRWBENC_DIR =
 endif
 
-if USE_APEXSINK
-APEXSINK_DIR = apexsink
-else
-APEXSINK_DIR =
-endif
-
 if USE_BS2B
 BS2B_DIR=bs2b
 else
@@ -178,12 +172,6 @@ else
 LIBMMS_DIR=
 endif
 
-if USE_LIBVISUAL
-LIBVISUAL_DIR=libvisual
-else
-LIBVISUAL_DIR=
-endif
-
 if USE_MODPLUG
 MODPLUG_DIR=modplug
 else
@@ -208,12 +196,6 @@ else
 MUSEPACK_DIR=
 endif
 
-if USE_NAS
-NAS_DIR=nas
-else
-NAS_DIR=
-endif
-
 if USE_NEON
 NEON_DIR=neon
 else
@@ -274,18 +256,12 @@ else
 RSVG_DIR=
 endif
 
-if USE_TIMIDITY
-TIMIDITY_DIR=timidity
-endif
-
 if USE_WILDMIDI
-TIMIDITY_DIR=timidity
+WILDMIDI_DIR=wildmidi
 endif
 
 if !USE_WILDMIDI
-if !USE_TIMIDITY
-TIMIDITY_DIR=
-endif
+WILDMIDI_DIR=
 endif
 
 if USE_FLUIDSYNTH
@@ -304,12 +280,6 @@ else
 SCHRO_DIR=
 endif
 
-if USE_SDL
-SDL_DIR=sdl
-else
-SDL_DIR=
-endif
-
 if USE_SMOOTHSTREAMING
 SMOOTHSTREAMING_DIR = smoothstreaming
 else
@@ -328,12 +298,6 @@ else
 SNDFILE_DIR=
 endif
 
-if USE_SNDIO
-SNDIO_DIR = sndio
-else
-SNDIO_DIR =
-endif
-
 if USE_SOUNDTOUCH
 SOUNDTOUCH_DIR=soundtouch
 else
@@ -370,12 +334,6 @@ else
 TELETEXTDEC_DIR=
 endif
 
-if USE_XVID
-XVID_DIR=xvid
-else
-XVID_DIR=
-endif
-
 if USE_ZBAR
 ZBAR_DIR=zbar
 else
@@ -434,7 +392,6 @@ SUBDIRS=\
        $(VOAACENC_DIR) \
        $(ASSRENDER_DIR) \
        $(VOAMRWBENC_DIR) \
-       $(APEXSINK_DIR) \
        $(AUDIOFILE_DIR) \
        $(BS2B_DIR) \
        $(BZ2_DIR) \
@@ -463,12 +420,10 @@ SUBDIRS=\
        $(LV2_DIR) \
        $(LIBDE265_DIR) \
        $(LIBMMS_DIR) \
-       $(LIBVISUAL_DIR) \
        $(MODPLUG_DIR) \
        $(MPEG2ENC_DIR) \
        $(MPLEX_DIR) \
        $(MUSEPACK_DIR) \
-       $(NAS_DIR) \
        $(NEON_DIR) \
        $(OFA_DIR) \
        $(OPENAL_DIR) \
@@ -481,19 +436,16 @@ SUBDIRS=\
        $(RSVG_DIR) \
        $(SBC_DIR) \
        $(SCHRO_DIR) \
-       $(SDL_DIR) \
        $(SMOOTHSTREAMING_DIR) \
        $(SMOOTHWAVE_DIR) \
        $(SNDFILE_DIR) \
-       $(SNDIO_DIR) \
        $(SOUNDTOUCH_DIR) \
        $(SPANDSP_DIR) \
        $(GME_DIR) \
        $(SPC_DIR) \
        $(SRTP_DIR) \
        $(TELETEXTDEC_DIR) \
-       $(TIMIDITY_DIR) \
-       $(XVID_DIR) \
+       $(WILDMIDI_DIR) \
        $(ZBAR_DIR) \
        $(RTMP_DIR) \
        $(HLS_DIR) \
@@ -506,7 +458,6 @@ SUBDIRS=\
 
 DIST_SUBDIRS = \
        assrender \
-       apexsink \
        bs2b \
        bz2 \
        chromaprint \
@@ -527,7 +478,6 @@ DIST_SUBDIRS = \
        kate \
        libde265 \
        libmms \
-       libvisual \
        lv2 \
        daala \
        dts \
@@ -538,7 +488,6 @@ DIST_SUBDIRS = \
        mpeg2enc \
        mplex \
        musepack \
-       nas \
        neon \
        ofa \
        openal \
@@ -552,20 +501,17 @@ DIST_SUBDIRS = \
        resindvd \
        sbc \
        schroedinger \
-       sdl \
        smoothstreaming \
        sndfile \
-       sndio \
        soundtouch \
        spandsp \
        spc \
        srtp \
        gme \
        teletextdec \
-       timidity \
+       wildmidi \
        voaacenc \
        voamrwbenc \
-       xvid \
        zbar \
        rtmp \
        webp \
diff --git a/ext/apexsink/LGPL-3.0.txt b/ext/apexsink/LGPL-3.0.txt
deleted file mode 100644 (file)
index fc8a5de..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions. 
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version. 
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
diff --git a/ext/apexsink/Makefile.am b/ext/apexsink/Makefile.am
deleted file mode 100644 (file)
index f799c07..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-plugin_LTLIBRARIES = libgstapexsink.la
-
-libgstapexsink_la_SOURCES = gstapexplugin.c gstapexraop.c gstapexsink.c
-libgstapexsink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
-       $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(APEXSINK_CFLAGS)
-libgstapexsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-       -lgstaudio-$(GST_API_VERSION) -lgstinterfaces-$(GST_API_VERSION) \
-       $(GST_BASE_LIBS) $(GST_LIBS) $(APEXSINK_LIBS)
-libgstapexsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstapexsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstapexraop.h gstapexsink.h
diff --git a/ext/apexsink/gstapexplugin.c b/ext/apexsink/gstapexplugin.c
deleted file mode 100644 (file)
index a6d64a8..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* GStreamer AirPort Express Plugin
- *
- * Copyright (C) 2008 Jérémie Bernard [GRemi] <gremimail@gmail.com>
- *
- * gstapexpugin.c
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gstapexsink.h>
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return gst_element_register (plugin, GST_APEX_SINK_NAME, GST_RANK_NONE,
-      GST_TYPE_APEX_SINK);
-}
-
-/* plugin export resolution */
-GST_PLUGIN_DEFINE
-    (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    apexsink,
-    "Apple AirPort Express Plugin",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/apexsink/gstapexraop.c b/ext/apexsink/gstapexraop.c
deleted file mode 100644 (file)
index af4f573..0000000
+++ /dev/null
@@ -1,798 +0,0 @@
-/* GStreamer - Remote Audio Access Protocol (RAOP) as used in Apple iTunes to stream music to the Airport Express (ApEx) -
- *
- * RAOP is based on the Real Time Streaming Protocol (RTSP) but with an extra challenge-response RSA based authentication step.
- * This interface accepts RAW PCM data and set it as AES encrypted ALAC while performing emission.
- *
- * Copyright (C) 2008 Jérémie Bernard [GRemi] <gremimail@gmail.com>
- *
- * gstapexraop.c
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gstapexraop.h"
-
-/* private constants */
-#define GST_APEX_RAOP_VOLUME_MIN       -144
-#define GST_APEX_RAOP_VOLUME_MAX        0
-
-#define GST_APEX_RAOP_HDR_DEFAULT_LENGTH 1024
-#define GST_APEX_RAOP_SDP_DEFAULT_LENGTH 2048
-
-const static gchar GST_APEX_RAOP_RSA_PUBLIC_MOD[] =
-    "59dE8qLieItsH1WgjrcFRKj6eUWqi+bGLOX1HL3U3GhC/j0Qg90u3sG/1CUtwC"
-    "5vOYvfDmFI6oSFXi5ELabWJmT2dKHzBJKa3k9ok+8t9ucRqMd6DZHJ2YCCLlDR"
-    "KSKv6kDqnw4UwPdpOMXziC/AMj3Z/lUVX1G7WSHCAWKf1zNS1eLvqr+boEjXuB"
-    "OitnZ/bDzPHrTOZz0Dew0uowxf/+sG+NCK3eQJVxqcaJ/vEHKIVd2M+5qL71yJ"
-    "Q+87X6oV3eaYvt3zWZYD6z5vYTcrtij2VZ9Zmni/UAaHqn9JdsBWLUEpVviYnh"
-    "imNVvYFZeCXg/IdTQ+x4IRdiXNv5hEew==";
-
-const static gchar GST_APEX_RAOP_RSA_PUBLIC_EXP[] = "AQAB";
-
-const static gchar GST_APEX_RAOP_USER_AGENT[] =
-    "iTunes/4.6 (Macintosh; U; PPC Mac OS X 10.3)";
-
-const static guchar GST_APEX_RAOP_FRAME_HEADER[] = {    // Used by gen. 1
-  0x24, 0x00, 0x00, 0x00,
-  0xF0, 0xFF, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00
-};
-
-const static int GST_APEX_RAOP_FRAME_HEADER_SIZE = 16;  // Used by gen. 1
-const static int GST_APEX_RTP_FRAME_HEADER_SIZE = 12;   // Used by gen. 2
-
-const static int GST_APEX_RAOP_ALAC_HEADER_SIZE = 3;
-
-/* string extra utility */
-static gint
-g_strdel (gchar * str, gchar rc)
-{
-  int i = 0, j = 0, len, num = 0;
-  len = strlen (str);
-  while (i < len) {
-    if (str[i] == rc) {
-      for (j = i; j < len; j++)
-        str[j] = str[j + 1];
-      len--;
-      num++;
-    } else {
-      i++;
-    }
-  }
-  return num;
-}
-
-/* socket utilities */
-static int
-gst_apexraop_send (int desc, void *data, size_t len)
-{
-  int total = 0, bytesleft = len, n = 0;
-
-  while (total < len) {
-    n = send (desc, ((const char *) data) + total, bytesleft, 0);
-    if (n == -1)
-      break;
-    total += n;
-    bytesleft -= n;
-  }
-
-  return n == -1 ? -1 : total;
-}
-
-static int
-gst_apexraop_recv (int desc, void *data, size_t len)
-{
-  memset (data, 0, len);
-  return recv (desc, data, len, 0);
-}
-
-/* public opaque handle resolution */
-typedef struct
-{
-  guchar aes_ky[AES_BLOCK_SIZE];        /* AES random key */
-  guchar aes_iv[AES_BLOCK_SIZE];        /* AES random initial vector */
-
-  guchar url_abspath[16];       /* header url random absolute path addon, ANNOUNCE id */
-  gint cseq;                    /* header rtsp inc cseq */
-  guchar cid[24];               /* header client instance id */
-  gchar *session;               /* header raop negotiated session id, once SETUP performed */
-  gchar *ua;                    /* header user agent */
-
-  GstApExJackType jack_type;    /* APEX connected jack type, once ANNOUNCE performed */
-  GstApExJackStatus jack_status;        /* APEX connected jack status, once ANNOUNCE performed */
-
-  GstApExGeneration generation; /* Different devices accept different audio streams */
-  GstApExTransportProtocol transport_protocol;  /* For media stream, not RAOP/RTSP */
-
-  gchar *host;                  /* APEX target ip */
-  guint ctrl_port;              /* APEX target control port */
-  guint data_port;              /* APEX negotiated data port, once SETUP performed */
-
-  int ctrl_sd;                  /* control socket */
-  struct sockaddr_in ctrl_sd_in;
-
-  int data_sd;                  /* data socket */
-  struct sockaddr_in data_sd_in;
-
-  short rtp_seq_num;            /* RTP sequence number, used by gen. 2 */
-  int rtp_timestamp;            /* RTP timestamp,       used by gen. 2 */
-}
-_GstApExRAOP;
-
-/* raop apex struct allocation */
-GstApExRAOP *
-gst_apexraop_new (const gchar * host,
-    const guint16 port,
-    const GstApExGeneration generation,
-    const GstApExTransportProtocol transport_protocol)
-{
-  _GstApExRAOP *apexraop;
-
-  apexraop = (_GstApExRAOP *) g_malloc0 (sizeof (_GstApExRAOP));
-
-  apexraop->host = g_strdup (host);
-  apexraop->ctrl_port = port;
-  apexraop->ua = g_strdup (GST_APEX_RAOP_USER_AGENT);
-  apexraop->jack_type = GST_APEX_JACK_TYPE_UNDEFINED;
-  apexraop->jack_status = GST_APEX_JACK_STATUS_DISCONNECTED;
-  apexraop->generation = generation;
-  apexraop->transport_protocol = transport_protocol;
-  apexraop->rtp_seq_num = 0;
-  apexraop->rtp_timestamp = 0;
-
-  return (GstApExRAOP *) apexraop;
-}
-
-/* raop apex struct freeing */
-void
-gst_apexraop_free (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-  conn = (_GstApExRAOP *) con;
-
-  g_free (conn->host);
-  g_free (conn->session);
-  g_free (conn->ua);
-  g_free (conn);
-}
-
-/* host affectation */
-void
-gst_apexraop_set_host (GstApExRAOP * con, const gchar * host)
-{
-  _GstApExRAOP *conn;
-  conn = (_GstApExRAOP *) con;
-
-  g_free (conn->host);
-  conn->host = g_strdup (host);
-}
-
-/* host reader */
-gchar *
-gst_apexraop_get_host (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-  conn = (_GstApExRAOP *) con;
-
-  return g_strdup (conn->host);
-}
-
-/* control port affectation */
-void
-gst_apexraop_set_port (GstApExRAOP * con, const guint16 port)
-{
-  _GstApExRAOP *conn;
-  conn = (_GstApExRAOP *) con;
-
-  conn->ctrl_port = port;
-}
-
-/* control port reader */
-guint16
-gst_apexraop_get_port (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-  conn = (_GstApExRAOP *) con;
-
-  return conn->ctrl_port;
-}
-
-/* user agent affectation */
-void
-gst_apexraop_set_useragent (GstApExRAOP * con, const gchar * useragent)
-{
-  _GstApExRAOP *conn;
-  conn = (_GstApExRAOP *) con;
-
-  g_free (conn->ua);
-  conn->ua = g_strdup (useragent);
-}
-
-/* user agent reader */
-gchar *
-gst_apexraop_get_useragent (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-  conn = (_GstApExRAOP *) con;
-
-  return g_strdup (conn->ua);
-}
-
-/* raop apex connection sequence */
-GstRTSPStatusCode
-gst_apexraop_connect (GstApExRAOP * con)
-{
-  gchar *ac, *ky, *iv, *s, inaddr[INET_ADDRSTRLEN],
-      creq[GST_APEX_RAOP_SDP_DEFAULT_LENGTH],
-      hreq[GST_APEX_RAOP_HDR_DEFAULT_LENGTH], *req;
-  RSA *rsa;
-  guchar *mod, *exp, rsakey[512];
-  union gst_randbytes
-  {
-    struct asvals
-    {
-      guint32 url_key;
-      guint64 conn_id;
-      guchar challenge[16];
-    } v;
-    guchar buf[4 + 8 + 16];
-  } randbuf;
-  gsize size;
-  struct sockaddr_in ioaddr;
-  socklen_t iolen;
-  GstRTSPStatusCode res;
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  if ((conn->ctrl_sd = socket (AF_INET, SOCK_STREAM, 0)) < 0)
-    return GST_RTSP_STS_DESTINATION_UNREACHABLE;
-
-  conn->ctrl_sd_in.sin_family = AF_INET;
-  conn->ctrl_sd_in.sin_port = htons (conn->ctrl_port);
-
-  if (!inet_aton (conn->host, &conn->ctrl_sd_in.sin_addr)) {
-    struct hostent *hp = (struct hostent *) gethostbyname (conn->host);
-    if (hp == NULL)
-      return GST_RTSP_STS_DESTINATION_UNREACHABLE;
-    memcpy (&conn->ctrl_sd_in.sin_addr, hp->h_addr, hp->h_length);
-  }
-
-  if (connect (conn->ctrl_sd, (struct sockaddr *) &conn->ctrl_sd_in,
-          sizeof (conn->ctrl_sd_in)) < 0)
-    return GST_RTSP_STS_DESTINATION_UNREACHABLE;
-
-  RAND_bytes (randbuf.buf, sizeof (randbuf));
-  sprintf ((gchar *) conn->url_abspath, "%u", randbuf.v.url_key);
-  sprintf ((char *) conn->cid, "%16" G_GINT64_MODIFIER "x", randbuf.v.conn_id);
-
-  RAND_bytes (conn->aes_ky, AES_BLOCK_SIZE);
-  RAND_bytes (conn->aes_iv, AES_BLOCK_SIZE);
-
-  rsa = RSA_new ();
-  mod = g_base64_decode (GST_APEX_RAOP_RSA_PUBLIC_MOD, &size);
-  rsa->n = BN_bin2bn (mod, size, NULL);
-  exp = g_base64_decode (GST_APEX_RAOP_RSA_PUBLIC_EXP, &size);
-  rsa->e = BN_bin2bn (exp, size, NULL);
-  size =
-      RSA_public_encrypt (AES_BLOCK_SIZE, conn->aes_ky, rsakey, rsa,
-      RSA_PKCS1_OAEP_PADDING);
-
-  ky = g_base64_encode (rsakey, size);
-  iv = g_base64_encode (conn->aes_iv, AES_BLOCK_SIZE);
-  g_strdel (ky, '=');
-  g_strdel (iv, '=');
-
-  iolen = sizeof (struct sockaddr);
-  getsockname (conn->ctrl_sd, (struct sockaddr *) &ioaddr, &iolen);
-  inet_ntop (AF_INET, &(ioaddr.sin_addr), inaddr, INET_ADDRSTRLEN);
-
-  ac = g_base64_encode (randbuf.v.challenge, 16);
-  g_strdel (ac, '=');
-
-  sprintf (creq,
-      "v=0\r\n"
-      "o=iTunes %s 0 IN IP4 %s\r\n"
-      "s=iTunes\r\n"
-      "c=IN IP4 %s\r\n"
-      "t=0 0\r\n"
-      "m=audio 0 RTP/AVP 96\r\n"
-      "a=rtpmap:96 AppleLossless\r\n"
-      "a=fmtp:96 %d 0 %d 40 10 14 %d 255 0 0 %d\r\n"
-      "a=rsaaeskey:%s\r\n"
-      "a=aesiv:%s\r\n",
-      conn->url_abspath,
-      inaddr,
-      conn->host,
-      conn->generation == GST_APEX_GENERATION_ONE
-      ? GST_APEX_RAOP_V1_SAMPLES_PER_FRAME
-      : GST_APEX_RAOP_V2_SAMPLES_PER_FRAME,
-      GST_APEX_RAOP_BYTES_PER_CHANNEL * 8,
-      GST_APEX_RAOP_CHANNELS, GST_APEX_RAOP_BITRATE, ky, iv);
-
-  sprintf (hreq,
-      "ANNOUNCE rtsp://%s/%s RTSP/1.0\r\n"
-      "CSeq: %d\r\n"
-      "Client-Instance: %s\r\n"
-      "User-Agent: %s\r\n"
-      "Content-Type: application/sdp\r\n"
-      "Content-Length: %u\r\n"
-      "Apple-Challenge: %s\r\n",
-      conn->host,
-      conn->url_abspath, ++conn->cseq, conn->cid, conn->ua,
-      (guint) strlen (creq), ac);
-
-  RSA_free (rsa);
-  g_free (ky);
-  g_free (iv);
-  g_free (ac);
-  g_free (mod);
-  g_free (exp);
-
-  req = g_strconcat (hreq, "\r\n", creq, NULL);
-
-  if (gst_apexraop_send (conn->ctrl_sd, req, strlen (req)) <= 0) {
-    g_free (req);
-    return GST_RTSP_STS_GONE;
-  }
-
-  g_free (req);
-
-  if (gst_apexraop_recv (conn->ctrl_sd, hreq,
-          GST_APEX_RAOP_HDR_DEFAULT_LENGTH) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  {
-    int tmp;
-    sscanf (hreq, "%*s %d", &tmp);
-    res = (GstRTSPStatusCode) tmp;
-  }
-
-  if (res != GST_RTSP_STS_OK)
-    return res;
-
-  s = g_strrstr (hreq, "Audio-Jack-Status");
-
-  if (s != NULL) {
-    gchar status[128];
-    sscanf (s, "%*s %s", status);
-
-    if (strcmp (status, "connected;") == 0)
-      conn->jack_status = GST_APEX_JACK_STATUS_CONNECTED;
-    else if (strcmp (status, "disconnected;") == 0)
-      conn->jack_status = GST_APEX_JACK_STATUS_DISCONNECTED;
-    else
-      conn->jack_status = GST_APEX_JACK_STATUS_UNDEFINED;
-
-    s = g_strrstr (s, "type=");
-
-    if (s != NULL) {
-      strtok (s, "=");
-      s = strtok (NULL, "\n");
-
-      if (strcmp (s, "analog"))
-        conn->jack_type = GST_APEX_JACK_TYPE_ANALOG;
-      else if (strcmp (s, "digital"))
-        conn->jack_type = GST_APEX_JACK_TYPE_DIGITAL;
-      else
-        conn->jack_type = GST_APEX_JACK_TYPE_UNDEFINED;
-    }
-  }
-
-  sprintf (hreq,
-      "SETUP rtsp://%s/%s RTSP/1.0\r\n"
-      "CSeq: %d\r\n"
-      "Client-Instance: %s\r\n"
-      "User-Agent: %s\r\n"
-      "Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record\r\n"
-      "\r\n", conn->host, conn->url_abspath, ++conn->cseq, conn->cid, conn->ua);
-
-  if (gst_apexraop_send (conn->ctrl_sd, hreq, strlen (hreq)) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  if (gst_apexraop_recv (conn->ctrl_sd, hreq,
-          GST_APEX_RAOP_HDR_DEFAULT_LENGTH) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  {
-    int tmp;
-    sscanf (hreq, "%*s %d", &tmp);
-    res = (GstRTSPStatusCode) tmp;
-  }
-
-  if (res != GST_RTSP_STS_OK)
-    return res;
-
-  s = g_strrstr (hreq, "Session");
-
-  if (s != NULL) {
-    gchar session[128];
-    sscanf (s, "%*s %s", session);
-    conn->session = g_strdup (session);
-  } else
-    return GST_RTSP_STS_PRECONDITION_FAILED;
-
-  s = g_strrstr (hreq, "server_port");
-  if (s != NULL) {
-    sscanf (s, "server_port=%d", &conn->data_port);
-  } else
-    return GST_RTSP_STS_PRECONDITION_FAILED;
-
-  sprintf (hreq,
-      "RECORD rtsp://%s/%s RTSP/1.0\r\n"
-      "CSeq: %d\r\n"
-      "Client-Instance: %s\r\n"
-      "User-Agent: %s\r\n"
-      "Session: %s\r\n"
-      "Range: npt=0-\r\n"
-      "RTP-Info: seq=0;rtptime=0\r\n"
-      "\r\n",
-      conn->host,
-      conn->url_abspath, ++conn->cseq, conn->cid, conn->ua, conn->session);
-
-  if (gst_apexraop_send (conn->ctrl_sd, hreq, strlen (hreq)) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  if (gst_apexraop_recv (conn->ctrl_sd, hreq,
-          GST_APEX_RAOP_HDR_DEFAULT_LENGTH) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  {
-    int tmp;
-    sscanf (hreq, "%*s %d", &tmp);
-    res = (GstRTSPStatusCode) tmp;
-  }
-
-  if (res != GST_RTSP_STS_OK)
-    return res;
-
-  if (conn->transport_protocol == GST_APEX_TCP) {
-    if ((conn->data_sd = socket (AF_INET, SOCK_STREAM, 0)) < 0)
-      return GST_RTSP_STS_DESTINATION_UNREACHABLE;
-  } else if (conn->transport_protocol == GST_APEX_UDP) {
-    if ((conn->data_sd = socket (AF_INET, SOCK_DGRAM, 0)) < 0)
-      return GST_RTSP_STS_DESTINATION_UNREACHABLE;
-  } else
-    return GST_RTSP_STS_METHOD_NOT_ALLOWED;
-
-  conn->data_sd_in.sin_family = AF_INET;
-  conn->data_sd_in.sin_port = htons (conn->data_port);
-
-  memcpy (&conn->data_sd_in.sin_addr, &conn->ctrl_sd_in.sin_addr,
-      sizeof (conn->ctrl_sd_in.sin_addr));
-
-  if (connect (conn->data_sd, (struct sockaddr *) &conn->data_sd_in,
-          sizeof (conn->data_sd_in)) < 0)
-    return GST_RTSP_STS_DESTINATION_UNREACHABLE;
-
-  return res;
-}
-
-/* raop apex jack type access */
-GstApExJackType
-gst_apexraop_get_jacktype (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  if (!conn)
-    return GST_APEX_JACK_TYPE_UNDEFINED;
-
-  return conn->jack_type;
-}
-
-/* raop apex jack status access */
-GstApExJackStatus
-gst_apexraop_get_jackstatus (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  if (!conn)
-    return GST_APEX_JACK_STATUS_UNDEFINED;
-
-  return conn->jack_status;
-}
-
-/* raop apex generation access */
-GstApExGeneration
-gst_apexraop_get_generation (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  if (!conn)
-    return GST_APEX_GENERATION_ONE;
-
-  return conn->generation;
-}
-
-/* raop apex transport protocol access */
-GstApExTransportProtocol
-gst_apexraop_get_transport_protocol (GstApExRAOP * con)
-{
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  if (!conn)
-    return GST_APEX_TCP;
-
-  return conn->transport_protocol;
-}
-
-/* raop apex sockets close */
-void
-gst_apexraop_close (GstApExRAOP * con)
-{
-  gchar hreq[GST_APEX_RAOP_HDR_DEFAULT_LENGTH];
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  sprintf (hreq,
-      "TEARDOWN rtsp://%s/%s RTSP/1.0\r\n"
-      "CSeq: %d\r\n"
-      "Client-Instance: %s\r\n"
-      "User-Agent: %s\r\n"
-      "Session: %s\r\n"
-      "\r\n",
-      conn->host,
-      conn->url_abspath, ++conn->cseq, conn->cid, conn->ua, conn->session);
-
-  gst_apexraop_send (conn->ctrl_sd, hreq, strlen (hreq));
-  gst_apexraop_recv (conn->ctrl_sd, hreq, GST_APEX_RAOP_HDR_DEFAULT_LENGTH);
-
-  if (conn->ctrl_sd != 0)
-    close (conn->ctrl_sd);
-  if (conn->data_sd != 0)
-    close (conn->data_sd);
-}
-
-/* raop apex volume set */
-GstRTSPStatusCode
-gst_apexraop_set_volume (GstApExRAOP * con, const guint volume)
-{
-  gint v;
-  gchar creq[GST_APEX_RAOP_SDP_DEFAULT_LENGTH],
-      hreq[GST_APEX_RAOP_HDR_DEFAULT_LENGTH], *req, vol[128];
-  GstRTSPStatusCode res;
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  v = GST_APEX_RAOP_VOLUME_MIN + (GST_APEX_RAOP_VOLUME_MAX -
-      GST_APEX_RAOP_VOLUME_MIN) * volume / 100.;
-  sprintf (vol, "volume: %d.000000\r\n", v);
-
-  sprintf (creq, "%s\r\n", vol);
-
-  sprintf (hreq,
-      "SET_PARAMETER rtsp://%s/%s RTSP/1.0\r\n"
-      "CSeq: %d\r\n"
-      "Client-Instance: %s\r\n"
-      "User-Agent: %s\r\n"
-      "Session: %s\r\n"
-      "Content-Type: text/parameters\r\n"
-      "Content-Length: %u\r\n",
-      conn->host,
-      conn->url_abspath,
-      ++conn->cseq, conn->cid, conn->ua, conn->session, (guint) strlen (creq)
-      );
-
-  req = g_strconcat (hreq, "\r\n", creq, NULL);
-
-  if (gst_apexraop_send (conn->ctrl_sd, req, strlen (req)) <= 0) {
-    g_free (req);
-    return GST_RTSP_STS_GONE;
-  }
-
-  g_free (req);
-
-  if (gst_apexraop_recv (conn->ctrl_sd, hreq,
-          GST_APEX_RAOP_HDR_DEFAULT_LENGTH) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  {
-    int tmp;
-    sscanf (hreq, "%*s %d", &tmp);
-    res = (GstRTSPStatusCode) tmp;
-  }
-
-  return res;
-}
-
-/* raop apex raw data alac encapsulation, encryption and emission, http://wiki.multimedia.cx/index.php?title=Apple_Lossless_Audio_Coding */
-static void inline
-gst_apexraop_write_bits (guchar * buffer, int data, int numbits,
-    int *bit_offset, int *byte_offset)
-{
-  const static guchar masks[] =
-      { 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF };
-
-  if (((*bit_offset) != 0) && (((*bit_offset) + numbits) > 8)) {
-    gint numwritebits;
-    guchar bitstowrite;
-
-    numwritebits = 8 - (*bit_offset);
-    bitstowrite =
-        (guchar) ((data >> (numbits - numwritebits)) << (8 - (*bit_offset) -
-            numwritebits));
-    buffer[(*byte_offset)] |= bitstowrite;
-    numbits -= numwritebits;
-    (*bit_offset) = 0;
-    (*byte_offset)++;
-  }
-
-  while (numbits >= 8) {
-    guchar bitstowrite;
-
-    bitstowrite = (guchar) ((data >> (numbits - 8)) & 0xFF);
-    buffer[(*byte_offset)] |= bitstowrite;
-    numbits -= 8;
-    (*bit_offset) = 0;
-    (*byte_offset)++;
-  }
-
-  if (numbits > 0) {
-    guchar bitstowrite;
-    bitstowrite =
-        (guchar) ((data & masks[numbits]) << (8 - (*bit_offset) - numbits));
-    buffer[(*byte_offset)] |= bitstowrite;
-    (*bit_offset) += numbits;
-    if ((*bit_offset) == 8) {
-      (*byte_offset)++;
-      (*bit_offset) = 0;
-    }
-  }
-}
-
-guint
-gst_apexraop_write (GstApExRAOP * con, gpointer rawdata, guint length)
-{
-  guchar *buffer, *frame_data;
-  gushort len;
-  gint bit_offset, byte_offset, i, out_len, res;
-  EVP_CIPHER_CTX aes_ctx;
-  _GstApExRAOP *conn = (_GstApExRAOP *) con;
-  const int frame_header_size = conn->generation == GST_APEX_GENERATION_ONE
-      ? GST_APEX_RAOP_FRAME_HEADER_SIZE : GST_APEX_RTP_FRAME_HEADER_SIZE;
-
-  buffer =
-      (guchar *) g_malloc0 (frame_header_size +
-      GST_APEX_RAOP_ALAC_HEADER_SIZE + length);
-
-  if (conn->generation == GST_APEX_GENERATION_ONE) {
-    g_assert (frame_header_size == GST_APEX_RAOP_FRAME_HEADER_SIZE);
-    memcpy (buffer, GST_APEX_RAOP_FRAME_HEADER, frame_header_size);
-
-    len = length + frame_header_size + GST_APEX_RAOP_ALAC_HEADER_SIZE - 4;
-
-    buffer[2] = len >> 8;
-    buffer[3] = len & 0xff;
-  } else {
-    /* Gen. 2 uses RTP-like header (RFC 3550). */
-    short network_seq_num;
-    int network_timestamp, unknown_const;
-    static gboolean first = TRUE;
-
-    buffer[0] = 0x80;
-    if (first) {
-      buffer[1] = 0xe0;
-      first = FALSE;
-    } else
-      buffer[1] = 0x60;
-
-    network_seq_num = htons (conn->rtp_seq_num++);
-    memcpy (buffer + 2, &network_seq_num, 2);
-
-    network_timestamp = htons (conn->rtp_timestamp);
-    memcpy (buffer + 4, &network_timestamp, 4);
-    conn->rtp_timestamp += GST_APEX_RAOP_V2_SAMPLES_PER_FRAME;
-
-    unknown_const = 0xdeadbeef;
-    memcpy (buffer + 8, &unknown_const, 4);
-  }
-
-  bit_offset = 0;
-  byte_offset = 0;
-  frame_data = buffer + frame_header_size;
-
-  gst_apexraop_write_bits (frame_data, 1, 3, &bit_offset, &byte_offset);        /* channels, 0 mono, 1 stereo */
-  gst_apexraop_write_bits (frame_data, 0, 4, &bit_offset, &byte_offset);        /* unknown */
-  gst_apexraop_write_bits (frame_data, 0, 8, &bit_offset, &byte_offset);        /* unknown (12 bits) */
-  gst_apexraop_write_bits (frame_data, 0, 4, &bit_offset, &byte_offset);
-  gst_apexraop_write_bits (frame_data, 0, 1, &bit_offset, &byte_offset);        /* has size flag */
-  gst_apexraop_write_bits (frame_data, 0, 2, &bit_offset, &byte_offset);        /* unknown */
-  gst_apexraop_write_bits (frame_data, 1, 1, &bit_offset, &byte_offset);        /* no compression flag */
-
-  for (i = 0; i < length; i += 2) {
-    gst_apexraop_write_bits (frame_data, ((guchar *) rawdata)[i + 1], 8,
-        &bit_offset, &byte_offset);
-    gst_apexraop_write_bits (frame_data, ((guchar *) rawdata)[i], 8,
-        &bit_offset, &byte_offset);
-  }
-
-  EVP_CIPHER_CTX_init (&aes_ctx);
-  EVP_CipherInit_ex (&aes_ctx, EVP_aes_128_cbc (), NULL, conn->aes_ky,
-      conn->aes_iv, AES_ENCRYPT);
-  EVP_CipherUpdate (&aes_ctx, frame_data, &out_len, frame_data, /*( */
-      GST_APEX_RAOP_ALAC_HEADER_SIZE +
-      length /*) / AES_BLOCK_SIZE * AES_BLOCK_SIZE */ );
-  EVP_CIPHER_CTX_cleanup (&aes_ctx);
-
-  res =
-      gst_apexraop_send (conn->data_sd, buffer,
-      frame_header_size + GST_APEX_RAOP_ALAC_HEADER_SIZE + length);
-
-  g_free (buffer);
-
-  return (guint) ((res >=
-          (frame_header_size +
-              GST_APEX_RAOP_ALAC_HEADER_SIZE)) ? (res -
-          frame_header_size - GST_APEX_RAOP_ALAC_HEADER_SIZE) : 0);
-}
-
-/* raop apex buffer flush */
-GstRTSPStatusCode
-gst_apexraop_flush (GstApExRAOP * con)
-{
-  gchar hreq[GST_APEX_RAOP_HDR_DEFAULT_LENGTH];
-  GstRTSPStatusCode res;
-  _GstApExRAOP *conn;
-
-  conn = (_GstApExRAOP *) con;
-
-  sprintf (hreq,
-      "FLUSH rtsp://%s/%s RTSP/1.0\r\n"
-      "CSeq: %d\r\n"
-      "Client-Instance: %s\r\n"
-      "User-Agent: %s\r\n"
-      "Session: %s\r\n"
-      "RTP-Info: seq=%d;rtptime=%d\r\n"
-      "\r\n",
-      conn->host,
-      conn->url_abspath,
-      ++conn->cseq,
-      conn->cid,
-      conn->ua, conn->session, conn->rtp_seq_num, conn->rtp_timestamp);
-
-  if (gst_apexraop_send (conn->ctrl_sd, hreq, strlen (hreq)) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  if (gst_apexraop_recv (conn->ctrl_sd, hreq,
-          GST_APEX_RAOP_HDR_DEFAULT_LENGTH) <= 0)
-    return GST_RTSP_STS_GONE;
-
-  {
-    int tmp;
-    sscanf (hreq, "%*s %d", &tmp);
-    res = (GstRTSPStatusCode) tmp;
-  }
-
-  return res;
-}
diff --git a/ext/apexsink/gstapexraop.h b/ext/apexsink/gstapexraop.h
deleted file mode 100644 (file)
index a4f947e..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/* GStreamer - Remote Audio Access Protocol (RAOP) as used in Apple iTunes to stream music to the Airport Express (ApEx) -
- *
- * RAOP is based on the Real Time Streaming Protocol (RTSP) but with an extra challenge-response RSA based authentication step.
- * This interface accepts RAW PCM data and set it as AES encrypted ALAC while performing emission.
- *
- * Copyright (C) 2008 Jérémie Bernard [GRemi] <gremimail@gmail.com>
- *
- * gstapexraop.h
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GST_APEXRAOP_H__
-#define __GST_APEXRAOP_H__
-
-#include <gst/gst.h>
-#include <gst/rtsp/gstrtspdefs.h>
-
-#include <openssl/rand.h>
-#include <openssl/rsa.h>
-#include <openssl/aes.h>
-#include <openssl/evp.h>
-
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <netinet/in.h>
-#include <netdb.h>
-
-#include <arpa/inet.h>
-
-G_BEGIN_DECLS
-
-/* raop fixed parameters */
-#define GST_APEX_RAOP_BITRATE                          44100
-#define GST_APEX_RAOP_V1_SAMPLES_PER_FRAME             4096
-#define GST_APEX_RAOP_V2_SAMPLES_PER_FRAME             352
-#define GST_APEX_RAOP_BYTES_PER_CHANNEL                        2
-#define GST_APEX_RAOP_CHANNELS                         2
-#define GST_APEX_RAOP_BYTES_PER_SAMPLE                 (GST_APEX_RAOP_CHANNELS * GST_APEX_RAOP_BYTES_PER_CHANNEL)
-
-/* gst associated caps fields specification */
-#define GST_APEX_RAOP_INPUT_TYPE                       "audio/x-raw-int"
-#define GST_APEX_RAOP_INPUT_WIDTH                      "16"
-#define GST_APEX_RAOP_INPUT_DEPTH                      GST_APEX_RAOP_INPUT_WIDTH
-#define GST_APEX_RAOP_INPUT_ENDIAN                     "LITTLE_ENDIAN"
-#define GST_APEX_RAOP_INPUT_CHANNELS                   "2"
-#define GST_APEX_RAOP_INPUT_BIT_RATE                   "44100"
-#define GST_APEX_RAOP_INPUT_SIGNED                     "TRUE"
-
-typedef enum
-{
-  GST_APEX_JACK_TYPE_UNDEFINED = 0,
-  GST_APEX_JACK_TYPE_ANALOG,
-  GST_APEX_JACK_TYPE_DIGITAL,
-}
-GstApExJackType;
-
-typedef enum
-{
-  GST_APEX_JACK_STATUS_UNDEFINED = 0,
-  GST_APEX_JACK_STATUS_DISCONNECTED,
-  GST_APEX_JACK_STATUS_CONNECTED,
-}
-GstApExJackStatus;
-
-typedef enum
-{
-  GST_APEX_GENERATION_ONE = 1,
-  GST_APEX_GENERATION_TWO,
-}
-GstApExGeneration;
-
-typedef enum
-{
-  GST_APEX_TCP = 0,
-  GST_APEX_UDP,
-}
-GstApExTransportProtocol;
-
-/* raop context handle */
-typedef struct
-{
-} GstApExRAOP;
-
-/* host might be null and port might be 0 while instanciating */
-GstApExRAOP *gst_apexraop_new (const gchar * host,
-                               const guint16 port,
-                              const GstApExGeneration generation,
-                              const GstApExTransportProtocol transport_protocol);
-void gst_apexraop_free (GstApExRAOP * conn);
-
-/* must not be connected yet while setting the host target */
-void gst_apexraop_set_host (GstApExRAOP * conn, const gchar * host);
-gchar *gst_apexraop_get_host (GstApExRAOP * conn);
-
-/* must not be connected yet while setting the port target */
-void gst_apexraop_set_port (GstApExRAOP * conn, const guint16 port);
-guint16 gst_apexraop_get_port (GstApExRAOP * conn);
-
-/* optional affectation, default iTunes user agent internaly used */
-void gst_apexraop_set_useragent (GstApExRAOP * conn, const gchar * useragent);
-gchar *gst_apexraop_get_useragent (GstApExRAOP * conn);
-
-/* once allocation and configuration performed, manages the raop ANNOUNCE, SETUP and RECORD sequences, 
- * open both ctrl and data channels */
-GstRTSPStatusCode gst_apexraop_connect (GstApExRAOP * conn);
-
-/* close the currently used session, manages raop TEARDOWN sequence and closes the used sockets */
-void gst_apexraop_close (GstApExRAOP * conn);
-
-/* once connected, set the apex target volume, manages SET_PARAMETER sequence */
-GstRTSPStatusCode gst_apexraop_set_volume (GstApExRAOP * conn,
-    const guint volume);
-
-/* write raw samples typed as defined by the fixed raop parameters, flush the apex buffer */
-guint gst_apexraop_write (GstApExRAOP * conn, gpointer rawdata, guint length);
-GstRTSPStatusCode gst_apexraop_flush (GstApExRAOP * conn);
-
-/* retrieve the connected apex jack type and status */
-GstApExJackType gst_apexraop_get_jacktype (GstApExRAOP * conn);
-GstApExJackStatus gst_apexraop_get_jackstatus (GstApExRAOP * conn);
-
-/* retrieve the generation */
-GstApExGeneration gst_apexraop_get_generation (GstApExRAOP * conn);
-
-/* retrieve the transport protocol */
-GstApExTransportProtocol gst_apexraop_get_transport_protocol (GstApExRAOP * conn);
-
-G_END_DECLS
-
-#endif
-
diff --git a/ext/apexsink/gstapexsink.c b/ext/apexsink/gstapexsink.c
deleted file mode 100644 (file)
index df5c5f2..0000000
+++ /dev/null
@@ -1,665 +0,0 @@
-/* GStreamer - AirPort Express Audio Sink -
- *
- * Remote Audio Access Protocol (RAOP) as used in Apple iTunes to stream music to the Airport Express (ApEx) -
- * RAOP is based on the Real Time Streaming Protocol (RTSP) but with an extra challenge-response RSA based authentication step.
- *
- * RAW PCM input only as defined by the following GST_STATIC_PAD_TEMPLATE
- *
- * Copyright (C) 2008 Jérémie Bernard [GRemi] <gremimail@gmail.com>
- *
- * gstapexsink.c 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gstapexsink.h"
-
-GST_DEBUG_CATEGORY_STATIC (apexsink_debug);
-#define GST_CAT_DEFAULT apexsink_debug
-
-static GstStaticPadTemplate gst_apexsink_sink_factory = GST_STATIC_PAD_TEMPLATE
-    ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS
-    (GST_APEX_RAOP_INPUT_TYPE ","
-        "width = (int) " GST_APEX_RAOP_INPUT_WIDTH ","
-        "depth = (int) " GST_APEX_RAOP_INPUT_DEPTH ","
-        "endianness = (int) " GST_APEX_RAOP_INPUT_ENDIAN ","
-        "channels = (int) " GST_APEX_RAOP_INPUT_CHANNELS ","
-        "rate = (int) " GST_APEX_RAOP_INPUT_BIT_RATE ","
-        "signed = (boolean) " GST_APEX_RAOP_INPUT_SIGNED)
-    );
-
-
-enum
-{
-  APEX_PROP_HOST = 1,
-  APEX_PROP_PORT,
-  APEX_PROP_VOLUME,
-  APEX_PROP_JACK_TYPE,
-  APEX_PROP_JACK_STATUS,
-  APEX_PROP_GENERATION,
-  APEX_PROP_TRANSPORT_PROTOCOL,
-};
-
-#define DEFAULT_APEX_HOST              ""
-#define DEFAULT_APEX_PORT              5000
-#define DEFAULT_APEX_VOLUME            1.0
-#define DEFAULT_APEX_JACK_TYPE         GST_APEX_JACK_TYPE_UNDEFINED
-#define DEFAULT_APEX_JACK_STATUS       GST_APEX_JACK_STATUS_UNDEFINED
-#define DEFAULT_APEX_GENERATION                GST_APEX_GENERATION_ONE
-#define DEFAULT_APEX_TRANSPORT_PROTOCOL        GST_APEX_TCP
-
-/* genum apex jack resolution */
-GType
-gst_apexsink_jackstatus_get_type (void)
-{
-  static GType jackstatus_type = 0;
-  static const GEnumValue jackstatus[] = {
-    {GST_APEX_JACK_STATUS_UNDEFINED, "GST_APEX_JACK_STATUS_UNDEFINED",
-        "Jack status undefined"},
-    {GST_APEX_JACK_STATUS_DISCONNECTED, "GST_APEX_JACK_STATUS_DISCONNECTED",
-        "Jack disconnected"},
-    {GST_APEX_JACK_STATUS_CONNECTED, "GST_APEX_JACK_STATUS_CONNECTED",
-        "Jack connected"},
-    {0, NULL, NULL},
-  };
-
-  if (!jackstatus_type) {
-    jackstatus_type = g_enum_register_static ("GstApExJackStatus", jackstatus);
-  }
-
-  return jackstatus_type;
-}
-
-GType
-gst_apexsink_jacktype_get_type (void)
-{
-  static GType jacktype_type = 0;
-  static const GEnumValue jacktype[] = {
-    {GST_APEX_JACK_TYPE_UNDEFINED, "GST_APEX_JACK_TYPE_UNDEFINED",
-        "Undefined jack type"},
-    {GST_APEX_JACK_TYPE_ANALOG, "GST_APEX_JACK_TYPE_ANALOG", "Analog jack"},
-    {GST_APEX_JACK_TYPE_DIGITAL, "GST_APEX_JACK_TYPE_DIGITAL", "Digital jack"},
-    {0, NULL, NULL},
-  };
-
-  if (!jacktype_type) {
-    jacktype_type = g_enum_register_static ("GstApExJackType", jacktype);
-  }
-
-  return jacktype_type;
-}
-
-GType
-gst_apexsink_generation_get_type (void)
-{
-  static GType generation_type = 0;
-  static const GEnumValue generation[] = {
-    {GST_APEX_GENERATION_ONE, "generation-one",
-        "First generation (e.g., original AirPort Express)"},
-    {GST_APEX_GENERATION_TWO, "generation-two",
-        "Second generation (e.g., Apple TV v2)"},
-    {0, NULL, NULL},
-  };
-
-  if (!generation_type) {
-    generation_type = g_enum_register_static ("GstApExGeneration", generation);
-  }
-
-  return generation_type;
-}
-
-GType
-gst_apexsink_transport_protocol_get_type (void)
-{
-  static GType transport_protocol_type = 0;
-  static const GEnumValue transport_protocol[] = {
-    {GST_APEX_TCP, "tcp", "TCP"},
-    {GST_APEX_UDP, "udp", "UDP"},
-    {0, NULL, NULL},
-  };
-
-  if (!transport_protocol_type) {
-    transport_protocol_type =
-        g_enum_register_static ("GstApExTransportProtocol", transport_protocol);
-  }
-
-  return transport_protocol_type;
-}
-
-
-static void gst_apexsink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_apexsink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_apexsink_finalise (GObject * object);
-
-static gboolean gst_apexsink_open (GstAudioSink * asink);
-static gboolean gst_apexsink_prepare (GstAudioSink * asink,
-    GstRingBufferSpec * spec);
-static guint gst_apexsink_write (GstAudioSink * asink, gpointer data,
-    guint length);
-static gboolean gst_apexsink_unprepare (GstAudioSink * asink);
-static guint gst_apexsink_delay (GstAudioSink * asink);
-static void gst_apexsink_reset (GstAudioSink * asink);
-static gboolean gst_apexsink_close (GstAudioSink * asink);
-static GstStateChangeReturn gst_apexsink_change_state (GstElement * element,
-    GstStateChange transition);
-
-/* mixer interface standard api */
-static void gst_apexsink_interfaces_init (GType type);
-static void gst_apexsink_implements_interface_init (GstImplementsInterfaceClass
-    * iface);
-static void gst_apexsink_mixer_interface_init (GstMixerInterface * iface);
-
-static gboolean gst_apexsink_interface_supported (GstImplementsInterface *
-    iface, GType iface_type);
-static const GList *gst_apexsink_mixer_list_tracks (GstMixer * mixer);
-static void gst_apexsink_mixer_set_volume (GstMixer * mixer,
-    GstMixerTrack * track, gint * volumes);
-static void gst_apexsink_mixer_get_volume (GstMixer * mixer,
-    GstMixerTrack * track, gint * volumes);
-
-GST_BOILERPLATE_FULL (GstApExSink, gst_apexsink, GstAudioSink,
-    GST_TYPE_AUDIO_SINK, gst_apexsink_interfaces_init);
-
-/* apex sink interface(s) stuff */
-static void
-gst_apexsink_interfaces_init (GType type)
-{
-  static const GInterfaceInfo implements_interface_info =
-      { (GInterfaceInitFunc) gst_apexsink_implements_interface_init, NULL,
-    NULL
-  };
-  static const GInterfaceInfo mixer_interface_info =
-      { (GInterfaceInitFunc) gst_apexsink_mixer_interface_init, NULL, NULL };
-
-  g_type_add_interface_static (type, GST_TYPE_IMPLEMENTS_INTERFACE,
-      &implements_interface_info);
-  g_type_add_interface_static (type, GST_TYPE_MIXER, &mixer_interface_info);
-}
-
-static void
-gst_apexsink_implements_interface_init (GstImplementsInterfaceClass * iface)
-{
-  iface->supported = gst_apexsink_interface_supported;
-}
-
-static void
-gst_apexsink_mixer_interface_init (GstMixerInterface * iface)
-{
-  GST_MIXER_TYPE (iface) = GST_MIXER_SOFTWARE;
-
-  iface->list_tracks = gst_apexsink_mixer_list_tracks;
-  iface->set_volume = gst_apexsink_mixer_set_volume;
-  iface->get_volume = gst_apexsink_mixer_get_volume;
-}
-
-static gboolean
-gst_apexsink_interface_supported (GstImplementsInterface * iface,
-    GType iface_type)
-{
-  g_return_val_if_fail (iface_type == GST_TYPE_MIXER, FALSE);
-
-  return TRUE;
-}
-
-static const GList *
-gst_apexsink_mixer_list_tracks (GstMixer * mixer)
-{
-  GstApExSink *apexsink = GST_APEX_SINK (mixer);
-
-  return apexsink->tracks;
-}
-
-static void
-gst_apexsink_mixer_set_volume (GstMixer * mixer, GstMixerTrack * track,
-    gint * volumes)
-{
-  GstApExSink *apexsink = GST_APEX_SINK (mixer);
-
-  apexsink->volume = volumes[0];
-
-  if (apexsink->gst_apexraop != NULL)
-    gst_apexraop_set_volume (apexsink->gst_apexraop, apexsink->volume);
-}
-
-static void
-gst_apexsink_mixer_get_volume (GstMixer * mixer, GstMixerTrack * track,
-    gint * volumes)
-{
-  GstApExSink *apexsink = GST_APEX_SINK (mixer);
-
-  volumes[0] = apexsink->volume;
-}
-
-/* sink base init */
-static void
-gst_apexsink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_set_static_metadata (element_class,
-      "Apple AirPort Express Audio Sink", "Sink/Audio/Wireless",
-      "Output stream to an AirPort Express",
-      "Jérémie Bernard [GRemi] <gremimail@gmail.com>");
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_apexsink_sink_factory);
-}
-
-/* sink class init */
-static void
-gst_apexsink_class_init (GstApExSinkClass * klass)
-{
-  GST_DEBUG_CATEGORY_INIT (apexsink_debug, GST_APEX_SINK_NAME, 0,
-      "AirPort Express sink");
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  ((GObjectClass *) klass)->get_property =
-      GST_DEBUG_FUNCPTR (gst_apexsink_get_property);
-  ((GObjectClass *) klass)->set_property =
-      GST_DEBUG_FUNCPTR (gst_apexsink_set_property);
-  ((GObjectClass *) klass)->finalize =
-      GST_DEBUG_FUNCPTR (gst_apexsink_finalise);
-
-  ((GstAudioSinkClass *) klass)->open = GST_DEBUG_FUNCPTR (gst_apexsink_open);
-  ((GstAudioSinkClass *) klass)->prepare =
-      GST_DEBUG_FUNCPTR (gst_apexsink_prepare);
-  ((GstAudioSinkClass *) klass)->write = GST_DEBUG_FUNCPTR (gst_apexsink_write);
-  ((GstAudioSinkClass *) klass)->unprepare =
-      GST_DEBUG_FUNCPTR (gst_apexsink_unprepare);
-  ((GstAudioSinkClass *) klass)->delay = GST_DEBUG_FUNCPTR (gst_apexsink_delay);
-  ((GstAudioSinkClass *) klass)->reset = GST_DEBUG_FUNCPTR (gst_apexsink_reset);
-  ((GstAudioSinkClass *) klass)->close = GST_DEBUG_FUNCPTR (gst_apexsink_close);
-
-  ((GstElementClass *) klass)->change_state =
-      GST_DEBUG_FUNCPTR (gst_apexsink_change_state);
-
-  g_object_class_install_property ((GObjectClass *) klass, APEX_PROP_HOST,
-      g_param_spec_string ("host", "Host", "AirPort Express target host",
-          DEFAULT_APEX_HOST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property ((GObjectClass *) klass, APEX_PROP_PORT,
-      g_param_spec_uint ("port", "Port", "AirPort Express target port", 0,
-          32000, DEFAULT_APEX_PORT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  /* we need to expose the volume as a double for playbin. Internally we keep
-   * it as an int between 0 and 100, where 75 corresponds to 1.0.
-   * FIXME we should store the volume as a double. */
-  g_object_class_install_property ((GObjectClass *) klass, APEX_PROP_VOLUME,
-      g_param_spec_double ("volume", "Volume", "AirPort Express target volume",
-          0.0, 10.0, DEFAULT_APEX_VOLUME,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property ((GObjectClass *) klass, APEX_PROP_JACK_TYPE,
-      g_param_spec_enum ("jack-type", "Jack Type",
-          "AirPort Express connected jack type", GST_APEX_SINK_JACKTYPE_TYPE,
-          DEFAULT_APEX_JACK_TYPE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property ((GObjectClass *) klass,
-      APEX_PROP_JACK_STATUS, g_param_spec_enum ("jack-status", "Jack Status",
-          "AirPort Express jack connection status",
-          GST_APEX_SINK_JACKSTATUS_TYPE, DEFAULT_APEX_JACK_STATUS,
-          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property ((GObjectClass *) klass,
-      APEX_PROP_GENERATION, g_param_spec_enum ("generation", "Generation",
-          "AirPort device generation",
-          GST_APEX_SINK_GENERATION_TYPE, DEFAULT_APEX_GENERATION,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property ((GObjectClass *) klass,
-      APEX_PROP_TRANSPORT_PROTOCOL, g_param_spec_enum ("transport-protocol",
-          "Transport Protocol", "AirPort transport protocol",
-          GST_APEX_SINK_TRANSPORT_PROTOCOL_TYPE,
-          DEFAULT_APEX_TRANSPORT_PROTOCOL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-
-/* sink plugin instance init */
-static void
-gst_apexsink_init (GstApExSink * apexsink, GstApExSinkClass * g_class)
-{
-  GstMixerTrack *track = NULL;
-
-  track = g_object_new (GST_TYPE_MIXER_TRACK, NULL);
-  track->label = g_strdup ("Airport Express");
-  track->num_channels = GST_APEX_RAOP_CHANNELS;
-  track->min_volume = 0;
-  track->max_volume = 100;
-  track->flags = GST_MIXER_TRACK_OUTPUT;
-
-  apexsink->host = g_strdup (DEFAULT_APEX_HOST);
-  apexsink->port = DEFAULT_APEX_PORT;
-  apexsink->volume = CLAMP (DEFAULT_APEX_VOLUME * 75, 0, 100);
-  apexsink->gst_apexraop = NULL;
-  apexsink->tracks = g_list_append (apexsink->tracks, track);
-  apexsink->clock = gst_system_clock_obtain ();
-  apexsink->clock_id = NULL;
-
-  GST_INFO_OBJECT (apexsink,
-      "ApEx sink default initialization, target=\"%s\", port=\"%d\", volume=\"%d%%\"",
-      apexsink->host, apexsink->port, apexsink->volume);
-}
-
-/* apex sink set property */
-static void
-gst_apexsink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstApExSink *sink = GST_APEX_SINK (object);
-
-  switch (prop_id) {
-    case APEX_PROP_HOST:
-      if (sink->gst_apexraop == NULL) {
-        g_free (sink->host);
-        sink->host = g_value_dup_string (value);
-
-        GST_INFO_OBJECT (sink, "ApEx sink target set to \"%s\"", sink->host);
-      } else {
-        G_OBJECT_WARN_INVALID_PSPEC (object, "host", prop_id, pspec);
-      }
-      break;
-    case APEX_PROP_PORT:
-      if (sink->gst_apexraop == NULL) {
-        sink->port = g_value_get_uint (value);
-
-        GST_INFO_OBJECT (sink, "ApEx port set to \"%d\"", sink->port);
-      } else {
-        G_OBJECT_WARN_INVALID_PSPEC (object, "port", prop_id, pspec);
-      }
-      break;
-    case APEX_PROP_VOLUME:
-    {
-      gdouble volume;
-
-      volume = g_value_get_double (value);
-      volume *= 75.0;
-
-      sink->volume = CLAMP (volume, 0, 100);
-
-      if (sink->gst_apexraop != NULL)
-        gst_apexraop_set_volume (sink->gst_apexraop, sink->volume);
-
-      GST_INFO_OBJECT (sink, "ApEx volume set to \"%d%%\"", sink->volume);
-      break;
-    }
-    case APEX_PROP_GENERATION:
-      if (sink->gst_apexraop == NULL) {
-        sink->generation = g_value_get_enum (value);
-
-        GST_INFO_OBJECT (sink, "ApEx generation set to \"%d\"",
-            sink->generation);
-      } else {
-        GST_WARNING_OBJECT (sink,
-            "SET-PROPERTY : generation property may not be set when apexsink opened !");
-      }
-      break;
-    case APEX_PROP_TRANSPORT_PROTOCOL:
-      if (sink->gst_apexraop == NULL) {
-        sink->transport_protocol = g_value_get_enum (value);
-
-        GST_INFO_OBJECT (sink, "ApEx transport protocol set to \"%d\"",
-            sink->transport_protocol);
-      } else {
-        GST_WARNING_OBJECT (sink,
-            "SET-PROPERTY : transport protocol property may not be set when apexsink opened !");
-      }
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-/* apex sink get property */
-static void
-gst_apexsink_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstApExSink *sink = GST_APEX_SINK (object);
-
-  switch (prop_id) {
-    case APEX_PROP_HOST:
-      g_value_set_string (value, sink->host);
-      break;
-    case APEX_PROP_PORT:
-      g_value_set_uint (value, sink->port);
-      break;
-    case APEX_PROP_VOLUME:
-      g_value_set_double (value, ((gdouble) sink->volume) / 75.0);
-      break;
-    case APEX_PROP_JACK_TYPE:
-      g_value_set_enum (value, gst_apexraop_get_jacktype (sink->gst_apexraop));
-      break;
-    case APEX_PROP_JACK_STATUS:
-      g_value_set_enum (value,
-          gst_apexraop_get_jackstatus (sink->gst_apexraop));
-      break;
-    case APEX_PROP_GENERATION:
-      g_value_set_enum (value,
-          gst_apexraop_get_generation (sink->gst_apexraop));
-      break;
-    case APEX_PROP_TRANSPORT_PROTOCOL:
-      g_value_set_enum (value,
-          gst_apexraop_get_transport_protocol (sink->gst_apexraop));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-/* apex sink finalize */
-static void
-gst_apexsink_finalise (GObject * object)
-{
-  GstApExSink *sink = GST_APEX_SINK (object);
-
-  if (sink->tracks) {
-    g_list_foreach (sink->tracks, (GFunc) g_object_unref, NULL);
-    g_list_free (sink->tracks);
-    sink->tracks = NULL;
-  }
-
-  gst_object_unref (sink->clock);
-
-  g_free (sink->host);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-/* sink open : open the device */
-static gboolean
-gst_apexsink_open (GstAudioSink * asink)
-{
-  int res;
-  GstApExSink *apexsink = (GstApExSink *) asink;
-
-  apexsink->gst_apexraop = gst_apexraop_new (apexsink->host,
-      apexsink->port, apexsink->generation, apexsink->transport_protocol);
-
-  if ((res = gst_apexraop_connect (apexsink->gst_apexraop)) != GST_RTSP_STS_OK) {
-    GST_ERROR_OBJECT (apexsink,
-        "%s : network or RAOP failure, connection refused or timeout, RTSP code=%d",
-        apexsink->host, res);
-    return FALSE;
-  }
-
-  GST_INFO_OBJECT (apexsink,
-      "OPEN : ApEx sink successfully connected to \"%s:%d\", ANNOUNCE, SETUP and RECORD requests performed",
-      apexsink->host, apexsink->port);
-
-  switch (gst_apexraop_get_jackstatus (apexsink->gst_apexraop)) {
-    case GST_APEX_JACK_STATUS_CONNECTED:
-      GST_INFO_OBJECT (apexsink, "OPEN : ApEx jack is connected");
-      break;
-    case GST_APEX_JACK_STATUS_DISCONNECTED:
-      GST_WARNING_OBJECT (apexsink, "OPEN : ApEx jack is disconnected !");
-      break;
-    default:
-      GST_WARNING_OBJECT (apexsink, "OPEN : ApEx jack status is undefined !");
-      break;
-  }
-
-  switch (gst_apexraop_get_jacktype (apexsink->gst_apexraop)) {
-    case GST_APEX_JACK_TYPE_ANALOG:
-      GST_INFO_OBJECT (apexsink, "OPEN : ApEx jack type is analog");
-      break;
-    case GST_APEX_JACK_TYPE_DIGITAL:
-      GST_INFO_OBJECT (apexsink, "OPEN : ApEx jack type is digital");
-      break;
-    default:
-      GST_WARNING_OBJECT (apexsink, "OPEN : ApEx jack type is undefined !");
-      break;
-  }
-
-  if ((res =
-          gst_apexraop_set_volume (apexsink->gst_apexraop,
-              apexsink->volume)) != GST_RTSP_STS_OK) {
-    GST_WARNING_OBJECT (apexsink,
-        "%s : could not set initial volume to \"%d%%\", RTSP code=%d",
-        apexsink->host, apexsink->volume, res);
-  } else {
-    GST_INFO_OBJECT (apexsink,
-        "OPEN : ApEx sink successfully set volume to \"%d%%\"",
-        apexsink->volume);
-  }
-
-  return TRUE;
-}
-
-/* prepare sink : configure the device with the specified format */
-static gboolean
-gst_apexsink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec)
-{
-  GstApExSink *apexsink = (GstApExSink *) asink;
-  GstApExGeneration gen = gst_apexraop_get_generation (apexsink->gst_apexraop);
-
-  apexsink->latency_time = spec->latency_time;
-
-  spec->segsize = gen == GST_APEX_GENERATION_ONE
-      ? GST_APEX_RAOP_V1_SAMPLES_PER_FRAME * GST_APEX_RAOP_BYTES_PER_SAMPLE
-      : GST_APEX_RAOP_V2_SAMPLES_PER_FRAME * GST_APEX_RAOP_BYTES_PER_SAMPLE;
-  spec->segtotal = 2;
-
-  memset (spec->silence_sample, 0, sizeof (spec->silence_sample));
-
-  GST_INFO_OBJECT (apexsink,
-      "PREPARE : ApEx sink ready to stream at %dHz, %d bytes per sample, %d channels, %d bytes segments (%dkB/s)",
-      spec->rate, spec->bytes_per_sample, spec->channels, spec->segsize,
-      spec->rate * spec->bytes_per_sample / 1000);
-
-  return TRUE;
-}
-
-/* sink write : write samples to the device */
-static guint
-gst_apexsink_write (GstAudioSink * asink, gpointer data, guint length)
-{
-  guint written;
-  GstApExSink *apexsink = (GstApExSink *) asink;
-
-  if ((written =
-          gst_apexraop_write (apexsink->gst_apexraop, data,
-              length)) != length) {
-    GST_INFO_OBJECT (apexsink,
-        "WRITE : %d of %d bytes sent, skipping frame samples...", written,
-        length);
-  } else {
-    GST_INFO_OBJECT (apexsink, "WRITE : %d bytes sent", length);
-    /* NOTE, previous calculation subtracted apexsink->latency_time from this;
-     * however, the value below is less than apexsink->latency_time for generation 2.
-     * In this case, the number went negative (actualy wrapped around into a big number).
-     */
-    apexsink->clock_id = gst_clock_new_single_shot_id (apexsink->clock,
-        (GstClockTime) (gst_clock_get_time (apexsink->clock) +
-            ((length * 1000000000.)
-                / (GST_APEX_RAOP_BITRATE * GST_APEX_RAOP_BYTES_PER_SAMPLE))));
-    gst_clock_id_wait (apexsink->clock_id, NULL);
-    gst_clock_id_unref (apexsink->clock_id);
-    apexsink->clock_id = NULL;
-  }
-
-  return length;
-}
-
-/* unprepare sink : undo operations done by prepare */
-static gboolean
-gst_apexsink_unprepare (GstAudioSink * asink)
-{
-  GST_INFO_OBJECT (asink, "UNPREPARE");
-
-  return TRUE;
-}
-
-/* delay sink : get the estimated number of samples written but not played yet by the device */
-static guint
-gst_apexsink_delay (GstAudioSink * asink)
-{
-  GST_LOG_OBJECT (asink, "DELAY");
-
-  return 0;
-}
-
-/* reset sink : unblock writes and flush the device */
-static void
-gst_apexsink_reset (GstAudioSink * asink)
-{
-  int res;
-  GstApExSink *apexsink = (GstApExSink *) asink;
-
-  GST_INFO_OBJECT (apexsink, "RESET : flushing buffer...");
-
-  if ((res = gst_apexraop_flush (apexsink->gst_apexraop)) == GST_RTSP_STS_OK) {
-    GST_INFO_OBJECT (apexsink, "RESET : ApEx buffer flush success");
-  } else {
-    GST_WARNING_OBJECT (apexsink,
-        "RESET : could not flush ApEx buffer, RTSP code=%d", res);
-  }
-}
-
-/* sink close : close the device */
-static gboolean
-gst_apexsink_close (GstAudioSink * asink)
-{
-  GstApExSink *apexsink = (GstApExSink *) asink;
-
-  gst_apexraop_close (apexsink->gst_apexraop);
-  gst_apexraop_free (apexsink->gst_apexraop);
-
-  GST_INFO_OBJECT (apexsink, "CLOSE : ApEx sink closed connection");
-
-  return TRUE;
-}
-
-static GstStateChangeReturn
-gst_apexsink_change_state (GstElement * element, GstStateChange transition)
-{
-  GstApExSink *apexsink = (GstApExSink *) element;
-
-  if (apexsink->clock_id && transition == GST_STATE_CHANGE_PAUSED_TO_READY) {
-    gst_clock_id_unschedule (apexsink->clock_id);
-    gst_clock_id_unref (apexsink->clock_id);
-    apexsink->clock_id = NULL;
-  }
-  return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-}
diff --git a/ext/apexsink/gstapexsink.h b/ext/apexsink/gstapexsink.h
deleted file mode 100644 (file)
index 711cd37..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* GStreamer - AirPort Express (ApEx) Audio Sink -
- *
- * Remote Audio Access Protocol (RAOP) as used in Apple iTunes to stream music to the Airport Express (ApEx) -
- * RAOP is based on the Real Time Streaming Protocol (RTSP) but with an extra challenge-response RSA based authentication step.
- *
- * RAW PCM input only as defined by the following GST_STATIC_PAD_TEMPLATE regarding the expected gstapexraop input format.
- *
- * Copyright (C) 2008 Jérémie Bernard [GRemi] <gremimail@gmail.com>
- *
- * gstapexsink.h
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __GST_APEXSINK_H__
-#define __GST_APEXSINK_H__
-
-#include "gstapexraop.h"
-
-#include <gst/audio/gstaudiosink.h>
-#include <gst/interfaces/mixer.h>
-
-G_BEGIN_DECLS
-
-/* standard gstreamer macros */
-#define GST_TYPE_APEX_SINK                     (gst_apexsink_get_type())
-#define GST_APEX_SINK(obj)                     (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_APEX_SINK,GstApExSink))
-#define GST_APEX_SINK_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_APEX_SINK,GstApExSinkClass))
-#define GST_IS_APEX_SINK(obj)                  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_APEX_SINK))
-#define GST_IS_APEX_SINK_CLASS(klass)          (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_APEX_SINK))
-#define GST_APEX_SINK_CAST(obj)                ((GstApExSink*)(obj))
-#define GST_APEX_SINK_NAME                     "apexsink"
-#define GST_APEX_SINK_JACKTYPE_TYPE            (gst_apexsink_jacktype_get_type())
-#define GST_APEX_SINK_JACKSTATUS_TYPE          (gst_apexsink_jackstatus_get_type())
-#define GST_APEX_SINK_GENERATION_TYPE          (gst_apexsink_generation_get_type())
-#define GST_APEX_SINK_TRANSPORT_PROTOCOL_TYPE  (gst_apexsink_transport_protocol_get_type())
-/* ApEx classes declaration */
-typedef struct _GstApExSink GstApExSink;
-typedef struct _GstApExSinkClass GstApExSinkClass;
-
-struct _GstApExSink
-{
-  /* base definition */
-  GstAudioSink sink;
-
-  /* public read/write sink properties */
-  gchar *host;
-  guint port;
-  guint volume;
-  GstApExGeneration generation;
-  GstApExTransportProtocol transport_protocol;
-
-  /* private attributes : 
-   * latency time local copy 
-   * tracks list of the mixer interface
-   * clock for sleeping
-   * clock ID for sleeping / canceling sleep
-   */
-  guint64 latency_time;
-  GList *tracks;
-  GstClock *clock;
-  GstClockID clock_id;
-
-  /* private apex client */
-  GstApExRAOP *gst_apexraop;
-};
-
-struct _GstApExSinkClass
-{
-  GstAudioSinkClass parent_class;
-};
-
-/* genums */
-GType gst_apexsink_jackstatus_get_type (void);
-GType gst_apexsink_jacktype_get_type (void);
-GType gst_apexsink_generation_get_type (void);
-GType gst_apexsink_transport_protocol_get_type (void);
-
-/* audio sink standard api */
-GType gst_apexsink_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/ext/libvisual/Makefile.am b/ext/libvisual/Makefile.am
deleted file mode 100644 (file)
index 1eba9af..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-plugin_LTLIBRARIES = libgstlibvisualgl.la
-
-libgstlibvisualgl_la_SOURCES = visual-gl.c
-
-libgstlibvisualgl_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(LIBVISUAL_CFLAGS) \
-       -I$(top_srcdir)/gst-libs \
-       -I$(top_srcdir)/gst-libs/gst/gl
-
-libgstlibvisualgl_la_LIBADD = \
-       $(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_API_VERSION).la \
-       $(GST_PLUGINS_BASE_LIBS) $(GST_LIBS) $(LIBVISUAL_LIBS)
-
-libgstlibvisualgl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstlibvisualgl_la_LIBTOOLFLAGS = --tag=disable-static
-
diff --git a/ext/libvisual/visual-gl.c b/ext/libvisual/visual-gl.c
deleted file mode 100644 (file)
index c796d4b..0000000
+++ /dev/null
@@ -1,1248 +0,0 @@
-/* GStreamer
- * Copyright (C) 2004 Benjamin Otte <otte@gnome.org>
- * Copyright (C) 2009 Jonathan Matthew <notverysmart@gmail.com>
- * Copyright (C) 2011 Julien Isorce <julien.isorce@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-libvisualgl
- *
- * Wrapper for libvisual plugins that use OpenGL
- *
- * <refsect2>
- * <title>Examples</title>
- * |[
- * gst-launch-1.0 -v audiotestsrc ! libvisual_gl_lv_flower ! glimagesink
- * ]|
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <gst/video/video.h>
-#include <gst/audio/audio.h>
-#include <gst/gl/gstglbuffer.h>
-#include <gst/gl/gstgldisplay.h>
-
-#include <libvisual/libvisual.h>
-
-#define GST_TYPE_VISUAL_GL (gst_visual_gl_get_type())
-#define GST_IS_VISUAL_GL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VISUAL_GL))
-#define GST_VISUAL_GL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VISUAL_GL,GstVisualGL))
-#define GST_IS_VISUAL_GL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VISUAL_GL))
-#define GST_VISUAL_GL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VISUAL_GL,GstVisualGLClass))
-#define GST_VISUAL_GL_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_VISUAL_GL, GstVisualGLClass))
-
-typedef struct _GstVisualGL GstVisualGL;
-typedef struct _GstVisualGLClass GstVisualGLClass;
-
-/* XXX use same category as libvisual plugin in -base? */
-GST_DEBUG_CATEGORY_STATIC (libvisual_debug);
-#define GST_CAT_DEFAULT (libvisual_debug)
-
-/* amounf of samples before we can feed libvisual */
-#define VISUAL_SAMPLES  512
-
-#define DEFAULT_WIDTH   320
-#define DEFAULT_HEIGHT  240
-#define DEFAULT_FPS_N   25
-#define DEFAULT_FPS_D   1
-
-struct _GstVisualGL
-{
-  GstElement element;
-
-  /* pads */
-  GstPad *sinkpad;
-  GstPad *srcpad;
-  GstSegment segment;
-
-  /* GL stuff */
-  GstGLDisplay *display;
-  GLuint fbo;
-  GLuint depthbuffer;
-  GLuint midtexture;
-  GLdouble actor_projection_matrix[16];
-  GLdouble actor_modelview_matrix[16];
-  GLboolean is_enabled_gl_depth_test;
-  GLint gl_depth_func;
-  GLboolean is_enabled_gl_blend;
-  GLint gl_blend_src_alpha;
-
-  /* libvisual stuff */
-  VisAudio *audio;
-  VisVideo *video;
-  VisActor *actor;
-  int actor_setup_result;
-
-  /* audio/video state */
-  gint channels;
-  gint rate;                    /* Input samplerate */
-  gint bps;
-  VisAudioSampleRateType libvisual_rate;
-
-  /* framerate numerator & denominator */
-  gint fps_n;
-  gint fps_d;
-  gint width;
-  gint height;
-  GstClockTime duration;
-  guint outsize;
-
-  /* samples per frame based on caps */
-  guint spf;
-
-  /* state stuff */
-  GstAdapter *adapter;
-  guint count;
-
-  /* QoS stuff *//* with LOCK */
-  gdouble proportion;
-  GstClockTime earliest_time;
-};
-
-struct _GstVisualGLClass
-{
-  GstElementClass parent_class;
-
-  VisPluginRef *plugin;
-};
-
-GType gst_visual_gl_get_type (void);
-
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_GL_VIDEO_CAPS)
-    );
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "width = (int) 16, "
-        "depth = (int) 16, "
-        "endianness = (int) BYTE_ORDER, "
-        "signed = (boolean) TRUE, " "channels = (int) { 1, 2 }, "
-        "rate = (int) { 8000, 11250, 22500, 32000, 44100, 48000, 96000 }")
-    );
-
-
-static void gst_visual_gl_class_init (gpointer g_class, gpointer class_data);
-static void gst_visual_gl_init (GstVisualGL * visual);
-static void gst_visual_gl_dispose (GObject * object);
-
-static GstStateChangeReturn gst_visual_gl_change_state (GstElement * element,
-    GstStateChange transition);
-static GstFlowReturn gst_visual_gl_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_visual_gl_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_visual_gl_src_event (GstPad * pad, GstEvent * event);
-
-static gboolean gst_visual_gl_src_query (GstPad * pad, GstQuery * query);
-
-static gboolean gst_visual_gl_sink_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_visual_gl_src_setcaps (GstPad * pad, GstCaps * caps);
-static GstCaps *gst_visual_gl_getcaps (GstPad * pad);
-static void libvisual_log_handler (const char *message, const char *funcname,
-    void *priv);
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_visual_gl_get_type (void)
-{
-  static GType type = 0;
-
-  if (G_UNLIKELY (type == 0)) {
-    static const GTypeInfo info = {
-      sizeof (GstVisualGLClass),
-      NULL,
-      NULL,
-      gst_visual_gl_class_init,
-      NULL,
-      NULL,
-      sizeof (GstVisualGL),
-      0,
-      (GInstanceInitFunc) gst_visual_gl_init,
-    };
-
-    type = g_type_register_static (GST_TYPE_ELEMENT, "GstVisualGL", &info, 0);
-  }
-  return type;
-}
-
-static void
-libvisual_log_handler (const char *message, const char *funcname, void *priv)
-{
-  GST_CAT_LEVEL_LOG (libvisual_debug, (GstDebugLevel) (priv), NULL, "%s - %s",
-      funcname, message);
-}
-
-static void
-gst_visual_gl_class_init (gpointer g_class, gpointer class_data)
-{
-  GstVisualGLClass *klass = GST_VISUAL_GL_CLASS (g_class);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-  GObjectClass *object = G_OBJECT_CLASS (g_class);
-
-  klass->plugin = class_data;
-
-  element_class->change_state = gst_visual_gl_change_state;
-
-  if (class_data == NULL) {
-    parent_class = g_type_class_peek_parent (g_class);
-  } else {
-    char *longname = g_strdup_printf ("libvisual %s plugin v.%s",
-        klass->plugin->info->name, klass->plugin->info->version);
-
-    /* FIXME: improve to only register what plugin supports? */
-    gst_element_class_add_static_pad_template (element_class, &src_template);
-    gst_element_class_add_static_pad_template (element_class, &sink_template);
-
-    gst_element_class_set_metadata (element_class,
-        longname, "Visualization", klass->plugin->info->about,
-        "Benjamin Otte <otte@gnome.org>");
-
-    g_free (longname);
-  }
-
-  object->dispose = gst_visual_gl_dispose;
-}
-
-static void
-gst_visual_gl_init (GstVisualGL * visual)
-{
-  /* create the sink and src pads */
-  visual->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-  gst_pad_set_setcaps_function (visual->sinkpad, gst_visual_gl_sink_setcaps);
-  gst_pad_set_chain_function (visual->sinkpad, gst_visual_gl_chain);
-  gst_pad_set_event_function (visual->sinkpad, gst_visual_gl_sink_event);
-  gst_element_add_pad (GST_ELEMENT (visual), visual->sinkpad);
-
-  visual->srcpad = gst_pad_new_from_static_template (&src_template, "src");
-  gst_pad_set_setcaps_function (visual->srcpad, gst_visual_gl_src_setcaps);
-  gst_pad_set_getcaps_function (visual->srcpad, gst_visual_gl_getcaps);
-  gst_pad_set_event_function (visual->srcpad, gst_visual_gl_src_event);
-  gst_pad_set_query_function (visual->srcpad, gst_visual_gl_src_query);
-  gst_element_add_pad (GST_ELEMENT (visual), visual->srcpad);
-
-  visual->adapter = gst_adapter_new ();
-
-  visual->actor = NULL;
-
-  visual->display = NULL;
-  visual->fbo = 0;
-  visual->depthbuffer = 0;
-  visual->midtexture = 0;
-
-  visual->is_enabled_gl_depth_test = GL_FALSE;
-  visual->gl_depth_func = GL_LESS;
-  visual->is_enabled_gl_blend = GL_FALSE;
-  visual->gl_blend_src_alpha = GL_ONE;
-}
-
-static void
-gst_visual_gl_clear_actors (GstVisualGL * visual)
-{
-  if (visual->actor) {
-    visual_object_unref (VISUAL_OBJECT (visual->actor));
-    visual->actor = NULL;
-  }
-  if (visual->video) {
-    visual_object_unref (VISUAL_OBJECT (visual->video));
-    visual->video = NULL;
-  }
-  if (visual->audio) {
-    visual_object_unref (VISUAL_OBJECT (visual->audio));
-    visual->audio = NULL;
-  }
-}
-
-static void
-gst_visual_gl_dispose (GObject * object)
-{
-  GstVisualGL *visual = GST_VISUAL_GL (object);
-
-  if (visual->adapter) {
-    gst_object_unref (visual->adapter);
-    visual->adapter = NULL;
-  }
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
-}
-
-static void
-gst_visual_gl_reset (GstVisualGL * visual)
-{
-  gst_adapter_clear (visual->adapter);
-  gst_segment_init (&visual->segment, GST_FORMAT_UNDEFINED);
-
-  GST_OBJECT_LOCK (visual);
-  visual->proportion = 1.0;
-  visual->earliest_time = -1;
-  GST_OBJECT_UNLOCK (visual);
-}
-
-static GstCaps *
-gst_visual_gl_getcaps (GstPad * pad)
-{
-  GstCaps *ret;
-  GstVisualGL *visual = GST_VISUAL_GL (gst_pad_get_parent (pad));
-  int depths;
-
-  if (!visual->actor) {
-    ret = gst_caps_copy (gst_pad_get_pad_template_caps (visual->srcpad));
-    goto beach;
-  }
-
-  ret = gst_caps_new_empty ();
-  depths = visual_actor_get_supported_depth (visual->actor);
-  if (depths < 0) {
-    /* FIXME: set an error */
-    goto beach;
-  }
-  if ((depths & VISUAL_VIDEO_DEPTH_GL) == 0) {
-    /* We don't handle non-GL plugins */
-    goto beach;
-  }
-
-  GST_DEBUG_OBJECT (visual, "libvisual-gl plugin supports depths %u (0x%04x)",
-      depths, depths);
-  /* only do GL output */
-  gst_caps_append (ret, gst_caps_from_string (GST_GL_VIDEO_CAPS));
-
-beach:
-
-  GST_DEBUG_OBJECT (visual, "returning caps %" GST_PTR_FORMAT, ret);
-  gst_object_unref (visual);
-  return ret;
-}
-
-static gboolean
-gst_visual_gl_src_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstVisualGL *visual = GST_VISUAL_GL (gst_pad_get_parent (pad));
-  GstStructure *structure;
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  GST_DEBUG_OBJECT (visual, "src pad got caps %" GST_PTR_FORMAT, caps);
-
-  if (!gst_structure_get_int (structure, "width", &visual->width))
-    goto error;
-  if (!gst_structure_get_int (structure, "height", &visual->height))
-    goto error;
-  if (!gst_structure_get_fraction (structure, "framerate", &visual->fps_n,
-          &visual->fps_d))
-    goto error;
-
-  /* precalc some values */
-  visual->spf =
-      gst_util_uint64_scale_int (visual->rate, visual->fps_d, visual->fps_n);
-  visual->duration =
-      gst_util_uint64_scale_int (GST_SECOND, visual->fps_d, visual->fps_n);
-
-  gst_gl_display_gen_texture (visual->display, &visual->midtexture,
-      visual->width, visual->height);
-
-  gst_gl_display_gen_fbo (visual->display, visual->width, visual->height,
-      &visual->fbo, &visual->depthbuffer);
-
-  gst_object_unref (visual);
-  return TRUE;
-
-  /* ERRORS */
-error:
-  {
-    GST_DEBUG_OBJECT (visual, "error parsing caps");
-    gst_object_unref (visual);
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_visual_gl_sink_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstVisualGL *visual = GST_VISUAL_GL (gst_pad_get_parent (pad));
-  GstStructure *structure;
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  gst_structure_get_int (structure, "channels", &visual->channels);
-  gst_structure_get_int (structure, "rate", &visual->rate);
-
-  switch (visual->rate) {
-    case 8000:
-      visual->libvisual_rate = VISUAL_AUDIO_SAMPLE_RATE_8000;
-      break;
-    case 11250:
-      visual->libvisual_rate = VISUAL_AUDIO_SAMPLE_RATE_11250;
-      break;
-    case 22500:
-      visual->libvisual_rate = VISUAL_AUDIO_SAMPLE_RATE_22500;
-      break;
-    case 32000:
-      visual->libvisual_rate = VISUAL_AUDIO_SAMPLE_RATE_32000;
-      break;
-    case 44100:
-      visual->libvisual_rate = VISUAL_AUDIO_SAMPLE_RATE_44100;
-      break;
-    case 48000:
-      visual->libvisual_rate = VISUAL_AUDIO_SAMPLE_RATE_48000;
-      break;
-    case 96000:
-      visual->libvisual_rate = VISUAL_AUDIO_SAMPLE_RATE_96000;
-      break;
-    default:
-      gst_object_unref (visual);
-      return FALSE;
-  }
-
-  /* this is how many samples we need to fill one frame at the requested
-   * framerate. */
-  if (visual->fps_n != 0) {
-    visual->spf =
-        gst_util_uint64_scale_int (visual->rate, visual->fps_d, visual->fps_n);
-  }
-  visual->bps = visual->channels * sizeof (gint16);
-
-  gst_object_unref (visual);
-  return TRUE;
-}
-
-static gboolean
-gst_vis_gl_src_negotiate (GstVisualGL * visual)
-{
-  GstCaps *othercaps, *target;
-  GstStructure *structure;
-  GstCaps *caps;
-
-  caps = gst_pad_get_caps (visual->srcpad);
-
-  /* see what the peer can do */
-  othercaps = gst_pad_peer_get_caps (visual->srcpad);
-  if (othercaps) {
-    target = gst_caps_intersect (othercaps, caps);
-    gst_caps_unref (othercaps);
-    gst_caps_unref (caps);
-
-    if (gst_caps_is_empty (target))
-      goto no_format;
-
-    gst_caps_truncate (target);
-  } else {
-    /* need a copy, we'll be modifying it when fixating */
-    target = gst_caps_copy (caps);
-    gst_caps_unref (caps);
-  }
-
-  /* fixate in case something is not fixed. This does nothing if the value is
-   * already fixed. For video we always try to fixate to something like
-   * 320x240x25 by convention. */
-  structure = gst_caps_get_structure (target, 0);
-  gst_structure_fixate_field_nearest_int (structure, "width", DEFAULT_WIDTH);
-  gst_structure_fixate_field_nearest_int (structure, "height", DEFAULT_HEIGHT);
-  gst_structure_fixate_field_nearest_fraction (structure, "framerate",
-      DEFAULT_FPS_N, DEFAULT_FPS_D);
-
-  gst_pad_set_caps (visual->srcpad, target);
-  gst_caps_unref (target);
-
-  return TRUE;
-
-  /* ERRORS */
-no_format:
-  {
-    GST_ELEMENT_ERROR (visual, STREAM, FORMAT, (NULL),
-        ("could not negotiate output format"));
-    gst_caps_unref (target);
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_visual_gl_sink_event (GstPad * pad, GstEvent * event)
-{
-  GstVisualGL *visual;
-  gboolean res;
-
-  visual = GST_VISUAL_GL (gst_pad_get_parent (pad));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_FLUSH_START:
-      res = gst_pad_push_event (visual->srcpad, event);
-      break;
-    case GST_EVENT_FLUSH_STOP:
-      /* reset QoS and adapter. */
-      gst_visual_gl_reset (visual);
-      res = gst_pad_push_event (visual->srcpad, event);
-      break;
-    case GST_EVENT_NEWSEGMENT:
-    {
-      GstFormat format;
-      gdouble rate, arate;
-      gint64 start, stop, time;
-      gboolean update;
-
-      /* the newsegment values are used to clip the input samples
-       * and to convert the incomming timestamps to running time so
-       * we can do QoS */
-      gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
-          &start, &stop, &time);
-
-      /* now configure the values */
-      gst_segment_set_newsegment_full (&visual->segment, update,
-          rate, arate, format, start, stop, time);
-
-      /* and forward */
-      res = gst_pad_push_event (visual->srcpad, event);
-      break;
-    }
-    default:
-      res = gst_pad_push_event (visual->srcpad, event);
-      break;
-  }
-
-  gst_object_unref (visual);
-  return res;
-}
-
-static gboolean
-gst_visual_gl_src_event (GstPad * pad, GstEvent * event)
-{
-  GstVisualGL *visual;
-  gboolean res;
-
-  visual = GST_VISUAL_GL (gst_pad_get_parent (pad));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_QOS:
-    {
-      gdouble proportion;
-      GstClockTimeDiff diff;
-      GstClockTime timestamp;
-
-      gst_event_parse_qos (event, &proportion, &diff, &timestamp);
-
-      /* save stuff for the _chain function */
-      GST_OBJECT_LOCK (visual);
-      visual->proportion = proportion;
-      if (diff >= 0)
-        /* we're late, this is a good estimate for next displayable
-         * frame (see part-qos.txt) */
-        visual->earliest_time = timestamp + 2 * diff + visual->duration;
-      else
-        visual->earliest_time = timestamp + diff;
-
-      GST_OBJECT_UNLOCK (visual);
-
-      res = gst_pad_push_event (visual->sinkpad, event);
-      break;
-    }
-    default:
-      res = gst_pad_push_event (visual->sinkpad, event);
-      break;
-  }
-
-  gst_object_unref (visual);
-  return res;
-}
-
-static gboolean
-gst_visual_gl_src_query (GstPad * pad, GstQuery * query)
-{
-  gboolean res;
-  GstVisualGL *visual;
-
-  visual = GST_VISUAL_GL (gst_pad_get_parent (pad));
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_LATENCY:
-    {
-      /* We need to send the query upstream and add the returned latency to our
-       * own */
-      GstClockTime min_latency, max_latency;
-      gboolean us_live;
-      GstClockTime our_latency;
-      guint max_samples;
-
-      if ((res = gst_pad_peer_query (visual->sinkpad, query))) {
-        gst_query_parse_latency (query, &us_live, &min_latency, &max_latency);
-
-        GST_DEBUG_OBJECT (visual, "Peer latency: min %"
-            GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
-
-        /* the max samples we must buffer buffer */
-        max_samples = MAX (VISUAL_SAMPLES, visual->spf);
-        our_latency =
-            gst_util_uint64_scale_int (max_samples, GST_SECOND, visual->rate);
-
-        GST_DEBUG_OBJECT (visual, "Our latency: %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (our_latency));
-
-        /* we add some latency but only if we need to buffer more than what
-         * upstream gives us */
-        min_latency += our_latency;
-        if (max_latency != -1)
-          max_latency += our_latency;
-
-        GST_DEBUG_OBJECT (visual, "Calculated total latency : min %"
-            GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
-
-        gst_query_set_latency (query, TRUE, min_latency, max_latency);
-      }
-      break;
-    }
-    case GST_QUERY_CUSTOM:
-    {
-      GstStructure *structure = gst_query_get_structure (query);
-      gchar *name = gst_element_get_name (visual);
-
-      res = g_strcmp0 (name, gst_structure_get_name (structure)) == 0;
-      g_free (name);
-
-      if (!res)
-        res = gst_pad_query_default (pad, query);
-      break;
-    }
-    default:
-      res = gst_pad_peer_query (visual->sinkpad, query);
-      break;
-  }
-
-  gst_object_unref (visual);
-
-  return res;
-}
-
-/* allocate and output buffer, if no format was negotiated, this
- * function will negotiate one. After calling this function, a
- * reverse negotiation could have happened. */
-static GstFlowReturn
-get_buffer (GstVisualGL * visual, GstGLBuffer ** outbuf)
-{
-  /* we don't know an output format yet, pick one */
-  if (GST_PAD_CAPS (visual->srcpad) == NULL) {
-    if (!gst_vis_gl_src_negotiate (visual))
-      return GST_FLOW_NOT_NEGOTIATED;
-  }
-
-  GST_DEBUG_OBJECT (visual, "allocating output buffer with caps %"
-      GST_PTR_FORMAT, GST_PAD_CAPS (visual->srcpad));
-
-  *outbuf = gst_gl_buffer_new (visual->display, visual->width, visual->height);
-  if (*outbuf == NULL)
-    return GST_FLOW_ERROR;
-
-  gst_buffer_set_caps (GST_BUFFER (*outbuf), GST_PAD_CAPS (visual->srcpad));
-  return GST_FLOW_OK;
-}
-
-static void
-actor_setup (GstGLDisplay * display, GstVisualGL * visual)
-{
-  /* save and clear top of the stack */
-  glPushAttrib (GL_ALL_ATTRIB_BITS);
-
-  glMatrixMode (GL_PROJECTION);
-  glPushMatrix ();
-  glLoadIdentity ();
-
-  glMatrixMode (GL_MODELVIEW);
-  glPushMatrix ();
-  glLoadIdentity ();
-
-  visual->actor_setup_result = visual_actor_realize (visual->actor);
-  if (visual->actor_setup_result == 0) {
-    /* store the actor's matrices for rendering the first frame */
-    glGetDoublev (GL_MODELVIEW_MATRIX, visual->actor_modelview_matrix);
-    glGetDoublev (GL_PROJECTION_MATRIX, visual->actor_projection_matrix);
-
-    visual->is_enabled_gl_depth_test = glIsEnabled (GL_DEPTH_TEST);
-    glGetIntegerv (GL_DEPTH_FUNC, &visual->gl_depth_func);
-
-    visual->is_enabled_gl_blend = glIsEnabled (GL_BLEND);
-    glGetIntegerv (GL_BLEND_SRC_ALPHA, &visual->gl_blend_src_alpha);
-
-    /* retore matrix */
-    glMatrixMode (GL_PROJECTION);
-    glPopMatrix ();
-
-    glMatrixMode (GL_MODELVIEW);
-    glPopMatrix ();
-
-    glPopAttrib ();
-  }
-}
-
-static void
-actor_negotiate (GstGLDisplay * display, GstVisualGL * visual)
-{
-  gint err = VISUAL_OK;
-
-  err = visual_video_set_depth (visual->video, VISUAL_VIDEO_DEPTH_GL);
-  if (err != VISUAL_OK)
-    g_warning ("failed to visual_video_set_depth\n");
-
-  err =
-      visual_video_set_dimension (visual->video, visual->width, visual->height);
-  if (err != VISUAL_OK)
-    g_warning ("failed to visual_video_set_dimension\n");
-
-  err = visual_actor_video_negotiate (visual->actor, 0, FALSE, FALSE);
-  if (err != VISUAL_OK)
-    g_warning ("failed to visual_actor_video_negotiate\n");
-}
-
-static void
-check_gl_matrix (void)
-{
-  GLdouble projection_matrix[16];
-  GLdouble modelview_matrix[16];
-  gint i = 0;
-  gint j = 0;
-
-  glGetDoublev (GL_PROJECTION_MATRIX, projection_matrix);
-  glGetDoublev (GL_MODELVIEW_MATRIX, modelview_matrix);
-
-  for (j = 0; j < 4; ++j) {
-    for (i = 0; i < 4; ++i) {
-      if (projection_matrix[i + 4 * j] != projection_matrix[i + 4 * j])
-        g_warning ("invalid projection matrix at coordiante %dx%d: %f\n", i, j,
-            projection_matrix[i + 4 * j]);
-      if (modelview_matrix[i + 4 * j] != modelview_matrix[i + 4 * j])
-        g_warning ("invalid modelview_matrix matrix at coordiante %dx%d: %f\n",
-            i, j, modelview_matrix[i + 4 * j]);
-    }
-  }
-}
-
-static void
-render_frame (GstVisualGL * visual)
-{
-  const guint16 *data;
-  VisBuffer *lbuf, *rbuf;
-  guint16 ldata[VISUAL_SAMPLES], rdata[VISUAL_SAMPLES];
-  guint i;
-  gcahr *name;
-
-  /* Read VISUAL_SAMPLES samples per channel */
-  data =
-      (const guint16 *) gst_adapter_peek (visual->adapter,
-      VISUAL_SAMPLES * visual->bps);
-
-  lbuf = visual_buffer_new_with_buffer (ldata, sizeof (ldata), NULL);
-  rbuf = visual_buffer_new_with_buffer (rdata, sizeof (rdata), NULL);
-
-  if (visual->channels == 2) {
-    for (i = 0; i < VISUAL_SAMPLES; i++) {
-      ldata[i] = *data++;
-      rdata[i] = *data++;
-    }
-  } else {
-    for (i = 0; i < VISUAL_SAMPLES; i++) {
-      ldata[i] = *data;
-      rdata[i] = *data++;
-    }
-  }
-
-  visual_audio_samplepool_input_channel (visual->audio->samplepool,
-      lbuf, visual->libvisual_rate, VISUAL_AUDIO_SAMPLE_FORMAT_S16,
-      VISUAL_AUDIO_CHANNEL_LEFT);
-  visual_audio_samplepool_input_channel (visual->audio->samplepool,
-      rbuf, visual->libvisual_rate, VISUAL_AUDIO_SAMPLE_FORMAT_S16,
-      VISUAL_AUDIO_CHANNEL_RIGHT);
-
-  visual_object_unref (VISUAL_OBJECT (lbuf));
-  visual_object_unref (VISUAL_OBJECT (rbuf));
-
-  visual_audio_analyze (visual->audio);
-
-  /* apply the matrices that the actor set up */
-  glPushAttrib (GL_ALL_ATTRIB_BITS);
-
-  glMatrixMode (GL_PROJECTION);
-  glPushMatrix ();
-  glLoadMatrixd (visual->actor_projection_matrix);
-
-  glMatrixMode (GL_MODELVIEW);
-  glPushMatrix ();
-  glLoadMatrixd (visual->actor_modelview_matrix);
-
-  /* This line try to hacks compatiblity with libprojectM
-   * If libprojectM version <= 2.0.0 then we have to unbind our current
-   * fbo to see something. But it's incorrect and we cannot use fbo chainning (append other glfilters
-   * after libvisual_gl_projectM will not work)
-   * To have full compatibility, libprojectM needs to take care of our fbo.
-   * Indeed libprojectM has to unbind it before the first rendering pass
-   * and then rebind it before the final pass. It's done from 2.0.1
-   */
-  name = gst_element_get_name (GST_ELEMENT (visual));
-  if (g_ascii_strncasecmp (name, "visualglprojectm", 16) == 0
-      && !HAVE_PROJECTM_TAKING_CARE_OF_EXTERNAL_FBO)
-    glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
-  g_free (name);
-
-  actor_negotiate (visual->display, visual);
-
-  if (visual->is_enabled_gl_depth_test) {
-    glEnable (GL_DEPTH_TEST);
-    glDepthFunc (visual->gl_depth_func);
-  }
-
-  if (visual->is_enabled_gl_blend) {
-    glEnable (GL_BLEND);
-    glBlendFunc (visual->gl_blend_src_alpha, GL_ZERO);
-  }
-
-  visual_actor_run (visual->actor, visual->audio);
-
-  check_gl_matrix ();
-
-  glMatrixMode (GL_PROJECTION);
-  glPopMatrix ();
-
-  glMatrixMode (GL_MODELVIEW);
-  glPopMatrix ();
-
-  glPopAttrib ();
-
-  glDisable (GL_DEPTH_TEST);
-  glDisable (GL_BLEND);
-
-  /*glDisable (GL_LIGHT0);
-     glDisable (GL_LIGHTING);
-     glDisable (GL_POLYGON_OFFSET_FILL);
-     glDisable (GL_COLOR_MATERIAL);
-     glDisable (GL_CULL_FACE); */
-
-  GST_DEBUG_OBJECT (visual, "rendered one frame");
-}
-
-static void
-bottom_up_to_top_down (gint width, gint height, guint texture,
-    GstVisualGL * visual)
-{
-
-  glEnable (GL_TEXTURE_2D);
-  glBindTexture (GL_TEXTURE_2D, texture);
-
-  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-  glMatrixMode (GL_PROJECTION);
-  glLoadIdentity ();
-
-  glBegin (GL_QUADS);
-  glTexCoord2i (0, 0);
-  glVertex2i (-1, 1);
-  glTexCoord2i (width, 0);
-  glVertex2i (1, 1);
-  glTexCoord2i (width, height);
-  glVertex2i (1, -1);
-  glTexCoord2i (0, height);
-  glVertex2i (-1, -1);
-  glEnd ();
-
-  glBindTexture (GL_TEXTURE_2D, 0);
-  glDisable (GL_TEXTURE_2D);
-
-  GST_DEBUG_OBJECT (visual, "bottom up to top down");
-}
-
-static GstFlowReturn
-gst_visual_gl_chain (GstPad * pad, GstBuffer * buffer)
-{
-  GstGLBuffer *outbuf = NULL;
-  GstVisualGL *visual = GST_VISUAL_GL (gst_pad_get_parent (pad));
-  GstFlowReturn ret = GST_FLOW_OK;
-  guint avail;
-
-  GST_DEBUG_OBJECT (visual, "chain function called");
-
-  /* If we don't have an output format yet, preallocate a buffer to try and
-   * set one */
-  if (GST_PAD_CAPS (visual->srcpad) == NULL) {
-    ret = get_buffer (visual, &outbuf);
-    if (ret != GST_FLOW_OK) {
-      gst_buffer_unref (buffer);
-      goto beach;
-    }
-  }
-
-  /* resync on DISCONT */
-  if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) {
-    gst_adapter_clear (visual->adapter);
-  }
-
-  GST_DEBUG_OBJECT (visual,
-      "Input buffer has %d samples, time=%" G_GUINT64_FORMAT,
-      GST_BUFFER_SIZE (buffer) / visual->bps, GST_BUFFER_TIMESTAMP (buffer));
-
-  gst_adapter_push (visual->adapter, buffer);
-
-  while (TRUE) {
-    gboolean need_skip;
-    guint64 dist, timestamp;
-
-    GST_DEBUG_OBJECT (visual, "processing buffer");
-
-    avail = gst_adapter_available (visual->adapter);
-    GST_DEBUG_OBJECT (visual, "avail now %u", avail);
-
-    /* we need at least VISUAL_SAMPLES samples */
-    if (avail < VISUAL_SAMPLES * visual->bps)
-      break;
-
-    /* we need at least enough samples to make one frame */
-    if (avail < visual->spf * visual->bps)
-      break;
-
-    /* get timestamp of the current adapter byte */
-    timestamp = gst_adapter_prev_timestamp (visual->adapter, &dist);
-    if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
-      /* convert bytes to time */
-      dist /= visual->bps;
-      timestamp += gst_util_uint64_scale_int (dist, GST_SECOND, visual->rate);
-    }
-
-    if (timestamp != -1) {
-      gint64 qostime;
-
-      /* QoS is done on running time */
-      qostime = gst_segment_to_running_time (&visual->segment, GST_FORMAT_TIME,
-          timestamp);
-      qostime += visual->duration;
-
-      GST_OBJECT_LOCK (visual);
-      /* check for QoS, don't compute buffers that are known to be late */
-      need_skip = visual->earliest_time != -1 &&
-          qostime <= visual->earliest_time;
-      GST_OBJECT_UNLOCK (visual);
-
-      if (need_skip) {
-        GST_WARNING_OBJECT (visual,
-            "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (qostime), GST_TIME_ARGS (visual->earliest_time));
-        goto skip;
-      }
-    }
-
-    /* alloc a buffer if we don't have one yet, this happens
-     * when we pushed a buffer in this while loop before */
-    if (outbuf == NULL) {
-      ret = get_buffer (visual, &outbuf);
-      if (ret != GST_FLOW_OK) {
-        goto beach;
-      }
-    }
-
-    /* render libvisual plugin to our target */
-    gst_gl_display_use_fbo_v2 (visual->display,
-        visual->width, visual->height, visual->fbo, visual->depthbuffer,
-        visual->midtexture, (GLCB_V2) render_frame, (gpointer *) visual);
-
-    /* gst video is top-down whereas opengl plan is bottom up */
-    gst_gl_display_use_fbo (visual->display,
-        visual->width, visual->height, visual->fbo, visual->depthbuffer,
-        outbuf->texture, (GLCB) bottom_up_to_top_down,
-        visual->width, visual->height, visual->midtexture,
-        0, visual->width, 0, visual->height, GST_GL_DISPLAY_PROJECTION_ORTHO2D,
-        (gpointer *) visual);
-
-    GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
-    GST_BUFFER_DURATION (outbuf) = visual->duration;
-
-    ret = gst_pad_push (visual->srcpad, GST_BUFFER (outbuf));
-    outbuf = NULL;
-
-  skip:
-    GST_DEBUG_OBJECT (visual, "finished frame, flushing %u samples from input",
-        visual->spf);
-
-    /* Flush out the number of samples per frame */
-    gst_adapter_flush (visual->adapter, visual->spf * visual->bps);
-
-    /* quit the loop if something was wrong */
-    if (ret != GST_FLOW_OK)
-      break;
-  }
-
-beach:
-
-  if (outbuf != NULL)
-    gst_gl_buffer_unref (outbuf);
-
-  gst_object_unref (visual);
-
-  return ret;
-}
-
-static GstStateChangeReturn
-gst_visual_gl_change_state (GstElement * element, GstStateChange transition)
-{
-  GstVisualGL *visual = GST_VISUAL_GL (element);
-  GstStateChangeReturn ret;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-    {
-      GstElement *parent = GST_ELEMENT (gst_element_get_parent (visual));
-      GstStructure *structure = NULL;
-      GstQuery *query = NULL;
-      gboolean isPerformed = FALSE;
-      gchar *name;
-
-      if (!parent) {
-        GST_ELEMENT_ERROR (visual, CORE, STATE_CHANGE, (NULL),
-            ("A parent bin is required"));
-        return FALSE;
-      }
-
-      name = gst_element_get_name (visual);
-      structure = gst_structure_new (name, NULL);
-      query = gst_query_new_application (GST_QUERY_CUSTOM, structure);
-      g_free (name);
-
-      isPerformed = gst_element_query (parent, query);
-
-      if (isPerformed) {
-        const GValue *id_value =
-            gst_structure_get_value (structure, "gstgldisplay");
-        if (G_VALUE_HOLDS_POINTER (id_value))
-          /* at least one gl element is after in our gl chain */
-          visual->display =
-              gst_object_ref (GST_GL_DISPLAY (g_value_get_pointer (id_value)));
-        else {
-          /* this gl filter is a sink in terms of the gl chain */
-          visual->display = gst_gl_display_new ();
-          gst_gl_display_create_context (visual->display, 0);
-          //TODO visual->external_gl_context);
-        }
-
-        gst_visual_gl_reset (visual);
-
-        visual->actor =
-            visual_actor_new (GST_VISUAL_GL_GET_CLASS (visual)->plugin->info->
-            plugname);
-        visual->video = visual_video_new ();
-        visual->audio = visual_audio_new ();
-
-        if (!visual->actor || !visual->video)
-          goto actor_setup_failed;
-
-        gst_gl_display_thread_add (visual->display,
-            (GstGLDisplayThreadFunc) actor_setup, visual);
-
-        if (visual->actor_setup_result != 0)
-          goto actor_setup_failed;
-        else
-          visual_actor_set_video (visual->actor, visual->video);
-      }
-
-      gst_query_unref (query);
-      gst_object_unref (GST_OBJECT (parent));
-
-      if (!isPerformed)
-        return GST_STATE_CHANGE_FAILURE;
-    }
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-    {
-      if (visual->fbo) {
-        gst_gl_display_del_fbo (visual->display, visual->fbo,
-            visual->depthbuffer);
-        visual->fbo = 0;
-        visual->depthbuffer = 0;
-      }
-      if (visual->midtexture) {
-        gst_gl_display_del_texture (visual->display, visual->midtexture,
-            visual->width, visual->height);
-        visual->midtexture = 0;
-      }
-      if (visual->display) {
-        gst_object_unref (visual->display);
-        visual->display = NULL;
-      }
-
-      gst_visual_gl_clear_actors (visual);
-    }
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-
-  /* ERRORS */
-actor_setup_failed:
-  {
-    GST_ELEMENT_ERROR (visual, LIBRARY, INIT, (NULL),
-        ("could not set up actor"));
-    gst_visual_gl_clear_actors (visual);
-    return GST_STATE_CHANGE_FAILURE;
-  }
-}
-
-static void
-make_valid_name (char *name)
-{
-  /*
-   * Replace invalid chars with _ in the type name
-   */
-  static const gchar extra_chars[] = "-_+";
-  gchar *p = name;
-
-  for (; *p; p++) {
-    int valid = ((p[0] >= 'A' && p[0] <= 'Z') ||
-        (p[0] >= 'a' && p[0] <= 'z') ||
-        (p[0] >= '0' && p[0] <= '9') || strchr (extra_chars, p[0]));
-    if (!valid)
-      *p = '_';
-  }
-}
-
-static gboolean
-gst_visual_gl_actor_plugin_is_gl (VisObject * plugin, const gchar * name)
-{
-  gboolean is_gl;
-  gint depth;
-
-  depth = VISUAL_ACTOR_PLUGIN (plugin)->vidoptions.depth;
-  is_gl = (depth & VISUAL_VIDEO_DEPTH_GL) != 0;
-
-  if (!is_gl) {
-    GST_DEBUG ("plugin %s is not a GL plugin (%d), ignoring", name, depth);
-  } else {
-    GST_DEBUG ("plugin %s is a GL plugin (%d), registering", name, depth);
-  }
-
-  return is_gl;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  guint i, count;
-  VisList *list;
-
-  GST_DEBUG_CATEGORY_INIT (libvisual_debug, "libvisual", 0,
-      "libvisual audio visualisations");
-
-#ifdef LIBVISUAL_PLUGINSBASEDIR
-  gst_plugin_add_dependency_simple (plugin, "HOME/.libvisual/actor",
-      LIBVISUAL_PLUGINSBASEDIR "/actor", NULL, GST_PLUGIN_DEPENDENCY_FLAG_NONE);
-#endif
-
-  visual_log_set_verboseness (VISUAL_LOG_VERBOSENESS_LOW);
-  visual_log_set_info_handler (libvisual_log_handler, (void *) GST_LEVEL_INFO);
-  visual_log_set_warning_handler (libvisual_log_handler,
-      (void *) GST_LEVEL_WARNING);
-  visual_log_set_critical_handler (libvisual_log_handler,
-      (void *) GST_LEVEL_ERROR);
-  visual_log_set_error_handler (libvisual_log_handler,
-      (void *) GST_LEVEL_ERROR);
-
-  if (!visual_is_initialized ())
-    if (visual_init (NULL, NULL) != 0)
-      return FALSE;
-
-  list = visual_actor_get_list ();
-
-  count = visual_collection_size (VISUAL_COLLECTION (list));
-
-  for (i = 0; i < count; i++) {
-    VisPluginRef *ref = visual_list_get (list, i);
-    VisPluginData *visplugin = NULL;
-    gboolean skip = FALSE;
-    GType type;
-    gchar *name;
-    GTypeInfo info = {
-      sizeof (GstVisualGLClass),
-      NULL,
-      NULL,
-      gst_visual_gl_class_init,
-      NULL,
-      ref,
-      sizeof (GstVisualGL),
-      0,
-      NULL
-    };
-
-    visplugin = visual_plugin_load (ref);
-
-    if (ref->info->plugname == NULL)
-      continue;
-
-    /* Blacklist some plugins */
-    if (strcmp (ref->info->plugname, "gstreamer") == 0 ||
-        strcmp (ref->info->plugname, "gdkpixbuf") == 0) {
-      skip = TRUE;
-    } else {
-      /* only register plugins that support GL */
-      skip = !(gst_visual_gl_actor_plugin_is_gl (visplugin->info->plugin,
-              visplugin->info->plugname));
-    }
-
-    visual_plugin_unload (visplugin);
-
-    if (!skip) {
-      name = g_strdup_printf ("GstVisualGL%s", ref->info->plugname);
-      make_valid_name (name);
-      type = g_type_register_static (GST_TYPE_VISUAL_GL, name, &info, 0);
-      g_free (name);
-
-      name = g_strdup_printf ("libvisual_gl_%s", ref->info->plugname);
-      make_valid_name (name);
-      if (!gst_element_register (plugin, name, GST_RANK_NONE, type)) {
-        g_free (name);
-        return FALSE;
-      }
-      g_free (name);
-    }
-  }
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    "libvisual-gl",
-    "libvisual-gl visualization plugins",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
index 62af789..0eba7b4 100644 (file)
@@ -1,4 +1,3 @@
-#subdir('apexsink')
 subdir('assrender')
 #subdir('bs2b')
 subdir('bz2')
@@ -25,13 +24,11 @@ subdir('kate')
 #subdir('ladspa')
 subdir('libde265')
 subdir('libmms')
-#subdir('libvisual')
 #subdir('lv2')
 #subdir('modplug')
 #subdir('mpeg2enc')
 #subdir('mplex')
 #subdir('musepack')
-#subdir('nas')
 #subdir('neon')
 #subdir('ofa')
 #subdir('openal')
@@ -41,16 +38,13 @@ subdir('openh264')
 subdir('openjpeg')
 #subdir('openni2')
 subdir('opus')
-#subdir('qt')
 subdir('resindvd')
 subdir('rsvg')
 subdir('rtmp')
 subdir('sbc')
 subdir('schroedinger')
-#subdir('sdl')
 subdir('smoothstreaming')
 #subdir('sndfile')
-#subdir('sndio')
 if cc.get_id() != 'msvc'
   # soundtouch doesn't do exporting of symbols for DLLs and I'm not sure how to
   # do that for C++ classes. -- Nirbheek
@@ -62,7 +56,7 @@ endif
 #subdir('spc')
 subdir('srtp')
 #subdir('teletextdec')
-#subdir('timidity')
+#subdir('wildmidi')
 subdir('ttml')
 subdir('voaacenc')
 #subdir('voamrwbenc')
@@ -71,5 +65,4 @@ subdir('wayland')
 #subdir('webrtcdsp')
 subdir('webp')
 subdir('x265')
-#subdir('xvid')
 subdir('zbar')
diff --git a/ext/nas/Makefile.am b/ext/nas/Makefile.am
deleted file mode 100644 (file)
index ef1162a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-plugin_LTLIBRARIES = libgstnassink.la
-
-libgstnassink_la_SOURCES = nassink.c
-libgstnassink_la_CFLAGS = \
-       $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(NAS_CFLAGS)
-libgstnassink_la_LIBADD = \
-       $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(NAS_LIBS)
-libgstnassink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstnassink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = nassink.h
diff --git a/ext/nas/nassink.c b/ext/nas/nassink.c
deleted file mode 100644 (file)
index 2d6404b..0000000
+++ /dev/null
@@ -1,583 +0,0 @@
-/* GStreamer
- * Copyright (C) <2003> Laurent Vivier <Laurent.Vivier@bull.net>
- * Copyright (C) <2004> Arwed v. Merkatz <v.merkatz@gmx.net>
- *
- * Based on esdsink.c:
- * Copyright (C) <2001> Richard Boulton <richard-gst@tartarus.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <string.h>
-#include <audio/audiolib.h>
-#include <audio/soundlib.h>
-#include "nassink.h"
-
-#define NAS_SOUND_PORT_DURATION (2)
-
-GST_DEBUG_CATEGORY_STATIC (nas_debug);
-#define GST_CAT_DEFAULT nas_debug
-
-enum
-{
-  ARG_0,
-  ARG_MUTE,
-  ARG_HOST
-};
-
-#define DEFAULT_MUTE  FALSE
-#define DEFAULT_HOST  NULL
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "endianness = (int) BYTE_ORDER, "
-        "signed = (boolean) TRUE, "
-        "width = (int) 16, "
-        "depth = (int) 16, "
-        "rate = (int) [ 1000, 96000 ], "
-        "channels = (int) [ 1, 2 ]; "
-        "audio/x-raw-int, "
-        "signed = (boolean) FALSE, "
-        "width = (int) 8, "
-        "depth = (int) 8, "
-        "rate = (int) [ 1000, 96000 ], " "channels = (int) [ 1, 2 ]")
-    );
-
-static void gst_nas_sink_finalize (GObject * object);
-
-static gboolean gst_nas_sink_open (GstAudioSink * sink);
-static gboolean gst_nas_sink_close (GstAudioSink * sink);
-static gboolean gst_nas_sink_prepare (GstAudioSink * sink,
-    GstRingBufferSpec * spec);
-static gboolean gst_nas_sink_unprepare (GstAudioSink * sink);
-static guint gst_nas_sink_write (GstAudioSink * asink, gpointer data,
-    guint length);
-static guint gst_nas_sink_delay (GstAudioSink * asink);
-static void gst_nas_sink_reset (GstAudioSink * asink);
-static GstCaps *gst_nas_sink_getcaps (GstBaseSink * pad);
-
-static void gst_nas_sink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_nas_sink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static void NAS_flush (GstNasSink * sink);
-static void NAS_sendData (GstNasSink * sink, AuUint32 numBytes);
-static AuBool NAS_EventHandler (AuServer * aud, AuEvent * ev,
-    AuEventHandlerRec * handler);
-static AuDeviceID NAS_getDevice (AuServer * aud, int numTracks);
-
-GST_BOILERPLATE (GstNasSink, gst_nas_sink, GstAudioSink, GST_TYPE_AUDIO_SINK);
-
-static void
-gst_nas_sink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class, &sink_factory);
-  gst_element_class_set_static_metadata (element_class, "NAS audio sink",
-      "Sink/Audio",
-      "Plays audio to a Network Audio Server",
-      "Laurent Vivier <Laurent.Vivier@bull.net>, "
-      "Arwed v. Merkatz <v.merkatz@gmx.net>");
-}
-
-static void
-gst_nas_sink_class_init (GstNasSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSinkClass *gstbasesink_class;
-  GstAudioSinkClass *gstaudiosink_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesink_class = (GstBaseSinkClass *) klass;
-  gstaudiosink_class = (GstAudioSinkClass *) klass;
-
-  gobject_class->set_property = gst_nas_sink_set_property;
-  gobject_class->get_property = gst_nas_sink_get_property;
-  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_nas_sink_finalize);
-
-  g_object_class_install_property (gobject_class, ARG_MUTE,
-      g_param_spec_boolean ("mute", "mute", "Whether to mute playback",
-          DEFAULT_MUTE,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, ARG_HOST,
-      g_param_spec_string ("host", "host",
-          "host running the NAS daemon (name of X/Terminal, default is "
-          "$AUDIOSERVER or $DISPLAY)", DEFAULT_HOST,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-
-  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_nas_sink_getcaps);
-
-  gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_nas_sink_open);
-  gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_nas_sink_close);
-  gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_nas_sink_prepare);
-  gstaudiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_nas_sink_unprepare);
-  gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_nas_sink_write);
-  gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_nas_sink_delay);
-  gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_nas_sink_reset);
-}
-
-static void
-gst_nas_sink_init (GstNasSink * nassink, GstNasSinkClass * klass)
-{
-  /* properties will automatically be set to their default values */
-  nassink->audio = NULL;
-  nassink->flow = AuNone;
-  nassink->need_data = 0;
-}
-
-static void
-gst_nas_sink_finalize (GObject * object)
-{
-  GstNasSink *nassink = GST_NAS_SINK (object);
-
-  g_free (nassink->host);
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static GstCaps *
-gst_nas_sink_getcaps (GstBaseSink * bsink)
-{
-  GstNasSink *nassink = GST_NAS_SINK (bsink);
-  const GstCaps *templatecaps;
-  AuServer *server;
-  GstCaps *fixated, *caps;
-  int i;
-
-  server = nassink->audio;
-
-  templatecaps = gst_static_pad_template_get_caps (&sink_factory);
-
-  if (server == NULL)
-    return gst_caps_copy (templatecaps);
-
-  fixated = gst_caps_copy (templatecaps);
-  for (i = 0; i < gst_caps_get_size (fixated); i++) {
-    GstStructure *structure;
-    gint min, max;
-
-    min = AuServerMinSampleRate (server);
-    max = AuServerMaxSampleRate (server);
-
-    structure = gst_caps_get_structure (fixated, i);
-
-    if (min == max)
-      gst_structure_set (structure, "rate", G_TYPE_INT, max, NULL);
-    else
-      gst_structure_set (structure, "rate", GST_TYPE_INT_RANGE, min, max, NULL);
-  }
-
-  caps = gst_caps_intersect (fixated, templatecaps);
-  gst_caps_unref (fixated);
-
-  if (nassink->audio == NULL)
-    AuCloseServer (server);
-
-  return caps;
-}
-
-static gint
-gst_nas_sink_sink_get_format (const GstRingBufferSpec * spec)
-{
-  gint result;
-
-  switch (spec->format) {
-    case GST_U8:
-      result = AuFormatLinearUnsigned8;
-      break;
-    case GST_S8:
-      result = AuFormatLinearSigned8;
-      break;
-    case GST_S16_LE:
-      result = AuFormatLinearSigned16LSB;
-      break;
-    case GST_S16_BE:
-      result = AuFormatLinearSigned16MSB;
-      break;
-    case GST_U16_LE:
-      result = AuFormatLinearUnsigned16LSB;
-      break;
-    case GST_U16_BE:
-      result = AuFormatLinearUnsigned16MSB;
-      break;
-    default:
-      result = 0;
-      break;
-  }
-  return result;
-}
-
-static gboolean
-gst_nas_sink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec)
-{
-  GstNasSink *sink = GST_NAS_SINK (asink);
-  AuElement elements[2];
-  AuUint32 buf_samples;
-  unsigned char format;
-
-  format = gst_nas_sink_sink_get_format (spec);
-  if (format == 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, SETTINGS, (NULL),
-        ("Unable to get format %d", spec->format));
-    return FALSE;
-  }
-  GST_DEBUG_OBJECT (sink, "Format: %d %d\n", spec->format, format);
-
-  sink->flow = AuGetScratchFlow (sink->audio, NULL);
-  if (sink->flow == 0) {
-    GST_DEBUG_OBJECT (sink, "couldn't get flow");
-    return FALSE;
-  }
-
-  buf_samples = spec->rate * NAS_SOUND_PORT_DURATION;
-  /*
-     spec->segsize = gst_util_uint64_scale (buf_samples * spec->bytes_per_sample,
-     spec->latency_time, GST_SECOND / GST_USECOND);
-     spec->segsize -= spec->segsize % spec->bytes_per_sample;
-     spec->segtotal = spec->buffer_time / spec->latency_time;
-   */
-  spec->segsize = buf_samples * spec->bytes_per_sample;
-  spec->segtotal = 1;
-
-  memset (spec->silence_sample, 0, spec->bytes_per_sample);
-  GST_DEBUG_OBJECT (sink, "Bytes per sample %d", spec->bytes_per_sample);
-
-  GST_DEBUG_OBJECT (sink, "Rate %d Format %d tracks %d bufs %d %d/%d w %d",
-      spec->rate, format, spec->channels, (gint) buf_samples, spec->segsize,
-      spec->segtotal, spec->width);
-  AuMakeElementImportClient (&elements[0],      /* element */
-      spec->rate,               /* rate */
-      format,                   /* format */
-      spec->channels,           /* number of tracks */
-      AuTrue,                   /* discart */
-      buf_samples,              /* max samples */
-      (AuUint32) (buf_samples / 100 * AuSoundPortLowWaterMark),
-      /* low water mark */
-      0,                        /* num actions */
-      NULL);
-
-  sink->device = NAS_getDevice (sink->audio, spec->channels);
-  if (sink->device == AuNone) {
-    GST_DEBUG_OBJECT (sink, "no device with %i tracks found", spec->channels);
-    return FALSE;
-  }
-
-  AuMakeElementExportDevice (&elements[1],      /* element */
-      0,                        /* input */
-      sink->device,             /* device */
-      spec->rate,               /* rate */
-      AuUnlimitedSamples,       /* num samples */
-      0,                        /* num actions */
-      NULL);                    /* actions */
-
-  AuSetElements (sink->audio,   /* server */
-      sink->flow,               /* flow ID */
-      AuTrue,                   /* clocked */
-      2,                        /* num elements */
-      elements,                 /* elements */
-      NULL);
-
-  AuRegisterEventHandler (sink->audio,  /* server */
-      AuEventHandlerIDMask,     /* value mask */
-      0,                        /* type */
-      sink->flow,               /* flow ID */
-      NAS_EventHandler,         /* callback */
-      (AuPointer) sink);        /* data */
-
-  AuStartFlow (sink->audio, sink->flow, NULL);
-
-  return TRUE;
-}
-
-static gboolean
-gst_nas_sink_unprepare (GstAudioSink * asink)
-{
-  GstNasSink *sink = GST_NAS_SINK (asink);
-
-  if (sink->flow != AuNone) {
-    AuBool clocked;
-    int num_elements;
-    AuStatus status;
-    AuElement *oldelems;
-
-    GST_DEBUG_OBJECT (sink, "flushing buffer");
-    NAS_flush (sink);
-
-    oldelems =
-        AuGetElements (sink->audio, sink->flow, &clocked, &num_elements,
-        &status);
-    if (num_elements > 0) {
-      GST_DEBUG_OBJECT (sink, "GetElements status: %i", status);
-      if (oldelems)
-        AuFreeElements (sink->audio, num_elements, oldelems);
-    }
-
-    AuStopFlow (sink->audio, sink->flow, NULL);
-    AuReleaseScratchFlow (sink->audio, sink->flow, NULL);
-    sink->flow = AuNone;
-  }
-  sink->need_data = 0;
-
-  return TRUE;
-}
-
-static guint
-gst_nas_sink_delay (GstAudioSink * asink)
-{
-  GST_DEBUG_OBJECT (asink, "nas_sink_delay");
-  return 0;
-}
-
-static void
-gst_nas_sink_reset (GstAudioSink * asink)
-{
-  GstNasSink *sink = GST_NAS_SINK (asink);
-
-  GST_DEBUG_OBJECT (sink, "reset");
-
-  if (sink->flow != AuNone)
-    AuStopFlow (sink->audio, sink->flow, NULL);
-}
-
-static guint
-gst_nas_sink_write (GstAudioSink * asink, gpointer data, guint length)
-{
-  GstNasSink *nassink = GST_NAS_SINK (asink);
-  int used = 0;
-
-  NAS_flush (nassink);
-  if (!nassink->mute && nassink->audio != NULL && nassink->flow != AuNone) {
-
-    if (nassink->need_data == 0)
-      return 0;
-
-    used = nassink->need_data > length ? length : nassink->need_data;
-    AuWriteElement (nassink->audio, nassink->flow, 0, used, data, AuFalse,
-        NULL);
-    nassink->need_data -= used;
-    if (used == length)
-      AuSync (nassink->audio, AuFalse);
-  } else
-    used = length;
-  return used;
-}
-
-static void
-gst_nas_sink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstNasSink *nassink;
-
-  nassink = GST_NAS_SINK (object);
-
-  switch (prop_id) {
-    case ARG_MUTE:
-      nassink->mute = g_value_get_boolean (value);
-      break;
-    case ARG_HOST:
-      g_free (nassink->host);
-      nassink->host = g_value_dup_string (value);
-      if (nassink->host == NULL)
-        nassink->host = g_strdup (g_getenv ("AUDIOSERVER"));
-      if (nassink->host == NULL)
-        nassink->host = g_strdup (g_getenv ("DISPLAY"));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_nas_sink_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstNasSink *nassink;
-
-  nassink = GST_NAS_SINK (object);
-
-  switch (prop_id) {
-    case ARG_MUTE:
-      g_value_set_boolean (value, nassink->mute);
-      break;
-    case ARG_HOST:
-      g_value_set_string (value, nassink->host);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static gboolean
-gst_nas_sink_open (GstAudioSink * asink)
-{
-  GstNasSink *sink = GST_NAS_SINK (asink);
-
-  GST_DEBUG_OBJECT (sink, "opening, host = '%s'", GST_STR_NULL (sink->host));
-
-  /* Open Server */
-  sink->audio = AuOpenServer (sink->host, 0, NULL, 0, NULL, NULL);
-  if (sink->audio == NULL) {
-    GST_DEBUG_OBJECT (sink, "opening failed");
-    return FALSE;
-  }
-  sink->flow = AuNone;
-  sink->need_data = 0;
-
-  /* Start a flow */
-  GST_DEBUG_OBJECT (asink, "opened audio device");
-  return TRUE;
-}
-
-static gboolean
-gst_nas_sink_close (GstAudioSink * asink)
-{
-  GstNasSink *sink = GST_NAS_SINK (asink);
-
-  if (sink->audio) {
-    AuCloseServer (sink->audio);
-    sink->audio = NULL;
-  }
-
-  GST_DEBUG_OBJECT (sink, "closed audio device");
-  return TRUE;
-}
-
-static void
-NAS_flush (GstNasSink * sink)
-{
-  AuEvent ev;
-
-  AuNextEvent (sink->audio, AuTrue, &ev);
-  AuDispatchEvent (sink->audio, &ev);
-}
-
-static void
-NAS_sendData (GstNasSink * sink, AuUint32 numBytes)
-{
-  sink->need_data += numBytes;
-  return;
-}
-
-static AuBool
-NAS_EventHandler (AuServer * aud, AuEvent * ev, AuEventHandlerRec * handler)
-{
-  GstNasSink *sink = (GstNasSink *) handler->data;
-  AuElementNotifyEvent *notify;
-
-  switch (ev->type) {
-
-    case AuEventTypeElementNotify:
-
-      notify = (AuElementNotifyEvent *) ev;
-
-      switch (notify->kind) {
-
-        case AuElementNotifyKindLowWater:
-          NAS_sendData (sink, notify->num_bytes);
-          break;
-
-        case AuElementNotifyKindState:
-
-          switch (notify->cur_state) {
-
-            case AuStateStop:
-
-              if (sink->flow != AuNone) {
-                if (notify->reason == AuReasonEOF)
-                  AuStopFlow (handler->aud, sink->flow, NULL);
-                AuReleaseScratchFlow (handler->aud, sink->flow, NULL);
-                sink->flow = AuNone;
-              }
-              AuUnregisterEventHandler (handler->aud, handler);
-              break;
-
-            case AuStatePause:
-
-              switch (notify->reason) {
-                case AuReasonUnderrun:
-                case AuReasonOverrun:
-                case AuReasonEOF:
-                case AuReasonWatermark:
-
-                  NAS_sendData (sink, notify->num_bytes);
-
-                  break;
-
-                case AuReasonHardware:
-
-                  if (AuSoundRestartHardwarePauses)
-                    AuStartFlow (handler->aud, sink->flow, NULL);
-                  else
-                    AuStopFlow (handler->aud, sink->flow, NULL);
-
-                  break;
-              }
-              break;
-          }
-          break;
-      }
-      break;
-  }
-
-  return AuTrue;
-}
-
-static AuDeviceID
-NAS_getDevice (AuServer * aud, int numTracks)
-{
-  int i;
-
-  for (i = 0; i < AuServerNumDevices (aud); i++) {
-    if ((AuDeviceKind (AuServerDevice (aud, i))
-            == AuComponentKindPhysicalOutput) &&
-        (AuDeviceNumTracks (AuServerDevice (aud, i)) == numTracks)) {
-
-      return AuDeviceIdentifier (AuServerDevice (aud, i));
-
-    }
-  }
-
-  return AuNone;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (nas_debug, "NAS", 0, NULL);
-
-  if (!gst_element_register (plugin, "nassink", GST_RANK_NONE,
-          GST_TYPE_NAS_SINK)) {
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    nas,
-    "NAS (Network Audio System) support for GStreamer",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/ext/nas/nassink.h b/ext/nas/nassink.h
deleted file mode 100644 (file)
index 14ab5fd..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_NAS_SINK_H__
-#define __GST_NAS_SINK_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiosink.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_NAS_SINK \
-  (gst_nas_sink_get_type())
-#define GST_NAS_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_NAS_SINK,GstNasSink))
-#define GST_NAS_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_NAS_SINK,GstNasSinkClass))
-#define GST_IS_NAS_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_NAS_SINK))
-#define GST_IS_NAS_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_NAS_SINK))
-
-typedef struct _GstNasSink GstNasSink;
-typedef struct _GstNasSinkClass GstNasSinkClass;
-
-struct _GstNasSink {
-  GstAudioSink audiosink;
-
-  /*< private >*/
-
-  /* instance properties */
-
-  gboolean mute;
-  gchar* host;
-
-  /* Server info */
-
-  AuServer *audio;
-  AuFlowID flow;
-  AuDeviceID device;
-
-  /* buffer */
-
-  AuUint32 need_data;
-};
-
-struct _GstNasSinkClass {
-  GstAudioSinkClass parent_class;
-};
-
-GType gst_nas_sink_get_type(void);
-
-G_END_DECLS
-
-#endif /* __GST_NAS_SINK_H__ */
diff --git a/ext/sdl/Makefile.am b/ext/sdl/Makefile.am
deleted file mode 100644 (file)
index d0c5b1a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-plugin_LTLIBRARIES = libgstsdl.la 
-
-libgstsdl_la_SOURCES = \
-       gstsdl.c \
-       sdlvideosink.c \
-       sdlaudiosink.c
-
-libgstsdl_la_CFLAGS =  $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(SDL_CFLAGS)
-libgstsdl_la_LIBADD =  $(GST_PLUGINS_BASE_LIBS) \
-                               -lgstvideo-$(GST_API_VERSION) \
-                               -lgstaudio-$(GST_API_VERSION) \
-                               -lgstinterfaces-$(GST_API_VERSION) \
-                               $(SDL_LIBS)
-libgstsdl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) 
-libgstsdl_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = \
-       sdlvideosink.h \
-       sdlaudiosink.h
diff --git a/ext/sdl/gstsdl.c b/ext/sdl/gstsdl.c
deleted file mode 100644 (file)
index 8813edb..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005> Edgard Lima <edgard.lima@indt.org.br>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more 
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "sdlvideosink.h"
-#include "sdlaudiosink.h"
-
-
-GST_DEBUG_CATEGORY (sdl_debug);
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-
-  if (!gst_element_register (plugin, "sdlvideosink", GST_RANK_NONE,
-          GST_TYPE_SDLVIDEOSINK) ||
-      !gst_element_register (plugin, "sdlaudiosink", GST_RANK_NONE,
-          GST_TYPE_SDLAUDIOSINK)) {
-    return FALSE;
-  }
-
-  GST_DEBUG_CATEGORY_INIT (sdl_debug, "sdl", 0, "SDL elements");
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    sdl,
-    "SDL (Simple DirectMedia Layer) support for GStreamer",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/sdl/sdlaudiosink.c b/ext/sdl/sdlaudiosink.c
deleted file mode 100644 (file)
index ff03782..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005> Edgard Lima <edgard.lima@indt.org.br>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more 
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "sdlaudiosink.h"
-
-#include <SDL_byteorder.h>
-#include <string.h>
-
-#include <unistd.h>
-
-#include <gst/glib-compat-private.h>
-
-GST_DEBUG_CATEGORY_EXTERN (sdl_debug);
-#define GST_CAT_DEFAULT sdl_debug
-
-static void gst_sdlaudio_sink_dispose (GObject * object);
-
-static GstCaps *gst_sdlaudio_sink_getcaps (GstBaseSink * bsink);
-
-static gboolean gst_sdlaudio_sink_open (GstAudioSink * asink);
-static gboolean gst_sdlaudio_sink_close (GstAudioSink * asink);
-static gboolean gst_sdlaudio_sink_prepare (GstAudioSink * asink,
-    GstRingBufferSpec * spec);
-static gboolean gst_sdlaudio_sink_unprepare (GstAudioSink * asink);
-static guint gst_sdlaudio_sink_write (GstAudioSink * asink, gpointer data,
-    guint length);
-
-#if 0
-static guint gst_sdlaudio_sink_delay (GstAudioSink * asink);
-static void gst_sdlaudio_sink_reset (GstAudioSink * asink);
-#endif
-
-
-/* SdlaudioSink signals and args */
-enum
-{
-  LAST_SIGNAL
-};
-
-#define  SEMAPHORE_INIT(s,f)                   \
-  do {                                         \
-    s.cond = g_cond_new();                     \
-    s.mutex = g_mutex_new();                   \
-    s.mutexflag = f;                           \
-  } while(0)
-
-#define  SEMAPHORE_CLOSE(s)                    \
-  do {                                         \
-    if ( s.cond ) {                            \
-      g_cond_free(s.cond);                     \
-      s.cond = NULL;                           \
-    }                                          \
-    if ( s.mutex ) {                           \
-      g_mutex_free(s.mutex);                   \
-      s.mutex = NULL;                          \
-    }                                          \
-  } while(0)
-
-#define SEMAPHORE_UP(s)                                        \
-  do                                                   \
-    {                                                  \
-      g_mutex_lock(s.mutex);                           \
-      s.mutexflag = TRUE;                              \
-      g_mutex_unlock(s.mutex);                         \
-      g_cond_signal(s.cond);                           \
-    } while(0)
-
-#define SEMAPHORE_DOWN(s, e)                           \
-  do                                                   \
-    {                                                  \
-      while (1) {                                      \
-       g_mutex_lock(s.mutex);                          \
-       if (!s.mutexflag) {                             \
-         if ( e ) {                                    \
-           g_mutex_unlock(s.mutex);                    \
-           break;                                      \
-         }                                             \
-         g_cond_wait(s.cond,s.mutex);                  \
-       }                                               \
-       else {                                          \
-         s.mutexflag = FALSE;                          \
-         g_mutex_unlock(s.mutex);                      \
-         break;                                        \
-       }                                               \
-       g_mutex_unlock(s.mutex);                        \
-      }                                                        \
-    } while(0)
-
-
-static GstStaticPadTemplate sdlaudiosink_sink_factory =
-    GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "endianness = (int) { " G_STRINGIFY (G_BYTE_ORDER) " }, "
-        "signed = (boolean) { TRUE, FALSE }, "
-        "width = (int) 16, "
-        "depth = (int) 16, "
-        "rate = (int) [ 1, MAX ], "
-        "channels = (int) [ 1, 2 ]; "
-        "audio/x-raw-int, "
-        "endianness = (int) { " G_STRINGIFY (G_BYTE_ORDER) " }, "
-        "signed = (boolean) { TRUE, FALSE }, "
-        "width = (int) 8, "
-        "depth = (int) 8, "
-        "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]")
-    );
-
-GST_BOILERPLATE (GstSDLAudioSink, gst_sdlaudio_sink, GstAudioSink,
-    GST_TYPE_AUDIO_SINK);
-
-static void
-gst_sdlaudio_sink_dispose (GObject * object)
-{
-  GstSDLAudioSink *sdlaudiosink = GST_SDLAUDIOSINK (object);
-
-  SEMAPHORE_CLOSE (sdlaudiosink->semB);
-
-  SEMAPHORE_CLOSE (sdlaudiosink->semA);
-
-  if (sdlaudiosink->buffer) {
-    g_free (sdlaudiosink->buffer);
-  }
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-
-}
-
-static void
-gst_sdlaudio_sink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_set_static_metadata (element_class, "SDL audio sink",
-      "Sink/Audio",
-      "Output to a sound card via SDLAUDIO",
-      "Edgard Lima <edgard.lima@indt.org.br>");
-
-  gst_element_class_add_static_pad_template (element_class,
-      &sdlaudiosink_sink_factory);
-}
-
-static void
-gst_sdlaudio_sink_class_init (GstSDLAudioSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSinkClass *gstbasesink_class;
-  GstAudioSinkClass *gstaudiosink_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesink_class = (GstBaseSinkClass *) klass;
-  gstaudiosink_class = (GstAudioSinkClass *) klass;
-
-  gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_dispose);
-
-  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_getcaps);
-
-  gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_open);
-  gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_close);
-  gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_prepare);
-  gstaudiosink_class->unprepare =
-      GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_unprepare);
-  gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_write);
-
-#if 0
-  gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_delay);
-  gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_sdlaudio_sink_reset);
-#endif
-
-}
-
-static void
-gst_sdlaudio_sink_init (GstSDLAudioSink * sdlaudiosink,
-    GstSDLAudioSinkClass * g_class)
-{
-  GST_DEBUG ("initializing sdlaudiosink");
-
-  memset (&sdlaudiosink->fmt, 0, sizeof (SDL_AudioSpec));
-
-  sdlaudiosink->buffer = NULL;
-  sdlaudiosink->eos = FALSE;
-
-  SEMAPHORE_INIT (sdlaudiosink->semA, TRUE);
-
-  SEMAPHORE_INIT (sdlaudiosink->semB, FALSE);
-
-}
-
-static GstCaps *
-gst_sdlaudio_sink_getcaps (GstBaseSink * bsink)
-{
-  return gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD
-          (bsink)));
-}
-
-static gint
-gst_sdlaudio_sink_get_format (GstBufferFormat fmt)
-{
-  gint result = GST_UNKNOWN;
-
-  switch (fmt) {
-    case GST_U8:
-      result = AUDIO_U8;
-      break;
-    case GST_S8:
-      result = AUDIO_S8;
-      break;
-    case GST_S16_LE:
-      result = AUDIO_S16LSB;
-      break;
-    case GST_S16_BE:
-      result = AUDIO_S16MSB;
-      break;
-    case GST_U16_LE:
-      result = AUDIO_U16LSB;
-      break;
-    case GST_U16_BE:
-      result = AUDIO_U16MSB;
-      break;
-    default:
-      break;
-  }
-  return result;
-}
-
-static gboolean
-gst_sdlaudio_sink_open (GstAudioSink * asink)
-{
-  GstSDLAudioSink *sdlaudio;
-
-  sdlaudio = GST_SDLAUDIOSINK (asink);
-
-  if (SDL_Init (SDL_INIT_AUDIO) < 0) {
-    goto open_failed;
-  }
-
-  return TRUE;
-
-open_failed:
-  {
-    GST_ELEMENT_ERROR (sdlaudio, LIBRARY, INIT,
-        ("Unable to init SDL: %s\n", SDL_GetError ()), (NULL));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_sdlaudio_sink_close (GstAudioSink * asink)
-{
-  GstSDLAudioSink *sdlaudio = GST_SDLAUDIOSINK (asink);
-
-  sdlaudio->eos = TRUE;
-  SEMAPHORE_UP (sdlaudio->semA);
-  SEMAPHORE_UP (sdlaudio->semB);
-  SDL_QuitSubSystem (SDL_INIT_AUDIO);
-  return TRUE;
-}
-
-static guint
-gst_sdlaudio_sink_write (GstAudioSink * asink, gpointer data, guint length)
-{
-  GstSDLAudioSink *sdlaudio = GST_SDLAUDIOSINK (asink);
-
-  if (sdlaudio->fmt.size != length) {
-    GST_ERROR ("ring buffer segment length (%u) != sdl buffer len (%u)", length,
-        sdlaudio->fmt.size);
-  }
-
-  SEMAPHORE_DOWN (sdlaudio->semA, sdlaudio->eos);
-
-  if (!sdlaudio->eos)
-    memcpy (sdlaudio->buffer, data, length);
-
-  SEMAPHORE_UP (sdlaudio->semB);
-
-  return sdlaudio->fmt.size;
-}
-
-
-static void
-mixaudio (void *unused, Uint8 * stream, int len)
-{
-  GstSDLAudioSink *sdlaudio;
-
-  sdlaudio = GST_SDLAUDIOSINK (unused);
-
-  if (sdlaudio->fmt.size != len) {
-    GST_ERROR ("fmt buffer len (%u) != sdl callback len (%d)",
-        sdlaudio->fmt.size, len);
-  }
-
-  SEMAPHORE_DOWN (sdlaudio->semB, sdlaudio->eos);
-
-  if (!sdlaudio->eos)
-    SDL_MixAudio (stream, sdlaudio->buffer, sdlaudio->fmt.size,
-        SDL_MIX_MAXVOLUME);
-
-  SEMAPHORE_UP (sdlaudio->semA);
-
-}
-
-static gboolean
-gst_sdlaudio_sink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec)
-{
-  GstSDLAudioSink *sdlaudio;
-  gint power2 = -1;
-
-  sdlaudio = GST_SDLAUDIOSINK (asink);
-
-  sdlaudio->fmt.format = gst_sdlaudio_sink_get_format (spec->format);
-  if (sdlaudio->fmt.format == 0)
-    goto wrong_format;
-
-  if (spec->width != 16 && spec->width != 8)
-    goto dodgy_width;
-
-  sdlaudio->fmt.freq = spec->rate;
-  sdlaudio->fmt.channels = spec->channels;
-  sdlaudio->fmt.samples =
-      spec->segsize / (spec->channels * ((sdlaudio->fmt.format & 0xFF) >> 3));
-  sdlaudio->fmt.callback = mixaudio;
-  sdlaudio->fmt.userdata = sdlaudio;
-
-  GST_DEBUG ("set segsize: %d, segtotal: %d, samples: %d", spec->segsize,
-      spec->segtotal, sdlaudio->fmt.samples);
-
-  while (sdlaudio->fmt.samples) {
-    sdlaudio->fmt.samples >>= 1;
-    ++power2;
-  }
-
-  sdlaudio->fmt.samples = 1;
-  sdlaudio->fmt.samples <<= power2;
-
-  GST_DEBUG ("set segsize: %d, segtotal: %d, samples: %d", spec->segsize,
-      spec->segtotal, sdlaudio->fmt.samples);
-
-  if (SDL_OpenAudio (&sdlaudio->fmt, NULL) < 0) {
-    goto unable_open;
-  }
-
-  spec->segsize = sdlaudio->fmt.size;
-
-  sdlaudio->buffer = g_malloc (sdlaudio->fmt.size);
-  memset (sdlaudio->buffer, sdlaudio->fmt.silence, sdlaudio->fmt.size);
-
-  GST_DEBUG ("set segsize: %d, segtotal: %d, samples: %d", spec->segsize,
-      spec->segtotal, sdlaudio->fmt.samples);
-
-  spec->bytes_per_sample =
-      spec->channels * ((sdlaudio->fmt.format & 0xFF) >> 3);
-  memset (spec->silence_sample, sdlaudio->fmt.silence, spec->bytes_per_sample);
-
-  SDL_PauseAudio (0);
-
-  return TRUE;
-
-unable_open:
-  {
-    GST_ELEMENT_ERROR (sdlaudio, RESOURCE, OPEN_READ,
-        ("Unable to open audio: %s", SDL_GetError ()), (NULL));
-    return FALSE;
-  }
-wrong_format:
-  {
-    GST_ELEMENT_ERROR (sdlaudio, RESOURCE, OPEN_READ,
-        ("Unable to get format %d", spec->format), (NULL));
-    return FALSE;
-  }
-dodgy_width:
-  {
-    GST_ELEMENT_ERROR (sdlaudio, RESOURCE, OPEN_READ,
-        ("unexpected width %d", spec->width), (NULL));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_sdlaudio_sink_unprepare (GstAudioSink * asink)
-{
-
-  SDL_CloseAudio ();
-
-  return TRUE;
-
-#if 0
-  if (!gst_sdlaudio_sink_close (asink))
-    goto couldnt_close;
-
-  if (!gst_sdlaudio_sink_open (asink))
-    goto couldnt_reopen;
-
-  return TRUE;
-
-couldnt_close:
-  {
-    GST_DEBUG ("Could not close the audio device");
-    return FALSE;
-  }
-couldnt_reopen:
-  {
-    GST_DEBUG ("Could not reopen the audio device");
-    return FALSE;
-  }
-#endif
-
-}
-
-#if 0
-static guint
-gst_sdlaudio_sink_delay (GstAudioSink * asink)
-{
-  GstSDLAudioSink *sdlaudio;
-
-  sdlaudio = GST_SDLAUDIOSINK (asink);
-
-  return 0;
-}
-
-static void
-gst_sdlaudio_sink_reset (GstAudioSink * asink)
-{
-}
-#endif
diff --git a/ext/sdl/sdlaudiosink.h b/ext/sdl/sdlaudiosink.h
deleted file mode 100644 (file)
index 8532f3f..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005> Edgard Lima <edgard.lima@indt.org.br>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more 
- */
-
-#ifndef __GST_SDLAUDIOSINK_H__
-#define __GST_SDLAUDIOSINK_H__
-
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiosink.h>
-
-#include <SDL.h>
-#include <SDL_audio.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SDLAUDIOSINK            (gst_sdlaudio_sink_get_type())
-#define GST_SDLAUDIOSINK(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SDLAUDIOSINK,GstSDLAudioSink))
-#define GST_SDLAUDIOSINK_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SDLAUDIOSINK,GstSDLAudioSinkClass))
-#define GST_IS_SDLAUDIOSINK(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SDLAUDIOSINK))
-#define GST_IS_SDLAUDIOSINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SDLAUDIOSINK))
-
-typedef struct _GstSDLAudioSink GstSDLAudioSink;
-typedef struct _GstSDLAudioSinkClass GstSDLAudioSinkClass;
-
-typedef struct _gstsdl_semaphore {
-  GCond *cond;
-  GMutex *mutex;
-  gboolean mutexflag;
-
-} gstsdl_semaphore;
-
-struct _GstSDLAudioSink {
-  GstAudioSink    sink;
-
-  SDL_AudioSpec fmt;
-  guint8 *buffer;
-
-  gstsdl_semaphore semA;
-
-  gstsdl_semaphore semB;
-
-  gboolean eos;
-
-};
-
-struct _GstSDLAudioSinkClass {
-  GstAudioSinkClass parent_class;
-};
-
-GType gst_sdlaudio_sink_get_type(void);
-
-G_END_DECLS
-
-#endif /* __GST_SDLAUDIOSINK_H__ */
diff --git a/ext/sdl/sdlvideosink.c b/ext/sdl/sdlvideosink.c
deleted file mode 100644 (file)
index 7f05dca..0000000
+++ /dev/null
@@ -1,1006 +0,0 @@
-/* GStreamer SDL plugin
- * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* let's not forget to mention that all this was based on aasink ;-) */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <signal.h>
-#include <string.h>
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include <stdlib.h>
-
-#include <gst/glib-compat-private.h>
-#include <gst/interfaces/xoverlay.h>
-#include <gst/interfaces/navigation.h>
-
-#include "sdlvideosink.h"
-
-GST_DEBUG_CATEGORY_EXTERN (sdl_debug);
-#define GST_CAT_DEFAULT sdl_debug
-
-/* These macros are adapted from videotestsrc.c 
- *  and/or gst-plugins/gst/games/gstvideoimage.c */
-#define I420_Y_ROWSTRIDE(width) (GST_ROUND_UP_4(width))
-#define I420_U_ROWSTRIDE(width) (GST_ROUND_UP_8(width)/2)
-#define I420_V_ROWSTRIDE(width) ((GST_ROUND_UP_8(I420_Y_ROWSTRIDE(width)))/2)
-
-#define I420_Y_OFFSET(w,h) (0)
-#define I420_U_OFFSET(w,h) (I420_Y_OFFSET(w,h)+(I420_Y_ROWSTRIDE(w)*GST_ROUND_UP_2(h)))
-#define I420_V_OFFSET(w,h) (I420_U_OFFSET(w,h)+(I420_U_ROWSTRIDE(w)*GST_ROUND_UP_2(h)/2))
-
-#define I420_SIZE(w,h)     (I420_V_OFFSET(w,h)+(I420_V_ROWSTRIDE(w)*GST_ROUND_UP_2(h)/2))
-
-
-enum
-{
-  PROP_0,
-  PROP_FULLSCREEN
-};
-
-static void gst_sdlvideosink_interface_init (GstImplementsInterfaceClass *
-    klass);
-static gboolean gst_sdlvideosink_supported (GstImplementsInterface * iface,
-    GType type);
-
-static void gst_sdlvideosink_xoverlay_init (GstXOverlayClass * klass);
-static void gst_sdlvideosink_xoverlay_set_window_handle
-    (GstXOverlay * overlay, guintptr parent);
-
-static gboolean gst_sdlvideosink_lock (GstSDLVideoSink * sdl);
-static void gst_sdlvideosink_unlock (GstSDLVideoSink * sdl);
-
-static gboolean gst_sdlvideosink_initsdl (GstSDLVideoSink * sdl);
-static void gst_sdlvideosink_deinitsdl (GstSDLVideoSink * sdl);
-
-static gboolean gst_sdlvideosink_create (GstSDLVideoSink * sdl);
-static void gst_sdlvideosink_destroy (GstSDLVideoSink * sdl);
-
-static gboolean gst_sdlvideosink_setcaps (GstBaseSink * bsink, GstCaps * caps);
-
-static GstFlowReturn gst_sdlvideosink_show_frame (GstBaseSink * bsink,
-    GstBuffer * buff);
-
-static void gst_sdlvideosink_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_sdlvideosink_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-static GstStateChangeReturn
-gst_sdlvideosink_change_state (GstElement * element, GstStateChange transition);
-
-static void gst_sdlvideosink_navigation_init (GstNavigationInterface * iface);
-
-static void gst_sdlv_process_events (GstSDLVideoSink * sdlvideosink);
-
-static GstPadTemplate *sink_template;
-
-static void
-_do_init (GType type)
-{
-  static const GInterfaceInfo iface_info = {
-    (GInterfaceInitFunc) gst_sdlvideosink_interface_init,
-    NULL,
-    NULL,
-  };
-  static const GInterfaceInfo xoverlay_info = {
-    (GInterfaceInitFunc) gst_sdlvideosink_xoverlay_init,
-    NULL,
-    NULL,
-  };
-  static const GInterfaceInfo navigation_info = {
-    (GInterfaceInitFunc) gst_sdlvideosink_navigation_init,
-    NULL,
-    NULL,
-  };
-
-  g_type_add_interface_static (type,
-      GST_TYPE_IMPLEMENTS_INTERFACE, &iface_info);
-  g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &xoverlay_info);
-  g_type_add_interface_static (type, GST_TYPE_NAVIGATION, &navigation_info);
-
-}
-
-GST_BOILERPLATE_FULL (GstSDLVideoSink, gst_sdlvideosink, GstVideoSink,
-    GST_TYPE_VIDEO_SINK, _do_init);
-
-static void
-gst_sdlvideosink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-  GstCaps *capslist;
-  gint i;
-  guint32 formats[] = {
-    GST_MAKE_FOURCC ('I', '4', '2', '0'),
-    GST_MAKE_FOURCC ('Y', 'V', '1', '2'),
-    GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
-    GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'),
-    GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y')
-  };
-
-  /* make a list of all available caps */
-  capslist = gst_caps_new_empty ();
-  for (i = 0; i < G_N_ELEMENTS (formats); i++) {
-    gst_caps_append_structure (capslist,
-        gst_structure_new ("video/x-raw-yuv",
-            "format", GST_TYPE_FOURCC, formats[i],
-            "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
-            "height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
-            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, NULL));
-  }
-
-  sink_template = gst_pad_template_new ("sink",
-      GST_PAD_SINK, GST_PAD_ALWAYS, capslist);
-
-  gst_element_class_add_pad_template (element_class, sink_template);
-  gst_element_class_set_static_metadata (element_class, "SDL video sink",
-      "Sink/Video", "An SDL-based videosink",
-      "Ronald Bultje <rbultje@ronald.bitfreak.net>, "
-      "Edgard Lima <edgard.lima@indt.org.br>, "
-      "Jan Schmidt <thaytan@mad.scientist.com>");
-}
-
-static void
-gst_sdlvideosink_finalize (GObject * obj)
-{
-  g_mutex_free (GST_SDLVIDEOSINK (obj)->lock);
-
-  G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-gst_sdlvideosink_get_times (GstBaseSink * basesink, GstBuffer * buffer,
-    GstClockTime * start, GstClockTime * end)
-{
-  GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (basesink);
-  GstClockTime timestamp, duration;
-
-  timestamp = GST_BUFFER_TIMESTAMP (buffer);
-  if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
-    *start = timestamp;
-    duration = GST_BUFFER_DURATION (buffer);
-    if (GST_CLOCK_TIME_IS_VALID (duration)) {
-      *end = timestamp + duration;
-    } else {
-      if (sdlvideosink->framerate_n > 0) {
-        *end = timestamp +
-            gst_util_uint64_scale_int (GST_SECOND, sdlvideosink->framerate_d,
-            sdlvideosink->framerate_n);
-      }
-    }
-  }
-}
-
-static void
-gst_sdlvideosink_class_init (GstSDLVideoSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstBaseSinkClass *gstvs_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-  gstvs_class = (GstBaseSinkClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->set_property = gst_sdlvideosink_set_property;
-  gobject_class->get_property = gst_sdlvideosink_get_property;
-
-  gobject_class->finalize = gst_sdlvideosink_finalize;
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_sdlvideosink_change_state);
-
-  gstvs_class->set_caps = GST_DEBUG_FUNCPTR (gst_sdlvideosink_setcaps);
-  gstvs_class->get_times = GST_DEBUG_FUNCPTR (gst_sdlvideosink_get_times);
-  gstvs_class->preroll = GST_DEBUG_FUNCPTR (gst_sdlvideosink_show_frame);
-  gstvs_class->render = GST_DEBUG_FUNCPTR (gst_sdlvideosink_show_frame);
-
-  g_object_class_install_property (gobject_class, PROP_FULLSCREEN,
-      g_param_spec_boolean ("fullscreen", "Fullscreen",
-          "If true it will be Full screen", FALSE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /*gstvs_class->set_video_out = gst_sdlvideosink_set_video_out;
-     gstvs_class->push_ui_event = gst_sdlvideosink_push_ui_event;
-     gstvs_class->set_geometry = gst_sdlvideosink_set_geometry; */
-}
-
-#if 0
-/* FIXME */
-static GstBuffer *
-gst_sdlvideosink_buffer_new (GstBufferPool * pool,
-    gint64 location, guint size, gpointer user_data)
-{
-  GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (user_data);
-  GstBuffer *buffer;
-
-  if (!sdlvideosink->overlay)
-    return NULL;
-
-  if (!gst_sdlvideosink_lock (sdlvideosink)) {
-    return NULL;
-  }
-
-  /* this protects the buffer from being written over multiple times */
-  g_mutex_lock (sdlvideosink->lock);
-
-  buffer = gst_buffer_new ();
-  GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_DONTFREE);
-  GST_BUFFER_DATA (buffer) = sdlvideosink->overlay->pixels[0];
-  if (sdlvideosink->format == SDL_YV12_OVERLAY ||
-      sdlvideosink->format == SDL_IYUV_OVERLAY) {
-    GST_BUFFER_SIZE (buffer) =
-        sdlvideosink->width * sdlvideosink->height * 3 / 2;
-  } else {
-    GST_BUFFER_SIZE (buffer) = sdlvideosink->width * sdlvideosink->height * 2;
-  }
-  GST_BUFFER_MAXSIZE (buffer) = GST_BUFFER_SIZE (buffer);
-
-  return buffer;
-}
-
-static void
-gst_sdlvideosink_buffer_free (GstBufferPool * pool,
-    GstBuffer * buffer, gpointer user_data)
-{
-  GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (user_data);
-
-  g_mutex_unlock (sdlvideosink->lock);
-  gst_sdlvideosink_unlock (sdlvideosink);
-
-  gst_buffer_default_free (buffer);
-}
-
-
-static GstBufferPool *
-gst_sdlvideosink_get_bufferpool (GstPad * pad)
-{
-  GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (gst_pad_get_parent (pad));
-
-  if (sdlvideosink->overlay)
-    return sdlvideosink->bufferpool;
-
-  return NULL;
-}
-#endif
-
-static void
-gst_sdlvideosink_init (GstSDLVideoSink * sdlvideosink,
-    GstSDLVideoSinkClass * g_class)
-{
-
-  sdlvideosink->width = -1;
-  sdlvideosink->height = -1;
-  sdlvideosink->framerate_n = 0;
-  sdlvideosink->framerate_d = 1;
-  sdlvideosink->full_screen = FALSE;
-
-  sdlvideosink->overlay = NULL;
-  sdlvideosink->screen = NULL;
-
-  sdlvideosink->xwindow_id = 0;
-
-  //sdlvideosink->capslist = capslist;
-
-  sdlvideosink->init = FALSE;
-
-  sdlvideosink->event_thread = NULL;
-  sdlvideosink->running = FALSE;
-
-  sdlvideosink->lock = g_mutex_new ();
-}
-
-static void
-gst_sdlvideosink_interface_init (GstImplementsInterfaceClass * klass)
-{
-  klass->supported = gst_sdlvideosink_supported;
-}
-
-static gboolean
-gst_sdlvideosink_supported (GstImplementsInterface * interface,
-    GType iface_type)
-{
-  GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (interface);
-  gboolean result = FALSE;
-
-  /* check SDL for whether it was compiled against X, FB, etc. */
-  if (iface_type == GST_TYPE_X_OVERLAY) {
-    gchar tmp[4];
-
-    if (!sdlvideosink->init) {
-      g_mutex_lock (sdlvideosink->lock);
-      SDL_Init (SDL_INIT_VIDEO);
-
-      /* True if the video driver is X11 */
-      result = (strcmp ("x11", SDL_VideoDriverName (tmp, 4)) == 0);
-      SDL_QuitSubSystem (SDL_INIT_VIDEO);
-      g_mutex_unlock (sdlvideosink->lock);
-    } else
-      result = sdlvideosink->is_xwindows;
-  } else if (iface_type == GST_TYPE_NAVIGATION)
-    result = TRUE;
-
-  return result;
-}
-
-/* SDL Video sink and X overlay: 
- *
- * SDL supports creating an Xv window/overlay within an existing X window
- * through the horrible mechanism of setting the WINDOWID environment
- * variable.
- * It will then display the x overlay within that window, but not at the
- * full window size. Instead, we need to explicitly tell SDL the size.
- *
- * Unfortunately, the XOverlay interface in GStreamer doesn't supply
- * that information. The only way to get it would be to do what X[v]imagesink
- * does and retrieve it using X11 calls, and linking to Xlib. That would
- * defeat the whole purpose of using the SDL abstraction and plugin entirely
- * however. 
- *
- * I have no nice solution to this problem for you, dear readers.
- */
-static void
-gst_sdlvideosink_xoverlay_init (GstXOverlayClass * klass)
-{
-  klass->set_window_handle = gst_sdlvideosink_xoverlay_set_window_handle;
-}
-
-static void
-gst_sdlvideosink_xoverlay_set_window_handle (GstXOverlay * overlay,
-    guintptr handle)
-{
-  GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (overlay);
-  unsigned long parent = (unsigned long) handle;
-
-  if (sdlvideosink->xwindow_id == parent)
-    return;
-
-  sdlvideosink->xwindow_id = parent;
-
-  /* are we running yet? */
-  if (sdlvideosink->init) {
-    gboolean negotiated;
-
-    g_mutex_lock (sdlvideosink->lock);
-
-    negotiated = (sdlvideosink->overlay != NULL);
-
-    if (negotiated)
-      gst_sdlvideosink_destroy (sdlvideosink);
-
-    /* Call initsdl to set the WINDOWID env var urk */
-    gst_sdlvideosink_initsdl (sdlvideosink);
-
-    if (negotiated)
-      gst_sdlvideosink_create (sdlvideosink);
-
-    g_mutex_unlock (sdlvideosink->lock);
-  }
-}
-
-static guint32
-gst_sdlvideosink_get_sdl_from_fourcc (GstSDLVideoSink * sdlvideosink,
-    guint32 code)
-{
-  switch (code) {
-      /* Note: SDL_IYUV_OVERLAY does not always work for I420 */
-    case GST_MAKE_FOURCC ('I', '4', '2', '0'):
-      return SDL_YV12_OVERLAY;
-    case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
-      return SDL_YV12_OVERLAY;
-    case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
-      return SDL_YUY2_OVERLAY;
-    case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
-      return SDL_UYVY_OVERLAY;
-    case GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'):
-      return SDL_YVYU_OVERLAY;
-    default:
-      return 0;
-  }
-}
-
-static gboolean
-gst_sdlvideosink_lock (GstSDLVideoSink * sdlvideosink)
-{
-  /* assure that we've got a screen */
-  if (!sdlvideosink->screen || !sdlvideosink->overlay)
-    goto no_setup;
-
-  /* Lock SDL/yuv-overlay */
-  if (SDL_MUSTLOCK (sdlvideosink->screen)) {
-    if (SDL_LockSurface (sdlvideosink->screen) < 0)
-      goto could_not_lock;
-  }
-  if (SDL_LockYUVOverlay (sdlvideosink->overlay) < 0)
-    goto lock_yuv;
-
-  return TRUE;
-
-  /* ERRORS */
-no_setup:
-  {
-    GST_ELEMENT_ERROR (sdlvideosink, LIBRARY, TOO_LAZY, (NULL),
-        ("Tried to lock screen without being set-up"));
-    return FALSE;
-  }
-could_not_lock:
-  {
-    GST_ELEMENT_ERROR (sdlvideosink, LIBRARY, TOO_LAZY, (NULL),
-        ("SDL: couldn't lock the SDL video window: %s", SDL_GetError ()));
-    return FALSE;
-  }
-lock_yuv:
-  {
-    GST_ELEMENT_ERROR (sdlvideosink, LIBRARY, TOO_LAZY, (NULL),
-        ("SDL: couldn\'t lock the SDL YUV overlay: %s", SDL_GetError ()));
-    return FALSE;
-  }
-}
-
-
-static void
-gst_sdlvideosink_unlock (GstSDLVideoSink * sdlvideosink)
-{
-  /* Unlock SDL_overlay */
-  SDL_UnlockYUVOverlay (sdlvideosink->overlay);
-  if (SDL_MUSTLOCK (sdlvideosink->screen))
-    SDL_UnlockSurface (sdlvideosink->screen);
-}
-
-/* Must be called with ->lock held */
-static void
-gst_sdlvideosink_deinitsdl (GstSDLVideoSink * sdlvideosink)
-{
-  if (sdlvideosink->init) {
-    sdlvideosink->running = FALSE;
-    if (sdlvideosink->event_thread) {
-      g_mutex_unlock (sdlvideosink->lock);
-      g_thread_join (sdlvideosink->event_thread);
-      g_mutex_lock (sdlvideosink->lock);
-      sdlvideosink->event_thread = NULL;
-    }
-
-    SDL_QuitSubSystem (SDL_INIT_VIDEO);
-    sdlvideosink->init = FALSE;
-
-  }
-}
-
-/* Process pending events. Call with ->lock held */
-static void
-gst_sdlv_process_events (GstSDLVideoSink * sdlvideosink)
-{
-  SDL_Event event;
-  int numevents;
-  char *keysym = NULL;
-
-  do {
-    SDL_PumpEvents ();
-    numevents = SDL_PeepEvents (&event, 1, SDL_GETEVENT,
-        SDL_KEYDOWNMASK | SDL_KEYUPMASK |
-        SDL_MOUSEMOTIONMASK | SDL_MOUSEBUTTONDOWNMASK |
-        SDL_MOUSEBUTTONUPMASK | SDL_QUITMASK | SDL_VIDEORESIZEMASK);
-
-    if (numevents > 0 && (event.type == SDL_KEYUP || event.type == SDL_KEYDOWN)) {
-      keysym = SDL_GetKeyName (event.key.keysym.sym);
-    }
-
-    if (numevents > 0) {
-      g_mutex_unlock (sdlvideosink->lock);
-      switch (event.type) {
-        case SDL_MOUSEMOTION:
-          gst_navigation_send_mouse_event (GST_NAVIGATION (sdlvideosink),
-              "mouse-move", 0, event.motion.x, event.motion.y);
-          break;
-        case SDL_MOUSEBUTTONDOWN:
-          gst_navigation_send_mouse_event (GST_NAVIGATION (sdlvideosink),
-              "mouse-button-press",
-              event.button.button, event.button.x, event.button.y);
-          break;
-        case SDL_MOUSEBUTTONUP:
-          gst_navigation_send_mouse_event (GST_NAVIGATION (sdlvideosink),
-              "mouse-button-release",
-              event.button.button, event.button.x, event.button.y);
-          break;
-        case SDL_KEYUP:
-          GST_DEBUG ("key press event %s !",
-              SDL_GetKeyName (event.key.keysym.sym));
-          gst_navigation_send_key_event (GST_NAVIGATION (sdlvideosink),
-              "key-release", keysym);
-          break;
-        case SDL_KEYDOWN:
-          if (SDLK_ESCAPE != event.key.keysym.sym) {
-            GST_DEBUG ("key press event %s !",
-                SDL_GetKeyName (event.key.keysym.sym));
-            gst_navigation_send_key_event (GST_NAVIGATION (sdlvideosink),
-                "key-press", keysym);
-            break;
-          } else {
-            /* fall through */
-          }
-        case SDL_QUIT:
-          sdlvideosink->running = FALSE;
-          GST_ELEMENT_ERROR (sdlvideosink, RESOURCE, OPEN_WRITE,
-              ("Video output device is gone."),
-              ("We were running fullscreen and user "
-                  "pressed the ESC key, stopping playback."));
-          break;
-        case SDL_VIDEORESIZE:
-          /* create a SDL window of the size requested by the user */
-          g_mutex_lock (sdlvideosink->lock);
-          GST_VIDEO_SINK_WIDTH (sdlvideosink) = event.resize.w;
-          GST_VIDEO_SINK_HEIGHT (sdlvideosink) = event.resize.h;
-          gst_sdlvideosink_create (sdlvideosink);
-          g_mutex_unlock (sdlvideosink->lock);
-          break;
-      }
-      g_mutex_lock (sdlvideosink->lock);
-    }
-  } while (numevents > 0);
-}
-
-static gpointer
-gst_sdlvideosink_event_thread (GstSDLVideoSink * sdlvideosink)
-{
-  g_mutex_lock (sdlvideosink->lock);
-  while (sdlvideosink->running) {
-    gst_sdlv_process_events (sdlvideosink);
-
-    /* Done events, sleep for 50 ms */
-    g_mutex_unlock (sdlvideosink->lock);
-    g_usleep (50000);
-    g_mutex_lock (sdlvideosink->lock);
-  }
-  g_mutex_unlock (sdlvideosink->lock);
-
-  return NULL;
-}
-
-/* Must be called with the SDL lock held */
-static gboolean
-gst_sdlvideosink_initsdl (GstSDLVideoSink * sdlvideosink)
-{
-  gst_sdlvideosink_deinitsdl (sdlvideosink);
-
-  if (sdlvideosink->is_xwindows && !sdlvideosink->xwindow_id) {
-    g_mutex_unlock (sdlvideosink->lock);
-    gst_x_overlay_prepare_xwindow_id (GST_X_OVERLAY (sdlvideosink));
-    g_mutex_lock (sdlvideosink->lock);
-  }
-
-  if (!sdlvideosink->xwindow_id) {
-    g_unsetenv ("SDL_WINDOWID");
-  } else {
-    char SDL_hack[32];
-
-    sprintf (SDL_hack, "%lu", sdlvideosink->xwindow_id);
-    g_setenv ("SDL_WINDOWID", SDL_hack, 1);
-  }
-
-  /* Initialize the SDL library */
-  if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0)
-    goto init_failed;
-
-  sdlvideosink->init = TRUE;
-
-  sdlvideosink->running = TRUE;
-  sdlvideosink->event_thread =
-      g_thread_create ((GThreadFunc) gst_sdlvideosink_event_thread,
-      sdlvideosink, TRUE, NULL);
-
-  return TRUE;
-
-  /* ERRORS */
-init_failed:
-  {
-    GST_ELEMENT_ERROR (sdlvideosink, LIBRARY, INIT, (NULL),
-        ("Couldn't initialize SDL: %s", SDL_GetError ()));
-    return FALSE;
-  }
-}
-
-/* Must be called with the sdl lock held */
-static void
-gst_sdlvideosink_destroy (GstSDLVideoSink * sdlvideosink)
-{
-  if (sdlvideosink->overlay) {
-    SDL_FreeYUVOverlay (sdlvideosink->overlay);
-    sdlvideosink->overlay = NULL;
-  }
-
-  if (sdlvideosink->screen) {
-    SDL_FreeSurface (sdlvideosink->screen);
-    sdlvideosink->screen = NULL;
-  }
-  sdlvideosink->xwindow_id = 0;
-}
-
-/* Must be called with the sdl lock held */
-static gboolean
-gst_sdlvideosink_create (GstSDLVideoSink * sdlvideosink)
-{
-  if (GST_VIDEO_SINK_HEIGHT (sdlvideosink) <= 0)
-    GST_VIDEO_SINK_HEIGHT (sdlvideosink) = sdlvideosink->height;
-  if (GST_VIDEO_SINK_WIDTH (sdlvideosink) <= 0)
-    GST_VIDEO_SINK_WIDTH (sdlvideosink) = sdlvideosink->width;
-
-  gst_sdlvideosink_destroy (sdlvideosink);
-
-  if (sdlvideosink->is_xwindows && !sdlvideosink->xwindow_id) {
-    g_mutex_unlock (sdlvideosink->lock);
-    gst_x_overlay_prepare_xwindow_id (GST_X_OVERLAY (sdlvideosink));
-    g_mutex_lock (sdlvideosink->lock);
-  }
-
-  /* create a SDL window of the size requested by the user */
-  if (sdlvideosink->full_screen) {
-    sdlvideosink->screen =
-        SDL_SetVideoMode (GST_VIDEO_SINK_WIDTH (sdlvideosink),
-        GST_VIDEO_SINK_HEIGHT (sdlvideosink), 0,
-        SDL_SWSURFACE | SDL_FULLSCREEN);
-  } else {
-    sdlvideosink->screen =
-        SDL_SetVideoMode (GST_VIDEO_SINK_WIDTH (sdlvideosink),
-        GST_VIDEO_SINK_HEIGHT (sdlvideosink), 0, SDL_HWSURFACE | SDL_RESIZABLE);
-  }
-  if (sdlvideosink->screen == NULL)
-    goto no_screen;
-
-  /* create a new YUV overlay */
-  sdlvideosink->overlay = SDL_CreateYUVOverlay (sdlvideosink->width,
-      sdlvideosink->height, sdlvideosink->format, sdlvideosink->screen);
-  if (sdlvideosink->overlay == NULL)
-    goto no_overlay;
-
-
-  GST_DEBUG ("Using a %dx%d %dbpp SDL screen with a %dx%d \'%"
-      GST_FOURCC_FORMAT "\' YUV overlay", GST_VIDEO_SINK_WIDTH (sdlvideosink),
-      GST_VIDEO_SINK_HEIGHT (sdlvideosink),
-      sdlvideosink->screen->format->BitsPerPixel, sdlvideosink->width,
-      sdlvideosink->height, GST_FOURCC_ARGS (sdlvideosink->format));
-
-  sdlvideosink->rect.x = 0;
-  sdlvideosink->rect.y = 0;
-  sdlvideosink->rect.w = GST_VIDEO_SINK_WIDTH (sdlvideosink);
-  sdlvideosink->rect.h = GST_VIDEO_SINK_HEIGHT (sdlvideosink);
-
-  /*SDL_DisplayYUVOverlay (sdlvideosink->overlay, &(sdlvideosink->rect)); */
-
-  GST_DEBUG ("sdlvideosink: setting %08x (%" GST_FOURCC_FORMAT ")",
-      sdlvideosink->format, GST_FOURCC_ARGS (sdlvideosink->format));
-
-  return TRUE;
-
-  /* ERRORS */
-no_screen:
-  {
-    GST_ELEMENT_ERROR (sdlvideosink, LIBRARY, TOO_LAZY, (NULL),
-        ("SDL: Couldn't set %dx%d: %s", GST_VIDEO_SINK_WIDTH (sdlvideosink),
-            GST_VIDEO_SINK_HEIGHT (sdlvideosink), SDL_GetError ()));
-    return FALSE;
-  }
-no_overlay:
-  {
-    GST_ELEMENT_ERROR (sdlvideosink, LIBRARY, TOO_LAZY, (NULL),
-        ("SDL: Couldn't create SDL YUV overlay (%dx%d \'%" GST_FOURCC_FORMAT
-            "\'): %s", sdlvideosink->width, sdlvideosink->height,
-            GST_FOURCC_ARGS (sdlvideosink->format), SDL_GetError ()));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_sdlvideosink_setcaps (GstBaseSink * bsink, GstCaps * vscapslist)
-{
-  GstSDLVideoSink *sdlvideosink;
-  GstStructure *structure;
-  gboolean res = TRUE;
-
-  sdlvideosink = GST_SDLVIDEOSINK (bsink);
-
-  structure = gst_caps_get_structure (vscapslist, 0);
-  gst_structure_get_fourcc (structure, "format", &sdlvideosink->fourcc);
-  sdlvideosink->format =
-      gst_sdlvideosink_get_sdl_from_fourcc (sdlvideosink, sdlvideosink->fourcc);
-  gst_structure_get_int (structure, "width", &sdlvideosink->width);
-  gst_structure_get_int (structure, "height", &sdlvideosink->height);
-  gst_structure_get_fraction (structure, "framerate",
-      &sdlvideosink->framerate_n, &sdlvideosink->framerate_d);
-
-  g_mutex_lock (sdlvideosink->lock);
-  if (!sdlvideosink->format || !gst_sdlvideosink_create (sdlvideosink))
-    res = FALSE;
-  g_mutex_unlock (sdlvideosink->lock);
-
-  return res;
-}
-
-
-static GstFlowReturn
-gst_sdlvideosink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
-{
-
-  GstSDLVideoSink *sdlvideosink;
-
-  sdlvideosink = GST_SDLVIDEOSINK (bsink);
-
-  g_mutex_lock (sdlvideosink->lock);
-  if (!sdlvideosink->init ||
-      !sdlvideosink->overlay || !sdlvideosink->overlay->pixels)
-    goto not_init;
-
-  /* if (GST_BUFFER_DATA (buf) != sdlvideosink->overlay->pixels[0]) */
-  if (TRUE) {
-    guint8 *out;
-    gint l;
-
-    if (!gst_sdlvideosink_lock (sdlvideosink))
-      goto cannot_lock;
-
-    /* buf->yuv - FIXME: bufferpool! */
-    if (sdlvideosink->format == SDL_YV12_OVERLAY) {
-      guint8 *y, *u, *v;
-
-      switch (sdlvideosink->fourcc) {
-        case GST_MAKE_FOURCC ('I', '4', '2', '0'):
-          y = GST_BUFFER_DATA (buf);
-          /* I420 is YV12 with switched colour planes and different offsets */
-          v = y + I420_U_OFFSET (sdlvideosink->width, sdlvideosink->height);
-          u = y + I420_V_OFFSET (sdlvideosink->width, sdlvideosink->height);
-          break;
-        case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
-          y = GST_BUFFER_DATA (buf);
-          u = y + I420_U_OFFSET (sdlvideosink->width, sdlvideosink->height);
-          v = y + I420_V_OFFSET (sdlvideosink->width, sdlvideosink->height);
-          break;
-        default:
-          gst_sdlvideosink_unlock (sdlvideosink);
-          g_mutex_unlock (sdlvideosink->lock);
-          g_return_val_if_reached (GST_FLOW_ERROR);
-      }
-
-      /* Y Plane */
-      out = sdlvideosink->overlay->pixels[0];
-      for (l = 0; l < sdlvideosink->height; l++) {
-        memcpy (out, y, I420_Y_ROWSTRIDE (sdlvideosink->width));
-        out += sdlvideosink->overlay->pitches[0];
-        y += I420_Y_ROWSTRIDE (sdlvideosink->width);
-      }
-
-      /* U plane */
-      out = sdlvideosink->overlay->pixels[1];
-      for (l = 0; l < (sdlvideosink->height / 2); l++) {
-        memcpy (out, u, I420_U_ROWSTRIDE (sdlvideosink->width));
-        out += sdlvideosink->overlay->pitches[1];
-        u += I420_U_ROWSTRIDE (sdlvideosink->width);
-      }
-
-      /* V plane */
-      out = sdlvideosink->overlay->pixels[2];
-      for (l = 0; l < (sdlvideosink->height / 2); l++) {
-        memcpy (out, v, I420_V_ROWSTRIDE (sdlvideosink->width));
-        out += sdlvideosink->overlay->pitches[2];
-        v += I420_V_ROWSTRIDE (sdlvideosink->width);
-      }
-    } else {
-      guint8 *in = GST_BUFFER_DATA (buf);
-      gint in_stride = sdlvideosink->width * 2;
-
-      out = sdlvideosink->overlay->pixels[0];
-
-      for (l = 0; l < sdlvideosink->height; l++) {
-        memcpy (out, in, in_stride);
-        out += sdlvideosink->overlay->pitches[0];
-        in += in_stride;
-      }
-    }
-    gst_sdlvideosink_unlock (sdlvideosink);
-  }
-
-  /* Show, baby, show! */
-  SDL_DisplayYUVOverlay (sdlvideosink->overlay, &(sdlvideosink->rect));
-
-  /* Handle any resize */
-  gst_sdlv_process_events (sdlvideosink);
-
-  g_mutex_unlock (sdlvideosink->lock);
-
-  return GST_FLOW_OK;
-
-  /* ERRORS */
-not_init:
-  {
-    GST_ELEMENT_ERROR (sdlvideosink, CORE, NEGOTIATION, (NULL),
-        ("not negotiated."));
-    g_mutex_unlock (sdlvideosink->lock);
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-cannot_lock:
-  {
-    /* lock function posted detailed message */
-    g_mutex_unlock (sdlvideosink->lock);
-    return GST_FLOW_ERROR;
-  }
-}
-
-
-static void
-gst_sdlvideosink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstSDLVideoSink *sdlvideosink;
-
-  sdlvideosink = GST_SDLVIDEOSINK (object);
-
-  switch (prop_id) {
-    case PROP_FULLSCREEN:
-      sdlvideosink->full_screen = g_value_get_boolean (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static void
-gst_sdlvideosink_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstSDLVideoSink *sdlvideosink;
-
-  sdlvideosink = GST_SDLVIDEOSINK (object);
-
-  switch (prop_id) {
-    case PROP_FULLSCREEN:
-      g_value_set_boolean (value, sdlvideosink->full_screen);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static GstStateChangeReturn
-gst_sdlvideosink_change_state (GstElement * element, GstStateChange transition)
-{
-  GstSDLVideoSink *sdlvideosink;
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-
-  g_return_val_if_fail (GST_IS_SDLVIDEOSINK (element),
-      GST_STATE_CHANGE_FAILURE);
-  sdlvideosink = GST_SDLVIDEOSINK (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      sdlvideosink->is_xwindows = GST_IS_X_OVERLAY (sdlvideosink);
-      g_mutex_lock (sdlvideosink->lock);
-      if (!gst_sdlvideosink_initsdl (sdlvideosink)) {
-        g_mutex_unlock (sdlvideosink->lock);
-        goto init_failed;
-      }
-      GST_OBJECT_FLAG_SET (sdlvideosink, GST_SDLVIDEOSINK_OPEN);
-      g_mutex_unlock (sdlvideosink->lock);
-      break;
-    default:                   /* do nothing */
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      sdlvideosink->framerate_n = 0;
-      sdlvideosink->framerate_d = 1;
-      g_mutex_lock (sdlvideosink->lock);
-      gst_sdlvideosink_destroy (sdlvideosink);
-      g_mutex_unlock (sdlvideosink->lock);
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      g_mutex_lock (sdlvideosink->lock);
-      gst_sdlvideosink_deinitsdl (sdlvideosink);
-      GST_OBJECT_FLAG_UNSET (sdlvideosink, GST_SDLVIDEOSINK_OPEN);
-      g_mutex_unlock (sdlvideosink->lock);
-      break;
-    default:                   /* do nothing */
-      break;
-  }
-  return ret;
-
-init_failed:
-  {
-    /* method posted detailed error message */
-    GST_DEBUG_OBJECT (sdlvideosink, "init failed");
-    return GST_STATE_CHANGE_FAILURE;
-  }
-}
-
-
-static void
-gst_sdlvideosink_navigation_send_event (GstNavigation * navigation,
-    GstStructure * structure)
-{
-  GstSDLVideoSink *sdlvideosink = GST_SDLVIDEOSINK (navigation);
-  GstEvent *event;
-  GstVideoRectangle dst = { 0, };
-  GstVideoRectangle src = { 0, };
-  GstVideoRectangle result;
-  double x, y, old_x, old_y;
-  GstPad *pad = NULL;
-
-  src.w = GST_VIDEO_SINK_WIDTH (sdlvideosink);
-  src.h = GST_VIDEO_SINK_HEIGHT (sdlvideosink);
-  dst.w = sdlvideosink->width;
-  dst.h = sdlvideosink->height;
-  gst_video_sink_center_rect (src, dst, &result, FALSE);
-
-  event = gst_event_new_navigation (structure);
-
-  /* Our coordinates can be wrong here if we centered the video */
-
-  /* Converting pointer coordinates to the non scaled geometry */
-  if (gst_structure_get_double (structure, "pointer_x", &old_x)) {
-    x = old_x;
-
-    if (x >= result.x && x <= (result.x + result.w)) {
-      x -= result.x;
-      x *= sdlvideosink->width;
-      x /= result.w;
-    } else {
-      x = 0;
-    }
-    GST_DEBUG_OBJECT (sdlvideosink, "translated navigation event x "
-        "coordinate from %f to %f", old_x, x);
-    gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE, x, NULL);
-  }
-  if (gst_structure_get_double (structure, "pointer_y", &old_y)) {
-    y = old_y;
-
-    if (y >= result.y && y <= (result.y + result.h)) {
-      y -= result.y;
-      y *= sdlvideosink->height;
-      y /= result.h;
-    } else {
-      y = 0;
-    }
-    GST_DEBUG_OBJECT (sdlvideosink, "translated navigation event y "
-        "coordinate from %f to %f", old_y, y);
-    gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, y, NULL);
-  }
-
-  pad = gst_pad_get_peer (GST_VIDEO_SINK_PAD (sdlvideosink));
-
-  if (GST_IS_PAD (pad) && GST_IS_EVENT (event)) {
-    gst_pad_send_event (pad, event);
-
-    gst_object_unref (pad);
-  }
-}
-
-static void
-gst_sdlvideosink_navigation_init (GstNavigationInterface * iface)
-{
-  iface->send_event = gst_sdlvideosink_navigation_send_event;
-}
diff --git a/ext/sdl/sdlvideosink.h b/ext/sdl/sdlvideosink.h
deleted file mode 100644 (file)
index eff752f..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* GStreamer SDL plugin
- * Copyright (C) 2001-2002 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_SDLVIDEOSINK_H__
-#define __GST_SDLVIDEOSINK_H__
-
-#include <gst/video/gstvideosink.h>
-
-#include <SDL.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SDLVIDEOSINK \
-  (gst_sdlvideosink_get_type())
-#define GST_SDLVIDEOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SDLVIDEOSINK,GstSDLVideoSink))
-#define GST_SDLVIDEOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SDLVIDEOSINK,GstSDLVideoSinkClass))
-#define GST_IS_SDLVIDEOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SDLVIDEOSINK))
-#define GST_IS_SDLVIDEOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SDLVIDEOSINK))
-
-typedef enum {
-  GST_SDLVIDEOSINK_OPEN      = (GST_ELEMENT_FLAG_LAST << 0),
-
-  GST_SDLVIDEOSINK_FLAG_LAST = (GST_ELEMENT_FLAG_LAST << 2),
-} GstSDLVideoSinkFlags;
-
-typedef struct _GstSDLVideoSink GstSDLVideoSink;
-typedef struct _GstSDLVideoSinkClass GstSDLVideoSinkClass;
-
-struct _GstSDLVideoSink {
-  GstVideoSink videosink;
-
-  guint32 format;       /* the SDL format                      */
-  guint32 fourcc;       /* our fourcc from the caps            */
-
-  gint width, height;   /* the size of the incoming YUV stream */
-  unsigned long xwindow_id;
-  gboolean is_xwindows;
-  
-  gint framerate_n;
-  gint framerate_d;
-
-  gboolean full_screen;
-  gboolean init;
-  gboolean running;
-  GThread *event_thread;
-  SDL_Surface *screen;
-  SDL_Overlay *overlay;
-  SDL_Rect rect;
-
-  GMutex *lock;
-};
-
-struct _GstSDLVideoSinkClass {
-  GstVideoSinkClass parent_class;
-
-};
-
-GType gst_sdlvideosink_get_type(void);
-
-G_END_DECLS
-
-#endif /* __GST_SDLVIDEOSINK_H__ */
diff --git a/ext/sndio/Makefile.am b/ext/sndio/Makefile.am
deleted file mode 100644 (file)
index 03a42b1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-plugin_LTLIBRARIES = libgstsndio.la
-
-libgstsndio_la_SOURCES = gstsndio.c sndiosink.c sndiosrc.c 
-libgstsndio_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstsndio_la_LIBADD = \
-       $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_MAJORMINOR) \
-       $(SNDIO_LIBS)
-libgstsndio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-
-noinst_HEADERS = sndiosink.h sndiosrc.h
-EXTRA_DIST =
diff --git a/ext/sndio/gstsndio.c b/ext/sndio/gstsndio.c
deleted file mode 100644 (file)
index af8252e..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) <2008> Jacob Meuser <jakemsr@sdf.lonestar.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "sndiosink.h"
-#include "sndiosrc.h"
-
-#include "gst/gst-i18n-plugin.h"
-
-GST_DEBUG_CATEGORY (gst_sndio_debug);
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "sndiosrc", GST_RANK_PRIMARY,
-          GST_TYPE_SNDIOSRC) ||
-      !gst_element_register (plugin, "sndiosink", GST_RANK_PRIMARY,
-          GST_TYPE_SNDIOSINK)) {
-    return FALSE;
-  }
-
-  GST_DEBUG_CATEGORY_INIT (gst_sndio_debug, "sndio", 0, "sndio elements");
-
-#ifdef ENABLE_NLS
-  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
-      LOCALEDIR);
-  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-#endif /* ENABLE_NLS */
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    "sndio",
-    "sndio support for GStreamer",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/sndio/sndiosink.c b/ext/sndio/sndiosink.c
deleted file mode 100644 (file)
index c9d0f71..0000000
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- * Copyright (C) <2008> Jacob Meuser <jakemsr@sdf.lonestar.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/**
- * SECTION:element-sndiosink
- * @see_also: #GstAutoAudioSink
- *
- * <refsect2>
- * <para>
- * This element outputs sound to a sound card using sndio.
- * </para>
- * <para>
- * Simple example pipeline that plays an Ogg/Vorbis file via sndio:
- * <programlisting>
- * gst-launch-1.0 -v filesrc location=foo.ogg ! decodebin ! audioconvert ! audioresample ! sndiosink
- * </programlisting>
- * </para>
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "sndiosink.h"
-#include <unistd.h>
-#include <errno.h>
-
-#include <gst/gst-i18n-plugin.h>
-
-GST_DEBUG_CATEGORY_EXTERN (gst_sndio_debug);
-#define GST_CAT_DEFAULT gst_sndio_debug
-
-enum
-{
-  PROP_0,
-  PROP_HOST
-};
-
-static GstStaticPadTemplate sndio_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "endianness = (int) { 1234, 4321 }, "
-        "signed = (boolean) { TRUE, FALSE }, "
-        "width = (int) { 8, 16, 24, 32 }, "
-        "depth = (int) { 8, 16, 24, 32 }, "
-        "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 16 ] ")
-    );
-
-static void gst_sndiosink_finalize (GObject * object);
-
-static GstCaps *gst_sndiosink_getcaps (GstBaseSink * bsink);
-
-static gboolean gst_sndiosink_open (GstAudioSink * asink);
-static gboolean gst_sndiosink_close (GstAudioSink * asink);
-static gboolean gst_sndiosink_prepare (GstAudioSink * asink,
-    GstRingBufferSpec * spec);
-static gboolean gst_sndiosink_unprepare (GstAudioSink * asink);
-static guint gst_sndiosink_write (GstAudioSink * asink, gpointer data,
-    guint length);
-static guint gst_sndiosink_delay (GstAudioSink * asink);
-static void gst_sndiosink_reset (GstAudioSink * asink);
-
-static void gst_sndiosink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_sndiosink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_sndiosink_cb (void *addr, int delta);
-
-GST_BOILERPLATE (GstSndioSink, gst_sndiosink, GstAudioSink,
-    GST_TYPE_AUDIO_SINK);
-
-static void
-gst_sndiosink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_set_static_metadata (element_class,
-      "Sndio audio sink",
-      "Sink/Audio",
-      "Plays audio through sndio", "Jacob Meuser <jakemsr@sdf.lonestar.org>");
-
-  gst_element_class_add_static_pad_template (element_class,
-      &sndio_sink_factory);
-}
-
-static void
-gst_sndiosink_class_init (GstSndioSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSinkClass *gstbasesink_class;
-  GstBaseAudioSinkClass *gstbaseaudiosink_class;
-  GstAudioSinkClass *gstaudiosink_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesink_class = (GstBaseSinkClass *) klass;
-  gstbaseaudiosink_class = (GstBaseAudioSinkClass *) klass;
-  gstaudiosink_class = (GstAudioSinkClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->finalize = gst_sndiosink_finalize;
-
-  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_sndiosink_getcaps);
-
-  gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_sndiosink_open);
-  gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_sndiosink_close);
-  gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_sndiosink_prepare);
-  gstaudiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_sndiosink_unprepare);
-  gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_sndiosink_write);
-  gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_sndiosink_delay);
-  gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_sndiosink_reset);
-
-  gobject_class->set_property = gst_sndiosink_set_property;
-  gobject_class->get_property = gst_sndiosink_get_property;
-
-  /* default value is filled in the _init method */
-  g_object_class_install_property (gobject_class, PROP_HOST,
-      g_param_spec_string ("host", "Host",
-          "Device or socket sndio will access", NULL, G_PARAM_READWRITE));
-}
-
-static void
-gst_sndiosink_init (GstSndioSink * sndiosink, GstSndioSinkClass * klass)
-{
-  sndiosink->hdl = NULL;
-  sndiosink->host = g_strdup (g_getenv ("AUDIODEVICE"));
-}
-
-static void
-gst_sndiosink_finalize (GObject * object)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (object);
-
-  gst_caps_replace (&sndiosink->cur_caps, NULL);
-  g_free (sndiosink->host);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static GstCaps *
-gst_sndiosink_getcaps (GstBaseSink * bsink)
-{
-  GstSndioSink *sndiosink;
-
-  sndiosink = GST_SNDIOSINK (bsink);
-
-  /* no hdl, we're done with the template caps */
-  if (sndiosink->cur_caps == NULL) {
-    GST_LOG_OBJECT (sndiosink, "getcaps called, returning template caps");
-    return NULL;
-  }
-
-  GST_LOG_OBJECT (sndiosink, "returning %" GST_PTR_FORMAT, sndiosink->cur_caps);
-
-  return gst_caps_ref (sndiosink->cur_caps);
-}
-
-static gboolean
-gst_sndiosink_open (GstAudioSink * asink)
-{
-  GstPadTemplate *pad_template;
-  GstSndioSink *sndiosink;
-  struct sio_par par;
-  struct sio_cap cap;
-  GArray *rates, *chans;
-  GValue rates_v = { 0 };
-  GValue chans_v = { 0 };
-  GValue value = { 0 };
-  struct sio_enc enc;
-  struct sio_conf conf;
-  int confs[SIO_NCONF];
-  int rate, chan;
-  int i, j, k;
-  int nconfs;
-
-  sndiosink = GST_SNDIOSINK (asink);
-
-  GST_DEBUG_OBJECT (sndiosink, "open");
-
-  /* conect */
-  sndiosink->hdl = sio_open (sndiosink->host, SIO_PLAY, 0);
-
-  if (sndiosink->hdl == NULL)
-    goto couldnt_connect;
-
-  /* Use sndio defaults as the only encodings, but get the supported
-   * sample rates and number of channels.
-   */
-
-  if (!sio_getpar (sndiosink->hdl, &par))
-    goto no_server_info;
-
-  if (!sio_getcap (sndiosink->hdl, &cap))
-    goto no_server_info;
-
-  rates = g_array_new (FALSE, FALSE, sizeof (int));
-  chans = g_array_new (FALSE, FALSE, sizeof (int));
-
-  /* find confs that have the default encoding */
-  nconfs = 0;
-  for (i = 0; i < cap.nconf; i++) {
-    for (j = 0; j < SIO_NENC; j++) {
-      if (cap.confs[i].enc & (1 << j)) {
-        enc = cap.enc[j];
-        if (enc.bits == par.bits && enc.sig == par.sig && enc.le == par.le) {
-          confs[nconfs] = i;
-          nconfs++;
-          break;
-        }
-      }
-    }
-  }
-
-  /* find the rates and channels of the confs that have the default encoding */
-  for (i = 0; i < nconfs; i++) {
-    conf = cap.confs[confs[i]];
-    /* rates */
-    for (j = 0; j < SIO_NRATE; j++) {
-      if (conf.rate & (1 << j)) {
-        rate = cap.rate[j];
-        for (k = 0; k < rates->len && rate; k++) {
-          if (rate == g_array_index (rates, int, k))
-              rate = 0;
-        }
-        /* add in ascending order */
-        if (rate) {
-          for (k = 0; k < rates->len; k++) {
-            if (rate < g_array_index (rates, int, k))
-            {
-              g_array_insert_val (rates, k, rate);
-              break;
-            }
-          }
-          if (k == rates->len)
-            g_array_append_val (rates, rate);
-        }
-      }
-    }
-    /* channels */
-    for (j = 0; j < SIO_NCHAN; j++) {
-      if (conf.pchan & (1 << j)) {
-        chan = cap.pchan[j];
-        for (k = 0; k < chans->len && chan; k++) {
-          if (chan == g_array_index (chans, int, k))
-              chan = 0;
-        }
-        /* add in ascending order */
-        if (chan) {
-          for (k = 0; k < chans->len; k++) {
-            if (chan < g_array_index (chans, int, k))
-            {
-              g_array_insert_val (chans, k, chan);
-              break;
-            }
-          }
-          if (k == chans->len)
-            g_array_append_val (chans, chan);
-        }
-      }
-    }
-  }
-  /* not sure how this can happen, but it might */
-  if (cap.nconf == 0) {
-    g_array_append_val (rates, par.rate);
-    g_array_append_val (chans, par.pchan);
-  }
-
-  g_value_init (&rates_v, GST_TYPE_LIST);
-  g_value_init (&chans_v, GST_TYPE_LIST);
-  g_value_init (&value, G_TYPE_INT);
-
-  for (i = 0; i < rates->len; i++) {
-    g_value_set_int (&value, g_array_index (rates, int, i));
-    gst_value_list_append_value (&rates_v, &value);
-  }
-  for (i = 0; i < chans->len; i++) {
-    g_value_set_int (&value, g_array_index (chans, int, i));
-    gst_value_list_append_value (&chans_v, &value);
-  }
-
-  g_array_free (rates, TRUE);
-  g_array_free (chans, TRUE);
-
-  pad_template = gst_static_pad_template_get (&sndio_sink_factory);
-  sndiosink->cur_caps =
-      gst_caps_copy (gst_pad_template_get_caps (pad_template));
-  gst_object_unref (pad_template);
-
-  for (i = 0; i < sndiosink->cur_caps->structs->len; i++) {
-    GstStructure *s;
-
-    s = gst_caps_get_structure (sndiosink->cur_caps, i);
-    gst_structure_set (s, "endianness", G_TYPE_INT, par.le ? 1234 : 4321, NULL);
-    gst_structure_set (s, "signed", G_TYPE_BOOLEAN, par.sig ? TRUE : FALSE,
-        NULL);
-    gst_structure_set (s, "width", G_TYPE_INT, par.bits, NULL);
-    // gst_structure_set (s, "depth", G_TYPE_INT, par.bps * 8, NULL); /* XXX */
-    gst_structure_set_value (s, "rate", &rates_v);
-    gst_structure_set_value (s, "channels", &chans_v);
-  }
-
-  return TRUE;
-
-  /* ERRORS */
-couldnt_connect:
-  {
-    GST_ELEMENT_ERROR (sndiosink, RESOURCE, OPEN_WRITE,
-        (_("Could not establish connection to sndio")),
-        ("can't open connection to sndio"));
-    return FALSE;
-  }
-no_server_info:
-  {
-    GST_ELEMENT_ERROR (sndiosink, RESOURCE, OPEN_WRITE,
-        (_("Failed to query sndio capabilities")),
-        ("couldn't get sndio info!"));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_sndiosink_close (GstAudioSink * asink)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (asink);
-
-  GST_DEBUG_OBJECT (sndiosink, "close");
-
-  gst_caps_replace (&sndiosink->cur_caps, NULL);
-  sio_close (sndiosink->hdl);
-  sndiosink->hdl = NULL;
-
-  return TRUE;
-}
-
-static void
-gst_sndiosink_cb (void *addr, int delta)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK ((GstAudioSink *) addr);
-
-  sndiosink->realpos += delta;
-
-  if (sndiosink->realpos >= sndiosink->playpos)
-    sndiosink->latency = 0;
-  else
-    sndiosink->latency = sndiosink->playpos - sndiosink->realpos;
-}
-
-static gboolean
-gst_sndiosink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (asink);
-  struct sio_par par;
-  int spec_bpf;
-
-  GST_DEBUG_OBJECT (sndiosink, "prepare");
-
-  sndiosink->playpos = sndiosink->realpos = sndiosink->latency = 0;
-
-  sio_initpar (&par);
-  par.sig = spec->sign;
-  par.le = !spec->bigend;
-  par.bits = spec->width;
-  // par.bps = spec->depth / 8;  /* XXX */
-  par.rate = spec->rate;
-  par.pchan = spec->channels;
-
-  spec_bpf = ((spec->width / 8) * spec->channels);
-
-  par.appbufsz = (spec->segsize * spec->segtotal) / spec_bpf;
-
-  if (!sio_setpar (sndiosink->hdl, &par))
-    goto cannot_configure;
-
-  sio_getpar (sndiosink->hdl, &par);
-
-  spec->sign = par.sig;
-  spec->bigend = !par.le;
-  spec->width = par.bits;
-  // spec->depth = par.bps * 8;  /* XXX */
-  spec->rate = par.rate;
-  spec->channels = par.pchan;
-
-  sndiosink->bpf = par.bps * par.pchan;
-
-  spec->segsize = par.round * par.pchan * par.bps;
-  spec->segtotal = par.bufsz / par.round;
-
-  /* FIXME: this is wrong for signed ints (and the
-   * audioringbuffers should do it for us anyway) */
-  spec->silence_sample[0] = 0;
-  spec->silence_sample[1] = 0;
-  spec->silence_sample[2] = 0;
-  spec->silence_sample[3] = 0;
-
-  sio_onmove (sndiosink->hdl, gst_sndiosink_cb, sndiosink);
-
-  if (!sio_start (sndiosink->hdl))
-    goto cannot_start;
-
-  GST_INFO_OBJECT (sndiosink, "successfully opened connection to sndio");
-
-  return TRUE;
-
-  /* ERRORS */
-cannot_configure:
-  {
-    GST_ELEMENT_ERROR (sndiosink, RESOURCE, OPEN_WRITE,
-        (_("Could not configure sndio")), ("can't configure sndio"));
-    return FALSE;
-  }
-cannot_start:
-  {
-    GST_ELEMENT_ERROR (sndiosink, RESOURCE, OPEN_WRITE,
-        (_("Could not start sndio")), ("can't start sndio"));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_sndiosink_unprepare (GstAudioSink * asink)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (asink);
-
-  if (sndiosink->hdl == NULL)
-    return TRUE;
-
-  sio_stop (sndiosink->hdl);
-
-  return TRUE;
-}
-
-static guint
-gst_sndiosink_write (GstAudioSink * asink, gpointer data, guint length)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (asink);
-  guint done;
-
-  done = sio_write (sndiosink->hdl, data, length);
-
-  if (done == 0)
-    goto write_error;
-
-  sndiosink->playpos += (done / sndiosink->bpf);
-
-  data = (char *) data + done;
-
-  return done;
-
-  /* ERRORS */
-write_error:
-  {
-    GST_ELEMENT_ERROR (sndiosink, RESOURCE, WRITE,
-        ("Failed to write data to sndio"), GST_ERROR_SYSTEM);
-    return 0;
-  }
-}
-
-static guint
-gst_sndiosink_delay (GstAudioSink * asink)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (asink);
-
-  if (sndiosink->latency == (guint) - 1) {
-    GST_WARNING_OBJECT (asink, "couldn't get latency");
-    return 0;
-  }
-
-  GST_DEBUG_OBJECT (asink, "got latency: %u", sndiosink->latency);
-
-  return sndiosink->latency;
-}
-
-static void
-gst_sndiosink_reset (GstAudioSink * asink)
-{
-  /* no way to flush the buffers with sndio ? */
-
-  GST_DEBUG_OBJECT (asink, "reset called");
-}
-
-static void
-gst_sndiosink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (object);
-
-  switch (prop_id) {
-    case PROP_HOST:
-      g_free (sndiosink->host);
-      sndiosink->host = g_value_dup_string (value);
-      break;
-    default:
-      break;
-  }
-}
-
-static void
-gst_sndiosink_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstSndioSink *sndiosink = GST_SNDIOSINK (object);
-
-  switch (prop_id) {
-    case PROP_HOST:
-      g_value_set_string (value, sndiosink->host);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
diff --git a/ext/sndio/sndiosink.h b/ext/sndio/sndiosink.h
deleted file mode 100644 (file)
index 25bb879..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) <2008> Jacob Meuser <jakemsr@sdf.lonestar.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-
-#ifndef __GST_SNDIOSINK_H__
-#define __GST_SNDIOSINK_H__
-
-#include <sndio.h>
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiosink.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SNDIOSINK \
-  (gst_sndiosink_get_type())
-#define GST_SNDIOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SNDIOSINK,GstSndioSink))
-#define GST_SNDIOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SNDIOSINK,GstSndioSinkClass))
-#define GST_IS_SNDIOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SNDIOSINK))
-#define GST_IS_SNDIOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SNDIOSINK))
-
-typedef struct _GstSndioSink GstSndioSink;
-typedef struct _GstSndioSinkClass GstSndioSinkClass;
-
-struct _GstSndioSink {
-  GstAudioSink   sink;
-
-  struct sio_hdl *hdl;
-  gchar    *host;
-
-  /* bytes per frame */
-  int bpf;
-
-  /* frames counts */
-  volatile long long realpos;
-  volatile long long playpos;
-  volatile guint latency;
-
-  GstCaps  *cur_caps;
-};
-
-struct _GstSndioSinkClass {
-  GstAudioSinkClass parent_class;
-};
-
-GType gst_sndiosink_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_SNDIOSINK_H__ */
diff --git a/ext/sndio/sndiosrc.c b/ext/sndio/sndiosrc.c
deleted file mode 100644 (file)
index 5721f42..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * Copyright (C) <2008> Jacob Meuser <jakemsr@sdf.lonestar.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/**
- * SECTION:element-sndiosrc
- * @see_also: #GstAutoAudioSrc
- *
- * <refsect2>
- * <para>
- * This element retrieves samples from a sound card using sndio.
- * </para>
- * <para>
- * Simple example pipeline that records an Ogg/Vorbis file via sndio:
- * <programlisting>
- * gst-launch-1.0 -v sndiosrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=foo.ogg
- * </programlisting>
- * </para>
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "sndiosrc.h"
-#include <unistd.h>
-#include <errno.h>
-
-#include <gst/gst-i18n-plugin.h>
-
-GST_DEBUG_CATEGORY_EXTERN (gst_sndio_debug);
-#define GST_CAT_DEFAULT gst_sndio_debug
-
-enum
-{
-  PROP_0,
-  PROP_HOST
-};
-
-static GstStaticPadTemplate sndio_src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "endianness = (int) { 1234, 4321 }, "
-        "signed = (boolean) { TRUE, FALSE }, "
-        "width = (int) { 8, 16, 24, 32 }, "
-        "depth = (int) { 8, 16, 24, 32 }, "
-        "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 16 ] ")
-    );
-
-static void gst_sndiosrc_finalize (GObject * object);
-
-static GstCaps *gst_sndiosrc_getcaps (GstBaseSrc * bsrc);
-
-static gboolean gst_sndiosrc_open (GstAudioSrc * asrc);
-static gboolean gst_sndiosrc_close (GstAudioSrc * asrc);
-static gboolean gst_sndiosrc_prepare (GstAudioSrc * asrc,
-    GstRingBufferSpec * spec);
-static gboolean gst_sndiosrc_unprepare (GstAudioSrc * asrc);
-static guint gst_sndiosrc_read (GstAudioSrc * asrc, gpointer data,
-    guint length);
-static guint gst_sndiosrc_delay (GstAudioSrc * asrc);
-static void gst_sndiosrc_reset (GstAudioSrc * asrc);
-
-static void gst_sndiosrc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_sndiosrc_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_sndiosrc_cb (void *addr, int delta);
-
-GST_BOILERPLATE (GstSndioSrc, gst_sndiosrc, GstAudioSrc, GST_TYPE_AUDIO_SRC);
-
-static void
-gst_sndiosrc_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_set_static_metadata (element_class,
-      "Sndio audio source",
-      "Source/Audio",
-      "Records audio through sndio", "Jacob Meuser <jakemsr@sdf.lonestar.org>");
-
-  gst_element_class_add_static_pad_template (element_class, &sndio_src_factory);
-}
-
-static void
-gst_sndiosrc_class_init (GstSndioSrcClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSrcClass *gstbasesrc_class;
-  GstBaseAudioSrcClass *gstbaseaudiosrc_class;
-  GstAudioSrcClass *gstaudiosrc_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesrc_class = (GstBaseSrcClass *) klass;
-  gstbaseaudiosrc_class = (GstBaseAudioSrcClass *) klass;
-  gstaudiosrc_class = (GstAudioSrcClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->finalize = gst_sndiosrc_finalize;
-
-  gstbasesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_sndiosrc_getcaps);
-
-  gstaudiosrc_class->open = GST_DEBUG_FUNCPTR (gst_sndiosrc_open);
-  gstaudiosrc_class->close = GST_DEBUG_FUNCPTR (gst_sndiosrc_close);
-  gstaudiosrc_class->prepare = GST_DEBUG_FUNCPTR (gst_sndiosrc_prepare);
-  gstaudiosrc_class->unprepare = GST_DEBUG_FUNCPTR (gst_sndiosrc_unprepare);
-  gstaudiosrc_class->read = GST_DEBUG_FUNCPTR (gst_sndiosrc_read);
-  gstaudiosrc_class->delay = GST_DEBUG_FUNCPTR (gst_sndiosrc_delay);
-  gstaudiosrc_class->reset = GST_DEBUG_FUNCPTR (gst_sndiosrc_reset);
-
-  gobject_class->set_property = gst_sndiosrc_set_property;
-  gobject_class->get_property = gst_sndiosrc_get_property;
-
-  /* default value is filled in the _init method */
-  g_object_class_install_property (gobject_class, PROP_HOST,
-      g_param_spec_string ("host", "Host",
-          "Device or socket sndio will access", NULL, G_PARAM_READWRITE));
-}
-
-static void
-gst_sndiosrc_init (GstSndioSrc * sndiosrc, GstSndioSrcClass * klass)
-{
-  sndiosrc->hdl = NULL;
-  sndiosrc->host = g_strdup (g_getenv ("AUDIODEVICE"));
-}
-
-static void
-gst_sndiosrc_finalize (GObject * object)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (object);
-
-  gst_caps_replace (&sndiosrc->cur_caps, NULL);
-  g_free (sndiosrc->host);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static GstCaps *
-gst_sndiosrc_getcaps (GstBaseSrc * bsrc)
-{
-  GstSndioSrc *sndiosrc;
-
-  sndiosrc = GST_SNDIOSRC (bsrc);
-
-  /* no hdl, we're done with the template caps */
-  if (sndiosrc->cur_caps == NULL) {
-    GST_LOG_OBJECT (sndiosrc, "getcaps called, returning template caps");
-    return NULL;
-  }
-
-  GST_LOG_OBJECT (sndiosrc, "returning %" GST_PTR_FORMAT, sndiosrc->cur_caps);
-
-  return gst_caps_ref (sndiosrc->cur_caps);
-}
-
-static gboolean
-gst_sndiosrc_open (GstAudioSrc * asrc)
-{
-  GstPadTemplate *pad_template;
-  GstSndioSrc *sndiosrc;
-  struct sio_par par;
-  struct sio_cap cap;
-  GArray *rates, *chans;
-  GValue rates_v = { 0 };
-  GValue chans_v = { 0 };
-  GValue value = { 0 };
-  struct sio_enc enc;
-  struct sio_conf conf;
-  int confs[SIO_NCONF];
-  int rate, chan;
-  int i, j, k;
-  int nconfs;
-
-  sndiosrc = GST_SNDIOSRC (asrc);
-
-  GST_DEBUG_OBJECT (sndiosrc, "open");
-
-  /* connect */
-  sndiosrc->hdl = sio_open (sndiosrc->host, SIO_REC, 0);
-
-  if (sndiosrc->hdl == NULL)
-    goto couldnt_connect;
-
-  /* Use sndio defaults as the only encodings, but get the supported
-   * sample rates and number of channels.
-   */
-
-  if (!sio_getpar (sndiosrc->hdl, &par))
-    goto no_server_info;
-
-  if (!sio_getcap (sndiosrc->hdl, &cap))
-    goto no_server_info;
-
-  rates = g_array_new (FALSE, FALSE, sizeof (int));
-  chans = g_array_new (FALSE, FALSE, sizeof (int));
-
-  /* find confs that have the default encoding */
-  nconfs = 0;
-  for (i = 0; i < cap.nconf; i++) {
-    for (j = 0; j < SIO_NENC; j++) {
-      if (cap.confs[i].enc & (1 << j)) {
-        enc = cap.enc[j];
-        if (enc.bits == par.bits && enc.sig == par.sig && enc.le == par.le) {
-          confs[nconfs] = i;
-          nconfs++;
-          break;
-        }
-      }
-    }
-  }
-
-  /* find the rates and channels of the confs that have the default encoding */
-  for (i = 0; i < nconfs; i++) {
-    conf = cap.confs[confs[i]];
-    /* rates */
-    for (j = 0; j < SIO_NRATE; j++) {
-      if (conf.rate & (1 << j)) {
-        rate = cap.rate[j];
-        for (k = 0; k < rates->len && rate; k++) {
-          if (rate == g_array_index (rates, int, k))
-              rate = 0;
-        }
-        /* add in ascending order */
-        if (rate) {
-          for (k = 0; k < rates->len; k++) {
-            if (rate < g_array_index (rates, int, k))
-            {
-              g_array_insert_val (rates, k, rate);
-              break;
-            }
-          }
-          if (k == rates->len)
-            g_array_append_val (rates, rate);
-        }
-      }
-    }
-    /* channels */
-    for (j = 0; j < SIO_NCHAN; j++) {
-      if (conf.rchan & (1 << j)) {
-        chan = cap.rchan[j];
-        for (k = 0; k < chans->len && chan; k++) {
-          if (chan == g_array_index (chans, int, k))
-              chan = 0;
-        }
-        /* add in ascending order */
-        if (chan) {
-          for (k = 0; k < chans->len; k++) {
-            if (chan < g_array_index (chans, int, k))
-            {
-              g_array_insert_val (chans, k, chan);
-              break;
-            }
-          }
-          if (k == chans->len)
-            g_array_append_val (chans, chan);
-        }
-      }
-    }
-  }
-  /* not sure how this can happen, but it might */
-  if (cap.nconf == 0) {
-    g_array_append_val (rates, par.rate);
-    g_array_append_val (chans, par.rchan);
-  }
-
-  g_value_init (&rates_v, GST_TYPE_LIST);
-  g_value_init (&chans_v, GST_TYPE_LIST);
-  g_value_init (&value, G_TYPE_INT);
-
-  for (i = 0; i < rates->len; i++) {
-    g_value_set_int (&value, g_array_index (rates, int, i));
-    gst_value_list_append_value (&rates_v, &value);
-  }
-  for (i = 0; i < chans->len; i++) {
-    g_value_set_int (&value, g_array_index (chans, int, i));
-    gst_value_list_append_value (&chans_v, &value);
-  }
-
-  g_array_free (rates, TRUE);
-  g_array_free (chans, TRUE);
-
-  pad_template = gst_static_pad_template_get (&sndio_src_factory);
-  sndiosrc->cur_caps = gst_caps_copy (gst_pad_template_get_caps (pad_template));
-  gst_object_unref (pad_template);
-
-  for (i = 0; i < sndiosrc->cur_caps->structs->len; i++) {
-    GstStructure *s;
-
-    s = gst_caps_get_structure (sndiosrc->cur_caps, i);
-    gst_structure_set (s, "endianness", G_TYPE_INT, par.le ? 1234 : 4321, NULL);
-    gst_structure_set (s, "signed", G_TYPE_BOOLEAN, par.sig ? TRUE : FALSE,
-        NULL);
-    gst_structure_set (s, "width", G_TYPE_INT, par.bits, NULL);
-    // gst_structure_set (s, "depth", G_TYPE_INT, par.bps * 8, NULL); /* XXX */
-    gst_structure_set_value (s, "rate", &rates_v);
-    gst_structure_set_value (s, "channels", &chans_v);
-  }
-
-  return TRUE;
-
-  /* ERRORS */
-couldnt_connect:
-  {
-    GST_ELEMENT_ERROR (sndiosrc, RESOURCE, OPEN_READ,
-        (_("Could not establish connection to sndio")),
-        ("can't open connection to sndio"));
-    return FALSE;
-  }
-no_server_info:
-  {
-    GST_ELEMENT_ERROR (sndiosrc, RESOURCE, OPEN_READ,
-        (_("Failed to query sndio capabilities")),
-        ("couldn't get sndio info!"));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_sndiosrc_close (GstAudioSrc * asrc)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (asrc);
-
-  GST_DEBUG_OBJECT (sndiosrc, "close");
-
-  gst_caps_replace (&sndiosrc->cur_caps, NULL);
-  sio_close (sndiosrc->hdl);
-  sndiosrc->hdl = NULL;
-
-  return TRUE;
-}
-
-static void
-gst_sndiosrc_cb (void *addr, int delta)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC ((GstAudioSrc *) addr);
-
-  sndiosrc->realpos += delta;
-
-  if (sndiosrc->readpos >= sndiosrc->realpos)
-    sndiosrc->latency = 0;
-  else
-    sndiosrc->latency = sndiosrc->realpos - sndiosrc->readpos;
-}
-
-static gboolean
-gst_sndiosrc_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (asrc);
-  struct sio_par par;
-  int spec_bpf;
-
-  GST_DEBUG_OBJECT (sndiosrc, "prepare");
-
-  sndiosrc->readpos = sndiosrc->realpos = sndiosrc->latency = 0;
-
-  sio_initpar (&par);
-  par.sig = spec->sign;
-  par.le = !spec->bigend;
-  par.bits = spec->width;
-  // par.bps = spec->depth / 8;  /* XXX */
-  par.rate = spec->rate;
-  par.rchan = spec->channels;
-
-  spec_bpf = ((spec->width / 8) * spec->channels);
-
-  par.round = spec->segsize / spec_bpf;
-  par.appbufsz = (spec->segsize * spec->segtotal) / spec_bpf;
-
-  if (!sio_setpar (sndiosrc->hdl, &par))
-    goto cannot_configure;
-
-  sio_getpar (sndiosrc->hdl, &par);
-
-  spec->sign = par.sig;
-  spec->bigend = !par.le;
-  spec->width = par.bits;
-  // spec->depth = par.bps * 8;  /* XXX */
-  spec->rate = par.rate;
-  spec->channels = par.rchan;
-
-  sndiosrc->bpf = par.bps * par.rchan;
-
-  spec->segsize = par.round * par.rchan * par.bps;
-  spec->segtotal = par.bufsz / par.round;
-
-  /* FIXME: this is wrong for signed ints (and the
-   * audioringbuffers should do it for us anyway) */
-  spec->silence_sample[0] = 0;
-  spec->silence_sample[1] = 0;
-  spec->silence_sample[2] = 0;
-  spec->silence_sample[3] = 0;
-
-  sio_onmove (sndiosrc->hdl, gst_sndiosrc_cb, sndiosrc);
-
-  if (!sio_start (sndiosrc->hdl))
-    goto cannot_start;
-
-  GST_INFO_OBJECT (sndiosrc, "successfully opened connection to sndio");
-
-  return TRUE;
-
-  /* ERRORS */
-cannot_configure:
-  {
-    GST_ELEMENT_ERROR (sndiosrc, RESOURCE, OPEN_READ,
-        (_("Could not configure sndio")), ("can't configure sndio"));
-    return FALSE;
-  }
-cannot_start:
-  {
-    GST_ELEMENT_ERROR (sndiosrc, RESOURCE, OPEN_READ,
-        (_("Could not start sndio")), ("can't start sndio"));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_sndiosrc_unprepare (GstAudioSrc * asrc)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (asrc);
-
-  if (sndiosrc->hdl == NULL)
-    return TRUE;
-
-  sio_stop (sndiosrc->hdl);
-
-  return TRUE;
-}
-
-static guint
-gst_sndiosrc_read (GstAudioSrc * asrc, gpointer data, guint length)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (asrc);
-  guint done;
-
-  done = sio_read (sndiosrc->hdl, data, length);
-
-  if (done == 0)
-    goto read_error;
-
-  sndiosrc->readpos += (done / sndiosrc->bpf);
-
-  data = (char *) data + done;
-
-  return done;
-
-  /* ERRORS */
-read_error:
-  {
-    GST_ELEMENT_ERROR (sndiosrc, RESOURCE, READ,
-        ("Failed to read data from sndio"), GST_ERROR_SYSTEM);
-    return 0;
-  }
-}
-
-static guint
-gst_sndiosrc_delay (GstAudioSrc * asrc)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (asrc);
-
-  if (sndiosrc->latency == (guint) - 1) {
-    GST_WARNING_OBJECT (asrc, "couldn't get latency");
-    return 0;
-  }
-
-  GST_DEBUG_OBJECT (asrc, "got latency: %u", sndiosrc->latency);
-
-  return sndiosrc->latency;
-}
-
-static void
-gst_sndiosrc_reset (GstAudioSrc * asrc)
-{
-  /* no way to flush the buffers with sndio ? */
-
-  GST_DEBUG_OBJECT (asrc, "reset called");
-}
-
-static void
-gst_sndiosrc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (object);
-
-  switch (prop_id) {
-    case PROP_HOST:
-      g_free (sndiosrc->host);
-      sndiosrc->host = g_value_dup_string (value);
-      break;
-    default:
-      break;
-  }
-}
-
-static void
-gst_sndiosrc_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstSndioSrc *sndiosrc = GST_SNDIOSRC (object);
-
-  switch (prop_id) {
-    case PROP_HOST:
-      g_value_set_string (value, sndiosrc->host);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
diff --git a/ext/sndio/sndiosrc.h b/ext/sndio/sndiosrc.h
deleted file mode 100644 (file)
index 48e7a26..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) <2008> Jacob Meuser <jakemsr@sdf.lonestar.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-
-#ifndef __GST_SNDIOSRC_H__
-#define __GST_SNDIOSRC_H__
-
-#include <sndio.h>
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiosrc.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SNDIOSRC \
-  (gst_sndiosrc_get_type())
-#define GST_SNDIOSRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SNDIOSRC,GstSndioSrc))
-#define GST_SNDIOSRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SNDIOSRC,GstSndioSrcClass))
-#define GST_IS_SNDIOSRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SNDIOSRC))
-#define GST_IS_SNDIOSRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SNDIOSRC))
-
-typedef struct _GstSndioSrc GstSndioSrc;
-typedef struct _GstSndioSrcClass GstSndioSrcClass;
-
-struct _GstSndioSrc {
-  GstAudioSrc   src;
-
-  struct sio_hdl *hdl;
-  gchar    *host;
-
-  /* bytes per frame */
-  int bpf;
-
-  /* frames counts */
-  volatile long long realpos;
-  volatile long long readpos;
-  volatile guint latency;
-
-  GstCaps  *cur_caps;
-};
-
-struct _GstSndioSrcClass {
-  GstAudioSrcClass parent_class;
-};
-
-GType gst_sndiosrc_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_SNDIOSRC_H__ */
diff --git a/ext/timidity/gsttimidity.c b/ext/timidity/gsttimidity.c
deleted file mode 100644 (file)
index 0b3f376..0000000
+++ /dev/null
@@ -1,821 +0,0 @@
-/*
- * gsttimdity - timidity plugin for gstreamer
- * 
- * Copyright 2007 Wouter Paesen <wouter@blue-gate.be>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-timidity
- * @see_also: wildmidi
- *
- * This element renders midi-files as audio streams using
- * <ulink url="http://timidity.sourceforge.net/">Timidity</ulink>.
- * 
- * <refsect2>
- * <title>Example pipeline</title>
- * |[
- * gst-launch filesrc location=song.mid ! timidity ! alsasink
- * ]| This example pipeline will parse the midi and render to raw audio which is
- * played via alsa.
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <gst/gst.h>
-#include <string.h>
-
-#include "gsttimidity.h"
-
-#ifndef TIMIDITY_CFG
-#define TIMIDITY_CFG "/etc/timidity.cfg"
-#endif
-
-GST_DEBUG_CATEGORY_STATIC (gst_timidity_debug);
-#define GST_CAT_DEFAULT gst_timidity_debug
-
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  ARG_0,
-  /* FILL ME */
-};
-
-static gboolean gst_timidity_src_event (GstPad * pad, GstEvent * event);
-static GstStateChangeReturn gst_timidity_change_state (GstElement * element,
-    GstStateChange transition);
-static gboolean gst_timidity_activate (GstPad * pad);
-static gboolean gst_timidity_activatepull (GstPad * pad, gboolean active);
-static void gst_timidity_loop (GstPad * sinkpad);
-static gboolean gst_timidity_src_query (GstPad * pad, GstQuery * query);
-static gboolean gst_timidity_set_song_options (GstTimidity * timidity,
-    MidSongOptions * options);
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/midi; audio/riff-midi")
-    );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "rate = (int) 44100, "
-        "channels = (int) 2, "
-        "endianness = (int) LITTLE_ENDIAN, "
-        "width = (int) 16, " "depth = (int) 16, " "signed = (boolean) true"));
-
-GST_BOILERPLATE (GstTimidity, gst_timidity, GstElement, GST_TYPE_ELEMENT);
-
-static void
-gst_timidity_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_add_static_pad_template (element_class, &src_factory);
-  gst_element_class_add_static_pad_template (element_class, &sink_factory);
-  gst_element_class_set_static_metadata (element_class, "Timidity",
-      "Codec/Decoder/Audio",
-      "Midi Synthesizer Element", "Wouter Paesen <wouter@blue-gate.be>");
-}
-
-/* initialize the plugin's class */
-static void
-gst_timidity_class_init (GstTimidityClass * klass)
-{
-  GstElementClass *gstelement_class;
-
-  gstelement_class = (GstElementClass *) klass;
-  gstelement_class->change_state = gst_timidity_change_state;
-}
-
-/* initialize the new element
- * instantiate pads and add them to element
- * set functions
- * initialize structure
- */
-static void
-gst_timidity_init (GstTimidity * filter, GstTimidityClass * g_class)
-{
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (filter);
-
-  /* initialise timidity library */
-  if (mid_init ((char *) TIMIDITY_CFG) == 0) {
-    filter->initialized = TRUE;
-  } else {
-    GST_WARNING ("can't initialize timidity with config: " TIMIDITY_CFG);
-  }
-
-  filter->sinkpad =
-      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
-          "sink"), "sink");
-
-  gst_pad_set_activatepull_function (filter->sinkpad,
-      gst_timidity_activatepull);
-  gst_pad_set_activate_function (filter->sinkpad, gst_timidity_activate);
-  gst_pad_set_setcaps_function (filter->sinkpad, gst_pad_set_caps);
-  gst_pad_use_fixed_caps (filter->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
-
-  filter->srcpad =
-      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
-          "src"), "src");
-
-  gst_pad_set_query_function (filter->srcpad, gst_timidity_src_query);
-  gst_pad_set_event_function (filter->srcpad, gst_timidity_src_event);
-  gst_pad_use_fixed_caps (filter->srcpad);
-  gst_pad_set_setcaps_function (filter->srcpad, gst_pad_set_caps);
-
-  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
-
-  filter->song_options->buffer_size = 2048;
-  filter->song_options->rate = 44100;
-  filter->song_options->format = MID_AUDIO_S16LSB;
-  filter->song_options->channels = 2;
-
-  gst_timidity_set_song_options (filter, filter->song_options);
-
-  gst_segment_init (filter->o_segment, GST_FORMAT_DEFAULT);
-}
-
-static gboolean
-gst_timidity_set_song_options (GstTimidity * timidity, MidSongOptions * options)
-{
-  gint64 bps;
-
-  switch (options->format) {
-    case MID_AUDIO_U8:
-    case MID_AUDIO_S8:
-      bps = 1;
-      break;
-    case MID_AUDIO_U16LSB:
-    case MID_AUDIO_S16LSB:
-    case MID_AUDIO_U16MSB:
-    case MID_AUDIO_S16MSB:
-      bps = 2;
-      break;
-    default:
-      return FALSE;
-  }
-
-  bps *= options->channels;
-
-  if (options != timidity->song_options)
-    memcpy (timidity->song_options, options, sizeof (MidSongOptions));
-
-  timidity->bytes_per_frame = bps;
-  timidity->time_per_frame = GST_SECOND / (GstClockTime) options->rate;
-
-  return TRUE;
-}
-
-static gboolean
-gst_timidity_src_convert (GstTimidity * timidity,
-    GstFormat src_format, gint64 src_value,
-    GstFormat * dest_format, gint64 * dest_value)
-{
-  gboolean res = TRUE;
-  gint64 frames;
-
-  if (src_format == *dest_format) {
-    *dest_value = src_value;
-    goto done;
-  }
-
-  switch (src_format) {
-    case GST_FORMAT_TIME:
-      frames = src_value / timidity->time_per_frame;
-      break;
-    case GST_FORMAT_BYTES:
-      frames = src_value / (timidity->bytes_per_frame);
-      break;
-    case GST_FORMAT_DEFAULT:
-      frames = src_value;
-      break;
-    default:
-      res = FALSE;
-      goto done;
-  }
-
-  switch (*dest_format) {
-    case GST_FORMAT_TIME:
-      *dest_value = frames * timidity->time_per_frame;
-      break;
-    case GST_FORMAT_BYTES:
-      *dest_value = frames * timidity->bytes_per_frame;
-      break;
-    case GST_FORMAT_DEFAULT:
-      *dest_value = frames;
-      break;
-    default:
-      res = FALSE;
-      break;
-  }
-
-done:
-  return res;
-}
-
-static gboolean
-gst_timidity_src_query (GstPad * pad, GstQuery * query)
-{
-  gboolean res = TRUE;
-  GstTimidity *timidity = GST_TIMIDITY (gst_pad_get_parent (pad));
-  GstFormat src_format, dst_format;
-  gint64 src_value, dst_value;
-
-  if (!timidity->song) {
-    gst_object_unref (timidity);
-    return FALSE;
-  }
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_DURATION:
-      gst_query_set_duration (query, GST_FORMAT_TIME,
-          GST_MSECOND * (gint64) mid_song_get_total_time (timidity->song));
-      break;
-    case GST_QUERY_POSITION:
-      gst_query_set_position (query, GST_FORMAT_TIME,
-          timidity->o_segment->last_stop * timidity->time_per_frame);
-      break;
-    case GST_QUERY_CONVERT:
-      gst_query_parse_convert (query, &src_format, &src_value,
-          &dst_format, NULL);
-
-      res =
-          gst_timidity_src_convert (timidity, src_format, src_value,
-          &dst_format, &dst_value);
-      if (res)
-        gst_query_set_convert (query, src_format, src_value, dst_format,
-            dst_value);
-
-      break;
-    case GST_QUERY_FORMATS:
-      gst_query_set_formats (query, 3,
-          GST_FORMAT_TIME, GST_FORMAT_BYTES, GST_FORMAT_DEFAULT);
-      break;
-    case GST_QUERY_SEGMENT:{
-      GstFormat format;
-      gint64 start, stop;
-
-      format = timidity->o_segment->format;
-
-      start =
-          gst_segment_to_stream_time (timidity->o_segment, format,
-          timidity->o_segment->start);
-      if ((stop = timidity->o_segment->stop) == -1)
-        stop = timidity->o_segment->duration;
-      else
-        stop = gst_segment_to_stream_time (timidity->o_segment, format, stop);
-
-      gst_query_set_segment (query, timidity->o_segment->rate, format, start,
-          stop);
-      res = TRUE;
-      break;
-    }
-    case GST_QUERY_SEEKING:
-      gst_query_set_seeking (query, timidity->o_segment->format,
-          TRUE, 0, timidity->o_len);
-      break;
-    default:
-      res = FALSE;
-      break;
-  }
-
-  gst_object_unref (timidity);
-  return res;
-}
-
-static gboolean
-gst_timidity_get_upstream_size (GstTimidity * timidity, gint64 * size)
-{
-  GstFormat format = GST_FORMAT_BYTES;
-  gboolean res = FALSE;
-  GstPad *peer = gst_pad_get_peer (timidity->sinkpad);
-
-  if (peer != NULL)
-    res = gst_pad_query_duration (peer, &format, size) && *size >= 0;
-
-  gst_object_unref (peer);
-  return res;
-}
-
-static GstSegment *
-gst_timidity_get_segment (GstTimidity * timidity, GstFormat format,
-    gboolean update)
-{
-  gint64 start = 0, stop = 0, time = 0;
-
-  GstSegment *segment = gst_segment_new ();
-
-  gst_timidity_src_convert (timidity,
-      timidity->o_segment->format, timidity->o_segment->start, &format, &start);
-
-  if (timidity->o_segment->stop == GST_CLOCK_TIME_NONE) {
-    stop = GST_CLOCK_TIME_NONE;
-  } else {
-    gst_timidity_src_convert (timidity,
-        timidity->o_segment->format, timidity->o_segment->stop, &format, &stop);
-  }
-
-  gst_timidity_src_convert (timidity,
-      timidity->o_segment->format, timidity->o_segment->time, &format, &time);
-
-  gst_segment_set_newsegment_full (segment, update,
-      timidity->o_segment->rate, timidity->o_segment->applied_rate,
-      format, start, stop, time);
-
-  segment->last_stop = time;
-
-  return segment;
-}
-
-static GstEvent *
-gst_timidity_get_new_segment_event (GstTimidity * timidity, GstFormat format,
-    gboolean update)
-{
-  GstSegment *segment;
-  GstEvent *event;
-
-  segment = gst_timidity_get_segment (timidity, format, update);
-
-  event = gst_event_new_new_segment_full (update,
-      segment->rate, segment->applied_rate, segment->format,
-      segment->start, segment->stop, segment->time);
-
-  gst_segment_free (segment);
-
-  return event;
-}
-
-static gboolean
-gst_timidity_src_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res = FALSE;
-  GstTimidity *timidity = GST_TIMIDITY (gst_pad_get_parent (pad));
-
-  GST_DEBUG_OBJECT (pad, "%s event received", GST_EVENT_TYPE_NAME (event));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-    {
-      gdouble rate;
-      GstFormat src_format, dst_format;
-      GstSeekFlags flags;
-      GstSeekType start_type, stop_type;
-      gint64 orig_start, start = 0, stop = 0;
-      gboolean flush, update;
-
-      if (!timidity->song)
-        break;
-
-      gst_event_parse_seek (event, &rate, &src_format, &flags,
-          &start_type, &orig_start, &stop_type, &stop);
-
-      dst_format = GST_FORMAT_DEFAULT;
-
-      gst_timidity_src_convert (timidity, src_format, orig_start,
-          &dst_format, &start);
-      gst_timidity_src_convert (timidity, src_format, stop, &dst_format, &stop);
-
-      flush = ((flags & GST_SEEK_FLAG_FLUSH) == GST_SEEK_FLAG_FLUSH);
-
-      if (flush) {
-        GST_DEBUG ("performing flush");
-        gst_pad_push_event (timidity->srcpad, gst_event_new_flush_start ());
-      } else {
-        gst_pad_stop_task (timidity->sinkpad);
-      }
-
-      GST_PAD_STREAM_LOCK (timidity->sinkpad);
-
-      if (flush) {
-        gst_pad_push_event (timidity->srcpad, gst_event_new_flush_stop ());
-      }
-
-      gst_segment_set_seek (timidity->o_segment, rate, dst_format, flags,
-          start_type, start, stop_type, stop, &update);
-
-      if (flags & GST_SEEK_FLAG_SEGMENT) {
-        GST_DEBUG_OBJECT (timidity, "received segment seek %d, %d",
-            (gint) start_type, (gint) stop_type);
-      } else {
-        GST_DEBUG_OBJECT (timidity, "received normal seek %d",
-            (gint) start_type);
-        update = FALSE;
-      }
-
-      gst_pad_push_event (timidity->srcpad,
-          gst_timidity_get_new_segment_event (timidity, GST_FORMAT_TIME,
-              update));
-
-      timidity->o_seek = TRUE;
-
-      gst_pad_start_task (timidity->sinkpad,
-          (GstTaskFunction) gst_timidity_loop, timidity->sinkpad, NULL);
-
-      GST_PAD_STREAM_UNLOCK (timidity->sinkpad);
-      GST_DEBUG ("seek done");
-    }
-      res = TRUE;
-      break;
-    default:
-      break;
-  }
-
-  g_object_unref (timidity);
-  return res;
-}
-
-static gboolean
-gst_timidity_activate (GstPad * sinkpad)
-{
-  if (gst_pad_check_pull_range (sinkpad))
-    return gst_pad_activate_pull (sinkpad, TRUE);
-
-  return FALSE;
-}
-
-static gboolean
-gst_timidity_activatepull (GstPad * pad, gboolean active)
-{
-  if (active) {
-    return gst_pad_start_task (pad, (GstTaskFunction) gst_timidity_loop, pad,
-        NULL);
-  } else {
-    return gst_pad_stop_task (pad);
-  }
-}
-
-static GstBuffer *
-gst_timidity_allocate_buffer (GstTimidity * timidity, gint64 samples)
-{
-  return gst_buffer_new_and_alloc (samples * timidity->bytes_per_frame);
-}
-
-static GstBuffer *
-gst_timidity_clip_buffer (GstTimidity * timidity, GstBuffer * buffer)
-{
-  gint64 new_start, new_stop;
-  gint64 offset, length;
-  GstBuffer *out;
-
-  return buffer;
-
-  if (!gst_segment_clip (timidity->o_segment, GST_FORMAT_DEFAULT,
-          GST_BUFFER_OFFSET (buffer), GST_BUFFER_OFFSET_END (buffer),
-          &new_start, &new_stop)) {
-    gst_buffer_unref (buffer);
-    return NULL;
-  }
-
-  if (GST_BUFFER_OFFSET (buffer) == new_start &&
-      GST_BUFFER_OFFSET_END (buffer) == new_stop)
-    return buffer;
-
-  offset = new_start - GST_BUFFER_OFFSET (buffer);
-  length = new_stop - new_start;
-
-  out = gst_buffer_create_sub (buffer, offset * timidity->bytes_per_frame,
-      length * timidity->bytes_per_frame);
-
-  GST_BUFFER_OFFSET (out) = new_start;
-  GST_BUFFER_OFFSET_END (out) = new_stop;
-  GST_BUFFER_TIMESTAMP (out) = new_start * timidity->time_per_frame;
-  GST_BUFFER_DURATION (out) = (new_stop - new_start) * timidity->time_per_frame;
-
-  gst_buffer_unref (buffer);
-
-  return out;
-}
-
-/* generate audio data and advance internal timers */
-static GstBuffer *
-gst_timidity_fill_buffer (GstTimidity * timidity, GstBuffer * buffer)
-{
-  size_t bytes_read;
-  gint64 samples;
-
-  bytes_read = mid_song_read_wave (timidity->song, GST_BUFFER_DATA (buffer),
-      GST_BUFFER_SIZE (buffer));
-
-  if (bytes_read == 0) {
-    gst_buffer_unref (buffer);
-    return NULL;
-  }
-
-  GST_BUFFER_OFFSET (buffer) =
-      timidity->o_segment->last_stop * timidity->bytes_per_frame;
-  GST_BUFFER_TIMESTAMP (buffer) =
-      timidity->o_segment->last_stop * timidity->time_per_frame;
-
-  if (bytes_read < GST_BUFFER_SIZE (buffer)) {
-    GstBuffer *old = buffer;
-
-    buffer = gst_buffer_create_sub (buffer, 0, bytes_read);
-    gst_buffer_unref (old);
-  }
-
-  samples = GST_BUFFER_SIZE (buffer) / timidity->bytes_per_frame;
-
-  timidity->o_segment->last_stop += samples;
-
-  GST_BUFFER_OFFSET_END (buffer) =
-      timidity->o_segment->last_stop * timidity->bytes_per_frame;
-  GST_BUFFER_DURATION (buffer) = samples * timidity->time_per_frame;
-
-  GST_DEBUG_OBJECT (timidity,
-      "generated buffer %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT
-      " (%" G_GINT64_FORMAT " samples)",
-      GST_TIME_ARGS ((guint64) GST_BUFFER_TIMESTAMP (buffer)),
-      GST_TIME_ARGS (((guint64) (GST_BUFFER_TIMESTAMP (buffer) +
-                  GST_BUFFER_DURATION (buffer)))), samples);
-
-  return buffer;
-}
-
-static GstBuffer *
-gst_timidity_get_buffer (GstTimidity * timidity)
-{
-  GstBuffer *out;
-
-  out =
-      gst_timidity_fill_buffer (timidity,
-      gst_timidity_allocate_buffer (timidity, 256));
-
-  if (!out)
-    return NULL;
-
-  return gst_timidity_clip_buffer (timidity, out);
-}
-
-static void
-gst_timidity_loop (GstPad * sinkpad)
-{
-  GstTimidity *timidity = GST_TIMIDITY (GST_PAD_PARENT (sinkpad));
-  GstBuffer *out;
-  GstFlowReturn ret;
-
-  if (timidity->mididata_size == 0) {
-    if (!gst_timidity_get_upstream_size (timidity, &timidity->mididata_size)) {
-      GST_ELEMENT_ERROR (timidity, STREAM, DECODE, (NULL),
-          ("Unable to get song length"));
-      goto paused;
-    }
-
-    g_free (timidity->mididata);
-
-    timidity->mididata = g_malloc (timidity->mididata_size);
-    timidity->mididata_offset = 0;
-    return;
-  }
-
-  if (timidity->mididata_offset < timidity->mididata_size) {
-    GstBuffer *buffer = NULL;
-    gint64 size;
-
-    GST_DEBUG_OBJECT (timidity, "loading song");
-
-    ret =
-        gst_pad_pull_range (timidity->sinkpad, timidity->mididata_offset,
-        -1, &buffer);
-    if (ret != GST_FLOW_OK) {
-      GST_ELEMENT_ERROR (timidity, STREAM, DECODE, (NULL),
-          ("Unable to load song"));
-      goto paused;
-    }
-
-    size = timidity->mididata_size - timidity->mididata_offset;
-    if (GST_BUFFER_SIZE (buffer) < size)
-      size = GST_BUFFER_SIZE (buffer);
-
-    memmove (timidity->mididata + timidity->mididata_offset,
-        GST_BUFFER_DATA (buffer), size);
-    gst_buffer_unref (buffer);
-
-    timidity->mididata_offset += size;
-    GST_DEBUG_OBJECT (timidity, "Song loaded");
-    return;
-  }
-
-  if (!timidity->song) {
-    MidIStream *stream;
-    GstTagList *tags = NULL;
-    gchar *text;
-
-    GST_DEBUG_OBJECT (timidity, "Parsing song");
-
-#if defined(LIBTIMIDITY_VERSION) && LIBTIMIDITY_VERSION < 0x000200L
-    stream =
-        mid_istream_open_mem (timidity->mididata, timidity->mididata_size, 0);
-#else
-    stream = mid_istream_open_mem (timidity->mididata, timidity->mididata_size);
-#endif
-
-    timidity->song = mid_song_load (stream, timidity->song_options);
-    mid_istream_close (stream);
-
-    if (!timidity->song) {
-      GST_ELEMENT_ERROR (timidity, STREAM, DECODE, (NULL),
-          ("Unable to parse midi"));
-      goto paused;
-    }
-
-    mid_song_start (timidity->song);
-    timidity->o_len = (GST_MSECOND *
-        (GstClockTime) mid_song_get_total_time (timidity->song)) /
-        timidity->time_per_frame;
-    gst_segment_set_newsegment (timidity->o_segment, FALSE, 1.0,
-        GST_FORMAT_DEFAULT, 0, GST_CLOCK_TIME_NONE, 0);
-
-
-    gst_pad_push_event (timidity->srcpad,
-        gst_timidity_get_new_segment_event (timidity, GST_FORMAT_TIME, FALSE));
-
-    /* extract tags */
-    text = mid_song_get_meta (timidity->song, MID_SONG_TEXT);
-    if (text) {
-      tags = gst_tag_list_new ();
-      gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_TITLE, text, NULL);
-
-      //g_free (text);
-    }
-
-    text = mid_song_get_meta (timidity->song, MID_SONG_COPYRIGHT);
-    if (text) {
-      if (tags == NULL)
-        tags = gst_tag_list_new ();
-      gst_tag_list_add (tags, GST_TAG_MERGE_APPEND,
-          GST_TAG_COPYRIGHT, text, NULL);
-
-      //g_free (text);
-    }
-
-    if (tags) {
-      gst_element_found_tags (GST_ELEMENT (timidity), tags);
-    }
-
-    GST_DEBUG_OBJECT (timidity, "Parsing song done");
-    return;
-  }
-
-  if (timidity->o_segment_changed) {
-    GstSegment *segment = gst_timidity_get_segment (timidity, GST_FORMAT_TIME,
-        !timidity->o_new_segment);
-
-    GST_LOG_OBJECT (timidity,
-        "sending newsegment from %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT
-        ", pos=%" GST_TIME_FORMAT, GST_TIME_ARGS ((guint64) segment->start),
-        GST_TIME_ARGS ((guint64) segment->stop),
-        GST_TIME_ARGS ((guint64) segment->time));
-
-    if (timidity->o_segment->flags & GST_SEEK_FLAG_SEGMENT) {
-      gst_element_post_message (GST_ELEMENT (timidity),
-          gst_message_new_segment_start (GST_OBJECT (timidity),
-              segment->format, segment->start));
-    }
-
-    gst_segment_free (segment);
-    timidity->o_segment_changed = FALSE;
-    return;
-  }
-
-  if (timidity->o_seek) {
-    /* perform a seek internally */
-    timidity->o_segment->last_stop = timidity->o_segment->time;
-    mid_song_seek (timidity->song,
-        (timidity->o_segment->last_stop * timidity->time_per_frame) /
-        GST_MSECOND);
-  }
-
-  out = gst_timidity_get_buffer (timidity);
-  if (!out) {
-    GST_LOG_OBJECT (timidity, "Song ended, generating eos");
-    gst_pad_push_event (timidity->srcpad, gst_event_new_eos ());
-    timidity->o_seek = FALSE;
-    goto paused;
-  }
-
-  if (timidity->o_seek) {
-    GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT);
-    timidity->o_seek = FALSE;
-  }
-
-  gst_buffer_set_caps (out, timidity->out_caps);
-  ret = gst_pad_push (timidity->srcpad, out);
-
-  if (ret == GST_FLOW_UNEXPECTED)
-    goto eos;
-  else if (ret < GST_FLOW_UNEXPECTED || ret == GST_FLOW_NOT_LINKED)
-    goto error;
-
-  return;
-
-paused:
-  {
-    GST_DEBUG_OBJECT (timidity, "pausing task");
-    gst_pad_pause_task (timidity->sinkpad);
-    return;
-  }
-eos:
-  {
-    gst_pad_push_event (timidity->srcpad, gst_event_new_eos ());
-    goto paused;
-  }
-error:
-  {
-    GST_ELEMENT_FLOW_ERROR (timidity, ret);
-    gst_pad_push_event (timidity->srcpad, gst_event_new_eos ());
-    goto paused;
-  }
-}
-
-static GstStateChangeReturn
-gst_timidity_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstTimidity *timidity = GST_TIMIDITY (element);
-
-  if (!timidity->initialized) {
-    GST_WARNING ("Timidity renderer is not initialized");
-    return GST_STATE_CHANGE_FAILURE;
-  }
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      timidity->out_caps =
-          gst_caps_copy (gst_pad_get_pad_template_caps (timidity->srcpad));
-      timidity->mididata = NULL;
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      timidity->mididata_size = 0;
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      if (timidity->song)
-        mid_song_free (timidity->song);
-      timidity->song = NULL;
-      timidity->mididata_size = 0;
-      if (timidity->mididata) {
-        g_free (timidity->mididata);
-        timidity->mididata = NULL;
-      }
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_caps_unref (timidity->out_caps);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (gst_timidity_debug, "timidity",
-      0, "Timidity plugin");
-
-  return gst_element_register (plugin, "timidity",
-      GST_RANK_PRIMARY, GST_TYPE_TIMIDITY);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    timidity,
-    "Timidity Plugin",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/timidity/gsttimidity.h b/ext/timidity/gsttimidity.h
deleted file mode 100644 (file)
index 4e9350b..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * gsttimdity - timidity plugin for gstreamer
- * 
- * Copyright 2007 Wouter Paesen <wouter@blue-gate.be>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- * Wrapper element for libtimidity.  This element works in pull
- * based mode because that's essentially how libtimidity works. 
- * We create a libtimidity stream that operates on the srcpad.  
- * The sinkpad is in pull mode.
- */
-
-#ifndef __GST_TIMIDITY_H__
-#define __GST_TIMIDITY_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <timidity.h>
-
-G_BEGIN_DECLS
-#define GST_TYPE_TIMIDITY \
-  (gst_timidity_get_type())
-#define GST_TIMIDITY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TIMIDITY,GstTimidity))
-#define GST_TIMIDITY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TIMIDITY,GstTimidityClass))
-#define GST_IS_TIMIDITY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TIMIDITY))
-#define GST_IS_TIMIDITY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TIMIDITY))
-typedef struct _GstTimidity GstTimidity;
-typedef struct _GstTimidityClass GstTimidityClass;
-
-struct _GstTimidity
-{
-    GstElement element;
-
-    GstPad *sinkpad, *srcpad;
-
-    gboolean initialized;
-
-    /* input stream properties */
-    gint64 mididata_size, mididata_offset;
-    gchar *mididata;
-    gboolean mididata_filled;
-
-    MidSong *song;
-
-    /* output data */
-    gboolean o_new_segment, o_segment_changed, o_seek;
-    GstSegment o_segment[1];
-    gint64 o_len;
-
-    /* format of the stream */
-    MidSongOptions song_options[1];
-    gint64 bytes_per_frame;
-    GstClockTime time_per_frame;
-
-    GstCaps *out_caps;
-};
-
-struct _GstTimidityClass
-{
-    GstElementClass parent_class;
-};
-
-GType gst_timidity_get_type (void);
-
-G_END_DECLS
-#endif /* __GST_TIMIDITY_H__ */
similarity index 50%
rename from ext/timidity/Makefile.am
rename to ext/wildmidi/Makefile.am
index 9ec7bbd..7dfdc88 100644 (file)
@@ -1,20 +1,6 @@
 # plugindir is set in configure
 plugin_LTLIBRARIES =
 
-if USE_TIMIDITY
-plugin_LTLIBRARIES += libgsttimidity.la
-
-# sources used to compile this plug-in
-libgsttimidity_la_SOURCES = gsttimidity.c
-
-# flags used to compile this plugin
-# add other _CFLAGS and _LIBS as needed
-libgsttimidity_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(TIMIDITY_CFLAGS)
-libgsttimidity_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(TIMIDITY_LIBS)
-libgsttimidity_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgsttimidity_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-endif
-
 if USE_WILDMIDI
 plugin_LTLIBRARIES += libgstwildmidi.la
 
@@ -29,5 +15,5 @@ libgstwildmidi_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstwildmidi_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 endif
 
-noinst_HEADERS = gsttimidity.h gstwildmidi.h
+noinst_HEADERS = gstwildmidi.h
 
similarity index 100%
rename from ext/timidity/README
rename to ext/wildmidi/README
diff --git a/ext/xvid/Makefile.am b/ext/xvid/Makefile.am
deleted file mode 100644 (file)
index 016f373..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-plugin_LTLIBRARIES = libgstxvid.la
-
-libgstxvid_la_SOURCES = gstxvidenc.c gstxviddec.c gstxvid.c
-libgstxvid_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(XVID_CFLAGS)
-libgstxvid_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(XVID_LIBS)
-libgstxvid_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstxvid_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstxvidenc.h gstxviddec.h gstxvid.h
diff --git a/ext/xvid/gstxvid.c b/ext/xvid/gstxvid.c
deleted file mode 100644 (file)
index 9d0d150..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-/* GStreamer xvid encoder/decoder plugin
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <xvid.h>
-
-#include <gst/video/video.h>
-#include "gstxviddec.h"
-#include "gstxvidenc.h"
-
-gboolean
-gst_xvid_init (void)
-{
-  xvid_gbl_init_t xinit;
-  gint ret;
-  static gboolean is_init = FALSE;
-
-  /* only init once */
-  if (is_init == TRUE) {
-    return TRUE;
-  }
-
-  /* set up xvid initially (function pointers, CPU flags) */
-  gst_xvid_init_struct (xinit);
-
-  if ((ret = xvid_global (NULL, XVID_GBL_INIT, &xinit, NULL)) < 0) {
-    g_warning ("Failed to initialize XviD: %s (%d)", gst_xvid_error (ret), ret);
-    return FALSE;
-  }
-
-  GST_LOG ("Initted XviD version %d.%d.%d (API %d.%d)",
-      XVID_VERSION_MAJOR (XVID_VERSION),
-      XVID_VERSION_MINOR (XVID_VERSION),
-      XVID_VERSION_PATCH (XVID_VERSION),
-      XVID_API_MAJOR (XVID_API), XVID_API_MINOR (XVID_API));
-
-  is_init = TRUE;
-  return TRUE;
-}
-
-const gchar *
-gst_xvid_error (int errorcode)
-{
-  const gchar *error;
-
-  switch (errorcode) {
-    case XVID_ERR_FAIL:
-      error = "Operation failed";
-      break;
-    case 0:
-      error = "No error";
-      break;
-    case XVID_ERR_MEMORY:
-      error = "Memory allocation error";
-      break;
-    case XVID_ERR_FORMAT:
-      error = "File format not supported";
-      break;
-    case XVID_ERR_VERSION:
-      error = "Structure version not supported";
-      break;
-    default:
-      error = "Unknown error";
-      break;
-  }
-
-  return error;
-}
-
-gint
-gst_xvid_structure_to_csp (GstStructure * structure)
-{
-  const gchar *mime = gst_structure_get_name (structure);
-  gint xvid_cs = -1;
-
-  if (!strcmp (mime, "video/x-raw-yuv")) {
-    guint32 fourcc;
-
-    gst_structure_get_fourcc (structure, "format", &fourcc);
-    switch (fourcc) {
-      case GST_MAKE_FOURCC ('I', '4', '2', '0'):
-        xvid_cs = XVID_CSP_I420;
-        break;
-      case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
-        xvid_cs = XVID_CSP_YUY2;
-        break;
-      case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
-        xvid_cs = XVID_CSP_YV12;
-        break;
-      case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
-        xvid_cs = XVID_CSP_UYVY;
-        break;
-      case GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'):
-        xvid_cs = XVID_CSP_YVYU;
-        break;
-    }
-  } else {
-    gint depth, bpp, r_mask;
-
-    gst_structure_get_int (structure, "depth", &depth);
-    gst_structure_get_int (structure, "bpp", &bpp);
-    gst_structure_get_int (structure, "red_mask", &r_mask);
-
-    switch (depth) {
-      case 15:
-        xvid_cs = XVID_CSP_RGB555;
-        break;
-      case 16:
-        xvid_cs = XVID_CSP_RGB565;
-        break;
-      case 24:
-        if (bpp == 24) {
-          xvid_cs = XVID_CSP_BGR;
-        } else {
-          switch (r_mask) {
-            case 0xff000000:
-              xvid_cs = XVID_CSP_RGBA;
-              break;
-#ifdef XVID_CSP_ARGB
-            case 0x00ff0000:
-              xvid_cs = XVID_CSP_ARGB;
-              break;
-#endif
-            case 0x0000ff00:
-              xvid_cs = XVID_CSP_BGRA;
-              break;
-            case 0x000000ff:
-              xvid_cs = XVID_CSP_ABGR;
-              break;
-          }
-        }
-        break;
-      default:
-        break;
-    }
-
-  }
-
-  return xvid_cs;
-}
-
-GstCaps *
-gst_xvid_csp_to_caps (gint csp, gint w, gint h)
-{
-  GstStructure *structure = NULL;
-
-  switch (csp) {
-    case XVID_CSP_RGB555:
-    case XVID_CSP_RGB565:
-    case XVID_CSP_BGR:
-    case XVID_CSP_ABGR:
-    case XVID_CSP_BGRA:
-#ifdef XVID_CSP_ARGB
-    case XVID_CSP_ARGB:
-#endif
-    case XVID_CSP_RGBA:{
-      gint r_mask = 0, b_mask = 0, g_mask = 0,
-          endianness = 0, bpp = 0, depth = 0;
-
-      switch (csp) {
-        case XVID_CSP_RGB555:
-          r_mask = GST_VIDEO_COMP1_MASK_15_INT;
-          g_mask = GST_VIDEO_COMP2_MASK_15_INT;
-          b_mask = GST_VIDEO_COMP3_MASK_15_INT;
-          endianness = G_BYTE_ORDER;
-          depth = 15;
-          bpp = 16;
-          break;
-        case XVID_CSP_RGB565:
-          r_mask = GST_VIDEO_COMP1_MASK_16_INT;
-          g_mask = GST_VIDEO_COMP2_MASK_16_INT;
-          b_mask = GST_VIDEO_COMP3_MASK_16_INT;
-          endianness = G_BYTE_ORDER;
-          depth = 16;
-          bpp = 16;
-          break;
-        case XVID_CSP_BGR:
-          r_mask = 0x0000ff;
-          g_mask = 0x00ff00;
-          b_mask = 0xff0000;
-          endianness = G_BIG_ENDIAN;
-          depth = 24;
-          bpp = 24;
-          break;
-        case XVID_CSP_ABGR:
-          r_mask = 0x000000ff;
-          g_mask = 0x0000ff00;
-          b_mask = 0x00ff0000;
-          endianness = G_BIG_ENDIAN;
-          depth = 24;
-          bpp = 32;
-          break;
-        case XVID_CSP_BGRA:
-          r_mask = 0x0000ff00;
-          g_mask = 0x00ff0000;
-          b_mask = 0xff000000;
-          endianness = G_BIG_ENDIAN;
-          depth = 24;
-          bpp = 32;
-          break;
-#ifdef XVID_CSP_ARGB
-        case XVID_CSP_ARGB:
-          r_mask = 0x00ff0000;
-          g_mask = 0x0000ff00;
-          b_mask = 0x000000ff;
-          endianness = G_BIG_ENDIAN;
-          depth = 24;
-          bpp = 32;
-          break;
-#endif
-        case XVID_CSP_RGBA:
-          r_mask = 0xff000000;
-          g_mask = 0x00ff0000;
-          b_mask = 0x0000ff00;
-          endianness = G_BIG_ENDIAN;
-          depth = 24;
-          bpp = 32;
-          break;
-      }
-
-      structure = gst_structure_new ("video/x-raw-rgb",
-          "width", G_TYPE_INT, w,
-          "height", G_TYPE_INT, h,
-          "depth", G_TYPE_INT, depth,
-          "bpp", G_TYPE_INT, bpp,
-          "endianness", G_TYPE_INT, endianness,
-          "red_mask", G_TYPE_INT, r_mask,
-          "green_mask", G_TYPE_INT, g_mask,
-          "blue_mask", G_TYPE_INT, b_mask, NULL);
-      break;
-    }
-
-    case XVID_CSP_YUY2:
-    case XVID_CSP_YVYU:
-    case XVID_CSP_UYVY:
-    case XVID_CSP_I420:
-    case XVID_CSP_YV12:{
-      guint32 fourcc = 0;
-
-      switch (csp) {
-        case XVID_CSP_YUY2:
-          fourcc = GST_MAKE_FOURCC ('Y', 'U', 'Y', '2');
-          break;
-        case XVID_CSP_YVYU:
-          fourcc = GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U');
-          break;
-        case XVID_CSP_UYVY:
-          fourcc = GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y');
-          break;
-        case XVID_CSP_I420:
-          fourcc = GST_MAKE_FOURCC ('I', '4', '2', '0');
-          break;
-        case XVID_CSP_YV12:
-          fourcc = GST_MAKE_FOURCC ('Y', 'V', '1', '2');
-          break;
-      }
-
-      structure = gst_structure_new ("video/x-raw-yuv",
-          "width", G_TYPE_INT, w,
-          "height", G_TYPE_INT, h, "format", GST_TYPE_FOURCC, fourcc, NULL);
-      break;
-    }
-  }
-
-  return gst_caps_new_full (structure, NULL);
-}
-
-
-gint
-gst_xvid_image_get_size (gint csp, gint width, gint height)
-{
-  xvid_image_t dummy_im;
-
-  return gst_xvid_image_fill (&dummy_im, NULL, csp, width, height);
-}
-
-gint
-gst_xvid_image_fill (xvid_image_t * im, void *ptr, gint csp,
-    gint width, gint height)
-{
-  gint stride, h2, size = 0;
-
-  im->csp = csp;
-
-  switch (csp) {
-    case XVID_CSP_I420:
-    case XVID_CSP_YV12:
-      /* planar */
-      /* luma */
-      stride = GST_ROUND_UP_4 (width);
-      h2 = GST_ROUND_UP_2 (height);
-      im->stride[0] = stride;
-      im->plane[0] = ptr;
-      /* chroma */
-      im->plane[1] = ((guint8 *) im->plane[0]) + (stride * h2);
-      size += stride * height;
-      stride = GST_ROUND_UP_8 (width) / 2;
-      h2 = GST_ROUND_UP_2 (height) / 2;
-      im->stride[1] = stride;
-
-      im->plane[2] = ((guint8 *) im->plane[1]) + (stride * h2);
-      im->stride[2] = stride;
-      size += 2 * (stride * h2);
-      break;
-    case XVID_CSP_RGB555:
-    case XVID_CSP_RGB565:
-    case XVID_CSP_YUY2:
-    case XVID_CSP_UYVY:
-    case XVID_CSP_YVYU:
-      /* packed */
-      stride = GST_ROUND_UP_4 (width * 2);
-      im->plane[0] = ptr;
-      im->stride[0] = stride;
-      size = stride * height;
-      break;
-    case XVID_CSP_BGR:
-      stride = GST_ROUND_UP_4 (width * 3);
-      im->plane[0] = ptr;
-      im->stride[0] = stride;
-      size = stride * height * 2;
-      break;
-    case XVID_CSP_ABGR:
-    case XVID_CSP_BGRA:
-    case XVID_CSP_RGBA:
-#ifdef XVID_CSP_ARGB
-    case XVID_CSP_ARGB:
-#endif
-      stride = width * 4;
-      im->plane[0] = ptr;
-      im->stride[0] = stride;
-      size = stride * height;
-      break;
-  }
-
-  return size;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return (gst_element_register (plugin, "xvidenc",
-          GST_RANK_SECONDARY, GST_TYPE_XVIDENC) &&
-      gst_element_register (plugin, "xviddec",
-          GST_RANK_NONE, GST_TYPE_XVIDDEC));
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    xvid,
-    "XviD plugin library", plugin_init, VERSION, "GPL", GST_PACKAGE_NAME,
-    GST_PACKAGE_ORIGIN)
diff --git a/ext/xvid/gstxvid.h b/ext/xvid/gstxvid.h
deleted file mode 100644 (file)
index fd08ba9..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* GStreamer xvid encoder/decoder plugin
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_XVID_H__
-#define __GST_XVID_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define gst_xvid_init_struct(s) \
-  do { \
-    memset (&s, 0, sizeof(s)); \
-    s.version = XVID_VERSION; \
-  } while (0);
-
-#define RGB_24_32_STATIC_CAPS(bpp, r_mask,g_mask,b_mask) \
-  "video/x-raw-rgb, " \
-  "width = (int) [ 0, MAX ], " \
-  "height = (int) [ 0, MAX], " \
-  "framerate = (fraction) [ 0, MAX], " \
-  "depth = (int) 24, " \
-  "bpp = (int) " G_STRINGIFY (bpp) ", " \
-  "endianness = (int) BIG_ENDIAN, " \
-  "red_mask = (int) " G_STRINGIFY (r_mask) ", " \
-  "green_mask = (int) " G_STRINGIFY (g_mask) ", " \
-  "blue_mask = (int) " G_STRINGIFY (b_mask)
-
-extern const gchar *gst_xvid_error (int errorcode);
-extern gboolean            gst_xvid_init  (void);
-
-extern gint         gst_xvid_structure_to_csp (GstStructure *structure);
-extern GstCaps *    gst_xvid_csp_to_caps      (gint csp, gint w, gint h);
-extern gint         gst_xvid_image_get_size (gint csp,
-                                             gint width, gint height);
-extern gint         gst_xvid_image_fill (xvid_image_t * im, void * ptr, gint csp,
-                                         gint width, gint height);
-
-G_END_DECLS
-
-#endif /* __GST_XVID_H__ */
diff --git a/ext/xvid/gstxviddec.c b/ext/xvid/gstxviddec.c
deleted file mode 100644 (file)
index b49cf2f..0000000
+++ /dev/null
@@ -1,673 +0,0 @@
-/* GStreamer xvid decoder plugin
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *           (C) 2006 Mark Nauwelaerts <manauw@skynet.be>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <xvid.h>
-
-#include <gst/video/video.h>
-#include "gstxviddec.h"
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-xvid, "
-        "width = (int) [ 0, MAX ], "
-        "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ]; "
-        "video/mpeg, "
-        "mpegversion = (int) 4, "
-        "systemstream = (boolean) FALSE, "
-        "width = (int) [ 0, MAX ], "
-        "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ]")
-    );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YUY2, YV12, YVYU, UYVY }")
-        "; " RGB_24_32_STATIC_CAPS (32, 0x00ff0000, 0x0000ff00,
-            0x000000ff) "; " RGB_24_32_STATIC_CAPS (32, 0xff000000, 0x00ff0000,
-            0x0000ff00) "; " RGB_24_32_STATIC_CAPS (32, 0x0000ff00, 0x00ff0000,
-            0xff000000) "; " RGB_24_32_STATIC_CAPS (32, 0x000000ff, 0x0000ff00,
-            0x00ff0000) "; " RGB_24_32_STATIC_CAPS (24, 0x0000ff, 0x00ff00,
-            0xff0000) "; " GST_VIDEO_CAPS_RGB_15 "; " GST_VIDEO_CAPS_RGB_16)
-    );
-
-GST_DEBUG_CATEGORY_STATIC (xviddec_debug);
-#define GST_CAT_DEFAULT xviddec_debug
-
-static void gst_xviddec_base_init (GstXvidDecClass * klass);
-static void gst_xviddec_class_init (GstXvidDecClass * klass);
-static void gst_xviddec_init (GstXvidDec * dec);
-static void gst_xviddec_reset (GstXvidDec * dec);
-static gboolean gst_xviddec_handle_sink_event (GstPad * pad, GstEvent * event);
-static GstFlowReturn gst_xviddec_chain (GstPad * pad, GstBuffer * buf);
-static gboolean gst_xviddec_setcaps (GstPad * pad, GstCaps * caps);
-static void gst_xviddec_flush_buffers (GstXvidDec * dec, gboolean send);
-static GstStateChangeReturn gst_xviddec_change_state (GstElement * element,
-    GstStateChange transition);
-
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_xviddec_get_type (void)
-{
-  static GType xviddec_type = 0;
-
-  if (!xviddec_type) {
-    static const GTypeInfo xviddec_info = {
-      sizeof (GstXvidDecClass),
-      (GBaseInitFunc) gst_xviddec_base_init,
-      NULL,
-      (GClassInitFunc) gst_xviddec_class_init,
-      NULL,
-      NULL,
-      sizeof (GstXvidDec),
-      0,
-      (GInstanceInitFunc) gst_xviddec_init,
-    };
-
-    xviddec_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "GstXvidDec", &xviddec_info, 0);
-  }
-  return xviddec_type;
-}
-
-static void
-gst_xviddec_base_init (GstXvidDecClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_add_static_pad_template (element_class, &src_template);
-
-  gst_element_class_set_static_metadata (element_class, "XviD video decoder",
-      "Codec/Decoder/Video",
-      "XviD decoder based on xvidcore",
-      "Ronald Bultje <rbultje@ronald.bitfreak.net>");
-}
-
-static void
-gst_xviddec_class_init (GstXvidDecClass * klass)
-{
-  GstElementClass *gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  GST_DEBUG_CATEGORY_INIT (xviddec_debug, "xviddec", 0, "XviD decoder");
-
-  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_xviddec_change_state);
-}
-
-
-static void
-gst_xviddec_init (GstXvidDec * dec)
-{
-  /* create the sink pad */
-  dec->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-  gst_pad_set_chain_function (dec->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xviddec_chain));
-  gst_pad_set_setcaps_function (dec->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xviddec_setcaps));
-  gst_pad_set_event_function (dec->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xviddec_handle_sink_event));
-  gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
-
-  /* create the src pad */
-  dec->srcpad = gst_pad_new_from_static_template (&src_template, "src");
-  gst_pad_use_fixed_caps (dec->srcpad);
-  gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
-
-  gst_xviddec_reset (dec);
-}
-
-
-static void
-gst_xviddec_reset (GstXvidDec * dec)
-{
-  /* size, etc. */
-  dec->width = dec->height = dec->csp = -1;
-  dec->fps_n = dec->par_n = -1;
-  dec->fps_d = dec->par_d = 1;
-  dec->next_ts = dec->next_dur = GST_CLOCK_TIME_NONE;
-  dec->outbuf_size = 0;
-
-  /* set xvid handle to NULL */
-  dec->handle = NULL;
-
-  /* no delayed timestamp to start with */
-  dec->have_ts = FALSE;
-
-  /* need keyframe to get going */
-  dec->waiting_for_key = TRUE;
-}
-
-
-static void
-gst_xviddec_unset (GstXvidDec * dec)
-{
-  /* release XviD decoder */
-  xvid_decore (dec->handle, XVID_DEC_DESTROY, NULL, NULL);
-  dec->handle = NULL;
-}
-
-
-static gboolean
-gst_xviddec_handle_sink_event (GstPad * pad, GstEvent * event)
-{
-  GstXvidDec *dec = GST_XVIDDEC (GST_PAD_PARENT (pad));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_EOS:
-      gst_xviddec_flush_buffers (dec, TRUE);
-      break;
-    case GST_EVENT_FLUSH_STOP:
-      gst_xviddec_flush_buffers (dec, FALSE);
-      break;
-    case GST_EVENT_NEWSEGMENT:
-      /* don't really mind about the actual segment info,
-       * but we do need to recover from this possible jump */
-      /* FIXME, NEWSEGMENT is not a discontinuity. A decoder
-       * should clip the output to the segment boundaries.
-       * Also the rate field of the segment can be used to
-       * optimize the decoding, like skipping B frames when
-       * playing at double speed.
-       * The DISCONT flag on buffers should be used to detect
-       * discontinuities. 
-       */
-      dec->waiting_for_key = TRUE;
-      break;
-    default:
-      break;
-  }
-
-  return gst_pad_push_event (dec->srcpad, event);
-}
-
-
-static gboolean
-gst_xviddec_setup (GstXvidDec * dec)
-{
-  xvid_dec_create_t xdec;
-  gint ret;
-
-  /* initialise parameters, see xvid documentation */
-  gst_xvid_init_struct (xdec);
-  /* let the decoder handle this, don't trust the container */
-  xdec.width = 0;
-  xdec.height = 0;
-  xdec.handle = NULL;
-
-  GST_DEBUG_OBJECT (dec, "Initializing xvid decoder with parameters "
-      "%dx%d@%d", dec->width, dec->height, dec->csp);
-
-  if ((ret = xvid_decore (NULL, XVID_DEC_CREATE, &xdec, NULL)) < 0) {
-    GST_WARNING_OBJECT (dec, "Initializing xvid decoder failed: %s (%d)",
-        gst_xvid_error (ret), ret);
-    return FALSE;
-  }
-
-  dec->handle = xdec.handle;
-
-  return TRUE;
-}
-
-
-static void
-gst_xviddec_add_par (GstStructure * structure,
-    gint mux_par_n, gint mux_par_d, gint dec_par_n, gint dec_par_d)
-{
-  /* muxer wins if decoder has nothing interesting to offer */
-  if (dec_par_n == dec_par_d) {
-    gst_structure_set (structure, "pixel-aspect-ratio", GST_TYPE_FRACTION,
-        mux_par_n, mux_par_d, NULL);
-  } else {
-    gst_structure_set (structure, "pixel-aspect-ratio", GST_TYPE_FRACTION,
-        dec_par_n, dec_par_d, NULL);
-  }
-}
-
-
-/* based on the decoder info, if provided, and xviddec info,
-   construct a caps and send on to src pad */
-static gboolean
-gst_xviddec_negotiate (GstXvidDec * dec, xvid_dec_stats_t * xstats)
-{
-  gboolean ret;
-  gint par_width, par_height;
-  GstCaps *caps;
-
-  /* note: setcaps call with no xstats info,
-     so definitely need to negotiate then */
-  if (xstats && (xstats->type != XVID_TYPE_VOL
-          || (xstats->type == XVID_TYPE_VOL
-              && dec->width == xstats->data.vol.width
-              && dec->height == xstats->data.vol.height)))
-    return TRUE;
-
-  switch (xstats ? xstats->data.vol.par : XVID_PAR_11_VGA) {
-    case XVID_PAR_11_VGA:
-      par_width = par_height = 1;
-      break;
-    case XVID_PAR_43_PAL:
-    case XVID_PAR_43_NTSC:
-      par_width = 4;
-      par_height = 3;
-      break;
-    case XVID_PAR_169_PAL:
-    case XVID_PAR_169_NTSC:
-      par_width = 16;
-      par_height = 9;
-      break;
-    case XVID_PAR_EXT:
-    default:
-      par_width = xstats->data.vol.par_width;
-      par_height = xstats->data.vol.par_height;
-  }
-
-  caps = gst_xvid_csp_to_caps (dec->csp, dec->width, dec->height);
-
-  /* can only provide framerate if we received one */
-  if (dec->fps_n != -1) {
-    gst_structure_set (gst_caps_get_structure (caps, 0), "framerate",
-        GST_TYPE_FRACTION, dec->fps_n, dec->fps_d, NULL);
-  }
-
-  gst_xviddec_add_par (gst_caps_get_structure (caps, 0),
-      dec->par_n, dec->par_d, par_width, par_height);
-
-  GST_LOG ("setting caps on source pad: %" GST_PTR_FORMAT, caps);
-  ret = gst_pad_set_caps (dec->srcpad, caps);
-  gst_caps_unref (caps);
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_xviddec_chain (GstPad * pad, GstBuffer * buf)
-{
-  GstXvidDec *dec;
-  GstBuffer *outbuf = NULL;
-  xvid_dec_frame_t xframe;
-  xvid_dec_stats_t xstats;
-  gint ret;
-  guint8 *data, *dupe = NULL;
-  guint size;
-  GstFlowReturn fret;
-
-  dec = GST_XVIDDEC (GST_OBJECT_PARENT (pad));
-
-  if (!dec->handle)
-    goto not_negotiated;
-
-  fret = GST_FLOW_OK;
-
-  GST_LOG_OBJECT (dec, "Received buffer of time %" GST_TIME_FORMAT
-      " duration %" GST_TIME_FORMAT ", size %d",
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
-      GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_BUFFER_SIZE (buf));
-
-  if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT)) {
-    /* FIXME: should we do anything here, like flush the decoder? */
-  }
-
-  data = GST_BUFFER_DATA (buf);
-  size = GST_BUFFER_SIZE (buf);
-
-  /* xvidcore overreads the input buffer, we need to alloc some extra padding
-   * to make things work reliably */
-#define EXTRA_PADDING 16
-  if (EXTRA_PADDING > 0) {
-    dupe = g_malloc (size + EXTRA_PADDING);
-    memcpy (dupe, data, size);
-    memset (dupe + size, 0, EXTRA_PADDING);
-    data = dupe;
-  }
-
-  do {                          /* loop needed because xvidcore may return vol information */
-    /* decode and so ... */
-    gst_xvid_init_struct (xframe);
-    xframe.general = XVID_LOWDELAY;
-    xframe.bitstream = (void *) data;
-    xframe.length = size;
-
-    gst_xvid_init_struct (xstats);
-
-    if (outbuf == NULL) {
-      fret = gst_pad_alloc_buffer (dec->srcpad, GST_BUFFER_OFFSET_NONE,
-          dec->outbuf_size, GST_PAD_CAPS (dec->srcpad), &outbuf);
-      if (fret != GST_FLOW_OK)
-        goto done;
-    }
-
-    gst_xvid_image_fill (&xframe.output, GST_BUFFER_DATA (outbuf),
-        dec->csp, dec->width, dec->height);
-
-    ret = xvid_decore (dec->handle, XVID_DEC_DECODE, &xframe, &xstats);
-    if (ret < 0)
-      goto decode_error;
-
-    GST_LOG_OBJECT (dec, "xvid produced output, type %d, consumed %d",
-        xstats.type, ret);
-
-    if (xstats.type == XVID_TYPE_VOL)
-      gst_xviddec_negotiate (dec, &xstats);
-
-    data += ret;
-    size -= ret;
-  } while (xstats.type <= 0 && size > 0);
-
-  /* 1 byte is frequently left over */
-  if (size > 1) {
-    GST_WARNING_OBJECT (dec, "decoder did not consume all input");
-  }
-
-  /* FIXME, reflow the multiple return exit points */
-  if (xstats.type > 0) {        /* some real output was produced */
-    if (G_UNLIKELY (dec->waiting_for_key)) {
-      if (xstats.type != XVID_TYPE_IVOP)
-        goto dropping;
-
-      dec->waiting_for_key = FALSE;
-    }
-    /* bframes can cause a delay in frames being returned
-       non keyframe timestamps can permute a bit between
-       encode and display order, but should match for keyframes */
-    if (dec->have_ts) {
-      GST_BUFFER_TIMESTAMP (outbuf) = dec->next_ts;
-      GST_BUFFER_DURATION (outbuf) = dec->next_dur;
-      dec->next_ts = GST_BUFFER_TIMESTAMP (buf);
-      dec->next_dur = GST_BUFFER_DURATION (buf);
-    } else {
-      GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
-      GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
-    }
-    gst_buffer_set_caps (outbuf, GST_PAD_CAPS (dec->srcpad));
-    GST_LOG_OBJECT (dec, "pushing buffer with pts %" GST_TIME_FORMAT
-        " duration %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
-        GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)));
-    fret = gst_pad_push (dec->srcpad, outbuf);
-
-  } else {                      /* no real output yet, delay in frames being returned */
-    if (G_UNLIKELY (dec->have_ts)) {
-      GST_WARNING_OBJECT (dec,
-          "xvid decoder produced no output, but timestamp %" GST_TIME_FORMAT
-          " already queued", GST_TIME_ARGS (dec->next_ts));
-    } else {
-      dec->have_ts = TRUE;
-      dec->next_ts = GST_BUFFER_TIMESTAMP (buf);
-      dec->next_dur = GST_BUFFER_DURATION (buf);
-    }
-    gst_buffer_unref (outbuf);
-  }
-
-done:
-  g_free (dupe);
-  gst_buffer_unref (buf);
-
-  return fret;
-
-  /* ERRORS */
-not_negotiated:
-  {
-    GST_ELEMENT_ERROR (dec, CORE, NEGOTIATION, (NULL),
-        ("format wasn't negotiated before chain function"));
-    fret = GST_FLOW_NOT_NEGOTIATED;
-    goto done;
-  }
-decode_error:
-  {
-    /* FIXME: shouldn't error out fatally/properly after N decoding errors? */
-    GST_ELEMENT_WARNING (dec, STREAM, DECODE, (NULL),
-        ("Error decoding xvid frame: %s (%d)", gst_xvid_error (ret), ret));
-    if (outbuf)
-      gst_buffer_unref (outbuf);
-    goto done;
-  }
-dropping:
-  {
-    GST_WARNING_OBJECT (dec, "Dropping non-keyframe (seek/init)");
-    if (outbuf)
-      gst_buffer_unref (outbuf);
-    goto done;
-  }
-}
-
-
-/* flush xvid encoder buffers caused by bframe usage;
-   not well tested */
-static void
-gst_xviddec_flush_buffers (GstXvidDec * dec, gboolean send)
-{
-#if 0
-  gint ret;
-  GstBuffer *outbuf = NULL;
-  xvid_dec_frame_t xframe;
-  xvid_dec_stats_t xstats;
-#endif
-
-  GST_DEBUG_OBJECT (dec, "flushing buffers with send %d, have_ts %d",
-      send, dec->have_ts);
-
-  /* no need to flush if there is no delayed time-stamp */
-  if (!dec->have_ts)
-    return;
-
-  /* flushing must reset the timestamp keeping */
-  dec->have_ts = FALSE;
-
-  /* also no need to flush if no handle */
-  if (!dec->handle)
-    return;
-
-  /* unlike encoder, decoder does not seem to like flushing, disable for now */
-#if 0
-  gst_xvid_init_struct (xframe);
-  gst_xvid_init_struct (xstats);
-
-  /* init a fake frame to force flushing */
-  xframe.bitstream = NULL;
-  xframe.length = -1;
-
-  ret = gst_xviddec_decode (dec, xframe, &outbuf, &xstats);
-  GST_DEBUG_OBJECT (dec, "received frame when flushing, type %d, size %d",
-      xstats.type, ret);
-
-  if (ret > 0 && send) {
-    /* we have some valid return frame, give it the delayed timestamp and send */
-    GST_BUFFER_TIMESTAMP (outbuf) = dec->next_ts;
-    GST_BUFFER_DURATION (outbuf) = dec->next_dur;
-
-    gst_buffer_set_caps (outbuf, GST_PAD_CAPS (dec->srcpad));
-    gst_pad_push (dec->srcpad, outbuf);
-    return;
-  }
-
-  if (outbuf)
-    gst_buffer_unref (outbuf);
-#else
-  return;
-#endif
-}
-
-#if 0
-static GstCaps *
-gst_xviddec_src_getcaps (GstPad * pad)
-{
-  GstXvidDec *dec = GST_XVIDDEC (GST_PAD_PARENT (pad));
-  GstCaps *caps;
-  gint csp[] = {
-    XVID_CSP_I420,
-    XVID_CSP_YV12,
-    XVID_CSP_YUY2,
-    XVID_CSP_UYVY,
-    XVID_CSP_YVYU,
-    XVID_CSP_BGRA,
-    XVID_CSP_ABGR,
-    XVID_CSP_RGBA,
-#ifdef XVID_CSP_ARGB
-    XVID_CSP_ARGB,
-#endif
-    XVID_CSP_BGR,
-    XVID_CSP_RGB555,
-    XVID_CSP_RGB565,
-    0
-  }, i;
-
-  if (!GST_PAD_CAPS (dec->sinkpad)) {
-    GstPadTemplate *templ = gst_static_pad_template_get (&src_template);
-
-    return gst_caps_copy (gst_pad_template_get_caps (templ));
-  }
-
-  caps = gst_caps_new_empty ();
-  for (i = 0; csp[i] != 0; i++) {
-    GstCaps *one = gst_xvid_csp_to_caps (csp[i], dec->width,
-        dec->height, dec->fps, dec->par);
-
-    gst_caps_append (caps, one);
-  }
-
-  return caps;
-}
-#endif
-
-static gboolean
-gst_xviddec_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstXvidDec *dec = GST_XVIDDEC (GST_PAD_PARENT (pad));
-  GstStructure *structure;
-  GstCaps *allowed_caps;
-  const GValue *val;
-
-  GST_LOG_OBJECT (dec, "caps %" GST_PTR_FORMAT, caps);
-
-  /* if there's something old around, remove it */
-  if (dec->handle) {
-    gst_xviddec_unset (dec);
-  }
-
-  structure = gst_caps_get_structure (caps, 0);
-  gst_structure_get_int (structure, "width", &dec->width);
-  gst_structure_get_int (structure, "height", &dec->height);
-
-  /* perhaps some fps info */
-  val = gst_structure_get_value (structure, "framerate");
-  if ((val != NULL) && GST_VALUE_HOLDS_FRACTION (val)) {
-    dec->fps_n = gst_value_get_fraction_numerator (val);
-    dec->fps_d = gst_value_get_fraction_denominator (val);
-  } else {
-    dec->fps_n = -1;
-    dec->fps_d = 1;
-  }
-
-  /* perhaps some par info */
-  val = gst_structure_get_value (structure, "pixel-aspect-ratio");
-  if (val != NULL && GST_VALUE_HOLDS_FRACTION (val)) {
-    dec->par_n = gst_value_get_fraction_numerator (val);
-    dec->par_d = gst_value_get_fraction_denominator (val);
-  } else {
-    dec->par_n = 1;
-    dec->par_d = 1;
-  }
-
-  /* we try to find the preferred/accept csp */
-  allowed_caps = gst_pad_get_allowed_caps (dec->srcpad);
-  if (!allowed_caps) {
-    GST_DEBUG_OBJECT (dec, "... but no peer, using template caps");
-    /* need to copy because get_allowed_caps returns a ref,
-       and get_pad_template_caps doesn't */
-    allowed_caps = gst_caps_copy (gst_pad_get_pad_template_caps (dec->srcpad));
-  }
-  GST_LOG_OBJECT (dec, "allowed source caps %" GST_PTR_FORMAT, allowed_caps);
-
-  /* pick the first one ... */
-  structure = gst_caps_get_structure (allowed_caps, 0);
-  val = gst_structure_get_value (structure, "format");
-  if (val != NULL && G_VALUE_TYPE (val) == GST_TYPE_LIST) {
-    GValue temp = { 0, };
-    gst_value_init_and_copy (&temp, gst_value_list_get_value (val, 0));
-    gst_structure_set_value (structure, "format", &temp);
-    g_value_unset (&temp);
-  }
-
-  /* ... and use its info to get the csp */
-  dec->csp = gst_xvid_structure_to_csp (structure);
-  if (dec->csp == -1) {
-    GST_WARNING_OBJECT (dec, "failed to decide on colorspace, using I420");
-    dec->csp = XVID_CSP_I420;
-  }
-
-  dec->outbuf_size =
-      gst_xvid_image_get_size (dec->csp, dec->width, dec->height);
-
-  GST_LOG_OBJECT (dec, "csp=%d, outbuf_size=%d", dec->csp, dec->outbuf_size);
-
-  gst_caps_unref (allowed_caps);
-
-  /* now set up xvid ... */
-  if (!gst_xviddec_setup (dec)) {
-    GST_ELEMENT_ERROR (GST_ELEMENT (dec), LIBRARY, INIT, (NULL), (NULL));
-    return FALSE;
-  }
-
-  return gst_xviddec_negotiate (dec, NULL);
-}
-
-static GstStateChangeReturn
-gst_xviddec_change_state (GstElement * element, GstStateChange transition)
-{
-  GstXvidDec *dec = GST_XVIDDEC (element);
-  GstStateChangeReturn ret;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!gst_xvid_init ())
-        return GST_STATE_CHANGE_FAILURE;
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  if (ret == GST_STATE_CHANGE_FAILURE)
-    goto done;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_xviddec_flush_buffers (dec, FALSE);
-      if (dec->handle) {
-        gst_xviddec_unset (dec);
-      }
-      gst_xviddec_reset (dec);
-      break;
-    default:
-      break;
-  }
-
-done:
-  return ret;
-}
diff --git a/ext/xvid/gstxviddec.h b/ext/xvid/gstxviddec.h
deleted file mode 100644 (file)
index ac3f0eb..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/* GStreamer xvid decoder plugin
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_XVIDDEC_H__
-#define __GST_XVIDDEC_H__
-
-#include <gst/gst.h>
-#include "gstxvid.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_XVIDDEC \
-  (gst_xviddec_get_type())
-#define GST_XVIDDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XVIDDEC, GstXvidDec))
-#define GST_XVIDDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XVIDDEC, GstXvidDecClass))
-#define GST_IS_XVIDDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XVIDDEC))
-#define GST_IS_XVIDDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XVIDDEC))
-
-typedef struct _GstXvidDec GstXvidDec;
-typedef struct _GstXvidDecClass GstXvidDecClass;
-
-struct _GstXvidDec {
-  GstElement element;
-
-  /* pads */
-  GstPad *sinkpad, *srcpad;
-
-  /* xvid handle */
-  void *handle;
-
-  /* video (output) settings */
-  gint csp;
-  gint width, height;
-  gint fps_n, fps_d, par_n, par_d;
-  gint outbuf_size;
-
-  /* whether in need for keyframe */
-  gboolean waiting_for_key;
-
-  /* retain some info on delayed frame */
-  gboolean have_ts;
-  GstClockTime next_ts, next_dur;
-};
-
-struct _GstXvidDecClass {
-  GstElementClass parent_class;
-};
-
-GType gst_xviddec_get_type(void);
-
-G_END_DECLS
-
-#endif /* __GST_XVIDDEC_H__ */
diff --git a/ext/xvid/gstxvidenc.c b/ext/xvid/gstxvidenc.c
deleted file mode 100644 (file)
index edf89b7..0000000
+++ /dev/null
@@ -1,1403 +0,0 @@
-/* GStreamer xvid encoder plugin
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *           (C) 2006 Mark Nauwelaerts <manauw@skynet.be>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* based on:
- * - the original xvidenc (by Ronald Bultje)
- * - transcode/mplayer's xvid encoder (by Edouard Gomez)
- *
- * TODO some documentation (e.g. on properties)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include <xvid.h>
-
-#include <gst/video/video.h>
-#include "gstxvidenc.h"
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ I420, YUY2, YV12, YVYU, UYVY }")
-        "; " RGB_24_32_STATIC_CAPS (32, 0x00ff0000, 0x0000ff00,
-            0x000000ff) "; " RGB_24_32_STATIC_CAPS (32, 0xff000000, 0x00ff0000,
-            0x0000ff00) "; " RGB_24_32_STATIC_CAPS (32, 0x0000ff00, 0x00ff0000,
-            0xff000000) "; " RGB_24_32_STATIC_CAPS (32, 0x000000ff, 0x0000ff00,
-            0x00ff0000) "; " RGB_24_32_STATIC_CAPS (24, 0x0000ff, 0x00ff00,
-            0xff0000) "; " GST_VIDEO_CAPS_RGB_15 "; " GST_VIDEO_CAPS_RGB_16)
-    );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/mpeg, "
-        "mpegversion = (int) 4, "
-        "systemstream = (boolean) FALSE, "
-        "width = (int) [ 0, MAX ], "
-        "height = (int) [ 0, MAX ], "
-        "framerate = (fraction) [ 0/1, MAX ], "
-        "profile = (string) simple, "
-        "level = (string) { 0, 1, 2, 3, 4a, 5, 6 };"
-        "video/mpeg, "
-        "mpegversion = (int) 4, "
-        "systemstream = (boolean) FALSE, "
-        "width = (int) [ 0, MAX ], "
-        "height = (int) [ 0, MAX ], "
-        "framerate = (fraction) [ 0/1, MAX ], "
-        "profile = (string) advanced-real-time-simple, "
-        "level = (string) { 1, 2, 3, 4 };"
-        "video/mpeg, "
-        "mpegversion = (int) 4, "
-        "systemstream = (boolean) FALSE, "
-        "width = (int) [ 0, MAX ], "
-        "height = (int) [ 0, MAX ], "
-        "framerate = (fraction) [ 0/1, MAX ], "
-        "profile = (string) advanced-simple, "
-        "level = (string) { 0, 1, 2, 3, 4 };"
-        "video/mpeg, "
-        "mpegversion = (int) 4, "
-        "systemstream = (boolean) FALSE, "
-        "width = (int) [ 0, MAX ], " "height = (int) [ 0, MAX ]; "
-        "video/x-xvid, "
-        "width = (int) [ 0, MAX ], "
-        "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ];")
-    );
-
-
-/* XvidEnc properties */
-
-/* maximum property-id */
-static int xvidenc_prop_count;
-
-/* quark used for named pointer on param specs */
-static GQuark xvidenc_pspec_quark;
-
-GST_DEBUG_CATEGORY_STATIC (xvidenc_debug);
-#define GST_CAT_DEFAULT xvidenc_debug
-
-static void gst_xvidenc_base_init (GstXvidEncClass * klass);
-static void gst_xvidenc_class_init (GstXvidEncClass * klass);
-static void gst_xvidenc_init (GstXvidEnc * xvidenc);
-static void gst_xvidenc_finalize (GObject * object);
-static GstFlowReturn gst_xvidenc_chain (GstPad * pad, GstBuffer * data);
-static gboolean gst_xvidenc_setcaps (GstPad * pad, GstCaps * vscapslist);
-static GstCaps *gst_xvidenc_getcaps (GstPad * pad);
-static void gst_xvidenc_flush_buffers (GstXvidEnc * xvidenc, gboolean send);
-static gboolean gst_xvidenc_handle_sink_event (GstPad * pad, GstEvent * event);
-
-/* properties */
-static void gst_xvidenc_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_xvidenc_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-static GstStateChangeReturn gst_xvidenc_change_state (GstElement * element,
-    GstStateChange transition);
-
-static GstElementClass *parent_class = NULL;
-
-#define GST_TYPE_XVIDENC_PROFILE (gst_xvidenc_profile_get_type ())
-static GType
-gst_xvidenc_profile_get_type (void)
-{
-  static GType xvidenc_profile_type = 0;
-
-  if (!xvidenc_profile_type) {
-    static const GEnumValue xvidenc_profiles[] = {
-      {0, "UNP", "Unrestricted profile"},
-      {XVID_PROFILE_S_L0, "S_L0", "Simple profile, L0"},
-      {XVID_PROFILE_S_L1, "S_L1", "Simple profile, L1"},
-      {XVID_PROFILE_S_L2, "S_L2", "Simple profile, L2"},
-      {XVID_PROFILE_S_L3, "S_L3", "Simple profile, L3"},
-      {XVID_PROFILE_S_L4a, "S_L4a", "Simple profile, L4a"},
-      {XVID_PROFILE_S_L5, "S_L5", "Simple profile, L5"},
-      {XVID_PROFILE_S_L6, "S_L6", "Simple profile, L6"},
-      {XVID_PROFILE_ARTS_L1, "ARTS_L1",
-          "Advanced real-time simple profile, L1"},
-      {XVID_PROFILE_ARTS_L2, "ARTS_L2",
-          "Advanced real-time simple profile, L2"},
-      {XVID_PROFILE_ARTS_L3, "ARTS_L3",
-          "Advanced real-time simple profile, L3"},
-      {XVID_PROFILE_ARTS_L4, "ARTS_L4",
-          "Advanced real-time simple profile, L4"},
-      {XVID_PROFILE_AS_L0, "AS_L0", "Advanced simple profile, L0"},
-      {XVID_PROFILE_AS_L1, "AS_L1", "Advanced simple profile, L1"},
-      {XVID_PROFILE_AS_L2, "AS_L2", "Advanced simple profile, L2"},
-      {XVID_PROFILE_AS_L3, "AS_L3", "Advanced simple profile, L3"},
-      {XVID_PROFILE_AS_L4, "AS_L4", "Advanced simple profile, L4"},
-      {0, NULL, NULL},
-    };
-
-    xvidenc_profile_type =
-        g_enum_register_static ("GstXvidEncProfiles", xvidenc_profiles);
-  }
-
-  return xvidenc_profile_type;
-}
-
-#define GST_TYPE_XVIDENC_QUANT_TYPE (gst_xvidenc_quant_type_get_type ())
-static GType
-gst_xvidenc_quant_type_get_type (void)
-{
-  static GType xvidenc_quant_type_type = 0;
-
-  if (!xvidenc_quant_type_type) {
-    static const GEnumValue xvidenc_quant_types[] = {
-      {0, "H263 quantization", "h263"},
-      {XVID_VOL_MPEGQUANT, "MPEG quantization", "mpeg"},
-      {0, NULL, NULL},
-    };
-
-    xvidenc_quant_type_type =
-        g_enum_register_static ("GstXvidEncQuantTypes", xvidenc_quant_types);
-  }
-
-  return xvidenc_quant_type_type;
-}
-
-
-enum
-{
-  XVIDENC_CBR,
-  XVIDENC_VBR_PASS1,
-  XVIDENC_VBR_PASS2,
-  XVIDENC_QUANT
-};
-
-#define GST_TYPE_XVIDENC_PASS (gst_xvidenc_pass_get_type ())
-static GType
-gst_xvidenc_pass_get_type (void)
-{
-  static GType xvidenc_pass_type = 0;
-
-  if (!xvidenc_pass_type) {
-    static const GEnumValue xvidenc_passes[] = {
-      {XVIDENC_CBR, "Constant Bitrate Encoding", "cbr"},
-      {XVIDENC_QUANT, "Constant Quantizer", "quant"},
-      {XVIDENC_VBR_PASS1, "VBR Encoding - Pass 1", "pass1"},
-      {XVIDENC_VBR_PASS2, "VBR Encoding - Pass 2", "pass2"},
-      {0, NULL, NULL},
-    };
-
-    xvidenc_pass_type =
-        g_enum_register_static ("GstXvidEncPasses", xvidenc_passes);
-  }
-
-  return xvidenc_pass_type;
-}
-
-
-GType
-gst_xvidenc_get_type (void)
-{
-  static GType xvidenc_type = 0;
-
-  if (!xvidenc_type) {
-    static const GTypeInfo xvidenc_info = {
-      sizeof (GstXvidEncClass),
-      (GBaseInitFunc) gst_xvidenc_base_init,
-      NULL,
-      (GClassInitFunc) gst_xvidenc_class_init,
-      NULL,
-      NULL,
-      sizeof (GstXvidEnc),
-      0,
-      (GInstanceInitFunc) gst_xvidenc_init,
-    };
-    const GInterfaceInfo preset_interface_info = {
-      NULL,                     /* interface_init */
-      NULL,                     /* interface_finalize */
-      NULL                      /* interface_data */
-    };
-
-    xvidenc_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "GstXvidEnc", &xvidenc_info, 0);
-
-    g_type_add_interface_static (xvidenc_type, GST_TYPE_PRESET,
-        &preset_interface_info);
-  }
-  return xvidenc_type;
-}
-
-static void
-gst_xvidenc_base_init (GstXvidEncClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_add_static_pad_template (element_class, &src_template);
-  gst_element_class_set_static_metadata (element_class, "XviD video encoder",
-      "Codec/Encoder/Video",
-      "XviD encoder based on xvidcore",
-      "Ronald Bultje <rbultje@ronald.bitfreak.net>");
-}
-
-/* add property pspec to klass using the counter count,
- * and place info based on struct_type and member as a named pointer
- * specified by quark */
-#define gst_xvidenc_add_pspec_full(klass, pspec, count, quark,          \
-    struct_type, member)                                                \
-G_STMT_START {                                                          \
-  guint _offset = G_STRUCT_OFFSET (struct_type, member);                \
-  g_param_spec_set_qdata (pspec, quark,                                 \
-      GUINT_TO_POINTER (_offset));                                      \
-  g_object_class_install_property (klass, ++count, pspec);              \
-} G_STMT_END
-
-#define gst_xvidenc_add_pspec(klass, pspec, member)                     \
-  gst_xvidenc_add_pspec_full (klass, pspec, xvidenc_prop_count,         \
-      xvidenc_pspec_quark, GstXvidEnc, member)
-
-/* using the above system, property maintenance is centralized here
- * (_get_property, _set_property and setting of default value in _init)
- * follow automatically, it only remains to actually use it in the code
- * (which may include free-ing in finalize) */
-
-static void
-gst_xvidenc_class_init (GstXvidEncClass * klass)
-{
-  GstElementClass *gstelement_class;
-  GObjectClass *gobject_class;
-  GParamSpec *pspec;
-
-  gobject_class = G_OBJECT_CLASS (klass);
-  gstelement_class = GST_ELEMENT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  GST_DEBUG_CATEGORY_INIT (xvidenc_debug, "xvidenc", 0, "XviD encoder");
-
-  gobject_class->finalize = gst_xvidenc_finalize;
-
-  gobject_class->set_property = gst_xvidenc_set_property;
-  gobject_class->get_property = gst_xvidenc_get_property;
-
-  /* prop handling */
-  xvidenc_prop_count = 0;
-  xvidenc_pspec_quark = g_quark_from_static_string ("xvid-enc-param-spec-data");
-
-  pspec = g_param_spec_enum ("profile", "Profile",
-      "XviD/MPEG-4 encoding profile",
-      GST_TYPE_XVIDENC_PROFILE, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, profile);
-
-  pspec = g_param_spec_enum ("quant-type", "Quantizer Type",
-      "Quantizer type", GST_TYPE_XVIDENC_QUANT_TYPE, 0,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, quant_type);
-
-  pspec = g_param_spec_enum ("pass", "Encoding pass/type",
-      "Encoding pass/type",
-      GST_TYPE_XVIDENC_PASS, XVIDENC_CBR,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, pass);
-
-  pspec = g_param_spec_int ("bitrate", "Bitrate",
-      "[CBR|PASS2] Target video bitrate (bps)",
-      0, G_MAXINT, 1800000, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, bitrate);
-
-  pspec = g_param_spec_int ("quantizer", "Quantizer",
-      "[QUANT] Quantizer to apply for constant quantizer mode",
-      2, 31, 2, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, quant);
-
-  pspec = g_param_spec_string ("statsfile", "Statistics Filename",
-      "[PASS1|PASS2] Filename to store data for 2-pass encoding",
-      "xvid-stats.log", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, filename);
-
-  pspec = g_param_spec_int ("max-key-interval", "Max. Key Interval",
-      "Maximum number of frames between two keyframes (< 0 is in sec)",
-      -100, G_MAXINT, -10, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, max_key_interval);
-
-  pspec = g_param_spec_boolean ("closed-gop", "Closed GOP",
-      "Closed GOP", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, closed_gop);
-
-  pspec = g_param_spec_int ("motion", "ME Quality",
-      "Quality of Motion Estimation", 0, 6, 6,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, motion);
-
-  pspec = g_param_spec_boolean ("me-chroma", "ME Chroma",
-      "Enable use of Chroma planes for Motion Estimation",
-      TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, me_chroma);
-
-  pspec = g_param_spec_int ("me-vhq", "ME DCT/Frequency",
-      "Extent in which to use DCT to minimize encoding length",
-      0, 4, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, me_vhq);
-
-  pspec = g_param_spec_boolean ("me-quarterpel", "ME Quarterpel",
-      "Use quarter pixel precision for motion vector search",
-      FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, me_quarterpel);
-
-  pspec = g_param_spec_boolean ("lumimasking", "Lumimasking",
-      "Enable lumimasking - apply more compression to dark or bright areas",
-      FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, lumimasking);
-
-  pspec = g_param_spec_int ("max-bframes", "Max B-Frames",
-      "Maximum B-frames in a row", 0, G_MAXINT, 1,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, max_bframes);
-
-  pspec = g_param_spec_int ("bquant-ratio", "B-quantizer ratio",
-      "Ratio in B-frame quantizer computation", 0, 200, 150,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, bquant_ratio);
-
-  pspec = g_param_spec_int ("bquant-offset", "B-quantizer offset",
-      "Offset in B-frame quantizer computation",
-      0, 200, 100, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, bquant_offset);
-
-  pspec = g_param_spec_int ("bframe-threshold", "B-Frame Threshold",
-      "Higher threshold yields more chance that B-frame is used",
-      -255, 255, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, bframe_threshold);
-
-  pspec = g_param_spec_boolean ("gmc", "Global Motion Compensation",
-      "Allow generation of Sprite Frames for Pan/Zoom/Rotating images",
-      FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, gmc);
-
-  pspec = g_param_spec_boolean ("trellis", "Trellis Quantization",
-      "Enable Trellis Quantization", FALSE,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, trellis);
-
-  pspec = g_param_spec_boolean ("interlaced", "Interlaced Material",
-      "Enable for interlaced video material", FALSE,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, interlaced);
-
-  pspec = g_param_spec_boolean ("cartoon", "Cartoon Material",
-      "Adjust thresholds for flat looking cartoons", FALSE,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, cartoon);
-
-  pspec = g_param_spec_boolean ("greyscale", "Disable Chroma",
-      "Do not write chroma data in encoded video", FALSE,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, greyscale);
-
-  pspec = g_param_spec_boolean ("hqacpred", "High quality AC prediction",
-      "Enable high quality AC prediction", TRUE,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, hqacpred);
-
-  pspec = g_param_spec_int ("max-iquant", "Max Quant I-Frames",
-      "Upper bound for I-frame quantization", 0, 31, 31,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, max_iquant);
-
-  pspec = g_param_spec_int ("min-iquant", "Min Quant I-Frames",
-      "Lower bound for I-frame quantization", 0, 31, 2,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, min_iquant);
-
-  pspec = g_param_spec_int ("max-pquant", "Max Quant P-Frames",
-      "Upper bound for P-frame quantization", 0, 31, 31,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, max_pquant);
-
-  pspec = g_param_spec_int ("min-pquant", "Min Quant P-Frames",
-      "Lower bound for P-frame quantization", 0, 31, 2,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, min_pquant);
-
-  pspec = g_param_spec_int ("max-bquant", "Max Quant B-Frames",
-      "Upper bound for B-frame quantization", 0, 31, 31,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, max_bquant);
-
-  pspec = g_param_spec_int ("min-bquant", "Min Quant B-Frames",
-      "Lower bound for B-frame quantization", 0, 31, 2,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, min_bquant);
-
-  pspec = g_param_spec_int ("reaction-delay-factor", "Reaction Delay Factor",
-      "[CBR] Reaction delay factor", -1, 100, -1,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, reaction_delay_factor);
-
-  pspec = g_param_spec_int ("averaging-period", "Averaging Period",
-      "[CBR] Number of frames for which XviD averages bitrate",
-      -1, 100, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, averaging_period);
-
-  pspec = g_param_spec_int ("buffer", "Buffer Size",
-      "[CBR] Size of the video buffers", -1, G_MAXINT, -1,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, buffer);
-
-  pspec = g_param_spec_int ("keyframe-boost", "Keyframe boost",
-      "[PASS2] Bitrate boost for keyframes", 0, 100, 0,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, keyframe_boost);
-
-  pspec = g_param_spec_int ("curve-compression-high", "Curve Compression High",
-      "[PASS2] Shrink factor for upper part of bitrate curve",
-      0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, curve_compression_high);
-
-  pspec = g_param_spec_int ("curve-compression-low", "Curve Compression Low",
-      "[PASS2] Growing factor for lower part of bitrate curve",
-      0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, curve_compression_low);
-
-  pspec = g_param_spec_int ("flow-control-strength", "Flow Control Strength",
-      "[PASS2] Overflow control strength per frame",
-      -1, 100, 5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, overflow_control_strength);
-
-  pspec =
-      g_param_spec_int ("max-overflow-improvement", "Max Overflow Improvement",
-      "[PASS2] Amount in % that flow control can increase frame size compared to ideal curve",
-      -1, 100, 5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, max_overflow_improvement);
-
-  pspec =
-      g_param_spec_int ("max-overflow-degradation", "Max Overflow Degradation",
-      "[PASS2] Amount in % that flow control can decrease frame size compared to ideal curve",
-      -1, 100, 5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, max_overflow_degradation);
-
-  pspec = g_param_spec_int ("keyframe-reduction", "Keyframe Reduction",
-      "[PASS2] Keyframe size reduction in % of those within threshold",
-      -1, 100, 20, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, kfreduction);
-
-  pspec = g_param_spec_int ("keyframe-threshold", "Keyframe Threshold",
-      "[PASS2] Distance between keyframes not to be subject to reduction",
-      -1, 100, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, kfthreshold);
-
-  pspec =
-      g_param_spec_int ("container-frame-overhead", "Container Frame Overhead",
-      "[PASS2] Average container overhead per frame", -1, 100, -1,
-      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-  gst_xvidenc_add_pspec (gobject_class, pspec, container_frame_overhead);
-
-  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_xvidenc_change_state);
-}
-
-
-static void
-gst_xvidenc_init (GstXvidEnc * xvidenc)
-{
-  GParamSpec **pspecs;
-  guint i, num_props;
-
-  /* create the sink pad */
-  xvidenc->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-  gst_element_add_pad (GST_ELEMENT (xvidenc), xvidenc->sinkpad);
-
-  gst_pad_set_chain_function (xvidenc->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xvidenc_chain));
-  gst_pad_set_setcaps_function (xvidenc->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xvidenc_setcaps));
-  gst_pad_set_getcaps_function (xvidenc->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xvidenc_getcaps));
-  gst_pad_set_event_function (xvidenc->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xvidenc_handle_sink_event));
-
-  /* create the src pad */
-  xvidenc->srcpad = gst_pad_new_from_static_template (&src_template, "src");
-  gst_element_add_pad (GST_ELEMENT (xvidenc), xvidenc->srcpad);
-  gst_pad_use_fixed_caps (xvidenc->srcpad);
-
-  /* init properties. */
-  xvidenc->width = xvidenc->height = xvidenc->csp = -1;
-  xvidenc->par_width = xvidenc->par_height = 1;
-
-  /* set defaults for user properties */
-  pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (xvidenc),
-      &num_props);
-
-  for (i = 0; i < num_props; ++i) {
-    GValue val = { 0, };
-    GParamSpec *pspec = pspecs[i];
-
-    /* only touch those that are really ours; i.e. should have some qdata */
-    if (!g_param_spec_get_qdata (pspec, xvidenc_pspec_quark))
-      continue;
-    g_value_init (&val, G_PARAM_SPEC_VALUE_TYPE (pspec));
-    g_param_value_set_default (pspec, &val);
-    g_object_set_property (G_OBJECT (xvidenc), g_param_spec_get_name (pspec),
-        &val);
-    g_value_unset (&val);
-  }
-
-  g_free (pspecs);
-
-  /* set xvid handle to NULL */
-  xvidenc->handle = NULL;
-
-  /* get a queue to keep time info if frames get delayed */
-  xvidenc->delay = NULL;
-
-  /* cache some xvid data so need not rebuild for each frame */
-  xvidenc->xframe_cache = NULL;
-}
-
-
-static void
-gst_xvidenc_finalize (GObject * object)
-{
-
-  GstXvidEnc *xvidenc = GST_XVIDENC (object);
-
-  g_free (xvidenc->filename);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gboolean
-gst_xvidenc_handle_sink_event (GstPad * pad, GstEvent * event)
-{
-  GstXvidEnc *xvidenc = GST_XVIDENC (GST_PAD_PARENT (pad));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_EOS:
-      gst_xvidenc_flush_buffers (xvidenc, TRUE);
-      break;
-      /* no flushing if flush received,
-         buffers in encoder are considered (in the) past */
-    default:
-      break;
-  }
-
-  return gst_pad_push_event (xvidenc->srcpad, event);
-}
-
-static gboolean
-gst_xvidenc_setup (GstXvidEnc * xvidenc)
-{
-  xvid_enc_create_t xenc;
-  xvid_enc_plugin_t xplugin[2];
-  gint ret;
-  GstCaps *allowed_caps;
-  gint profile = -1;
-
-  /* Negotiate profile/level with downstream */
-  allowed_caps = gst_pad_get_allowed_caps (xvidenc->srcpad);
-  if (allowed_caps && !gst_caps_is_empty (allowed_caps)) {
-    const gchar *profile_str, *level_str;
-
-    allowed_caps = gst_caps_make_writable (allowed_caps);
-    gst_caps_truncate (allowed_caps);
-
-    profile_str =
-        gst_structure_get_string (gst_caps_get_structure (allowed_caps, 0),
-        "profile");
-    level_str =
-        gst_structure_get_string (gst_caps_get_structure (allowed_caps, 0),
-        "level");
-    if (profile_str) {
-      if (g_str_equal (profile_str, "simple")) {
-        if (!level_str) {
-          profile = XVID_PROFILE_S_L0;
-        } else if (g_str_equal (level_str, "0")) {
-          profile = XVID_PROFILE_S_L0;
-        } else if (g_str_equal (level_str, "1")) {
-          profile = XVID_PROFILE_S_L1;
-        } else if (g_str_equal (level_str, "2")) {
-          profile = XVID_PROFILE_S_L2;
-        } else if (g_str_equal (level_str, "3")) {
-          profile = XVID_PROFILE_S_L3;
-        } else if (g_str_equal (level_str, "4a")) {
-          profile = XVID_PROFILE_S_L4a;
-        } else if (g_str_equal (level_str, "5")) {
-          profile = XVID_PROFILE_S_L5;
-        } else if (g_str_equal (level_str, "6")) {
-          profile = XVID_PROFILE_S_L6;
-        } else {
-          GST_ERROR_OBJECT (xvidenc,
-              "Invalid profile/level combination (%s %s)", profile_str,
-              level_str);
-        }
-      } else if (g_str_equal (profile_str, "advanced-real-time-simple")) {
-        if (!level_str) {
-          profile = XVID_PROFILE_ARTS_L1;
-        } else if (g_str_equal (level_str, "1")) {
-          profile = XVID_PROFILE_ARTS_L1;
-        } else if (g_str_equal (level_str, "2")) {
-          profile = XVID_PROFILE_ARTS_L2;
-        } else if (g_str_equal (level_str, "3")) {
-          profile = XVID_PROFILE_ARTS_L3;
-        } else if (g_str_equal (level_str, "4")) {
-          profile = XVID_PROFILE_ARTS_L4;
-        } else {
-          GST_ERROR_OBJECT (xvidenc,
-              "Invalid profile/level combination (%s %s)", profile_str,
-              level_str);
-        }
-      } else if (g_str_equal (profile_str, "advanced-simple")) {
-        if (!level_str) {
-          profile = XVID_PROFILE_AS_L0;
-        } else if (g_str_equal (level_str, "0")) {
-          profile = XVID_PROFILE_AS_L0;
-        } else if (g_str_equal (level_str, "1")) {
-          profile = XVID_PROFILE_AS_L1;
-        } else if (g_str_equal (level_str, "2")) {
-          profile = XVID_PROFILE_AS_L2;
-        } else if (g_str_equal (level_str, "3")) {
-          profile = XVID_PROFILE_AS_L3;
-        } else if (g_str_equal (level_str, "4")) {
-          profile = XVID_PROFILE_AS_L4;
-        } else {
-          GST_ERROR_OBJECT (xvidenc,
-              "Invalid profile/level combination (%s %s)", profile_str,
-              level_str);
-        }
-      } else {
-        GST_ERROR_OBJECT (xvidenc, "Invalid profile (%s)", profile_str);
-      }
-    }
-  }
-  if (allowed_caps)
-    gst_caps_unref (allowed_caps);
-
-  if (profile != -1) {
-    xvidenc->profile = profile;
-    g_object_notify (G_OBJECT (xvidenc), "profile");
-  }
-
-  /* see xvid.h for the meaning of all this. */
-  gst_xvid_init_struct (xenc);
-
-  xenc.profile = xvidenc->used_profile = xvidenc->profile;
-  xenc.width = xvidenc->width;
-  xenc.height = xvidenc->height;
-  xenc.max_bframes = xvidenc->max_bframes;
-  xenc.global = XVID_GLOBAL_PACKED
-      | (xvidenc->closed_gop ? XVID_GLOBAL_CLOSED_GOP : 0);
-
-  xenc.bquant_ratio = xvidenc->bquant_ratio;
-  xenc.bquant_offset = xvidenc->bquant_offset;
-
-  xenc.fbase = xvidenc->fbase;
-  xenc.fincr = xvidenc->fincr;
-  xenc.max_key_interval = (xvidenc->max_key_interval < 0) ?
-      (-xvidenc->max_key_interval * xenc.fbase /
-      xenc.fincr) : xvidenc->max_key_interval;
-  xenc.handle = NULL;
-
-  /* quantizer ranges */
-  xenc.min_quant[0] = xvidenc->min_iquant;
-  xenc.min_quant[1] = xvidenc->min_pquant;
-  xenc.min_quant[2] = xvidenc->min_bquant;
-  xenc.max_quant[0] = xvidenc->max_iquant;
-  xenc.max_quant[1] = xvidenc->max_pquant;
-  xenc.max_quant[2] = xvidenc->max_bquant;
-
-  /* cbr, vbr or constant quantizer */
-  xenc.num_plugins = 1;
-  xenc.plugins = xplugin;
-  switch (xvidenc->pass) {
-    case XVIDENC_CBR:
-    case XVIDENC_QUANT:
-    {
-      xvid_plugin_single_t xsingle;
-      xvid_enc_zone_t xzone;
-
-      gst_xvid_init_struct (xsingle);
-
-      xenc.plugins[0].func = xvid_plugin_single;
-      xenc.plugins[0].param = &xsingle;
-
-      xsingle.bitrate = xvidenc->bitrate;
-      xsingle.reaction_delay_factor = MAX (0, xvidenc->reaction_delay_factor);
-      xsingle.averaging_period = MAX (0, xvidenc->averaging_period);
-      xsingle.buffer = MAX (0, xvidenc->buffer);
-
-      if (xvidenc->pass == XVIDENC_CBR)
-        break;
-
-      /* set up a const quantizer zone */
-      xzone.mode = XVID_ZONE_QUANT;
-      xzone.frame = 0;
-      xzone.increment = xvidenc->quant;
-      xzone.base = 1;
-      xenc.zones = &xzone;
-      xenc.num_zones++;
-
-      break;
-    }
-    case XVIDENC_VBR_PASS1:
-    {
-      xvid_plugin_2pass1_t xpass;
-
-      gst_xvid_init_struct (xpass);
-
-      xenc.plugins[0].func = xvid_plugin_2pass1;
-      xenc.plugins[0].param = &xpass;
-
-      xpass.filename = xvidenc->filename;
-      break;
-    }
-    case XVIDENC_VBR_PASS2:
-    {
-      xvid_plugin_2pass2_t xpass;
-
-      gst_xvid_init_struct (xpass);
-
-      xenc.plugins[0].func = xvid_plugin_2pass2;
-      xenc.plugins[0].param = &xpass;
-
-      xpass.bitrate = xvidenc->bitrate;
-      xpass.filename = xvidenc->filename;
-      xpass.keyframe_boost = xvidenc->keyframe_boost;
-      xpass.curve_compression_high = xvidenc->curve_compression_high;
-      xpass.curve_compression_low = xvidenc->curve_compression_low;
-      xpass.overflow_control_strength =
-          MAX (0, xvidenc->overflow_control_strength);
-      xpass.max_overflow_improvement =
-          MAX (0, xvidenc->max_overflow_improvement);
-      xpass.max_overflow_degradation =
-          MAX (0, xvidenc->max_overflow_degradation);
-      xpass.kfreduction = MAX (0, xvidenc->kfreduction);
-      xpass.kfthreshold = MAX (0, xvidenc->kfthreshold);
-      xpass.container_frame_overhead =
-          MAX (0, xvidenc->container_frame_overhead);
-      break;
-    }
-  }
-
-  if (xvidenc->lumimasking) {
-    xenc.plugins[1].func = xvid_plugin_lumimasking;
-    xenc.plugins[1].param = NULL;
-    xenc.num_plugins++;
-  }
-
-  if ((ret = xvid_encore (NULL, XVID_ENC_CREATE, &xenc, NULL)) < 0) {
-    GST_DEBUG_OBJECT (xvidenc, "Error setting up xvid encoder: %s (%d)",
-        gst_xvid_error (ret), ret);
-    return FALSE;
-  }
-
-  xvidenc->handle = xenc.handle;
-
-  return TRUE;
-}
-
-static gboolean
-gst_xvidenc_setcaps (GstPad * pad, GstCaps * vscaps)
-{
-  GstXvidEnc *xvidenc;
-  GstStructure *structure;
-  gint w, h;
-  const GValue *fps, *par;
-  gint xvid_cs = -1;
-
-  xvidenc = GST_XVIDENC (GST_PAD_PARENT (pad));
-
-  /* if there's something old around, remove it */
-  if (xvidenc->handle) {
-    gst_xvidenc_flush_buffers (xvidenc, TRUE);
-    xvid_encore (xvidenc->handle, XVID_ENC_DESTROY, NULL, NULL);
-    xvidenc->handle = NULL;
-  }
-
-  structure = gst_caps_get_structure (vscaps, 0);
-
-  if (!gst_structure_get_int (structure, "width", &w) ||
-      !gst_structure_get_int (structure, "height", &h)) {
-    return FALSE;
-  }
-
-  fps = gst_structure_get_value (structure, "framerate");
-  if (fps == NULL || !GST_VALUE_HOLDS_FRACTION (fps)) {
-    GST_WARNING_OBJECT (pad, "no framerate specified, or not a GstFraction");
-    return FALSE;
-  }
-
-  /* optional par info */
-  par = gst_structure_get_value (structure, "pixel-aspect-ratio");
-
-  xvid_cs = gst_xvid_structure_to_csp (structure);
-  if (xvid_cs == -1) {
-    gchar *sstr;
-
-    sstr = gst_structure_to_string (structure);
-    GST_DEBUG_OBJECT (xvidenc, "Did not find xvid colourspace for caps %s",
-        sstr);
-    g_free (sstr);
-    return FALSE;
-  }
-
-  xvidenc->csp = xvid_cs;
-  xvidenc->width = w;
-  xvidenc->height = h;
-  xvidenc->fbase = gst_value_get_fraction_numerator (fps);
-  xvidenc->fincr = gst_value_get_fraction_denominator (fps);
-  if ((par != NULL) && GST_VALUE_HOLDS_FRACTION (par)) {
-    xvidenc->par_width = gst_value_get_fraction_numerator (par);
-    xvidenc->par_height = gst_value_get_fraction_denominator (par);
-  } else {
-    xvidenc->par_width = 1;
-    xvidenc->par_height = 1;
-  }
-
-  /* wipe xframe cache given possible change caps properties */
-  g_free (xvidenc->xframe_cache);
-  xvidenc->xframe_cache = NULL;
-
-  if (gst_xvidenc_setup (xvidenc)) {
-    gboolean ret = FALSE;
-    GstCaps *new_caps = NULL, *allowed_caps;
-
-    /* please downstream with preferred caps */
-    allowed_caps = gst_pad_get_allowed_caps (xvidenc->srcpad);
-    GST_DEBUG_OBJECT (xvidenc, "allowed caps: %" GST_PTR_FORMAT, allowed_caps);
-
-    if (allowed_caps && !gst_caps_is_empty (allowed_caps)) {
-      new_caps = gst_caps_copy_nth (allowed_caps, 0);
-    } else {
-      new_caps = gst_caps_new_simple ("video/x-xvid", NULL);
-    }
-    if (allowed_caps)
-      gst_caps_unref (allowed_caps);
-
-    gst_caps_set_simple (new_caps,
-        "width", G_TYPE_INT, w, "height", G_TYPE_INT, h,
-        "framerate", GST_TYPE_FRACTION, xvidenc->fbase, xvidenc->fincr,
-        "pixel-aspect-ratio", GST_TYPE_FRACTION,
-        xvidenc->par_width, xvidenc->par_height, NULL);
-    /* just to be sure */
-    gst_pad_fixate_caps (xvidenc->srcpad, new_caps);
-
-    if (xvidenc->used_profile != 0) {
-      switch (xvidenc->used_profile) {
-        case XVID_PROFILE_S_L0:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING, "simple",
-              "level", G_TYPE_STRING, "0", NULL);
-          break;
-        case XVID_PROFILE_S_L1:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING, "simple",
-              "level", G_TYPE_STRING, "1", NULL);
-          break;
-        case XVID_PROFILE_S_L2:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING, "simple",
-              "level", G_TYPE_STRING, "2", NULL);
-          break;
-        case XVID_PROFILE_S_L3:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING, "simple",
-              "level", G_TYPE_STRING, "3", NULL);
-          break;
-        case XVID_PROFILE_S_L4a:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING, "simple",
-              "level", G_TYPE_STRING, "4a", NULL);
-          break;
-        case XVID_PROFILE_S_L5:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING, "simple",
-              "level", G_TYPE_STRING, "5", NULL);
-          break;
-        case XVID_PROFILE_S_L6:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING, "simple",
-              "level", G_TYPE_STRING, "6", NULL);
-          break;
-        case XVID_PROFILE_ARTS_L1:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-real-time-simple", "level", G_TYPE_STRING, "1", NULL);
-          break;
-        case XVID_PROFILE_ARTS_L2:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-real-time-simple", "level", G_TYPE_STRING, "2", NULL);
-          break;
-        case XVID_PROFILE_ARTS_L3:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-real-time-simple", "level", G_TYPE_STRING, "3", NULL);
-          break;
-        case XVID_PROFILE_ARTS_L4:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-real-time-simple", "level", G_TYPE_STRING, "4", NULL);
-          break;
-        case XVID_PROFILE_AS_L0:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-simple", "level", G_TYPE_STRING, "0", NULL);
-          break;
-        case XVID_PROFILE_AS_L1:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-simple", "level", G_TYPE_STRING, "1", NULL);
-          break;
-        case XVID_PROFILE_AS_L2:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-simple", "level", G_TYPE_STRING, "2", NULL);
-          break;
-        case XVID_PROFILE_AS_L3:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-simple", "level", G_TYPE_STRING, "3", NULL);
-          break;
-        case XVID_PROFILE_AS_L4:
-          gst_caps_set_simple (new_caps, "profile", G_TYPE_STRING,
-              "advanced-simple", "level", G_TYPE_STRING, "4", NULL);
-          break;
-        default:
-          g_assert_not_reached ();
-          break;
-      }
-    }
-
-    /* src pad should accept anyway */
-    ret = gst_pad_set_caps (xvidenc->srcpad, new_caps);
-    gst_caps_unref (new_caps);
-
-    if (!ret && xvidenc->handle) {
-      xvid_encore (xvidenc->handle, XVID_ENC_DESTROY, NULL, NULL);
-      xvidenc->handle = NULL;
-    }
-    return ret;
-
-  } else                        /* setup did not work out */
-    return FALSE;
-}
-
-static GstCaps *
-gst_xvidenc_getcaps (GstPad * pad)
-{
-  GstXvidEnc *xvidenc;
-  GstPad *peer;
-  GstCaps *caps;
-
-  /* If we already have caps return them */
-  if (GST_PAD_CAPS (pad))
-    return gst_caps_ref (GST_PAD_CAPS (pad));
-
-  xvidenc = GST_XVIDENC (gst_pad_get_parent (pad));
-  if (!xvidenc)
-    return gst_caps_new_empty ();
-
-  peer = gst_pad_get_peer (xvidenc->srcpad);
-  if (peer) {
-    const GstCaps *templcaps;
-    GstCaps *peercaps;
-    guint i, n;
-
-    peercaps = gst_pad_get_caps (peer);
-
-    /* Translate peercaps to YUV */
-    peercaps = gst_caps_make_writable (peercaps);
-    n = gst_caps_get_size (peercaps);
-    for (i = 0; i < n; i++) {
-      GstStructure *s = gst_caps_get_structure (peercaps, i);
-
-      gst_structure_set_name (s, "video/x-raw-yuv");
-      gst_structure_remove_field (s, "mpegversion");
-      gst_structure_remove_field (s, "systemstream");
-    }
-
-    templcaps = gst_pad_get_pad_template_caps (pad);
-
-    caps = gst_caps_intersect (peercaps, templcaps);
-    gst_caps_unref (peercaps);
-    gst_object_unref (peer);
-    peer = NULL;
-  } else {
-    caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
-  }
-
-  gst_object_unref (xvidenc);
-
-  return caps;
-}
-
-/* encodes frame according to info in xframe;
-   - buf is input buffer, can be NULL if dummy
-   - buf is disposed of prior to exit
-   - resulting buffer is returned, NULL if no encoder output or error
-*/
-static inline GstBuffer *
-gst_xvidenc_encode (GstXvidEnc * xvidenc, GstBuffer * buf,
-    xvid_enc_frame_t xframe)
-{
-  GstBuffer *outbuf;
-  gint ret;
-
-  /* compressed frame should fit in the rough size of an uncompressed one */
-  outbuf = gst_buffer_new_and_alloc (gst_xvid_image_get_size (xvidenc->csp,
-          xvidenc->width, xvidenc->height));
-
-  xframe.bitstream = (void *) GST_BUFFER_DATA (outbuf);
-  xframe.length = GST_BUFFER_SIZE (outbuf);
-
-  /* now provide input image data where-abouts, if needed */
-  if (buf)
-    gst_xvid_image_fill (&xframe.input, GST_BUFFER_DATA (buf), xvidenc->csp,
-        xvidenc->width, xvidenc->height);
-
-  GST_DEBUG_OBJECT (xvidenc, "encoding frame into buffer of size %d",
-      GST_BUFFER_SIZE (outbuf));
-  ret = xvid_encore (xvidenc->handle, XVID_ENC_ENCODE, &xframe, NULL);
-
-  if (ret < 0) {
-    /* things can be nasty if we are trying to flush, so don't signal error then */
-    if (buf) {
-      GST_ELEMENT_WARNING (xvidenc, LIBRARY, ENCODE, (NULL),
-          ("Error encoding xvid frame: %s (%d)", gst_xvid_error (ret), ret));
-      gst_buffer_unref (buf);
-    }
-    gst_buffer_unref (outbuf);
-    return NULL;
-  } else if (ret > 0) {         /* make sub-buffer */
-    GstBuffer *sub;
-
-    GST_DEBUG_OBJECT (xvidenc, "xvid produced output of size %d", ret);
-    sub = gst_buffer_create_sub (outbuf, 0, ret);
-
-    /* parent no longer needed, will go away with child buffer */
-    gst_buffer_unref (outbuf);
-    outbuf = sub;
-  } else {                      /* encoder did not yet produce something */
-    GST_DEBUG_OBJECT (xvidenc, "xvid produced no output");
-    gst_buffer_unref (outbuf);
-    g_queue_push_tail (xvidenc->delay, buf);
-    return NULL;
-  }
-
-  /* finish decoration and return */
-  if (!(xframe.out_flags & XVID_KEYFRAME))
-    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
-  gst_buffer_set_caps (outbuf, GST_PAD_CAPS (xvidenc->srcpad));
-
-  /* now we need the right buf to take timestamps from;
-     note that timestamps from a display order input buffer can end up with
-     another encode order output buffer, but other than this permutation,
-     the overall time progress is tracked,
-     and keyframes should have the correct stamp */
-  if (!g_queue_is_empty (xvidenc->delay)) {
-    if (buf)
-      g_queue_push_tail (xvidenc->delay, buf);
-    buf = g_queue_pop_head (xvidenc->delay);
-  }
-  if (buf) {
-    GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
-    GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
-    gst_buffer_unref (buf);
-  }
-
-  return outbuf;
-}
-
-static GstFlowReturn
-gst_xvidenc_chain (GstPad * pad, GstBuffer * buf)
-{
-  GstXvidEnc *xvidenc = GST_XVIDENC (GST_PAD_PARENT (pad));
-  GstBuffer *outbuf;
-  xvid_enc_frame_t xframe;
-
-  const gint motion_presets[] = {
-    0, 0, 0, 0,
-    XVID_ME_HALFPELREFINE16,
-    XVID_ME_HALFPELREFINE16 | XVID_ME_ADVANCEDDIAMOND16,
-    XVID_ME_HALFPELREFINE16 | XVID_ME_EXTSEARCH16
-        | XVID_ME_HALFPELREFINE8 | XVID_ME_USESQUARES16
-  };
-
-  if (!xvidenc->handle) {
-    GST_ELEMENT_ERROR (xvidenc, CORE, NEGOTIATION, (NULL),
-        ("format wasn't negotiated before chain function"));
-    gst_buffer_unref (buf);
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-
-  GST_DEBUG_OBJECT (xvidenc,
-      "Received buffer of time %" GST_TIME_FORMAT ", size %d",
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_SIZE (buf));
-
-  if (xvidenc->xframe_cache)
-    memcpy (&xframe, xvidenc->xframe_cache, sizeof (xframe));
-  else {                        /* need to build some inital xframe to be cached */
-    /* encode and so ... */
-    gst_xvid_init_struct (xframe);
-
-    if (xvidenc->par_width == xvidenc->par_height)
-      xframe.par = XVID_PAR_11_VGA;
-    else {
-      xframe.par = XVID_PAR_EXT;
-      xframe.par_width = xvidenc->par_width;
-      xframe.par_height = xvidenc->par_height;
-    }
-
-    /* handle options */
-    xframe.vol_flags |= xvidenc->quant_type;
-    xframe.vop_flags = XVID_VOP_HALFPEL;
-    xframe.motion = motion_presets[xvidenc->motion];
-
-    if (xvidenc->me_chroma) {
-      xframe.motion |= XVID_ME_CHROMA_PVOP;
-      xframe.motion |= XVID_ME_CHROMA_BVOP;
-    }
-
-    if (xvidenc->me_vhq >= 1) {
-      xframe.vop_flags |= XVID_VOP_MODEDECISION_RD;
-    }
-    if (xvidenc->me_vhq >= 2) {
-      xframe.motion |= XVID_ME_HALFPELREFINE16_RD;
-      xframe.motion |= XVID_ME_QUARTERPELREFINE16_RD;
-    }
-    if (xvidenc->me_vhq >= 3) {
-      xframe.motion |= XVID_ME_HALFPELREFINE8_RD;
-      xframe.motion |= XVID_ME_QUARTERPELREFINE8_RD;
-      xframe.motion |= XVID_ME_CHECKPREDICTION_RD;
-    }
-    if (xvidenc->me_vhq >= 4) {
-      xframe.motion |= XVID_ME_EXTSEARCH_RD;
-    }
-
-    /* no motion estimation, then only intra */
-    if (xvidenc->motion == 0) {
-      xframe.type = XVID_TYPE_IVOP;
-    } else {
-      xframe.type = XVID_TYPE_AUTO;
-    }
-
-    if (xvidenc->motion > 4) {
-      xframe.vop_flags |= XVID_VOP_INTER4V;
-    }
-
-    if (xvidenc->me_quarterpel) {
-      xframe.vol_flags |= XVID_VOL_QUARTERPEL;
-      xframe.motion |= XVID_ME_QUARTERPELREFINE16;
-      xframe.motion |= XVID_ME_QUARTERPELREFINE8;
-    }
-
-    if (xvidenc->gmc) {
-      xframe.vol_flags |= XVID_VOL_GMC;
-      xframe.motion |= XVID_ME_GME_REFINE;
-    }
-
-    if (xvidenc->interlaced) {
-      xframe.vol_flags |= XVID_VOL_INTERLACING;
-    }
-
-    if (xvidenc->trellis) {
-      xframe.vop_flags |= XVID_VOP_TRELLISQUANT;
-    }
-
-    if (xvidenc->hqacpred) {
-      xframe.vop_flags |= XVID_VOP_HQACPRED;
-    }
-
-    if (xvidenc->greyscale) {
-      xframe.vop_flags |= XVID_VOP_GREYSCALE;
-    }
-
-    if (xvidenc->cartoon) {
-      xframe.vop_flags |= XVID_VOP_CARTOON;
-      xframe.motion |= XVID_ME_DETECT_STATIC_MOTION;
-    }
-
-    xframe.bframe_threshold = xvidenc->bframe_threshold;
-    xframe.input.csp = xvidenc->csp;
-
-    /* save in cache */
-    xvidenc->xframe_cache = g_memdup (&xframe, sizeof (xframe));
-  }
-
-  outbuf = gst_xvidenc_encode (xvidenc, buf, xframe);
-
-  if (!outbuf)                  /* error or no data yet */
-    return GST_FLOW_OK;
-
-  /* go out, multiply! */
-  return gst_pad_push (xvidenc->srcpad, outbuf);
-}
-
-/* flush xvid encoder buffers caused by bframe usage */
-static void
-gst_xvidenc_flush_buffers (GstXvidEnc * xvidenc, gboolean send)
-{
-  GstBuffer *outbuf;
-  xvid_enc_frame_t xframe;
-
-  /* no need to flush if no handle */
-  if (!xvidenc->handle)
-    return;
-
-  gst_xvid_init_struct (xframe);
-
-  /* init a fake frame to force flushing */
-  xframe.input.csp = XVID_CSP_NULL;
-  xframe.input.plane[0] = NULL;
-  xframe.input.plane[1] = NULL;
-  xframe.input.plane[2] = NULL;
-  xframe.input.stride[0] = 0;
-  xframe.input.stride[1] = 0;
-  xframe.input.stride[2] = 0;
-  xframe.quant = 0;
-
-  GST_DEBUG ("flushing buffers with sending %d", send);
-
-  while (!g_queue_is_empty (xvidenc->delay)) {
-    outbuf = gst_xvidenc_encode (xvidenc, NULL, xframe);
-
-    if (outbuf) {
-      if (send)
-        gst_pad_push (xvidenc->srcpad, outbuf);
-      else
-        gst_buffer_unref (outbuf);
-    } else                      /* hm, there should have been something in there */
-      break;
-  }
-
-  /* our queue should be empty anyway if we did not have to break out ... */
-  while (!g_queue_is_empty (xvidenc->delay))
-    gst_buffer_unref (g_queue_pop_head (xvidenc->delay));
-}
-
-static void
-gst_xvidenc_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec)
-{
-  GstXvidEnc *xvidenc;
-  guint offset;
-
-  xvidenc = GST_XVIDENC (object);
-
-  if (prop_id > xvidenc_prop_count) {
-    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-    return;
-  }
-
-  /* our param specs should have such qdata */
-  offset =
-      GPOINTER_TO_UINT (g_param_spec_get_qdata (pspec, xvidenc_pspec_quark));
-
-  if (offset == 0)
-    return;
-
-  switch (G_PARAM_SPEC_VALUE_TYPE (pspec)) {
-    case G_TYPE_BOOLEAN:
-      G_STRUCT_MEMBER (gboolean, xvidenc, offset) = g_value_get_boolean (value);
-      break;
-    case G_TYPE_INT:
-      G_STRUCT_MEMBER (gint, xvidenc, offset) = g_value_get_int (value);
-      break;
-    case G_TYPE_STRING:
-      g_free (G_STRUCT_MEMBER (gchar *, xvidenc, offset));
-      G_STRUCT_MEMBER (gchar *, xvidenc, offset) = g_value_dup_string (value);
-      break;
-    default:                   /* must be enum, given the check above */
-      if (G_IS_PARAM_SPEC_ENUM (pspec)) {
-        G_STRUCT_MEMBER (gint, xvidenc, offset) = g_value_get_enum (value);
-      } else {
-        G_STRUCT_MEMBER (guint, xvidenc, offset) = g_value_get_flags (value);
-      }
-      break;
-  }
-}
-
-static void
-gst_xvidenc_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec)
-{
-  GstXvidEnc *xvidenc;
-  guint offset;
-
-  xvidenc = GST_XVIDENC (object);
-
-  if (prop_id > xvidenc_prop_count) {
-    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-    return;
-  }
-
-  /* our param specs should have such qdata */
-  offset =
-      GPOINTER_TO_UINT (g_param_spec_get_qdata (pspec, xvidenc_pspec_quark));
-
-  if (offset == 0)
-    return;
-
-  switch (G_PARAM_SPEC_VALUE_TYPE (pspec)) {
-    case G_TYPE_BOOLEAN:
-      g_value_set_boolean (value, G_STRUCT_MEMBER (gboolean, xvidenc, offset));
-      break;
-    case G_TYPE_INT:
-      g_value_set_int (value, G_STRUCT_MEMBER (gint, xvidenc, offset));
-      break;
-    case G_TYPE_STRING:
-      g_value_take_string (value,
-          g_strdup (G_STRUCT_MEMBER (gchar *, xvidenc, offset)));
-      break;
-    default:                   /* must be enum, given the check above */
-      if (G_IS_PARAM_SPEC_ENUM (pspec)) {
-        g_value_set_enum (value, G_STRUCT_MEMBER (gint, xvidenc, offset));
-      } else if (G_IS_PARAM_SPEC_FLAGS (pspec)) {
-        g_value_set_flags (value, G_STRUCT_MEMBER (guint, xvidenc, offset));
-      } else {                  /* oops, bit lazy we don't cover this case yet */
-        g_critical ("%s does not yet support type %s", GST_FUNCTION,
-            g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)));
-      }
-      break;
-  }
-}
-
-static GstStateChangeReturn
-gst_xvidenc_change_state (GstElement * element, GstStateChange transition)
-{
-  GstXvidEnc *xvidenc = GST_XVIDENC (element);
-  GstStateChangeReturn ret;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!gst_xvid_init ())
-        return GST_STATE_CHANGE_FAILURE;
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      xvidenc->delay = g_queue_new ();
-      break;
-    default:
-      break;
-  }
-
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  if (ret == GST_STATE_CHANGE_FAILURE)
-    goto done;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      if (xvidenc->handle) {
-        gst_xvidenc_flush_buffers (xvidenc, FALSE);
-        xvid_encore (xvidenc->handle, XVID_ENC_DESTROY, NULL, NULL);
-        xvidenc->handle = NULL;
-      }
-      g_queue_free (xvidenc->delay);
-      xvidenc->delay = NULL;
-      g_free (xvidenc->xframe_cache);
-      xvidenc->xframe_cache = NULL;
-      break;
-    default:
-      break;
-  }
-
-done:
-  return ret;
-}
diff --git a/ext/xvid/gstxvidenc.h b/ext/xvid/gstxvidenc.h
deleted file mode 100644 (file)
index ff77aa2..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/* GStreamer xvid encoder plugin
- * Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_XVIDENC_H__
-#define __GST_XVIDENC_H__
-
-#include <gst/gst.h>
-#include "gstxvid.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_XVIDENC \
-  (gst_xvidenc_get_type())
-#define GST_XVIDENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XVIDENC, GstXvidEnc))
-#define GST_XVIDENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XVIDENC, GstXvidEncClass))
-#define GST_IS_XVIDENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XVIDENC))
-#define GST_IS_XVIDENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XVIDENC))
-
-typedef struct _GstXvidEnc GstXvidEnc;
-typedef struct _GstXvidEncClass GstXvidEncClass;
-
-struct _GstXvidEnc {
-  GstElement element;
-
-  /* pads */
-  GstPad *sinkpad, *srcpad;
-
-  /* xvid handle */
-  void *handle;
-
-  /* cache in place */
-  xvid_enc_frame_t *xframe_cache;
-
-  /* caps information */
-  gint csp;
-  gint width, height;
-  gint fbase;
-  gint fincr;
-  gint par_width;
-  gint par_height;
-
-  /* delayed buffers if bframe usage */
-  GQueue *delay;
-
-  /* encoding profile */
-  gint profile;
-  gint used_profile;
-
-  /* quantizer type; h263, MPEG */
-  gint quant_type;
-
-  /* encoding type; cbr, vbr, quant */
-  gint pass;
-
-  /* quality of encoded image */
-  gint bitrate;
-  gint quant;
-
-  /* gop */
-  gint max_key_interval;
-  gboolean closed_gop;
-
-  /* motion estimation */
-  gint motion;
-  gboolean me_chroma;
-  gint me_vhq;
-  gboolean me_quarterpel;
-
-  /* lumimasking */
-  gboolean lumimasking;
-
-  /* b-frames */
-  gint max_bframes;
-  gint bquant_ratio;
-  gint bquant_offset;
-  gint bframe_threshold;
-
-  /* misc */
-  gboolean gmc;
-  gboolean trellis;
-  gboolean interlaced;
-  gboolean cartoon;
-  gboolean greyscale;
-  gboolean hqacpred;
-
-  /* quantizer ranges */
-  gint max_iquant, min_iquant;
-  gint max_pquant, min_pquant;
-  gint max_bquant, min_bquant;
-
-  /* cbr (single pass) encoding */
-  gint reaction_delay_factor;
-  gint averaging_period;
-  gint buffer;
-
-  /* vbr (2pass) encoding */
-  gchar *filename;
-  gint keyframe_boost;
-  gint curve_compression_high;
-  gint curve_compression_low;
-  gint overflow_control_strength;
-  gint max_overflow_improvement;
-  gint max_overflow_degradation;
-  gint kfreduction;
-  gint kfthreshold;
-  gint container_frame_overhead;
-};
-
-struct _GstXvidEncClass {
-  GstElementClass parent_class;
-};
-
-GType gst_xvidenc_get_type(void);
-
-G_END_DECLS
-
-#endif /* __GST_XVIDENC_H__ */
diff --git a/gst/audiobuffer/Makefile.am b/gst/audiobuffer/Makefile.am
deleted file mode 100644 (file)
index 5bdf8d2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-plugin_LTLIBRARIES = libgstaudiobuffer.la
-
-libgstaudiobuffer_la_SOURCES = gstaudioringbuffer.c
-libgstaudiobuffer_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
-    $(GST_CFLAGS) 
-libgstaudiobuffer_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) \
-                          -lgstaudio-$(GST_API_VERSION)
-
-libgstaudiobuffer_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstaudiobuffer_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/gst/audiobuffer/gstaudioringbuffer.c b/gst/audiobuffer/gstaudioringbuffer.c
deleted file mode 100644 (file)
index 9c43402..0000000
+++ /dev/null
@@ -1,1178 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008 Wim Taymans <wim.taymans@gmail.com>
- *
- * gstaudioringbuffer.c:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-audioringbuffer
- * @short_description: Asynchronous audio ringbuffer.
- *
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include <glib/gstdio.h>
-
-#include <gst/gst.h>
-#include <gst/gst-i18n-plugin.h>
-
-#include <gst/audio/gstringbuffer.h>
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-GST_DEBUG_CATEGORY_STATIC (audioringbuffer_debug);
-#define GST_CAT_DEFAULT (audioringbuffer_debug)
-
-enum
-{
-  LAST_SIGNAL
-};
-
-#define DEFAULT_BUFFER_TIME     ((200 * GST_MSECOND) / GST_USECOND)
-#define DEFAULT_SEGMENT_TIME    ((10 * GST_MSECOND) / GST_USECOND)
-
-
-enum
-{
-  PROP_0,
-  PROP_BUFFER_TIME,
-  PROP_SEGMENT_TIME
-};
-
-#define GST_TYPE_AUDIO_RINGBUFFER \
-  (gst_audio_ringbuffer_get_type())
-#define GST_AUDIO_RINGBUFFER(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_RINGBUFFER,GstAudioRingbuffer))
-#define GST_AUDIO_RINGBUFFER_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_RINGBUFFER,GstAudioRingbufferClass))
-#define GST_IS_AUDIO_RINGBUFFER(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_RINGBUFFER))
-#define GST_IS_AUDIO_RINGBUFFER_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AUDIO_RINGBUFFER))
-#define GST_AUDIO_RINGBUFFER_CAST(obj) \
-  ((GstAudioRingbuffer *)(obj))
-
-static GType gst_audio_ringbuffer_get_type (void);
-
-typedef struct _GstAudioRingbuffer GstAudioRingbuffer;
-typedef struct _GstAudioRingbufferClass GstAudioRingbufferClass;
-
-typedef struct _GstIntRingBuffer GstIntRingBuffer;
-typedef struct _GstIntRingBufferClass GstIntRingBufferClass;
-
-struct _GstAudioRingbuffer
-{
-  GstElement element;
-
-  /*< private > */
-  GstPad *sinkpad;
-  GstPad *srcpad;
-
-  gboolean pushing;
-  gboolean pulling;
-
-  /* segments to keep track of timestamps */
-  GstSegment sink_segment;
-  GstSegment src_segment;
-
-  /* flowreturn when srcpad is paused */
-  gboolean is_eos;
-  gboolean flushing;
-  gboolean waiting;
-
-  GCond *cond;
-
-  GstRingBuffer *buffer;
-
-  GstClockTime buffer_time;
-  GstClockTime segment_time;
-
-  guint64 next_sample;
-  guint64 last_align;
-};
-
-struct _GstAudioRingbufferClass
-{
-  GstElementClass parent_class;
-};
-
-
-#define GST_TYPE_INT_RING_BUFFER             (gst_int_ring_buffer_get_type())
-#define GST_INT_RING_BUFFER(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_INT_RING_BUFFER,GstIntRingBuffer))
-#define GST_INT_RING_BUFFER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_INT_RING_BUFFER,GstIntRingBufferClass))
-#define GST_INT_RING_BUFFER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_INT_RING_BUFFER, GstIntRingBufferClass))
-#define GST_INT_RING_BUFFER_CAST(obj)        ((GstIntRingBuffer *)obj)
-#define GST_IS_INT_RING_BUFFER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_INT_RING_BUFFER))
-#define GST_IS_INT_RING_BUFFER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_INT_RING_BUFFER))
-
-
-struct _GstIntRingBuffer
-{
-  GstRingBuffer object;
-};
-
-struct _GstIntRingBufferClass
-{
-  GstRingBufferClass parent_class;
-};
-
-GST_BOILERPLATE (GstIntRingBuffer, gst_int_ring_buffer, GstRingBuffer,
-    GST_TYPE_RING_BUFFER);
-
-static gboolean
-gst_int_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
-{
-  spec->seglatency = spec->segtotal;
-
-  buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
-  memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
-
-  return TRUE;
-}
-
-static gboolean
-gst_int_ring_buffer_release (GstRingBuffer * buf)
-{
-  gst_buffer_unref (buf->data);
-  buf->data = NULL;
-
-  return TRUE;
-}
-
-static gboolean
-gst_int_ring_buffer_start (GstRingBuffer * buf)
-{
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (GST_OBJECT_PARENT (buf));
-
-  GST_OBJECT_LOCK (ringbuffer);
-  if (G_UNLIKELY (ringbuffer->waiting)) {
-    ringbuffer->waiting = FALSE;
-    GST_DEBUG_OBJECT (ringbuffer, "start, sending signal");
-    g_cond_broadcast (ringbuffer->cond);
-  }
-  GST_OBJECT_UNLOCK (ringbuffer);
-
-  return TRUE;
-}
-
-
-static void
-gst_int_ring_buffer_base_init (gpointer klass)
-{
-}
-
-static void
-gst_int_ring_buffer_class_init (GstIntRingBufferClass * klass)
-{
-  GstRingBufferClass *gstringbuffer_class;
-
-  gstringbuffer_class = (GstRingBufferClass *) klass;
-
-  gstringbuffer_class->acquire =
-      GST_DEBUG_FUNCPTR (gst_int_ring_buffer_acquire);
-  gstringbuffer_class->release =
-      GST_DEBUG_FUNCPTR (gst_int_ring_buffer_release);
-  gstringbuffer_class->start = GST_DEBUG_FUNCPTR (gst_int_ring_buffer_start);
-}
-
-static void
-gst_int_ring_buffer_init (GstIntRingBuffer * buff,
-    GstIntRingBufferClass * g_class)
-{
-}
-
-static GstRingBuffer *
-gst_int_ring_buffer_new (void)
-{
-  GstRingBuffer *res;
-
-  res = g_object_new (GST_TYPE_INT_RING_BUFFER, NULL);
-
-  return res;
-}
-
-/* can't use boilerplate as we need to register with Queue2 to avoid conflicts
- * with ringbuffer in core elements */
-static void gst_audio_ringbuffer_class_init (GstAudioRingbufferClass * klass);
-static void gst_audio_ringbuffer_init (GstAudioRingbuffer * ringbuffer,
-    GstAudioRingbufferClass * g_class);
-static GstElementClass *elem_parent_class;
-
-static GType
-gst_audio_ringbuffer_get_type (void)
-{
-  static GType gst_audio_ringbuffer_type = 0;
-
-  if (!gst_audio_ringbuffer_type) {
-    static const GTypeInfo gst_audio_ringbuffer_info = {
-      sizeof (GstAudioRingbufferClass),
-      NULL,
-      NULL,
-      (GClassInitFunc) gst_audio_ringbuffer_class_init,
-      NULL,
-      NULL,
-      sizeof (GstAudioRingbuffer),
-      0,
-      (GInstanceInitFunc) gst_audio_ringbuffer_init,
-      NULL
-    };
-
-    gst_audio_ringbuffer_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstAudioRingbuffer",
-        &gst_audio_ringbuffer_info, 0);
-  }
-  return gst_audio_ringbuffer_type;
-}
-
-static void gst_audio_ringbuffer_finalize (GObject * object);
-
-static void gst_audio_ringbuffer_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_audio_ringbuffer_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-
-static GstFlowReturn gst_audio_ringbuffer_chain (GstPad * pad,
-    GstBuffer * buffer);
-static GstFlowReturn gst_audio_ringbuffer_bufferalloc (GstPad * pad,
-    guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
-
-static gboolean gst_audio_ringbuffer_handle_sink_event (GstPad * pad,
-    GstEvent * event);
-
-static gboolean gst_audio_ringbuffer_handle_src_event (GstPad * pad,
-    GstEvent * event);
-static gboolean gst_audio_ringbuffer_handle_src_query (GstPad * pad,
-    GstQuery * query);
-
-static GstCaps *gst_audio_ringbuffer_getcaps (GstPad * pad);
-static gboolean gst_audio_ringbuffer_setcaps (GstPad * pad, GstCaps * caps);
-
-static GstFlowReturn gst_audio_ringbuffer_get_range (GstPad * pad,
-    guint64 offset, guint length, GstBuffer ** buffer);
-static gboolean gst_audio_ringbuffer_src_checkgetrange_function (GstPad * pad);
-
-static gboolean gst_audio_ringbuffer_src_activate_pull (GstPad * pad,
-    gboolean active);
-static gboolean gst_audio_ringbuffer_src_activate_push (GstPad * pad,
-    gboolean active);
-static gboolean gst_audio_ringbuffer_sink_activate_push (GstPad * pad,
-    gboolean active);
-
-static GstStateChangeReturn gst_audio_ringbuffer_change_state (GstElement *
-    element, GstStateChange transition);
-
-/* static guint gst_audio_ringbuffer_signals[LAST_SIGNAL] = { 0 }; */
-
-static void
-gst_audio_ringbuffer_class_init (GstAudioRingbufferClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
-
-  elem_parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->set_property =
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_set_property);
-  gobject_class->get_property =
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_get_property);
-
-  g_object_class_install_property (gobject_class, PROP_BUFFER_TIME,
-      g_param_spec_int64 ("buffer-time", "Buffer Time",
-          "Size of audio buffer in nanoseconds", 1,
-          G_MAXINT64, DEFAULT_BUFFER_TIME,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_SEGMENT_TIME,
-      g_param_spec_int64 ("segment-time", "Segment Time",
-          "Audio segment duration in nanoseconds", 1,
-          G_MAXINT64, DEFAULT_SEGMENT_TIME,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  gst_element_class_add_static_pad_template (gstelement_class, &srctemplate);
-  gst_element_class_add_static_pad_template (gstelement_class, &sinktemplate);
-
-  gst_element_class_set_static_metadata (gstelement_class, "AudioRingbuffer",
-      "Generic",
-      "Asynchronous Audio ringbuffer", "Wim Taymans <wim.taymans@gmail.com>");
-
-  /* set several parent class virtual functions */
-  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_finalize);
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_change_state);
-}
-
-static void
-gst_audio_ringbuffer_init (GstAudioRingbuffer * ringbuffer,
-    GstAudioRingbufferClass * g_class)
-{
-  ringbuffer->sinkpad =
-      gst_pad_new_from_static_template (&sinktemplate, "sink");
-
-  gst_pad_set_chain_function (ringbuffer->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_chain));
-  gst_pad_set_activatepush_function (ringbuffer->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_sink_activate_push));
-  gst_pad_set_event_function (ringbuffer->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_handle_sink_event));
-  gst_pad_set_getcaps_function (ringbuffer->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_getcaps));
-  gst_pad_set_setcaps_function (ringbuffer->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_setcaps));
-  gst_pad_set_bufferalloc_function (ringbuffer->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_bufferalloc));
-  gst_element_add_pad (GST_ELEMENT (ringbuffer), ringbuffer->sinkpad);
-
-  ringbuffer->srcpad = gst_pad_new_from_static_template (&srctemplate, "src");
-
-  gst_pad_set_activatepull_function (ringbuffer->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_src_activate_pull));
-  gst_pad_set_activatepush_function (ringbuffer->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_src_activate_push));
-  gst_pad_set_getrange_function (ringbuffer->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_get_range));
-  gst_pad_set_checkgetrange_function (ringbuffer->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_src_checkgetrange_function));
-  gst_pad_set_getcaps_function (ringbuffer->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_getcaps));
-  gst_pad_set_event_function (ringbuffer->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_handle_src_event));
-  gst_pad_set_query_function (ringbuffer->srcpad,
-      GST_DEBUG_FUNCPTR (gst_audio_ringbuffer_handle_src_query));
-  gst_element_add_pad (GST_ELEMENT (ringbuffer), ringbuffer->srcpad);
-
-  gst_segment_init (&ringbuffer->sink_segment, GST_FORMAT_TIME);
-
-  ringbuffer->cond = g_cond_new ();
-
-  ringbuffer->is_eos = FALSE;
-
-  ringbuffer->buffer_time = DEFAULT_BUFFER_TIME;
-  ringbuffer->segment_time = DEFAULT_SEGMENT_TIME;
-
-  GST_DEBUG_OBJECT (ringbuffer,
-      "initialized ringbuffer's not_empty & not_full conditions");
-}
-
-/* called only once, as opposed to dispose */
-static void
-gst_audio_ringbuffer_finalize (GObject * object)
-{
-  GstAudioRingbuffer *ringbuffer = GST_AUDIO_RINGBUFFER (object);
-
-  GST_DEBUG_OBJECT (ringbuffer, "finalizing ringbuffer");
-
-  g_cond_free (ringbuffer->cond);
-
-  G_OBJECT_CLASS (elem_parent_class)->finalize (object);
-}
-
-static GstCaps *
-gst_audio_ringbuffer_getcaps (GstPad * pad)
-{
-  GstAudioRingbuffer *ringbuffer;
-  GstPad *otherpad;
-  GstCaps *result;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (GST_PAD_PARENT (pad));
-
-  otherpad =
-      (pad == ringbuffer->srcpad ? ringbuffer->sinkpad : ringbuffer->srcpad);
-  result = gst_pad_peer_get_caps (otherpad);
-  if (result == NULL)
-    result = gst_caps_new_any ();
-
-  return result;
-}
-
-static gboolean
-gst_audio_ringbuffer_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstAudioRingbuffer *ringbuffer;
-  GstRingBufferSpec *spec;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (GST_PAD_PARENT (pad));
-
-  if (!ringbuffer->buffer)
-    return FALSE;
-
-  spec = &ringbuffer->buffer->spec;
-
-  GST_DEBUG_OBJECT (ringbuffer, "release old ringbuffer");
-
-  /* release old ringbuffer */
-  gst_ring_buffer_activate (ringbuffer->buffer, FALSE);
-  gst_ring_buffer_release (ringbuffer->buffer);
-
-  GST_DEBUG_OBJECT (ringbuffer, "parse caps");
-
-  spec->buffer_time = ringbuffer->buffer_time;
-  spec->latency_time = ringbuffer->segment_time;
-
-  /* parse new caps */
-  if (!gst_ring_buffer_parse_caps (spec, caps))
-    goto parse_error;
-
-  gst_ring_buffer_debug_spec_buff (spec);
-
-  GST_DEBUG_OBJECT (ringbuffer, "acquire ringbuffer");
-  if (!gst_ring_buffer_acquire (ringbuffer->buffer, spec))
-    goto acquire_error;
-
-  GST_DEBUG_OBJECT (ringbuffer, "activate ringbuffer");
-  gst_ring_buffer_activate (ringbuffer->buffer, TRUE);
-
-  /* calculate actual latency and buffer times. 
-   * FIXME: In 0.11, store the latency_time internally in ns */
-  spec->latency_time = gst_util_uint64_scale (spec->segsize,
-      (GST_SECOND / GST_USECOND), spec->rate * spec->bytes_per_sample);
-
-  spec->buffer_time = spec->segtotal * spec->latency_time;
-
-  gst_ring_buffer_debug_spec_buff (spec);
-
-  return TRUE;
-
-  /* ERRORS */
-parse_error:
-  {
-    GST_DEBUG_OBJECT (ringbuffer, "could not parse caps");
-    GST_ELEMENT_ERROR (ringbuffer, STREAM, FORMAT,
-        (NULL), ("cannot parse audio format."));
-    return FALSE;
-  }
-acquire_error:
-  {
-    GST_DEBUG_OBJECT (ringbuffer, "could not acquire ringbuffer");
-    return FALSE;
-  }
-}
-
-static GstFlowReturn
-gst_audio_ringbuffer_bufferalloc (GstPad * pad, guint64 offset, guint size,
-    GstCaps * caps, GstBuffer ** buf)
-{
-  GstAudioRingbuffer *ringbuffer;
-  GstFlowReturn result;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (GST_PAD_PARENT (pad));
-
-  /* Forward to src pad, without setting caps on the src pad */
-  result = gst_pad_alloc_buffer (ringbuffer->srcpad, offset, size, caps, buf);
-
-  return result;
-}
-
-static gboolean
-gst_audio_ringbuffer_handle_sink_event (GstPad * pad, GstEvent * event)
-{
-  GstAudioRingbuffer *ringbuffer;
-  gboolean forward;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (GST_OBJECT_PARENT (pad));
-
-  forward = ringbuffer->pushing || ringbuffer->pulling;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_FLUSH_START:
-    {
-      GST_LOG_OBJECT (ringbuffer, "received flush start event");
-      break;
-    }
-    case GST_EVENT_FLUSH_STOP:
-    {
-      ringbuffer->is_eos = FALSE;
-      GST_LOG_OBJECT (ringbuffer, "received flush stop event");
-      break;
-    }
-    case GST_EVENT_NEWSEGMENT:
-    {
-      gboolean update;
-      gdouble rate, arate;
-      GstFormat format;
-      gint64 start, stop, time;
-
-      gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
-          &start, &stop, &time);
-
-      gst_segment_set_newsegment_full (&ringbuffer->sink_segment, update, rate,
-          arate, format, start, stop, time);
-      break;
-    }
-    case GST_EVENT_EOS:
-      ringbuffer->is_eos = TRUE;
-      break;
-    default:
-      break;
-  }
-  if (forward) {
-    gst_pad_push_event (ringbuffer->srcpad, event);
-  } else {
-    if (event)
-      gst_event_unref (event);
-  }
-  return TRUE;
-}
-
-#define DIFF_TOLERANCE  2
-
-static GstFlowReturn
-gst_audio_ringbuffer_render (GstAudioRingbuffer * ringbuffer, GstBuffer * buf)
-{
-  GstRingBuffer *rbuf;
-  gint bps, accum;
-  guint size;
-  guint samples, written, out_samples;
-  gint64 diff, align, ctime, cstop;
-  guint8 *data;
-  guint64 in_offset;
-  GstClockTime time, stop, render_start, render_stop, sample_offset;
-  gboolean align_next;
-
-  rbuf = ringbuffer->buffer;
-
-  /* can't do anything when we don't have the device */
-  if (G_UNLIKELY (!gst_ring_buffer_is_acquired (rbuf)))
-    goto wrong_state;
-
-  bps = rbuf->spec.bytes_per_sample;
-
-  size = GST_BUFFER_SIZE (buf);
-  if (G_UNLIKELY (size % bps) != 0)
-    goto wrong_size;
-
-  samples = size / bps;
-  out_samples = samples;
-
-  in_offset = GST_BUFFER_OFFSET (buf);
-  time = GST_BUFFER_TIMESTAMP (buf);
-
-  GST_DEBUG_OBJECT (ringbuffer,
-      "time %" GST_TIME_FORMAT ", offset %llu, start %" GST_TIME_FORMAT
-      ", samples %u", GST_TIME_ARGS (time), in_offset,
-      GST_TIME_ARGS (ringbuffer->sink_segment.start), samples);
-
-  data = GST_BUFFER_DATA (buf);
-
-  stop = time + gst_util_uint64_scale_int (samples, GST_SECOND,
-      rbuf->spec.rate);
-
-  if (!gst_segment_clip (&ringbuffer->sink_segment, GST_FORMAT_TIME, time, stop,
-          &ctime, &cstop))
-    goto out_of_segment;
-
-  /* see if some clipping happened */
-  diff = ctime - time;
-  if (diff > 0) {
-    /* bring clipped time to samples */
-    diff = gst_util_uint64_scale_int (diff, rbuf->spec.rate, GST_SECOND);
-    GST_DEBUG_OBJECT (ringbuffer, "clipping start to %" GST_TIME_FORMAT " %"
-        G_GUINT64_FORMAT " samples", GST_TIME_ARGS (ctime), diff);
-    samples -= diff;
-    data += diff * bps;
-    time = ctime;
-  }
-  diff = stop - cstop;
-  if (diff > 0) {
-    /* bring clipped time to samples */
-    diff = gst_util_uint64_scale_int (diff, rbuf->spec.rate, GST_SECOND);
-    GST_DEBUG_OBJECT (ringbuffer, "clipping stop to %" GST_TIME_FORMAT " %"
-        G_GUINT64_FORMAT " samples", GST_TIME_ARGS (cstop), diff);
-    samples -= diff;
-    stop = cstop;
-  }
-
-  /* bring buffer start and stop times to running time */
-  render_start =
-      gst_segment_to_running_time (&ringbuffer->sink_segment, GST_FORMAT_TIME,
-      time);
-  render_stop =
-      gst_segment_to_running_time (&ringbuffer->sink_segment, GST_FORMAT_TIME,
-      stop);
-
-  GST_DEBUG_OBJECT (ringbuffer,
-      "running: start %" GST_TIME_FORMAT " - stop %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (render_start), GST_TIME_ARGS (render_stop));
-
-  /* and bring the time to the rate corrected offset in the buffer */
-  render_start = gst_util_uint64_scale_int (render_start,
-      rbuf->spec.rate, GST_SECOND);
-  render_stop = gst_util_uint64_scale_int (render_stop,
-      rbuf->spec.rate, GST_SECOND);
-
-  /* positive playback rate, first sample is render_start, negative rate, first
-   * sample is render_stop. When no rate conversion is active, render exactly
-   * the amount of input samples to avoid aligning to rounding errors. */
-  if (ringbuffer->sink_segment.rate >= 0.0) {
-    sample_offset = render_start;
-    if (ringbuffer->sink_segment.rate == 1.0)
-      render_stop = sample_offset + samples;
-  } else {
-    sample_offset = render_stop;
-    if (ringbuffer->sink_segment.rate == -1.0)
-      render_start = sample_offset + samples;
-  }
-
-  /* always resync after a discont */
-  if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT))) {
-    GST_DEBUG_OBJECT (ringbuffer, "resync after discont");
-    goto no_align;
-  }
-
-  /* resync when we don't know what to align the sample with */
-  if (G_UNLIKELY (ringbuffer->next_sample == -1)) {
-    GST_DEBUG_OBJECT (ringbuffer,
-        "no align possible: no previous sample position known");
-    goto no_align;
-  }
-
-  /* now try to align the sample to the previous one, first see how big the
-   * difference is. */
-  if (sample_offset >= ringbuffer->next_sample)
-    diff = sample_offset - ringbuffer->next_sample;
-  else
-    diff = ringbuffer->next_sample - sample_offset;
-
-  /* we tollerate half a second diff before we start resyncing. This
-   * should be enough to compensate for various rounding errors in the timestamp
-   * and sample offset position. We always resync if we got a discont anyway and
-   * non-discont should be aligned by definition. */
-  if (G_LIKELY (diff < rbuf->spec.rate / DIFF_TOLERANCE)) {
-    /* calc align with previous sample */
-    align = ringbuffer->next_sample - sample_offset;
-    GST_DEBUG_OBJECT (ringbuffer,
-        "align with prev sample, ABS (%" G_GINT64_FORMAT ") < %d", align,
-        rbuf->spec.rate / DIFF_TOLERANCE);
-  } else {
-    /* bring sample diff to seconds for error message */
-    diff = gst_util_uint64_scale_int (diff, GST_SECOND, rbuf->spec.rate);
-    /* timestamps drifted apart from previous samples too much, we need to
-     * resync. We log this as an element warning. */
-    GST_ELEMENT_WARNING (ringbuffer, CORE, CLOCK,
-        ("Compensating for audio synchronisation problems"),
-        ("Unexpected discontinuity in audio timestamps of more "
-            "than half a second (%" GST_TIME_FORMAT "), resyncing",
-            GST_TIME_ARGS (diff)));
-    align = 0;
-  }
-  ringbuffer->last_align = align;
-
-  /* apply alignment */
-  render_start += align;
-  render_stop += align;
-
-no_align:
-  /* number of target samples is difference between start and stop */
-  out_samples = render_stop - render_start;
-
-  /* we render the first or last sample first, depending on the rate */
-  if (ringbuffer->sink_segment.rate >= 0.0)
-    sample_offset = render_start;
-  else
-    sample_offset = render_stop;
-
-  GST_DEBUG_OBJECT (ringbuffer, "rendering at %" G_GUINT64_FORMAT " %d/%d",
-      sample_offset, samples, out_samples);
-
-  /* we need to accumulate over different runs for when we get interrupted */
-  accum = 0;
-  align_next = TRUE;
-  do {
-    written =
-        gst_ring_buffer_commit_full (rbuf, &sample_offset, data, samples,
-        out_samples, &accum);
-
-    GST_DEBUG_OBJECT (ringbuffer, "wrote %u of %u", written, samples);
-    /* if we wrote all, we're done */
-    if (written == samples)
-      break;
-
-    GST_OBJECT_LOCK (ringbuffer);
-    if (ringbuffer->flushing)
-      goto flushing;
-    GST_OBJECT_UNLOCK (ringbuffer);
-
-    /* if we got interrupted, we cannot assume that the next sample should
-     * be aligned to this one */
-    align_next = FALSE;
-
-    samples -= written;
-    data += written * bps;
-  } while (TRUE);
-
-  if (align_next)
-    ringbuffer->next_sample = sample_offset;
-  else
-    ringbuffer->next_sample = -1;
-
-  GST_DEBUG_OBJECT (ringbuffer, "next sample expected at %" G_GUINT64_FORMAT,
-      ringbuffer->next_sample);
-
-  if (GST_CLOCK_TIME_IS_VALID (stop) && stop >= ringbuffer->sink_segment.stop) {
-    GST_DEBUG_OBJECT (ringbuffer,
-        "start playback because we are at the end of segment");
-    gst_ring_buffer_start (rbuf);
-  }
-
-  return GST_FLOW_OK;
-
-  /* SPECIAL cases */
-out_of_segment:
-  {
-    GST_DEBUG_OBJECT (ringbuffer,
-        "dropping sample out of segment time %" GST_TIME_FORMAT ", start %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (time),
-        GST_TIME_ARGS (ringbuffer->sink_segment.start));
-    return GST_FLOW_OK;
-  }
-  /* ERRORS */
-wrong_state:
-  {
-    GST_DEBUG_OBJECT (ringbuffer, "ringbuffer not negotiated");
-    GST_ELEMENT_ERROR (ringbuffer, STREAM, FORMAT, (NULL),
-        ("ringbuffer not negotiated."));
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-wrong_size:
-  {
-    GST_DEBUG_OBJECT (ringbuffer, "wrong size");
-    GST_ELEMENT_ERROR (ringbuffer, STREAM, WRONG_TYPE,
-        (NULL), ("ringbuffer received buffer of wrong size."));
-    return GST_FLOW_ERROR;
-  }
-flushing:
-  {
-    GST_DEBUG_OBJECT (ringbuffer, "ringbuffer is flushing");
-    GST_OBJECT_UNLOCK (ringbuffer);
-    return GST_FLOW_FLUSHING;
-  }
-}
-
-static GstFlowReturn
-gst_audio_ringbuffer_chain (GstPad * pad, GstBuffer * buffer)
-{
-  GstFlowReturn res;
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (GST_OBJECT_PARENT (pad));
-
-  if (ringbuffer->pushing) {
-    GST_DEBUG_OBJECT (ringbuffer, "proxy pushing buffer");
-    res = gst_pad_push (ringbuffer->srcpad, buffer);
-  } else {
-    GST_DEBUG_OBJECT (ringbuffer, "render buffer in ringbuffer");
-    res = gst_audio_ringbuffer_render (ringbuffer, buffer);
-  }
-
-  return res;
-}
-
-static gboolean
-gst_audio_ringbuffer_handle_src_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res = TRUE;
-  GstAudioRingbuffer *ringbuffer = GST_AUDIO_RINGBUFFER (GST_PAD_PARENT (pad));
-
-  /* just forward upstream */
-  res = gst_pad_push_event (ringbuffer->sinkpad, event);
-
-  return res;
-}
-
-static gboolean
-gst_audio_ringbuffer_handle_src_query (GstPad * pad, GstQuery * query)
-{
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (GST_PAD_PARENT (pad));
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_POSITION:
-      break;
-    case GST_QUERY_DURATION:
-      break;
-    case GST_QUERY_BUFFERING:
-      break;
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_audio_ringbuffer_get_range (GstPad * pad, guint64 offset, guint length,
-    GstBuffer ** buffer)
-{
-  GstAudioRingbuffer *ringbuffer;
-  GstRingBuffer *rbuf;
-  GstFlowReturn ret;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER_CAST (gst_pad_get_parent (pad));
-
-  rbuf = ringbuffer->buffer;
-
-  if (ringbuffer->pulling) {
-    GST_DEBUG_OBJECT (ringbuffer, "proxy pulling range");
-    ret = gst_pad_pull_range (ringbuffer->sinkpad, offset, length, buffer);
-  } else {
-    guint8 *data;
-    guint len;
-    guint64 sample;
-    gint bps, segsize, segtotal, sps;
-    gint sampleslen, segdone;
-    gint readseg, sampleoff;
-    guint8 *dest;
-
-    GST_DEBUG_OBJECT (ringbuffer,
-        "pulling data at %" G_GUINT64_FORMAT ", length %u", offset, length);
-
-    if (offset != ringbuffer->src_segment.last_stop) {
-      GST_DEBUG_OBJECT (ringbuffer, "expected offset %" G_GINT64_FORMAT,
-          ringbuffer->src_segment.last_stop);
-    }
-
-    /* first wait till we have something in the ringbuffer and it 
-     * is running */
-    GST_OBJECT_LOCK (ringbuffer);
-    if (ringbuffer->flushing)
-      goto flushing;
-
-    while (ringbuffer->waiting) {
-      GST_DEBUG_OBJECT (ringbuffer, "waiting for unlock");
-      g_cond_wait (ringbuffer->cond, GST_OBJECT_GET_LOCK (ringbuffer));
-      GST_DEBUG_OBJECT (ringbuffer, "unlocked");
-
-      if (ringbuffer->flushing)
-        goto flushing;
-    }
-    GST_OBJECT_UNLOCK (ringbuffer);
-
-    bps = rbuf->spec.bytes_per_sample;
-
-    if (G_UNLIKELY (length % bps) != 0)
-      goto wrong_size;
-
-    segsize = rbuf->spec.segsize;
-    segtotal = rbuf->spec.segtotal;
-    sps = rbuf->samples_per_seg;
-    dest = GST_BUFFER_DATA (rbuf->data);
-
-    sample = offset / bps;
-    len = length / bps;
-
-    *buffer = gst_buffer_new_and_alloc (length);
-    data = GST_BUFFER_DATA (*buffer);
-
-    while (len) {
-      gint diff;
-
-      /* figure out the segment and the offset inside the segment where
-       * the sample should be read from. */
-      readseg = sample / sps;
-      sampleoff = (sample % sps);
-
-      segdone = g_atomic_int_get (&rbuf->segdone) - rbuf->segbase;
-
-      diff = readseg - segdone;
-
-      /* we can read now */
-      readseg = readseg % segtotal;
-      sampleslen = MIN (sps - sampleoff, len);
-
-      GST_DEBUG_OBJECT (ringbuffer,
-          "read @%p seg %d, off %d, sampleslen %d, diff %d",
-          dest + readseg * segsize, readseg, sampleoff, sampleslen, diff);
-
-      memcpy (data, dest + (readseg * segsize) + (sampleoff * bps),
-          (sampleslen * bps));
-
-      if (diff > 0)
-        gst_ring_buffer_advance (rbuf, diff);
-
-      len -= sampleslen;
-      sample += sampleslen;
-      data += sampleslen * bps;
-    }
-
-    ringbuffer->src_segment.last_stop += length;
-
-    ret = GST_FLOW_OK;
-  }
-
-  gst_object_unref (ringbuffer);
-
-  return ret;
-
-  /* ERRORS */
-flushing:
-  {
-    GST_DEBUG_OBJECT (ringbuffer, "we are flushing");
-    GST_OBJECT_UNLOCK (ringbuffer);
-    gst_object_unref (ringbuffer);
-    return GST_FLOW_FLUSHING;
-  }
-wrong_size:
-  {
-    GST_DEBUG_OBJECT (ringbuffer, "wrong size");
-    GST_ELEMENT_ERROR (ringbuffer, STREAM, WRONG_TYPE,
-        (NULL), ("asked to pull buffer of wrong size."));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static gboolean
-gst_audio_ringbuffer_src_checkgetrange_function (GstPad * pad)
-{
-  gboolean ret;
-
-  /* we can always operate in pull mode */
-  ret = TRUE;
-
-  return ret;
-}
-
-/* sink currently only operates in push mode */
-static gboolean
-gst_audio_ringbuffer_sink_activate_push (GstPad * pad, gboolean active)
-{
-  gboolean result = TRUE;
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (gst_pad_get_parent (pad));
-
-  if (active) {
-    GST_DEBUG_OBJECT (ringbuffer, "activating push mode");
-    ringbuffer->is_eos = FALSE;
-    ringbuffer->pulling = FALSE;
-  } else {
-    /* unblock chain function */
-    GST_DEBUG_OBJECT (ringbuffer, "deactivating push mode");
-    ringbuffer->pulling = FALSE;
-  }
-
-  gst_object_unref (ringbuffer);
-
-  return result;
-}
-
-/* src operating in push mode, we will proxy the push from upstream, basically
- * acting as a passthrough element. */
-static gboolean
-gst_audio_ringbuffer_src_activate_push (GstPad * pad, gboolean active)
-{
-  gboolean result = FALSE;
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (gst_pad_get_parent (pad));
-
-  if (active) {
-    GST_DEBUG_OBJECT (ringbuffer, "activating push mode");
-    ringbuffer->is_eos = FALSE;
-    ringbuffer->pushing = TRUE;
-    ringbuffer->pulling = FALSE;
-    result = TRUE;
-  } else {
-    GST_DEBUG_OBJECT (ringbuffer, "deactivating push mode");
-    ringbuffer->pushing = FALSE;
-    ringbuffer->pulling = FALSE;
-    result = TRUE;
-  }
-
-  gst_object_unref (ringbuffer);
-
-  return result;
-}
-
-/* pull mode, downstream will call our getrange function */
-static gboolean
-gst_audio_ringbuffer_src_activate_pull (GstPad * pad, gboolean active)
-{
-  gboolean result;
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (gst_pad_get_parent (pad));
-
-  if (active) {
-    GST_DEBUG_OBJECT (ringbuffer, "activating pull mode");
-
-    /* try to activate upstream in pull mode as well. If it fails, no problems,
-     * we'll be activated in push mode. Remember that we are pulling-through */
-    ringbuffer->pulling = gst_pad_activate_pull (ringbuffer->sinkpad, active);
-
-    ringbuffer->is_eos = FALSE;
-    ringbuffer->waiting = TRUE;
-    ringbuffer->flushing = FALSE;
-    gst_segment_init (&ringbuffer->src_segment, GST_FORMAT_BYTES);
-    result = TRUE;
-  } else {
-    GST_DEBUG_OBJECT (ringbuffer, "deactivating pull mode");
-
-    if (ringbuffer->pulling)
-      gst_pad_activate_pull (ringbuffer->sinkpad, active);
-
-    ringbuffer->pulling = FALSE;
-    ringbuffer->waiting = FALSE;
-    ringbuffer->flushing = TRUE;
-    result = TRUE;
-  }
-  gst_object_unref (ringbuffer);
-
-  return result;
-}
-
-static GstStateChangeReturn
-gst_audio_ringbuffer_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstAudioRingbuffer *ringbuffer;
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (ringbuffer->buffer == NULL) {
-        ringbuffer->buffer = gst_int_ring_buffer_new ();
-        gst_object_set_parent (GST_OBJECT (ringbuffer->buffer),
-            GST_OBJECT (ringbuffer));
-        gst_ring_buffer_open_device (ringbuffer->buffer);
-      }
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      ringbuffer->next_sample = -1;
-      ringbuffer->last_align = -1;
-      gst_ring_buffer_set_flushing (ringbuffer->buffer, FALSE);
-      gst_ring_buffer_may_start (ringbuffer->buffer, TRUE);
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      GST_OBJECT_LOCK (ringbuffer);
-      ringbuffer->flushing = TRUE;
-      ringbuffer->waiting = FALSE;
-      g_cond_broadcast (ringbuffer->cond);
-      GST_OBJECT_UNLOCK (ringbuffer);
-
-      gst_ring_buffer_set_flushing (ringbuffer->buffer, TRUE);
-      gst_ring_buffer_may_start (ringbuffer->buffer, FALSE);
-      break;
-    default:
-      break;
-  }
-
-  ret =
-      GST_ELEMENT_CLASS (elem_parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_ring_buffer_activate (ringbuffer->buffer, FALSE);
-      gst_ring_buffer_release (ringbuffer->buffer);
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      if (ringbuffer->buffer != NULL) {
-        gst_ring_buffer_close_device (ringbuffer->buffer);
-        gst_object_unparent (GST_OBJECT (ringbuffer->buffer));
-        ringbuffer->buffer = NULL;
-      }
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_audio_ringbuffer_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec)
-{
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (object);
-
-  switch (prop_id) {
-    case PROP_BUFFER_TIME:
-      ringbuffer->buffer_time = g_value_get_int64 (value);
-      break;
-    case PROP_SEGMENT_TIME:
-      ringbuffer->segment_time = g_value_get_int64 (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_audio_ringbuffer_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec)
-{
-  GstAudioRingbuffer *ringbuffer;
-
-  ringbuffer = GST_AUDIO_RINGBUFFER (object);
-
-  switch (prop_id) {
-    case PROP_BUFFER_TIME:
-      g_value_set_int64 (value, ringbuffer->buffer_time);
-      break;
-    case PROP_SEGMENT_TIME:
-      g_value_set_int64 (value, ringbuffer->segment_time);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (audioringbuffer_debug, "audioringbuffer", 0,
-      "Audio ringbuffer element");
-
-#ifdef ENABLE_NLS
-  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
-      LOCALEDIR);
-  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-#endif /* ENABLE_NLS */
-
-  return gst_element_register (plugin, "audioringbuffer", GST_RANK_NONE,
-      GST_TYPE_AUDIO_RINGBUFFER);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    audioringbuffer,
-    "An audio ringbuffer", plugin_init, VERSION, GST_LICENSE,
-    GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/audiobuffer/meson.build b/gst/audiobuffer/meson.build
deleted file mode 100644 (file)
index 0edbbde..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-audiobuffer_sources = [
-  'gstaudioringbuffer.c',
-]
-
-gstaudiobuffer = library('gstaudiobuffer',
-  audiobuffer_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc, libsinc],
-  dependencies : [gstbase_dep, gstaudio_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/cdxaparse/Makefile.am b/gst/cdxaparse/Makefile.am
deleted file mode 100644 (file)
index 0a69ec7..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-plugin_LTLIBRARIES = libgstcdxaparse.la
-
-libgstcdxaparse_la_SOURCES = \
-       gstcdxaparse.c \
-       gstvcdparse.c
-
-
-noinst_HEADERS = \
-       gstcdxaparse.h \
-       gstvcdparse.h
-
-libgstcdxaparse_la_CFLAGS = \
-       $(GST_CFLAGS) \
-       $(GST_BASE_CFLAGS) \
-       $(GST_PLUGINS_BASE_CFLAGS)
-
-libgstcdxaparse_la_LIBADD = \
-       $(GST_LIBS) \
-       $(GST_BASE_LIBS) \
-       $(GST_PLUGINS_BASE_LIBS) \
-       -lgstriff-@GST_API_VERSION@
-
-libgstcdxaparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstcdxaparse_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/gst/cdxaparse/gstcdxaparse.c b/gst/cdxaparse/gstcdxaparse.c
deleted file mode 100644 (file)
index 4334362..0000000
+++ /dev/null
@@ -1,585 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *               <2002> Wim Taymans <wim.taymans@chello.be>
- *               <2006> Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GLib versions (>= 2.31.0) */
-#define GLIB_DISABLE_DEPRECATION_WARNINGS
-
-#include <string.h>
-
-#include "gstcdxaparse.h"
-#include "gstvcdparse.h"
-
-#include <gst/riff/riff-ids.h>
-#include <gst/riff/riff-read.h>
-
-GST_DEBUG_CATEGORY (vcdparse_debug);
-
-GST_DEBUG_CATEGORY_STATIC (cdxaparse_debug);
-#define GST_CAT_DEFAULT cdxaparse_debug
-
-static gboolean gst_cdxa_parse_sink_activate (GstPad * sinkpad);
-static void gst_cdxa_parse_loop (GstPad * sinkpad);
-static gboolean gst_cdxa_parse_sink_activate_pull (GstPad * sinkpad,
-    gboolean active);
-static GstStateChangeReturn gst_cdxa_parse_change_state (GstElement * element,
-    GstStateChange transition);
-static gboolean gst_cdxa_parse_src_event (GstPad * srcpad, GstEvent * event);
-static gboolean gst_cdxa_parse_src_query (GstPad * srcpad, GstQuery * query);
-
-static GstStaticPadTemplate sink_template_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-cdxa")
-    );
-
-static GstStaticPadTemplate src_template_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/mpeg, " "systemstream = (boolean) TRUE")
-    );
-
-GST_BOILERPLATE (GstCDXAParse, gst_cdxa_parse, GstElement, GST_TYPE_ELEMENT);
-
-static void
-gst_cdxa_parse_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_set_static_metadata (element_class, "(S)VCD parser",
-      "Codec/Parser",
-      "Parse a .dat file from (S)VCD into raw MPEG-1",
-      "Wim Taymans <wim.taymans@tvd.be>");
-
-  /* register src pads */
-  gst_element_class_add_static_pad_template (element_class,
-      &sink_template_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &src_template_factory);
-}
-
-static void
-gst_cdxa_parse_class_init (GstCDXAParseClass * klass)
-{
-  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_cdxa_parse_change_state);
-}
-
-static void
-gst_cdxa_parse_init (GstCDXAParse * cdxaparse, GstCDXAParseClass * klass)
-{
-  GstCaps *caps;
-
-  cdxaparse->sinkpad =
-      gst_pad_new_from_static_template (&sink_template_factory, "sink");
-  gst_pad_set_activate_function (cdxaparse->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_cdxa_parse_sink_activate));
-  gst_pad_set_activatepull_function (cdxaparse->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_cdxa_parse_sink_activate_pull));
-
-  gst_element_add_pad (GST_ELEMENT (cdxaparse), cdxaparse->sinkpad);
-
-  cdxaparse->srcpad =
-      gst_pad_new_from_static_template (&src_template_factory, "src");
-
-  gst_pad_set_event_function (cdxaparse->srcpad,
-      GST_DEBUG_FUNCPTR (gst_cdxa_parse_src_event));
-  gst_pad_set_query_function (cdxaparse->srcpad,
-      GST_DEBUG_FUNCPTR (gst_cdxa_parse_src_query));
-
-  caps = gst_caps_new_simple ("video/mpeg",
-      "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
-  gst_pad_use_fixed_caps (cdxaparse->srcpad);
-  gst_pad_set_caps (cdxaparse->srcpad, caps);
-  gst_caps_unref (caps);
-  gst_element_add_pad (GST_ELEMENT (cdxaparse), cdxaparse->srcpad);
-
-
-  cdxaparse->state = GST_CDXA_PARSE_START;
-  cdxaparse->offset = 0;
-  cdxaparse->datasize = 0;
-  cdxaparse->datastart = -1;
-}
-
-#define HAVE_FOURCC(data,fourcc)  (GST_READ_UINT32_LE((data))==(fourcc))
-
-static gboolean
-gst_cdxa_parse_stream_init (GstCDXAParse * cdxa)
-{
-  GstFlowReturn flow_ret;
-  GstBuffer *buf = NULL;
-  guint8 *data;
-
-  flow_ret = gst_pad_pull_range (cdxa->sinkpad, cdxa->offset, 12, &buf);
-  if (flow_ret != GST_FLOW_OK)
-    return flow_ret;
-
-  if (GST_BUFFER_SIZE (buf) < 12)
-    goto wrong_type;
-
-  data = GST_BUFFER_DATA (buf);
-  if (!HAVE_FOURCC (data, GST_RIFF_TAG_RIFF)) {
-    GST_ERROR_OBJECT (cdxa, "Not a RIFF file");
-    goto wrong_type;
-  }
-
-  if (!HAVE_FOURCC (data + 8, GST_RIFF_RIFF_CDXA)) {
-    GST_ERROR_OBJECT (cdxa, "RIFF file does not have CDXA content");
-    goto wrong_type;
-  }
-
-  cdxa->offset += 12;
-  gst_buffer_unref (buf);
-
-  return TRUE;
-
-wrong_type:
-
-  GST_ELEMENT_ERROR (cdxa, STREAM, WRONG_TYPE, (NULL), (NULL));
-  gst_buffer_unref (buf);
-  return FALSE;
-}
-
-static gboolean
-gst_cdxa_parse_sink_activate (GstPad * sinkpad)
-{
-  GstCDXAParse *cdxa = GST_CDXA_PARSE (GST_PAD_PARENT (sinkpad));
-
-  if (!gst_pad_check_pull_range (sinkpad) ||
-      !gst_pad_activate_pull (sinkpad, TRUE)) {
-    GST_DEBUG_OBJECT (cdxa, "No pull mode");
-    return FALSE;
-  }
-
-  /* If we can activate pull_range upstream, then read the header
-   * and see if it's really a RIFF CDXA file. */
-  GST_DEBUG_OBJECT (cdxa, "Activated pull mode. Reading RIFF header");
-  if (!gst_cdxa_parse_stream_init (cdxa))
-    return FALSE;
-
-  return TRUE;
-}
-
-static gboolean
-gst_cdxa_parse_sink_activate_pull (GstPad * sinkpad, gboolean active)
-{
-  if (active) {
-    /* if we have a scheduler we can start the task */
-    gst_pad_start_task (sinkpad, (GstTaskFunction) gst_cdxa_parse_loop,
-        sinkpad, NULL);
-  } else {
-    gst_pad_stop_task (sinkpad);
-  }
-
-  return TRUE;
-}
-
-/*
- * A sector is 2352 bytes long and is composed of:
- * 
- * !  sync    !  header ! subheader ! data ...   ! edc     !
- * ! 12 bytes ! 4 bytes ! 8 bytes   ! 2324 bytes ! 4 bytes !
- * !-------------------------------------------------------!
- * 
- * We strip the data out of it and send it to the srcpad.
- * 
- * sync : 00 FF FF FF FF FF FF FF FF FF FF 00
- * header : hour minute second mode
- * sub-header : track channel sub_mode coding repeat (4 bytes)
- * edc : checksum
- */
-
-/* FIXME: use define from gstcdxastrip.h */
-#define GST_CDXA_SECTOR_SIZE   2352
-#define GST_CDXA_DATA_SIZE     2324
-#define GST_CDXA_HEADER_SIZE   24
-
-/* FIXME: use version from gstcdxastrip.c */
-static GstBuffer *
-gst_cdxa_parse_strip (GstBuffer * buf)
-{
-  GstBuffer *sub;
-
-  g_assert (GST_BUFFER_SIZE (buf) >= GST_CDXA_SECTOR_SIZE);
-
-  /* Skip CDXA headers, only keep data.
-   * FIXME: check sync, resync, ... */
-  sub = gst_buffer_create_sub (buf, GST_CDXA_HEADER_SIZE, GST_CDXA_DATA_SIZE);
-  gst_buffer_unref (buf);
-
-  return sub;
-}
-
-/* -1 = no sync (discard buffer),
- * otherwise offset indicates syncpoint in buffer.
- */
-
-static gint
-gst_cdxa_parse_sync (GstBuffer * buf)
-{
-  const guint8 sync_marker[12] = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
-  };
-  guint8 *data;
-  guint size;
-
-  size = GST_BUFFER_SIZE (buf);
-  data = GST_BUFFER_DATA (buf);
-
-  while (size >= 12) {
-    if (memcmp (data, sync_marker, 12) == 0) {
-      return (gint) (data - GST_BUFFER_DATA (buf));
-    }
-    --size;
-    ++data;
-  }
-  return -1;
-}
-
-static void
-gst_cdxa_parse_loop (GstPad * sinkpad)
-{
-  GstFlowReturn flow_ret;
-  GstCDXAParse *cdxa;
-  GstBuffer *buf = NULL;
-  gint sync_offset = -1;
-
-  cdxa = GST_CDXA_PARSE (GST_PAD_PARENT (sinkpad));
-
-  if (cdxa->datasize <= 0) {
-    GstFormat format = GST_FORMAT_BYTES;
-    GstPad *peer;
-
-    if ((peer = gst_pad_get_peer (sinkpad))) {
-      if (!gst_pad_query_duration (peer, &format, &cdxa->datasize)) {
-        GST_DEBUG_OBJECT (cdxa, "Failed to query upstream size!");
-        gst_object_unref (peer);
-        goto pause;
-      }
-      gst_object_unref (peer);
-    }
-    GST_DEBUG_OBJECT (cdxa, "Upstream size: %" G_GINT64_FORMAT, cdxa->datasize);
-  }
-
-  do {
-    guint req;
-
-    req = 8 + GST_CDXA_SECTOR_SIZE;     /* riff chunk header = 8 bytes */
-
-    buf = NULL;
-    flow_ret = gst_pad_pull_range (cdxa->sinkpad, cdxa->offset, req, &buf);
-
-    if (flow_ret != GST_FLOW_OK) {
-      GST_DEBUG_OBJECT (cdxa, "Pull flow: %s", gst_flow_get_name (flow_ret));
-      goto pause;
-    }
-
-    if (GST_BUFFER_SIZE (buf) < req) {
-      GST_DEBUG_OBJECT (cdxa, "Short read, only got %u/%u bytes",
-          GST_BUFFER_SIZE (buf), req);
-      goto eos;
-    }
-
-    sync_offset = gst_cdxa_parse_sync (buf);
-    gst_buffer_unref (buf);
-    buf = NULL;
-
-    if (sync_offset >= 0)
-      break;
-
-    cdxa->offset += req;
-    cdxa->bytes_skipped += req;
-  } while (1);
-
-  cdxa->offset += sync_offset;
-  cdxa->bytes_skipped += sync_offset;
-
-  /* first sync frame? */
-  if (cdxa->datastart < 0) {
-    GST_LOG_OBJECT (cdxa, "datastart=0x%" G_GINT64_MODIFIER "x", cdxa->offset);
-    cdxa->datastart = cdxa->offset;
-    cdxa->bytes_skipped = 0;
-    cdxa->bytes_sent = 0;
-  }
-
-  GST_DEBUG_OBJECT (cdxa, "pulling buffer at offset 0x%" G_GINT64_MODIFIER "x",
-      cdxa->offset);
-
-  buf = NULL;
-  flow_ret = gst_pad_pull_range (cdxa->sinkpad, cdxa->offset,
-      GST_CDXA_SECTOR_SIZE, &buf);
-
-  if (flow_ret != GST_FLOW_OK) {
-    GST_DEBUG_OBJECT (cdxa, "Flow: %s", gst_flow_get_name (flow_ret));
-    goto pause;
-  }
-
-  if (GST_BUFFER_SIZE (buf) < GST_CDXA_SECTOR_SIZE) {
-    GST_DEBUG_OBJECT (cdxa, "Short read, only got %u/%u bytes",
-        GST_BUFFER_SIZE (buf), GST_CDXA_SECTOR_SIZE);
-    goto eos;
-  }
-
-  buf = gst_cdxa_parse_strip (buf);
-
-  GST_DEBUG_OBJECT (cdxa, "pushing buffer %p", buf);
-  gst_buffer_set_caps (buf, GST_PAD_CAPS (cdxa->srcpad));
-
-  cdxa->offset += GST_BUFFER_SIZE (buf);
-  cdxa->bytes_sent += GST_BUFFER_SIZE (buf);
-
-  flow_ret = gst_pad_push (cdxa->srcpad, buf);
-  if (flow_ret != GST_FLOW_OK) {
-    GST_DEBUG_OBJECT (cdxa, "Push flow: %s", gst_flow_get_name (flow_ret));
-    goto pause;
-  }
-
-  return;
-
-eos:
-  {
-    GST_DEBUG_OBJECT (cdxa, "Sending EOS");
-    if (buf)
-      gst_buffer_unref (buf);
-    buf = NULL;
-    gst_pad_push_event (cdxa->srcpad, gst_event_new_eos ());
-    /* fallthrough */
-  }
-pause:
-  {
-    GST_DEBUG_OBJECT (cdxa, "Pausing");
-    gst_pad_pause_task (cdxa->sinkpad);
-    return;
-  }
-}
-
-static gint64
-gst_cdxa_parse_convert_src_to_sink_offset (GstCDXAParse * cdxa, gint64 src)
-{
-  gint64 sink;
-
-  sink = src + cdxa->datastart;
-  sink = gst_util_uint64_scale (sink, GST_CDXA_SECTOR_SIZE, GST_CDXA_DATA_SIZE);
-
-  /* FIXME: take into account skipped bytes */
-
-  GST_DEBUG_OBJECT (cdxa, "src offset=%" G_GINT64_FORMAT ", sink offset=%"
-      G_GINT64_FORMAT, src, sink);
-
-  return sink;
-}
-
-static gint64
-gst_cdxa_parse_convert_sink_to_src_offset (GstCDXAParse * cdxa, gint64 sink)
-{
-  gint64 src;
-
-  src = sink - cdxa->datastart;
-  src = gst_util_uint64_scale (src, GST_CDXA_DATA_SIZE, GST_CDXA_SECTOR_SIZE);
-
-  /* FIXME: take into account skipped bytes */
-
-  GST_DEBUG_OBJECT (cdxa, "sink offset=%" G_GINT64_FORMAT ", src offset=%"
-      G_GINT64_FORMAT, sink, src);
-
-  return src;
-}
-
-static gboolean
-gst_cdxa_parse_do_seek (GstCDXAParse * cdxa, GstEvent * event)
-{
-  GstSeekFlags flags;
-  GstSeekType start_type;
-  GstFormat format;
-  gint64 start, off, upstream_size;
-
-  gst_event_parse_seek (event, NULL, &format, &flags, &start_type, &start,
-      NULL, NULL);
-
-  if (format != GST_FORMAT_BYTES) {
-    GST_DEBUG_OBJECT (cdxa, "Can only handle seek in BYTES format");
-    return FALSE;
-  }
-
-  if (start_type != GST_SEEK_TYPE_SET) {
-    GST_DEBUG_OBJECT (cdxa, "Can only handle seek from start (SEEK_TYPE_SET)");
-    return FALSE;
-  }
-
-  GST_OBJECT_LOCK (cdxa);
-  off = gst_cdxa_parse_convert_src_to_sink_offset (cdxa, start);
-  upstream_size = cdxa->datasize;
-  GST_OBJECT_UNLOCK (cdxa);
-
-  if (off >= upstream_size) {
-    GST_DEBUG_OBJECT (cdxa, "Invalid target offset %" G_GINT64_FORMAT ", file "
-        "is only %" G_GINT64_FORMAT " bytes in size", off, upstream_size);
-    return FALSE;
-  }
-
-  /* unlock upstream pull_range */
-  gst_pad_push_event (cdxa->sinkpad, gst_event_new_flush_start ());
-
-  /* make sure our loop function exits */
-  gst_pad_push_event (cdxa->srcpad, gst_event_new_flush_start ());
-
-  /* wait for streaming to finish */
-  GST_PAD_STREAM_LOCK (cdxa->sinkpad);
-
-  /* prepare for streaming again */
-  gst_pad_push_event (cdxa->sinkpad, gst_event_new_flush_stop ());
-  gst_pad_push_event (cdxa->srcpad, gst_event_new_flush_stop ());
-
-  gst_pad_push_event (cdxa->srcpad,
-      gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_BYTES,
-          start, GST_CLOCK_TIME_NONE, 0));
-
-  GST_OBJECT_LOCK (cdxa);
-  cdxa->offset = off;
-  GST_OBJECT_UNLOCK (cdxa);
-
-  /* and restart */
-  gst_pad_start_task (cdxa->sinkpad,
-      (GstTaskFunction) gst_cdxa_parse_loop, cdxa->sinkpad, NULL);
-
-  GST_PAD_STREAM_UNLOCK (cdxa->sinkpad);
-  return TRUE;
-}
-
-static gboolean
-gst_cdxa_parse_src_event (GstPad * srcpad, GstEvent * event)
-{
-  GstCDXAParse *cdxa = GST_CDXA_PARSE (gst_pad_get_parent (srcpad));
-  gboolean res = FALSE;
-
-  GST_DEBUG_OBJECT (cdxa, "Handling %s event", GST_EVENT_TYPE_NAME (event));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-      res = gst_cdxa_parse_do_seek (cdxa, event);
-      break;
-    default:
-      res = gst_pad_event_default (srcpad, event);
-      break;
-  }
-
-  gst_object_unref (cdxa);
-  return res;
-}
-
-static gboolean
-gst_cdxa_parse_src_query (GstPad * srcpad, GstQuery * query)
-{
-  GstCDXAParse *cdxa = GST_CDXA_PARSE (gst_pad_get_parent (srcpad));
-  gboolean res = FALSE;
-
-  GST_DEBUG_OBJECT (cdxa, "Handling %s query",
-      gst_query_type_get_name (GST_QUERY_TYPE (query)));
-
-  res = gst_pad_query_default (srcpad, query);
-
-  if (res) {
-    GstFormat format;
-    gint64 val;
-
-    switch (GST_QUERY_TYPE (query)) {
-      case GST_QUERY_DURATION:
-        gst_query_parse_duration (query, &format, &val);
-        if (format == GST_FORMAT_BYTES) {
-          val = gst_cdxa_parse_convert_sink_to_src_offset (cdxa, val);
-          gst_query_set_duration (query, format, val);
-        }
-        break;
-      case GST_QUERY_POSITION:
-        gst_query_parse_position (query, &format, &val);
-        if (format == GST_FORMAT_BYTES) {
-          val = gst_cdxa_parse_convert_sink_to_src_offset (cdxa, val);
-          gst_query_set_position (query, format, val);
-        }
-        break;
-      default:
-        break;
-    }
-  }
-
-  gst_object_unref (cdxa);
-  return res;
-}
-
-static GstStateChangeReturn
-gst_cdxa_parse_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstCDXAParse *cdxa = GST_CDXA_PARSE (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      cdxa->state = GST_CDXA_PARSE_START;
-      break;
-    default:
-      break;
-  }
-
-  if (GST_ELEMENT_CLASS (parent_class)->change_state)
-    ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      cdxa->state = GST_CDXA_PARSE_START;
-      cdxa->datasize = 0;
-      cdxa->datastart = -1;
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (cdxaparse_debug, "cdxaparse", 0, "CDXA Parser");
-  GST_DEBUG_CATEGORY_INIT (vcdparse_debug, "vcdparse", 0, "VCD Parser");
-
-  if (!gst_element_register (plugin, "cdxaparse", GST_RANK_PRIMARY,
-          GST_TYPE_CDXA_PARSE))
-    return FALSE;
-  if (!gst_element_register (plugin, "vcdparse", GST_RANK_PRIMARY,
-          GST_TYPE_VCD_PARSE))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    cdxaparse,
-    "Parse a .dat file (VCD) into raw mpeg1",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/cdxaparse/gstcdxaparse.h b/gst/cdxaparse/gstcdxaparse.h
deleted file mode 100644 (file)
index c54d445..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *               <2002> Wim Tayans <wim.taymans@chello.be>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_CDXA_PARSE_H__
-#define __GST_CDXA_PARSE_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_CDXA_PARSE \
-  (gst_cdxa_parse_get_type())
-#define GST_CDXA_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CDXA_PARSE,GstCDXAParse))
-#define GST_CDXA_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CDXA_PARSE,GstCDXAParseClass))
-#define GST_IS_CDXA_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CDXA_PARSE))
-#define GST_IS_CDXA_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CDXA_PARSE))
-
-typedef enum {
-  GST_CDXA_PARSE_START,
-  GST_CDXA_PARSE_FMT,
-  GST_CDXA_PARSE_OTHER,
-  GST_CDXA_PARSE_DATA,
-} GstCDXAParseState;
-
-typedef struct _GstCDXAParse GstCDXAParse;
-typedef struct _GstCDXAParseClass GstCDXAParseClass;
-
-struct _GstCDXAParse {
-  GstElement  element;
-
-  /* pads */
-  GstPad    *sinkpad;
-  GstPad    *srcpad;
-
-  /* CDXA decoding state */
-  GstCDXAParseState state;
-
-  gint64     offset;    /* current byte offset in file     */
-  gint64     datasize;  /* upstream size in bytes          */
-  gint64     datastart; /* byte offset of first frame sync */
-  gint64     bytes_skipped;
-  gint64     bytes_sent;
-};
-
-struct _GstCDXAParseClass {
-  GstElementClass parent_class;
-};
-
-GType          gst_cdxa_parse_get_type         (void);
-
-G_END_DECLS
-
-#endif /* __GST_CDXA_PARSE_H__ */
-
diff --git a/gst/cdxaparse/gstvcdparse.c b/gst/cdxaparse/gstvcdparse.c
deleted file mode 100644 (file)
index 424e839..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-/* GStreamer CDXA sync strippper / VCD parser
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (C) 2008 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include "gstvcdparse.h"
-
-GST_DEBUG_CATEGORY_EXTERN (vcdparse_debug);
-#define GST_CAT_DEFAULT vcdparse_debug
-
-static gboolean gst_vcd_parse_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_vcd_parse_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_vcd_parse_src_query (GstPad * pad, GstQuery * query);
-static GstFlowReturn gst_vcd_parse_chain (GstPad * pad, GstBuffer * buf);
-static GstStateChangeReturn gst_vcd_parse_change_state (GstElement * element,
-    GstStateChange transition);
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-vcd")
-    );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/mpeg, systemstream = (boolean) TRUE")
-    );
-
-GST_BOILERPLATE (GstVcdParse, gst_vcd_parse, GstElement, GST_TYPE_ELEMENT);
-
-static void
-gst_vcd_parse_base_init (gpointer klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &sink_factory);
-  gst_element_class_add_static_pad_template (element_class, &src_factory);
-
-  gst_element_class_set_static_metadata (element_class, "(S)VCD stream parser",
-      "Codec/Parser", "Strip (S)VCD stream from its sync headers",
-      "Tim-Philipp Müller <tim centricular net>, "
-      "Ronald Bultje <rbultje@ronald.bitfreak.net>");
-}
-
-static void
-gst_vcd_parse_class_init (GstVcdParseClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  element_class->change_state = GST_DEBUG_FUNCPTR (gst_vcd_parse_change_state);
-}
-
-static void
-gst_vcd_parse_init (GstVcdParse * vcd, GstVcdParseClass * klass)
-{
-  vcd->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
-  gst_pad_set_chain_function (vcd->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_vcd_parse_chain));
-  gst_pad_set_event_function (vcd->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_vcd_parse_sink_event));
-  gst_element_add_pad (GST_ELEMENT (vcd), vcd->sinkpad);
-
-  vcd->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
-  gst_pad_set_event_function (vcd->srcpad,
-      GST_DEBUG_FUNCPTR (gst_vcd_parse_src_event));
-  gst_pad_set_query_function (vcd->srcpad,
-      GST_DEBUG_FUNCPTR (gst_vcd_parse_src_query));
-  gst_pad_use_fixed_caps (vcd->srcpad);
-  gst_pad_set_caps (vcd->srcpad,
-      gst_static_pad_template_get_caps (&src_factory));
-  gst_element_add_pad (GST_ELEMENT (vcd), vcd->srcpad);
-}
-
-/* These conversion functions assume there's no junk between sectors */
-
-static gint64
-gst_vcd_parse_get_out_offset (gint64 in_offset)
-{
-  gint64 out_offset, chunknum, rest;
-
-  if (in_offset == -1)
-    return -1;
-
-  if (G_UNLIKELY (in_offset < -1)) {
-    GST_WARNING ("unexpected/invalid in_offset %" G_GINT64_FORMAT, in_offset);
-    return in_offset;
-  }
-
-  chunknum = in_offset / GST_CDXA_SECTOR_SIZE;
-  rest = in_offset % GST_CDXA_SECTOR_SIZE;
-
-  out_offset = chunknum * GST_CDXA_DATA_SIZE;
-  if (rest > GST_CDXA_HEADER_SIZE) {
-    if (rest >= GST_CDXA_HEADER_SIZE + GST_CDXA_DATA_SIZE)
-      out_offset += GST_CDXA_DATA_SIZE;
-    else
-      out_offset += rest - GST_CDXA_HEADER_SIZE;
-  }
-
-  GST_LOG ("transformed in_offset %" G_GINT64_FORMAT " to out_offset %"
-      G_GINT64_FORMAT, in_offset, out_offset);
-
-  return out_offset;
-}
-
-static gint64
-gst_vcd_parse_get_in_offset (gint64 out_offset)
-{
-  gint64 in_offset, chunknum, rest;
-
-  if (out_offset == -1)
-    return -1;
-
-  if (G_UNLIKELY (out_offset < -1)) {
-    GST_WARNING ("unexpected/invalid out_offset %" G_GINT64_FORMAT, out_offset);
-    return out_offset;
-  }
-
-  chunknum = out_offset / GST_CDXA_DATA_SIZE;
-  rest = out_offset % GST_CDXA_DATA_SIZE;
-
-  in_offset = chunknum * GST_CDXA_SECTOR_SIZE;
-  if (rest > 0)
-    in_offset += GST_CDXA_HEADER_SIZE + rest;
-
-  GST_LOG ("transformed out_offset %" G_GINT64_FORMAT " to in_offset %"
-      G_GINT64_FORMAT, out_offset, in_offset);
-
-  return in_offset;
-}
-
-static gboolean
-gst_vcd_parse_src_query (GstPad * pad, GstQuery * query)
-{
-  GstVcdParse *vcd = GST_VCD_PARSE (gst_pad_get_parent (pad));
-  gboolean res = FALSE;
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_DURATION:{
-      GstFormat format;
-      gint64 dur;
-
-      /* first try upstream */
-      if (!gst_pad_query_default (pad, query))
-        break;
-
-      /* we can only handle BYTES */
-      gst_query_parse_duration (query, &format, &dur);
-      if (format != GST_FORMAT_BYTES)
-        break;
-
-      gst_query_set_duration (query, GST_FORMAT_BYTES,
-          gst_vcd_parse_get_out_offset (dur));
-
-      res = TRUE;
-      break;
-    }
-    case GST_QUERY_POSITION:{
-      GstFormat format;
-      gint64 pos;
-
-      /* first try upstream */
-      if (!gst_pad_query_default (pad, query))
-        break;
-
-      /* we can only handle BYTES */
-      gst_query_parse_position (query, &format, &pos);
-      if (format != GST_FORMAT_BYTES)
-        break;
-
-      gst_query_set_position (query, GST_FORMAT_BYTES,
-          gst_vcd_parse_get_out_offset (pos));
-
-      res = TRUE;
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, query);
-      break;
-  }
-
-  gst_object_unref (vcd);
-  return res;
-}
-
-static gboolean
-gst_vcd_parse_sink_event (GstPad * pad, GstEvent * event)
-{
-  GstVcdParse *vcd = GST_VCD_PARSE (gst_pad_get_parent (pad));
-  gboolean res;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_NEWSEGMENT:{
-      GstFormat format;
-      gboolean update;
-      gdouble rate, applied_rate;
-      gint64 start, stop, position;
-
-      gst_event_parse_new_segment_full (event, &update, &rate, &applied_rate,
-          &format, &start, &stop, &position);
-
-      if (format == GST_FORMAT_BYTES) {
-        gst_event_unref (event);
-        event = gst_event_new_new_segment_full (update, rate, applied_rate,
-            GST_FORMAT_BYTES, gst_vcd_parse_get_out_offset (start),
-            gst_vcd_parse_get_out_offset (stop), position);
-      } else {
-        GST_WARNING_OBJECT (vcd, "newsegment event in non-byte format");
-      }
-      res = gst_pad_event_default (pad, event);
-      break;
-    }
-    case GST_EVENT_FLUSH_START:
-      gst_adapter_clear (vcd->adapter);
-      /* fall through */
-    default:
-      res = gst_pad_event_default (pad, event);
-      break;
-  }
-
-  gst_object_unref (vcd);
-  return res;
-}
-
-static gboolean
-gst_vcd_parse_src_event (GstPad * pad, GstEvent * event)
-{
-  GstVcdParse *vcd = GST_VCD_PARSE (gst_pad_get_parent (pad));
-  gboolean res;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:{
-      GstSeekType start_type, stop_type;
-      GstSeekFlags flags;
-      GstFormat format;
-      gdouble rate;
-      gint64 start, stop;
-
-      gst_event_parse_seek (event, &rate, &format, &flags, &start_type,
-          &start, &stop_type, &stop);
-
-      if (format == GST_FORMAT_BYTES) {
-        gst_event_unref (event);
-        if (start_type != GST_SEEK_TYPE_NONE)
-          start = gst_vcd_parse_get_in_offset (start);
-        if (stop_type != GST_SEEK_TYPE_NONE)
-          stop = gst_vcd_parse_get_in_offset (stop);
-        event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, start_type,
-            start, stop_type, stop);
-      } else {
-        GST_WARNING_OBJECT (vcd, "seek event in non-byte format");
-      }
-      res = gst_pad_event_default (pad, event);
-      break;
-    }
-    default:
-      res = gst_pad_event_default (pad, event);
-      break;
-  }
-
-  gst_object_unref (vcd);
-  return res;
-}
-
-/* -1 = no sync (discard buffer),
- * otherwise offset indicates sync point in buffer */
-static gint
-gst_vcd_parse_sync (const guint8 * data, guint size)
-{
-  const guint8 sync_marker[12] = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00
-  };
-  guint off = 0;
-
-  while (size >= 12) {
-    if (memcmp (data, sync_marker, 12) == 0)
-      return off;
-
-    --size;
-    ++data;
-    ++off;
-  }
-  return -1;
-}
-
-static GstFlowReturn
-gst_vcd_parse_chain (GstPad * pad, GstBuffer * buf)
-{
-  GstVcdParse *vcd = GST_VCD_PARSE (GST_PAD_PARENT (pad));
-  GstFlowReturn flow = GST_FLOW_OK;
-
-  gst_adapter_push (vcd->adapter, buf);
-  buf = NULL;
-
-  while (gst_adapter_available (vcd->adapter) >= GST_CDXA_SECTOR_SIZE) {
-    const guint8 *data;
-    guint8 header[4 + 8];
-    gint sync_offset;
-
-    /* find sync (we could peek any size though really) */
-    data = gst_adapter_peek (vcd->adapter, GST_CDXA_SECTOR_SIZE);
-    sync_offset = gst_vcd_parse_sync (data, GST_CDXA_SECTOR_SIZE);
-    GST_LOG_OBJECT (vcd, "sync offset = %d", sync_offset);
-
-    if (sync_offset < 0) {
-      gst_adapter_flush (vcd->adapter, GST_CDXA_SECTOR_SIZE - 12);
-      continue;                 /* try again */
-    }
-
-    gst_adapter_flush (vcd->adapter, sync_offset);
-
-    if (gst_adapter_available (vcd->adapter) < GST_CDXA_SECTOR_SIZE) {
-      GST_LOG_OBJECT (vcd, "not enough data in adapter, waiting for more");
-      break;
-    }
-
-    GST_LOG_OBJECT (vcd, "have full sector");
-
-    /* have one sector: a sector is 2352 bytes long and is composed of:
-     *
-     * +-------------------------------------------------------+
-     * !  sync    !  header ! subheader ! data ...   ! edc     !
-     * ! 12 bytes ! 4 bytes ! 8 bytes   ! 2324 bytes ! 4 bytes !
-     * +-------------------------------------------------------+
-     * 
-     * We strip the data out of it and send it to the srcpad.
-     * 
-     * sync       : 00 FF FF FF FF FF FF FF FF FF FF 00
-     * header     : hour minute second mode
-     * sub-header : track channel sub_mode coding repeat (4 bytes)
-     * edc        : checksum
-     */
-
-    /* Skip CDXA header and edc footer, only keep data in the middle */
-    gst_adapter_copy (vcd->adapter, header, 12, sizeof (header));
-    gst_adapter_flush (vcd->adapter, GST_CDXA_HEADER_SIZE);
-    buf = gst_adapter_take_buffer (vcd->adapter, GST_CDXA_DATA_SIZE);
-    gst_adapter_flush (vcd->adapter, 4);
-
-    /* we could probably do something clever to keep track of buffer offsets */
-    buf = gst_buffer_make_metadata_writable (buf);
-    GST_BUFFER_OFFSET (buf) = GST_BUFFER_OFFSET_NONE;
-    GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE;
-    gst_buffer_set_caps (buf, GST_PAD_CAPS (vcd->srcpad));
-
-    flow = gst_pad_push (vcd->srcpad, buf);
-    buf = NULL;
-
-    if (G_UNLIKELY (flow != GST_FLOW_OK)) {
-      GST_DEBUG_OBJECT (vcd, "flow: %s", gst_flow_get_name (flow));
-      break;
-    }
-  }
-
-  return flow;
-}
-
-static GstStateChangeReturn
-gst_vcd_parse_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn res = GST_STATE_CHANGE_SUCCESS;
-  GstVcdParse *vcd = GST_VCD_PARSE (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      vcd->adapter = gst_adapter_new ();
-      break;
-    default:
-      break;
-  }
-
-  res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      if (vcd->adapter) {
-        g_object_unref (vcd->adapter);
-        vcd->adapter = NULL;
-      }
-      break;
-    default:
-      break;
-  }
-
-  return res;
-}
diff --git a/gst/cdxaparse/gstvcdparse.h b/gst/cdxaparse/gstvcdparse.h
deleted file mode 100644 (file)
index e47d882..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* GStreamer CDXA sync strippper / VCD parser
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (C) 2008 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_VCD_PARSE_H__
-#define __GST_VCD_PARSE_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_VCD_PARSE \
-  (gst_vcd_parse_get_type())
-#define GST_VCD_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VCD_PARSE,GstVcdParse))
-#define GST_VCD_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VCD_PARSE,GstVcdParseClass))
-#define GST_IS_VCD_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VCD_PARSE))
-#define GST_IS_VCD_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VCD_PARSE))
-
-#define GST_CDXA_SECTOR_SIZE    2352
-#define GST_CDXA_DATA_SIZE      2324
-#define GST_CDXA_HEADER_SIZE    24
-
-typedef struct _GstVcdParse GstVcdParse;
-typedef struct _GstVcdParseClass GstVcdParseClass;
-
-struct _GstVcdParse {
-  GstElement element;
-
-  GstPad     *sinkpad;
-  GstPad     *srcpad;
-  GstAdapter *adapter;
-};
-
-struct _GstVcdParseClass {
-  GstElementClass element_class;
-};
-
-GType           gst_vcd_parse_get_type  (void);
-
-G_END_DECLS
-
-#endif /* __GST_VCD_PARSE_H__ */
-
diff --git a/gst/cdxaparse/meson.build b/gst/cdxaparse/meson.build
deleted file mode 100644 (file)
index 34ef664..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-cdxaparse_sources = [
-  'gstcdxaparse.c',
-  'gstvcdparse.c',
-]
-
-gstcdxaparse = library('gstcdxaparse',
-  cdxaparse_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep, gstriff_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/dccp/Makefile.am b/gst/dccp/Makefile.am
deleted file mode 100644 (file)
index 31b6613..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# plugindir is set in configure
-
-plugin_LTLIBRARIES = libgstdccp.la
-
-# sources used to compile this plug-in
-libgstdccp_la_SOURCES = gstdccpplugin.c \
-                       gstdccp.c \
-                       gstdccpserversink.c \
-                       gstdccpserversrc.c \
-                       gstdccpclientsink.c \
-                       gstdccpclientsrc.c
-
-# flags used to compile this plugin
-libgstdccp_la_CFLAGS = $(GST_CFLAGS)
-libgstdccp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(DCCP_LIBS) $(WINSOCK2_LIBS)
-libgstdccp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstdccp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-# headers we need but don't want installed
-noinst_HEADERS = gstdccp.h \
-                 gstdccpserversink.h \
-                 gstdccpserversrc.h \
-                 gstdccpclientsink.h \
-                 gstdccpclientsrc.h \
-                 gstdccp_common.h
diff --git a/gst/dccp/gstdccp.c b/gst/dccp/gstdccp.c
deleted file mode 100644 (file)
index 9b834cf..0000000
+++ /dev/null
@@ -1,560 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdccp.h"
-
-#ifdef HAVE_FIONREAD_IN_SYS_FILIO
-#include <sys/filio.h>
-#endif
-
-/*
- * Resolves host to IP address
- * @param element - the element
- * @return a gchar pointer containing the ip address or NULL if it
- * couldn't resolve the host to a IP adress
- */
-gchar *
-gst_dccp_host_to_ip (GstElement * element, const gchar * host)
-{
-  struct hostent *hostinfo;
-  char **addrs;
-  gchar *ip;
-  struct in_addr addr;
-
-  GST_DEBUG_OBJECT (element, "resolving host %s", host);
-
-  /* first check if it already is an IP address */
-#ifndef G_OS_WIN32
-  if (inet_aton (host, &addr)) {
-#else
-  if ((addr.S_un.S_addr = inet_addr (host)) != INADDR_NONE) {
-#endif
-    ip = g_strdup (host);
-    GST_DEBUG_OBJECT (element, "resolved to IP %s", ip);
-    return ip;
-  }
-
-  /* perform a name lookup */
-  if (!(hostinfo = gethostbyname (host))) {
-    GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND, (NULL),
-        ("Could not find IP address for host \"%s\".", host));
-    return NULL;
-  }
-
-  if (hostinfo->h_addrtype != AF_INET) {
-    GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND, (NULL),
-        ("host \"%s\" is not an IP host", host));
-    return NULL;
-  }
-
-  addrs = hostinfo->h_addr_list;
-
-  /* There could be more than one IP address, but we just return the first */
-  ip = g_strdup (inet_ntoa (*(struct in_addr *) *addrs));
-
-  return ip;
-}
-
-/*
- * Read a buffer from the given socket
- *
- * @param this - the element that has the socket that will be read
- * @param socket - the socket fd that will be read
- * @param buf - the buffer with the data read from the socket
- * @return GST_FLOW_OK if the read operation was successful
- * or GST_FLOW_ERROR indicating a connection close or an error.
- * Handle it with EOS.
- */
-GstFlowReturn
-gst_dccp_read_buffer (GstElement * this, int socket, GstBuffer ** buf)
-{
-  fd_set testfds;
-  int maxfdp1;
-  gssize bytes_read;
-#ifndef G_OS_WIN32
-  int readsize;
-  struct msghdr mh;
-  struct iovec iov;
-#else
-  unsigned long readsize;
-#endif
-
-  *buf = NULL;
-
-  /* do a blocking select on the socket */
-  FD_ZERO (&testfds);
-  FD_SET (socket, &testfds);
-  maxfdp1 = socket + 1;
-
-  /* no action (0) is also an error in our case */
-  if (select (maxfdp1, &testfds, NULL, NULL, 0) <= 0) {
-    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
-        ("select failed: %s", g_strerror (errno)));
-    return GST_FLOW_ERROR;
-  }
-
-  /* ask how much is available for reading on the socket */
-#ifndef G_OS_WIN32
-  if (ioctl (socket, FIONREAD, &readsize) < 0) {
-    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
-        ("read FIONREAD value failed: %s", g_strerror (errno)));
-#else
-  if (ioctlsocket (socket, FIONREAD, &readsize) == SOCKET_ERROR) {
-    GST_ELEMENT_ERROR (this, RESOURCE, READ, (NULL),
-        ("read FIONREAD value failed: %s", g_strerror (WSAGetLastError ())));
-#endif
-    return GST_FLOW_ERROR;
-  }
-
-  if (readsize == 0) {
-    GST_DEBUG_OBJECT (this, "Got EOS on socket stream");
-    return GST_FLOW_UNEXPECTED;
-  }
-
-  *buf = gst_buffer_new_and_alloc ((int) readsize);
-#ifndef G_OS_WIN32
-  memset (&mh, 0, sizeof (mh));
-  mh.msg_name = NULL;
-  mh.msg_namelen = 0;
-  iov.iov_base = (char *) GST_BUFFER_DATA (*buf);
-  iov.iov_len = readsize;
-  mh.msg_iov = &iov;
-  mh.msg_iovlen = 1;
-
-  bytes_read = recvmsg (socket, &mh, 0);
-#else
-  bytes_read =
-      recvfrom (socket, (char *) GST_BUFFER_DATA (*buf), (int) readsize, 0,
-      NULL, 0);
-#endif
-
-  if (bytes_read != readsize) {
-    GST_DEBUG_OBJECT (this, "Error while reading data");
-    return GST_FLOW_ERROR;
-  }
-
-  GST_LOG_OBJECT (this, "bytes read %" G_GSSIZE_FORMAT, bytes_read);
-  GST_LOG_OBJECT (this, "returning buffer of size %d", GST_BUFFER_SIZE (*buf));
-
-  return GST_FLOW_OK;
-}
-
-/* Create a new DCCP socket
- *
- * @param element - the element
- * @return the socket file descriptor
- */
-gint
-gst_dccp_create_new_socket (GstElement * element)
-{
-  int sock_fd;
-  if ((sock_fd = socket (AF_INET, SOCK_DCCP, IPPROTO_DCCP)) < 0) {
-    GST_ELEMENT_ERROR (element, RESOURCE, OPEN_READ, (NULL), GST_ERROR_SYSTEM);
-  }
-
-  return sock_fd;
-}
-
-/* Connect to a server
- * @param element - the element
- * @param server_sin - a struct with a server address and port
- * @param sock_fd - the socket to connect
- * @return TRUE in case of successful connection, FALSE otherwise
- */
-gboolean
-gst_dccp_connect_to_server (GstElement * element, struct sockaddr_in server_sin,
-    int sock_fd)
-{
-#ifdef G_OS_WIN32
-  int errorCode;
-#endif
-  GST_DEBUG_OBJECT (element, "connecting to server");
-
-  if (connect (sock_fd, (struct sockaddr *) &server_sin, sizeof (server_sin))) {
-#ifdef G_OS_WIN32
-    errorCode = WSAGetLastError ();
-    switch (errorCode) {
-      case WSAECONNREFUSED:
-        GST_ELEMENT_ERROR (element, RESOURCE, OPEN_WRITE,
-            ("Connection to %s:%d refused.", inet_ntoa (server_sin.sin_addr),
-                ntohs (server_sin.sin_port)), (NULL));
-        return FALSE;
-        break;
-      default:
-        GST_ELEMENT_ERROR (element, RESOURCE, OPEN_READ, (NULL),
-            ("Connect to %s:%d failed: %s", inet_ntoa (server_sin.sin_addr),
-                ntohs (server_sin.sin_port), g_strerror (errorCode)));
-        return FALSE;
-        break;
-    }
-#else
-    switch (errno) {
-      case ECONNREFUSED:
-        GST_ELEMENT_ERROR (element, RESOURCE, OPEN_WRITE,
-            ("Connection to %s:%d refused.", inet_ntoa (server_sin.sin_addr),
-                ntohs (server_sin.sin_port)), (NULL));
-        return FALSE;
-        break;
-      default:
-        GST_ELEMENT_ERROR (element, RESOURCE, OPEN_READ, (NULL),
-            ("Connect to %s:%d failed: %s", inet_ntoa (server_sin.sin_addr),
-                ntohs (server_sin.sin_port), g_strerror (errno)));
-        return FALSE;
-        break;
-    }
-#endif
-  }
-  return TRUE;
-}
-
-/* FIXME support only one client */
-/*
- * Accept connection on the server socket.
- *
- * @param element - the element
- * @param server_sock_fd - the server socket file descriptor
- * @return the socket of the client connected to the server.
- */
-gint
-gst_dccp_server_wait_connections (GstElement * element, int server_sock_fd)
-{
-  /* new client */
-  int client_sock_fd;
-  struct sockaddr_in client_address;
-  socklen_t client_address_len;
-
-  memset (&client_address, 0, sizeof (client_address));
-  client_address_len = 0;
-
-  if ((client_sock_fd =
-          accept (server_sock_fd, (struct sockaddr *) &client_address,
-              &client_address_len)) == -1) {
-    GST_ELEMENT_ERROR (element, RESOURCE, OPEN_WRITE, (NULL),
-        ("Could not accept client on server socket %d: %s (%d)",
-            server_sock_fd, g_strerror (errno), errno));
-    return -1;
-  }
-
-  GST_DEBUG_OBJECT (element, "Added new client ip %s with fd %d.",
-      inet_ntoa (client_address.sin_addr), client_sock_fd);
-
-  return client_sock_fd;
-}
-
-/*
- * Bind a server address.
- *
- * @param element - the element
- * @param server_sock_fd - the server socket fd
- * @param server_sin - the address and the port to bind the server on
- * @return true in success, false otherwise.
- */
-gboolean
-gst_dccp_bind_server_socket (GstElement * element, int server_sock_fd,
-    struct sockaddr_in server_sin)
-{
-  int ret;
-
-  GST_DEBUG_OBJECT (element, "Binding server socket to address.");
-
-  ret = bind (server_sock_fd, (struct sockaddr *) &server_sin,
-      sizeof (server_sin));
-  if (ret) {
-    switch (errno) {
-      default:
-        GST_ELEMENT_ERROR (element, RESOURCE, OPEN_READ, (NULL),
-            ("Bind on port %d failed: %s", ntohs (server_sin.sin_port),
-                g_strerror (errno)));
-        return FALSE;
-        break;
-    }
-  }
-  return TRUE;
-}
-
-/*
- * Listen on server socket.
- *
- * @param element - the element
- * @param server_sock_fd - the server socket fd
- * @return true in success, false otherwise.
- */
-gboolean
-gst_dccp_listen_server_socket (GstElement * element, int server_sock_fd)
-{
-
-  GST_DEBUG_OBJECT (element, "Listening on server socket %d with queue of %d",
-      server_sock_fd, DCCP_BACKLOG);
-
-  if (listen (server_sock_fd, DCCP_BACKLOG) == -1) {
-    GST_ELEMENT_ERROR (element, RESOURCE, OPEN_READ, (NULL),
-        ("Could not listen on server socket: %s", g_strerror (errno)));
-    return FALSE;
-  }
-
-  GST_DEBUG_OBJECT (element,
-      "Listened on server socket %d, returning from connection setup",
-      server_sock_fd);
-
-  return TRUE;
-}
-
-/* Write buffer to given socket incrementally.
- *
- * @param element - the element
- * @param socket - the socket
- * @param buf - the buffer that will be written
- * @param size - the number of bytes of the buffer
- * @param packet_size - the MTU
- * @return the number of bytes written.
- */
-static GstFlowReturn
-gst_dccp_socket_write (GstElement * element, int socket, const void *buf,
-    size_t size, int packet_size)
-{
-  size_t bytes_written = 0;
-  ssize_t wrote = 0;
-
-#ifndef G_OS_WIN32
-  struct iovec iov;
-  struct msghdr mh;
-
-  memset (&mh, 0, sizeof (mh));
-
-  while (bytes_written < size) {
-    do {
-      mh.msg_name = NULL;
-      mh.msg_namelen = 0;
-      iov.iov_base = (char *) buf + bytes_written;
-      iov.iov_len = MIN (packet_size, size - bytes_written);
-      mh.msg_iov = &iov;
-      mh.msg_iovlen = 1;
-
-      wrote = sendmsg (socket, &mh, 0);
-    } while (wrote == -1 && errno == EAGAIN);
-#else
-  int errorCode = 0;
-  while (bytes_written < size) {
-    do {
-      wrote = sendto (socket, (char *) buf + bytes_written,
-          MIN (packet_size, size - bytes_written), 0, NULL, 0);
-      errorCode = WSAGetLastError ();
-    } while (wrote == SOCKET_ERROR && errorCode == EAGAIN);
-#endif
-
-    /* give up on error */
-    if (wrote >= 0)
-      bytes_written += wrote;
-    else
-      break;
-  }
-
-  if (wrote < 0)
-    GST_WARNING ("Error while writing.");
-  else
-    GST_LOG_OBJECT (element, "Wrote %" G_GSIZE_FORMAT " bytes succesfully.",
-        bytes_written);
-
-  if (bytes_written != size) {
-    GST_ELEMENT_ERROR (element, RESOURCE, WRITE,
-        ("Error while sending data to socket %d.", socket),
-        ("Only %" G_GSIZE_FORMAT " of %" G_GSIZE_FORMAT " bytes written: %s",
-            bytes_written, size, g_strerror (errno)));
-    return GST_FLOW_ERROR;
-  }
-
-  return GST_FLOW_OK;
-}
-
-/* Write buffer to given socket.
- *
- * @param this - the element
- * @param buf - the buffer that will be written
- * @param client_sock_fd - the client socket
- * @param packet_size - the MTU
- * @return GST_FLOW_OK if the send operation was successful, GST_FLOW_ERROR otherwise.
- */
-GstFlowReturn
-gst_dccp_send_buffer (GstElement * this, GstBuffer * buffer, int client_sock_fd,
-    int packet_size)
-{
-//  size_t wrote;
-  gint size = 0;
-  guint8 *data;
-
-  size = GST_BUFFER_SIZE (buffer);
-  data = GST_BUFFER_DATA (buffer);
-
-  GST_LOG_OBJECT (this, "writing %d bytes", size);
-
-  if (packet_size < 0) {
-    return GST_FLOW_ERROR;
-  }
-
-  return gst_dccp_socket_write (this, client_sock_fd, data, size, packet_size);
-}
-
-/*
- * Make address reusable.
- * @param element - the element
- * @param sock_fd - the socket
- * @return TRUE if the operation was successful, FALSE otherwise.
- */
-gboolean
-gst_dccp_make_address_reusable (GstElement * element, int sock_fd)
-{
-  int ret = 1;
-  /* make address reusable */
-  if (setsockopt (sock_fd, SOL_SOCKET, SO_REUSEADDR,
-          (void *) &ret, sizeof (ret)) < 0) {
-    GST_ELEMENT_ERROR (element, RESOURCE, SETTINGS, (NULL),
-        ("Could not setsockopt: %s", g_strerror (errno)));
-    return FALSE;
-  }
-  return TRUE;
-}
-
-/*
- * Set DCCP congestion control.
- * @param element - the element
- * @param sock_fd - the socket
- * @param ccid - the ccid number
- * @return TRUE if the operation was successful, FALSE otherwise.
- */
-gboolean
-gst_dccp_set_ccid (GstElement * element, int sock_fd, uint8_t ccid)
-{
-  uint8_t ccids[4];             /* for getting the available CCIDs, should be large enough */
-  socklen_t len = sizeof (ccids);
-  int i, ret;
-  gboolean ccid_supported = FALSE;
-
-  /*
-   * Determine which CCIDs are available on the host
-   */
-#ifndef G_OS_WIN32
-  ret = getsockopt (sock_fd, SOL_DCCP, DCCP_SOCKOPT_AVAILABLE_CCIDS, &ccids,
-      &len);
-#else
-  ret =
-      getsockopt (sock_fd, SOL_DCCP, DCCP_SOCKOPT_AVAILABLE_CCIDS,
-      (char *) &ccids, &len);
-#endif
-  if (ret < 0) {
-    GST_ERROR_OBJECT (element, "Can not determine available CCIDs");
-    return FALSE;
-  }
-
-  for (i = 0; i < sizeof (ccids); i++) {
-    if (ccid == ccids[i]) {
-      ccid_supported = TRUE;
-    }
-  }
-
-  if (!ccid_supported) {
-    GST_ERROR_OBJECT (element, "CCID specified is not supported");
-    return FALSE;
-  }
-#ifndef G_OS_WIN32
-  if (setsockopt (sock_fd, SOL_DCCP, DCCP_SOCKOPT_CCID, &ccid,
-#else
-  if (setsockopt (sock_fd, SOL_DCCP, DCCP_SOCKOPT_CCID, (char *) &ccid,
-#endif
-          sizeof (ccid)) < 0) {
-    GST_ERROR_OBJECT (element, "Can not set CCID");
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
-#if 0
-/*
- * Get the current ccid of TX or RX half-connection. tx_or_rx parameter must be
- * DCCP_SOCKOPT_TX_CCID or DCCP_SOCKOPT_RX_CCID.
- * @return ccid or -1 on error or tx_or_rx not the correct option
- */
-static uint8_t
-gst_dccp_get_ccid (GstElement * element, int sock_fd, int tx_or_rx)
-{
-  uint8_t ccid;
-  socklen_t ccidlen;
-  int ret;
-
-  switch (tx_or_rx) {
-    case DCCP_SOCKOPT_TX_CCID:
-    case DCCP_SOCKOPT_RX_CCID:
-      break;
-    default:
-      return -1;
-  }
-
-  ccidlen = sizeof (ccid);
-#ifndef G_OS_WIN32
-  ret = getsockopt (sock_fd, SOL_DCCP, tx_or_rx, &ccid, &ccidlen);
-#else
-  ret = getsockopt (sock_fd, SOL_DCCP, tx_or_rx, (char *) &ccid, &ccidlen);
-#endif
-  if (ret < 0) {
-    GST_ERROR_OBJECT (element, "Can not determine available CCIDs");
-    return -1;
-  }
-  return ccid;
-}
-#endif
-
-/*
- * Get the socket MTU.
- * @param element - the element
- * @param sock - the socket
- * @return the MTU if the operation was successful, -1 otherwise.
- */
-gint
-gst_dccp_get_max_packet_size (GstElement * element, int sock)
-{
-  int size;
-  socklen_t sizelen = sizeof (size);
-#ifndef G_OS_WIN32
-  if (getsockopt (sock, SOL_DCCP, DCCP_SOCKOPT_GET_CUR_MPS,
-          &size, &sizelen) < 0) {
-#else
-  if (getsockopt (sock, SOL_DCCP, DCCP_SOCKOPT_GET_CUR_MPS,
-          (char *) &size, &sizelen) < 0) {
-#endif
-    GST_ELEMENT_ERROR (element, RESOURCE, SETTINGS, (NULL),
-        ("Could not get current MTU %d: %s", errno, g_strerror (errno)));
-    return -1;
-  }
-  GST_DEBUG_OBJECT (element, "MTU: %d", size);
-  return size;
-}
-
-void
-gst_dccp_socket_close (GstElement * element, int *socket)
-{
-  if (*socket >= 0) {
-    GST_DEBUG_OBJECT (element, "closing socket");
-    close (*socket);
-    *socket = -1;
-  }
-}
diff --git a/gst/dccp/gstdccp.h b/gst/dccp/gstdccp.h
deleted file mode 100644 (file)
index 3f13227..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DCCP_H__
-#define __GST_DCCP_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include "gstdccp_common.h"
-
-/* DCCP socket general options */
-#define DCCP_BACKLOG   5
-#ifndef SOCK_DCCP
-       #define SOCK_DCCP               6
-#endif
-
-#ifndef IPPROTO_DCCP
-       #define IPPROTO_DCCP    33
-#endif
-
-#ifndef SOL_DCCP
-       #define SOL_DCCP                269
-#endif
-
-/* dccp socket specific options */
-#define DCCP_SOCKOPT_PACKET_SIZE        1 /* XXX deprecated, without effect */
-#define DCCP_SOCKOPT_SERVICE            2
-#define DCCP_SOCKOPT_CHANGE_L           3
-#define DCCP_SOCKOPT_CHANGE_R           4
-#define DCCP_SOCKOPT_GET_CUR_MPS        5
-#define DCCP_SOCKOPT_SERVER_TIMEWAIT    6
-#define DCCP_SOCKOPT_SEND_CSCOV         10
-#define DCCP_SOCKOPT_RECV_CSCOV         11
-#define DCCP_SOCKOPT_AVAILABLE_CCIDS    12
-#define DCCP_SOCKOPT_CCID               13
-#define DCCP_SOCKOPT_TX_CCID            14
-#define DCCP_SOCKOPT_RX_CCID            15
-#define DCCP_SOCKOPT_CCID_RX_INFO       128
-#define DCCP_SOCKOPT_CCID_TX_INFO       192
-
-/* Default parameters for the gst dccp element property */
-#define DCCP_DEFAULT_PORT               5001
-#define DCCP_DEFAULT_SOCK_FD            -1
-#define DCCP_DEFAULT_CLIENT_SOCK_FD     -1
-#define DCCP_DEFAULT_CLOSED             TRUE
-#define DCCP_DEFAULT_WAIT_CONNECTIONS   FALSE
-#define DCCP_DEFAULT_HOST               "127.0.0.1"
-#define DCCP_DEFAULT_CCID               2
-
-#define DCCP_DELTA                      100
-
-gchar *gst_dccp_host_to_ip (GstElement * element, const gchar * host);
-
-GstFlowReturn gst_dccp_read_buffer (GstElement * this, int socket,
-                               GstBuffer ** buf);
-
-gint gst_dccp_create_new_socket (GstElement * element);
-gboolean gst_dccp_connect_to_server (GstElement * element,
-                                struct sockaddr_in server_sin,
-                                int sock_fd);
-
-gint gst_dccp_server_wait_connections (GstElement * element, int server_sock_fd);
-
-gboolean gst_dccp_bind_server_socket (GstElement * element, int server_sock_fd,
-                                         struct sockaddr_in server_sin);
-
-gboolean gst_dccp_listen_server_socket (GstElement * element, int server_sock_fd);
-gboolean gst_dccp_set_ccid (GstElement * element, int sock_fd, uint8_t ccid);
-
-gint gst_dccp_get_max_packet_size(GstElement * element, int sock);
-
-GstFlowReturn gst_dccp_send_buffer (GstElement * element, GstBuffer * buffer,
-                                       int client_sock_fd, int packet_size);
-
-gboolean gst_dccp_make_address_reusable (GstElement * element, int sock_fd);
-void gst_dccp_socket_close (GstElement * element, int * socket);
-
-#endif /* __GST_DCCP_H__ */
diff --git a/gst/dccp/gstdccp_common.h b/gst/dccp/gstdccp_common.h
deleted file mode 100644 (file)
index c88f8ef..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/* GStreamer\r
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>\r
- *\r
- * This library is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU Library General Public\r
- * License as published by the Free Software Foundation; either\r
- * version 2 of the License, or (at your option) any later version.\r
- *\r
- * This library is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- * Library General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Library General Public\r
- * License along with this library; if not, write to the\r
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,\r
- * Boston, MA 02110-1301, USA.\r
- */\r
-\r
-#ifndef __GST_DCCP_NET_H__\r
-#define __GST_DCCP_NET_H__\r
-\r
-#ifndef G_OS_WIN32\r
-#  include <netdb.h>\r
-#  include <sys/socket.h>\r
-#  include <netinet/in.h>                   /* sockaddr_in */\r
-#  include <arpa/inet.h>\r
-#  include <sys/ioctl.h>\r
-#else\r
-/* ws2_32.dll has getaddrinfo and freeaddrinfo on Windows XP and later.\r
- * minwg32 headers check WINVER before allowing the use of these */\r
-#ifndef WINVER\r
-#  define WINVER 0x0501\r
-#endif\r
-#  include <winsock2.h>\r
-#  include <ws2tcpip.h>\r
-#ifndef socklen_t\r
-#define socklen_t int\r
-#endif\r
-#endif\r
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>\r
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>\r
-#endif
-
-#include <string.h>\r
-\r
-#endif /* __GST_DCCP_NET_H__ */\r
diff --git a/gst/dccp/gstdccpclientsink.c b/gst/dccp/gstdccpclientsink.c
deleted file mode 100644 (file)
index 058db2b..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-dccpclientsink
- * @see_also: dccpserversrc, dccpclientsrc, dccpserversink
- *
- * This element connect to a DCCP server and send data to it.
- * <ulink url="http://www.linuxfoundation.org/en/Net:DCCP">DCCP</ulink> (Datagram
- * Congestion Control Protocol) is a Transport Layer protocol like
- * TCP and UDP.
- *
- * <refsect2>
- * <title>Example pipeline</title>
- * <para>
- * |[
- * gst-launch -v filesrc location=music.mp3 ! mp3parse ! dccpclientsink host=localhost port=9011 ccid=2
- * ]| Client
- * |[
- * gst-launch -v dccpserversrc port=9011 ccid=2 ! decodebin ! alsasink
- * ]| Server
- *
- * This example pipeline will send a MP3 stream to the server using DCCP.
- * The server will decode the MP3 and play it.
- * Run the server pipeline first than the client pipeline.
- * </para>
- * </refsect2>
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdccpclientsink.h"
-#include "gstdccp.h"
-
-/* signals */
-enum
-{
-  SIGNAL_CONNECTED,
-  LAST_SIGNAL
-};
-
-/* properties */
-enum
-{
-  PROP_0,
-  PROP_PORT,
-  PROP_HOST,
-  PROP_SOCK_FD,
-  PROP_CCID,
-  PROP_CLOSE_FD
-};
-
-static gboolean gst_dccp_client_sink_stop (GstBaseSink * bsink);
-static gboolean gst_dccp_client_sink_start (GstBaseSink * bsink);
-static GstFlowReturn gst_dccp_client_sink_render (GstBaseSink * bsink,
-    GstBuffer * buf);
-static void gst_dccp_client_sink_finalize (GObject * gobject);
-
-GST_DEBUG_CATEGORY_STATIC (dccpclientsink_debug);
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-GST_BOILERPLATE (GstDCCPClientSink, gst_dccp_client_sink, GstBaseSink,
-    GST_TYPE_BASE_SINK);
-
-static guint gst_dccp_client_sink_signals[LAST_SIGNAL] = { 0 };
-
-/*
- * Write buffer to client socket.
- *
- * @return GST_FLOW_OK if the send operation was successful, GST_FLOW_ERROR otherwise.
- */
-static GstFlowReturn
-gst_dccp_client_sink_render (GstBaseSink * bsink, GstBuffer * buf)
-{
-  GstDCCPClientSink *sink = GST_DCCP_CLIENT_SINK (bsink);
-
-  return gst_dccp_send_buffer (GST_ELEMENT (sink), buf, sink->sock_fd,
-      sink->pksize);
-}
-
-/*
- * Set the value of a property for the client sink.
- */
-static void
-gst_dccp_client_sink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstDCCPClientSink *sink = GST_DCCP_CLIENT_SINK (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      sink->port = g_value_get_int (value);
-      break;
-    case PROP_SOCK_FD:
-      sink->sock_fd = g_value_get_int (value);
-      break;
-    case PROP_HOST:
-      if (!g_value_get_string (value)) {
-        g_warning ("host property cannot be NULL");
-        break;
-      }
-      g_free (sink->host);
-      sink->host = g_strdup (g_value_get_string (value));
-      break;
-    case PROP_CLOSE_FD:
-      sink->closed = g_value_get_boolean (value);
-      break;
-    case PROP_CCID:
-      sink->ccid = g_value_get_int (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-/*
- * Get a given property value for the client sink.
- */
-static void
-gst_dccp_client_sink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstDCCPClientSink *sink = GST_DCCP_CLIENT_SINK (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      g_value_set_int (value, sink->port);
-      break;
-    case PROP_SOCK_FD:
-      g_value_set_int (value, sink->sock_fd);
-      break;
-    case PROP_HOST:
-      g_value_set_string (value, sink->host);
-      break;
-    case PROP_CLOSE_FD:
-      g_value_set_boolean (value, sink->closed);
-      break;
-    case PROP_CCID:
-      g_value_set_int (value, sink->ccid);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_dccp_client_sink_finalize (GObject * gobject)
-{
-  GstDCCPClientSink *this = GST_DCCP_CLIENT_SINK (gobject);
-
-  g_free (this->host);
-
-  G_OBJECT_CLASS (parent_class)->finalize (gobject);
-}
-
-/*
- * Starts the element. If the sockfd property was not the default, this method
- * will create a new socket and connect to the server.
- *
- * @param bsink - the element
- * @return TRUE if the send operation was successful, FALSE otherwise.
- */
-static gboolean
-gst_dccp_client_sink_start (GstBaseSink * bsink)
-{
-  GstDCCPClientSink *sink = GST_DCCP_CLIENT_SINK (bsink);
-
-  if (sink->sock_fd == DCCP_DEFAULT_SOCK_FD) {
-    gchar *ip = NULL;
-
-    /* look up name if we need to */
-    if (!(ip = gst_dccp_host_to_ip (GST_ELEMENT (sink), sink->host))) {
-      GST_ERROR_OBJECT (sink, "cannot resolve hostname");
-      gst_dccp_client_sink_stop (GST_BASE_SINK (sink));
-      return FALSE;
-    }
-
-    /* name the server socket */
-    memset (&sink->server_sin, 0, sizeof (sink->server_sin));
-    sink->server_sin.sin_family = AF_INET;      /* network socket */
-    sink->server_sin.sin_port = htons (sink->port);     /* on port */
-    sink->server_sin.sin_addr.s_addr = inet_addr (ip);  /* on host ip */
-    g_free (ip);
-
-    /* create socket */
-    if ((sink->sock_fd = gst_dccp_create_new_socket (GST_ELEMENT (sink))) < 0) {
-      return FALSE;
-    }
-
-    if (!gst_dccp_set_ccid (GST_ELEMENT (sink), sink->sock_fd, sink->ccid)) {
-      gst_dccp_client_sink_stop (GST_BASE_SINK (sink));
-      return FALSE;
-    }
-
-    if (!gst_dccp_connect_to_server (GST_ELEMENT (sink), sink->server_sin,
-            sink->sock_fd)) {
-      gst_dccp_client_sink_stop (GST_BASE_SINK (sink));
-      return FALSE;
-    }
-
-    /* the socket is connected */
-    g_signal_emit (sink, gst_dccp_client_sink_signals[SIGNAL_CONNECTED], 0,
-        sink->sock_fd);
-  }
-
-  sink->pksize =
-      gst_dccp_get_max_packet_size (GST_ELEMENT (sink), sink->sock_fd);
-
-  return TRUE;
-}
-
-static void
-gst_dccp_client_sink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class, &sinktemplate);
-
-  gst_element_class_set_static_metadata (element_class, "DCCP client sink",
-      "Sink/Network",
-      "Send data as a client over the network via DCCP",
-      "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
-}
-
-static void
-gst_dccp_client_sink_init (GstDCCPClientSink * this,
-    GstDCCPClientSinkClass * g_class)
-{
-  this->port = DCCP_DEFAULT_PORT;
-  this->host = g_strdup (DCCP_DEFAULT_HOST);
-  this->sock_fd = DCCP_DEFAULT_SOCK_FD;
-  this->closed = DCCP_DEFAULT_CLOSED;
-  this->ccid = DCCP_DEFAULT_CCID;
-}
-
-static gboolean
-gst_dccp_client_sink_stop (GstBaseSink * bsink)
-{
-  GstDCCPClientSink *sink;
-
-  sink = GST_DCCP_CLIENT_SINK (bsink);
-
-  if (sink->sock_fd != DCCP_DEFAULT_SOCK_FD && sink->closed) {
-    gst_dccp_socket_close (GST_ELEMENT (sink), &(sink->sock_fd));
-  }
-
-  return TRUE;
-}
-
-/*
- * Define the gst class, callbacks, etc.
- */
-static void
-gst_dccp_client_sink_class_init (GstDCCPClientSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSinkClass *gstbasesink_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesink_class = (GstBaseSinkClass *) klass;
-
-  gobject_class->set_property = gst_dccp_client_sink_set_property;
-  gobject_class->get_property = gst_dccp_client_sink_get_property;
-  gobject_class->finalize = gst_dccp_client_sink_finalize;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT,
-      g_param_spec_int ("port", "Port",
-          "The port to send the packets to", 0, G_MAXUINT16,
-          DCCP_DEFAULT_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_HOST,
-      g_param_spec_string ("host", "Host",
-          "The host IP address to send packets to", DCCP_DEFAULT_HOST,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_SOCK_FD,
-      g_param_spec_int ("sockfd", "Socket fd",
-          "The socket file descriptor", -1, G_MAXINT,
-          DCCP_DEFAULT_SOCK_FD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CLOSE_FD,
-      g_param_spec_boolean ("close-socket", "Close",
-          "Close socket at end of stream",
-          DCCP_DEFAULT_CLOSED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CCID,
-      g_param_spec_int ("ccid", "CCID",
-          "The Congestion Control IDentified to be used", 2, G_MAXINT,
-          DCCP_DEFAULT_CCID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /* signals */
-  /**
-   * GstDccpClientSink::connected:
-   * @sink: the gstdccpclientsink element that emitted this signal
-   * @fd: the connected socket file descriptor
-   *
-   * Sign that the element has connected, return the fd of the socket.
-   */
-  gst_dccp_client_sink_signals[SIGNAL_CONNECTED] =
-      g_signal_new ("connected", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
-      G_STRUCT_OFFSET (GstDCCPClientSinkClass, connected), NULL, NULL,
-      gst_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
-  gstbasesink_class->start = gst_dccp_client_sink_start;
-  gstbasesink_class->stop = gst_dccp_client_sink_stop;
-  gstbasesink_class->render = gst_dccp_client_sink_render;
-
-  GST_DEBUG_CATEGORY_INIT (dccpclientsink_debug, "dccpclientsink", 0,
-      "DCCP Client Sink");
-}
diff --git a/gst/dccp/gstdccpclientsink.h b/gst/dccp/gstdccpclientsink.h
deleted file mode 100644 (file)
index 93cbaa7..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DCCP_CLIENT_SINK_H__
-#define __GST_DCCP_CLIENT_SINK_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesink.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#include "gstdccp_common.h"
-
-#define GST_TYPE_DCCP_CLIENT_SINK \
-  (gst_dccp_client_sink_get_type())
-#define GST_DCCP_CLIENT_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DCCP_CLIENT_SINK,GstDCCPClientSink))
-#define GST_DCCP_CLIENT_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DCCP_CLIENT_SINK,GstDCCPClientSinkClass))
-#define GST_IS_DCCP_CLIENT_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DCCP_CLIENT_SINK))
-#define GST_IS_DCCP_CLIENT_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DCCP_CLIENT_SINK))
-
-typedef struct _GstDCCPClientSink GstDCCPClientSink;
-typedef struct _GstDCCPClientSinkClass GstDCCPClientSinkClass;
-
-
-/**
- * GstDCCPClientSink:
- *
- * dccpclientsink object structure.
- */
-struct _GstDCCPClientSink
-{
-  GstBaseSink element;
-
-  /* server information */
-  int port;
-  gchar *host;
-  struct sockaddr_in server_sin;
-
-  /* socket */
-  int sock_fd;
-  gboolean closed;
-
-  int pksize;
-
-  GstCaps *caps;
-  uint8_t ccid;
-};
-
-struct _GstDCCPClientSinkClass
-{
-  GstBaseSinkClass parent_class;
-
-  /* signals */
-  void (*connected) (GstElement *sink, gint fd);
-};
-
-GType gst_dccp_client_sink_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_DCCP_CLIENT_SRC_H__ */
diff --git a/gst/dccp/gstdccpclientsrc.c b/gst/dccp/gstdccpclientsrc.c
deleted file mode 100644 (file)
index 21ac8e2..0000000
+++ /dev/null
@@ -1,405 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-dccpclientsrc
- * @see_also: dccpclientsink, dccpserversink, dccpserversrc
- *
- * This element connect to a DCCP server and send data to it.
- * <ulink url="http://www.linuxfoundation.org/en/Net:DCCP">DCCP</ulink> (Datagram
- * Congestion Control Protocol) is a Transport Layer protocol like
- * TCP and UDP.
- *
- * <refsect2>
- * <title>Example pipeline</title>
- * <para>
- * |[
- * gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 ! decodebin ! alsasink
- * ]| Client
- * |[
- * gst-launch -v filesrc location=music.mp3 ! mp3parse ! dccpserversink port=9011 ccid=2
- * ]| Server
- *
- * This example pipeline will send a MP3 stream to the client using DCCP.
- * The client will decode the MP3 and play it. Run the server pipeline
- * first than the client pipeline. If you want, you can run more than one dccpclientsrc
- * to connect to the same server (see wait-connections property at dccpserversink).
- * </para>
- * </refsect2>
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdccpclientsrc.h"
-#include "gstdccp.h"
-#include <fcntl.h>
-#ifdef HAVE_FIONREAD_IN_SYS_FILIO
-#include <sys/filio.h>
-#endif
-
-#define DCCP_DEFAULT_CAPS       NULL
-
-/* signals */
-enum
-{
-  SIGNAL_CONNECTED,
-  LAST_SIGNAL
-};
-
-/* properties */
-enum
-{
-  PROP_0,
-  PROP_PORT,
-  PROP_HOST,
-  PROP_SOCK_FD,
-  PROP_CLOSED,
-  PROP_CCID,
-  PROP_CAPS
-};
-
-static gboolean gst_dccp_client_src_stop (GstBaseSrc * bsrc);
-
-GST_DEBUG_CATEGORY_STATIC (dccpclientsrc_debug);
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-GST_BOILERPLATE (GstDCCPClientSrc, gst_dccp_client_src, GstPushSrc,
-    GST_TYPE_PUSH_SRC);
-
-static guint gst_dccp_client_src_signals[LAST_SIGNAL] = { 0 };
-
-/*
- * Read a buffer from the client socket
- *
- * @return GST_FLOW_OK if the send operation was successful, GST_FLOW_ERROR otherwise.
- */
-static GstFlowReturn
-gst_dccp_client_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
-{
-  GstDCCPClientSrc *src;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  src = GST_DCCP_CLIENT_SRC (psrc);
-
-  GST_LOG_OBJECT (src, "reading a buffer");
-  ret = gst_dccp_read_buffer (GST_ELEMENT (src), src->sock_fd, outbuf);
-
-  if (ret == GST_FLOW_OK) {
-    GST_LOG_OBJECT (src,
-        "Returning buffer from _get of size %d, ts %"
-        GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
-        ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
-        GST_BUFFER_SIZE (*outbuf),
-        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)),
-        GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)),
-        GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf));
-
-    if (!gst_caps_is_equal (src->caps, GST_CAPS_ANY)) {
-      gst_buffer_set_caps (*outbuf, src->caps);
-    }
-  }
-
-  return ret;
-}
-
-/*
- * Set the value of a property for the client src.
- */
-static void
-gst_dccp_client_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstDCCPClientSrc *src = GST_DCCP_CLIENT_SRC (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      src->port = g_value_get_int (value);
-      break;
-    case PROP_HOST:
-      if (!g_value_get_string (value)) {
-        g_warning ("host property cannot be NULL");
-        break;
-      }
-      g_free (src->host);
-      src->host = g_strdup (g_value_get_string (value));
-      break;
-    case PROP_SOCK_FD:
-      src->sock_fd = g_value_get_int (value);
-      break;
-    case PROP_CLOSED:
-      src->closed = g_value_get_boolean (value);
-      break;
-    case PROP_CCID:
-      src->ccid = g_value_get_int (value);
-      break;
-    case PROP_CAPS:
-    {
-      const GstCaps *new_caps_val = gst_value_get_caps (value);
-      GstCaps *new_caps;
-      GstCaps *old_caps;
-
-      if (new_caps_val == NULL) {
-        new_caps = gst_caps_new_any ();
-      } else {
-        new_caps = gst_caps_copy (new_caps_val);
-      }
-
-      old_caps = src->caps;
-      src->caps = new_caps;
-      if (old_caps)
-        gst_caps_unref (old_caps);
-      gst_pad_set_caps (GST_BASE_SRC (src)->srcpad, new_caps);
-      break;
-    }
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-/*
- * Get a given property value for the client src.
- */
-static void
-gst_dccp_client_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstDCCPClientSrc *src = GST_DCCP_CLIENT_SRC (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      g_value_set_int (value, src->port);
-      break;
-    case PROP_HOST:
-      g_value_set_string (value, src->host);
-      break;
-    case PROP_SOCK_FD:
-      g_value_set_int (value, src->sock_fd);
-      break;
-    case PROP_CLOSED:
-      g_value_set_boolean (value, src->closed);
-      break;
-    case PROP_CCID:
-      g_value_set_int (value, src->ccid);
-      break;
-    case PROP_CAPS:
-      gst_value_set_caps (value, src->caps);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-/*
- * Starts the element. If the sockfd property was not the default, this method
- * will create a new socket and connect to the server.
- *
- * @param bsrc - the element
- * @return TRUE if the send operation was successful, FALSE otherwise.
- */
-static gboolean
-gst_dccp_client_src_start (GstBaseSrc * bsrc)
-{
-  GstDCCPClientSrc *src = GST_DCCP_CLIENT_SRC (bsrc);
-
-  if (src->sock_fd == DCCP_DEFAULT_SOCK_FD) {
-    gchar *ip = NULL;
-
-    /* look up name if we need to */
-    if (!(ip = gst_dccp_host_to_ip (GST_ELEMENT (src), src->host))) {
-      GST_ERROR_OBJECT (src, "cannot resolve hostname");
-      gst_dccp_client_src_stop (GST_BASE_SRC (src));
-      return FALSE;
-    }
-
-    /* name the server socket */
-    memset (&src->server_sin, 0, sizeof (src->server_sin));
-    src->server_sin.sin_family = AF_INET;       /* network socket */
-    src->server_sin.sin_port = htons (src->port);       /* on port */
-    src->server_sin.sin_addr.s_addr = inet_addr (ip);   /* on host ip */
-    g_free (ip);
-
-    /* create socket */
-    if ((src->sock_fd = gst_dccp_create_new_socket (GST_ELEMENT (src))) < 0) {
-      return FALSE;
-    }
-
-    if (!gst_dccp_set_ccid (GST_ELEMENT (src), src->sock_fd, src->ccid)) {
-      gst_dccp_client_src_stop (GST_BASE_SRC (src));
-      return FALSE;
-    }
-
-    if (!gst_dccp_connect_to_server (GST_ELEMENT (src), src->server_sin,
-            src->sock_fd)) {
-      gst_dccp_client_src_stop (GST_BASE_SRC (src));
-      return FALSE;
-    }
-
-    /* the socket is connected */
-    g_signal_emit (src, gst_dccp_client_src_signals[SIGNAL_CONNECTED], 0,
-        src->sock_fd);
-  }
-
-  return TRUE;
-}
-
-static void
-gst_dccp_client_src_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class, &srctemplate);
-
-  gst_element_class_set_static_metadata (element_class, "DCCP client source",
-      "Source/Network",
-      "Receive data as a client over the network via DCCP",
-      "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
-}
-
-static void
-gst_dccp_client_src_init (GstDCCPClientSrc * this,
-    GstDCCPClientSrcClass * g_class)
-{
-  this->port = DCCP_DEFAULT_PORT;
-  this->host = g_strdup (DCCP_DEFAULT_HOST);
-  this->sock_fd = DCCP_DEFAULT_SOCK_FD;
-  this->closed = DCCP_DEFAULT_CLOSED;
-  this->ccid = DCCP_DEFAULT_CCID;
-  this->caps = NULL;
-
-  gst_base_src_set_format (GST_BASE_SRC (this), GST_FORMAT_TIME);
-
-  /* Checking if the version of the gstreamer is bigger that 0.10.15 */
-#if ((GST_VERSION_MAJOR > 0) || \
-  (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR > 10) || \
-  (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR == 10 && GST_VERSION_MICRO >= 15))
-  gst_base_src_set_do_timestamp (GST_BASE_SRC (this), TRUE);
-#endif
-
-  /* FIXME is this correct? */
-  gst_base_src_set_live (GST_BASE_SRC (this), TRUE);
-}
-
-static void
-gst_dccp_client_src_finalize (GObject * gobject)
-{
-  GstDCCPClientSrc *this = GST_DCCP_CLIENT_SRC (gobject);
-
-  if (this->caps) {
-    gst_caps_unref (this->caps);
-    this->caps = NULL;
-  }
-
-  g_free (this->host);
-
-  G_OBJECT_CLASS (parent_class)->finalize (gobject);
-}
-
-static gboolean
-gst_dccp_client_src_stop (GstBaseSrc * bsrc)
-{
-  GstDCCPClientSrc *src;
-
-  src = GST_DCCP_CLIENT_SRC (bsrc);
-
-  if (src->sock_fd != DCCP_DEFAULT_SOCK_FD && src->closed) {
-    gst_dccp_socket_close (GST_ELEMENT (src), &(src->sock_fd));
-  }
-
-  return TRUE;
-}
-
-/*
- * Define the gst class, callbacks, etc.
- */
-static void
-gst_dccp_client_src_class_init (GstDCCPClientSrcClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSrcClass *gstbasesrc_class;
-  GstPushSrcClass *gstpush_src_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesrc_class = (GstBaseSrcClass *) klass;
-  gstpush_src_class = (GstPushSrcClass *) klass;
-
-  gobject_class->set_property = gst_dccp_client_src_set_property;
-  gobject_class->get_property = gst_dccp_client_src_get_property;
-
-  gobject_class->finalize = gst_dccp_client_src_finalize;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT,
-      g_param_spec_int ("port", "Port",
-          "The port to receive packets from", 0, G_MAXUINT16,
-          DCCP_DEFAULT_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_HOST,
-      g_param_spec_string ("host", "Host",
-          "The host IP address to receive packets from", DCCP_DEFAULT_HOST,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_SOCK_FD,
-      g_param_spec_int ("sockfd", "Socket fd",
-          "The socket file descriptor", -1, G_MAXINT, DCCP_DEFAULT_SOCK_FD,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CLOSED,
-      g_param_spec_boolean ("close-socket", "Close socket",
-          "Close socket at the end of stream", DCCP_DEFAULT_CLOSED,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CAPS,
-      g_param_spec_boxed ("caps", "Caps",
-          "The caps of the source pad", GST_TYPE_CAPS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CCID,
-      g_param_spec_int ("ccid", "CCID",
-          "The Congestion Control IDentified to be used", 2, G_MAXINT,
-          DCCP_DEFAULT_CCID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /* signals */
-  /**
-   * GstDccpClientSrc::connected:
-   * @src: the gstdccpclientsrc element that emitted this signal
-   * @fd: the connected socket file descriptor
-   *
-   * Reports that the element has connected, giving the fd of the socket
-   */
-  gst_dccp_client_src_signals[SIGNAL_CONNECTED] =
-      g_signal_new ("connected", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
-      G_STRUCT_OFFSET (GstDCCPClientSrcClass, connected), NULL, NULL,
-      gst_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
-  gstbasesrc_class->start = gst_dccp_client_src_start;
-  gstbasesrc_class->stop = gst_dccp_client_src_stop;
-
-  gstpush_src_class->create = gst_dccp_client_src_create;
-
-  GST_DEBUG_CATEGORY_INIT (dccpclientsrc_debug, "dccpclientsrc", 0,
-      "DCCP Client Source");
-}
diff --git a/gst/dccp/gstdccpclientsrc.h b/gst/dccp/gstdccpclientsrc.h
deleted file mode 100644 (file)
index 340405a..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DCCP_CLIENT_SRC_H__
-#define __GST_DCCP_CLIENT_SRC_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstpushsrc.h>
-#include <gst/base/gstbasesrc.h>
-
-G_BEGIN_DECLS
-
-#include "gstdccp_common.h"
-
-#define GST_TYPE_DCCP_CLIENT_SRC \
-  (gst_dccp_client_src_get_type())
-#define GST_DCCP_CLIENT_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DCCP_CLIENT_SRC,GstDCCPClientSrc))
-#define GST_DCCP_CLIENT_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DCCP_CLIENT_SRC,GstDCCPClientSrcClass))
-#define GST_IS_DCCP_CLIENT_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DCCP_CLIENT_SRC))
-#define GST_IS_DCCP_CLIENT_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DCCP_CLIENT_SRC))
-
-typedef struct _GstDCCPClientSrc GstDCCPClientSrc;
-typedef struct _GstDCCPClientSrcClass GstDCCPClientSrcClass;
-
-struct _GstDCCPClientSrc {
-  GstPushSrc element;
-
-  /* server information */
-  int port;
-  gchar *host;
-  struct sockaddr_in server_sin;
-
-  /* socket */
-  int sock_fd;
-  gboolean closed;
-
-  GstCaps *caps;
-  uint8_t ccid;
-};
-
-struct _GstDCCPClientSrcClass {
-  GstPushSrcClass parent_class;
-
-  /* signals */
-  void (*connected) (GstElement *src, gint fd);
-};
-
-GType gst_dccp_client_src_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_DCCP_CLIENT_SRC_H__ */
diff --git a/gst/dccp/gstdccpplugin.c b/gst/dccp/gstdccpplugin.c
deleted file mode 100644 (file)
index d3e13fa..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdccpclientsrc.h"
-#include "gstdccpserversink.h"
-#include "gstdccpclientsink.h"
-#include "gstdccpserversrc.h"
-
-GST_DEBUG_CATEGORY (dccp_debug);
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "dccpclientsrc", GST_RANK_NONE,
-          GST_TYPE_DCCP_CLIENT_SRC))
-    return FALSE;
-
-  if (!gst_element_register (plugin, "dccpserversink", GST_RANK_NONE,
-          GST_TYPE_DCCP_SERVER_SINK))
-    return FALSE;
-
-  if (!gst_element_register (plugin, "dccpclientsink", GST_RANK_NONE,
-          GST_TYPE_DCCP_CLIENT_SINK))
-    return FALSE;
-
-  if (!gst_element_register (plugin, "dccpserversrc", GST_RANK_NONE,
-          GST_TYPE_DCCP_SERVER_SRC))
-    return FALSE;
-
-  GST_DEBUG_CATEGORY_INIT (dccp_debug, "dccp", 0, "DCCP calls");
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    dccp,
-    "transfer data over the network via DCCP.",
-    plugin_init, VERSION, GST_LICENSE, "DCCP",
-    "http://garage.maemo.org/projects/ephone")
diff --git a/gst/dccp/gstdccpserversink.c b/gst/dccp/gstdccpserversink.c
deleted file mode 100644 (file)
index 7623523..0000000
+++ /dev/null
@@ -1,465 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-dccpserversink
- * @see_also: dccpclientsink, dccpclientsrc, dccpserversrc
- *
- * This element wait for connections from clients and send data to them.
- * <ulink url="http://www.linuxfoundation.org/en/Net:DCCP">DCCP</ulink> (Datagram
- * Congestion Control Protocol) is a Transport Layer protocol like
- * TCP and UDP.
- *
- * <refsect2>
- * <title>Example pipeline</title>
- * <para>
- * |[
- * gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 ! decodebin ! alsasink
- * ]| Client
- * |[
- * gst-launch -v filesrc location=music.mp3 ! mp3parse ! dccpserversink port=9011 ccid=2
- * ]| Server
- *
- * This example pipeline will send a MP3 stream to the client using DCCP.
- * The client will decode the MP3 and play it. Run the server pipeline
- * first than the client pipeline. If you want, you can run more than one dccpclientsrc
- * to connect to the same server (see wait-connections property at dccpserversink).
- * </para>
- * </refsect2>
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdccpserversink.h"
-#include "gstdccp.h"
-#include <fcntl.h>
-
-/* signals */
-enum
-{
-  SIGNAL_CONNECTED,
-  LAST_SIGNAL
-};
-
-/* properties */
-enum
-{
-  PROP_0,
-  PROP_PORT,
-  PROP_CLIENT_SOCK_FD,
-  PROP_CCID,
-  PROP_CLOSED,
-  PROP_WAIT_CONNECTIONS
-};
-
-static pthread_t accept_thread_id;
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-static gboolean gst_dccp_server_sink_stop (GstBaseSink * bsink);
-
-GST_DEBUG_CATEGORY_STATIC (dccpserversink_debug);
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-GST_BOILERPLATE (GstDCCPServerSink, gst_dccp_server_sink, GstBaseSink,
-    GST_TYPE_BASE_SINK);
-
-static guint gst_dccp_server_sink_signals[LAST_SIGNAL] = { 0 };
-
-/*
- * Create a new client with the socket and the MTU
- *
- * @param element - the gstdccpserversink instance
- * @param socket - the client socket
- * @return the client
- */
-static Client *
-gst_dccp_server_create_client (GstElement * element, int socket)
-{
-  Client *client = (Client *) g_malloc (sizeof (Client));
-  client->socket = socket;
-  client->pksize = gst_dccp_get_max_packet_size (element, client->socket);
-  client->flow_status = GST_FLOW_OK;
-
-  GST_DEBUG_OBJECT (element, "Creating a new client with fd %d and MTU %d.",
-      client->socket, client->pksize);
-
-  /* the socket is connected */
-  g_signal_emit (element, gst_dccp_server_sink_signals[SIGNAL_CONNECTED], 0,
-      socket);
-
-  return client;
-}
-
-/*
- * Wait connections of new clients
- *
- * @param arg - the gstdccpserversink instance
- */
-static void *
-gst_dccp_server_accept_new_clients (void *arg)
-{
-  GstDCCPServerSink *sink = (GstDCCPServerSink *) arg;
-  int newsockfd;
-  Client *client;
-
-  while (1) {
-    newsockfd =
-        gst_dccp_server_wait_connections (GST_ELEMENT (sink), sink->sock_fd);
-
-    client = gst_dccp_server_create_client (GST_ELEMENT (sink), newsockfd);
-
-    pthread_mutex_lock (&lock);
-    sink->clients = g_list_append (sink->clients, client);
-    pthread_mutex_unlock (&lock);
-  }
-
-  return NULL;
-}
-
-/*
- * Send the buffer to a client
- *
- * @param arg - the client
- */
-static void *
-gst_dccp_server_send_buffer (void *arg)
-{
-  Client *client = (Client *) arg;
-  GstDCCPServerSink *sink = client->server;
-  GstBuffer *buf = client->buf;
-  int client_sock_fd = client->socket;
-  int pksize = client->pksize;
-
-  if (gst_dccp_send_buffer (GST_ELEMENT (sink), buf, client_sock_fd,
-          pksize) == GST_FLOW_ERROR) {
-    client->flow_status = GST_FLOW_ERROR;
-  }
-  return NULL;
-}
-
-/* Remove clients with problems to send.
- *
- * @param arg - the gstdccpserversink instance
- */
-static void *
-gst_dccp_server_delete_dead_clients (void *arg)
-{
-  GstDCCPServerSink *sink = (GstDCCPServerSink *) arg;
-  GList *tmp = NULL;
-  GList *l;
-
-  pthread_mutex_lock (&lock);
-  for (l = sink->clients; l != NULL; l = l->next) {
-    Client *client = (Client *) l->data;
-
-    if (client->flow_status == GST_FLOW_OK) {
-      tmp = g_list_append (tmp, client);
-    } else {
-      close (client->socket);
-      g_free (client);
-    }
-  }
-  g_list_free (sink->clients);
-  sink->clients = tmp;
-  pthread_mutex_unlock (&lock);
-  return 0;
-}
-
-static void
-gst_dccp_server_sink_init (GstDCCPServerSink * this,
-    GstDCCPServerSinkClass * g_class)
-{
-  this->port = DCCP_DEFAULT_PORT;
-  this->sock_fd = DCCP_DEFAULT_SOCK_FD;
-  this->client_sock_fd = DCCP_DEFAULT_CLIENT_SOCK_FD;
-  this->closed = DCCP_DEFAULT_CLOSED;
-  this->ccid = DCCP_DEFAULT_CCID;
-  this->wait_connections = DCCP_DEFAULT_WAIT_CONNECTIONS;
-  this->clients = NULL;
-}
-
-/*
- * Starts the element. If the sockfd property was not the default, this method
- * will wait for a client connection.  If wait-connections property is true, it
- * creates a thread to wait for new client connections.
- *
- * @param bsink - the element
- * @return TRUE if the send operation was successful, FALSE otherwise.
- */
-static gboolean
-gst_dccp_server_sink_start (GstBaseSink * bsink)
-{
-  GstDCCPServerSink *sink = GST_DCCP_SERVER_SINK (bsink);
-  Client *client;
-
-  if ((sink->sock_fd = gst_dccp_create_new_socket (GST_ELEMENT (sink))) < 0) {
-    return FALSE;
-  }
-
-  if (!gst_dccp_make_address_reusable (GST_ELEMENT (sink), sink->sock_fd)) {
-    return FALSE;
-  }
-
-  /* name the server socket */
-  memset (&sink->server_sin, 0, sizeof (sink->server_sin));
-  sink->server_sin.sin_family = AF_INET;        /* network socket */
-  sink->server_sin.sin_port = htons (sink->port);       /* on port */
-  sink->server_sin.sin_addr.s_addr = htonl (INADDR_ANY);        /* for hosts */
-
-  if (!gst_dccp_bind_server_socket (GST_ELEMENT (sink), sink->sock_fd,
-          sink->server_sin)) {
-    return FALSE;
-  }
-
-  if (!gst_dccp_set_ccid (GST_ELEMENT (sink), sink->sock_fd, sink->ccid)) {
-    return FALSE;
-  }
-
-  if (!gst_dccp_listen_server_socket (GST_ELEMENT (sink), sink->sock_fd)) {
-    return FALSE;
-  }
-
-
-  if (sink->client_sock_fd == DCCP_DEFAULT_CLIENT_SOCK_FD) {
-    sink->client_sock_fd =
-        gst_dccp_server_wait_connections (GST_ELEMENT (sink), sink->sock_fd);
-  }
-
-  if (sink->client_sock_fd == -1) {
-    return FALSE;
-  }
-
-  client =
-      gst_dccp_server_create_client (GST_ELEMENT (sink), sink->client_sock_fd);
-  sink->clients = g_list_append (sink->clients, client);
-
-  pthread_mutex_init (&lock, NULL);
-
-  if (sink->wait_connections == TRUE) {
-    pthread_create (&accept_thread_id, NULL, gst_dccp_server_accept_new_clients,
-        sink);
-    pthread_detach (accept_thread_id);
-  }
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_dccp_server_sink_render (GstBaseSink * bsink, GstBuffer * buf)
-{
-  GstDCCPServerSink *sink = GST_DCCP_SERVER_SINK (bsink);
-
-  pthread_t thread_id;
-  GList *l;
-
-  pthread_mutex_lock (&lock);
-
-  for (l = sink->clients; l != NULL; l = l->next) {
-    Client *client = (Client *) l->data;
-
-    client->buf = buf;
-    client->server = sink;
-
-    /* FIXME: are we really creating a new thread here for every single buffer
-     * and every single client? */
-    if (client->flow_status == GST_FLOW_OK) {
-      pthread_create (&thread_id, NULL, gst_dccp_server_send_buffer,
-          (void *) client);
-      pthread_detach (thread_id);
-    } else {
-      /* FIXME: what's the point of doing this in a separate thread if it
-       * keeps he global lock anyway while going through all the clients and
-       * waiting for close() to finish? */
-      pthread_create (&thread_id, NULL, gst_dccp_server_delete_dead_clients,
-          (void *) sink);
-      pthread_detach (thread_id);
-    }
-  }
-
-  pthread_mutex_unlock (&lock);
-  return GST_FLOW_OK;
-}
-
-static gboolean
-gst_dccp_server_sink_stop (GstBaseSink * bsink)
-{
-  GstDCCPServerSink *sink;
-  GList *l;
-
-  sink = GST_DCCP_SERVER_SINK (bsink);
-
-  if (sink->wait_connections == TRUE) {
-    pthread_cancel (accept_thread_id);
-  }
-
-  gst_dccp_socket_close (GST_ELEMENT (sink), &(sink->sock_fd));
-
-  pthread_mutex_lock (&lock);
-  for (l = sink->clients; l != NULL; l = l->next) {
-    Client *client = (Client *) l->data;
-
-    if (client->socket != DCCP_DEFAULT_CLIENT_SOCK_FD && sink->closed == TRUE) {
-      gst_dccp_socket_close (GST_ELEMENT (sink), &(client->socket));
-    }
-    g_free (client);
-  }
-  pthread_mutex_unlock (&lock);
-
-  return TRUE;
-}
-
-static void
-gst_dccp_server_sink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class, &sinktemplate);
-
-  gst_element_class_set_static_metadata (element_class, "DCCP server sink",
-      "Sink/Network",
-      "Send data as a server over the network via DCCP",
-      "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
-}
-
-/*
- * Set the value of a property for the server sink.
- */
-static void
-gst_dccp_server_sink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstDCCPServerSink *sink = GST_DCCP_SERVER_SINK (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      sink->port = g_value_get_int (value);
-      break;
-    case PROP_CLIENT_SOCK_FD:
-      sink->client_sock_fd = g_value_get_int (value);
-      break;
-    case PROP_CLOSED:
-      sink->closed = g_value_get_boolean (value);
-      break;
-    case PROP_WAIT_CONNECTIONS:
-      sink->wait_connections = g_value_get_boolean (value);
-      break;
-    case PROP_CCID:
-      sink->ccid = g_value_get_int (value);
-      break;
-    default:
-      break;
-  }
-}
-
-static void
-gst_dccp_server_sink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstDCCPServerSink *sink = GST_DCCP_SERVER_SINK (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      g_value_set_int (value, sink->port);
-      break;
-    case PROP_CLIENT_SOCK_FD:
-      g_value_set_int (value, sink->client_sock_fd);
-      break;
-    case PROP_CLOSED:
-      g_value_set_boolean (value, sink->closed);
-      break;
-    case PROP_WAIT_CONNECTIONS:
-      g_value_set_boolean (value, sink->wait_connections);
-      break;
-    case PROP_CCID:
-      g_value_set_int (value, sink->ccid);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static void
-gst_dccp_server_sink_class_init (GstDCCPServerSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSinkClass *gstbasesink_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesink_class = (GstBaseSinkClass *) klass;
-
-  gobject_class->set_property = gst_dccp_server_sink_set_property;
-  gobject_class->get_property = gst_dccp_server_sink_get_property;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT,
-      g_param_spec_int ("port", "Port",
-          "The port to listen to", 0, G_MAXUINT16,
-          DCCP_DEFAULT_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CLIENT_SOCK_FD,
-      g_param_spec_int ("sockfd", "Socket fd",
-          "The client socket file descriptor", -1, G_MAXINT,
-          DCCP_DEFAULT_CLIENT_SOCK_FD,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CLOSED,
-      g_param_spec_boolean ("close-socket", "Close",
-          "Close the client sockets at end of stream",
-          DCCP_DEFAULT_CLOSED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CCID,
-      g_param_spec_int ("ccid", "CCID",
-          "The Congestion Control IDentified to be used", 2, G_MAXINT,
-          DCCP_DEFAULT_CCID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_WAIT_CONNECTIONS,
-      g_param_spec_boolean ("wait-connections", "Wait connections",
-          "Wait for many client connections",
-          DCCP_DEFAULT_WAIT_CONNECTIONS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-
-  /* signals */
-  /**
-   * GstDccpServerSink::connected:
-   * @sink: the gstdccpserversink element that emitted this signal
-   * @fd: the connected socket file descriptor
-   *
-   * Reports that the element has connected, giving the fd of the socket
-   */
-  gst_dccp_server_sink_signals[SIGNAL_CONNECTED] =
-      g_signal_new ("connected", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
-      G_STRUCT_OFFSET (GstDCCPServerSinkClass, connected), NULL, NULL,
-      gst_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
-  gstbasesink_class->start = gst_dccp_server_sink_start;
-  gstbasesink_class->stop = gst_dccp_server_sink_stop;
-  gstbasesink_class->render = gst_dccp_server_sink_render;
-
-  GST_DEBUG_CATEGORY_INIT (dccpserversink_debug, "dccpserversink", 0,
-      "DCCP Server Sink");
-}
diff --git a/gst/dccp/gstdccpserversink.h b/gst/dccp/gstdccpserversink.h
deleted file mode 100644 (file)
index ea2bf81..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DCCP_SERVER_SINK_H__
-#define __GST_DCCP_SERVER_SINK_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesink.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-
-#include "gstdccp_common.h"
-#include <pthread.h>
-
-#define GST_TYPE_DCCP_SERVER_SINK \
-  (gst_dccp_server_sink_get_type())
-#define GST_DCCP_SERVER_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DCCP_SERVER_SINK,GstDCCPServerSink))
-#define GST_DCCP_SERVER_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DCCP_SERVER_SINK,GstDCCPServerSinkClass))
-#define GST_IS_DCCP_SERVER_SINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DCCP_SERVER_SINK))
-#define GST_IS_DCCP_SERVER_SINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DCCP_SERVER_SINK))
-
-typedef struct _GstDCCPServerSink GstDCCPServerSink;
-typedef struct _GstDCCPServerSinkClass GstDCCPServerSinkClass;
-
-typedef struct _Client Client;
-
-struct _Client
-{
-  GstDCCPServerSink *server;
-  GstBuffer * buf;
-  int socket;
-  int pksize;
-  GstFlowReturn flow_status;
-};
-
-struct _GstDCCPServerSink
-{
-  GstBaseSink element;
-
-  /* server information */
-  int port;
-  struct sockaddr_in server_sin;
-
-  /* socket */
-  int sock_fd;
-
-  /* multiple clients */
-  GList *clients;
-
-  /* properties */
-  int client_sock_fd;
-  uint8_t ccid;
-  gboolean wait_connections;
-  gboolean closed;
-};
-
-struct _GstDCCPServerSinkClass
-{
-  GstBaseSinkClass parent_class;
-
-  /* signals */
-  void (*connected) (GstElement *sink, gint fd);
-};
-
-GType gst_dccp_server_sink_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_DCCP_SERVER_SINK_H__ */
diff --git a/gst/dccp/gstdccpserversrc.c b/gst/dccp/gstdccpserversrc.c
deleted file mode 100644 (file)
index 357a8d1..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-dccpserversrc
- * @see_also: dccpclientsink, dccpclientsrc, dccpserversink
- *
- * This element wait for connection from a client and receive data.
- * <ulink url="http://www.linuxfoundation.org/en/Net:DCCP">DCCP</ulink> (Datagram
- * Congestion Control Protocol) is a Transport Layer protocol like
- * TCP and UDP.
- *
- * <refsect2>
- * <title>Example pipeline</title>
- * <para>
- * |[
- * gst-launch -v filesrc location=music.mp3 ! mp3parse ! dccpclientsink host=localhost port=9011 ccid=2
- * ]| Client
- * |[
- * gst-launch -v dccpserversrc port=9011 ccid=2 ! decodebin ! alsasink
- * ]| Server
- *
- * This example pipeline will send a MP3 stream to the server using DCCP.
- * The server will decode the MP3 and play it.
- * Run the server pipeline first than the client pipeline.
- * </para>
- * </refsect2>
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdccpserversrc.h"
-#include "gstdccp.h"
-#include <fcntl.h>
-
-#define DCCP_DEFAULT_CAPS        NULL
-
-/* signals */
-enum
-{
-  SIGNAL_CONNECTED,
-  LAST_SIGNAL
-};
-
-/* properties */
-enum
-{
-  PROP_0,
-  PROP_PORT,
-  PROP_CLIENT_SOCK_FD,
-  PROP_CLOSED,
-  PROP_CCID,
-  PROP_CAPS
-};
-
-static gboolean gst_dccp_server_src_stop (GstBaseSrc * bsrc);
-
-GST_DEBUG_CATEGORY_STATIC (dccpserversrc_debug);
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-GST_BOILERPLATE (GstDCCPServerSrc, gst_dccp_server_src, GstPushSrc,
-    GST_TYPE_PUSH_SRC);
-
-static guint gst_dccp_server_src_signals[LAST_SIGNAL] = { 0 };
-
-/*
- * Read a buffer from the server socket
- *
- * @return GST_FLOW_OK if the send operation was successful, GST_FLOW_ERROR otherwise.
- */
-static GstFlowReturn
-gst_dccp_server_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
-{
-  GstDCCPServerSrc *src;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  src = GST_DCCP_SERVER_SRC (psrc);
-
-  GST_LOG_OBJECT (src, "reading a buffer");
-
-  ret = gst_dccp_read_buffer (GST_ELEMENT (src), src->client_sock_fd, outbuf);
-
-  if (ret == GST_FLOW_OK) {
-    GST_LOG_OBJECT (src,
-        "Returning buffer from _get of size %d, ts %"
-        GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
-        ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
-        GST_BUFFER_SIZE (*outbuf),
-        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)),
-        GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)),
-        GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf));
-
-    if (!gst_caps_is_equal (src->caps, GST_CAPS_ANY)) {
-      gst_buffer_set_caps (*outbuf, src->caps);
-    }
-  }
-
-  return ret;
-}
-
-/*
- * Set the value of a property for the server src.
- */
-static void
-gst_dccp_server_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstDCCPServerSrc *src = GST_DCCP_SERVER_SRC (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      src->port = g_value_get_int (value);
-      break;
-    case PROP_CLIENT_SOCK_FD:
-      src->client_sock_fd = g_value_get_int (value);
-      break;
-    case PROP_CLOSED:
-      src->closed = g_value_get_boolean (value);
-      break;
-    case PROP_CCID:
-      src->ccid = g_value_get_int (value);
-      break;
-    case PROP_CAPS:
-    {
-      const GstCaps *new_caps_val = gst_value_get_caps (value);
-      GstCaps *new_caps;
-      GstCaps *old_caps;
-
-      if (new_caps_val == NULL) {
-        new_caps = gst_caps_new_any ();
-      } else {
-        new_caps = gst_caps_copy (new_caps_val);
-      }
-
-      old_caps = src->caps;
-      src->caps = new_caps;
-      if (old_caps) {
-        gst_caps_unref (old_caps);
-      }
-      gst_pad_set_caps (GST_BASE_SRC (src)->srcpad, new_caps);
-      break;
-    }
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-/*
- * Get a given property value for the server src.
- */
-static void
-gst_dccp_server_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstDCCPServerSrc *src = GST_DCCP_SERVER_SRC (object);
-
-  switch (prop_id) {
-    case PROP_PORT:
-      g_value_set_int (value, src->port);
-      break;
-    case PROP_CLIENT_SOCK_FD:
-      g_value_set_int (value, src->client_sock_fd);
-      break;
-    case PROP_CLOSED:
-      g_value_set_boolean (value, src->closed);
-      break;
-    case PROP_CAPS:
-      gst_value_set_caps (value, src->caps);
-      break;
-    case PROP_CCID:
-      g_value_set_int (value, src->ccid);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-/*
- * Starts the element. If the sockfd property was not the default, this method
- * will create a new server socket and wait for a client connection.
- *
- * @param bsrc - the element
- * @return TRUE if the send operation was successful, FALSE otherwise.
- */
-static gboolean
-gst_dccp_server_src_start (GstBaseSrc * bsrc)
-{
-  GstDCCPServerSrc *src = GST_DCCP_SERVER_SRC (bsrc);
-
-  if (src->client_sock_fd == DCCP_DEFAULT_CLIENT_SOCK_FD) {
-    /* create socket */
-    if ((src->sock_fd = gst_dccp_create_new_socket (GST_ELEMENT (src))) < 0) {
-      return FALSE;
-    }
-
-    if (!gst_dccp_make_address_reusable (GST_ELEMENT (src), src->sock_fd)) {
-      return FALSE;
-    }
-
-    /* name the server socket */
-    memset (&src->server_sin, 0, sizeof (src->server_sin));
-    src->server_sin.sin_family = AF_INET;       /* network socket */
-    src->server_sin.sin_port = htons (src->port);       /* on port */
-    src->server_sin.sin_addr.s_addr = htonl (INADDR_ANY);       /* for hosts */
-
-
-    if (!gst_dccp_bind_server_socket (GST_ELEMENT (src), src->sock_fd,
-            src->server_sin)) {
-      return FALSE;
-    }
-
-    if (!gst_dccp_set_ccid (GST_ELEMENT (src), src->sock_fd, src->ccid)) {
-      return FALSE;
-    }
-
-    if (!gst_dccp_listen_server_socket (GST_ELEMENT (src), src->sock_fd)) {
-      return FALSE;
-    }
-
-    src->client_sock_fd = gst_dccp_server_wait_connections (GST_ELEMENT (src),
-        src->sock_fd);
-    if (src->client_sock_fd == -1) {
-      return FALSE;
-    }
-
-    /* the socket is connected */
-    g_signal_emit (src, gst_dccp_server_src_signals[SIGNAL_CONNECTED], 0,
-        src->client_sock_fd);
-  }
-
-  return TRUE;
-}
-
-
-static void
-gst_dccp_server_src_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class, &srctemplate);
-
-  gst_element_class_set_static_metadata (element_class, "DCCP server source",
-      "Source/Network",
-      "Receive data as a server over the network via DCCP",
-      "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
-}
-
-
-static void
-gst_dccp_server_src_init (GstDCCPServerSrc * this,
-    GstDCCPServerSrcClass * g_class)
-{
-  this->port = DCCP_DEFAULT_PORT;
-  this->sock_fd = DCCP_DEFAULT_SOCK_FD;
-  this->client_sock_fd = DCCP_DEFAULT_CLIENT_SOCK_FD;
-  this->closed = DCCP_DEFAULT_CLOSED;
-  this->ccid = DCCP_DEFAULT_CCID;
-  this->caps = DCCP_DEFAULT_CAPS;
-
-  gst_base_src_set_format (GST_BASE_SRC (this), GST_FORMAT_TIME);
-
-  /* Checking if the version of the gstreamer is bigger that 0.10.15 */
-#if ((GST_VERSION_MAJOR > 0) || \
-  (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR > 10) || \
-  (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR == 10 && GST_VERSION_MICRO >= 15))
-  gst_base_src_set_do_timestamp (GST_BASE_SRC (this), TRUE);
-#endif
-
-  /* FIXME is this correct? */
-  gst_base_src_set_live (GST_BASE_SRC (this), TRUE);
-}
-
-
-static void
-gst_dccp_server_src_finalize (GObject * gobject)
-{
-  GstDCCPServerSrc *this = GST_DCCP_SERVER_SRC (gobject);
-
-  if (this->caps) {
-    gst_caps_unref (this->caps);
-    this->caps = NULL;
-  }
-
-  G_OBJECT_CLASS (parent_class)->finalize (gobject);
-}
-
-
-static gboolean
-gst_dccp_server_src_stop (GstBaseSrc * bsrc)
-{
-  GstDCCPServerSrc *src;
-
-  src = GST_DCCP_SERVER_SRC (bsrc);
-
-  gst_dccp_socket_close (GST_ELEMENT (src), &(src->sock_fd));
-  if (src->client_sock_fd != DCCP_DEFAULT_CLIENT_SOCK_FD && src->closed == TRUE) {
-    gst_dccp_socket_close (GST_ELEMENT (src), &(src->client_sock_fd));
-  }
-
-  return TRUE;
-}
-
-static void
-gst_dccp_server_src_class_init (GstDCCPServerSrcClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBaseSrcClass *gstbasesrc_class;
-  GstPushSrcClass *gstpush_src_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstbasesrc_class = (GstBaseSrcClass *) klass;
-  gstpush_src_class = (GstPushSrcClass *) klass;
-
-  gobject_class->set_property = gst_dccp_server_src_set_property;
-  gobject_class->get_property = gst_dccp_server_src_get_property;
-
-  gobject_class->finalize = gst_dccp_server_src_finalize;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PORT,
-      g_param_spec_int ("port", "Port",
-          "The port to listen to", 0, G_MAXUINT16,
-          DCCP_DEFAULT_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CLIENT_SOCK_FD,
-      g_param_spec_int ("sockfd", "Socket fd",
-          "The client socket file descriptor", -1, G_MAXINT,
-          DCCP_DEFAULT_CLIENT_SOCK_FD,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CLOSED,
-      g_param_spec_boolean ("close-socket", "Close socket",
-          "Close client socket at the end of stream", DCCP_DEFAULT_CLOSED,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CCID,
-      g_param_spec_int ("ccid", "CCID",
-          "The Congestion Control IDentified to be used", 2, G_MAXINT,
-          DCCP_DEFAULT_CCID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_CAPS,
-      g_param_spec_boxed ("caps", "Caps",
-          "The caps of the source pad", GST_TYPE_CAPS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /* signals */
-  /**
-   * GstDccpServerSrc::connected:
-   * @src: the gstdccpserversrc element that emitted this signal
-   * @fd: the connected socket file descriptor
-   *
-   * Reports that the element has connected, giving the fd of the socket
-   */
-  gst_dccp_server_src_signals[SIGNAL_CONNECTED] =
-      g_signal_new ("connected", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST,
-      G_STRUCT_OFFSET (GstDCCPServerSrcClass, connected), NULL, NULL,
-      gst_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
-
-  gstbasesrc_class->start = gst_dccp_server_src_start;
-  gstbasesrc_class->stop = gst_dccp_server_src_stop;
-
-  gstpush_src_class->create = gst_dccp_server_src_create;
-
-  GST_DEBUG_CATEGORY_INIT (dccpserversrc_debug, "dccpserversrc", 0,
-      "DCCP Server Source");
-}
diff --git a/gst/dccp/gstdccpserversrc.h b/gst/dccp/gstdccpserversrc.h
deleted file mode 100644 (file)
index d6a5615..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_DCCP_SERVER_SRC_H__
-#define __GST_DCCP_SERVER_SRC_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstpushsrc.h>
-#include <gst/base/gstbasesrc.h>
-
-G_BEGIN_DECLS
-
-#include "gstdccp_common.h"
-
-#define GST_TYPE_DCCP_SERVER_SRC \
-  (gst_dccp_server_src_get_type())
-#define GST_DCCP_SERVER_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DCCP_SERVER_SRC,GstDCCPServerSrc))
-#define GST_DCCP_SERVER_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DCCP_SERVER_SRC,GstDCCPServerSrcClass))
-#define GST_IS_DCCP_SERVER_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DCCP_SERVER_SRC))
-#define GST_IS_DCCP_SERVER_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DCCP_SERVER_SRC))
-
-typedef struct _GstDCCPServerSrc GstDCCPServerSrc;
-typedef struct _GstDCCPServerSrcClass GstDCCPServerSrcClass;
-
-struct _GstDCCPServerSrc
-{
-  GstPushSrc element;
-
-  /* server information */
-  int port;
-  struct sockaddr_in server_sin;
-
-  /* socket */
-  int sock_fd;
-  gboolean closed;
-
-  GstCaps *caps;
-  uint8_t ccid;
-
-  /* single client */
-  int client_sock_fd;
-};
-
-struct _GstDCCPServerSrcClass
-{
-  GstPushSrcClass parent_class;
-
-  /* signals */
-  void (*connected) (GstElement *src, gint fd);
-};
-
-GType gst_dccp_server_src_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_DCCP_SERVER_SRC_H__ */
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/gst/dccp/meson.build b/gst/dccp/meson.build
deleted file mode 100644 (file)
index 6682f6b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-dccp_sources = [
-  'gstdccpplugin.c',
-  'gstdccp.c',
-  'gstdccpserversink.c',
-  'gstdccpserversrc.c',
-  'gstdccpclientsink.c',
-  'gstdccpclientsrc.c',
-]
-
-gstdccp = library('gstdccp',
-  dccp_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc, libsinc],
-  dependencies : [gstbase_dep] + winsock2,
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/faceoverlay/Makefile.am b/gst/faceoverlay/Makefile.am
deleted file mode 100644 (file)
index 31a4382..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-plugin_LTLIBRARIES = libgstfaceoverlay.la
-
-# sources used to compile this plug-in
-libgstfaceoverlay_la_SOURCES = gstfaceoverlay.c
-
-# compiler and linker flags used to compile this plugin, set in configure.ac
-libgstfaceoverlay_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstfaceoverlay_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-@GST_API_VERSION@ $(GST_LIBS)
-libgstfaceoverlay_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstfaceoverlay_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-# headers we need but don't want installed
-noinst_HEADERS = gstfaceoverlay.h
diff --git a/gst/faceoverlay/gstfaceoverlay.c b/gst/faceoverlay/gstfaceoverlay.c
deleted file mode 100644 (file)
index 19006f3..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-/* GStreamer faceoverlay plugin
- * Copyright (C) 2011 Laura Lucas Alday <lauralucas@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Alternatively, the contents of this file may be used under the
- * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
- * which case the following provisions apply instead of the ones
- * mentioned above:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-faceoverlay
- *
- * Overlays a SVG image over a detected face in a video stream.
- * x, y, w, and h properties are optional, and change the image position and
- * size relative to the detected face position and size.
- *
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch autovideosrc ! videoconvert ! faceoverlay location=/path/to/gnome-video-effects/pixmaps/bow.svg x=-5 y=-15 w=0.3 h=0.1 ! videoconvert ! autovideosink
- * ]|
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <string.h>
-
-#include "gstfaceoverlay.h"
-
-GST_DEBUG_CATEGORY_STATIC (gst_face_overlay_debug);
-#define GST_CAT_DEFAULT gst_face_overlay_debug
-
-enum
-{
-  PROP_0,
-  PROP_LOCATION,
-  PROP_X,
-  PROP_Y,
-  PROP_W,
-  PROP_H
-};
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw-rgb; video/x-raw-yuv")
-    );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw-rgb; video/x-raw-yuv")
-    );
-
-GST_BOILERPLATE (GstFaceOverlay, gst_face_overlay, GstBin, GST_TYPE_BIN);
-
-static void gst_face_overlay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_face_overlay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_face_overlay_message_handler (GstBin * bin,
-    GstMessage * message);
-static GstStateChangeReturn gst_face_overlay_change_state (GstElement * element,
-    GstStateChange transition);
-static gboolean gst_face_overlay_create_children (GstFaceOverlay * filter);
-
-static gboolean
-gst_face_overlay_create_children (GstFaceOverlay * filter)
-{
-  GstElement *csp, *face_detect, *overlay;
-  GstPad *pad;
-
-  csp = gst_element_factory_make ("videoconvert", NULL);
-  face_detect = gst_element_factory_make ("facedetect", NULL);
-  overlay = gst_element_factory_make ("rsvgoverlay", NULL);
-
-  /* FIXME: post missing-plugin messages on NULL->READY if needed */
-  if (csp == NULL || face_detect == NULL || overlay == NULL)
-    goto missing_element;
-
-  g_object_set (face_detect, "display", FALSE, NULL);
-
-  gst_bin_add_many (GST_BIN (filter), face_detect, csp, overlay, NULL);
-  filter->svg_overlay = overlay;
-
-  if (!gst_element_link_many (face_detect, csp, overlay, NULL))
-    GST_ERROR_OBJECT (filter, "couldn't link elements");
-
-  pad = gst_element_get_static_pad (face_detect, "sink");
-  if (!gst_ghost_pad_set_target (GST_GHOST_PAD (filter->sinkpad), pad))
-    GST_ERROR_OBJECT (filter->sinkpad, "couldn't set sinkpad target");
-  gst_object_unref (pad);
-
-  pad = gst_element_get_static_pad (overlay, "src");
-  if (!gst_ghost_pad_set_target (GST_GHOST_PAD (filter->srcpad), pad))
-    GST_ERROR_OBJECT (filter->srcpad, "couldn't set srcpad target");
-  gst_object_unref (pad);
-
-  return TRUE;
-
-/* ERRORS */
-missing_element:
-  {
-    /* clean up */
-    if (csp == NULL)
-      GST_ERROR_OBJECT (filter, "videoconvert element not found");
-    else
-      gst_object_unref (csp);
-
-    if (face_detect == NULL)
-      GST_ERROR_OBJECT (filter, "facedetect element not found (opencv plugin)");
-    else
-      gst_object_unref (face_detect);
-
-    if (overlay == NULL)
-      GST_ERROR_OBJECT (filter, "rsvgoverlay element not found (rsvg plugin)");
-    else
-      gst_object_unref (overlay);
-
-    return FALSE;
-  }
-}
-
-static GstStateChangeReturn
-gst_face_overlay_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstFaceOverlay *filter = GST_FACEOVERLAY (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (filter->svg_overlay == NULL) {
-        GST_ELEMENT_ERROR (filter, CORE, MISSING_PLUGIN, (NULL),
-            ("Some required plugins are missing, probably either the opencv "
-                "facedetect element or rsvgoverlay"));
-        return GST_STATE_CHANGE_FAILURE;
-      }
-      filter->update_svg = TRUE;
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_face_overlay_handle_faces (GstFaceOverlay * filter, const GstStructure * s)
-{
-  guint x, y, width, height;
-  gint svg_x, svg_y, svg_width, svg_height;
-  const GstStructure *face;
-  const GValue *faces_list, *face_val;
-  gchar *new_location = NULL;
-  gint face_count;
-
-#if 0
-  /* optionally draw the image once every two messages for better performance */
-  filter->process_message = !filter->process_message;
-  if (!filter->process_message)
-    return;
-#endif
-
-  faces_list = gst_structure_get_value (s, "faces");
-  face_count = gst_value_list_get_size (faces_list);
-  GST_LOG_OBJECT (filter, "face count: %d", face_count);
-
-  if (face_count == 0) {
-    GST_DEBUG_OBJECT (filter, "no face, clearing overlay");
-    g_object_set (filter->svg_overlay, "location", NULL, NULL);
-    GST_OBJECT_LOCK (filter);
-    filter->update_svg = TRUE;
-    GST_OBJECT_UNLOCK (filter);
-    return;
-  }
-
-  /* The last face in the list seems to be the right one, objects mistakenly
-   * detected as faces for a couple of frames seem to be in the list
-   * beginning. TODO: needs confirmation. */
-  face_val = gst_value_list_get_value (faces_list, face_count - 1);
-  face = gst_value_get_structure (face_val);
-  gst_structure_get_uint (face, "x", &x);
-  gst_structure_get_uint (face, "y", &y);
-  gst_structure_get_uint (face, "width", &width);
-  gst_structure_get_uint (face, "height", &height);
-
-  /* Apply x and y offsets relative to face position and size.
-   * Set image width and height as a fraction of face width and height.
-   * Cast to int since face position and size will never be bigger than
-   * G_MAX_INT and we may have negative values as svg_x or svg_y */
-
-  GST_OBJECT_LOCK (filter);
-
-  svg_x = (gint) x + (gint) (filter->x * width);
-  svg_y = (gint) y + (gint) (filter->y * height);
-
-  svg_width = (gint) (filter->w * width);
-  svg_height = (gint) (filter->h * height);
-
-  if (filter->update_svg) {
-    new_location = g_strdup (filter->location);
-    filter->update_svg = FALSE;
-  }
-  GST_OBJECT_UNLOCK (filter);
-
-  if (new_location != NULL) {
-    GST_DEBUG_OBJECT (filter, "set rsvgoverlay location=%s", new_location);
-    g_object_set (filter->svg_overlay, "location", new_location, NULL);
-    g_free (new_location);
-  }
-
-  GST_LOG_OBJECT (filter, "overlay dimensions: %d x %d @ %d,%d",
-      svg_width, svg_height, svg_x, svg_y);
-
-  g_object_set (filter->svg_overlay,
-      "x", svg_x, "y", svg_y, "width", svg_width, "height", svg_height, NULL);
-}
-
-static void
-gst_face_overlay_message_handler (GstBin * bin, GstMessage * message)
-{
-  if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ELEMENT) {
-    const GstStructure *s = gst_message_get_structure (message);
-
-    if (gst_structure_has_name (s, "facedetect")) {
-      gst_face_overlay_handle_faces (GST_FACEOVERLAY (bin), s);
-    }
-  }
-
-  GST_BIN_CLASS (parent_class)->handle_message (bin, message);
-}
-
-static void
-gst_face_overlay_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_set_static_metadata (element_class,
-      "faceoverlay",
-      "Filter/Editor/Video",
-      "Overlays SVG graphics over a detected face in a video stream",
-      "Laura Lucas Alday <lauralucas@gmail.com>");
-
-  gst_element_class_add_static_pad_template (element_class, &src_factory);
-  gst_element_class_add_static_pad_template (element_class, &sink_factory);
-}
-
-static void
-gst_face_overlay_class_init (GstFaceOverlayClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstBinClass *gstbin_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = G_OBJECT_CLASS (klass);
-  gstbin_class = GST_BIN_CLASS (klass);
-  gstelement_class = GST_ELEMENT_CLASS (klass);
-
-  gobject_class->set_property = gst_face_overlay_set_property;
-  gobject_class->get_property = gst_face_overlay_get_property;
-
-  g_object_class_install_property (gobject_class, PROP_LOCATION,
-      g_param_spec_string ("location", "Location",
-          "Location of SVG file to use for face overlay",
-          "", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_X,
-      g_param_spec_float ("x", "face x offset",
-          "Specify image x relative to detected face x.", -G_MAXFLOAT,
-          G_MAXFLOAT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_Y,
-      g_param_spec_float ("y", "face y offset",
-          "Specify image y relative to detected face y.", -G_MAXFLOAT,
-          G_MAXFLOAT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_W,
-      g_param_spec_float ("w", "face width percent",
-          "Specify image width relative to face width.", 0, G_MAXFLOAT, 1,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_H,
-      g_param_spec_float ("h", "face height percent",
-          "Specify image height relative to face height.", 0, G_MAXFLOAT, 1,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  gstbin_class->handle_message =
-      GST_DEBUG_FUNCPTR (gst_face_overlay_message_handler);
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_face_overlay_change_state);
-}
-
-static void
-gst_face_overlay_init (GstFaceOverlay * filter, GstFaceOverlayClass * gclass)
-{
-  GstPadTemplate *tmpl;
-
-  filter->x = 0;
-  filter->y = 0;
-  filter->w = 1;
-  filter->h = 1;
-  filter->svg_overlay = NULL;
-  filter->location = NULL;
-  filter->process_message = TRUE;
-
-  tmpl = gst_static_pad_template_get (&sink_factory);
-  filter->sinkpad = gst_ghost_pad_new_no_target_from_template ("sink", tmpl);
-  gst_object_unref (tmpl);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
-
-  tmpl = gst_static_pad_template_get (&src_factory);
-  filter->srcpad = gst_ghost_pad_new_no_target_from_template ("src", tmpl);
-  gst_object_unref (tmpl);
-  gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
-
-  gst_face_overlay_create_children (filter);
-}
-
-static void
-gst_face_overlay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstFaceOverlay *filter = GST_FACEOVERLAY (object);
-
-  switch (prop_id) {
-    case PROP_LOCATION:
-      GST_OBJECT_LOCK (filter);
-      g_free (filter->location);
-      filter->location = g_value_dup_string (value);
-      filter->update_svg = TRUE;
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_X:
-      GST_OBJECT_LOCK (filter);
-      filter->x = g_value_get_float (value);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_Y:
-      GST_OBJECT_LOCK (filter);
-      filter->y = g_value_get_float (value);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_W:
-      GST_OBJECT_LOCK (filter);
-      filter->w = g_value_get_float (value);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_H:
-      GST_OBJECT_LOCK (filter);
-      filter->h = g_value_get_float (value);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_face_overlay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstFaceOverlay *filter = GST_FACEOVERLAY (object);
-
-  switch (prop_id) {
-    case PROP_LOCATION:
-      GST_OBJECT_LOCK (filter);
-      g_value_set_string (value, filter->location);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_X:
-      GST_OBJECT_LOCK (filter);
-      g_value_set_float (value, filter->x);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_Y:
-      GST_OBJECT_LOCK (filter);
-      g_value_set_float (value, filter->y);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_W:
-      GST_OBJECT_LOCK (filter);
-      g_value_set_float (value, filter->w);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    case PROP_H:
-      GST_OBJECT_LOCK (filter);
-      g_value_set_float (value, filter->h);
-      GST_OBJECT_UNLOCK (filter);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static gboolean
-faceoverlay_init (GstPlugin * faceoverlay)
-{
-  GST_DEBUG_CATEGORY_INIT (gst_face_overlay_debug, "faceoverlay",
-      0, "SVG Face Overlay");
-
-  return gst_element_register (faceoverlay, "faceoverlay", GST_RANK_NONE,
-      GST_TYPE_FACEOVERLAY);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    faceoverlay,
-    "SVG Face Overlay",
-    faceoverlay_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/faceoverlay/gstfaceoverlay.h b/gst/faceoverlay/gstfaceoverlay.h
deleted file mode 100644 (file)
index 810e28a..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/* GStreamer faceoverlay plugin
- * Copyright (C) 2011 Laura Lucas Alday <lauralucas@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Alternatively, the contents of this file may be used under the
- * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
- * which case the following provisions apply instead of the ones
- * mentioned above:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_FACEOVERLAY_H__
-#define __GST_FACEOVERLAY_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_FACEOVERLAY \
-  (gst_face_overlay_get_type())
-#define GST_FACEOVERLAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FACEOVERLAY,GstFaceOverlay))
-#define GST_FACEOVERLAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FACEOVERLAY,GstFaceOverlayClass))
-#define GST_IS_FACEOVERLAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FACEOVERLAY))
-#define GST_IS_FACEOVERLAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FACEOVERLAY))
-
-typedef struct _GstFaceOverlay GstFaceOverlay;
-typedef struct _GstFaceOverlayClass GstFaceOverlayClass;
-
-struct _GstFaceOverlay
-{
-  GstBin parent;
-
-  GstPad *sinkpad, *srcpad;
-
-  GstElement *face_detect;
-  GstElement *colorspace;
-  GstElement *svg_overlay;
-
-  gboolean process_message;
-
-  gboolean update_svg;
-
-  gchar *location;
-  gfloat x;
-  gfloat y;
-  gfloat w;
-  gfloat h;
-};
-
-struct _GstFaceOverlayClass
-{
-  GstBinClass parent_class;
-};
-
-GType gst_face_overlay_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_FACEOVERLAY_H__ */
diff --git a/gst/faceoverlay/meson.build b/gst/faceoverlay/meson.build
deleted file mode 100644 (file)
index 65aa729..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-fover_sources = [
-  'gstfaceoverlay.c',
-]
-
-gstfaceoverlay = library('gstfaceoverlay',
-  fover_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep, gstvideo_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/games/Makefile.am b/gst/games/Makefile.am
deleted file mode 100644 (file)
index d85c89d..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-plugin_LTLIBRARIES = libgstpuzzle.la
-
-libgstpuzzle_la_SOURCES = \
-                       gstvideoimage.c \
-                       gstpuzzle.c
-                       
-libgstpuzzle_la_CFLAGS = $(GST_CFLAGS) $(LIBOIL_CFLAGS) -I$(top_srcdir)/gst/videofilter
-libgstpuzzle_la_LIBADD =
-libgstpuzzle_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) $(LIBOIL_LIBS)
-libgstpuzzle_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstvideoimage.h
diff --git a/gst/games/gstpuzzle.c b/gst/games/gstpuzzle.c
deleted file mode 100644 (file)
index 9928380..0000000
+++ /dev/null
@@ -1,576 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *               <2003> David Schleef <ds@schleef.org>
- *               <2004> Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gstvideofilter.h>
-#include "gstvideoimage.h"
-#include <string.h>
-
-#define GST_TYPE_PUZZLE \
-  (gst_puzzle_get_type())
-#define GST_PUZZLE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PUZZLE,GstPuzzle))
-#define GST_PUZZLE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PUZZLE,GstPuzzleClass))
-#define GST_IS_PUZZLE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PUZZLE))
-#define GST_IS_PUZZLE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PUZZLE))
-
-typedef struct _GstPuzzle GstPuzzle;
-typedef struct _GstPuzzleClass GstPuzzleClass;
-
-struct _GstPuzzle
-{
-  GstVideofilter videofilter;
-
-  const GstVideoFormat *format;
-  /* properties */
-  guint rows;
-  guint columns;
-  guint tiles;
-  /* state */
-  guint *permutation;
-  guint position;
-  gboolean solved;
-};
-
-struct _GstPuzzleClass
-{
-  GstVideofilterClass parent_class;
-};
-
-
-/* GstPuzzle signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-  PROP_COLUMNS,
-  PROP_ROWS
-      /* FILL ME */
-};
-
-static void gst_puzzle_base_init (gpointer g_class);
-static void gst_puzzle_class_init (gpointer g_class, gpointer class_data);
-static void gst_puzzle_init (GTypeInstance * instance, gpointer g_class);
-static void gst_puzzle_finalize (GObject * object);
-
-static void gst_puzzle_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_puzzle_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static void gst_puzzle_setup (GstVideofilter * videofilter);
-static void draw_puzzle (GstVideofilter * videofilter, void *destp, void *srcp);
-
-static GstVideofilterClass *parent_class;
-
-GType
-gst_puzzle_get_type (void)
-{
-  static GType puzzle_type = 0;
-
-  if (!puzzle_type) {
-    static const GTypeInfo puzzle_info = {
-      sizeof (GstPuzzleClass),
-      gst_puzzle_base_init,
-      NULL,
-      gst_puzzle_class_init,
-      NULL,
-      NULL,
-      sizeof (GstPuzzle),
-      0,
-      gst_puzzle_init,
-    };
-
-    puzzle_type = g_type_register_static (GST_TYPE_VIDEOFILTER,
-        "GstPuzzle", &puzzle_info, 0);
-  }
-  return puzzle_type;
-}
-
-static void
-gst_puzzle_base_init (gpointer g_class)
-{
-
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-  GstVideofilterClass *videofilter_class = GST_VIDEOFILTER_CLASS (g_class);
-  int i;
-  GstVideofilterFormat *f;
-
-  gst_element_class_set_static_metadata (element_class, "A simple puzzle",
-      "Filter/Effect/Video/Games",
-      "A simple puzzle, use arrow keys and space to restart/solve",
-      "Benjamin Otte <otte@gnome.org>");
-
-  for (i = 0; i < gst_video_format_count; i++) {
-    f = g_new0 (GstVideofilterFormat, 1);
-    f->fourcc = gst_video_format_list[i].fourcc;
-    f->bpp = gst_video_format_list[i].bitspp;
-    f->filter_func = draw_puzzle;
-    if (gst_video_format_list[i].ext_caps) {
-      f->depth = gst_video_format_list[i].depth;
-      f->endianness =
-          gst_video_format_list[i].bitspp < 24 ? G_BYTE_ORDER : G_BIG_ENDIAN;
-      f->red_mask = gst_video_format_list[i].red_mask;
-      f->green_mask = gst_video_format_list[i].green_mask;
-      f->blue_mask = gst_video_format_list[i].blue_mask;
-    }
-    gst_videofilter_class_add_format (videofilter_class, f);
-  }
-
-  gst_videofilter_class_add_pad_templates (GST_VIDEOFILTER_CLASS (g_class));
-}
-
-static void
-gst_puzzle_class_init (gpointer g_class, gpointer class_data)
-{
-  GObjectClass *gobject_class;
-  GstVideofilterClass *videofilter_class;
-
-  gobject_class = G_OBJECT_CLASS (g_class);
-  videofilter_class = GST_VIDEOFILTER_CLASS (g_class);
-
-  parent_class = g_type_class_peek_parent (g_class);
-
-  gobject_class->set_property = gst_puzzle_set_property;
-  gobject_class->get_property = gst_puzzle_get_property;
-  gobject_class->finalize = gst_puzzle_finalize;
-
-  g_object_class_install_property (gobject_class, PROP_ROWS,
-      g_param_spec_uint ("rows", "rows", "number of rows in puzzle",
-          1, G_MAXUINT, 4,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, PROP_COLUMNS,
-      g_param_spec_uint ("columns", "columns", "number of columns in puzzle",
-          1, G_MAXUINT, 4,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-
-  videofilter_class->setup = gst_puzzle_setup;
-}
-
-static void
-gst_puzzle_finalize (GObject * object)
-{
-  GstPuzzle *puzzle;
-
-  puzzle = GST_PUZZLE (object);
-  g_free (puzzle->permutation);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void G_GNUC_UNUSED
-gst_puzzle_solve (GstPuzzle * puzzle)
-{
-  guint i;
-
-  for (i = 0; i < puzzle->tiles; i++) {
-    puzzle->permutation[i] = i;
-  }
-  puzzle->position = puzzle->tiles - 1;
-  puzzle->solved = TRUE;
-}
-
-static gboolean
-gst_puzzle_is_solved (GstPuzzle * puzzle)
-{
-  guint i;
-
-  if (puzzle->position != puzzle->tiles - 1)
-    return FALSE;
-
-  for (i = 0; i < puzzle->tiles; i++) {
-    if (puzzle->permutation[i] != i)
-      return FALSE;
-  }
-
-  return TRUE;
-}
-
-#if 0
-static void
-gst_puzzle_show (GstPuzzle * puzzle)
-{
-  guint i;
-
-  for (i = 0; i < puzzle->tiles; i++) {
-    g_print ("%d ", puzzle->permutation[i]);
-  }
-  g_print ("\n");
-}
-#endif
-
-static void
-gst_puzzle_swap (GstPuzzle * puzzle, guint next)
-{
-  guint tmp;
-
-  g_assert (next < puzzle->tiles);
-  tmp = puzzle->permutation[puzzle->position];
-  puzzle->permutation[puzzle->position] = puzzle->permutation[next];
-  puzzle->permutation[next] = tmp;
-  puzzle->position = next;
-}
-
-typedef enum
-{
-  DIR_UP,
-  DIR_DOWN,
-  DIR_LEFT,
-  DIR_RIGHT
-} GstPuzzleDirection;
-
-static void
-gst_puzzle_move (GstPuzzle * puzzle, GstPuzzleDirection dir)
-{
-  guint next = puzzle->tiles;
-
-  switch (dir) {
-    case DIR_UP:
-      if (puzzle->position >= puzzle->columns)
-        next = puzzle->position - puzzle->columns;
-      break;
-    case DIR_DOWN:
-      if (puzzle->tiles - puzzle->position > puzzle->columns)
-        next = puzzle->position + puzzle->columns;
-      break;
-    case DIR_LEFT:
-      if ((puzzle->position % puzzle->columns) > 0)
-        next = puzzle->position - 1;
-      break;
-    case DIR_RIGHT:
-      if ((puzzle->position % puzzle->columns) < puzzle->columns - 1)
-        next = puzzle->position + 1;
-      break;
-    default:
-      g_assert_not_reached ();
-  }
-
-  if (next < puzzle->tiles) {
-    /* the move was valid */
-    gst_puzzle_swap (puzzle, next);
-  }
-}
-
-static void
-gst_puzzle_shuffle (GstPuzzle * puzzle)
-{
-  guint i;
-
-  do {
-    for (i = 0; i < 100 * puzzle->tiles; i++) {
-      gst_puzzle_move (puzzle, g_random_int_range (0, 4));
-    }
-  } while (gst_puzzle_is_solved (puzzle));
-  puzzle->solved = FALSE;
-}
-
-/* The nav event handler handles nav events, but still forwards them, so you
- * should be able to even use puzzle while navigating a dvd menu. We return 
- * TRUE of course even when noone downstream handles the event.
- */
-static gboolean
-nav_event_handler (GstPad * pad, GstEvent * event)
-{
-  GstPuzzle *puzzle;
-  GstVideofilter *filter;
-  const gchar *type;
-  gboolean result = FALSE;
-  gdouble x, y;
-  gint xpos = 0, ypos = 0;
-
-  puzzle = GST_PUZZLE (gst_pad_get_parent (pad));
-  filter = GST_VIDEOFILTER (puzzle);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_NAVIGATION:
-      /* translate the event */
-      if (gst_structure_get_double (event->event_data.structure.structure,
-              "pointer_x", &x) &&
-          gst_structure_get_double (event->event_data.structure.structure,
-              "pointer_y", &y)) {
-        gint width, height;
-
-        width = gst_videofilter_get_input_width (filter);
-        height = gst_videofilter_get_input_height (filter);
-        width = (width / puzzle->columns) & ~3;
-        height = (height / puzzle->rows) & ~3;
-        xpos = (int) x / width;
-        ypos = (int) y / height;
-        if (xpos >= 0 && xpos < puzzle->columns && ypos >= 0
-            && ypos < puzzle->rows) {
-          GstEvent *copy;
-          guint lookup;
-
-          lookup = puzzle->permutation[ypos * puzzle->columns + xpos];
-          GST_DEBUG_OBJECT (puzzle, "translated %dx%d (%gx%g) to %dx%d (%gx%g)",
-              xpos, ypos, x, y,
-              lookup % puzzle->columns, lookup / puzzle->columns,
-              x + ((gint) (lookup % puzzle->columns) - xpos) * width,
-              y + ((gint) (lookup / puzzle->columns) - ypos) * height);
-          x += ((gint) (lookup % puzzle->columns) - xpos) * width;
-          y += ((gint) (lookup / puzzle->columns) - ypos) * height;
-          copy = gst_event_copy (event);
-          gst_structure_set (copy->event_data.structure.structure,
-              "pointer_x", G_TYPE_DOUBLE, x,
-              "pointer_y", G_TYPE_DOUBLE, y, NULL);
-          gst_event_unref (event);
-          event = copy;
-        }
-      }
-      /* handle the event. NOTE: it has already been translated! */
-      type = gst_structure_get_string (event->event_data.structure.structure,
-          "event");
-      if (g_str_equal (type, "key-press")) {
-        const gchar *key =
-            gst_structure_get_string (event->event_data.structure.structure,
-            "key");
-
-        if (g_str_equal (key, "space")) {
-          if (gst_puzzle_is_solved (puzzle)) {
-            gst_puzzle_shuffle (puzzle);
-          } else {
-            gst_puzzle_solve (puzzle);
-          }
-        } else {
-          if (puzzle->solved)
-            break;
-          if (g_str_equal (key, "Left")) {
-            gst_puzzle_move (puzzle, DIR_LEFT);
-          } else if (g_str_equal (key, "Right")) {
-            gst_puzzle_move (puzzle, DIR_RIGHT);
-          } else if (g_str_equal (key, "Up")) {
-            gst_puzzle_move (puzzle, DIR_UP);
-          } else if (g_str_equal (key, "Down")) {
-            gst_puzzle_move (puzzle, DIR_DOWN);
-          }
-        }
-        puzzle->solved = gst_puzzle_is_solved (puzzle);
-      } else if (g_str_equal (type, "mouse-button-press")) {
-        gint button;
-
-        if (gst_structure_get_int (event->event_data.structure.structure,
-                "button", &button)) {
-          if (button == 1) {
-            if (xpos >= 0 && xpos < puzzle->columns && ypos >= 0
-                && ypos < puzzle->rows && !puzzle->solved) {
-              gst_puzzle_swap (puzzle, ypos * puzzle->columns + xpos);
-              puzzle->solved = gst_puzzle_is_solved (puzzle);
-            }
-          } else if (button == 2) {
-            if (puzzle->solved) {
-              gst_puzzle_shuffle (puzzle);
-            } else {
-              gst_puzzle_solve (puzzle);
-            }
-            puzzle->solved = gst_puzzle_is_solved (puzzle);
-          }
-        }
-      }
-      /* FIXME: only return TRUE for events we handle? */
-      result = TRUE;
-      break;
-    default:
-      break;
-  }
-  return gst_pad_event_default (pad, event) || result;
-}
-
-static void
-gst_puzzle_create (GstPuzzle * puzzle)
-{
-  guint i;
-
-  puzzle->tiles = puzzle->rows * puzzle->columns;
-  g_assert (puzzle->tiles);
-  g_free (puzzle->permutation);
-
-  puzzle->permutation = g_new (guint, puzzle->tiles);
-  for (i = 0; i < puzzle->tiles; i++) {
-    puzzle->permutation[i] = i;
-  }
-  puzzle->position = puzzle->tiles - 1;
-  /* shuffle a bit */
-  gst_puzzle_shuffle (puzzle);
-}
-
-static void
-gst_puzzle_init (GTypeInstance * instance, gpointer g_class)
-{
-  GstVideofilter *videofilter;
-  GstPuzzle *puzzle;
-
-  videofilter = GST_VIDEOFILTER (instance);
-  puzzle = GST_PUZZLE (instance);
-  /* FIXME: this is evil */
-  gst_pad_set_event_function (videofilter->srcpad, nav_event_handler);
-
-  /* set this so we don't crash when initializing */
-  puzzle->rows = 1;
-  puzzle->columns = 1;
-}
-
-static void
-gst_puzzle_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstPuzzle *src;
-
-  g_return_if_fail (GST_IS_PUZZLE (object));
-  src = GST_PUZZLE (object);
-
-  GST_DEBUG ("gst_puzzle_set_property");
-  switch (prop_id) {
-    case PROP_COLUMNS:
-      src->columns = g_value_get_uint (value);
-      gst_puzzle_create (src);
-      break;
-    case PROP_ROWS:
-      src->rows = g_value_get_uint (value);
-      gst_puzzle_create (src);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_puzzle_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstPuzzle *src;
-
-  g_return_if_fail (GST_IS_PUZZLE (object));
-  src = GST_PUZZLE (object);
-
-  switch (prop_id) {
-    case PROP_COLUMNS:
-      g_value_set_uint (value, src->columns);
-      break;
-    case PROP_ROWS:
-      g_value_set_uint (value, src->rows);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_puzzle_setup (GstVideofilter * videofilter)
-{
-  GstPuzzle *puzzle;
-
-  g_return_if_fail (GST_IS_PUZZLE (videofilter));
-  puzzle = GST_PUZZLE (videofilter);
-
-  puzzle->format = NULL;
-}
-
-static void
-draw_puzzle (GstVideofilter * videofilter, void *destp, void *srcp)
-{
-  GstPuzzle *puzzle;
-  int width, height;
-  guint i;
-  GstVideoImage dest, src;
-
-  puzzle = GST_PUZZLE (videofilter);
-  if (!puzzle->format) {
-    puzzle->format =
-        gst_video_format_find_by_structure (gst_caps_get_structure
-        (gst_pad_get_negotiated_caps (videofilter->sinkpad), 0));
-  }
-  width = gst_videofilter_get_input_width (videofilter);
-  height = gst_videofilter_get_input_height (videofilter);
-  gst_video_image_setup (&dest, puzzle->format, destp, width, height);
-  gst_video_image_setup (&src, puzzle->format, srcp, width, height);
-  /* use multiples of 4 here to get around drawing problems with YUV colorspaces */
-  width = (width / puzzle->columns) & ~3;
-  height = (height / puzzle->rows) & ~3;
-  if (width == 0 || height == 0) {
-    gst_video_image_copy_area (&dest, 0, 0, &src, 0, 0,
-        gst_videofilter_get_input_width (videofilter),
-        gst_videofilter_get_input_height (videofilter));
-    return;
-  }
-  if (width * puzzle->columns != gst_videofilter_get_input_width (videofilter)) {
-    guint w =
-        gst_videofilter_get_input_width (videofilter) - width * puzzle->columns;
-
-    gst_video_image_copy_area (&dest, width * puzzle->columns, 0, &src,
-        width * puzzle->columns, 0, w,
-        gst_videofilter_get_input_height (videofilter));
-  }
-  if (height * puzzle->rows != gst_videofilter_get_input_height (videofilter)) {
-    guint h =
-        gst_videofilter_get_input_height (videofilter) - height * puzzle->rows;
-
-    gst_video_image_copy_area (&dest, 0, height * puzzle->rows, &src, 0,
-        height * puzzle->rows, gst_videofilter_get_input_width (videofilter),
-        h);
-  }
-
-  for (i = 0; i < puzzle->tiles; i++) {
-    if (!puzzle->solved && i == puzzle->position) {
-      gst_video_image_draw_rectangle (&dest, width * (i % puzzle->columns),
-          height * (i / puzzle->columns), width, height,
-          &GST_VIDEO_COLOR_WHITE, TRUE);
-    } else {
-      gst_video_image_copy_area (&dest, width * (i % puzzle->columns),
-          height * (i / puzzle->columns), &src,
-          width * (puzzle->permutation[i] % puzzle->columns),
-          height * (puzzle->permutation[i] / puzzle->columns), width, height);
-    }
-  }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-#ifdef HAVE_LIBOIL
-  oil_init ();
-#endif
-
-  if (!gst_library_load ("gstvideofilter"))
-    return FALSE;
-
-  return gst_element_register (plugin, "puzzle", GST_RANK_NONE,
-      GST_TYPE_PUZZLE);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    games,
-    "a collection of games to showcase features",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/games/gstvideoimage.c b/gst/games/gstvideoimage.c
deleted file mode 100644 (file)
index c32953b..0000000
+++ /dev/null
@@ -1,946 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *               <2004> Benjamin Otte <otte@gnome.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstvideoimage.h"
-#ifdef HAVE_LIBOIL
-#include <liboil/liboil.h>
-#endif
-
-#include <string.h>
-
-const GstVideoColor GST_VIDEO_COLOR_WHITE = { 255, 128, 128, 255, 255, 255 };
-const GstVideoColor GST_VIDEO_COLOR_YELLOW = { 226, 0, 155, 255, 255, 0 };
-const GstVideoColor GST_VIDEO_COLOR_CYAN = { 179, 170, 0, 0, 255, 255 };
-const GstVideoColor GST_VIDEO_COLOR_GREEN = { 150, 46, 21, 0, 255, 0 };
-const GstVideoColor GST_VIDEO_COLOR_MAGENTA = { 105, 212, 235, 255, 0, 255 };
-const GstVideoColor GST_VIDEO_COLOR_RED = { 76, 85, 255, 255, 0, 0 };
-const GstVideoColor GST_VIDEO_COLOR_BLUE = { 29, 255, 107, 0, 0, 255 };
-const GstVideoColor GST_VIDEO_COLOR_BLACK = { 16, 128, 128, 0, 0, 0 };
-const GstVideoColor GST_VIDEO_COLOR_NEG_I = { 16, 198, 21, 0, 0, 128 };
-const GstVideoColor GST_VIDEO_COLOR_POS_Q = { 16, 235, 198, 0, 128, 255 };
-const GstVideoColor GST_VIDEO_COLOR_SUPER_BLACK = { 0, 128, 128, 0, 0, 0 };
-const GstVideoColor GST_VIDEO_COLOR_DARK_GREY = { 32, 128, 128, 32, 32, 32 };
-
-const GstVideoFormat *
-gst_video_format_find_by_structure (const GstStructure * structure)
-{
-  int i;
-  const char *media_type = gst_structure_get_name (structure);
-  int ret;
-
-  g_return_val_if_fail (structure, NULL);
-
-  if (strcmp (media_type, "video/x-raw-yuv") == 0) {
-    char *s;
-    int fourcc;
-    guint32 format;
-
-    ret = gst_structure_get_fourcc (structure, "format", &format);
-    if (!ret)
-      return NULL;
-    for (i = 0; i < gst_video_format_count; i++) {
-      s = gst_video_format_list[i].fourcc;
-      //g_print("testing " GST_FOURCC_FORMAT " and %s\n", GST_FOURCC_ARGS(format), s);
-      fourcc = GST_MAKE_FOURCC (s[0], s[1], s[2], s[3]);
-      if (fourcc == format) {
-        return gst_video_format_list + i;
-      }
-    }
-  } else if (strcmp (media_type, "video/x-raw-rgb") == 0) {
-    int red_mask;
-    int green_mask;
-    int blue_mask;
-    int depth;
-    int bpp;
-
-    ret = gst_structure_get_int (structure, "red_mask", &red_mask);
-    ret &= gst_structure_get_int (structure, "green_mask", &green_mask);
-    ret &= gst_structure_get_int (structure, "blue_mask", &blue_mask);
-    ret &= gst_structure_get_int (structure, "depth", &depth);
-    ret &= gst_structure_get_int (structure, "bpp", &bpp);
-
-    for (i = 0; i < gst_video_format_count; i++) {
-      if (strcmp (gst_video_format_list[i].fourcc, "RGB ") == 0 &&
-          gst_video_format_list[i].red_mask == red_mask &&
-          gst_video_format_list[i].green_mask == green_mask &&
-          gst_video_format_list[i].blue_mask == blue_mask &&
-          gst_video_format_list[i].depth == depth &&
-          gst_video_format_list[i].bitspp == bpp) {
-        return gst_video_format_list + i;
-
-      }
-    }
-    return NULL;
-  }
-
-  g_critical ("format not found for media type %s", media_type);
-
-  return NULL;
-}
-
-const GstVideoFormat *
-gst_video_format_find_by_fourcc (int find_fourcc)
-{
-  int i;
-
-  for (i = 0; i < gst_video_format_count; i++) {
-    char *s;
-    int fourcc;
-
-    s = gst_video_format_list[i].fourcc;
-    fourcc = GST_MAKE_FOURCC (s[0], s[1], s[2], s[3]);
-    if (find_fourcc == fourcc) {
-      /* If YUV format, it's good */
-      if (!gst_video_format_list[i].ext_caps) {
-        return gst_video_format_list + i;
-      }
-
-      return gst_video_format_list + i;
-    }
-  }
-  return NULL;
-}
-
-const GstVideoFormat *
-gst_video_format_find_by_name (const char *name)
-{
-  int i;
-
-  for (i = 0; i < gst_video_format_count; i++) {
-    if (strcmp (name, gst_video_format_list[i].name) == 0) {
-      return gst_video_format_list + i;
-    }
-  }
-  return NULL;
-}
-
-
-GstStructure *
-gst_video_format_get_structure (const GstVideoFormat * format)
-{
-  unsigned int fourcc;
-
-  g_return_val_if_fail (format, NULL);
-
-  fourcc =
-      GST_MAKE_FOURCC (format->fourcc[0], format->fourcc[1], format->fourcc[2],
-      format->fourcc[3]);
-
-  if (format->ext_caps) {
-    int endianness;
-
-    if (format->bitspp == 16) {
-      endianness = G_BYTE_ORDER;
-    } else {
-      endianness = G_BIG_ENDIAN;
-    }
-    return gst_structure_new ("video/x-raw-rgb",
-        "bpp", G_TYPE_INT, format->bitspp,
-        "endianness", G_TYPE_INT, endianness,
-        "depth", G_TYPE_INT, format->depth,
-        "red_mask", G_TYPE_INT, format->red_mask,
-        "green_mask", G_TYPE_INT, format->green_mask,
-        "blue_mask", G_TYPE_INT, format->blue_mask, NULL);
-  } else {
-    return gst_structure_new ("video/x-raw-yuv",
-        "format", GST_TYPE_FOURCC, fourcc, NULL);
-  }
-}
-
-/* returns the size in bytes for one video frame of the given dimensions
- * given the fourcc in GstVideotestsrc */
-guint
-gst_video_format_get_size (const GstVideoFormat * format, guint w, guint h)
-{
-  GstVideoImage p = { 0 };
-
-  g_return_val_if_fail (format != NULL, 0);
-  g_return_val_if_fail (w > 0, 0);
-  g_return_val_if_fail (h > 0, 0);
-
-  gst_video_image_setup (&p, format, NULL, w, h);
-
-  return (unsigned long) p.endptr;
-}
-
-void
-gst_video_image_setup (GstVideoImage * image, const GstVideoFormat * format,
-    guint8 * data, guint w, guint h)
-{
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (format != NULL);
-  g_return_if_fail (w > 0);
-  g_return_if_fail (h > 0);
-
-  image->width = w;
-  image->height = h;
-  image->format = format;
-  format->paint_setup (image, data);
-}
-
-void
-gst_video_image_paint_hline (GstVideoImage * image, gint x, gint y, gint w,
-    const GstVideoColor * c)
-{
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (c != NULL);
-  g_return_if_fail (w > 0);
-
-  /* check coords */
-  if (y < 0 || y >= image->height)
-    return;
-  if (x < 0) {
-    if (x + w < 0)
-      return;
-    w += x;
-    x = 0;
-  }
-  if (x >= image->width)
-    return;
-  if (x + w > image->width) {
-    w = image->width - x;
-  }
-  image->format->paint_hline (image, x, y, w, c);
-}
-
-void
-gst_video_image_draw_rectangle (GstVideoImage * image, gint x, gint y,
-    gint w, gint h, const GstVideoColor * c, gboolean filled)
-{
-  gint i;
-
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (c != NULL);
-  g_return_if_fail (w > 0);
-  g_return_if_fail (h > 0);
-
-  /* check coords */
-  if (x < 0) {
-    if (x + w < 0)
-      return;
-    w += x;
-    x = 0;
-  }
-  if (x >= image->width)
-    return;
-  if (x + w > image->width) {
-    w = image->width - x;
-  }
-  if (y < 0) {
-    if (y + h < 0)
-      return;
-    h += y;
-    y = 0;
-  }
-  if (y >= image->height)
-    return;
-  if (y + h > image->height) {
-    y = image->height - y;
-  }
-
-  if (filled) {
-    for (i = 0; i < h; i++) {
-      image->format->paint_hline (image, x, y + i, w, c);
-    }
-  } else {
-    h--;
-    image->format->paint_hline (image, x, y, w, c);
-    for (i = 1; i < h; i++) {
-      image->format->paint_hline (image, x, y + i, 1, c);
-      image->format->paint_hline (image, x + w - 1, y + i, 1, c);
-    }
-    image->format->paint_hline (image, x, y + h, w, c);
-  }
-}
-
-void
-gst_video_image_copy_hline (GstVideoImage * dest, gint xdest, gint ydest,
-    GstVideoImage * src, gint xsrc, gint ysrc, gint w)
-{
-  g_return_if_fail (dest != NULL);
-  g_return_if_fail (src != NULL);
-  g_return_if_fail (dest->format == src->format);
-  g_return_if_fail (w > 0);
-
-  /* check width coords */
-  if (xdest >= dest->width)
-    return;
-  if (xsrc >= src->width)
-    return;
-  if (xdest < 0) {
-    xsrc -= xdest;
-    w += xdest;
-    xdest = 0;
-  }
-  if (xsrc < 0) {
-    xdest -= xsrc;
-    w += xsrc;
-    xsrc = 0;
-  }
-  if (w <= 0)
-    return;
-  if (xdest + w > dest->width)
-    w = dest->width - xdest;
-  if (xsrc + w > src->width)
-    w = src->width - xsrc;
-  /* check height coords */
-  if (ysrc >= src->height || ysrc < 0)
-    return;
-  if (ydest >= dest->height || ydest < 0)
-    return;
-
-  dest->format->copy_hline (dest, xdest, ydest, src, xsrc, ysrc, w);
-}
-
-void
-gst_video_image_copy_area (GstVideoImage * dest, gint xdest, gint ydest,
-    GstVideoImage * src, gint xsrc, gint ysrc, gint w, gint h)
-{
-  gint i;
-
-  g_return_if_fail (dest != NULL);
-  g_return_if_fail (src != NULL);
-  g_return_if_fail (dest->format == src->format);
-  g_return_if_fail (w > 0);
-  g_return_if_fail (h > 0);
-
-  /* check width coords */
-  if (xdest >= dest->width)
-    return;
-  if (xsrc >= src->width)
-    return;
-  if (xdest < 0) {
-    xsrc -= xdest;
-    w += xdest;
-    xdest = 0;
-  }
-  if (xsrc < 0) {
-    xdest -= xsrc;
-    w += xsrc;
-    xsrc = 0;
-  }
-  if (w <= 0)
-    return;
-  if (xdest + w > dest->width)
-    w = dest->width - xdest;
-  if (xsrc + w > src->width)
-    w = src->width - xsrc;
-  /* check height coords */
-  if (ydest >= dest->height)
-    return;
-  if (ysrc >= src->height)
-    return;
-  if (ydest < 0) {
-    ysrc -= ydest;
-    h += ydest;
-    ydest = 0;
-  }
-  if (ysrc < 0) {
-    ydest -= ysrc;
-    h += ysrc;
-    ysrc = 0;
-  }
-  if (h <= 0)
-    return;
-  if (ydest + h > dest->height)
-    h = dest->height - ydest;
-  if (ysrc + h > src->height)
-    h = src->height - ysrc;
-
-  for (i = 0; i < h; i++) {
-    dest->format->copy_hline (dest, xdest, ydest + i, src, xsrc, ysrc + i, w);
-  }
-}
-
-
-#define ROUND_UP_2(x)  (((x)+1)&~1)
-#define ROUND_UP_4(x)  (((x)+3)&~3)
-#define ROUND_UP_8(x)  (((x)+7)&~7)
-
-static void
-paint_setup_I420 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width);
-  p->up = p->yp + p->ystride * ROUND_UP_2 (p->height);
-  p->ustride = ROUND_UP_8 (p->width) / 2;
-  p->vp = p->up + p->ustride * ROUND_UP_2 (p->height) / 2;
-  p->vstride = ROUND_UP_8 (p->ystride) / 2;
-  p->endptr = p->vp + p->vstride * ROUND_UP_2 (p->height) / 2;
-}
-
-static void
-paint_hline_I420 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int x1 = x / 2;
-  int x2 = (x + w) / 2;
-  int offset = y * p->ystride;
-  int offset1 = (y / 2) * p->ustride;
-
-  memset (p->yp + offset + x, c->Y, w);
-  memset (p->up + offset1 + x1, c->U, x2 - x1);
-  memset (p->vp + offset1 + x1, c->V, x2 - x1);
-}
-
-static void
-copy_hline_I420 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int destoffset1 = (ydest / 2) * dest->ustride;
-  int srcoffset = ysrc * src->ystride;
-  int srcoffset1 = (ysrc / 2) * src->ustride;
-
-  memcpy (dest->yp + destoffset + xdest, src->yp + srcoffset + xsrc, w);
-  memcpy (dest->up + destoffset1 + xdest / 2, src->up + srcoffset1 + xsrc / 2,
-      w / 2);
-  memcpy (dest->vp + destoffset1 + xdest / 2, src->vp + srcoffset1 + xsrc / 2,
-      w / 2);
-}
-
-static void
-paint_setup_YV12 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width);
-  p->vp = p->yp + p->ystride * ROUND_UP_2 (p->height);
-  p->vstride = ROUND_UP_8 (p->ystride) / 2;
-  p->up = p->vp + p->vstride * ROUND_UP_2 (p->height) / 2;
-  p->ustride = ROUND_UP_8 (p->ystride) / 2;
-  p->endptr = p->up + p->ustride * ROUND_UP_2 (p->height) / 2;
-}
-
-static void
-paint_setup_YUY2 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->up = dest + 1;
-  p->vp = dest + 3;
-  p->ystride = ROUND_UP_2 (p->width) * 2;
-  p->endptr = dest + p->ystride * p->height;
-}
-
-static void
-paint_setup_UYVY (GstVideoImage * p, char *dest)
-{
-  p->yp = dest + 1;
-  p->up = dest;
-  p->vp = dest + 2;
-  p->ystride = ROUND_UP_2 (p->width) * 2;
-  p->endptr = dest + p->ystride * p->height;
-}
-
-static void
-paint_setup_YVYU (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->up = dest + 3;
-  p->vp = dest + 1;
-  p->ystride = ROUND_UP_2 (p->width * 2);
-  p->endptr = dest + p->ystride * p->height;
-}
-
-#ifndef HAVE_LIBOIL
-void
-oil_splat_u8 (guint8 * dest, int dstr, guint8 val, int n)
-{
-  int i;
-
-  for (i = 0; i < n; i++) {
-    *dest = val;
-    dest += dstr;
-  }
-}
-#endif
-
-static void
-paint_hline_YUY2 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int x1 = x / 2;
-  int x2 = (x + w) / 2;
-  int offset = y * p->ystride;
-
-  oil_splat_u8 (p->yp + offset + x * 2, 2, c->Y, w);
-  oil_splat_u8 (p->up + offset + x1 * 4, 4, c->U, x2 - x1);
-  oil_splat_u8 (p->vp + offset + x1 * 4, 4, c->V, x2 - x1);
-}
-
-static void
-copy_hline_YUY2 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int srcoffset = ysrc * src->ystride;
-
-  memcpy (dest->yp + destoffset + xdest * 2, src->yp + srcoffset + xsrc * 2,
-      w * 2);
-}
-
-static void
-paint_setup_IYU2 (GstVideoImage * p, char *dest)
-{
-  /* untested */
-  p->yp = dest + 1;
-  p->up = dest + 0;
-  p->vp = dest + 2;
-  p->ystride = ROUND_UP_4 (p->width * 3);
-  p->endptr = dest + p->ystride * p->height;
-}
-
-static void
-paint_hline_IYU2 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int offset;
-
-  offset = y * p->ystride;
-  oil_splat_u8 (p->yp + offset + x * 3, 3, c->Y, w);
-  oil_splat_u8 (p->up + offset + x * 3, 3, c->U, w);
-  oil_splat_u8 (p->vp + offset + x * 3, 3, c->V, w);
-}
-
-static void
-copy_hline_IYU2 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int srcoffset = ydest * src->ystride;
-
-  memcpy (dest->yp + destoffset + xdest * 3, src->yp + srcoffset + xsrc * 3,
-      w * 3);
-}
-
-static void
-paint_setup_Y41B (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width);
-  p->up = p->yp + p->ystride * p->height;
-  p->ustride = ROUND_UP_8 (p->width) / 4;
-  p->vp = p->up + p->ustride * p->height;
-  p->vstride = ROUND_UP_8 (p->width) / 4;
-  p->endptr = p->vp + p->vstride * p->height;
-}
-
-static void
-paint_hline_Y41B (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int x1 = x / 4;
-  int x2 = (x + w) / 4;
-  int offset = y * p->ystride;
-  int offset1 = y * p->ustride;
-
-  memset (p->yp + offset + x, c->Y, w);
-  memset (p->up + offset1 + x1, c->U, x2 - x1);
-  memset (p->vp + offset1 + x1, c->V, x2 - x1);
-}
-
-static void
-copy_hline_Y41B (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int destoffset1 = ydest * dest->ustride;
-  int srcoffset = ysrc * src->ystride;
-  int srcoffset1 = ysrc * src->ustride;
-
-  memcpy (dest->yp + destoffset + xdest, src->yp + srcoffset + xsrc, w);
-  memcpy (dest->up + destoffset1 + xdest / 4, src->up + srcoffset1 + xsrc / 4,
-      w / 4);
-  memcpy (dest->vp + destoffset1 + xdest / 4, src->vp + srcoffset1 + xsrc / 4,
-      w / 4);
-}
-
-static void
-paint_setup_Y42B (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width);
-  p->up = p->yp + p->ystride * p->height;
-  p->ustride = ROUND_UP_8 (p->width) / 2;
-  p->vp = p->up + p->ustride * p->height;
-  p->vstride = ROUND_UP_8 (p->width) / 2;
-  p->endptr = p->vp + p->vstride * p->height;
-}
-
-static void
-paint_hline_Y42B (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int x1 = x / 2;
-  int x2 = (x + w) / 2;
-  int offset = y * p->ystride;
-  int offset1 = y * p->ustride;
-
-  memset (p->yp + offset + x, c->Y, w);
-  memset (p->up + offset1 + x1, c->U, x2 - x1);
-  memset (p->vp + offset1 + x1, c->V, x2 - x1);
-}
-
-static void
-copy_hline_Y42B (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int destoffset1 = ydest * dest->ustride;
-  int srcoffset = ysrc * src->ystride;
-  int srcoffset1 = ysrc * src->ustride;
-
-  memcpy (dest->yp + destoffset + xdest, src->yp + srcoffset + xsrc, w);
-  memcpy (dest->up + destoffset1 + xdest / 2, src->up + srcoffset1 + xsrc / 2,
-      w / 2);
-  memcpy (dest->vp + destoffset1 + xdest / 2, src->vp + srcoffset1 + xsrc / 2,
-      w / 2);
-}
-
-static void
-paint_setup_Y800 (GstVideoImage * p, char *dest)
-{
-  /* untested */
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width);
-  p->endptr = dest + p->ystride * p->height;
-}
-
-static void
-paint_hline_Y800 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int offset = y * p->ystride;
-
-  memset (p->yp + offset + x, c->Y, w);
-}
-
-static void
-copy_hline_Y800 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int srcoffset = ysrc * src->ystride;
-
-  memcpy (dest->yp + destoffset + xdest, src->yp + srcoffset + xsrc, w);
-}
-
-static void
-paint_setup_YVU9 (GstVideoImage * p, char *dest)
-{
-  int h = ROUND_UP_4 (p->height);
-
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width);
-  p->vp = p->yp + p->ystride * ROUND_UP_4 (p->height);
-  p->vstride = ROUND_UP_4 (p->ystride / 4);
-  p->up = p->vp + p->vstride * ROUND_UP_4 (h / 4);
-  p->ustride = ROUND_UP_4 (p->ystride / 4);
-  p->endptr = p->up + p->ustride * ROUND_UP_4 (h / 4);
-}
-
-static void
-paint_setup_YUV9 (GstVideoImage * p, char *dest)
-{
-  /* untested */
-  int h = ROUND_UP_4 (p->height);
-
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width);
-  p->up = p->yp + p->ystride * h;
-  p->ustride = ROUND_UP_4 (p->ystride / 4);
-  p->vp = p->up + p->ustride * ROUND_UP_4 (h / 4);
-  p->vstride = ROUND_UP_4 (p->ystride / 4);
-  p->endptr = p->vp + p->vstride * ROUND_UP_4 (h / 4);
-}
-
-static void
-paint_hline_YUV9 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int x1 = x / 4;
-  int x2 = (x + w) / 4;
-  int offset = y * p->ystride;
-  int offset1 = (y / 4) * p->ustride;
-
-  memset (p->yp + offset + x, c->Y, w);
-  memset (p->up + offset1 + x1, c->U, x2 - x1);
-  memset (p->vp + offset1 + x1, c->V, x2 - x1);
-}
-
-static void
-copy_hline_YUV9 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int destoffset1 = ydest * dest->ustride;
-  int srcoffset = ysrc * src->ystride;
-  int srcoffset1 = ysrc * src->ustride;
-
-  memcpy (dest->yp + destoffset + xdest, src->yp + srcoffset + xsrc, w);
-  memcpy (dest->up + destoffset1 + xdest / 4, src->up + srcoffset1 + xsrc / 4,
-      w / 4);
-  memcpy (dest->vp + destoffset1 + xdest / 4, src->vp + srcoffset1 + xsrc / 4,
-      w / 4);
-}
-
-static void
-paint_setup_xRGB8888 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest + 1;
-  p->up = dest + 2;
-  p->vp = dest + 3;
-  p->ystride = p->width * 4;
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_setup_xBGR8888 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest + 3;
-  p->up = dest + 2;
-  p->vp = dest + 1;
-  p->ystride = p->width * 4;
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_setup_RGBx8888 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest + 0;
-  p->up = dest + 1;
-  p->vp = dest + 2;
-  p->ystride = p->width * 4;
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_setup_BGRx8888 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest + 2;
-  p->up = dest + 1;
-  p->vp = dest + 0;
-  p->ystride = p->width * 4;
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_setup_RGB888 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest + 0;
-  p->up = dest + 1;
-  p->vp = dest + 2;
-  p->ystride = ROUND_UP_4 (p->width * 3);
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_setup_BGR888 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest + 2;
-  p->up = dest + 1;
-  p->vp = dest + 0;
-  p->ystride = ROUND_UP_4 (p->width * 3);
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_hline_str4 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int offset = y * p->ystride;
-
-  oil_splat_u8 (p->yp + offset + x * 4, 4, c->R, w);
-  oil_splat_u8 (p->up + offset + x * 4, 4, c->G, w);
-  oil_splat_u8 (p->vp + offset + x * 4, 4, c->B, w);
-}
-
-static void
-copy_hline_str4 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int srcoffset = ysrc * src->ystride;
-
-  memcpy (dest->yp + destoffset + xdest * 4, src->yp + srcoffset + xsrc * 4,
-      w * 4);
-}
-
-static void
-paint_hline_str3 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int offset = y * p->ystride;
-
-  oil_splat_u8 (p->yp + offset + x * 3, 3, c->R, w);
-  oil_splat_u8 (p->up + offset + x * 3, 3, c->G, w);
-  oil_splat_u8 (p->vp + offset + x * 3, 3, c->B, w);
-}
-
-static void
-copy_hline_str3 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int srcoffset = ysrc * src->ystride;
-
-  memcpy (dest->yp + destoffset + xdest * 3, src->yp + srcoffset + xsrc * 3,
-      w * 3);
-}
-
-static void
-paint_setup_RGB565 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width * 2);
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_hline_RGB565 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int offset = y * p->ystride;
-  unsigned int a, b;
-
-  a = (c->R & 0xf8) | (c->G >> 5);
-  b = ((c->G << 3) & 0xe0) | (c->B >> 3);
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-  oil_splat_u8 (p->yp + offset + x * 2 + 0, 2, b, w);
-  oil_splat_u8 (p->yp + offset + x * 2 + 1, 2, a, w);
-#else
-  oil_splat_u8 (p->yp + offset + x * 2 + 0, 2, a, w);
-  oil_splat_u8 (p->yp + offset + x * 2 + 1, 2, b, w);
-#endif
-}
-
-static void
-copy_hline_str2 (GstVideoImage * dest, int xdest, int ydest,
-    GstVideoImage * src, int xsrc, int ysrc, int w)
-{
-  int destoffset = ydest * dest->ystride;
-  int srcoffset = ysrc * src->ystride;
-
-  memcpy (dest->yp + destoffset + xdest * 2, src->yp + srcoffset + xsrc * 2,
-      w * 2);
-}
-
-static void
-paint_setup_xRGB1555 (GstVideoImage * p, char *dest)
-{
-  p->yp = dest;
-  p->ystride = ROUND_UP_4 (p->width * 2);
-  p->endptr = p->dest + p->ystride * p->height;
-}
-
-static void
-paint_hline_xRGB1555 (GstVideoImage * p, int x, int y, int w,
-    const GstVideoColor * c)
-{
-  int offset = y * p->ystride;
-  unsigned int a, b;
-
-  a = ((c->R >> 1) & 0x7c) | (c->G >> 6);
-  b = ((c->G << 2) & 0xe0) | (c->B >> 3);
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-  oil_splat_u8 (p->yp + offset + x * 2 + 0, 2, b, w);
-  oil_splat_u8 (p->yp + offset + x * 2 + 1, 2, a, w);
-#else
-  oil_splat_u8 (p->yp + offset + x * 2 + 0, 2, a, w);
-  oil_splat_u8 (p->yp + offset + x * 2 + 1, 2, b, w);
-#endif
-}
-
-const GstVideoFormat gst_video_format_list[] = {
-/* packed */
-  {"YUY2", "YUY2", 16, paint_setup_YUY2, paint_hline_YUY2, copy_hline_YUY2},
-  {"UYVY", "UYVY", 16, paint_setup_UYVY, paint_hline_YUY2, copy_hline_YUY2},
-  {"Y422", "Y422", 16, paint_setup_UYVY, paint_hline_YUY2, copy_hline_YUY2},
-  {"UYNV", "UYNV", 16, paint_setup_UYVY, paint_hline_YUY2, copy_hline_YUY2},    /* FIXME: UYNV? */
-  {"YVYU", "YVYU", 16, paint_setup_YVYU, paint_hline_YUY2, copy_hline_YUY2},
-
-  /* interlaced */
-  /*{ "IUYV", "IUY2", 16, paint_setup_YVYU, paint_hline_YUY2 }, */
-
-  /* inverted */
-  /*{ "cyuv", "cyuv", 16, paint_setup_YVYU, paint_hline_YUY2 }, */
-
-  /*{ "Y41P", "Y41P", 12, paint_setup_YVYU, paint_hline_YUY2 }, */
-
-  /* interlaced */
-  /*{ "IY41", "IY41", 12, paint_setup_YVYU, paint_hline_YUY2 }, */
-
-  /*{ "Y211", "Y211", 8, paint_setup_YVYU, paint_hline_YUY2 }, */
-
-  /*{ "Y41T", "Y41T", 12, paint_setup_YVYU, paint_hline_YUY2 }, */
-  /*{ "Y42P", "Y42P", 16, paint_setup_YVYU, paint_hline_YUY2 }, */
-  /*{ "CLJR", "CLJR", 8, paint_setup_YVYU, paint_hline_YUY2 }, */
-  /*{ "IYU1", "IYU1", 12, paint_setup_YVYU, paint_hline_YUY2 }, */
-  {"IYU2", "IYU2", 24, paint_setup_IYU2, paint_hline_IYU2, copy_hline_IYU2},
-
-/* planar */
-  /* YVU9 */
-  {"YVU9", "YVU9", 9, paint_setup_YVU9, paint_hline_YUV9, copy_hline_YUV9},
-  /* YUV9 */
-  {"YUV9", "YUV9", 9, paint_setup_YUV9, paint_hline_YUV9, copy_hline_YUV9},
-  /* IF09 */
-  /* YV12 */
-  {"YV12", "YV12", 12, paint_setup_YV12, paint_hline_I420, copy_hline_I420},
-  /* I420 */
-  {"I420", "I420", 12, paint_setup_I420, paint_hline_I420, copy_hline_I420},
-  /* NV12 */
-  /* NV21 */
-  /* CLPL */
-  /* Y41B */
-  {"Y41B", "Y41B", 12, paint_setup_Y41B, paint_hline_Y41B, copy_hline_Y41B},
-  /* Y42B */
-  {"Y42B", "Y42B", 16, paint_setup_Y42B, paint_hline_Y42B, copy_hline_Y42B},
-  /* Y800 grayscale */
-  {"Y800", "Y800", 8, paint_setup_Y800, paint_hline_Y800, copy_hline_Y800},
-
-  {"RGB ", "xRGB8888", 32, paint_setup_xRGB8888, paint_hline_str4,
-        copy_hline_str4,
-      1, 24, 0x00ff0000, 0x0000ff00, 0x000000ff},
-  {"RGB ", "xBGR8888", 32, paint_setup_xBGR8888, paint_hline_str4,
-        copy_hline_str4,
-      1, 24, 0x000000ff, 0x0000ff00, 0x00ff0000},
-  {"RGB ", "RGBx8888", 32, paint_setup_RGBx8888, paint_hline_str4,
-        copy_hline_str4,
-      1, 24, 0xff000000, 0x00ff0000, 0x0000ff00},
-  {"RGB ", "BGRx8888", 32, paint_setup_BGRx8888, paint_hline_str4,
-        copy_hline_str4,
-      1, 24, 0x0000ff00, 0x00ff0000, 0xff000000},
-  {"RGB ", "RGB888", 24, paint_setup_RGB888, paint_hline_str3, copy_hline_str3,
-      1, 24, 0x00ff0000, 0x0000ff00, 0x000000ff},
-  {"RGB ", "BGR888", 24, paint_setup_BGR888, paint_hline_str3, copy_hline_str3,
-      1, 24, 0x000000ff, 0x0000ff00, 0x00ff0000},
-  {"RGB ", "RGB565", 16, paint_setup_RGB565, paint_hline_RGB565,
-        copy_hline_str2,
-      1, 16, 0x0000f800, 0x000007e0, 0x0000001f},
-  {"RGB ", "xRGB1555", 16, paint_setup_xRGB1555, paint_hline_xRGB1555,
-        copy_hline_str2,
-      1, 15, 0x00007c00, 0x000003e0, 0x0000001f},
-};
-const guint gst_video_format_count = G_N_ELEMENTS (gst_video_format_list);
diff --git a/gst/games/gstvideoimage.h b/gst/games/gstvideoimage.h
deleted file mode 100644 (file)
index 2181e02..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/* GStreamer
- * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
- *               <2004> Benjamin Otte <otte@gnome.org
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/gst.h>
-
-#ifndef __GST_VIDEO_IMAGE_H__
-#define __GST_VIDEO_IMAGE_H__
-
-G_BEGIN_DECLS
-
-
-typedef struct _GstVideoColor GstVideoColor;
-typedef struct _GstVideoImage GstVideoImage;
-typedef struct _GstVideoFormat GstVideoFormat;
-
-struct _GstVideoColor {
-  int           Y, U, V;
-  int           R, G, B;
-};
-extern const GstVideoColor GST_VIDEO_COLOR_WHITE;
-extern const GstVideoColor GST_VIDEO_COLOR_YELLOW;
-extern const GstVideoColor GST_VIDEO_COLOR_CYAN;
-extern const GstVideoColor GST_VIDEO_COLOR_GREEN;
-extern const GstVideoColor GST_VIDEO_COLOR_MAGENTA;
-extern const GstVideoColor GST_VIDEO_COLOR_RED;
-extern const GstVideoColor GST_VIDEO_COLOR_BLUE;
-extern const GstVideoColor GST_VIDEO_COLOR_BLACK;
-extern const GstVideoColor GST_VIDEO_COLOR_NEG_I;
-extern const GstVideoColor GST_VIDEO_COLOR_POS_Q;
-extern const GstVideoColor GST_VIDEO_COLOR_SUPER_BLACK;
-extern const GstVideoColor GST_VIDEO_COLOR_DARK_GREY;
-
-
-struct _GstVideoImage
-{
-  guint8 *      dest;           /* pointer to first byte of video data */
-  guint8 *      yp, *up, *vp;   /* pointers to first byte of each component
-                                 * for both packed/planar YUV and RGB */
-  guint8 *      endptr;         /* pointer to byte beyond last video data */
-  guint         ystride;
-  guint         ustride;
-  guint         vstride;
-  guint         width;
-  guint         height;
-  const GstVideoFormat * format;
-};
-
-struct _GstVideoFormat
-{
-  char *        fourcc;
-  char *        name;
-  int           bitspp;
-  void          (* paint_setup) (GstVideoImage * p, char *dest);
-  void          (* paint_hline) (GstVideoImage * p, int x, int y, int w, const GstVideoColor *c);
-  void          (* copy_hline) (GstVideoImage * dest, int destx, int desty,
-      GstVideoImage * src, int srcx, int srcy, int w);
-  int           ext_caps;
-  int           depth;
-  guint         red_mask;
-  guint         green_mask;
-  guint         blue_mask;
-};
-
-const GstVideoFormat *  gst_video_format_find_by_fourcc         (int find_fourcc);
-const GstVideoFormat *  gst_video_format_find_by_name           (const char *name);
-const GstVideoFormat *  gst_video_format_find_by_structure      (const GstStructure *structure);
-GstStructure *          gst_video_format_get_structure          (const GstVideoFormat *format);
-guint                   gst_video_format_get_size               (const GstVideoFormat *format, 
-                                                                 guint w, guint h);
-
-extern const GstVideoFormat gst_video_format_list[];
-extern const guint gst_video_format_count;
-
-void                    gst_video_image_setup                   (GstVideoImage *image, 
-                                                                 const GstVideoFormat *format,
-                                                                 guint8 *data, guint w, guint h);
-                                                                         
-/* drawing operations */
-void                    gst_video_image_draw_hline              (GstVideoImage *image,
-                                                                 gint x, gint y, gint w,
-                                                                 const GstVideoColor *c);
-void                    gst_video_image_draw_rectangle          (GstVideoImage *image,
-                                                                 gint x, gint y, gint w, gint h,
-                                                                 const GstVideoColor *c, gboolean filled);
-void                    gst_video_image_copy_hline              (GstVideoImage *dest,
-                                                                 gint xdest, gint ydest,
-                                                                 GstVideoImage *src,
-                                                                 gint xsrc, gint ysrc, gint w);
-void                    gst_video_image_copy_area               (GstVideoImage *dest,
-                                                                 gint xdest, gint ydest,
-                                                                 GstVideoImage *src,
-                                                                 gint xsrc, gint ysrc, 
-                                                                 gint w, gint h);
-
-G_END_DECLS
-
-#endif /* __GST_VIDEO_IMAGE_H__ */
diff --git a/gst/games/meson.build b/gst/games/meson.build
deleted file mode 100644 (file)
index e350927..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-games_sources = [
-  'gstvideoimage.c',
-  'gstpuzzle.c',
-]
-
-gstpuzzle = library('gstpuzzle',
-  games_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/hdvparse/Makefile.am b/gst/hdvparse/Makefile.am
deleted file mode 100644 (file)
index ea9368a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-plugin_LTLIBRARIES = libgsthdvparse.la
-
-libgsthdvparse_la_SOURCES = \
-       gsthdvparse.c
-
-noinst_HEADERS = \
-       gsthdvparse.h
-
-libgsthdvparse_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
-libgsthdvparse_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(LIBM)
-libgsthdvparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgsthdvparse_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/gst/hdvparse/gsthdvparse.c b/gst/hdvparse/gsthdvparse.c
deleted file mode 100644 (file)
index b899e95..0000000
+++ /dev/null
@@ -1,888 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2009 Edward Hervey <bilboed@bilboed.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-HDVParse
- *
- * <refsect2>
- * <title>Example launch line</title>
- * <para>
- * <programlisting>
- * gst-launch -v -m filesrc ! mpegtsdemux ! hdvparse ! fakesink silent=TRUE
- * </programlisting>
- * </para>
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-
-#include "gsthdvparse.h"
-
-GST_DEBUG_CATEGORY_STATIC (gst_hdvparse_debug);
-#define GST_CAT_DEFAULT gst_hdvparse_debug
-
-/* Filter signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-};
-
-
-
-#define CLOCK_BASE 9LL
-#define CLOCK_FREQ (CLOCK_BASE * 10000)
-
-#define MPEGTIME_TO_GSTTIME(time) (gst_util_uint64_scale ((time), \
-            GST_MSECOND/10, CLOCK_BASE))
-#define GSTTIME_TO_MPEGTIME(time) (gst_util_uint64_scale ((time), \
-            CLOCK_BASE, GST_MSECOND/10))
-
-/* If set to 1, then extra validation will be applied to check
- * for complete spec compliance wherever applicable. */
-#define VALIDATE 0
-
-/* Binary-coded decimal reading macro */
-#define BCD(c) ( ((((c) >> 4) & 0x0f) * 10) + ((c) & 0x0f) )
-/* Same as before, but with a mask */
-#define BCD_M(c, mask) (BCD ((c) & (mask)))
-
-/* the capabilities of the inputs and outputs.
- *
- * describe the real formats here.
- */
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("hdv/aux-v;hdv/aux-a")
-    );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS
-    ("hdv/aux-v,parsed=(boolean)True;hdv/aux-a,parsed=(boolean)True")
-    );
-
-/* debug category for fltering log messages
- *
- * exchange the string 'Template HDVParse' with your description
- */
-#define DEBUG_INIT(bla) \
-  GST_DEBUG_CATEGORY_INIT (gst_hdvparse_debug, "hdvparse", 0, "HDV private stream parser");
-
-GST_BOILERPLATE_FULL (GstHDVParse, gst_hdvparse, GstBaseTransform,
-    GST_TYPE_BASE_TRANSFORM, DEBUG_INIT);
-
-static GstFlowReturn gst_hdvparse_transform_ip (GstBaseTransform * base,
-    GstBuffer * outbuf);
-static GstCaps *gst_hdvparse_transform_caps (GstBaseTransform * trans,
-    GstPadDirection dir, GstCaps * incaps);
-
-/* GObject vmethod implementations */
-
-static void
-gst_hdvparse_base_init (gpointer klass)
-{
-
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &src_template);
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_set_static_metadata (element_class, "HDVParser",
-      "Data/Parser",
-      "HDV private stream Parser", "Edward Hervey <bilboed@bilboed.com>");
-}
-
-/* initialize the HDVParse's class */
-static void
-gst_hdvparse_class_init (GstHDVParseClass * klass)
-{
-  GST_BASE_TRANSFORM_CLASS (klass)->transform_ip =
-      GST_DEBUG_FUNCPTR (gst_hdvparse_transform_ip);
-  GST_BASE_TRANSFORM_CLASS (klass)->transform_caps =
-      GST_DEBUG_FUNCPTR (gst_hdvparse_transform_caps);
-}
-
-/* initialize the new element
- * initialize instance structure
- */
-static void
-gst_hdvparse_init (GstHDVParse * filter, GstHDVParseClass * klass)
-{
-  GstBaseTransform *transform = GST_BASE_TRANSFORM (filter);
-
-  gst_base_transform_set_in_place (transform, TRUE);
-  gst_base_transform_set_passthrough (transform, TRUE);
-}
-
-static GstCaps *
-gst_hdvparse_transform_caps (GstBaseTransform * trans, GstPadDirection dir,
-    GstCaps * incaps)
-{
-  GstCaps *res = NULL;
-  GstStructure *st = gst_caps_get_structure (incaps, 0);
-
-  GST_WARNING_OBJECT (trans, "dir:%d, incaps:%" GST_PTR_FORMAT, dir, incaps);
-
-  if (dir == GST_PAD_SINK) {
-    res = gst_caps_new_simple (gst_structure_get_name (st),
-        "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
-  } else {
-    res = gst_caps_new_simple (gst_structure_get_name (st), NULL);
-  }
-
-  return res;
-}
-
-
-static inline const gchar *
-sfr_to_framerate (guint8 sfr)
-{
-  switch (sfr) {
-    case 4:
-      return "30000/1001";
-    case 3:
-      return "25/1";
-    case 1:
-      return "24000/1001";
-    default:
-      return "RESERVED";
-  }
-}
-
-static GstFlowReturn
-parse_dv_multi_pack (GstHDVParse * filter, guint8 * data, guint64 size,
-    GstStructure * st)
-{
-  guint64 offs = 1;
-
-  while (size / 5) {
-    GST_LOG ("DV pack 0x%x", data[offs]);
-    switch (data[offs]) {
-      case 0x70:{
-        guint8 irispos, ae, agc, wbmode, whitebal, focusmode, focuspos;
-
-        irispos = data[offs + 1] & 0x3f;
-        ae = data[offs + 2] >> 4;
-        agc = data[offs + 2] & 0xf;
-        wbmode = data[offs + 3] >> 5;
-        whitebal = data[offs + 3] & 0x1f;
-        focusmode = data[offs + 4] >> 7;
-        focuspos = data[offs + 4] & 0x7f;
-
-        GST_LOG (" Consumer Camera 1");
-
-        GST_LOG ("  Iris position %d (0x%x)", irispos, irispos);
-        /* Iris position = 2 ^ (IP/8) (for 0 < IP < 0x3C) */
-        if (irispos < 0x3c) {
-          GST_LOG ("   IRIS F%0.2f", powf (2.0, (((float) irispos) / 8.0)));
-          gst_structure_set (st, "aperture-fnumber", G_TYPE_FLOAT,
-              powf (2.0, (((float) irispos) / 8.0)), NULL);
-        } else if (irispos == 0x3d) {
-          GST_LOG ("   IRIS < 1.0");
-        } else if (irispos == 0x3e) {
-          GST_LOG ("    IRIS closed");
-        }
-
-        /* AE Mode:
-         * 0 : Full automatic
-         * 1 : Gain Priority mode
-         * 2 : Shutter Priority mode
-         * 3 : Iris priority mode
-         * 4 : Manual
-         * ..: Reserved
-         * F : No information */
-        GST_LOG ("  AE Mode: %d (0x%x)", ae, ae);
-
-        GST_LOG ("  AGC: %d (0x%x)", agc, agc);
-        if (agc < 0xd) {
-          /* This is what the spec says.. but I'm not seeing the same on my camera :( */
-          GST_LOG ("   Gain:%02.2fdB", (agc * 3.0) - 3.0);
-          gst_structure_set (st, "gain", G_TYPE_FLOAT, (agc * 3.0) - 3.0, NULL);
-        }
-        /* White balance mode
-         * 0 : Automatic
-         * 1 : hold
-         * 2 : one push
-         * 3 : pre-set
-         * 7 : no-information */
-        if (wbmode != 7)
-          GST_LOG ("  White balance mode : %d (0x%x)", wbmode, wbmode);
-        /* White balance
-         * 0 : Candle
-         * 1 : Incandescent lamp
-         * 2 : low color temperature fluorescent lamp
-         * 3 : high color temperature fluorescent lamp
-         * 4 : sunlight
-         * 5 : cloudy weather
-         * F : No information
-         */
-        if (whitebal != 0xf)
-          GST_LOG ("  White balance : %d (0x%x)", whitebal, whitebal);
-        if (focuspos != 0x7f) {
-          GST_LOG ("  Focus mode : %s", focusmode ? "MANUAL" : "AUTOMATIC");
-          GST_LOG ("  Focus position: %d (0x%x)", focuspos, focuspos);
-        }
-      }
-        break;
-      case 0x71:{
-        guint8 v_pan, h_pan, focal_length, e_zoom;
-        gboolean is, zen;
-
-        v_pan = data[offs + 1] & 0x3f;
-        is = data[offs + 2] >> 7;
-        h_pan = data[offs + 2] & 0x7f;
-        focal_length = data[offs + 3];
-        zen = data[offs + 4] >> 7;
-        e_zoom = data[offs + 4] & 0x7f;
-
-        GST_LOG (" Consumer Camera 2");
-        if (v_pan != 0x3f)
-          GST_LOG ("  Vertical Panning : %d (0x%d)", v_pan, v_pan);
-        if (h_pan != 0x7f)
-          GST_LOG ("  Horizontal Panning : %d (0x%d)", h_pan, h_pan);
-        GST_LOG ("  Stabilizer : %s", is ? "OFF" : "ON");
-        if (focal_length != 0xff)
-          GST_LOG ("  Focal Length : %f mm",
-              (focal_length & 0x7f) * pow (10, focal_length & 0x80));
-        if (zen == 0)
-          GST_LOG ("  Electric Zoom %02dd.%03d", e_zoom >> 5, e_zoom & 0x1f);
-      }
-        break;
-      case 0x7f:{
-        guint16 speed;
-        guint16 speedint;
-
-        GST_LOG (" Shutter");
-        if (data[offs + 1] != 0xff)
-          GST_LOG (" Shutter Speed (1) : %d, 0x%x",
-              data[offs + 1], data[offs + 1]);
-        if (data[offs + 2] != 0xff)
-          GST_LOG (" Shutter Speed (1) : %d, 0x%x",
-              data[offs + 2], data[offs + 2]);
-
-        speed = data[offs + 3] | (data[offs + 4] & 0x7f) << 8;
-
-        /* The shutter speed is 1/(CSS * horizontal scanning period) */
-        /* FIXME : 34000 is a value interpolated by observations */
-        speedint = (int) (34000.0 / (float) speed);
-        /* Only the highest two decimal digits are valid */
-        if (speedint > 100)
-          speedint = speedint / 10 * 10;
-
-        GST_LOG (" Shutter speed : 1/%d", speedint);
-        gst_structure_set (st, "shutter-speed", GST_TYPE_FRACTION,
-            1, speedint, NULL);
-      }
-        break;
-      default:
-        GST_MEMDUMP ("Unknown pack", data + offs, 5);
-        break;
-    }
-    size -= 5;
-    offs += 5;
-  }
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-parse_video_frame (GstHDVParse * filter, guint8 * data, guint64 size,
-    GstStructure * st)
-{
-  guint32 etn, bitrate;
-  guint8 nbframes, data_h, hdr_size, sfr, sdm;
-  guint8 aspect, framerate, profile, level, format, chroma;
-  guint8 gop_n, gop_m, cgms, recst, abst;
-  guint16 vbv_delay, width, height, vbv_buffer;
-  guint64 dts;
-  gboolean pf, tf, rf;
-
-  GST_LOG_OBJECT (filter, "Video Frame Pack");
-
-  /* Byte | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-   *      ---------------------------------
-   *  0   |          Size (0x39)          |
-   *      ---------------------------------
-   *  1   |                               |
-   *  2   |            ETN                |
-   *  3   |                               |
-   *      ---------------------------------
-   */
-
-  if (data[0] != 0x39) {
-    GST_WARNING ("Invalid size for Video frame");
-    return GST_FLOW_ERROR;
-  }
-  etn = data[3] << 16 | data[2] << 8 | data[1];
-
-  GST_LOG_OBJECT (filter, " ETN : %" G_GUINT32_FORMAT, etn);
-
-  /* Pack-V Information
-   *      ---------------------------------
-   *  4   |    Number of Video Frames     |
-   *      ---------------------------------
-   *  5   | 0 | 0 | 0 | 0 |   DATA-H      |
-   *      ---------------------------------
-   *  6   |            VBV                |
-   *  7   |           DELAY               |
-   *      ---------------------------------
-   *  8   |         HEADER SIZE           |
-   *      ---------------------------------
-   *  9   |                               |
-   * 10   |           DTS                 |
-   * 11   |                               |
-   * 12   |                               |
-   *      -----------------------------   |
-   * 13   | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   |
-   *      ---------------------------------
-   * 14   |PF |TF |RF | 0 |      SFR      |
-   *      ---------------------------------
-   */
-
-  nbframes = data[4];
-
-  if (VALIDATE && (data[5] >> 4))
-    return GST_FLOW_ERROR;
-  data_h = data[5] & 0xf;
-
-  vbv_delay = data[6] | data[7] << 8;
-
-  hdr_size = data[8];
-
-  dts = data[9] | data[10] << 8 | data[11] << 16 | data[12] << 24;
-  dts |= (guint64) (data[13] & 0x1) << 32;
-  if (G_UNLIKELY (VALIDATE && (data[13] & 0xfe))) {
-    return GST_FLOW_ERROR;
-  }
-
-  pf = data[14] & 0x80;
-  tf = data[14] & 0x40;
-  rf = data[14] & 0x20;
-  if (G_UNLIKELY (VALIDATE && (data[14] & 0x10)))
-    return GST_FLOW_ERROR;
-
-  sfr = data[14] & 0x07;
-
-  GST_LOG_OBJECT (filter, " Pack-V Information");
-  GST_LOG_OBJECT (filter, "  Number of Video Frames : %d", nbframes);
-  GST_LOG_OBJECT (filter, "  Leading PES-V picture type %s (0x%x)",
-      (data_h == 0x1) ? "I-picture" : "other", data_h);
-  GST_LOG_OBJECT (filter, "  VBV Delay of first frame: %" G_GUINT32_FORMAT,
-      vbv_delay);
-  GST_LOG_OBJECT (filter, "  Header Size:%d", hdr_size);
-  GST_LOG_OBJECT (filter, "  DTS: %" GST_TIME_FORMAT " (%" G_GUINT64_FORMAT ")",
-      GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (dts)), dts);
-  GST_LOG_OBJECT (filter, "  Video source : %s %s %s (0x%x 0x%x 0x%x)",
-      pf ? "Progressive" : "Interlaced",
-      tf ? "TFF" : "", rf ? "RFF" : "", pf, tf, rf);
-  GST_LOG_OBJECT (filter, "  Source Frame Rate : %s (0x%x)",
-      sfr_to_framerate (sfr), sfr);
-
-  gst_structure_set (st, "DTS", G_TYPE_UINT64, MPEGTIME_TO_GSTTIME (dts),
-      "interlaced", G_TYPE_BOOLEAN, !pf, NULL);
-
-  /* Search Data Mode
-   *      ---------------------------------
-   * 15   |    Search Data Mode           |
-   *      ---------------------------------
-   */
-  sdm = data[15];
-  GST_LOG_OBJECT (filter, " Search Data Mode : 0x%x", sdm);
-  GST_LOG_OBJECT (filter, "  %s %s %s",
-      sdm & 0x2 ? "8x-Base" : "",
-      sdm & 0x4 ? "8x-Helper" : "", sdm & 0x10 ? "24x" : "");
-
-  /* Video Mode
-   *      ---------------------------------
-   * 16   |    Horizontal size            |
-   *      -----------------               |
-   * 17   | 0 | 0 | 0 | 0 |               |
-   *      ---------------------------------
-   * 18   |    Vertical   size            |
-   *      -----------------               |
-   * 19   | 0 | 0 | 0 | 0 |               |
-   *      ---------------------------------
-   * 20   | Aspect ratio  | Frame Rate    |
-   *      ---------------------------------
-   * 21   |                               |
-   * 22   |            bitrate            |
-   *      -------------------------       |
-   * 23   | 0 | 0 | 0 | 0 | 0 | 0 |       |
-   *      ---------------------------------
-   * 24   |          VBV Buffer size      |
-   *      -------------------------       |
-   * 25   | 0 | 0 | 0 | 0 | 0 | 0 |       |
-   *      ---------------------------------
-   * 26   | 0 | Profile   |   Level       |
-   *      ---------------------------------
-   * 27   | 0 | Format    |Chroma | 0 | 0 |
-   *      ---------------------------------
-   * 28   |      GOP N        |  GOP M    |
-   *      ---------------------------------
-   */
-  width = data[16] | (data[17] & 0xf) << 8;
-  height = data[18] | (data[19] & 0xf) << 8;
-  if (VALIDATE && ((data[17] & 0xf0) || data[19] & 0xf0))
-    return GST_FLOW_ERROR;
-  aspect = data[20] >> 4;
-  framerate = data[20] & 0xf;
-  bitrate = data[21] | data[22] << 8 | (data[23] & 0x3) << 16;
-  if (VALIDATE && (data[23] & 0xfc))
-    return GST_FLOW_ERROR;
-  vbv_buffer = data[24] | (data[25] & 0x3) << 8;
-  if (VALIDATE && (data[25] & 0xfc))
-    return GST_FLOW_ERROR;
-  profile = (data[26] >> 4) & 0x7;
-  level = data[26] & 0xf;
-  format = (data[27] >> 4) & 0x7;
-  chroma = (data[27] >> 2) & 0x3;
-  gop_n = data[28] >> 3;
-  gop_m = data[28] & 0x7;
-
-  GST_LOG_OBJECT (filter, " Video Mode");
-  GST_LOG_OBJECT (filter, "  width:%d, height:%d", width, height);
-  GST_LOG_OBJECT (filter, "  Aspect Ratio : %s (0x%x)",
-      (aspect == 0x3) ? "16/9" : "RESERVED", aspect);
-  GST_LOG_OBJECT (filter, "  Framerate: %s (0x%x)",
-      sfr_to_framerate (framerate), framerate);
-  GST_LOG_OBJECT (filter, "  Bitrate: %d bit/s", bitrate * 400);
-  GST_LOG_OBJECT (filter, "  VBV buffer Size : %d bits",
-      vbv_buffer * 16 * 1024);
-  GST_LOG_OBJECT (filter, "  MPEG Profile : %s (0x%x)",
-      (profile == 0x4) ? "Main" : "RESERVED", profile);
-  GST_LOG_OBJECT (filter, "  MPEG Level : %s (0x%x)",
-      (level == 0x6) ? "High-1440" : "RESERVED", level);
-  GST_LOG_OBJECT (filter, "  Video format : %s (0x%x)",
-      (format == 0) ? "Component" : "Reserved", format);
-  GST_LOG_OBJECT (filter, "  Chroma : %s (0x%x)",
-      (chroma == 0x1) ? "4:2:0" : "RESERVED", chroma);
-  GST_LOG_OBJECT (filter, "  GOP N/M : %d / %d", gop_n, gop_m);
-
-  /* data availability
-   *      ---------------------------------
-   * 29   | 0 | 0 | 0 | 0 | 0 |PE2|PE1|PE0|
-   *      ---------------------------------
-   * PE0 : HD2 TTC is valid
-   * PE1 : REC DATE is valid
-   * PE2 : REC TIME is valid
-   */
-  if (data[29] & 0x1) {
-    guint8 fr, sec, min, hr;
-    gboolean bf, df;
-    gchar *ttcs;
-
-    /* HD2 TTC
-     *      ---------------------------------
-     * 30   |BF |DF |Tens Fr|Units of Frames|
-     *      ---------------------------------
-     * 31   | 1 |Tens second|Units of Second|
-     *      ---------------------------------
-     * 32   | 1 |Tens minute|Units of Minute|
-     *      ---------------------------------
-     * 33   | 1 | 1 |Tens Hr|Units of Hours |
-     *      ---------------------------------
-     */
-    bf = data[30] >> 7;
-    df = (data[30] >> 6) & 0x1;
-    fr = BCD (data[30] & 0x3f);
-    sec = BCD (data[31] & 0x7f);
-    min = BCD (data[32] & 0x7f);
-    hr = BCD (data[33] & 0x3f);
-    GST_LOG_OBJECT (filter, " HD2 Title Time Code");
-    GST_LOG_OBJECT (filter, "  BF:%d, Drop Frame:%d", bf, df);
-    ttcs = g_strdup_printf ("%02d:%02d:%02d.%02d", hr, min, sec, fr);
-    GST_LOG_OBJECT (filter, "  Timecode %s", ttcs);
-    /* FIXME : Use framerate information from above to convert to GstClockTime */
-    gst_structure_set (st, "title-time-code", G_TYPE_STRING, ttcs, NULL);
-    g_free (ttcs);
-
-  }
-
-  if (data[29] & 0x2) {
-    gboolean ds, tm;
-    guint8 tz, day, dow, month, year;
-    GDate *date;
-
-    /* REC DATE
-     *      ---------------------------------
-     * 34   |DS |TM |Tens TZ|Units of TimeZn|
-     *      ---------------------------------
-     * 35   | 1 | 1 |Tens dy| Units of Days |
-     *      ---------------------------------
-     * 36   |   Week    |TMN|Units of Months|
-     *      ---------------------------------
-     * 37   | Tens of Years |Units of Years |
-     *      ---------------------------------
-     */
-    ds = data[34] >> 7;
-    tm = (data[34] >> 6) & 0x1;
-    tz = BCD (data[34] & 0x3f);
-    day = BCD (data[35] & 0x3f);
-    dow = data[36] >> 5;
-    month = BCD (data[36] & 0x1f);
-    year = BCD (data[37]);
-
-    GST_LOG_OBJECT (filter, " REC DATE");
-    GST_LOG_OBJECT (filter, "  ds:%d, tm:%d", ds, tm);
-    GST_LOG_OBJECT (filter, "  Timezone: %d", tz);
-    GST_LOG_OBJECT (filter, "  Date: %d %02d/%02d/%04d", dow, day, month, year);
-    date = g_date_new_dmy (day, month, year);
-    gst_structure_set (st, "date", GST_TYPE_DATE, date,
-        "timezone", G_TYPE_INT, tz,
-        "daylight-saving", G_TYPE_BOOLEAN, ds, NULL);
-    g_date_free (date);
-  }
-
-  if (data[29] & 0x4) {
-    guint8 fr, sec, min, hr;
-    gchar *times;
-
-    /* REC TIME
-     *      ---------------------------------
-     * 38   | 1 | 1 |Tens Fr|Units of Frames|
-     *      ---------------------------------
-     * 39   | 1 |Tens second|Units of Second|
-     *      ---------------------------------
-     * 40   | 1 |Tens minute|Units of Minute|
-     *      ---------------------------------
-     * 41   | 1 | 1 |Tens Hr|Units of Hours |
-     *      ---------------------------------
-     */
-    fr = BCD (data[38] & 0x3f);
-    sec = BCD (data[39] & 0x7f);
-    min = BCD (data[40] & 0x7f);
-    hr = BCD (data[41] & 0x3f);
-    times = g_strdup_printf ("%02d:%02d:%02d", hr, min, sec);
-    GST_LOG_OBJECT (filter, " REC TIME %02d:%02d:%02d.%02d", hr, min, sec, fr);
-    gst_structure_set (st, "time", G_TYPE_STRING, times, NULL);
-    g_free (times);
-  }
-
-  /* MISC
-   *      ---------------------------------
-   * 42   | CGMS  |REC|ABS| 0 | 0 | 0 | 0 |
-   *      ---------------------------------
-   */
-  cgms = data[42] >> 6;
-  recst = (data[42] >> 5) & 0x1;
-  abst = (data[42] >> 4) & 0x1;
-
-  GST_LOG_OBJECT (filter, " CGMS:0x%x", cgms);
-  GST_LOG_OBJECT (filter, " Recording Start Point : %s",
-      (recst == 0) ? "PRESENT" : "ABSENT");
-  GST_LOG_OBJECT (filter, " ABST : %s",
-      (abst == 0) ? "DISCONTINUITY" : "NO DISCONTINUITY");
-
-  gst_structure_set (st, "recording-start-point", G_TYPE_BOOLEAN, !recst, NULL);
-
-  /* Extended DV Pack #1
-   * 43 - 47
-   */
-  GST_LOG_OBJECT (filter, " Extended DV Pack #1 : 0x%x", data[43]);
-
-  /* Extended DV Pack #1
-   * 48 - 52
-   */
-  GST_LOG_OBJECT (filter, " Extended DV Pack #2 : 0x%x", data[48]);
-
-  /* Extended DV Pack #1
-   * 53 - 57
-   */
-  GST_LOG_OBJECT (filter, " Extended DV Pack #3 : 0x%x", data[53]);
-
-  return GST_FLOW_OK;
-
-}
-
-static GstFlowReturn
-parse_audio_frame (GstHDVParse * filter, guint8 * data, guint64 size,
-    GstStructure * st)
-{
-  guint32 etn;
-  guint8 nbmute, nbaau;
-  guint64 pts;
-  guint16 audio_comp;
-  guint8 bitrate, fs, compress, channel;
-  guint8 option, cgms;
-  gboolean acly, recst;
-
-  GST_LOG_OBJECT (filter, "Audio Frame Pack");
-
-  /* Byte | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-   *      ---------------------------------
-   *  0   |          Size (0x0f)          |
-   *      ---------------------------------
-   *  1   |                               |
-   *  2   |            ETN                |
-   *  3   |                               |
-   *      ---------------------------------
-   *  4   |Nb Audio Mute | Number of AAU  |
-   *      ---------------------------------
-   */
-
-  if (data[0] != 0x0f) {
-    GST_WARNING ("Invalid size for audio frame");
-    return GST_FLOW_ERROR;
-  }
-  etn = data[3] << 16 | data[2] << 8 | data[1];
-
-  GST_LOG_OBJECT (filter, " ETN : %" G_GUINT32_FORMAT, etn);
-
-  /* Pack-A Information
-   *      ---------------------------------
-   *  4   |Nb Audio Mute | Number of AAU  |
-   *      ---------------------------------
-   *  5   |                               |
-   *  6   |            PTS                |
-   *  7   |                               |
-   *  8   |                               |
-   *      -----------------------------   |
-   *  9   | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   |
-   *      ---------------------------------
-   * 10   |           Audio               |
-   * 11   |         Compensation          |
-   *      ---------------------------------
-   */
-
-  /* Number of Audio Mute Frames */
-  nbmute = data[4] >> 4;
-  /* Number of AAU */
-  nbaau = data[4] & 0x0f;
-  /* PTS of the first AAU immediatly following */
-  pts = (data[5] | data[6] << 8 | data[7] << 16 | data[8] << 24);
-  pts |= (guint64) (data[9] & 0x1) << 32;
-  if (G_UNLIKELY (VALIDATE && (data[9] & 0xfe))) {
-    return GST_FLOW_ERROR;
-  }
-
-  /* Amount of compensation */
-  audio_comp = data[10] | data[11] << 8;
-
-  GST_LOG_OBJECT (filter, " Pack-A Information");
-  GST_LOG_OBJECT (filter, "  Nb Audio Mute Frames : %d", nbmute);
-  GST_LOG_OBJECT (filter, "  Nb AAU : %d", nbaau);
-  GST_LOG_OBJECT (filter,
-      "  PTS : %" GST_TIME_FORMAT " (%" G_GUINT64_FORMAT ")",
-      GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (pts)), pts);
-  GST_LOG_OBJECT (filter, "  Audio Compensation : %" G_GUINT32_FORMAT,
-      audio_comp);
-
-  /* Audio Mode
-   *      ---------------------------------
-   * 12   | Bitrate Index | 0 |Samplerate |
-   *      ---------------------------------
-   * 13   | Compression   |   Channels    |
-   *      ---------------------------------
-   * 14   | X |     Anciliary Option      |
-   *      ---------------------------------
-   *
-   * X : Anciliary data present
-   */
-
-  bitrate = data[12] >> 4;
-  fs = data[12] & 0x7;
-  if (G_UNLIKELY (VALIDATE && (data[12] & 0x08)))
-    return GST_FLOW_ERROR;
-
-  compress = data[13] >> 4;
-  channel = data[13] & 0xf;
-  acly = data[14] & 0x80;
-  option = data[14] & 0x7f;
-
-  GST_LOG_OBJECT (filter, " Audio Mode");
-  GST_LOG_OBJECT (filter, "  Bitrate : %s (0x%x)",
-      (bitrate == 0xe) ? "384kbps" : "RESERVED", bitrate);
-  GST_LOG_OBJECT (filter, "  Samplerate : %s (0x%x)",
-      (fs == 0x1) ? "48 kHz" : "RESERVED", fs);
-  GST_LOG_OBJECT (filter, "  Compression : %s (0x%x)",
-      (compress == 0x2) ? "MPEG-1 Layer II" : "RESERVED", compress);
-  GST_LOG_OBJECT (filter, "  Channels : %s (0x%x)",
-      (channel == 0) ? "Stereo" : "RESERVED", channel);
-  GST_LOG_OBJECT (filter, "  Anciliary data %s %s (0x%x)",
-      acly ? "PRESENT" : "ABSENT",
-      (option == 0xc) ? "IEC 13818-3" : "ABSENT/RESERVED", option);
-  /* 
-   *      ---------------------------------
-   * 15   | CGMS  | R | 0 | 0 | 0 | 0 | 0 |
-   *      ---------------------------------
-   *
-   * R : Recording Start Point
-   */
-
-  cgms = data[15] & 0xc0;
-  recst = data[15] & 0x20;
-
-  GST_LOG_OBJECT (filter, " Misc");
-  GST_LOG_OBJECT (filter, "  CGMS : 0x%x", cgms);
-  GST_LOG_OBJECT (filter, "  Recording Start Point %s",
-      (recst) ? "ABSENT" : "PRESENT");
-
-  gst_structure_set (st, "PTS", G_TYPE_UINT64, MPEGTIME_TO_GSTTIME (pts),
-      "recording-start-point", G_TYPE_BOOLEAN, !recst, NULL);
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_hdvparse_parse (GstHDVParse * filter, GstBuffer * buf)
-{
-  GstFlowReturn res = GST_FLOW_OK;
-  guint8 *data = GST_BUFFER_DATA (buf);
-  guint64 offs = 0;
-  guint64 insize = GST_BUFFER_SIZE (buf);
-  GstStructure *st;
-
-  /* Byte | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-   *      ---------------------------------
-   *  0   | 0 |      KEYWORD              |
-   * (1)  |         LENGTH                |
-   *                 ....
-   *
-   * KEYWORD :
-   *   0x00 - 0x3F : Constant length (5 bytes)
-   *   0x40 - 0x7F : Variable length (LENGTH + 1)
-   *
-   * LENGTH : if present, size of fields 1-N
-   *
-   * Known keyword values:
-   * 0x00-0x07 : AUX-V
-   * 0x08-0x3E : RESERVED
-   * 0x3F      : AUX-N NO-INFO
-   * 0x40-0x43 : AUX-A
-   * 0x44-0x47 : AUX-V
-   * 0x48-0x4F : AUX-N
-   * 0x50-0x53 : AUX-SYS
-   * 0x54-0x7E : RESERVED
-   * 0x7F      : AUX-N NULL PACK
-   */
-
-  st = gst_structure_empty_new ("hdv-aux");
-
-  while (res == GST_FLOW_OK && (offs < insize)) {
-    guint8 kw = data[offs] & 0x7f;
-    guint8 size;
-
-    /* Variable size packs */
-    if (kw >= 0x40) {
-      size = data[offs + 1];
-    } else
-      size = 4;
-
-    /* Size validation */
-    GST_DEBUG ("kw:0x%x, insize:%" G_GUINT64_FORMAT ", offs:%" G_GUINT64_FORMAT
-        ", size:%d", kw, insize, offs, size);
-    if (insize < offs + size) {
-      res = GST_FLOW_ERROR;
-      goto beach;
-    }
-
-    switch (kw) {
-      case 0x01:
-        GST_LOG ("BINARY GROUP");
-        offs += size + 1;
-        break;
-      case 0x07:
-        GST_LOG ("ETN pack");
-        break;
-      case 0x40:
-        GST_LOG ("Audio frame pack");
-        res = parse_audio_frame (filter, data + offs + 1, size, st);
-        offs += size + 2;
-        break;
-      case 0x3f:
-        GST_LOG ("NO INFO pack");
-        offs += size + 1;
-        break;
-      case 0x44:
-        GST_LOG ("Video frame pack");
-        res = parse_video_frame (filter, data + offs + 1, size, st);
-        offs += size + 2;
-        break;
-      case 0x48:
-      case 0x49:
-      case 0x4A:
-      case 0x4B:
-        GST_LOG ("DV multi-pack");
-        res = parse_dv_multi_pack (filter, data + offs + 1, size, st);
-        offs += size + 2;
-        break;
-      default:
-        GST_WARNING_OBJECT (filter, "Unknown AUX pack data of type 0x%x", kw);
-        res = GST_FLOW_ERROR;
-    }
-  }
-
-beach:
-  if (gst_structure_n_fields (st)) {
-    GstMessage *msg;
-    /* Emit the element message */
-    msg = gst_message_new_element (GST_OBJECT (filter), st);
-    gst_element_post_message (GST_ELEMENT (filter), msg);
-  } else
-    gst_structure_free (st);
-
-  return res;
-
-}
-
-/* GstBaseTransform vmethod implementations */
-
-static GstFlowReturn
-gst_hdvparse_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
-{
-  GstHDVParse *filter = GST_HDVPARSE (base);
-
-  return gst_hdvparse_parse (filter, outbuf);
-}
-
-
-/* entry point to initialize the plug-in
- * initialize the plug-in itself
- * register the element factories and other features
- */
-static gboolean
-HDVParse_init (GstPlugin * HDVParse)
-{
-  return gst_element_register (HDVParse, "hdvparse", GST_RANK_NONE,
-      GST_TYPE_HDVPARSE);
-}
-
-/* gstreamer looks for this structure to register HDVParses
- *
- * exchange the string 'Template HDVParse' with you HDVParse description
- */
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    hdvparse,
-    "HDV private stream parser",
-    HDVParse_init, VERSION, "LGPL", "GStreamer", "http://gstreamer.net/")
diff --git a/gst/hdvparse/gsthdvparse.h b/gst/hdvparse/gsthdvparse.h
deleted file mode 100644 (file)
index dbdfddd..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/* 
- * GStreamer
- * Copyright (C) 2009 Edward Hervey <bilboed@bilboed.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#ifndef __GST_HDVPARSE_H__
-#define __GST_HDVPARSE_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_HDVPARSE \
-  (gst_hdvparse_get_type())
-#define GST_HDVPARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_HDVPARSE,GstHDVParse))
-#define GST_HDVPARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_HDVPARSE,GstHDVParseClass))
-#define GST_IS_HDVPARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_HDVPARSE))
-#define GST_IS_HDVPARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_HDVPARSE))
-
-typedef struct _GstHDVParse      GstHDVParse;
-typedef struct _GstHDVParseClass GstHDVParseClass;
-
-struct _GstHDVParse {
-  GstBaseTransform element;
-
-};
-
-struct _GstHDVParseClass {
-  GstBaseTransformClass parent_class;
-};
-
-GType gst_hdvparse_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_HDVPARSE_H__ */
diff --git a/gst/hdvparse/meson.build b/gst/hdvparse/meson.build
deleted file mode 100644 (file)
index 4ffa366..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-hdv_sources = [
-  'gsthdvparse.c'
-]
-
-gsthdvparse = library('gsthdvparse',
-  hdv_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep, libm],
-  install : true,
-  install_dir : plugins_install_dir,
-)
index 6bb2e4b..17aa3d3 100644 (file)
@@ -3,8 +3,6 @@ subdir('adpcmdec')
 subdir('adpcmenc')
 subdir('aiff')
 subdir('asfmux')
-# not ported to 1.0
-#subdir('audiobuffer')
 subdir('audiobuffersplit')
 subdir('audiofxbad')
 subdir('audiomixer')
@@ -12,28 +10,18 @@ subdir('audiovisualizers')
 subdir('autoconvert')
 subdir('bayer')
 subdir('camerabin2')
-# did not work
-#subdir('cdxaparse')
 subdir('coloreffects')
 subdir('compositor')
-#did not work
-#subdir('dccp')
 subdir('debugutils')
 subdir('dvbsuboverlay')
 subdir('dvdspu')
-# did not work
-#subdir('faceoverlay')
 subdir('festival')
 subdir('fieldanalysis')
 subdir('freeverb')
 subdir('frei0r')
-# did not work
-#subdir('games')
 subdir('gaudieffects')
 subdir('gdp')
 subdir('geometrictransform')
-#did not work
-#subdir('hdvparse')
 subdir('id3tag')
 subdir('inter')
 subdir('interlace')
@@ -43,30 +31,16 @@ subdir('jp2kdecimator')
 subdir('jpegformat')
 subdir('librfb')
 subdir('midi')
-#did not work
-#subdir('mixmatrix')
 subdir('mpegdemux')
 subdir('mpegpsmux')
 subdir('mpegtsdemux')
 subdir('mpegtsmux')
-#did not work
-#subdir('mve')
 subdir('mxf')
-#did not work
-#subdir('nuvdemux')
 subdir('onvif')
-#did not work
-#subdir('overlay')
-#did not work
-#subdir('patchdetect')
 subdir('pcapparse')
 subdir('pnm')
 subdir('rawparse')
 subdir('removesilence')
-#did not work
-#subdir('rtjpeg')
-#did not work
-#subdir('sdi')
 subdir('sdp')
 subdir('segmentclip')
 subdir('siren')
@@ -75,10 +49,6 @@ subdir('smooth')
 subdir('speed')
 subdir('stereo')
 subdir('subenc')
-#did not work
-#subdir('tta')
-#did not work
-#subdir('vbidec')
 subdir('videofilters')
 subdir('videoframe_audiolevel')
 subdir('videoparsers')
diff --git a/gst/mixmatrix/Makefile.am b/gst/mixmatrix/Makefile.am
deleted file mode 100644 (file)
index cae71f8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-plugin_LTLIBRARIES = libgstmixmatrix.la
-
-libgstmixmatrix_la_SOURCES = mixmatrix.c
-libgstmixmatrix_la_CFLAGS = $(GST_CFLAGS)
-libgstmixmatrix_la_LIBADD =
-libgstmixmatrix_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstmixmatrix_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
diff --git a/gst/mixmatrix/meson.build b/gst/mixmatrix/meson.build
deleted file mode 100644 (file)
index 35c2f86..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-mixmat_sources = [
-  'mixmatrix.c',
-]
-
-gstmixmatrix = library('gstmixmatrix',
-  mixmat_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/mixmatrix/mixmatrix.c b/gst/mixmatrix/mixmatrix.c
deleted file mode 100644 (file)
index 5f5f2a4..0000000
+++ /dev/null
@@ -1,530 +0,0 @@
-/* GStreamer
- * Copyright (C) 2002 Wim Taymans <wtay@chello.be>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/bytestream/bytestream.h>
-#include <gst/audio/audio.h>
-#include <string.h>
-
-#define GST_TYPE_MIXMATRIX \
-  (gst_mixmatrix_get_type())
-#define GST_MIXMATRIX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MIXMATRIX,GstMixMatrix))
-#define GST_MIXMATRIX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MIXMATRIX,GstMixMatrix))
-#define GST_IS_MIXMATRIX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MIXMATRIX))
-#define GST_IS_MIXMATRIX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MIXMATRIX))
-
-typedef struct _GstMixMatrix GstMixMatrix;
-typedef struct _GstMixMatrixClass GstMixMatrixClass;
-
-struct _GstMixMatrix
-{
-  GstElement element;
-
-  GstCaps *caps;
-  gint samplerate;
-
-  gint grpsize;
-  gint outsize;
-
-  GstPad **sinkpads;
-  GstByteStream **sinkbs;
-  gint sinkpadalloc;
-
-  GstPad **srcpads;
-  gint srcpadalloc;
-
-  gfloat **matrix;
-};
-
-struct _GstMixMatrixClass
-{
-  GstElementClass parent_class;
-
-  void (*resize) (GstMixMatrix * mix);
-};
-
-enum
-{
-  /* FILL ME */
-  RESIZE_SIGNAL,
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-  PROP_SINKPADS,
-  PROP_SRCPADS,
-  PROP_MATRIXPTR
-};
-
-static GstStaticPadTemplate mixmatrix_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink_%u",
-    GST_PAD_SINK,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS (GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_CAPS)
-    );
-
-static GstStaticPadTemplate mixmatrix_src_template =
-GST_STATIC_PAD_TEMPLATE ("src_%u",
-    GST_PAD_SRC,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS (GST_AUDIO_FLOAT_STANDARD_PAD_TEMPLATE_CAPS)
-    );
-
-static void gst_mixmatrix_class_init (GstMixMatrixClass * klass);
-static void gst_mixmatrix_base_init (GstMixMatrixClass * klass);
-static void gst_mixmatrix_init (GstMixMatrix * element);
-
-static void gst_mixmatrix_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_mixmatrix_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static GstPad *gst_mixmatrix_request_new_pad (GstElement * element,
-    GstPadTemplate * temp, const gchar * name);
-
-static GstPadLinkReturn gst_mixmatrix_connect (GstPad * pad,
-    const GstCaps * caps);
-
-static void gst_mixmatrix_loop (GstElement * element);
-
-static guint gst_mixmatrix_signals[LAST_SIGNAL] = { 0 };
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_mixmatrix_get_type (void)
-{
-  static GType mixmatrix_type = 0;
-
-  if (!mixmatrix_type) {
-    static const GTypeInfo mixmatrix_info = {
-      sizeof (GstMixMatrixClass),
-      (GBaseInitFunc) gst_mixmatrix_base_init,
-      NULL,
-      (GClassInitFunc) gst_mixmatrix_class_init,
-      NULL,
-      NULL,
-      sizeof (GstMixMatrix),
-      0,
-      (GInstanceInitFunc) gst_mixmatrix_init,
-    };
-
-    mixmatrix_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstMixMatrix",
-        &mixmatrix_info, 0);
-  }
-  return mixmatrix_type;
-}
-
-static void
-gst_mixmatrix_base_init (GstMixMatrixClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &mixmatrix_sink_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &mixmatrix_src_template);
-  gst_element_class_set_static_metadata (element_class, "Mixing Matrix",
-      "Filter/Editor/Audio", "Mix N audio channels together into M channels",
-      "Erik Walthinsen <omega@temple-baptist.com>");
-}
-
-static void
-gst_mixmatrix_class_init (GstMixMatrixClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gst_mixmatrix_signals[RESIZE_SIGNAL] =
-      g_signal_new ("resize",
-      G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (GstMixMatrixClass, resize),
-      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SINKPADS,
-      g_param_spec_int ("sinkpads", "Sink Pads",
-          "Number of sink pads in matrix", 0, G_MAXINT, 8,
-          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SRCPADS,
-      g_param_spec_int ("srcpads", "Src Pads", "Number of src pads in matrix",
-          0, G_MAXINT, 8, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MATRIXPTR,
-      g_param_spec_pointer ("matrixptr", "Matrix Pointer",
-          "Pointer to gfloat mix matrix",
-          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
-  gobject_class->set_property = gst_mixmatrix_set_property;
-  gobject_class->get_property = gst_mixmatrix_get_property;
-  gstelement_class->request_new_pad = gst_mixmatrix_request_new_pad;
-}
-
-static gfloat **
-mixmatrix_alloc_matrix (int x, int y)
-{
-  gfloat **matrix;
-  int i;
-
-  GST_DEBUG ("mixmatrix: allocating a %dx%d matrix of floats\n", x, y);
-  matrix = g_new (gfloat *, x);
-  GST_DEBUG ("mixmatrix: %p: ", matrix);
-  for (i = 0; i < x; i++) {
-    matrix[i] = g_new (gfloat, y);
-    GST_DEBUG ("%p, ", matrix[i]);
-  }
-  GST_DEBUG ("\n");
-  return matrix;
-}
-
-static void
-mixmatrix_free_matrix (gfloat ** matrix, int x)
-{
-  int i;
-
-  for (i = 0; i < x; i++)
-    g_free (matrix[i]);
-  g_free (matrix);
-}
-
-static void
-gst_mixmatrix_init (GstMixMatrix * mix)
-{
-  mix->grpsize = 8;
-  mix->outsize = 1024;
-
-  /* start with zero pads */
-  mix->sinkpadalloc = mix->grpsize;
-  mix->srcpadalloc = mix->grpsize;
-
-  /* allocate the pads */
-  mix->sinkpads = g_new0 (GstPad *, mix->sinkpadalloc);
-  mix->sinkbs = g_new0 (GstByteStream *, mix->sinkpadalloc);
-
-  mix->srcpads = g_new0 (GstPad *, mix->srcpadalloc);
-
-  /* allocate a similarly sized matrix */
-  mix->matrix = mixmatrix_alloc_matrix (mix->sinkpadalloc, mix->srcpadalloc);
-
-  /* set the loop function that does all the work */
-  gst_element_set_loop_function (GST_ELEMENT (mix), gst_mixmatrix_loop);
-}
-
-#define ROUND_UP(val,bound) ((((val)/bound)+1)*bound)
-
-static void **
-grow_ptrlist (void **origlist, int origsize, int newsize)
-{
-  void **newlist = g_new (void *, newsize);
-  memcpy (newlist, origlist, sizeof (void *) * origsize);
-  g_free (origlist);
-  return newlist;
-}
-
-void
-mixmatrix_resize (GstMixMatrix * mix, int sinkpads, int srcpads)
-{
-  int sinkresize = (sinkpads != mix->sinkpadalloc);
-  int srcresize = (srcpads != mix->srcpadalloc);
-
-  gfloat **newmatrix;
-  int i;
-
-  GST_DEBUG ("mixmatrix: resizing matrix!!!!\n");
-
-  /* check the sinkpads list */
-  if (sinkresize) {
-    mix->sinkpads =
-        (GstPad **) grow_ptrlist ((void **) mix->sinkpads, mix->sinkpadalloc,
-        sinkpads);
-    mix->sinkbs =
-        (GstByteStream **) grow_ptrlist ((void **) mix->sinkbs,
-        mix->sinkpadalloc, sinkpads);
-  }
-  /* check the srcpads list */
-  if (srcresize) {
-    mix->srcpads =
-        (GstPad **) grow_ptrlist ((void **) mix->srcpads, mix->srcpadalloc,
-        srcpads);
-  }
-  /* now resize the matrix if either has changed */
-  if (sinkresize || srcresize) {
-    /* allocate the new matrix */
-    newmatrix = mixmatrix_alloc_matrix (sinkpads, srcpads);
-    /* if only the srcpad count changed (y axis), we can just copy */
-    if (!sinkresize) {
-      memcpy (newmatrix, mix->matrix, sizeof (gfloat *) * sinkpads);
-      /* otherwise we have to copy line by line */
-    } else {
-      for (i = 0; i < mix->srcpadalloc; i++)
-        memcpy (newmatrix[i], mix->matrix[i],
-            sizeof (gfloat) * mix->srcpadalloc);
-    }
-
-    /* would signal here! */
-
-    /* free old matrix and replace it */
-    mixmatrix_free_matrix (mix->matrix, mix->sinkpadalloc);
-    mix->matrix = newmatrix;
-  }
-
-  mix->sinkpadalloc = sinkpads;
-  mix->srcpadalloc = srcpads;
-}
-
-#if 0
-static gboolean
-gst_mixmatrix_set_all_caps (GstMixMatrix * mix)
-{
-  int i;
-
-  /* sink pads */
-  for (i = 0; i < mix->sinkpadalloc; i++) {
-    if (mix->sinkpads[i]) {
-      if (GST_PAD_CAPS (mix->sinkpads[i]) == NULL)
-        if (gst_pad_try_set_caps (mix->sinkpads[i], mix->caps) <= 0)
-          return FALSE;
-    }
-  }
-
-  /* src pads */
-  for (i = 0; i < mix->srcpadalloc; i++) {
-    if (mix->srcpads[i]) {
-      if (GST_PAD_CAPS (mix->srcpads[i]) == NULL)
-        if (gst_pad_try_set_caps (mix->srcpads[i], mix->caps) <= 0)
-          return FALSE;
-    }
-  }
-
-  return TRUE;
-}
-#endif
-
-static GstPadLinkReturn
-gst_mixmatrix_connect (GstPad * pad, const GstCaps * caps)
-{
-  GstMixMatrix *mix = GST_MIXMATRIX (GST_PAD_PARENT (pad));
-  gint i;
-
-  for (i = 0; i < mix->srcpadalloc; i++) {
-    if (mix->srcpads[i]) {
-      if (GST_PAD_CAPS (mix->srcpads[i]) == NULL) {
-        if (gst_pad_try_set_caps (mix->srcpads[i], caps) <= 0) {
-          return GST_PAD_LINK_REFUSED;
-        }
-      }
-    }
-  }
-
-  mix->caps = gst_caps_copy (caps);
-
-  return GST_PAD_LINK_OK;
-}
-
-static GstPad *
-gst_mixmatrix_request_new_pad (GstElement * element, GstPadTemplate * templ,
-    const gchar * name)
-{
-  GstMixMatrix *mix;
-  gint padnum;
-  GstPad *pad = NULL;
-
-  g_return_val_if_fail (element != NULL, NULL);
-  g_return_val_if_fail (GST_IS_MIXMATRIX (element), NULL);
-
-  mix = GST_MIXMATRIX (element);
-
-  /* figure out if it's a sink pad */
-  if (sscanf (name, "sink_%u", &padnum)) {
-    /* check to see if it already exists */
-    if (padnum < mix->sinkpadalloc && mix->sinkpads[padnum])
-      return mix->sinkpads[padnum];
-
-    /* determine if it's bigger than the current size */
-    if (padnum >= mix->sinkpadalloc)
-      mixmatrix_resize (mix, ROUND_UP (padnum, mix->grpsize),
-          mix->sinkpadalloc);
-
-    pad = gst_pad_new_from_static_template (&mixmatrix_sink_template, name);
-    GST_PAD_ELEMENT_PRIVATE (pad) = GINT_TO_POINTER (padnum);
-    gst_element_add_pad (GST_ELEMENT (mix), pad);
-/*    g_signal_connect(G_OBJECT(pad), "unlink", G_CALLBACK(sink_unlinked), mix); */
-    gst_pad_set_link_function (pad, gst_mixmatrix_connect);
-
-    /* create a bytestream for it */
-    mix->sinkbs[padnum] = gst_bytestream_new (pad);
-
-    /* store away the pad and account for it */
-    mix->sinkpads[padnum] = pad;
-  }
-  /* or it's a src pad */
-  else if (sscanf (name, "src_%u", &padnum)) {
-    /* check to see if it already exists */
-    if (padnum < mix->srcpadalloc && mix->srcpads[padnum])
-      return mix->srcpads[padnum];
-
-    /* determine if it's bigger than the current size */
-    if (padnum >= mix->srcpadalloc)
-      mixmatrix_resize (mix, ROUND_UP (padnum, mix->grpsize), mix->srcpadalloc);
-
-    pad = gst_pad_new_from_static_template (&mixmatrix_src_template, name);
-    GST_PAD_ELEMENT_PRIVATE (pad) = GINT_TO_POINTER (padnum);
-    gst_element_add_pad (GST_ELEMENT (mix), pad);
-/*    g_signal_connect(G_OBJECT(pad), "unlink", G_CALLBACK(sink_unlinked), mix); */
-    /* gst_pad_set_link_function (pad, gst_mixmatrix_connect); */
-
-    /* store away the pad and account for it */
-    mix->srcpads[padnum] = pad;
-  }
-
-  return pad;
-}
-
-static void
-gst_mixmatrix_loop (GstElement * element)
-{
-  GstMixMatrix *mix = GST_MIXMATRIX (element);
-  int i, j, k;
-  GstBuffer **inbufs;
-  gfloat **infloats;
-  GstBuffer **outbufs;
-  gfloat **outfloats;
-  int bytesize = sizeof (gfloat) * mix->outsize;
-  gfloat gain;
-
-  /* create the output buffers */
-  outbufs = g_new (GstBuffer *, mix->srcpadalloc);
-  outfloats = g_new (gfloat *, mix->srcpadalloc);
-  for (i = 0; i < mix->srcpadalloc; i++) {
-    if (mix->srcpads[i] != NULL) {
-      outbufs[i] = gst_buffer_new_and_alloc (bytesize);
-      outfloats[i] = (gfloat *) GST_BUFFER_DATA (outbufs[i]);
-      memset (outfloats[i], 0, bytesize);
-    }
-  }
-
-  /* go through all the input buffers and pull them */
-  inbufs = g_new (GstBuffer *, mix->sinkpadalloc);
-  infloats = g_new (gfloat *, mix->sinkpadalloc);
-  for (i = 0; i < mix->sinkpadalloc; i++) {
-    if (mix->sinkpads[i] != NULL) {
-      gst_bytestream_read (mix->sinkbs[i], &inbufs[i], bytesize);
-      infloats[i] = (gfloat *) GST_BUFFER_DATA (inbufs[i]);
-      /* loop through each src pad */
-      for (j = 0; j < mix->srcpadalloc; j++) {
-        if (mix->srcpads[j] != NULL) {
-/*
-{
-  int z;
-  fprintf(stderr,"matrix is %p: ",mix->matrix);
-  for (z=0;z<mix->sinkpadalloc;z++)
-    fprintf(stderr,"%p, ",mix->matrix[i]);
-  fprintf(stderr,"\n");
-}
-fprintf(stderr,"attempting to get gain for %dx%d\n",i,j);
-*/
-          gain = mix->matrix[i][j];
-/*          fprintf(stderr,"%d->%d=%0.2f ",i,j,gain); */
-          for (k = 0; k < mix->outsize; k++) {
-            outfloats[j][k] += infloats[i][k] * gain;
-          }
-        }
-      }
-    }
-  }
-/*  fprintf(stderr,"\n"); */
-
-  for (i = 0; i < mix->srcpadalloc; i++) {
-    if (mix->srcpads[i] != NULL) {
-      gst_pad_push (mix->srcpads[i], GST_DATA (outbufs[i]));
-    }
-  }
-}
-
-static void
-gst_mixmatrix_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstMixMatrix *mix;
-
-  g_return_if_fail (GST_IS_MIXMATRIX (object));
-  mix = GST_MIXMATRIX (object);
-
-  switch (prop_id) {
-    default:
-      break;
-  }
-}
-
-static void
-gst_mixmatrix_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstMixMatrix *mix;
-
-  g_return_if_fail (GST_IS_MIXMATRIX (object));
-  mix = GST_MIXMATRIX (object);
-
-  switch (prop_id) {
-    case PROP_SINKPADS:
-      g_value_set_int (value, mix->sinkpadalloc);
-      break;
-    case PROP_SRCPADS:
-      g_value_set_int (value, mix->srcpadalloc);
-      break;
-    case PROP_MATRIXPTR:
-      g_value_set_pointer (value, mix->matrix);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_library_load ("gstbytestream"))
-    return FALSE;
-
-  return gst_element_register (plugin, "mixmatrix",
-      GST_RANK_NONE, GST_TYPE_MIXMATRIX);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    mixmatrix,
-    "An audio mixer matrix",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/mve/Makefile.am b/gst/mve/Makefile.am
deleted file mode 100644 (file)
index 3ba6d2a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-plugin_LTLIBRARIES = libgstmve.la
-
-libgstmve_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-libgstmve_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
-libgstmve_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstmve_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-libgstmve_la_SOURCES = \
-       gstmve.c \
-       gstmvemux.c \
-       gstmvedemux.c \
-       mveaudiodec.c \
-       mvevideodec8.c \
-       mvevideodec16.c \
-       mveaudioenc.c \
-       mvevideoenc8.c \
-       mvevideoenc16.c
-
-noinst_HEADERS = gstmvedemux.h gstmvemux.h mve.h
-
-EXTRA_DIST = TODO
diff --git a/gst/mve/TODO b/gst/mve/TODO
deleted file mode 100644 (file)
index 4384f3e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-MVE TODO:
- - seeking support
- - split out decoders from demuxer into separate elements
- - split out encoders from muxer into separate elements
-
diff --git a/gst/mve/gstmve.c b/gst/mve/gstmve.c
deleted file mode 100644 (file)
index 2b4cb72..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* GStreamer plugin for Interplay MVE movie files
- *
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- * For more information about the Interplay MVE format, visit:
- *   http://www.pcisys.net/~melanson/codecs/interplay-mve.txt
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "gstmvedemux.h"
-#include "gstmvemux.h"
-
-static gboolean
-mve_plugin_init (GstPlugin * plugin)
-{
-
-  return gst_element_register (plugin, "mvedemux", GST_RANK_PRIMARY,
-      GST_TYPE_MVE_DEMUX)
-      && gst_element_register (plugin, "mvemux", GST_RANK_PRIMARY,
-      GST_TYPE_MVE_MUX);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    mve,
-    "Interplay MVE movie format manipulation",
-    mve_plugin_init,
-    VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/mve/gstmvedemux.c b/gst/mve/gstmvedemux.c
deleted file mode 100644 (file)
index fced056..0000000
+++ /dev/null
@@ -1,1153 +0,0 @@
-/* GStreamer demultiplexer plugin for Interplay MVE movie files
- *
- * Copyright (C) 2006-2008 Jens Granseuer <jensgr@gmx.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- * For more information about the Interplay MVE format, visit:
- *   http://www.pcisys.net/~melanson/codecs/interplay-mve.txt
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-#include "gstmvedemux.h"
-#include "mve.h"
-
-GST_DEBUG_CATEGORY_STATIC (mvedemux_debug);
-#define GST_CAT_DEFAULT mvedemux_debug
-
-enum MveDemuxState
-{
-  MVEDEMUX_STATE_INITIAL,       /* initial state, header not read */
-  MVEDEMUX_STATE_NEXT_CHUNK,    /* parsing chunk/segment header */
-  MVEDEMUX_STATE_MOVIE,         /* reading the stream */
-  MVEDEMUX_STATE_SKIP           /* skipping chunk */
-};
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-mve")
-    );
-
-static GstStaticPadTemplate vidsrc_template = GST_STATIC_PAD_TEMPLATE ("video",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS ("video/x-raw-rgb, "
-        "width = (int) [ 1, MAX ], "
-        "height = (int) [ 1, MAX ], "
-        "framerate = (fraction) [ 0, MAX ], "
-        "bpp = (int) 16, "
-        "depth = (int) 15, "
-        "endianness = (int) BYTE_ORDER, "
-        "red_mask = (int) 31744, "
-        "green_mask = (int) 992, "
-        "blue_mask = (int) 31; "
-        "video/x-raw-rgb, "
-        "width = (int) [ 1, MAX ], "
-        "height = (int) [ 1, MAX ], "
-        "framerate = (fraction) [ 0, MAX ], "
-        "bpp = (int) 8, " "depth = (int) 8, " "endianness = (int) BYTE_ORDER")
-    );
-
-static GstStaticPadTemplate audsrc_template = GST_STATIC_PAD_TEMPLATE ("audio",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "width = (int) 8, "
-        "rate = (int) [ 1, MAX ], "
-        "channels = (int) [ 1, 2 ], "
-        "depth = (int) 8, "
-        "signed = (boolean) false; "
-        "audio/x-raw-int, "
-        "width = (int) 16, "
-        "rate = (int) [ 1, MAX ], "
-        "channels = (int) [ 1, 2 ], "
-        "depth = (int) 16, "
-        "signed = (boolean) true, "
-        "endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }")
-    );
-
-#define MVE_DEFAULT_AUDIO_STREAM 0x01
-
-static void gst_mve_demux_class_init (GstMveDemuxClass * klass);
-static void gst_mve_demux_base_init (GstMveDemuxClass * klass);
-static void gst_mve_demux_init (GstMveDemux * mve);
-
-#define GST_MVE_SEGMENT_SIZE(data)    (GST_READ_UINT16_LE (data))
-#define GST_MVE_SEGMENT_TYPE(data)    (GST_READ_UINT8 (data + 2))
-#define GST_MVE_SEGMENT_VERSION(data) (GST_READ_UINT8 (data + 3))
-
-static GstElementClass *parent_class = NULL;
-
-static void
-gst_mve_demux_reset (GstMveDemux * mve)
-{
-  gst_adapter_clear (mve->adapter);
-
-  if (mve->video_stream != NULL) {
-    if (mve->video_stream->pad)
-      gst_element_remove_pad (GST_ELEMENT (mve), mve->video_stream->pad);
-    if (mve->video_stream->caps)
-      gst_caps_unref (mve->video_stream->caps);
-    if (mve->video_stream->palette)
-      gst_buffer_unref (mve->video_stream->palette);
-    g_free (mve->video_stream->code_map);
-    if (mve->video_stream->buffer)
-      gst_buffer_unref (mve->video_stream->buffer);
-    g_free (mve->video_stream);
-    mve->video_stream = NULL;
-  }
-
-  if (mve->audio_stream != NULL) {
-    if (mve->audio_stream->pad)
-      gst_element_remove_pad (GST_ELEMENT (mve), mve->audio_stream->pad);
-    if (mve->audio_stream->caps)
-      gst_caps_unref (mve->audio_stream->caps);
-    if (mve->audio_stream->buffer)
-      gst_buffer_unref (mve->audio_stream->buffer);
-    g_free (mve->audio_stream);
-    mve->audio_stream = NULL;
-  }
-
-  mve->state = MVEDEMUX_STATE_INITIAL;
-  mve->needed_bytes = MVE_PREAMBLE_SIZE;
-  mve->frame_duration = GST_CLOCK_TIME_NONE;
-
-  mve->chunk_size = 0;
-  mve->chunk_offset = 0;
-}
-
-static const GstQueryType *
-gst_mve_demux_get_src_query_types (GstPad * pad)
-{
-  static const GstQueryType src_types[] = {
-    GST_QUERY_POSITION,
-    GST_QUERY_SEEKING,
-    0
-  };
-
-  return src_types;
-}
-
-static gboolean
-gst_mve_demux_handle_src_query (GstPad * pad, GstQuery * query)
-{
-  gboolean res = FALSE;
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_POSITION:{
-      GstFormat format;
-
-      gst_query_parse_position (query, &format, NULL);
-
-      /* we only support TIME */
-      if (format == GST_FORMAT_TIME) {
-        GstMveDemuxStream *s = gst_pad_get_element_private (pad);
-
-        if (s != NULL) {
-          GST_OBJECT_LOCK (s);
-          gst_query_set_position (query, GST_FORMAT_TIME, s->last_ts);
-          GST_OBJECT_UNLOCK (s);
-          res = TRUE;
-        }
-      }
-      break;
-    }
-    case GST_QUERY_SEEKING:{
-      GstFormat format;
-
-      gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
-      if (format == GST_FORMAT_TIME) {
-        gst_query_set_seeking (query, GST_FORMAT_TIME, FALSE, 0, -1);
-        res = TRUE;
-      }
-      break;
-    }
-    case GST_QUERY_DURATION:{
-      /* FIXME: really should implement/estimate this somehow */
-      res = FALSE;
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, query);
-      break;
-  }
-
-  return res;
-}
-
-static gboolean
-gst_mve_demux_handle_src_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-      GST_DEBUG ("seeking not supported");
-      res = FALSE;
-      break;
-    default:
-      res = gst_pad_event_default (pad, event);
-      break;
-  }
-
-  return res;
-}
-
-
-static GstStateChangeReturn
-gst_mve_demux_change_state (GstElement * element, GstStateChange transition)
-{
-  GstMveDemux *mve = GST_MVE_DEMUX (element);
-
-  if (GST_ELEMENT_CLASS (parent_class)->change_state) {
-    GstStateChangeReturn ret;
-
-    ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-    if (ret != GST_STATE_CHANGE_SUCCESS)
-      return ret;
-  }
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_mve_demux_reset (mve);
-      break;
-    default:
-      break;
-  }
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-static gboolean
-gst_mve_add_stream (GstMveDemux * mve, GstMveDemuxStream * stream,
-    GstTagList * list)
-{
-  GstPadTemplate *templ;
-  gboolean ret = FALSE;
-
-  if (stream->pad == NULL) {
-    if (stream == mve->video_stream) {
-      templ = gst_static_pad_template_get (&vidsrc_template);
-      stream->pad = gst_pad_new_from_template (templ, "video");
-    } else {
-      templ = gst_static_pad_template_get (&audsrc_template);
-      stream->pad = gst_pad_new_from_template (templ, "audio");
-    }
-    gst_object_unref (templ);
-
-    gst_pad_set_query_type_function (stream->pad,
-        GST_DEBUG_FUNCPTR (gst_mve_demux_get_src_query_types));
-    gst_pad_set_query_function (stream->pad,
-        GST_DEBUG_FUNCPTR (gst_mve_demux_handle_src_query));
-    gst_pad_set_event_function (stream->pad,
-        GST_DEBUG_FUNCPTR (gst_mve_demux_handle_src_event));
-    gst_pad_set_element_private (stream->pad, stream);
-
-    GST_DEBUG_OBJECT (mve, "adding pad %s", GST_PAD_NAME (stream->pad));
-    gst_pad_set_active (stream->pad, TRUE);
-    gst_element_add_pad (GST_ELEMENT (mve), stream->pad);
-    ret = TRUE;
-  }
-
-  GST_DEBUG_OBJECT (mve, "setting caps %" GST_PTR_FORMAT, stream->caps);
-  gst_pad_set_caps (stream->pad, stream->caps);
-
-  if (list)
-    gst_element_found_tags_for_pad (GST_ELEMENT (mve), stream->pad, list);
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_mve_stream_error (GstMveDemux * mve, guint16 req, guint16 avail)
-{
-  GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-      ("wanted to read %d bytes from stream, %d available", req, avail));
-  return GST_FLOW_ERROR;
-}
-
-static GstFlowReturn
-gst_mve_buffer_alloc_for_pad (GstMveDemuxStream * stream,
-    guint32 size, GstBuffer ** buffer)
-{
-  *buffer = gst_buffer_new_and_alloc (size);
-  gst_buffer_set_caps (*buffer, stream->caps);
-  GST_BUFFER_TIMESTAMP (*buffer) = stream->last_ts;
-  GST_BUFFER_OFFSET (*buffer) = stream->offset;
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_video_init (GstMveDemux * mve, const guint8 * data)
-{
-  GST_DEBUG_OBJECT (mve, "init video");
-
-  if (mve->video_stream == NULL) {
-    GstMveDemuxStream *stream = g_new0 (GstMveDemuxStream, 1);
-
-    stream->buffer = NULL;
-    stream->back_buf1 = NULL;
-    stream->back_buf2 = NULL;
-    stream->offset = 0;
-    stream->width = 0;
-    stream->height = 0;
-    stream->code_map = NULL;
-    stream->code_map_avail = FALSE;
-    stream->palette = NULL;
-    stream->caps = NULL;
-    stream->last_ts = GST_CLOCK_TIME_NONE;
-    stream->last_flow = GST_FLOW_OK;
-    mve->video_stream = stream;
-  }
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_video_create_buffer (GstMveDemux * mve, guint8 version,
-    const guint8 * data, guint16 len)
-{
-  GstBuffer *buf;
-  guint16 w, h, n, true_color, bpp;
-  guint required, size;
-
-  GST_DEBUG_OBJECT (mve, "create video buffer");
-
-  if (mve->video_stream == NULL) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("trying to create video buffer for uninitialized stream"));
-    return GST_FLOW_ERROR;
-  }
-
-  /* need 4 to 8 more bytes */
-  required = (version > 1) ? 8 : (version * 2);
-  if (len < required)
-    return gst_mve_stream_error (mve, required, len);
-
-  w = GST_READ_UINT16_LE (data) << 3;
-  h = GST_READ_UINT16_LE (data + 2) << 3;
-
-  if (version > 0)
-    n = GST_READ_UINT16_LE (data + 4);
-  else
-    n = 1;
-
-  if (version > 1)
-    true_color = GST_READ_UINT16_LE (data + 6);
-  else
-    true_color = 0;
-
-  bpp = (true_color ? 2 : 1);
-  size = w * h * bpp;
-
-  if (mve->video_stream->buffer != NULL) {
-    GST_DEBUG_OBJECT (mve, "video buffer already created");
-
-    if (GST_BUFFER_SIZE (mve->video_stream->buffer) == size * 2)
-      return GST_FLOW_OK;
-
-    GST_DEBUG_OBJECT (mve, "video buffer size has changed");
-    gst_buffer_unref (mve->video_stream->buffer);
-  }
-
-  GST_DEBUG_OBJECT (mve,
-      "allocating video buffer, w:%u, h:%u, n:%u, true_color:%u", w, h, n,
-      true_color);
-
-  /* we need a buffer to keep the last 2 frames, since those may be
-     needed for decoding the next one */
-  buf = gst_buffer_new_and_alloc (size * 2);
-
-  mve->video_stream->bpp = bpp;
-  mve->video_stream->width = w;
-  mve->video_stream->height = h;
-  mve->video_stream->buffer = buf;
-  mve->video_stream->back_buf1 = GST_BUFFER_DATA (buf);
-  mve->video_stream->back_buf2 = mve->video_stream->back_buf1 + size;
-  mve->video_stream->max_block_offset = (h - 7) * w - 8;
-  memset (mve->video_stream->back_buf1, 0, size * 2);
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_video_palette (GstMveDemux * mve, const guint8 * data, guint16 len)
-{
-  GstBuffer *buf;
-  guint16 start, count;
-  const guint8 *pal;
-  guint32 *pal_ptr;
-  gint i;
-
-  GST_DEBUG_OBJECT (mve, "video palette");
-
-  if (mve->video_stream == NULL) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("found palette before video stream was initialized"));
-    return GST_FLOW_ERROR;
-  }
-
-  /* need 4 more bytes now, more later */
-  if (len < 4)
-    return gst_mve_stream_error (mve, 4, len);
-
-  len -= 4;
-
-  start = GST_READ_UINT16_LE (data);
-  count = GST_READ_UINT16_LE (data + 2);
-  GST_DEBUG_OBJECT (mve, "found palette start:%u, count:%u", start, count);
-
-  /* need more bytes */
-  if (len < count * 3)
-    return gst_mve_stream_error (mve, count * 3, len);
-
-  /* make sure we don't exceed the buffer */
-  if (start + count > MVE_PALETTE_COUNT) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("palette too large for buffer"));
-    return GST_FLOW_ERROR;
-  }
-
-  if (mve->video_stream->palette != NULL) {
-    /* older buffers floating around might still use the old
-       palette, so make sure we can update it */
-    buf = gst_buffer_make_writable (mve->video_stream->palette);
-  } else {
-    buf = gst_buffer_new_and_alloc (MVE_PALETTE_COUNT * 4);
-    memset (GST_BUFFER_DATA (buf), 0, GST_BUFFER_SIZE (buf));
-  }
-
-  mve->video_stream->palette = buf;
-
-  pal = data + 4;
-  pal_ptr = ((guint32 *) GST_BUFFER_DATA (buf)) + start;
-  for (i = 0; i < count; ++i) {
-    /* convert from 6-bit VGA to 8-bit palette */
-    guint8 r, g, b;
-
-    r = (*pal) << 2;
-    ++pal;
-    g = (*pal) << 2;
-    ++pal;
-    b = (*pal) << 2;
-    ++pal;
-    *pal_ptr = (r << 16) | (g << 8) | (b);
-    ++pal_ptr;
-  }
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_video_palette_compressed (GstMveDemux * mve, const guint8 * data,
-    guint16 len)
-{
-  guint8 mask;
-  gint i, j;
-  guint32 *col;
-
-  GST_DEBUG_OBJECT (mve, "compressed video palette");
-
-  if (mve->video_stream == NULL) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("found palette before video stream was initialized"));
-    return GST_FLOW_ERROR;
-  }
-
-  if (mve->video_stream->palette == NULL) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("no palette available for modification"));
-    return GST_FLOW_ERROR;
-  }
-
-  /* need at least 32 more bytes */
-  if (len < 32)
-    return gst_mve_stream_error (mve, 32, len);
-
-  len -= 32;
-
-  for (i = 0; i < 32; ++i) {
-    mask = GST_READ_UINT8 (data);
-    ++data;
-
-    if (mask != 0) {
-      for (j = 0; j < 8; ++j) {
-        if (mask & (1 << j)) {
-          guint8 r, g, b;
-
-          /* need 3 more bytes */
-          if (len < 3)
-            return gst_mve_stream_error (mve, 3, len);
-
-          len -= 3;
-
-          r = (*data) << 2;
-          ++data;
-          g = (*data) << 2;
-          ++data;
-          b = (*data) << 2;
-          ++data;
-          col =
-              ((guint32 *) GST_BUFFER_DATA (mve->video_stream->palette)) +
-              i * 8 + j;
-          *col = (r << 16) | (g << 8) | (b);
-        }
-      }
-    }
-  }
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_video_code_map (GstMveDemux * mve, const guint8 * data, guint16 len)
-{
-  gint min;
-
-  if (mve->video_stream == NULL || mve->video_stream->code_map == NULL) {
-    GST_WARNING_OBJECT (mve, "video stream not initialized");
-    return GST_FLOW_ERROR;
-  }
-
-  GST_DEBUG_OBJECT (mve, "found code map, size:%u", len);
-
-  /* decoding is done in 8x8 blocks using 4-bit opcodes */
-  min = (mve->video_stream->width * mve->video_stream->height) / (8 * 8 * 2);
-
-  if (len < min)
-    return gst_mve_stream_error (mve, min, len);
-
-  memcpy (mve->video_stream->code_map, data, min);
-  mve->video_stream->code_map_avail = TRUE;
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_video_data (GstMveDemux * mve, const guint8 * data, guint16 len,
-    GstBuffer ** output)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  gint16 cur_frame, last_frame;
-  gint16 x_offset, y_offset;
-  gint16 x_size, y_size;
-  guint16 flags;
-  gint dec;
-  GstBuffer *buf = NULL;
-  GstMveDemuxStream *s = mve->video_stream;
-
-  GST_LOG_OBJECT (mve, "video data");
-
-  if (s == NULL) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("trying to decode video data before stream was initialized"));
-    return GST_FLOW_ERROR;
-  }
-
-  if (GST_CLOCK_TIME_IS_VALID (mve->frame_duration)) {
-    if (GST_CLOCK_TIME_IS_VALID (s->last_ts))
-      s->last_ts += mve->frame_duration;
-    else
-      s->last_ts = 0;
-  }
-
-  if (!s->code_map_avail) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("no code map available for decoding"));
-    return GST_FLOW_ERROR;
-  }
-
-  /* need at least 14 more bytes */
-  if (len < 14)
-    return gst_mve_stream_error (mve, 14, len);
-
-  len -= 14;
-
-  cur_frame = GST_READ_UINT16_LE (data);
-  last_frame = GST_READ_UINT16_LE (data + 2);
-  x_offset = GST_READ_UINT16_LE (data + 4);
-  y_offset = GST_READ_UINT16_LE (data + 6);
-  x_size = GST_READ_UINT16_LE (data + 8);
-  y_size = GST_READ_UINT16_LE (data + 10);
-  flags = GST_READ_UINT16_LE (data + 12);
-  data += 14;
-
-  GST_DEBUG_OBJECT (mve,
-      "video data hot:%d, cold:%d, xoff:%d, yoff:%d, w:%d, h:%d, flags:%x",
-      cur_frame, last_frame, x_offset, y_offset, x_size, y_size, flags);
-
-  if (flags & MVE_VIDEO_DELTA_FRAME) {
-    guint8 *temp = s->back_buf1;
-
-    s->back_buf1 = s->back_buf2;
-    s->back_buf2 = temp;
-  }
-
-  ret = gst_mve_buffer_alloc_for_pad (s, s->width * s->height * s->bpp, &buf);
-  if (ret != GST_FLOW_OK)
-    return ret;
-
-  if (s->bpp == 2) {
-    dec = ipvideo_decode_frame16 (s, data, len);
-  } else {
-    if (s->palette == NULL) {
-      GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL), ("no palette available"));
-      goto error;
-    }
-
-    dec = ipvideo_decode_frame8 (s, data, len);
-  }
-  if (dec != 0)
-    goto error;
-
-  memcpy (GST_BUFFER_DATA (buf), s->back_buf1, GST_BUFFER_SIZE (buf));
-  GST_BUFFER_DURATION (buf) = mve->frame_duration;
-  GST_BUFFER_OFFSET_END (buf) = ++s->offset;
-
-  if (s->bpp == 1) {
-    GstCaps *caps;
-
-    /* set the palette on the outgoing buffer */
-    caps = gst_caps_copy (s->caps);
-    gst_caps_set_simple (caps,
-        "palette_data", GST_TYPE_BUFFER, s->palette, NULL);
-    gst_buffer_set_caps (buf, caps);
-    gst_caps_unref (caps);
-  }
-
-  *output = buf;
-  return GST_FLOW_OK;
-
-error:
-  gst_buffer_unref (buf);
-  return GST_FLOW_ERROR;
-}
-
-static GstFlowReturn
-gst_mve_audio_init (GstMveDemux * mve, guint8 version, const guint8 * data,
-    guint16 len)
-{
-  GstMveDemuxStream *stream;
-  guint16 flags;
-  guint32 requested_buffer;
-  GstTagList *list;
-  gchar *name;
-
-  GST_DEBUG_OBJECT (mve, "init audio");
-
-  /* need 8 more bytes */
-  if (len < 8)
-    return gst_mve_stream_error (mve, 8, len);
-
-  if (mve->audio_stream == NULL) {
-    stream = g_new0 (GstMveDemuxStream, 1);
-    stream->offset = 0;
-    stream->last_ts = 0;
-    stream->last_flow = GST_FLOW_OK;
-    mve->audio_stream = stream;
-  } else {
-    stream = mve->audio_stream;
-    gst_caps_unref (stream->caps);
-  }
-
-  flags = GST_READ_UINT16_LE (data + 2);
-  stream->sample_rate = GST_READ_UINT16_LE (data + 4);
-  requested_buffer = GST_READ_UINT32_LE (data + 6);
-
-  /* bit 0: 0 = mono, 1 = stereo */
-  stream->n_channels = (flags & MVE_AUDIO_STEREO) + 1;
-  /* bit 1: 0 = 8 bit, 1 = 16 bit */
-  stream->sample_size = (((flags & MVE_AUDIO_16BIT) >> 1) + 1) * 8;
-  /* bit 2: 0 = uncompressed, 1 = compressed */
-  stream->compression = ((version > 0) && (flags & MVE_AUDIO_COMPRESSED)) ?
-      TRUE : FALSE;
-
-  GST_DEBUG_OBJECT (mve, "audio init, sample_rate:%d, channels:%d, "
-      "bits_per_sample:%d, compression:%d, buffer:%u",
-      stream->sample_rate, stream->n_channels,
-      stream->sample_size, stream->compression, requested_buffer);
-
-  stream->caps = gst_caps_from_string ("audio/x-raw-int");
-  if (stream->caps == NULL)
-    return GST_FLOW_ERROR;
-
-  gst_caps_set_simple (stream->caps,
-      "signed", G_TYPE_BOOLEAN, (stream->sample_size == 8) ? FALSE : TRUE,
-      "depth", G_TYPE_INT, stream->sample_size,
-      "width", G_TYPE_INT, stream->sample_size,
-      "channels", G_TYPE_INT, stream->n_channels,
-      "rate", G_TYPE_INT, stream->sample_rate, NULL);
-  if (stream->sample_size > 8) {
-    /* for uncompressed audio we can simply copy the incoming buffer
-       which is always in little endian format */
-    gst_caps_set_simple (stream->caps, "endianness", G_TYPE_INT,
-        (stream->compression ? G_BYTE_ORDER : G_LITTLE_ENDIAN), NULL);
-  } else if (stream->compression) {
-    GST_WARNING_OBJECT (mve,
-        "compression is only supported for 16-bit samples");
-    stream->compression = FALSE;
-  }
-
-  list = gst_tag_list_new ();
-  name = g_strdup_printf ("Raw %d-bit PCM audio", stream->sample_size);
-  gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
-      GST_TAG_AUDIO_CODEC, name, NULL);
-  g_free (name);
-
-  if (gst_mve_add_stream (mve, stream, list))
-    return gst_pad_push_event (mve->audio_stream->pad,
-        gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME,
-            0, GST_CLOCK_TIME_NONE, 0)) ? GST_FLOW_OK : GST_FLOW_ERROR;
-  else
-    return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_audio_data (GstMveDemux * mve, guint8 type, const guint8 * data,
-    guint16 len, GstBuffer ** output)
-{
-  GstFlowReturn ret;
-  GstMveDemuxStream *s = mve->audio_stream;
-  GstBuffer *buf = NULL;
-  guint16 stream_mask;
-  guint16 size;
-
-  GST_LOG_OBJECT (mve, "audio data");
-
-  if (s == NULL) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("trying to queue samples with no audio stream"));
-    return GST_FLOW_ERROR;
-  }
-
-  /* need at least 6 more bytes */
-  if (len < 6)
-    return gst_mve_stream_error (mve, 6, len);
-
-  len -= 6;
-
-  stream_mask = GST_READ_UINT16_LE (data + 2);
-  size = GST_READ_UINT16_LE (data + 4);
-  data += 6;
-
-  if (stream_mask & MVE_DEFAULT_AUDIO_STREAM) {
-    guint16 n_samples = size / s->n_channels / (s->sample_size / 8);
-    GstClockTime duration = (GST_SECOND / s->sample_rate) * n_samples;
-
-    if (type == MVE_OC_AUDIO_DATA) {
-      guint16 required = (s->compression ? size / 2 + s->n_channels : size);
-
-      if (len < required)
-        return gst_mve_stream_error (mve, required, len);
-
-      ret = gst_mve_buffer_alloc_for_pad (s, size, &buf);
-
-      if (ret != GST_FLOW_OK)
-        return ret;
-
-      if (s->compression)
-        ipaudio_uncompress ((gint16 *) GST_BUFFER_DATA (buf), size,
-            data, s->n_channels);
-      else
-        memcpy (GST_BUFFER_DATA (buf), data, size);
-
-      GST_DEBUG_OBJECT (mve, "created audio buffer, size:%u, stream_mask:%x",
-          size, stream_mask);
-    } else {
-      /* silence - create a minimal buffer with no sound */
-      size = s->n_channels * (s->sample_size / 8);
-      ret = gst_mve_buffer_alloc_for_pad (s, size, &buf);
-      memset (GST_BUFFER_DATA (buf), 0, size);
-    }
-
-    GST_BUFFER_DURATION (buf) = duration;
-    GST_BUFFER_OFFSET_END (buf) = s->offset + n_samples;
-    *output = buf;
-
-    s->offset += n_samples;
-    s->last_ts += duration;
-  } else {
-    /* alternate audio streams not supported.
-       are there any movies which use them? */
-    if (type == MVE_OC_AUDIO_DATA)
-      GST_WARNING_OBJECT (mve, "found non-empty alternate audio stream");
-  }
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_mve_timer_create (GstMveDemux * mve, const guint8 * data, guint16 len,
-    GstBuffer ** buf)
-{
-  guint32 t_rate;
-  guint16 t_subdiv;
-  GstMveDemuxStream *s;
-  GstTagList *list;
-  gint rate_nom, rate_den;
-
-  g_return_val_if_fail (mve->video_stream != NULL, GST_FLOW_ERROR);
-
-  /* need 6 more bytes */
-  if (len < 6)
-    return gst_mve_stream_error (mve, 6, len);
-
-  t_rate = GST_READ_UINT32_LE (data);
-  t_subdiv = GST_READ_UINT16_LE (data + 4);
-
-  GST_DEBUG_OBJECT (mve, "found timer:%ux%u", t_rate, t_subdiv);
-  mve->frame_duration = t_rate * t_subdiv * GST_USECOND;
-
-  /* now really start rolling... */
-  s = mve->video_stream;
-
-  if ((s->buffer == NULL) || (s->width == 0) || (s->height == 0)) {
-    GST_ELEMENT_ERROR (mve, STREAM, DECODE, (NULL),
-        ("missing or invalid create-video-buffer segment (%dx%d)",
-            s->width, s->height));
-    return GST_FLOW_ERROR;
-  }
-
-  if (s->pad != NULL) {
-    if (s->caps != NULL) {
-      gst_caps_unref (s->caps);
-      s->caps = NULL;
-    }
-    if (s->code_map != NULL) {
-      g_free (s->code_map);
-      s->code_map = NULL;
-    }
-    list = NULL;
-  } else {
-    list = gst_tag_list_new ();
-    gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
-        GST_TAG_VIDEO_CODEC, "Raw RGB video", NULL);
-  }
-
-  s->caps = gst_caps_from_string ("video/x-raw-rgb");
-  if (s->caps == NULL)
-    return GST_FLOW_ERROR;
-
-  rate_nom = GST_SECOND / GST_USECOND;
-  rate_den = mve->frame_duration / GST_USECOND;
-
-  gst_caps_set_simple (s->caps,
-      "bpp", G_TYPE_INT, s->bpp * 8,
-      "depth", G_TYPE_INT, (s->bpp == 1) ? 8 : 15,
-      "width", G_TYPE_INT, s->width,
-      "height", G_TYPE_INT, s->height,
-      "framerate", GST_TYPE_FRACTION, rate_nom, rate_den,
-      "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL);
-  if (s->bpp > 1) {
-    gst_caps_set_simple (s->caps, "red_mask", G_TYPE_INT, 0x7C00,       /* 31744 */
-        "green_mask", G_TYPE_INT, 0x03E0,       /*   992 */
-        "blue_mask", G_TYPE_INT, 0x001F,        /*    31 */
-        NULL);
-  }
-
-  s->code_map = g_malloc ((s->width * s->height) / (8 * 8 * 2));
-
-  if (gst_mve_add_stream (mve, s, list))
-    return gst_pad_push_event (s->pad,
-        gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME,
-            0, GST_CLOCK_TIME_NONE, 0)) ? GST_FLOW_OK : GST_FLOW_ERROR;
-  else
-    return GST_FLOW_OK;
-}
-
-static void
-gst_mve_end_chunk (GstMveDemux * mve)
-{
-  GST_LOG_OBJECT (mve, "end of chunk");
-
-  if (mve->video_stream != NULL)
-    mve->video_stream->code_map_avail = FALSE;
-}
-
-/* parse segment */
-static GstFlowReturn
-gst_mve_parse_segment (GstMveDemux * mve, GstMveDemuxStream ** stream,
-    GstBuffer ** send)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  const guint8 *buffer, *data;
-  guint8 type, version;
-  guint16 len;
-
-  buffer = gst_adapter_peek (mve->adapter, mve->needed_bytes);
-
-  type = GST_MVE_SEGMENT_TYPE (buffer);
-
-  /* check whether to handle the segment */
-  if (type < 32) {
-    version = GST_MVE_SEGMENT_VERSION (buffer);
-    len = GST_MVE_SEGMENT_SIZE (buffer);
-    data = buffer + 4;
-
-    switch (type) {
-
-      case MVE_OC_END_OF_CHUNK:
-        gst_mve_end_chunk (mve);
-        break;
-      case MVE_OC_CREATE_TIMER:
-        ret = gst_mve_timer_create (mve, data, len, send);
-        *stream = mve->audio_stream;
-        break;
-      case MVE_OC_AUDIO_BUFFERS:
-        ret = gst_mve_audio_init (mve, version, data, len);
-        break;
-      case MVE_OC_VIDEO_BUFFERS:
-        ret = gst_mve_video_create_buffer (mve, version, data, len);
-        break;
-      case MVE_OC_AUDIO_DATA:
-      case MVE_OC_AUDIO_SILENCE:
-        ret = gst_mve_audio_data (mve, type, data, len, send);
-        *stream = mve->audio_stream;
-        break;
-      case MVE_OC_VIDEO_MODE:
-        ret = gst_mve_video_init (mve, data);
-        break;
-      case MVE_OC_PALETTE:
-        ret = gst_mve_video_palette (mve, data, len);
-        break;
-      case MVE_OC_PALETTE_COMPRESSED:
-        ret = gst_mve_video_palette_compressed (mve, data, len);
-        break;
-      case MVE_OC_CODE_MAP:
-        ret = gst_mve_video_code_map (mve, data, len);
-        break;
-      case MVE_OC_VIDEO_DATA:
-        ret = gst_mve_video_data (mve, data, len, send);
-        *stream = mve->video_stream;
-        break;
-
-      case MVE_OC_END_OF_STREAM:
-      case MVE_OC_PLAY_AUDIO:
-      case MVE_OC_PLAY_VIDEO:
-        /* these are chunks we don't need to handle */
-        GST_LOG_OBJECT (mve, "ignored segment type:0x%02x, version:0x%02x",
-            type, version);
-        break;
-      case 0x13:               /* ??? */
-      case 0x14:               /* ??? */
-      case 0x15:               /* ??? */
-        /* these are chunks we know exist but we don't care about */
-        GST_DEBUG_OBJECT (mve,
-            "known but unhandled segment type:0x%02x, version:0x%02x", type,
-            version);
-        break;
-      default:
-        GST_WARNING_OBJECT (mve,
-            "unhandled segment type:0x%02x, version:0x%02x", type, version);
-        break;
-    }
-  }
-
-  gst_adapter_flush (mve->adapter, mve->needed_bytes);
-  return ret;
-}
-
-static GstFlowReturn
-gst_mve_demux_chain (GstPad * sinkpad, GstBuffer * inbuf)
-{
-  GstMveDemux *mve = GST_MVE_DEMUX (GST_PAD_PARENT (sinkpad));
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  gst_adapter_push (mve->adapter, inbuf);
-
-  GST_DEBUG_OBJECT (mve, "queuing buffer, needed:%d, available:%u",
-      mve->needed_bytes, gst_adapter_available (mve->adapter));
-
-  while ((gst_adapter_available (mve->adapter) >= mve->needed_bytes) &&
-      (ret == GST_FLOW_OK)) {
-    GstMveDemuxStream *stream = NULL;
-    GstBuffer *outbuf = NULL;
-
-    switch (mve->state) {
-      case MVEDEMUX_STATE_INITIAL:
-        gst_adapter_flush (mve->adapter, mve->needed_bytes);
-
-        mve->chunk_offset += mve->needed_bytes;
-        mve->needed_bytes = 4;
-        mve->state = MVEDEMUX_STATE_NEXT_CHUNK;
-        break;
-
-      case MVEDEMUX_STATE_NEXT_CHUNK:{
-        const guint8 *data;
-        guint16 size;
-
-        data = gst_adapter_peek (mve->adapter, mve->needed_bytes);
-        size = GST_MVE_SEGMENT_SIZE (data);
-
-        if (mve->chunk_offset >= mve->chunk_size) {
-          /* new chunk, flush buffer and proceed with next segment */
-          guint16 chunk_type = GST_READ_UINT16_LE (data + 2);
-
-          gst_adapter_flush (mve->adapter, mve->needed_bytes);
-          mve->chunk_size = size;
-          mve->chunk_offset = 0;
-
-          if (chunk_type > MVE_CHUNK_END) {
-            GST_WARNING_OBJECT (mve,
-                "skipping unknown chunk type 0x%02x of size:%u", chunk_type,
-                size);
-            mve->needed_bytes += size;
-            mve->state = MVEDEMUX_STATE_SKIP;
-          } else {
-            GST_DEBUG_OBJECT (mve, "found new chunk type 0x%02x of size:%u",
-                chunk_type, size);
-          }
-        } else if (mve->chunk_offset <= mve->chunk_size) {
-          /* new segment */
-          GST_DEBUG_OBJECT (mve, "found segment type 0x%02x of size:%u",
-              GST_MVE_SEGMENT_TYPE (data), size);
-
-          mve->needed_bytes += size;
-          mve->state = MVEDEMUX_STATE_MOVIE;
-        }
-      }
-        break;
-
-      case MVEDEMUX_STATE_MOVIE:
-        ret = gst_mve_parse_segment (mve, &stream, &outbuf);
-
-        if ((ret == GST_FLOW_OK) && (outbuf != NULL)) {
-          /* send buffer */
-          GST_DEBUG_OBJECT (mve,
-              "pushing buffer with time %" GST_TIME_FORMAT
-              " (%u bytes) on pad %s",
-              GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
-              GST_BUFFER_SIZE (outbuf), GST_PAD_NAME (stream->pad));
-
-          ret = gst_pad_push (stream->pad, outbuf);
-          stream->last_flow = ret;
-        }
-
-        if (ret == GST_FLOW_NOT_LINKED) {
-          if (mve->audio_stream
-              && mve->audio_stream->last_flow != GST_FLOW_NOT_LINKED)
-            ret = GST_FLOW_OK;
-          if (mve->video_stream
-              && mve->video_stream->last_flow != GST_FLOW_NOT_LINKED)
-            ret = GST_FLOW_OK;
-        }
-
-        /* update current offset */
-        mve->chunk_offset += mve->needed_bytes;
-
-        mve->state = MVEDEMUX_STATE_NEXT_CHUNK;
-        mve->needed_bytes = 4;
-        break;
-
-      case MVEDEMUX_STATE_SKIP:
-        mve->chunk_offset += mve->needed_bytes;
-        gst_adapter_flush (mve->adapter, mve->needed_bytes);
-        mve->state = MVEDEMUX_STATE_NEXT_CHUNK;
-        mve->needed_bytes = 4;
-        break;
-
-      default:
-        GST_ERROR_OBJECT (mve, "invalid state: %d", mve->state);
-        break;
-    }
-  }
-
-  return ret;
-}
-
-static void
-gst_mve_demux_dispose (GObject * obj)
-{
-  GstMveDemux *mve = GST_MVE_DEMUX (obj);
-
-  if (mve->adapter) {
-    g_object_unref (mve->adapter);
-    mve->adapter = NULL;
-  }
-
-  G_OBJECT_CLASS (parent_class)->dispose (obj);
-}
-
-static void
-gst_mve_demux_base_init (GstMveDemuxClass * klass)
-{
-
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_add_static_pad_template (element_class, &vidsrc_template);
-  gst_element_class_add_static_pad_template (element_class, &audsrc_template);
-
-  gst_element_class_set_static_metadata (element_class, "MVE Demuxer",
-      "Codec/Demuxer",
-      "Demultiplex an Interplay movie (MVE) stream into audio and video",
-      "Jens Granseuer <jensgr@gmx.net>");
-}
-
-static void
-gst_mve_demux_class_init (GstMveDemuxClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_mve_demux_dispose);
-
-  element_class->change_state = GST_DEBUG_FUNCPTR (gst_mve_demux_change_state);
-}
-
-static void
-gst_mve_demux_init (GstMveDemux * mve)
-{
-  mve->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-  gst_pad_set_chain_function (mve->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_mve_demux_chain));
-  gst_element_add_pad (GST_ELEMENT (mve), mve->sinkpad);
-
-  mve->adapter = gst_adapter_new ();
-  gst_mve_demux_reset (mve);
-}
-
-GType
-gst_mve_demux_get_type (void)
-{
-  static GType plugin_type = 0;
-
-  if (!plugin_type) {
-    const GTypeInfo plugin_info = {
-      sizeof (GstMveDemuxClass),
-      (GBaseInitFunc) gst_mve_demux_base_init,
-      NULL,
-      (GClassInitFunc) gst_mve_demux_class_init,
-      NULL,
-      NULL,
-      sizeof (GstMveDemux),
-      0,
-      (GInstanceInitFunc) gst_mve_demux_init,
-    };
-
-    GST_DEBUG_CATEGORY_INIT (mvedemux_debug, "mvedemux",
-        0, "Interplay MVE movie demuxer");
-
-    plugin_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "GstMveDemux", &plugin_info, 0);
-  }
-  return plugin_type;
-}
diff --git a/gst/mve/gstmvedemux.h b/gst/mve/gstmvedemux.h
deleted file mode 100644 (file)
index efc848d..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * GStreamer demultiplexer plugin for Interplay MVE movie files
- *
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_MVE_DEMUX_H__
-#define __GST_MVE_DEMUX_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MVE_DEMUX \
-  (gst_mve_demux_get_type())
-#define GST_MVE_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MVE_DEMUX,GstMveDemux))
-#define GST_MVE_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MVE_DEMUX,GstMveDemuxClass))
-#define GST_IS_MVE_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MVE_DEMUX))
-#define GST_IS_MVE_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MVE_DEMUX))
-
-typedef struct _GstMveDemux       GstMveDemux;
-typedef struct _GstMveDemuxClass  GstMveDemuxClass;
-typedef struct _GstMveDemuxStream GstMveDemuxStream;
-
-struct _GstMveDemux
-{
-  GstElement element;
-
-  GstPad *sinkpad;
-
-  GstMveDemuxStream *video_stream;
-  GstMveDemuxStream *audio_stream;
-
-  gint state;
-
-  /* time per frame (1/framerate) */
-  GstClockTime frame_duration;
-
-  /* push based variables */
-  guint16 needed_bytes;
-  GstAdapter *adapter;
-  
-  /* size of current chunk */
-  guint32 chunk_size;
-  /* offset in current chunk */
-  guint32 chunk_offset;
-};
-
-struct _GstMveDemuxClass 
-{
-  GstElementClass parent_class;
-};
-
-struct _GstMveDemuxStream {
-  /* shared properties */
-  GstCaps *caps;
-  GstPad *pad;
-  GstClockTime last_ts;
-  gint64 offset;
-
-  GstFlowReturn last_flow;
-
-  /* video properties */
-  guint16 width;
-  guint16 height;
-  guint8 bpp;   /* bytes per pixel */
-  guint8 *code_map;
-  gboolean code_map_avail;
-  guint8 *back_buf1;
-  guint8 *back_buf2;
-  guint32 max_block_offset;
-  GstBuffer *palette;
-  GstBuffer *buffer;
-
-  /* audio properties */
-  guint16 sample_rate;
-  guint16 n_channels;
-  guint16 sample_size;
-  gboolean compression;
-};
-
-GType gst_mve_demux_get_type (void);
-
-int ipvideo_decode_frame8 (const GstMveDemuxStream * s,
-    const unsigned char *data, unsigned short len);
-int ipvideo_decode_frame16 (const GstMveDemuxStream * s,
-    const unsigned char *data, unsigned short len);
-
-void ipaudio_uncompress (short *buffer,
-    unsigned short buf_len, const unsigned char *data, unsigned char channels);
-
-G_END_DECLS
-
-#endif /* __GST_MVE_DEMUX_H__ */
diff --git a/gst/mve/gstmvemux.c b/gst/mve/gstmvemux.c
deleted file mode 100644 (file)
index b123d2d..0000000
+++ /dev/null
@@ -1,1486 +0,0 @@
-/* Interplay MVE multiplexer plugin for GStreamer
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/*
-gst-launch-1.0 filesrc location=movie.mve ! mvedemux name=d !
-    video/x-raw-rgb ! mvemux quick=true name=m !
-    filesink location=test.mve d. ! audio/x-raw-int ! m.
-*/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <gst/gst.h>
-#include <gst/glib-compat-private.h>
-#include "gstmvemux.h"
-#include "mve.h"
-
-GST_DEBUG_CATEGORY_STATIC (mvemux_debug);
-#define GST_CAT_DEFAULT mvemux_debug
-
-static const char mve_preamble[] = MVE_PREAMBLE;
-
-enum
-{
-  PROP_0,
-  PROP_AUDIO_COMPRESSION,
-  PROP_VIDEO_QUICK_ENCODING,
-  PROP_VIDEO_SCREEN_WIDTH,
-  PROP_VIDEO_SCREEN_HEIGHT
-};
-
-#define MVE_MUX_DEFAULT_COMPRESSION    FALSE
-#define MVE_MUX_DEFAULT_SCREEN_WIDTH   640
-#define MVE_MUX_DEFAULT_SCREEN_HEIGHT  480
-
-enum MveMuxState
-{
-  MVE_MUX_STATE_INITIAL,        /* initial state */
-  MVE_MUX_STATE_CONNECTED,      /* linked, caps set, header not written */
-  MVE_MUX_STATE_PREBUFFER,      /* prebuffering audio data */
-  MVE_MUX_STATE_MOVIE,          /* writing the movie */
-  MVE_MUX_STATE_EOS
-};
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-mve")
-    );
-
-static GstStaticPadTemplate video_sink_factory =
-    GST_STATIC_PAD_TEMPLATE ("video",
-    GST_PAD_SINK,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("video/x-raw-rgb, "
-        "width = (int) [ 24, 1600 ], "
-        "height = (int) [ 24, 1200 ], "
-        "framerate = (fraction) [ 1, MAX ], "
-        "bpp = (int) 16, "
-        "depth = (int) 15, "
-        "endianness = (int) BYTE_ORDER, "
-        "red_mask = (int) 31744, "
-        "green_mask = (int) 992, "
-        "blue_mask = (int) 31; "
-        "video/x-raw-rgb, "
-        "bpp = (int) 8, "
-        "depth = (int) 8, "
-        "width = (int) [ 24, 1600 ], "
-        "height = (int) [ 24, 1200 ], "
-        "framerate = (fraction) [ 1, MAX ], " "endianness = (int) BYTE_ORDER"));
-
-static GstStaticPadTemplate audio_sink_factory =
-    GST_STATIC_PAD_TEMPLATE ("audio",
-    GST_PAD_SINK,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "width = (int) 8, "
-        "rate = (int) [ 1, MAX ], "
-        "channels = (int) [ 1, 2 ], "
-        "depth = (int) 8, "
-        "signed = (boolean) false; "
-        "audio/x-raw-int, "
-        "width = (int) 16, "
-        "rate = (int) [ 1, MAX ], "
-        "channels = (int) [ 1, 2 ], "
-        "depth = (int) 16, "
-        "signed = (boolean) true, " "endianness = (int) BYTE_ORDER"));
-
-static void gst_mve_mux_base_init (GstMveMuxClass * klass);
-static void gst_mve_mux_class_init (GstMveMuxClass * klass);
-static void gst_mve_mux_init (GstMveMux * mvemux);
-
-static GstElementClass *parent_class = NULL;
-
-static void
-gst_mve_mux_reset (GstMveMux * mvemux)
-{
-  mvemux->state = MVE_MUX_STATE_INITIAL;
-  mvemux->stream_time = 0;
-  mvemux->stream_offset = 0;
-  mvemux->timer = 0;
-
-  mvemux->frame_duration = GST_CLOCK_TIME_NONE;
-  mvemux->width = 0;
-  mvemux->height = 0;
-  mvemux->screen_width = MVE_MUX_DEFAULT_SCREEN_WIDTH;
-  mvemux->screen_height = MVE_MUX_DEFAULT_SCREEN_HEIGHT;
-  mvemux->bpp = 0;
-  mvemux->video_frames = 0;
-  mvemux->pal_changed = FALSE;
-  mvemux->pal_first_color = 0;
-  mvemux->pal_colors = MVE_PALETTE_COUNT;
-  mvemux->quick_encoding = TRUE;
-
-  mvemux->bps = 0;
-  mvemux->rate = 0;
-  mvemux->channels = 0;
-  mvemux->compression = MVE_MUX_DEFAULT_COMPRESSION;
-  mvemux->next_ts = 0;
-  mvemux->max_ts = 0;
-  mvemux->spf = 0;
-  mvemux->lead_frames = 0;
-  mvemux->audio_frames = 0;
-
-  mvemux->chunk_has_palette = FALSE;
-  mvemux->chunk_has_audio = FALSE;
-
-  mvemux->audio_pad_eos = TRUE;
-  mvemux->video_pad_eos = TRUE;
-
-  g_free (mvemux->chunk_code_map);
-  mvemux->chunk_code_map = NULL;
-
-  if (mvemux->chunk_video != NULL) {
-    g_byte_array_free (mvemux->chunk_video, TRUE);
-    mvemux->chunk_video = NULL;
-  }
-
-  if (mvemux->chunk_audio != NULL) {
-    g_byte_array_free (mvemux->chunk_audio, TRUE);
-    mvemux->chunk_audio = NULL;
-  }
-
-  if (mvemux->last_frame != NULL) {
-    gst_buffer_unref (mvemux->last_frame);
-    mvemux->last_frame = NULL;
-  }
-
-  if (mvemux->second_last_frame != NULL) {
-    gst_buffer_unref (mvemux->second_last_frame);
-    mvemux->second_last_frame = NULL;
-  }
-
-  if (mvemux->audio_buffer != NULL) {
-    g_queue_foreach (mvemux->audio_buffer, (GFunc) gst_mini_object_unref, NULL);
-    g_queue_free (mvemux->audio_buffer);
-  }
-  mvemux->audio_buffer = g_queue_new ();
-
-  if (mvemux->video_buffer != NULL) {
-    g_queue_foreach (mvemux->video_buffer, (GFunc) gst_mini_object_unref, NULL);
-    g_queue_free (mvemux->video_buffer);
-  }
-  mvemux->video_buffer = g_queue_new ();
-}
-
-static void
-gst_mve_mux_pad_link (GstPad * pad, GstPad * peer, gpointer data)
-{
-  GstMveMux *mvemux = GST_MVE_MUX (data);
-
-  if (pad == mvemux->audiosink) {
-    mvemux->audio_pad_connected = TRUE;
-  } else if (pad == mvemux->videosink) {
-    mvemux->video_pad_connected = TRUE;
-  } else {
-    g_assert_not_reached ();
-  }
-
-  GST_DEBUG_OBJECT (mvemux, "pad '%s' connected", GST_PAD_NAME (pad));
-}
-
-static void
-gst_mve_mux_pad_unlink (GstPad * pad, GstPad * peer, gpointer data)
-{
-  GstMveMux *mvemux = GST_MVE_MUX (data);
-
-  if (pad == mvemux->audiosink) {
-    mvemux->audio_pad_connected = FALSE;
-  } else if (pad == mvemux->videosink) {
-    mvemux->video_pad_connected = FALSE;
-  } else {
-    g_assert_not_reached ();
-  }
-
-  GST_DEBUG_OBJECT (mvemux, "pad '%s' unlinked", GST_PAD_NAME (pad));
-}
-
-static void
-gst_mve_mux_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec)
-{
-  GstMveMux *mvemux;
-
-  g_return_if_fail (GST_IS_MVE_MUX (object));
-  mvemux = GST_MVE_MUX (object);
-
-  switch (prop_id) {
-    case PROP_AUDIO_COMPRESSION:
-      g_value_set_boolean (value, mvemux->compression);
-      break;
-    case PROP_VIDEO_QUICK_ENCODING:
-      g_value_set_boolean (value, mvemux->quick_encoding);
-      break;
-    case PROP_VIDEO_SCREEN_WIDTH:
-      g_value_set_uint (value, mvemux->screen_width);
-      break;
-    case PROP_VIDEO_SCREEN_HEIGHT:
-      g_value_set_uint (value, mvemux->screen_height);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_mve_mux_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec)
-{
-  GstMveMux *mvemux;
-
-  g_return_if_fail (GST_IS_MVE_MUX (object));
-  mvemux = GST_MVE_MUX (object);
-
-  switch (prop_id) {
-    case PROP_AUDIO_COMPRESSION:
-      mvemux->compression = g_value_get_boolean (value);
-      break;
-    case PROP_VIDEO_QUICK_ENCODING:
-      mvemux->quick_encoding = g_value_get_boolean (value);
-      break;
-    case PROP_VIDEO_SCREEN_WIDTH:
-      mvemux->screen_width = g_value_get_uint (value);
-      break;
-    case PROP_VIDEO_SCREEN_HEIGHT:
-      mvemux->screen_height = g_value_get_uint (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static GstStateChangeReturn
-gst_mve_mux_change_state (GstElement * element, GstStateChange transition)
-{
-  GstMveMux *mvemux;
-
-  g_return_val_if_fail (GST_IS_MVE_MUX (element), GST_STATE_CHANGE_FAILURE);
-
-  mvemux = GST_MVE_MUX (element);
-
-  if (GST_ELEMENT_CLASS (parent_class)->change_state) {
-    GstStateChangeReturn ret;
-
-    ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-    if (ret != GST_STATE_CHANGE_SUCCESS)
-      return ret;
-  }
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_mve_mux_reset (mvemux);
-      break;
-    default:
-      break;
-  }
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-static const GstBuffer *
-gst_mve_mux_palette_from_buffer (GstBuffer * buf)
-{
-  const GstBuffer *palette = NULL;
-  GstCaps *caps = GST_BUFFER_CAPS (buf);
-
-  if (caps != NULL) {
-    GstStructure *str = gst_caps_get_structure (caps, 0);
-    const GValue *pal = gst_structure_get_value (str, "palette_data");
-
-    if (pal != NULL) {
-      palette = gst_value_get_buffer (pal);
-      if (GST_BUFFER_SIZE (palette) < 256 * 4)
-        palette = NULL;
-    }
-  }
-  return palette;
-}
-
-static GstFlowReturn
-gst_mve_mux_palette_from_current_frame (GstMveMux * mvemux,
-    const GstBuffer ** pal)
-{
-  GstBuffer *buf = g_queue_peek_head (mvemux->video_buffer);
-
-  /* get palette from buffer */
-  *pal = gst_mve_mux_palette_from_buffer (buf);
-  if (*pal == NULL) {
-    GST_ERROR_OBJECT (mvemux, "video buffer has no palette data");
-    return GST_FLOW_ERROR;
-  }
-  return GST_FLOW_OK;
-}
-
-static void
-gst_mve_mux_palette_analyze (GstMveMux * mvemux, const GstBuffer * pal,
-    guint16 * first, guint16 * last)
-{
-  gint i;
-  guint32 *col1;
-
-  col1 = (guint32 *) GST_BUFFER_DATA (pal);
-
-  /* compare current palette against last frame */
-  if (mvemux->last_frame == NULL) {
-    /* ignore 0,0,0 entries but make sure we get
-       at least one color */
-    /* FIXME: is ignoring 0,0,0 safe? possibly depends on player impl */
-    for (i = 0; i < MVE_PALETTE_COUNT; ++i) {
-      if (col1[i] != 0) {
-        *first = i;
-        break;
-      }
-    }
-    if (i == MVE_PALETTE_COUNT) {
-      *first = *last = 0;
-    } else {
-      for (i = MVE_PALETTE_COUNT - 1; i >= 0; --i) {
-        if (col1[i] != 0) {
-          *last = i;
-          break;
-        }
-      }
-    }
-  } else {
-    const GstBuffer *last_pal;
-    guint32 *col2;
-
-    last_pal = gst_mve_mux_palette_from_buffer (mvemux->last_frame);
-
-    g_return_if_fail (last_pal != NULL);
-
-    col2 = (guint32 *) GST_BUFFER_DATA (last_pal);
-
-    for (i = 0; i < MVE_PALETTE_COUNT; ++i) {
-      if (col1[i] != col2[i]) {
-        *first = i;
-        break;
-      }
-    }
-    for (i = MVE_PALETTE_COUNT - 1; i >= 0; --i) {
-      if (col1[i] != col2[i]) {
-        *last = i;
-        break;
-      }
-    }
-  }
-
-  GST_DEBUG_OBJECT (mvemux, "palette first:%d, last:%d", *first, *last);
-}
-
-static gboolean
-gst_mve_mux_palette_changed (GstMveMux * mvemux, const GstBuffer * pal)
-{
-  const GstBuffer *last_pal;
-
-  g_return_val_if_fail (mvemux->last_frame != NULL, TRUE);
-
-  last_pal = gst_mve_mux_palette_from_buffer (mvemux->last_frame);
-  if (last_pal == NULL)
-    return TRUE;
-
-  return memcmp (GST_BUFFER_DATA (last_pal), GST_BUFFER_DATA (pal),
-      MVE_PALETTE_COUNT * 4) != 0;
-}
-
-static GstFlowReturn
-gst_mve_mux_push_buffer (GstMveMux * mvemux, GstBuffer * buffer)
-{
-  GST_BUFFER_OFFSET (buffer) = mvemux->stream_offset;
-  mvemux->stream_offset += GST_BUFFER_SIZE (buffer);
-  GST_BUFFER_OFFSET_END (buffer) = mvemux->stream_offset;
-  return gst_pad_push (mvemux->source, buffer);
-}
-
-/* returns TRUE if audio segment is complete */
-static gboolean
-gst_mve_mux_audio_data (GstMveMux * mvemux)
-{
-  gboolean complete = FALSE;
-
-  while (!complete) {
-    GstBuffer *buf;
-    GstClockTime buftime;
-    GstClockTime duration;
-    GstClockTime t_needed;
-    gint b_needed;
-    gint len;
-
-    buf = g_queue_peek_head (mvemux->audio_buffer);
-    if (buf == NULL)
-      return (mvemux->audio_pad_eos && mvemux->chunk_audio) ||
-          (mvemux->stream_time + mvemux->frame_duration < mvemux->max_ts);
-
-    buftime = GST_BUFFER_TIMESTAMP (buf);
-    duration = GST_BUFFER_DURATION (buf);
-
-    /* FIXME: adjust buffer timestamps using segment info */
-
-    /* assume continuous buffers on invalid time stamps */
-    if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (buftime)))
-      buftime = mvemux->next_ts;
-
-    if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (duration)))
-      duration = gst_util_uint64_scale_int (mvemux->frame_duration,
-          GST_BUFFER_SIZE (buf), mvemux->spf);
-
-    if (mvemux->chunk_audio) {
-      b_needed = mvemux->spf - mvemux->chunk_audio->len;
-      t_needed = (gint) gst_util_uint64_scale_int (mvemux->frame_duration,
-          b_needed, mvemux->spf);
-    } else {
-      b_needed = mvemux->spf;
-      t_needed = mvemux->frame_duration;
-    }
-
-    if (buftime > mvemux->next_ts + t_needed) {
-      /* future buffer - fill chunk with silence */
-      GST_DEBUG_OBJECT (mvemux, "future buffer, inserting silence");
-
-      /* if we already have a chunk started, fill it
-         otherwise we'll simply insert a silence chunk */
-      if (mvemux->chunk_audio) {
-        len = mvemux->chunk_audio->len;
-        g_byte_array_set_size (mvemux->chunk_audio, mvemux->spf);
-        memset (mvemux->chunk_audio->data + len, 0, mvemux->spf - len);
-      }
-      mvemux->next_ts += t_needed;
-      complete = TRUE;
-    } else if (buftime + duration <= mvemux->next_ts) {
-      /* past buffer - drop */
-      GST_DEBUG_OBJECT (mvemux, "dropping past buffer");
-      g_queue_pop_head (mvemux->audio_buffer);
-      gst_buffer_unref (buf);
-    } else {
-      /* our data starts somewhere in this buffer */
-      const guint8 *bufdata = GST_BUFFER_DATA (buf);
-      gint b_available = GST_BUFFER_SIZE (buf);
-      gint align = (mvemux->bps / 8) * mvemux->channels - 1;
-      gint offset;
-
-      if (mvemux->chunk_audio == NULL)
-        mvemux->chunk_audio = g_byte_array_sized_new (mvemux->spf);
-
-      if (buftime >= mvemux->next_ts) {
-        /* insert silence as necessary */
-        len = mvemux->chunk_audio->len;
-        offset = (gint) gst_util_uint64_scale_int (mvemux->spf,
-            buftime - mvemux->next_ts, mvemux->frame_duration);
-        offset = (offset + align) & ~align;
-
-        if (len < offset) {
-          g_byte_array_set_size (mvemux->chunk_audio, offset);
-          memset (mvemux->chunk_audio->data + len, 0, offset - len);
-          b_needed -= offset - len;
-          mvemux->next_ts += gst_util_uint64_scale_int (mvemux->frame_duration,
-              offset - len, mvemux->spf);
-        }
-        offset = 0;
-      } else {
-        offset = (gint) gst_util_uint64_scale_int (mvemux->spf,
-            mvemux->next_ts - buftime, mvemux->frame_duration);
-        offset = (offset + align) & ~align;
-      }
-
-      g_assert (offset <= b_available);
-
-      bufdata += offset;
-      b_available -= offset;
-      if (b_needed > b_available)
-        b_needed = b_available;
-
-      if (mvemux->bps == 8) {
-        g_byte_array_append (mvemux->chunk_audio, bufdata, b_needed);
-      } else {
-        guint i;
-        gint16 *sample = (gint16 *) bufdata;
-        guint8 s[2];
-
-        len = b_needed / 2;
-        for (i = 0; i < len; ++i) {
-          s[0] = (*sample) & 0x00FF;
-          s[1] = ((*sample) & 0xFF00) >> 8;
-          g_byte_array_append (mvemux->chunk_audio, s, 2);
-          ++sample;
-        }
-      }
-
-      mvemux->next_ts += gst_util_uint64_scale_int (mvemux->frame_duration,
-          b_needed, mvemux->spf);
-
-      if (b_available - b_needed == 0) {
-        /* consumed buffer */
-        GST_LOG_OBJECT (mvemux, "popping consumed buffer");
-        g_queue_pop_head (mvemux->audio_buffer);
-        gst_buffer_unref (buf);
-      }
-
-      complete = (mvemux->chunk_audio->len >= mvemux->spf);
-    }
-
-    if (mvemux->max_ts < mvemux->next_ts)
-      mvemux->max_ts = mvemux->next_ts;
-  }
-
-  return complete;
-}
-
-static GstFlowReturn
-gst_mve_mux_start_movie (GstMveMux * mvemux)
-{
-  GstFlowReturn res;
-  GstBuffer *buf;
-
-  GST_DEBUG_OBJECT (mvemux, "writing movie preamble");
-
-  res = gst_pad_alloc_buffer (mvemux->source, 0,
-      MVE_PREAMBLE_SIZE, GST_PAD_CAPS (mvemux->source), &buf);
-
-  if (res != GST_FLOW_OK)
-    return res;
-
-  gst_pad_push_event (mvemux->source,
-      gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_BYTES, 0, -1, 0));
-
-  memcpy (GST_BUFFER_DATA (buf), mve_preamble, MVE_PREAMBLE_SIZE);
-  return gst_mve_mux_push_buffer (mvemux, buf);
-}
-
-static GstFlowReturn
-gst_mve_mux_end_movie (GstMveMux * mvemux)
-{
-  GstFlowReturn res;
-  GstBuffer *buf;
-  guint8 *bufdata;
-
-  GST_DEBUG_OBJECT (mvemux, "writing movie shutdown chunk");
-
-  res = gst_pad_alloc_buffer (mvemux->source, 0, 16,
-      GST_PAD_CAPS (mvemux->source), &buf);
-
-  if (res != GST_FLOW_OK)
-    return res;
-
-  bufdata = GST_BUFFER_DATA (buf);
-
-  GST_WRITE_UINT16_LE (bufdata, 8);     /* shutdown chunk */
-  GST_WRITE_UINT16_LE (bufdata + 2, MVE_CHUNK_SHUTDOWN);
-  GST_WRITE_UINT16_LE (bufdata + 4, 0); /* end movie segment */
-  bufdata[6] = MVE_OC_END_OF_STREAM;
-  bufdata[7] = 0;
-  GST_WRITE_UINT16_LE (bufdata + 8, 0); /* end chunk segment */
-  bufdata[10] = MVE_OC_END_OF_CHUNK;
-  bufdata[11] = 0;
-
-  GST_WRITE_UINT16_LE (bufdata + 12, 0);        /* end movie chunk */
-  GST_WRITE_UINT16_LE (bufdata + 14, MVE_CHUNK_END);
-
-  return gst_mve_mux_push_buffer (mvemux, buf);
-}
-
-static GstFlowReturn
-gst_mve_mux_init_video_chunk (GstMveMux * mvemux, const GstBuffer * pal)
-{
-  GstFlowReturn res;
-  GstBuffer *buf;
-  guint8 *bufdata;
-  guint16 buf_size;
-  guint16 first_col = 0, last_col = 0;
-  guint pal_size = 0;
-
-  GST_DEBUG_OBJECT (mvemux, "init-video chunk w:%d, h:%d, bpp:%d",
-      mvemux->width, mvemux->height, mvemux->bpp);
-
-  buf_size = 4;                 /* chunk header */
-  buf_size += 4 + 6;            /* init video mode segment */
-  buf_size += 4 + 8;            /* create video buffers segment */
-
-  if (mvemux->bpp == 8) {
-    g_return_val_if_fail (pal != NULL, GST_FLOW_ERROR);
-
-    /* install palette segment */
-    gst_mve_mux_palette_analyze (mvemux, pal, &first_col, &last_col);
-    pal_size = (last_col - first_col + 1) * 3;
-    buf_size += 4 + 4 + pal_size;
-  }
-
-  buf_size += 4 + 0;            /* end chunk segment */
-
-  res = gst_pad_alloc_buffer (mvemux->source, 0, buf_size,
-      GST_PAD_CAPS (mvemux->source), &buf);
-  if (res != GST_FLOW_OK)
-    return res;
-
-  bufdata = GST_BUFFER_DATA (buf);
-
-  GST_WRITE_UINT16_LE (bufdata, buf_size - 4);
-  GST_WRITE_UINT16_LE (bufdata + 2, MVE_CHUNK_INIT_VIDEO);
-
-  GST_WRITE_UINT16_LE (bufdata + 4, 6);
-  bufdata[6] = MVE_OC_VIDEO_MODE;
-  bufdata[7] = 0;
-  GST_WRITE_UINT16_LE (bufdata + 8, mvemux->screen_width);      /* screen width */
-  GST_WRITE_UINT16_LE (bufdata + 10, mvemux->screen_height);    /* screen height */
-  GST_WRITE_UINT16_LE (bufdata + 12, 0);        /* ??? - flags */
-
-  GST_WRITE_UINT16_LE (bufdata + 14, 8);
-  bufdata[16] = MVE_OC_VIDEO_BUFFERS;
-  bufdata[17] = 2;
-  GST_WRITE_UINT16_LE (bufdata + 18, mvemux->width >> 3);       /* buffer width */
-  GST_WRITE_UINT16_LE (bufdata + 20, mvemux->height >> 3);      /* buffer height */
-  GST_WRITE_UINT16_LE (bufdata + 22, 1);        /* buffer count */
-  GST_WRITE_UINT16_LE (bufdata + 24, (mvemux->bpp >> 3) - 1);   /* true color */
-
-  bufdata += 26;
-
-  if (mvemux->bpp == 8) {
-    /* TODO: check whether we really need to update the entire palette (or at all) */
-    gint i;
-    guint32 *col;
-
-    GST_DEBUG_OBJECT (mvemux, "installing palette");
-
-    GST_WRITE_UINT16_LE (bufdata, 4 + pal_size);
-    bufdata[2] = MVE_OC_PALETTE;
-    bufdata[3] = 0;
-    GST_WRITE_UINT16_LE (bufdata + 4, first_col);       /* first color index */
-    GST_WRITE_UINT16_LE (bufdata + 6, last_col - first_col + 1);        /* number of colors */
-
-    bufdata += 8;
-    col = (guint32 *) GST_BUFFER_DATA (pal);
-    for (i = first_col; i <= last_col; ++i) {
-      /* convert from 8-bit palette to 6-bit VGA */
-      guint32 rgb = col[i];
-
-      (*bufdata) = ((rgb & 0x00FF0000) >> 16) >> 2;
-      ++bufdata;
-      (*bufdata) = ((rgb & 0x0000FF00) >> 8) >> 2;
-      ++bufdata;
-      (*bufdata) = (rgb & 0x000000FF) >> 2;
-      ++bufdata;
-    }
-
-    mvemux->pal_changed = TRUE;
-    mvemux->pal_first_color = first_col;
-    mvemux->pal_colors = last_col - first_col + 1;
-  }
-
-  GST_WRITE_UINT16_LE (bufdata, 0);
-  bufdata[2] = MVE_OC_END_OF_CHUNK;
-  bufdata[3] = 0;
-
-  return gst_mve_mux_push_buffer (mvemux, buf);
-}
-
-static GstFlowReturn
-gst_mve_mux_init_audio_chunk (GstMveMux * mvemux)
-{
-  GstFlowReturn res;
-  GstBuffer *buf;
-  guint16 buf_size;
-  guint8 *bufdata;
-  guint16 flags = 0;
-  gint align;
-
-  GST_DEBUG_OBJECT (mvemux,
-      "init-audio chunk rate:%d, chan:%d, bps:%d, comp:%d", mvemux->rate,
-      mvemux->channels, mvemux->bps, mvemux->compression);
-
-  if (G_UNLIKELY (mvemux->bps == 8 && mvemux->compression)) {
-    GST_INFO_OBJECT (mvemux,
-        "compression only supported for 16-bit samples, disabling");
-    mvemux->compression = FALSE;
-  }
-
-  /* calculate sample data per frame */
-  align = (mvemux->bps / 8) * mvemux->channels;
-  mvemux->spf =
-      (guint16) (gst_util_uint64_scale_int (align * mvemux->rate,
-          mvemux->frame_duration, GST_SECOND) + align - 1) & ~(align - 1);
-
-  /* prebuffer approx. 1 second of audio data */
-  mvemux->lead_frames = align * mvemux->rate / mvemux->spf;
-  GST_DEBUG_OBJECT (mvemux, "calculated spf:%d, lead frames:%d",
-      mvemux->spf, mvemux->lead_frames);
-
-  /* chunk header + init video mode segment + end chunk segment */
-  buf_size = 4 + (4 + 10) + 4;
-
-  res = gst_pad_alloc_buffer (mvemux->source, 0, buf_size,
-      GST_PAD_CAPS (mvemux->source), &buf);
-  if (res != GST_FLOW_OK)
-    return res;
-
-  bufdata = GST_BUFFER_DATA (buf);
-
-  if (mvemux->channels == 2)
-    flags |= MVE_AUDIO_STEREO;
-  if (mvemux->bps == 16)
-    flags |= MVE_AUDIO_16BIT;
-  if (mvemux->compression)
-    flags |= MVE_AUDIO_COMPRESSED;
-
-  GST_WRITE_UINT16_LE (bufdata, buf_size - 4);
-  GST_WRITE_UINT16_LE (bufdata + 2, MVE_CHUNK_INIT_AUDIO);
-
-  GST_WRITE_UINT16_LE (bufdata + 4, 10);
-  bufdata[6] = MVE_OC_AUDIO_BUFFERS;
-  bufdata[7] = 1;
-  GST_WRITE_UINT16_LE (bufdata + 8, 0); /* ??? */
-  GST_WRITE_UINT16_LE (bufdata + 10, flags);    /* flags */
-  GST_WRITE_UINT16_LE (bufdata + 12, mvemux->rate);     /* sample rate */
-  GST_WRITE_UINT32_LE (bufdata + 14,    /* minimum audio buffer size */
-      mvemux->spf * mvemux->lead_frames);
-
-  GST_WRITE_UINT16_LE (bufdata + 18, 0);
-  bufdata[20] = MVE_OC_END_OF_CHUNK;
-  bufdata[21] = 0;
-
-  return gst_mve_mux_push_buffer (mvemux, buf);
-}
-
-static guint8 *
-gst_mve_mux_write_audio_segments (GstMveMux * mvemux, guint8 * data)
-{
-  GByteArray *chunk = mvemux->chunk_audio;
-  guint16 silent_mask;
-
-  GST_LOG_OBJECT (mvemux, "writing audio data");
-
-  /* audio data */
-  if (chunk) {
-    guint16 len = mvemux->compression ?
-        chunk->len / 2 + mvemux->channels : chunk->len;
-
-    silent_mask = 0xFFFE;
-
-    GST_WRITE_UINT16_LE (data, 6 + len);
-    data[2] = MVE_OC_AUDIO_DATA;
-    data[3] = 0;
-    GST_WRITE_UINT16_LE (data + 4, mvemux->audio_frames);       /* frame number */
-    GST_WRITE_UINT16_LE (data + 6, 0x0001);     /* stream mask */
-    GST_WRITE_UINT16_LE (data + 8, chunk->len); /* (uncompressed) data length */
-    data += 10;
-
-    if (mvemux->compression)
-      mve_compress_audio (data, chunk->data, len, mvemux->channels);
-    else
-      memcpy (data, chunk->data, chunk->len);
-    data += len;
-
-    g_byte_array_free (chunk, TRUE);
-    mvemux->chunk_audio = NULL;
-  } else
-    silent_mask = 0xFFFF;
-
-  /* audio data (silent) */
-  GST_WRITE_UINT16_LE (data, 6);
-  data[2] = MVE_OC_AUDIO_SILENCE;
-  data[3] = 0;
-  GST_WRITE_UINT16_LE (data + 4, mvemux->audio_frames++);       /* frame number */
-  GST_WRITE_UINT16_LE (data + 6, silent_mask);  /* stream mask */
-  GST_WRITE_UINT16_LE (data + 8, mvemux->spf);  /* (imaginary) data length */
-  data += 10;
-
-  return data;
-}
-
-static GstFlowReturn
-gst_mve_mux_prebuffer_audio_chunk (GstMveMux * mvemux)
-{
-  GstFlowReturn ret;
-  GstBuffer *chunk;
-  guint16 size;
-  guint8 *data;
-
-  /* calculate chunk size */
-  size = 4;                     /* chunk header */
-
-  if (mvemux->chunk_audio) {
-    size += 4 + 6 +             /* audio data */
-        (mvemux->compression ?
-        mvemux->chunk_audio->len / 2 + mvemux->channels :
-        mvemux->chunk_audio->len);
-  }
-  size += 4 + 6;                /* audio data silent */
-  size += 4;                    /* end chunk */
-
-  ret = gst_pad_alloc_buffer (mvemux->source, 0, size,
-      GST_PAD_CAPS (mvemux->source), &chunk);
-  if (ret != GST_FLOW_OK)
-    return ret;
-
-  data = GST_BUFFER_DATA (chunk);
-
-  /* assemble chunk */
-  GST_WRITE_UINT16_LE (data, size - 4);
-  GST_WRITE_UINT16_LE (data + 2, MVE_CHUNK_AUDIO_ONLY);
-  data += 4;
-
-  data = gst_mve_mux_write_audio_segments (mvemux, data);
-
-  /* end chunk */
-  GST_WRITE_UINT16_LE (data, 0);
-  data[2] = MVE_OC_END_OF_CHUNK;
-  data[3] = 0;
-
-  if (mvemux->audio_frames >= mvemux->lead_frames)
-    mvemux->state = MVE_MUX_STATE_MOVIE;
-
-  mvemux->stream_time += mvemux->frame_duration;
-
-  GST_DEBUG_OBJECT (mvemux, "pushing audio chunk");
-
-  return gst_mve_mux_push_buffer (mvemux, chunk);
-}
-
-static GstFlowReturn
-gst_mve_mux_push_chunk (GstMveMux * mvemux)
-{
-  GstFlowReturn ret;
-  GstBuffer *chunk;
-  GstBuffer *frame;
-  guint32 size;
-  guint16 cm_size = 0;
-  guint8 *data;
-
-  /* calculate chunk size */
-  size = 4;                     /* chunk header */
-
-  if (G_UNLIKELY (mvemux->timer == 0)) {
-    /* we need to insert a timer segment */
-    size += 4 + 6;
-  }
-
-  if (mvemux->audio_pad_connected) {
-    if (mvemux->chunk_audio) {
-      size += 4 + 6 +           /* audio data */
-          (mvemux->compression ?
-          mvemux->chunk_audio->len / 2 + mvemux->channels :
-          mvemux->chunk_audio->len);
-    }
-    size += 4 + 6;              /* audio data silent */
-  }
-
-  size += 4 + 6;                /* play video */
-  size += 4;                    /* play audio; present even if no audio stream */
-  size += 4;                    /* end chunk */
-
-  /* we must encode video only after we have the audio side
-     covered, since only then we can tell what size limit
-     the video data must adhere to */
-  frame = g_queue_pop_head (mvemux->video_buffer);
-  if (frame != NULL) {
-    cm_size = (((mvemux->width * mvemux->height) >> 6) + 1) >> 1;
-    size += 4 + cm_size;        /* code map */
-    size += 4 + 14;             /* video data header */
-
-    /* make sure frame is writable since the encoder may want to modify it */
-    frame = gst_buffer_make_writable (frame);
-
-    if (mvemux->bpp == 8) {
-      const GstBuffer *pal = gst_mve_mux_palette_from_buffer (frame);
-
-      if (pal == NULL)
-        ret = GST_FLOW_ERROR;
-      else
-        ret = mve_encode_frame8 (mvemux, frame,
-            (guint32 *) GST_BUFFER_DATA (pal), G_MAXUINT16 - size);
-    } else
-      ret = mve_encode_frame16 (mvemux, frame, G_MAXUINT16 - size);
-
-    if (mvemux->second_last_frame != NULL)
-      gst_buffer_unref (mvemux->second_last_frame);
-    mvemux->second_last_frame = mvemux->last_frame;
-    mvemux->last_frame = frame;
-
-    if (ret != GST_FLOW_OK)
-      return ret;
-
-    size += mvemux->chunk_video->len;
-  }
-
-  if (size > G_MAXUINT16) {
-    GST_ELEMENT_ERROR (mvemux, STREAM, ENCODE, (NULL),
-        ("encoding frame %d failed: maximum block size exceeded (%u)",
-            mvemux->video_frames + 1, size));
-    return GST_FLOW_ERROR;
-  }
-
-  ret = gst_pad_alloc_buffer (mvemux->source, 0, size,
-      GST_PAD_CAPS (mvemux->source), &chunk);
-  if (ret != GST_FLOW_OK)
-    return ret;
-
-  data = GST_BUFFER_DATA (chunk);
-
-  /* assemble chunk */
-  GST_WRITE_UINT16_LE (data, size - 4);
-  GST_WRITE_UINT16_LE (data + 2, MVE_CHUNK_VIDEO);
-  data += 4;
-
-  if (G_UNLIKELY (mvemux->timer == 0)) {
-    /* insert a timer segment */
-    mvemux->timer = mvemux->frame_duration / GST_USECOND / 8;
-
-    GST_WRITE_UINT16_LE (data, 6);
-    data[2] = MVE_OC_CREATE_TIMER;
-    data[3] = 0;
-    GST_WRITE_UINT32_LE (data + 4, mvemux->timer);      /* timer rate */
-    GST_WRITE_UINT16_LE (data + 8, 8);  /* timer subdivision */
-    data += 10;
-  }
-
-  /* code map */
-  if (mvemux->chunk_video) {
-    GST_WRITE_UINT16_LE (data, cm_size);
-    data[2] = MVE_OC_CODE_MAP;
-    data[3] = 0;
-    memcpy (data + 4, mvemux->chunk_code_map, cm_size);
-    data += 4 + cm_size;
-  }
-
-  if (mvemux->audio_pad_connected)
-    data = gst_mve_mux_write_audio_segments (mvemux, data);
-
-  if (mvemux->chunk_video) {
-    GST_LOG_OBJECT (mvemux, "writing video data");
-
-    /* video data */
-    GST_WRITE_UINT16_LE (data, 14 + mvemux->chunk_video->len);
-    data[2] = MVE_OC_VIDEO_DATA;
-    data[3] = 0;
-    GST_WRITE_UINT16_LE (data + 6, mvemux->video_frames);       /* previous frame */
-    GST_WRITE_UINT16_LE (data + 4, ++mvemux->video_frames);     /* current frame */
-    GST_WRITE_UINT16_LE (data + 8, 0);  /* x offset */
-    GST_WRITE_UINT16_LE (data + 10, 0); /* y offset */
-    GST_WRITE_UINT16_LE (data + 12, mvemux->width >> 3);        /* buffer width */
-    GST_WRITE_UINT16_LE (data + 14, mvemux->height >> 3);       /* buffer height */
-    GST_WRITE_UINT16_LE (data + 16,     /* flags */
-        (mvemux->video_frames == 1 ? 0 : MVE_VIDEO_DELTA_FRAME));
-    memcpy (data + 18, mvemux->chunk_video->data, mvemux->chunk_video->len);
-    data += 18 + mvemux->chunk_video->len;
-
-    g_byte_array_free (mvemux->chunk_video, TRUE);
-    mvemux->chunk_video = NULL;
-  }
-
-  /* play audio */
-  GST_WRITE_UINT16_LE (data, 0);
-  data[2] = MVE_OC_PLAY_AUDIO;
-  data[3] = 0;
-  data += 4;
-
-  /* play video */
-  GST_WRITE_UINT16_LE (data, 6);
-  data[2] = MVE_OC_PLAY_VIDEO;
-  data[3] = 1;
-  /* this block is only set to non-zero on palette changes in 8-bit mode */
-  if (mvemux->pal_changed) {
-    GST_WRITE_UINT16_LE (data + 4, mvemux->pal_first_color);    /* index of first color */
-    GST_WRITE_UINT16_LE (data + 6, mvemux->pal_colors); /* number of colors */
-    mvemux->pal_changed = FALSE;
-  } else {
-    GST_WRITE_UINT32_LE (data + 4, 0);
-  }
-  GST_WRITE_UINT16_LE (data + 8, 0);    /* ??? */
-  data += 10;
-
-  /* end chunk */
-  GST_WRITE_UINT16_LE (data, 0);
-  data[2] = MVE_OC_END_OF_CHUNK;
-  data[3] = 0;
-
-  mvemux->chunk_has_palette = FALSE;
-  mvemux->chunk_has_audio = FALSE;
-  mvemux->stream_time += mvemux->frame_duration;
-
-  GST_LOG_OBJECT (mvemux, "pushing video chunk");
-
-  return gst_mve_mux_push_buffer (mvemux, chunk);
-}
-
-static GstFlowReturn
-gst_mve_mux_chain (GstPad * sinkpad, GstBuffer * inbuf)
-{
-  GstMveMux *mvemux = GST_MVE_MUX (GST_PAD_PARENT (sinkpad));
-  GstFlowReturn ret = GST_FLOW_OK;
-  const GstBuffer *palette;
-  gboolean audio_ok, video_ok;
-
-  /* need to serialize the buffers */
-  g_mutex_lock (mvemux->lock);
-
-  if (G_LIKELY (inbuf != NULL)) {       /* TODO: see _sink_event... */
-    if (sinkpad == mvemux->audiosink)
-      g_queue_push_tail (mvemux->audio_buffer, inbuf);
-    else if (sinkpad == mvemux->videosink)
-      g_queue_push_tail (mvemux->video_buffer, inbuf);
-    else
-      g_assert_not_reached ();
-  }
-
-  /* TODO: this is gross... */
-  if (G_UNLIKELY (mvemux->state == MVE_MUX_STATE_INITIAL)) {
-    GST_DEBUG_OBJECT (mvemux, "waiting for caps");
-    goto done;
-  }
-
-  /* now actually try to mux something */
-  if (G_UNLIKELY (mvemux->state == MVE_MUX_STATE_CONNECTED)) {
-    palette = NULL;
-
-    if (mvemux->bpp == 8) {
-      /* we need to add palette info to the init chunk */
-      if (g_queue_is_empty (mvemux->video_buffer))
-        goto done;              /* wait for more data */
-
-      ret = gst_mve_mux_palette_from_current_frame (mvemux, &palette);
-      if (ret != GST_FLOW_OK)
-        goto done;
-    }
-
-    gst_mve_mux_start_movie (mvemux);
-    gst_mve_mux_init_video_chunk (mvemux, palette);
-    mvemux->chunk_has_palette = TRUE;
-
-    if (mvemux->audio_pad_connected) {
-      gst_mve_mux_init_audio_chunk (mvemux);
-
-      mvemux->state = MVE_MUX_STATE_PREBUFFER;
-    } else
-      mvemux->state = MVE_MUX_STATE_MOVIE;
-  }
-
-  while ((mvemux->state == MVE_MUX_STATE_PREBUFFER) && (ret == GST_FLOW_OK) &&
-      gst_mve_mux_audio_data (mvemux)) {
-    ret = gst_mve_mux_prebuffer_audio_chunk (mvemux);
-  }
-
-  if (G_LIKELY (mvemux->state >= MVE_MUX_STATE_MOVIE)) {
-    audio_ok = !mvemux->audio_pad_connected ||
-        !g_queue_is_empty (mvemux->audio_buffer) ||
-        (mvemux->audio_pad_eos && (mvemux->stream_time <= mvemux->max_ts));
-    video_ok = !g_queue_is_empty (mvemux->video_buffer) ||
-        (mvemux->video_pad_eos &&
-        (!mvemux->audio_pad_eos || (mvemux->stream_time <= mvemux->max_ts)));
-
-    while ((ret == GST_FLOW_OK) && audio_ok && video_ok) {
-
-      if (!g_queue_is_empty (mvemux->video_buffer)) {
-        if ((mvemux->bpp == 8) && !mvemux->chunk_has_palette) {
-          ret = gst_mve_mux_palette_from_current_frame (mvemux, &palette);
-          if (ret != GST_FLOW_OK)
-            goto done;
-
-          if (gst_mve_mux_palette_changed (mvemux, palette))
-            gst_mve_mux_init_video_chunk (mvemux, palette);
-          mvemux->chunk_has_palette = TRUE;
-        }
-      }
-
-      /* audio data */
-      if (mvemux->audio_pad_connected && !mvemux->chunk_has_audio &&
-          gst_mve_mux_audio_data (mvemux))
-        mvemux->chunk_has_audio = TRUE;
-
-      if ((!g_queue_is_empty (mvemux->video_buffer) || mvemux->video_pad_eos) &&
-          (mvemux->chunk_has_audio || !mvemux->audio_pad_connected
-              || mvemux->audio_pad_eos)) {
-        ret = gst_mve_mux_push_chunk (mvemux);
-      }
-
-      audio_ok = !mvemux->audio_pad_connected ||
-          !g_queue_is_empty (mvemux->audio_buffer) ||
-          (mvemux->audio_pad_eos && (mvemux->stream_time <= mvemux->max_ts));
-      video_ok = !g_queue_is_empty (mvemux->video_buffer) ||
-          (mvemux->video_pad_eos &&
-          (!mvemux->audio_pad_eos || (mvemux->stream_time <= mvemux->max_ts)));
-    }
-  }
-
-  if (G_UNLIKELY ((mvemux->state == MVE_MUX_STATE_EOS) && (ret == GST_FLOW_OK))) {
-    ret = gst_mve_mux_end_movie (mvemux);
-    gst_pad_push_event (mvemux->source, gst_event_new_eos ());
-  }
-
-done:
-  g_mutex_unlock (mvemux->lock);
-  return ret;
-}
-
-static gboolean
-gst_mve_mux_sink_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res = TRUE;
-  GstMveMux *mvemux = GST_MVE_MUX (GST_PAD_PARENT (pad));
-
-  GST_DEBUG_OBJECT (mvemux, "got %s event for pad %s",
-      GST_EVENT_TYPE_NAME (event), GST_PAD_NAME (pad));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_EOS:
-      if (pad == mvemux->audiosink) {
-        mvemux->audio_pad_eos = TRUE;
-
-        if (mvemux->state == MVE_MUX_STATE_PREBUFFER)
-          mvemux->state = MVE_MUX_STATE_MOVIE;
-      } else if (pad == mvemux->videosink)
-        mvemux->video_pad_eos = TRUE;
-
-      /* TODO: this is evil */
-      if (mvemux->audio_pad_eos && mvemux->video_pad_eos) {
-        mvemux->state = MVE_MUX_STATE_EOS;
-        gst_mve_mux_chain (pad, NULL);
-      }
-      gst_event_unref (event);
-      break;
-    case GST_EVENT_NEWSEGMENT:
-      if (pad == mvemux->audiosink) {
-        GstFormat format;
-        gint64 start;
-        gboolean update;
-
-        gst_event_parse_new_segment (event, &update, NULL, &format, &start,
-            NULL, NULL);
-        if ((format == GST_FORMAT_TIME) && update && (start > mvemux->max_ts))
-          mvemux->max_ts = start;
-      }
-      gst_event_unref (event);
-      break;
-    default:
-      res = gst_pad_event_default (pad, event);
-      break;
-  }
-
-  return res;
-}
-
-static gboolean
-gst_mve_mux_vidsink_set_caps (GstPad * pad, GstCaps * vscaps)
-{
-  GstMveMux *mvemux;
-  GstStructure *structure;
-  GstClockTime duration;
-  const GValue *fps;
-  gint w, h, bpp;
-  gboolean ret;
-
-  mvemux = GST_MVE_MUX (GST_PAD_PARENT (pad));
-
-  GST_DEBUG_OBJECT (mvemux, "video set_caps triggered on %s",
-      GST_PAD_NAME (pad));
-
-  structure = gst_caps_get_structure (vscaps, 0);
-
-  ret = gst_structure_get_int (structure, "width", &w);
-  ret &= gst_structure_get_int (structure, "height", &h);
-  ret &= gst_structure_get_int (structure, "bpp", &bpp);
-  fps = gst_structure_get_value (structure, "framerate");
-  ret &= (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps));
-
-  duration = gst_util_uint64_scale_int (GST_SECOND,
-      gst_value_get_fraction_denominator (fps),
-      gst_value_get_fraction_numerator (fps));
-
-  if (!ret)
-    return FALSE;
-
-  /* don't allow changing width, height, bpp, or framerate */
-  if (mvemux->state != MVE_MUX_STATE_INITIAL) {
-    if (mvemux->width != w || mvemux->height != h ||
-        mvemux->bpp != bpp || mvemux->frame_duration != duration) {
-      GST_ERROR_OBJECT (mvemux, "caps renegotiation not allowed");
-      return FALSE;
-    }
-  } else {
-    if (w % 8 != 0 || h % 8 != 0) {
-      GST_ERROR_OBJECT (mvemux, "width and height must be multiples of 8");
-      return FALSE;
-    }
-
-    mvemux->width = w;
-    mvemux->height = h;
-    mvemux->bpp = bpp;
-    mvemux->frame_duration = duration;
-
-    if (mvemux->screen_width < w) {
-      GST_INFO_OBJECT (mvemux, "setting suggested screen width to %d", w);
-      mvemux->screen_width = w;
-    }
-    if (mvemux->screen_height < h) {
-      GST_INFO_OBJECT (mvemux, "setting suggested screen height to %d", h);
-      mvemux->screen_height = h;
-    }
-
-    g_free (mvemux->chunk_code_map);
-    mvemux->chunk_code_map = g_malloc ((((w * h) >> 6) + 1) >> 1);
-
-    /* audio caps already initialized? */
-    if (mvemux->bps != 0 || !mvemux->audio_pad_connected)
-      mvemux->state = MVE_MUX_STATE_CONNECTED;
-  }
-
-  return TRUE;
-}
-
-static gboolean
-gst_mve_mux_audsink_set_caps (GstPad * pad, GstCaps * ascaps)
-{
-  GstMveMux *mvemux;
-  GstStructure *structure;
-  gboolean ret;
-  gint val;
-
-  mvemux = GST_MVE_MUX (GST_PAD_PARENT (pad));
-
-  GST_DEBUG_OBJECT (mvemux, "audio set_caps triggered on %s",
-      GST_PAD_NAME (pad));
-
-  /* don't allow caps renegotiation for now */
-  if (mvemux->state != MVE_MUX_STATE_INITIAL)
-    return FALSE;
-
-  structure = gst_caps_get_structure (ascaps, 0);
-
-  ret = gst_structure_get_int (structure, "channels", &val);
-  mvemux->channels = val;
-  ret &= gst_structure_get_int (structure, "rate", &val);
-  mvemux->rate = val;
-  ret &= gst_structure_get_int (structure, "width", &val);
-  mvemux->bps = val;
-
-  /* video caps already initialized? */
-  if (mvemux->bpp != 0)
-    mvemux->state = MVE_MUX_STATE_CONNECTED;
-
-  return ret;
-}
-
-static GstPad *
-gst_mve_mux_request_new_pad (GstElement * element,
-    GstPadTemplate * templ, const gchar * req_name)
-{
-  GstMveMux *mvemux = GST_MVE_MUX (element);
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
-  GstPad *pad;
-
-  g_return_val_if_fail (templ != NULL, NULL);
-
-  if (templ->direction != GST_PAD_SINK) {
-    GST_WARNING_OBJECT (mvemux, "request pad is not a SINK pad");
-    return NULL;
-  }
-
-  if (templ == gst_element_class_get_pad_template (klass, "audio")) {
-    if (mvemux->audiosink)
-      return NULL;
-
-    mvemux->audiosink = gst_pad_new_from_template (templ, "audio");
-    gst_pad_set_setcaps_function (mvemux->audiosink,
-        GST_DEBUG_FUNCPTR (gst_mve_mux_audsink_set_caps));
-    mvemux->audio_pad_eos = FALSE;
-    pad = mvemux->audiosink;
-  } else if (templ == gst_element_class_get_pad_template (klass, "video")) {
-    if (mvemux->videosink)
-      return NULL;
-
-    mvemux->videosink = gst_pad_new_from_template (templ, "video");
-    gst_pad_set_setcaps_function (mvemux->videosink,
-        GST_DEBUG_FUNCPTR (gst_mve_mux_vidsink_set_caps));
-    mvemux->video_pad_eos = FALSE;
-    pad = mvemux->videosink;
-  } else {
-    g_return_val_if_reached (NULL);
-  }
-
-  gst_pad_set_chain_function (pad, GST_DEBUG_FUNCPTR (gst_mve_mux_chain));
-  gst_pad_set_event_function (pad, GST_DEBUG_FUNCPTR (gst_mve_mux_sink_event));
-
-  g_signal_connect (pad, "linked", G_CALLBACK (gst_mve_mux_pad_link), mvemux);
-  g_signal_connect (pad, "unlinked", G_CALLBACK (gst_mve_mux_pad_unlink),
-      mvemux);
-
-  gst_element_add_pad (element, pad);
-  return pad;
-}
-
-static void
-gst_mve_mux_release_pad (GstElement * element, GstPad * pad)
-{
-  GstMveMux *mvemux = GST_MVE_MUX (element);
-
-  gst_element_remove_pad (element, pad);
-
-  if (pad == mvemux->audiosink) {
-    mvemux->audiosink = NULL;
-    mvemux->audio_pad_connected = FALSE;
-  } else if (pad == mvemux->videosink) {
-    mvemux->videosink = NULL;
-    mvemux->video_pad_connected = FALSE;
-  }
-}
-
-static void
-gst_mve_mux_base_init (GstMveMuxClass * klass)
-{
-
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &src_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &audio_sink_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &video_sink_factory);
-
-  gst_element_class_set_static_metadata (element_class, "MVE Multiplexer",
-      "Codec/Muxer",
-      "Muxes audio and video into an MVE stream",
-      "Jens Granseuer <jensgr@gmx.net>");
-}
-
-static void
-gst_mve_mux_finalize (GObject * object)
-{
-  GstMveMux *mvemux = GST_MVE_MUX (object);
-
-  if (mvemux->lock) {
-    g_mutex_free (mvemux->lock);
-    mvemux->lock = NULL;
-  }
-
-  if (mvemux->audio_buffer) {
-    g_queue_free (mvemux->audio_buffer);
-    mvemux->audio_buffer = NULL;
-  }
-
-  if (mvemux->video_buffer) {
-    g_queue_free (mvemux->video_buffer);
-    mvemux->video_buffer = NULL;
-  }
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_mve_mux_class_init (GstMveMuxClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = G_OBJECT_CLASS (klass);
-  gstelement_class = GST_ELEMENT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->finalize = gst_mve_mux_finalize;
-
-  gobject_class->get_property = gst_mve_mux_get_property;
-  gobject_class->set_property = gst_mve_mux_set_property;
-
-  g_object_class_install_property (gobject_class, PROP_AUDIO_COMPRESSION,
-      g_param_spec_boolean ("compression", "Audio compression",
-          "Whether to compress audio data", MVE_MUX_DEFAULT_COMPRESSION,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_VIDEO_QUICK_ENCODING,
-      g_param_spec_boolean ("quick", "Quick encoding",
-          "Whether to disable expensive encoding operations", TRUE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_VIDEO_SCREEN_WIDTH,
-      g_param_spec_uint ("screen-width", "Screen width",
-          "Suggested screen width", 320, 1600,
-          MVE_MUX_DEFAULT_SCREEN_WIDTH,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, PROP_VIDEO_SCREEN_HEIGHT,
-      g_param_spec_uint ("screen-height", "Screen height",
-          "Suggested screen height", 200, 1200,
-          MVE_MUX_DEFAULT_SCREEN_HEIGHT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  gstelement_class->request_new_pad = gst_mve_mux_request_new_pad;
-  gstelement_class->release_pad = gst_mve_mux_release_pad;
-
-  gstelement_class->change_state = gst_mve_mux_change_state;
-}
-
-static void
-gst_mve_mux_init (GstMveMux * mvemux)
-{
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (mvemux);
-
-  mvemux->source =
-      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
-          "src"), "src");
-  gst_element_add_pad (GST_ELEMENT (mvemux), mvemux->source);
-
-  mvemux->lock = g_mutex_new ();
-
-  mvemux->audiosink = NULL;
-  mvemux->videosink = NULL;
-  mvemux->audio_pad_connected = FALSE;
-  mvemux->video_pad_connected = FALSE;
-
-  /* audio/video metadata initialisation */
-  mvemux->last_frame = NULL;
-  mvemux->second_last_frame = NULL;
-  mvemux->chunk_code_map = NULL;
-  mvemux->chunk_video = NULL;
-  mvemux->chunk_audio = NULL;
-  mvemux->audio_buffer = NULL;
-  mvemux->video_buffer = NULL;
-
-  gst_mve_mux_reset (mvemux);
-}
-
-GType
-gst_mve_mux_get_type (void)
-{
-  static GType mvemux_type = 0;
-
-  if (!mvemux_type) {
-    static const GTypeInfo mvemux_info = {
-      sizeof (GstMveMuxClass),
-      (GBaseInitFunc) gst_mve_mux_base_init,
-      NULL,
-      (GClassInitFunc) gst_mve_mux_class_init,
-      NULL,
-      NULL,
-      sizeof (GstMveMux),
-      0,
-      (GInstanceInitFunc) gst_mve_mux_init,
-    };
-
-    GST_DEBUG_CATEGORY_INIT (mvemux_debug, "mvemux",
-        0, "Interplay MVE movie muxer");
-
-    mvemux_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstMveMux", &mvemux_info, 0);
-  }
-  return mvemux_type;
-}
diff --git a/gst/mve/gstmvemux.h b/gst/mve/gstmvemux.h
deleted file mode 100644 (file)
index 45fcad1..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* 
- * Interplay MVE muxer plugin for GStreamer
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_MVE_MUX_H__
-#define __GST_MVE_MUX_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MVE_MUX \
-  (gst_mve_mux_get_type())
-#define GST_MVE_MUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MVE_MUX,GstMveMux))
-#define GST_MVE_MUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MVE_MUX,GstMveMux))
-#define GST_IS_MVE_MUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MVE_MUX))
-#define GST_IS_MVE_MUX_CLASS(obj) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MVE_MUX))
-
-
-typedef struct _GstMveMux GstMveMux;
-typedef struct _GstMveMuxClass GstMveMuxClass;
-
-struct _GstMveMux {
-  GstElement element;
-  GMutex *lock;
-
-  /* pads */
-  GstPad *source;
-  GstPad *videosink;
-  GstPad *audiosink;
-
-  gboolean audio_pad_connected;
-  gboolean audio_pad_eos;
-  gboolean video_pad_connected;
-  gboolean video_pad_eos;
-
-  guint64 stream_offset;
-  /* audio stream time, really */
-  GstClockTime stream_time;
-  guint timer;
-  gint state;
-
-  /* ticks per frame */
-  GstClockTime frame_duration;
-
-  /* video stream properties */
-  guint16 width, height;
-  guint16 screen_width, screen_height;
-  /* bits per pixel */
-  guint8 bpp;
-  /* previous frames */
-  GstBuffer *last_frame;
-  GstBuffer *second_last_frame;
-  /* number of encoded frames */
-  guint16 video_frames;
-  /* palette handling */
-  gboolean pal_changed;
-  guint16 pal_first_color;
-  guint16 pal_colors;
-  /* whether to use expensive opcodes */
-  gboolean quick_encoding;
-
-  /* audio stream properties */
-  /* bits per sample */
-  guint8 bps;
-  guint32 rate;
-  guint8 channels;
-  gboolean compression;
-  /* current audio stream time */
-  GstClockTime next_ts;
-  /* maximum audio time we know about */
-  GstClockTime max_ts;
-  /* sample bytes per frame */
-  guint16 spf;
-  /* number of frames to use for audio lead-in */
-  guint16 lead_frames;
-  /* number of encoded frames */
-  guint16 audio_frames;
-
-  /* current chunk */
-  guint8 *chunk_code_map;
-  GByteArray *chunk_video;
-  GByteArray *chunk_audio;
-  gboolean chunk_has_palette;
-  gboolean chunk_has_audio;
-
-  /* buffers for incoming data */
-  GQueue *audio_buffer;
-  GQueue *video_buffer;
-};
-
-struct _GstMveMuxClass {
-  GstElementClass parent_class;
-};
-
-GType gst_mve_mux_get_type (void);
-
-GstFlowReturn mve_encode_frame8 (GstMveMux * mve,
-    GstBuffer * frame, const guint32 * palette, guint16 max_data);
-GstFlowReturn mve_encode_frame16 (GstMveMux * mve,
-    GstBuffer * frame, guint16 max_data);
-gint mve_compress_audio (guint8 * dest,
-    const guint8 * src, guint16 len, guint8 channels);
-
-G_END_DECLS
-
-#endif /* __GST_MVE_MUX_H__ */
diff --git a/gst/mve/meson.build b/gst/mve/meson.build
deleted file mode 100644 (file)
index ce38904..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-mve_sources = [
-  'gstmve.c',
-  'gstmvemux.c',
-  'gstmvedemux.c',
-  'mveaudiodec.c',
-  'mvevideodec8.c',
-  'mvevideodec16.c',
-  'mveaudioenc.c',
-  'mvevideoenc8.c',
-  'mvevideoenc16.c',
-]
-
-gstmve = library('gstmve',
-  mve_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc, libsinc],
-  dependencies : [gstbase_dep, libm],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/mve/mve.h b/gst/mve/mve.h
deleted file mode 100644 (file)
index 68ba7b8..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Interplay MVE movie definitions
- *
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __MVE_H__
-#define __MVE_H__
-
-#define MVE_PREAMBLE      "Interplay MVE File\032\000\032\000\000\001\063\021"
-#define MVE_PREAMBLE_SIZE 26
-
-#define MVE_PALETTE_COUNT 256
-
-/* MVE chunk types */
-#define MVE_CHUNK_INIT_AUDIO          0x0000
-#define MVE_CHUNK_AUDIO_ONLY          0x0001
-#define MVE_CHUNK_INIT_VIDEO          0x0002
-#define MVE_CHUNK_VIDEO               0x0003
-#define MVE_CHUNK_SHUTDOWN            0x0004
-#define MVE_CHUNK_END                 0x0005
-
-/* MVE segment opcodes */
-#define MVE_OC_END_OF_STREAM          0x00
-#define MVE_OC_END_OF_CHUNK           0x01
-#define MVE_OC_CREATE_TIMER           0x02
-#define MVE_OC_AUDIO_BUFFERS          0x03
-#define MVE_OC_PLAY_AUDIO             0x04
-#define MVE_OC_VIDEO_BUFFERS          0x05
-#define MVE_OC_PLAY_VIDEO             0x07
-#define MVE_OC_AUDIO_DATA             0x08
-#define MVE_OC_AUDIO_SILENCE          0x09
-#define MVE_OC_VIDEO_MODE             0x0A
-#define MVE_OC_PALETTE                0x0C
-#define MVE_OC_PALETTE_COMPRESSED     0x0D
-#define MVE_OC_CODE_MAP               0x0F
-#define MVE_OC_VIDEO_DATA             0x11
-
-/* audio flags */
-#define MVE_AUDIO_STEREO              0x0001
-#define MVE_AUDIO_16BIT               0x0002
-#define MVE_AUDIO_COMPRESSED          0x0004
-
-/* video flags */
-#define MVE_VIDEO_DELTA_FRAME         0x0001
-
-#endif /* __MVE_H__ */
diff --git a/gst/mve/mveaudiodec.c b/gst/mve/mveaudiodec.c
deleted file mode 100644 (file)
index 51d47b1..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 2003 The ffmpeg Project, Mike Melanson
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Interplay compressed audio codec by Mike Melanson (melanson@pcisys.net)
- */
-
-#include "gstmvedemux.h"
-
-static const short delta_table[256] = {
-  0, 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, 47, 51, 56, 61,
-  66, 72, 79, 86, 94, 102, 112, 122, 133, 145, 158, 173, 189, 206, 225, 245,
-  267, 292, 318, 348, 379, 414, 452, 493, 538, 587, 640, 699, 763, 832, 908,
-  991,
-  1081, 1180, 1288, 1405, 1534, 1673, 1826, 1993, 2175, 2373, 2590, 2826, 3084,
-  3365, 3672, 4008,
-  4373, 4772, 5208, 5683, 6202, 6767, 7385, 8059, 8794, 9597, 10472, 11428,
-  12471, 13609, 14851, 16206,
-  17685, 19298, 21060, 22981, 25078, 27367, 29864, 32589, -29973, -26728,
-  -23186, -19322, -15105, -10503, -5481, -1,
-  1, 1, 5481, 10503, 15105, 19322, 23186, 26728, 29973, -32589, -29864, -27367,
-  -25078, -22981, -21060, -19298,
-  -17685, -16206, -14851, -13609, -12471, -11428, -10472, -9597, -8794, -8059,
-  -7385, -6767, -6202, -5683, -5208, -4772,
-  -4373, -4008, -3672, -3365, -3084, -2826, -2590, -2373, -2175, -1993, -1826,
-  -1673, -1534, -1405, -1288, -1180,
-  -1081, -991, -908, -832, -763, -699, -640, -587, -538, -493, -452, -414, -379,
-  -348, -318, -292,
-  -267, -245, -225, -206, -189, -173, -158, -145, -133, -122, -112, -102, -94,
-  -86, -79, -72,
-  -66, -61, -56, -51, -47, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34,
-  -33,
-  -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18,
-  -17,
-  -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1
-};
-
-void
-ipaudio_uncompress (short *buffer, unsigned short buf_len,
-    const unsigned char *data, unsigned char channels)
-{
-  int i, out = 0;
-  int predictor[2];
-  int channel_number = 0;
-
-  for (i = 0; i < channels; ++i) {
-    predictor[i] = GST_READ_UINT16_LE (data);
-    data += 2;
-    if (predictor[i] & 0x8000)
-      predictor[i] -= 0x10000;
-    buffer[out++] = predictor[i];
-  }
-
-  /* we count in 16-bit ints, so adjust the buffer size */
-  buf_len /= 2;
-  while (out < buf_len) {
-    predictor[channel_number] += delta_table[*data++];
-    if (predictor[channel_number] < -32768)
-      predictor[channel_number] = -32768;
-    else if (predictor[channel_number] > 32767)
-      predictor[channel_number] = 32767;
-    buffer[out++] = predictor[channel_number];
-
-    /* toggle channel */
-    channel_number ^= channels - 1;
-  }
-}
diff --git a/gst/mve/mveaudioenc.c b/gst/mve/mveaudioenc.c
deleted file mode 100644 (file)
index 1cff20a..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/* 
- * Interplay MVE audio compressor
- * Copyright (C) 2003, 2004 Alexander Belyakov <abel@krasu.ru>
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <math.h>
-#include <stdlib.h>
-
-#include "gstmvemux.h"
-
-static const gint32 dec_table[256] = {
-  0, 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, 47, 51, 56, 61,
-  66, 72, 79, 86, 94, 102, 112,
-  122, 133, 145, 158, 173, 189, 206, 225, 245,
-  267, 292, 318, 348, 379,
-  414, 452, 493, 538, 587, 640, 699, 763, 832, 908, 991,
-  1081, 1180, 1288,
-  1405, 1534, 1673, 1826, 1993, 2175, 2373, 2590, 2826, 3084, 3365, 3672,
-  4008,
-  4373, 4772, 5208, 5683, 6202, 6767, 7385, 8059, 8794, 9597, 10472,
-  11428, 12471, 13609, 14851, 16206,
-  17685, 19298, 21060, 22981, 25078,
-  27367, 29864, 32589, 35563, 38808, 42350, 46214, 50431, 55033, 60055,
-  65535,
-  1, -65535, -60055, -55033, -50431, -46214, -42350, -38808, -35563,
-  -32589, -29864, -27367, -25078, -22981, -21060, -19298,
-  -17685, -16206,
-  -14851, -13609, -12471, -11428, -10472, -9597, -8794, -8059, -7385, -6767,
-  -6202, -5683, -5208, -4772,
-  -4373, -4008, -3672, -3365, -3084, -2826,
-  -2590, -2373, -2175, -1993, -1826, -1673, -1534, -1405, -1288, -1180,
-
-  -1081, -991, -908, -832, -763, -699, -640, -587, -538, -493, -452, -414,
-  -379, -348, -318, -292,
-  -267, -245, -225, -206, -189, -173, -158, -145,
-  -133, -122, -112, -102, -94, -86, -79, -72,
-  -66, -61, -56, -51, -47, -43,
-  -42, -41, -40, -39, -38, -37, -36, -35, -34, -33,
-  -32, -31, -30, -29,
-  -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17,
-  -16, -15,
-  -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1
-};
-
-
-
-/* This value could be non-optimal. Without knowledge of the value
-   distribution in the real signal, the actual optimum cannot be evaluated.
-   Should be somewhere between 11.458 and 11.542. */
-static const gdouble DPCM_SCALE = 11.5131;
-
-static gint8
-mve_enc_delta (guint n)
-{
-  if (n < 44)
-    return n;
-  return floor (DPCM_SCALE * log (n));
-}
-
-gint
-mve_compress_audio (guint8 * dest, const guint8 * src, guint16 len,
-    guint8 channels)
-{
-  gint16 prev[2], s;
-  gint delta, real_res;
-  gint cur_chan;
-  guint8 v;
-
-  for (cur_chan = 0; cur_chan < channels; ++cur_chan) {
-    prev[cur_chan] = GST_READ_UINT16_LE (src);
-    GST_WRITE_UINT16_LE (dest, prev[cur_chan]);
-    src += 2;
-    dest += 2;
-    len -= 2;
-  }
-
-  cur_chan = 0;
-  while (len > 0) {
-    s = GST_READ_UINT16_LE (src);
-    src += 2;
-
-    delta = s - prev[cur_chan];
-
-    if (delta >= 0)
-
-      v = mve_enc_delta (delta);
-
-    else
-
-      v = 256 - mve_enc_delta (-delta);
-
-
-    real_res = dec_table[v] + prev[cur_chan];
-
-    if (real_res < -32768 || real_res > 32767) {
-
-      /* correct overflow */
-      /* GST_DEBUG ("co:%d + %d = %d -> new v:%d, dec_table:%d will be %d",
-         prev[cur_chan], dec_table[v], real_res,
-         v, dec_table[v], prev[cur_chan]+dec_table[v]); */
-      if (s > 0) {
-
-        if (real_res > 32767)
-          --v;
-
-      } else {
-
-        if (real_res < -32768)
-          ++v;
-
-      }
-
-      real_res = dec_table[v] + prev[cur_chan];
-
-    }
-
-    if (G_UNLIKELY (abs (real_res - s) > 32767)) {
-      GST_ERROR ("sign loss left unfixed in audio stream, deviation:%d",
-          real_res - s);
-      return -1;
-    }
-
-
-    *dest++ = v;
-
-    --len;
-    /* use previous output instead of input. That way output will not go too far from input. */
-    prev[cur_chan] += dec_table[v];
-    cur_chan = channels - 1 - cur_chan;
-
-  }
-
-  return 0;
-}
diff --git a/gst/mve/mvevideodec16.c b/gst/mve/mvevideodec16.c
deleted file mode 100644 (file)
index e045a0b..0000000
+++ /dev/null
@@ -1,849 +0,0 @@
-/*
- * Interplay MVE Video Decoder (16 bit)
- * Copyright (C) 2003 the ffmpeg project, Mike Melanson
- *           (C) 2006 Jens Granseuer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * For more information about the Interplay MVE format, visit:
- *   http://www.pcisys.net/~melanson/codecs/interplay-mve.txt
- */
-
-#include "gstmvedemux.h"
-#include <string.h>
-
-#define PIXEL(s) GST_READ_UINT16_LE (s)
-
-#define CHECK_STREAM(l, n) \
-  do { \
-    if (G_UNLIKELY (*(l) < (n))) { \
-      GST_ERROR ("wanted to read %d bytes from stream, %d available", (n), *(l)); \
-      return -1; \
-    } \
-    *(l) -= (n); \
-  } while (0)
-
-/* copy an 8x8 block from the stream to the frame buffer */
-static int
-ipvideo_copy_block (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned short *src, int offset)
-{
-  int i;
-  int frame_offset;
-
-  frame_offset = frame - (unsigned short *) s->back_buf1 + offset;
-
-  if (G_UNLIKELY (frame_offset < 0)) {
-    GST_ERROR ("frame offset < 0 (%d)", frame_offset);
-    return -1;
-  } else if (G_UNLIKELY (frame_offset > s->max_block_offset)) {
-    GST_ERROR ("frame offset above limit (%d > %u)",
-        frame_offset, s->max_block_offset);
-    return -1;
-  }
-
-  for (i = 0; i < 8; ++i) {
-    memcpy (frame, src, 16);
-    frame += s->width;
-    src += s->width;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0x2 (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  unsigned char B;
-  int x, y;
-  int offset;
-
-  /* copy block from 2 frames ago using a motion vector */
-  CHECK_STREAM (len, 1);
-  B = *(*data)++;
-
-  if (B < 56) {
-    x = 8 + (B % 7);
-    y = B / 7;
-  } else {
-    x = -14 + ((B - 56) % 29);
-    y = 8 + ((B - 56) / 29);
-  }
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame, frame + offset, offset);
-}
-
-static int
-ipvideo_decode_0x3 (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  unsigned char B;
-  int x, y;
-  int offset;
-
-  /* copy 8x8 block from current frame from an up/left block */
-  CHECK_STREAM (len, 1);
-  B = *(*data)++;
-
-  if (B < 56) {
-    x = -(8 + (B % 7));
-    y = -(B / 7);
-  } else {
-    x = -(-14 + ((B - 56) % 29));
-    y = -(8 + ((B - 56) / 29));
-  }
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame, frame + offset, offset);
-}
-
-static int
-ipvideo_decode_0x4 (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char B;
-  int offset;
-
-  /* copy a block from the previous frame */
-  CHECK_STREAM (len, 1);
-  B = *(*data)++;
-  x = -8 + (B & 0x0F);
-  y = -8 + (B >> 4);
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame, frame +
-      ((unsigned short *) s->back_buf2 - (unsigned short *) s->back_buf1) +
-      offset, offset);
-}
-
-static int
-ipvideo_decode_0x5 (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  signed char x, y;
-  int offset;
-
-  /* copy a block from the previous frame using an expanded range */
-  CHECK_STREAM (len, 2);
-  x = (signed char) *(*data)++;
-  y = (signed char) *(*data)++;
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame, frame +
-      ((unsigned short *) s->back_buf2 - (unsigned short *) s->back_buf1) +
-      offset, offset);
-}
-
-static int
-ipvideo_decode_0x7 (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short P0, P1;
-  unsigned int flags;
-  int bitmask;
-
-  /* 2-color encoding */
-  CHECK_STREAM (len, 4 + 2);
-  P0 = PIXEL (*data);
-  (*data) += 2;
-  P1 = PIXEL (*data);
-  (*data) += 2;
-
-  if (!(P0 & 0x8000)) {
-
-    /* need 8 more bytes from the stream */
-    CHECK_STREAM (len, 8 - 2);
-
-    for (y = 0; y < 8; ++y) {
-      flags = *(*data)++;
-      for (x = 0x01; x <= 0x80; x <<= 1) {
-        if (flags & x)
-          *frame++ = P1;
-        else
-          *frame++ = P0;
-      }
-      frame += s->width - 8;
-    }
-
-  } else {
-    P0 &= ~0x8000;
-
-    /* need 2 more bytes from the stream */
-
-    flags = ((*data)[1] << 8) | (*data)[0];
-    (*data) += 2;
-    bitmask = 0x0001;
-    for (y = 0; y < 8; y += 2) {
-      for (x = 0; x < 8; x += 2, bitmask <<= 1) {
-        if (flags & bitmask) {
-          *(frame + x) = P1;
-          *(frame + x + 1) = P1;
-          *(frame + s->width + x) = P1;
-          *(frame + s->width + x + 1) = P1;
-        } else {
-          *(frame + x) = P0;
-          *(frame + x + 1) = P0;
-          *(frame + s->width + x) = P0;
-          *(frame + s->width + x + 1) = P0;
-        }
-      }
-      frame += s->width * 2;
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0x8 (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short P[8];
-  unsigned char B[8];
-  unsigned int flags = 0;
-  unsigned int bitmask = 0;
-  unsigned short P0 = 0, P1 = 0;
-  int lower_half = 0;
-
-  /* 2-color encoding for each 4x4 quadrant, or 2-color encoding on
-   * either top and bottom or left and right halves */
-  CHECK_STREAM (len, 6 + 10);
-
-  P[0] = PIXEL (*data);
-  (*data) += 2;
-  P[1] = PIXEL (*data);
-  (*data) += 2;
-  B[0] = *(*data)++;
-  B[1] = *(*data)++;
-
-  if (!(P[0] & 0x8000)) {
-
-    /* need 18 more bytes */
-    CHECK_STREAM (len, 18 - 10);
-
-    P[2] = PIXEL (*data);
-    (*data) += 2;
-    P[3] = PIXEL (*data);
-    (*data) += 2;
-    B[2] = *(*data)++;
-    B[3] = *(*data)++;
-    P[4] = PIXEL (*data);
-    (*data) += 2;
-    P[5] = PIXEL (*data);
-    (*data) += 2;
-    B[4] = *(*data)++;
-    B[5] = *(*data)++;
-    P[6] = PIXEL (*data);
-    (*data) += 2;
-    P[7] = PIXEL (*data);
-    (*data) += 2;
-    B[6] = *(*data)++;
-    B[7] = *(*data)++;
-
-    flags =
-        ((B[0] & 0xF0) << 4) | ((B[4] & 0xF0) << 8) |
-        ((B[0] & 0x0F)) | ((B[4] & 0x0F) << 4) |
-        ((B[1] & 0xF0) << 20) | ((B[5] & 0xF0) << 24) |
-        ((B[1] & 0x0F) << 16) | ((B[5] & 0x0F) << 20);
-    bitmask = 0x00000001;
-    lower_half = 0;             /* still on top half */
-
-    for (y = 0; y < 8; ++y) {
-
-      /* time to reload flags? */
-      if (y == 4) {
-        flags =
-            ((B[2] & 0xF0) << 4) | ((B[6] & 0xF0) << 8) |
-            ((B[2] & 0x0F)) | ((B[6] & 0x0F) << 4) |
-            ((B[3] & 0xF0) << 20) | ((B[7] & 0xF0) << 24) |
-            ((B[3] & 0x0F) << 16) | ((B[7] & 0x0F) << 20);
-        bitmask = 0x00000001;
-        lower_half = 2;
-      }
-
-      /* get the pixel values ready for this quadrant */
-      P0 = P[lower_half + 0];
-      P1 = P[lower_half + 1];
-
-      for (x = 0; x < 8; ++x, bitmask <<= 1) {
-        if (x == 4) {
-          P0 = P[lower_half + 4];
-          P1 = P[lower_half + 5];
-        }
-
-        if (flags & bitmask)
-          *frame++ = P1;
-        else
-          *frame++ = P0;
-      }
-      frame += s->width - 8;
-    }
-
-  } else {
-    P[0] &= ~0x8000;
-
-    /* need 10 more bytes */
-    B[2] = *(*data)++;
-    B[3] = *(*data)++;
-    P[2] = PIXEL (*data);
-    (*data) += 2;
-    P[3] = PIXEL (*data);
-    (*data) += 2;
-    B[4] = *(*data)++;
-    B[5] = *(*data)++;
-    B[6] = *(*data)++;
-    B[7] = *(*data)++;
-
-    if (!(P[2] & 0x8000)) {
-      /* vertical split; left & right halves are 2-color encoded */
-
-      flags =
-          ((B[0] & 0xF0) << 4) | ((B[4] & 0xF0) << 8) |
-          ((B[0] & 0x0F)) | ((B[4] & 0x0F) << 4) |
-          ((B[1] & 0xF0) << 20) | ((B[5] & 0xF0) << 24) |
-          ((B[1] & 0x0F) << 16) | ((B[5] & 0x0F) << 20);
-      bitmask = 0x00000001;
-
-      for (y = 0; y < 8; ++y) {
-
-        /* time to reload flags? */
-        if (y == 4) {
-          flags =
-              ((B[2] & 0xF0) << 4) | ((B[6] & 0xF0) << 8) |
-              ((B[2] & 0x0F)) | ((B[6] & 0x0F) << 4) |
-              ((B[3] & 0xF0) << 20) | ((B[7] & 0xF0) << 24) |
-              ((B[3] & 0x0F) << 16) | ((B[7] & 0x0F) << 20);
-          bitmask = 0x00000001;
-        }
-
-        /* get the pixel values ready for this half */
-        P0 = P[0];
-        P1 = P[1];
-
-        for (x = 0; x < 8; ++x, bitmask <<= 1) {
-          if (x == 4) {
-            P0 = P[2];
-            P1 = P[3];
-          }
-
-          if (flags & bitmask)
-            *frame++ = P1;
-          else
-            *frame++ = P0;
-        }
-        frame += s->width - 8;
-      }
-
-    } else {
-      /* horizontal split; top & bottom halves are 2-color encoded */
-
-      P0 = P[0];
-      P1 = P[1];
-
-      for (y = 0; y < 8; ++y) {
-
-        flags = B[y];
-        if (y == 4) {
-          P0 = P[2] & ~0x8000;
-          P1 = P[3];
-        }
-
-        for (bitmask = 0x01; bitmask <= 0x80; bitmask <<= 1) {
-
-          if (flags & bitmask)
-            *frame++ = P1;
-          else
-            *frame++ = P0;
-        }
-        frame += s->width - 8;
-      }
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0x9 (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short P[4];
-  unsigned char B[4];
-  unsigned int flags = 0;
-  int shifter = 0;
-  unsigned short pix;
-
-  /* 4-color encoding */
-  CHECK_STREAM (len, 8 + 4);
-
-  P[0] = PIXEL (*data);
-  (*data) += 2;
-  P[1] = PIXEL (*data);
-  (*data) += 2;
-  P[2] = PIXEL (*data);
-  (*data) += 2;
-  P[3] = PIXEL (*data);
-  (*data) += 2;
-
-  if (!(P[0] & 0x8000) && !(P[2] & 0x8000)) {
-
-    /* 1 of 4 colors for each pixel, need 16 more bytes */
-    CHECK_STREAM (len, 16 - 4);
-
-    for (y = 0; y < 8; ++y) {
-      /* get the next set of 8 2-bit flags */
-      flags = ((*data)[1] << 8) | (*data)[0];
-      (*data) += 2;
-      for (x = 0, shifter = 0; x < 8; ++x, shifter += 2) {
-        *frame++ = P[(flags >> shifter) & 0x03];
-      }
-      frame += s->width - 8;
-    }
-
-  } else if (!(P[0] & 0x8000) && (P[2] & 0x8000)) {
-    P[2] &= ~0x8000;
-
-    /* 1 of 4 colors for each 2x2 block, need 4 more bytes */
-
-    B[0] = *(*data)++;
-    B[1] = *(*data)++;
-    B[2] = *(*data)++;
-    B[3] = *(*data)++;
-    flags = (B[3] << 24) | (B[2] << 16) | (B[1] << 8) | B[0];
-    shifter = 0;
-
-    for (y = 0; y < 8; y += 2) {
-      for (x = 0; x < 8; x += 2, shifter += 2) {
-        pix = P[(flags >> shifter) & 0x03];
-        *(frame + x) = pix;
-        *(frame + x + 1) = pix;
-        *(frame + s->width + x) = pix;
-        *(frame + s->width + x + 1) = pix;
-      }
-      frame += s->width * 2;
-    }
-
-  } else if ((P[0] & 0x8000) && !(P[2] & 0x8000)) {
-    P[0] &= ~0x8000;
-
-    /* 1 of 4 colors for each 2x1 block, need 8 more bytes */
-
-    CHECK_STREAM (len, 8 - 4);
-    for (y = 0; y < 8; ++y) {
-      /* time to reload flags? */
-      if ((y == 0) || (y == 4)) {
-        B[0] = *(*data)++;
-        B[1] = *(*data)++;
-        B[2] = *(*data)++;
-        B[3] = *(*data)++;
-        flags = (B[3] << 24) | (B[2] << 16) | (B[1] << 8) | B[0];
-        shifter = 0;
-      }
-      for (x = 0; x < 8; x += 2, shifter += 2) {
-        pix = P[(flags >> shifter) & 0x03];
-        *(frame + x) = pix;
-        *(frame + x + 1) = pix;
-      }
-      frame += s->width;
-    }
-
-  } else {
-    P[0] &= ~0x8000;
-    P[2] &= ~0x8000;
-
-    /* 1 of 4 colors for each 1x2 block, need 8 more bytes */
-    CHECK_STREAM (len, 8 - 4);
-
-    for (y = 0; y < 8; y += 2) {
-      /* time to reload flags? */
-      if ((y == 0) || (y == 4)) {
-        B[0] = *(*data)++;
-        B[1] = *(*data)++;
-        B[2] = *(*data)++;
-        B[3] = *(*data)++;
-        flags = (B[3] << 24) | (B[2] << 16) | (B[1] << 8) | B[0];
-        shifter = 0;
-      }
-      for (x = 0; x < 8; ++x, shifter += 2) {
-        pix = P[(flags >> shifter) & 0x03];
-        *(frame + x) = pix;
-        *(frame + s->width + x) = pix;
-      }
-      frame += s->width * 2;
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xa (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short P[16];
-  unsigned char B[16];
-  int flags = 0;
-  int shifter = 0;
-  int index;
-  int split;
-  int lower_half;
-
-  /* 4-color encoding for each 4x4 quadrant, or 4-color encoding on
-   * either top and bottom or left and right halves */
-  CHECK_STREAM (len, 8 + 24);
-
-  P[0] = PIXEL (*data);
-  (*data) += 2;
-  P[1] = PIXEL (*data);
-  (*data) += 2;
-  P[2] = PIXEL (*data);
-  (*data) += 2;
-  P[3] = PIXEL (*data);
-  (*data) += 2;
-
-  if (!(P[0] & 0x8000)) {
-
-    /* 4-color encoding for each quadrant; need 40 more bytes */
-    CHECK_STREAM (len, 40 - 24);
-
-    B[0] = *(*data)++;
-    B[1] = *(*data)++;
-    B[2] = *(*data)++;
-    B[3] = *(*data)++;
-    for (y = 4; y < 16; y += 4) {
-      for (x = y; x < y + 4; ++x) {
-        P[x] = PIXEL (*data);
-        (*data) += 2;
-      }
-      for (x = y; x < y + 4; ++x)
-        B[x] = *(*data)++;
-    }
-
-    for (y = 0; y < 8; ++y) {
-
-      lower_half = (y >= 4) ? 4 : 0;
-      flags = (B[y + 8] << 8) | B[y];
-
-      for (x = 0, shifter = 0; x < 8; ++x, shifter += 2) {
-        split = (x >= 4) ? 8 : 0;
-        index = split + lower_half + ((flags >> shifter) & 0x03);
-        *frame++ = P[index];
-      }
-
-      frame += s->width - 8;
-    }
-
-  } else {
-    P[0] &= ~0x8000;
-
-    /* 4-color encoding for either left and right or top and bottom
-     * halves; need 24 more bytes */
-
-    memcpy (&B[0], *data, 8);
-    (*data) += 8;
-    P[4] = PIXEL (*data);
-    (*data) += 2;
-    P[5] = PIXEL (*data);
-    (*data) += 2;
-    P[6] = PIXEL (*data);
-    (*data) += 2;
-    P[7] = PIXEL (*data);
-    (*data) += 2;
-    memcpy (&B[8], *data, 8);
-    (*data) += 8;
-
-    if (!(P[4] & 0x8000)) {
-
-      /* block is divided into left and right halves */
-      for (y = 0; y < 8; ++y) {
-
-        flags = (B[y + 8] << 8) | B[y];
-        split = 0;
-
-        for (x = 0, shifter = 0; x < 8; ++x, shifter += 2) {
-          if (x == 4)
-            split = 4;
-          *frame++ = P[split + ((flags >> shifter) & 0x03)];
-        }
-
-        frame += s->width - 8;
-      }
-
-    } else {
-      P[4] &= ~0x8000;
-
-      /* block is divided into top and bottom halves */
-      split = 0;
-      for (y = 0; y < 8; ++y) {
-
-        flags = (B[y * 2 + 1] << 8) | B[y * 2];
-        if (y == 4)
-          split = 4;
-
-        for (x = 0, shifter = 0; x < 8; ++x, shifter += 2)
-          *frame++ = P[split + ((flags >> shifter) & 0x03)];
-
-        frame += s->width - 8;
-      }
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xb (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-
-  /* 64-color encoding (each pixel in block is a different color) */
-  CHECK_STREAM (len, 128);
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x) {
-      *frame++ = PIXEL (*data);
-      (*data) += 2;
-    }
-    frame += s->width - 8;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xc (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short pix;
-
-  /* 16-color block encoding: each 2x2 block is a different color */
-  CHECK_STREAM (len, 32);
-
-  for (y = 0; y < 8; y += 2) {
-    for (x = 0; x < 8; x += 2) {
-      pix = PIXEL (*data);
-      (*data) += 2;
-      *(frame + x) = pix;
-      *(frame + x + 1) = pix;
-      *(frame + s->width + x) = pix;
-      *(frame + s->width + x + 1) = pix;
-    }
-    frame += s->width * 2;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xd (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short P[4];
-  unsigned char index = 0;
-
-  /* 4-color block encoding: each 4x4 block is a different color */
-  CHECK_STREAM (len, 8);
-
-  P[0] = PIXEL (*data);
-  (*data) += 2;
-  P[1] = PIXEL (*data);
-  (*data) += 2;
-  P[2] = PIXEL (*data);
-  (*data) += 2;
-  P[3] = PIXEL (*data);
-  (*data) += 2;
-
-  for (y = 0; y < 8; ++y) {
-    if (y < 4)
-      index = 0;
-    else
-      index = 2;
-
-    for (x = 0; x < 8; ++x) {
-      if (x == 4)
-        ++index;
-      *frame++ = P[index];
-    }
-    frame += s->width - 8;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xe (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short pix;
-
-  /* 1-color encoding: the whole block is 1 solid color */
-  CHECK_STREAM (len, 2);
-
-  pix = PIXEL (*data);
-  (*data) += 2;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x) {
-      *frame++ = pix;
-    }
-    frame += s->width - 8;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xf (const GstMveDemuxStream * s, unsigned short *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned short P[2];
-
-  /* dithered encoding */
-  CHECK_STREAM (len, 4);
-
-  P[0] = PIXEL (*data);
-  (*data) += 2;
-  P[1] = PIXEL (*data);
-  (*data) += 2;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 4; ++x) {
-      *frame++ = P[y & 1];
-      *frame++ = P[(y & 1) ^ 1];
-    }
-    frame += s->width - 8;
-  }
-
-  return 0;
-}
-
-int
-ipvideo_decode_frame16 (const GstMveDemuxStream * s, const unsigned char *data,
-    unsigned short len)
-{
-  int rc = 0;
-  int x, y, xx, yy;
-  int index = 0;
-  unsigned short offset;
-  unsigned char opcode;
-  unsigned short *frame;
-  const unsigned char *data2;
-  unsigned short len2;
-
-  CHECK_STREAM (&len, 2);
-
-  offset = (data[1] << 8) | data[0];
-  data2 = data + offset;
-  len2 = len - offset + 2;
-  data += 2;
-
-  frame = (unsigned short *) s->back_buf1;
-
-  /* decoding is done in 8x8 blocks */
-  xx = s->width >> 3;
-  yy = s->height >> 3;
-
-  for (y = 0; y < yy; ++y) {
-    for (x = 0; x < xx; ++x) {
-      /* decoding map contains 4 bits of information per 8x8 block */
-      /* bottom nibble first, then top nibble */
-      if (index & 1)
-        opcode = s->code_map[index >> 1] >> 4;
-      else
-        opcode = s->code_map[index >> 1] & 0x0F;
-      ++index;
-
-      /* GST_DEBUG ("block @ (%3d, %3d): encoding 0x%X, data ptr @ %p",
-         x, y, opcode, data); */
-
-      switch (opcode) {
-        case 0x0:
-          /* copy a block from the previous frame */
-          rc = ipvideo_copy_block (s, frame, frame +
-              ((unsigned short *) s->back_buf2 -
-                  (unsigned short *) s->back_buf1), 0);
-          break;
-        case 0x1:
-          /* copy block from 2 frames ago; since we switched the back
-           * buffers we don't actually have to do anything here */
-          break;
-        case 0x2:
-          rc = ipvideo_decode_0x2 (s, frame, &data2, &len2);
-          break;
-        case 0x3:
-          rc = ipvideo_decode_0x3 (s, frame, &data2, &len2);
-          break;
-        case 0x4:
-          rc = ipvideo_decode_0x4 (s, frame, &data2, &len2);
-          break;
-        case 0x5:
-          rc = ipvideo_decode_0x5 (s, frame, &data, &len);
-          break;
-        case 0x6:
-          /* mystery opcode? skip multiple blocks? */
-          GST_WARNING ("encountered unsupported opcode 0x6");
-          rc = -1;
-          break;
-        case 0x7:
-          rc = ipvideo_decode_0x7 (s, frame, &data, &len);
-          break;
-        case 0x8:
-          rc = ipvideo_decode_0x8 (s, frame, &data, &len);
-          break;
-        case 0x9:
-          rc = ipvideo_decode_0x9 (s, frame, &data, &len);
-          break;
-        case 0xa:
-          rc = ipvideo_decode_0xa (s, frame, &data, &len);
-          break;
-        case 0xb:
-          rc = ipvideo_decode_0xb (s, frame, &data, &len);
-          break;
-        case 0xc:
-          rc = ipvideo_decode_0xc (s, frame, &data, &len);
-          break;
-        case 0xd:
-          rc = ipvideo_decode_0xd (s, frame, &data, &len);
-          break;
-        case 0xe:
-          rc = ipvideo_decode_0xe (s, frame, &data, &len);
-          break;
-        case 0xf:
-          rc = ipvideo_decode_0xf (s, frame, &data, &len);
-          break;
-      }
-
-      if (rc != 0)
-        return rc;
-
-      frame += 8;
-    }
-    frame += 7 * s->width;
-  }
-
-  return 0;
-}
diff --git a/gst/mve/mvevideodec8.c b/gst/mve/mvevideodec8.c
deleted file mode 100644 (file)
index 687cf61..0000000
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
- * Interplay MVE Video Decoder (8 bit)
- * Copyright (C) 2003 the ffmpeg project, Mike Melanson
- *           (C) 2006 Jens Granseuer
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * For more information about the Interplay MVE format, visit:
- *   http://www.pcisys.net/~melanson/codecs/interplay-mve.txt
- */
-
-#include "gstmvedemux.h"
-#include <string.h>
-
-#define CHECK_STREAM(l, n) \
-  do { \
-    if (G_UNLIKELY (*(l) < (n))) { \
-      GST_ERROR ("wanted to read %d bytes from stream, %d available", (n), *(l)); \
-      return -1; \
-    } \
-    *(l) -= (n); \
-  } while (0)
-
-
-/* copy an 8x8 block from the stream to the frame buffer */
-static int
-ipvideo_copy_block (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char *src, int offset)
-{
-  int i;
-  long frame_offset;
-
-  frame_offset = frame - s->back_buf1 + offset;
-
-  if (G_UNLIKELY (frame_offset < 0)) {
-    GST_ERROR ("frame offset < 0 (%ld)", frame_offset);
-    return -1;
-  } else if (G_UNLIKELY (frame_offset > s->max_block_offset)) {
-    GST_ERROR ("frame offset above limit (%ld > %u)",
-        frame_offset, s->max_block_offset);
-    return -1;
-  }
-
-  for (i = 0; i < 8; ++i) {
-    memcpy (frame, src, 8);
-    frame += s->width;
-    src += s->width;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0x2 (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  unsigned char B;
-  int x, y;
-  int offset;
-
-  /* copy block from 2 frames ago using a motion vector */
-  CHECK_STREAM (len, 1);
-  B = *(*data)++;
-
-  if (B < 56) {
-    x = 8 + (B % 7);
-    y = B / 7;
-  } else {
-    x = -14 + ((B - 56) % 29);
-    y = 8 + ((B - 56) / 29);
-  }
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame, frame + offset, offset);
-}
-
-static int
-ipvideo_decode_0x3 (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  unsigned char B;
-  int x, y;
-  int offset;
-
-  /* copy 8x8 block from current frame from an up/left block */
-  CHECK_STREAM (len, 1);
-  B = *(*data)++;
-
-  if (B < 56) {
-    x = -(8 + (B % 7));
-    y = -(B / 7);
-  } else {
-    x = -(-14 + ((B - 56) % 29));
-    y = -(8 + ((B - 56) / 29));
-  }
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame, frame + offset, offset);
-}
-
-static int
-ipvideo_decode_0x4 (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  unsigned char B;
-  int x, y;
-  int offset;
-
-  /* copy a block from the previous frame */
-  CHECK_STREAM (len, 1);
-  B = *(*data)++;
-  x = -8 + (B & 0x0F);
-  y = -8 + (B >> 4);
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame,
-      frame + (s->back_buf2 - s->back_buf1) + offset, offset);
-}
-
-static int
-ipvideo_decode_0x5 (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  signed char x, y;
-  int offset;
-
-  /* copy a block from the previous frame using an expanded range */
-  CHECK_STREAM (len, 2);
-
-  x = (signed char) *(*data)++;
-  y = (signed char) *(*data)++;
-  offset = y * s->width + x;
-
-  return ipvideo_copy_block (s, frame,
-      frame + (s->back_buf2 - s->back_buf1) + offset, offset);
-}
-
-static int
-ipvideo_decode_0x7 (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char P0, P1;
-  unsigned int flags;
-  int bitmask;
-
-  /* 2-color encoding */
-  CHECK_STREAM (len, 2 + 2);
-
-  P0 = *(*data)++;
-  P1 = *(*data)++;
-
-  if (P0 <= P1) {
-
-    /* need 8 more bytes from the stream */
-    CHECK_STREAM (len, 8 - 2);
-
-    for (y = 0; y < 8; ++y) {
-      flags = *(*data)++;
-      for (x = 0x01; x <= 0x80; x <<= 1) {
-        if (flags & x)
-          *frame++ = P1;
-        else
-          *frame++ = P0;
-      }
-      frame += s->width - 8;
-    }
-
-  } else {
-
-    /* need 2 more bytes from the stream */
-    flags = ((*data)[1] << 8) | (*data)[0];
-    (*data) += 2;
-    bitmask = 0x0001;
-    for (y = 0; y < 8; y += 2) {
-      for (x = 0; x < 8; x += 2, bitmask <<= 1) {
-        if (flags & bitmask) {
-          *(frame + x) = P1;
-          *(frame + x + 1) = P1;
-          *(frame + s->width + x) = P1;
-          *(frame + s->width + x + 1) = P1;
-        } else {
-          *(frame + x) = P0;
-          *(frame + x + 1) = P0;
-          *(frame + s->width + x) = P0;
-          *(frame + s->width + x + 1) = P0;
-        }
-      }
-      frame += s->width * 2;
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0x8 (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char P[8];
-  unsigned char B[8];
-  unsigned int flags = 0;
-  unsigned int bitmask = 0;
-  unsigned char P0 = 0, P1 = 0;
-  int lower_half = 0;
-
-  /* 2-color encoding for each 4x4 quadrant, or 2-color encoding on
-   * either top and bottom or left and right halves */
-  CHECK_STREAM (len, 4 + 8);
-
-  P[0] = (*data)[0];
-  P[1] = (*data)[1];
-  B[0] = (*data)[2];
-  B[1] = (*data)[3];
-  (*data) += 4;
-
-  if (P[0] <= P[1]) {
-
-    /* need 12 more bytes */
-    CHECK_STREAM (len, 12 - 8);
-
-    P[2] = (*data)[0];
-    P[3] = (*data)[1];
-    B[2] = (*data)[2];
-    B[3] = (*data)[3];
-    P[4] = (*data)[4];
-    P[5] = (*data)[5];
-    B[4] = (*data)[6];
-    B[5] = (*data)[7];
-    P[6] = (*data)[8];
-    P[7] = (*data)[9];
-    B[6] = (*data)[10];
-    B[7] = (*data)[11];
-    (*data) += 12;
-
-    flags =
-        ((B[0] & 0xF0) << 4) | ((B[4] & 0xF0) << 8) |
-        ((B[0] & 0x0F)) | ((B[4] & 0x0F) << 4) |
-        ((B[1] & 0xF0) << 20) | ((B[5] & 0xF0) << 24) |
-        ((B[1] & 0x0F) << 16) | ((B[5] & 0x0F) << 20);
-    bitmask = 0x00000001;
-    lower_half = 0;             /* still on top half */
-
-    for (y = 0; y < 8; ++y) {
-
-      /* time to reload flags? */
-      if (y == 4) {
-        flags =
-            ((B[2] & 0xF0) << 4) | ((B[6] & 0xF0) << 8) |
-            ((B[2] & 0x0F)) | ((B[6] & 0x0F) << 4) |
-            ((B[3] & 0xF0) << 20) | ((B[7] & 0xF0) << 24) |
-            ((B[3] & 0x0F) << 16) | ((B[7] & 0x0F) << 20);
-        bitmask = 0x00000001;
-        lower_half = 2;
-      }
-
-      /* get the pixel values ready for this quadrant */
-      P0 = P[lower_half + 0];
-      P1 = P[lower_half + 1];
-
-      for (x = 0; x < 8; ++x, bitmask <<= 1) {
-        if (x == 4) {
-          P0 = P[lower_half + 4];
-          P1 = P[lower_half + 5];
-        }
-
-        if (flags & bitmask)
-          *frame++ = P1;
-        else
-          *frame++ = P0;
-      }
-      frame += s->width - 8;
-    }
-
-  } else {
-
-    /* need 8 more bytes */
-    B[2] = (*data)[0];
-    B[3] = (*data)[1];
-    P[2] = (*data)[2];
-    P[3] = (*data)[3];
-    B[4] = (*data)[4];
-    B[5] = (*data)[5];
-    B[6] = (*data)[6];
-    B[7] = (*data)[7];
-    (*data) += 8;
-
-    if (P[2] <= P[3]) {
-
-      /* vertical split; left & right halves are 2-color encoded */
-
-      flags =
-          ((B[0] & 0xF0) << 4) | ((B[4] & 0xF0) << 8) |
-          ((B[0] & 0x0F)) | ((B[4] & 0x0F) << 4) |
-          ((B[1] & 0xF0) << 20) | ((B[5] & 0xF0) << 24) |
-          ((B[1] & 0x0F) << 16) | ((B[5] & 0x0F) << 20);
-      bitmask = 0x00000001;
-
-      for (y = 0; y < 8; ++y) {
-
-        /* time to reload flags? */
-        if (y == 4) {
-          flags =
-              ((B[2] & 0xF0) << 4) | ((B[6] & 0xF0) << 8) |
-              ((B[2] & 0x0F)) | ((B[6] & 0x0F) << 4) |
-              ((B[3] & 0xF0) << 20) | ((B[7] & 0xF0) << 24) |
-              ((B[3] & 0x0F) << 16) | ((B[7] & 0x0F) << 20);
-          bitmask = 0x00000001;
-        }
-
-        /* get the pixel values ready for this half */
-        P0 = P[0];
-        P1 = P[1];
-
-        for (x = 0; x < 8; ++x, bitmask <<= 1) {
-          if (x == 4) {
-            P0 = P[2];
-            P1 = P[3];
-          }
-
-          if (flags & bitmask)
-            *frame++ = P1;
-          else
-            *frame++ = P0;
-        }
-        frame += s->width - 8;
-      }
-
-    } else {
-
-      /* horizontal split; top & bottom halves are 2-color encoded */
-
-      P0 = P[0];
-      P1 = P[1];
-
-      for (y = 0; y < 8; ++y) {
-
-        flags = B[y];
-        if (y == 4) {
-          P0 = P[2];
-          P1 = P[3];
-        }
-
-        for (bitmask = 0x01; bitmask <= 0x80; bitmask <<= 1) {
-
-          if (flags & bitmask)
-            *frame++ = P1;
-          else
-            *frame++ = P0;
-        }
-        frame += s->width - 8;
-      }
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0x9 (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char P[4];
-  unsigned char B[4];
-  unsigned long flags = 0;
-  int shifter = 0;
-  unsigned char pix;
-
-  /* 4-color encoding */
-  CHECK_STREAM (len, 4 + 4);
-
-  P[0] = (*data)[0];
-  P[1] = (*data)[1];
-  P[2] = (*data)[2];
-  P[3] = (*data)[3];
-  (*data) += 4;
-
-  if ((P[0] <= P[1]) && (P[2] <= P[3])) {
-
-    /* 1 of 4 colors for each pixel, need 16 more bytes */
-    CHECK_STREAM (len, 16 - 4);
-
-    for (y = 0; y < 8; ++y) {
-      /* get the next set of 8 2-bit flags */
-      flags = ((*data)[1] << 8) | (*data)[0];
-      (*data) += 2;
-      for (x = 0, shifter = 0; x < 8; ++x, shifter += 2) {
-        *frame++ = P[(flags >> shifter) & 0x03];
-      }
-      frame += s->width - 8;
-    }
-
-  } else if ((P[0] <= P[1]) && (P[2] > P[3])) {
-
-    /* 1 of 4 colors for each 2x2 block, need 4 more bytes */
-    B[0] = (*data)[0];
-    B[1] = (*data)[1];
-    B[2] = (*data)[2];
-    B[3] = (*data)[3];
-    (*data) += 4;
-    flags = (B[3] << 24) | (B[2] << 16) | (B[1] << 8) | B[0];
-    shifter = 0;
-
-    for (y = 0; y < 8; y += 2) {
-      for (x = 0; x < 8; x += 2, shifter += 2) {
-        pix = P[(flags >> shifter) & 0x03];
-        *(frame + x) = pix;
-        *(frame + x + 1) = pix;
-        *(frame + s->width + x) = pix;
-        *(frame + s->width + x + 1) = pix;
-      }
-      frame += s->width * 2;
-    }
-
-  } else if ((P[0] > P[1]) && (P[2] <= P[3])) {
-
-    /* 1 of 4 colors for each 2x1 block, need 8 more bytes */
-    CHECK_STREAM (len, 8 - 4);
-
-    for (y = 0; y < 8; ++y) {
-      /* time to reload flags? */
-      if ((y == 0) || (y == 4)) {
-        B[0] = (*data)[0];
-        B[1] = (*data)[1];
-        B[2] = (*data)[2];
-        B[3] = (*data)[3];
-        (*data) += 4;
-        flags = (B[3] << 24) | (B[2] << 16) | (B[1] << 8) | B[0];
-        shifter = 0;
-      }
-      for (x = 0; x < 8; x += 2, shifter += 2) {
-        pix = P[(flags >> shifter) & 0x03];
-        *(frame + x) = pix;
-        *(frame + x + 1) = pix;
-      }
-      frame += s->width;
-    }
-
-  } else {
-
-    /* 1 of 4 colors for each 1x2 block, need 8 more bytes */
-    CHECK_STREAM (len, 8 - 4);
-
-    for (y = 0; y < 8; y += 2) {
-      /* time to reload flags? */
-      if ((y == 0) || (y == 4)) {
-        B[0] = (*data)[0];
-        B[1] = (*data)[1];
-        B[2] = (*data)[2];
-        B[3] = (*data)[3];
-        (*data) += 4;
-        flags = (B[3] << 24) | (B[2] << 16) | (B[1] << 8) | B[0];
-        shifter = 0;
-      }
-      for (x = 0; x < 8; ++x, shifter += 2) {
-        pix = P[(flags >> shifter) & 0x03];
-        *(frame + x) = pix;
-        *(frame + s->width + x) = pix;
-      }
-      frame += s->width * 2;
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xa (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char P[16];
-  unsigned char B[16];
-  int flags = 0;
-  int shifter = 0;
-  int index;
-  int split;
-  int lower_half;
-
-  /* 4-color encoding for each 4x4 quadrant, or 4-color encoding on
-   * either top and bottom or left and right halves */
-  CHECK_STREAM (len, 8 + 16);
-
-  P[0] = (*data)[0];
-  P[1] = (*data)[1];
-  P[2] = (*data)[2];
-  P[3] = (*data)[3];
-  B[0] = (*data)[4];
-  B[1] = (*data)[5];
-  B[2] = (*data)[6];
-  B[3] = (*data)[7];
-  (*data) += 8;
-
-  if (P[0] <= P[1]) {
-
-    /* 4-color encoding for each quadrant; need 24 more bytes */
-    CHECK_STREAM (len, 24 - 16);
-
-    for (y = 4; y < 16; y += 4) {
-      for (x = y; x < y + 4; ++x)
-        P[x] = *(*data)++;
-      for (x = y; x < y + 4; ++x)
-        B[x] = *(*data)++;
-    }
-
-    for (y = 0; y < 8; ++y) {
-
-      lower_half = (y >= 4) ? 4 : 0;
-      flags = (B[y + 8] << 8) | B[y];
-
-      for (x = 0, shifter = 0; x < 8; ++x, shifter += 2) {
-        split = (x >= 4) ? 8 : 0;
-        index = split + lower_half + ((flags >> shifter) & 0x03);
-        *frame++ = P[index];
-      }
-
-      frame += s->width - 8;
-    }
-
-  } else {
-
-    /* 4-color encoding for either left and right or top and bottom
-     * halves; need 16 more bytes */
-
-    B[4] = (*data)[0];
-    B[5] = (*data)[1];
-    B[6] = (*data)[2];
-    B[7] = (*data)[3];
-    P[4] = (*data)[4];
-    P[5] = (*data)[5];
-    P[6] = (*data)[6];
-    P[7] = (*data)[7];
-    (*data) += 8;
-    memcpy (&B[8], *data, 8);
-    (*data) += 8;
-
-    if (P[4] <= P[5]) {
-
-      /* block is divided into left and right halves */
-      for (y = 0; y < 8; ++y) {
-
-        flags = (B[y + 8] << 8) | B[y];
-        split = 0;
-
-        for (x = 0, shifter = 0; x < 8; ++x, shifter += 2) {
-          if (x == 4)
-            split = 4;
-          *frame++ = P[split + ((flags >> shifter) & 0x03)];
-        }
-
-        frame += s->width - 8;
-      }
-
-    } else {
-
-      /* block is divided into top and bottom halves */
-      split = 0;
-      for (y = 0; y < 8; ++y) {
-
-        flags = (B[y * 2 + 1] << 8) | B[y * 2];
-        if (y == 4)
-          split = 4;
-
-        for (x = 0, shifter = 0; x < 8; ++x, shifter += 2)
-          *frame++ = P[split + ((flags >> shifter) & 0x03)];
-
-        frame += s->width - 8;
-      }
-    }
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xb (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int y;
-
-  /* 64-color encoding (each pixel in block is a different color) */
-  CHECK_STREAM (len, 64);
-
-  for (y = 0; y < 8; ++y) {
-    memcpy (frame, *data, 8);
-    frame += s->width;
-    (*data) += 8;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xc (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char pix;
-
-  /* 16-color block encoding: each 2x2 block is a different color */
-  CHECK_STREAM (len, 16);
-
-  for (y = 0; y < 8; y += 2) {
-    for (x = 0; x < 8; x += 2) {
-      pix = *(*data)++;
-      *(frame + x) = pix;
-      *(frame + x + 1) = pix;
-      *(frame + s->width + x) = pix;
-      *(frame + s->width + x + 1) = pix;
-    }
-    frame += s->width * 2;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xd (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char P[4];
-  unsigned char index = 0;
-
-  /* 4-color block encoding: each 4x4 block is a different color */
-  CHECK_STREAM (len, 4);
-
-  P[0] = (*data)[0];
-  P[1] = (*data)[1];
-  P[2] = (*data)[2];
-  P[3] = (*data)[3];
-  (*data) += 4;
-
-  for (y = 0; y < 8; ++y) {
-    if (y < 4)
-      index = 0;
-    else
-      index = 2;
-
-    for (x = 0; x < 8; ++x) {
-      if (x == 4)
-        ++index;
-      *frame++ = P[index];
-    }
-    frame += s->width - 8;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xe (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int y;
-  unsigned char pix;
-
-  /* 1-color encoding: the whole block is 1 solid color */
-  CHECK_STREAM (len, 1);
-  pix = *(*data)++;
-
-  for (y = 0; y < 8; ++y) {
-    memset (frame, pix, 8);
-    frame += s->width;
-  }
-
-  return 0;
-}
-
-static int
-ipvideo_decode_0xf (const GstMveDemuxStream * s, unsigned char *frame,
-    const unsigned char **data, unsigned short *len)
-{
-  int x, y;
-  unsigned char P[2];
-
-  /* dithered encoding */
-  CHECK_STREAM (len, 2);
-
-  P[0] = *(*data)++;
-  P[1] = *(*data)++;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 4; ++x) {
-      *frame++ = P[y & 1];
-      *frame++ = P[(y & 1) ^ 1];
-    }
-    frame += s->width - 8;
-  }
-
-  return 0;
-}
-
-int
-ipvideo_decode_frame8 (const GstMveDemuxStream * s, const unsigned char *data,
-    unsigned short len)
-{
-  int rc = 0;
-  int x, y, xx, yy;
-  int index = 0;
-  unsigned char opcode;
-  unsigned char *frame;
-
-  frame = s->back_buf1;
-
-  /* decoding is done in 8x8 blocks */
-  xx = s->width >> 3;
-  yy = s->height >> 3;
-
-  for (y = 0; y < yy; ++y) {
-    for (x = 0; x < xx; ++x) {
-      /* decoding map contains 4 bits of information per 8x8 block */
-      /* bottom nibble first, then top nibble */
-      if (index & 1)
-        opcode = s->code_map[index >> 1] >> 4;
-      else
-        opcode = s->code_map[index >> 1] & 0x0F;
-      ++index;
-
-      /* GST_DEBUG ("block @ (%3d, %3d): encoding 0x%X, data ptr @ %p",
-         x, y, opcode, data); */
-
-      switch (opcode) {
-        case 0x00:
-          /* copy a block from the previous frame */
-          rc = ipvideo_copy_block (s, frame,
-              frame + (s->back_buf2 - s->back_buf1), 0);
-          break;
-        case 0x01:
-          /* copy block from 2 frames ago; since we switched the back
-           * buffers we don't actually have to do anything here */
-          break;
-        case 0x02:
-          rc = ipvideo_decode_0x2 (s, frame, &data, &len);
-          break;
-        case 0x03:
-          rc = ipvideo_decode_0x3 (s, frame, &data, &len);
-          break;
-        case 0x04:
-          rc = ipvideo_decode_0x4 (s, frame, &data, &len);
-          break;
-        case 0x05:
-          rc = ipvideo_decode_0x5 (s, frame, &data, &len);
-          break;
-        case 0x06:
-          /* mystery opcode? skip multiple blocks? */
-          GST_WARNING ("encountered unsupported opcode 0x6");
-          rc = -1;
-          break;
-        case 0x07:
-          rc = ipvideo_decode_0x7 (s, frame, &data, &len);
-          break;
-        case 0x08:
-          rc = ipvideo_decode_0x8 (s, frame, &data, &len);
-          break;
-        case 0x09:
-          rc = ipvideo_decode_0x9 (s, frame, &data, &len);
-          break;
-        case 0x0a:
-          rc = ipvideo_decode_0xa (s, frame, &data, &len);
-          break;
-        case 0x0b:
-          rc = ipvideo_decode_0xb (s, frame, &data, &len);
-          break;
-        case 0x0c:
-          rc = ipvideo_decode_0xc (s, frame, &data, &len);
-          break;
-        case 0x0d:
-          rc = ipvideo_decode_0xd (s, frame, &data, &len);
-          break;
-        case 0x0e:
-          rc = ipvideo_decode_0xe (s, frame, &data, &len);
-          break;
-        case 0x0f:
-          rc = ipvideo_decode_0xf (s, frame, &data, &len);
-          break;
-      }
-
-      if (rc != 0)
-        return rc;
-
-      frame += 8;
-    }
-    frame += 7 * s->width;
-  }
-
-  return 0;
-}
diff --git a/gst/mve/mvevideoenc16.c b/gst/mve/mvevideoenc16.c
deleted file mode 100644 (file)
index 6afb339..0000000
+++ /dev/null
@@ -1,1652 +0,0 @@
-/*
- * Interplay MVE video encoder (16 bit)
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "gstmvemux.h"
-
-typedef struct _GstMveEncoderData GstMveEncoderData;
-typedef struct _GstMveEncoding GstMveEncoding;
-typedef struct _GstMveApprox GstMveApprox;
-typedef struct _GstMveQuant GstMveQuant;
-
-#define MVE_RMASK   0x7c00
-#define MVE_GMASK   0x03e0
-#define MVE_BMASK   0x001f
-#define MVE_RSHIFT  10
-#define MVE_GSHIFT  5
-#define MVE_BSHIFT  0
-
-#define MVE_RVAL(p)     (((p) & MVE_RMASK) >> MVE_RSHIFT)
-#define MVE_GVAL(p)     (((p) & MVE_GMASK) >> MVE_GSHIFT)
-#define MVE_BVAL(p)     (((p) & MVE_BMASK) >> MVE_BSHIFT)
-#define MVE_COL(r,g,b)  (((r) << MVE_RSHIFT) | ((g) << MVE_GSHIFT) | ((b) << MVE_BSHIFT))
-
-struct _GstMveEncoderData
-{
-  GstMveMux *mve;
-  /* current position in frame */
-  guint16 x, y;
-
-  /* commonly used quantization results
-     (2 and 4 colors) for the current block */
-  guint16 q2block[64];
-  guint16 q2colors[2];
-  guint32 q2error;
-  gboolean q2available;
-
-  guint16 q4block[64];
-  guint16 q4colors[4];
-  guint32 q4error;
-  gboolean q4available;
-};
-
-struct _GstMveEncoding
-{
-  guint8 opcode;
-  guint8 size;
-    guint32 (*approx) (GstMveEncoderData * enc, const guint16 * src,
-      GstMveApprox * res);
-};
-
-#define MVE_APPROX_MAX_ERROR  G_MAXUINT32
-
-struct _GstMveApprox
-{
-  guint32 error;
-  guint8 type;
-  guint8 data[128];             /* max 128 bytes encoded per block */
-  guint16 block[64];            /* block in final image */
-};
-
-struct _GstMveQuant
-{
-  guint16 col;
-  guint16 r_total, g_total, b_total;
-  guint8 r, g, b;
-  guint8 hits, hits_last;
-  guint32 max_error;
-  guint16 max_miss;
-};
-
-#define mve_median(mve, src) mve_median_sub ((mve), (src), 8, 8, 0)
-#define mve_color_dist(c1, c2) \
-        mve_color_dist_rgb (MVE_RVAL (c1), MVE_GVAL (c1), MVE_BVAL (c1), \
-                            MVE_RVAL (c2), MVE_GVAL (c2), MVE_BVAL (c2));
-
-/* comparison function for qsort() */
-static int
-mve_comp_solution (const void *a, const void *b)
-{
-  const GArray *aa = *((GArray **) a);
-  const GArray *bb = *((GArray **) b);
-
-  if (aa->len <= 1)
-    return G_MAXINT;
-  else if (bb->len <= 1)
-    return G_MININT;
-  else
-    return g_array_index (aa, GstMveApprox, aa->len - 2).error -
-        g_array_index (bb, GstMveApprox, bb->len - 2).error;
-}
-
-static inline guint32
-mve_color_dist_rgb (guint8 r1, guint8 g1, guint8 b1,
-    guint8 r2, guint8 g2, guint8 b2)
-{
-  /* euclidean distance (minus sqrt) */
-  gint dr = r1 - r2;
-  gint dg = g1 - g2;
-  gint db = b1 - b2;
-
-  return dr * dr + dg * dg + db * db;
-}
-
-/* compute average color in a sub-block */
-static guint16
-mve_median_sub (const GstMveMux * mve, const guint16 * src, guint w, guint h,
-    guint n)
-{
-  guint x, y;
-  const guint max = w * h, max2 = max >> 1;
-  guint32 r_total = max2, g_total = max2, b_total = max2;
-
-  src += ((n * w) % 8) + (((n * (8 - h)) / (12 - w)) * h * mve->width);
-
-  for (y = 0; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      r_total += MVE_RVAL (src[x]);
-      g_total += MVE_GVAL (src[x]);
-      b_total += MVE_BVAL (src[x]);
-    }
-    src += mve->width;
-  }
-
-  return MVE_COL (r_total / max, g_total / max, b_total / max);
-}
-
-static void
-mve_quant_init (const GstMveMux * mve, GstMveQuant * q, guint n_clusters,
-    const guint16 * data, guint w, guint h)
-{
-  guint i;
-  guint x, y;
-  guint16 cols[4];
-  guint16 val[2];
-
-  /* init first cluster with lowest (darkest), second with highest (lightest)
-     color. if we need 4 clusters, fill in first and last color in the block
-     and hope they make for a good distribution */
-  cols[0] = cols[1] = cols[2] = data[0];
-  cols[3] = data[(h - 1) * mve->width + w - 1];
-
-  /* favour red over green and blue */
-  val[0] = val[1] =
-      (MVE_RVAL (data[0]) << 1) + MVE_GVAL (data[0]) + MVE_BVAL (data[0]);
-
-  for (y = 0; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      guint16 c = data[x];
-
-      if ((c != cols[0]) && (c != cols[1])) {
-        guint v = (MVE_RVAL (c) << 1) + MVE_GVAL (c) + MVE_BVAL (c);
-
-        if (v < val[0]) {
-          val[0] = v;
-          cols[0] = c;
-        } else if (v > val[1]) {
-          val[1] = v;
-          cols[1] = c;
-        }
-      }
-    }
-    data += mve->width;
-  }
-
-  for (i = 0; i < n_clusters; ++i) {
-    q[i].col = cols[i];
-    q[i].r = MVE_RVAL (cols[i]);
-    q[i].g = MVE_GVAL (cols[i]);
-    q[i].b = MVE_BVAL (cols[i]);
-    q[i].r_total = q[i].g_total = q[i].b_total = 0;
-    q[i].hits = q[i].hits_last = 0;
-    q[i].max_error = 0;
-    q[i].max_miss = 0;
-  }
-}
-
-static gboolean
-mve_quant_update_clusters (GstMveQuant * q, guint n_clusters)
-{
-  gboolean changed = FALSE;
-  guint i;
-
-  for (i = 0; i < n_clusters; ++i) {
-    if (q[i].hits > 0) {
-      guint16 means = MVE_COL ((q[i].r_total + q[i].hits / 2) / q[i].hits,
-          (q[i].g_total + q[i].hits / 2) / q[i].hits,
-          (q[i].b_total + q[i].hits / 2) / q[i].hits);
-
-      if ((means != q[i].col) || (q[i].hits != q[i].hits_last))
-        changed = TRUE;
-
-      q[i].col = means;
-      q[i].r_total = q[i].g_total = q[i].b_total = 0;
-    } else {
-      guint j;
-      guint32 max_err = 0;
-      GstMveQuant *worst = NULL;
-
-      /* try to replace unused cluster with a better representative */
-      for (j = 0; j < n_clusters; ++j) {
-        if (q[j].max_error > max_err) {
-          worst = &q[j];
-          max_err = worst->max_error;
-        }
-      }
-      if (worst) {
-        q[i].col = worst->max_miss;
-        worst->max_error = 0;
-        changed = TRUE;
-      }
-    }
-
-    q[i].r = MVE_RVAL (q[i].col);
-    q[i].g = MVE_GVAL (q[i].col);
-    q[i].b = MVE_BVAL (q[i].col);
-    q[i].hits_last = q[i].hits;
-    q[i].hits = 0;
-  }
-  for (i = 0; i < n_clusters; ++i) {
-    q[i].max_error = 0;
-  }
-
-  return changed;
-}
-
-/* quantize a sub-block using a k-means algorithm */
-static guint32
-mve_quantize (const GstMveMux * mve, const guint16 * src,
-    guint w, guint h, guint n, guint ncols, guint16 * scratch, guint16 * cols)
-{
-  guint x, y, i;
-  GstMveQuant q[4];
-  const guint16 *data;
-  guint16 *dest;
-  guint32 error;
-
-  g_assert (n <= 4 && ncols <= 4);
-
-  src += ((n * w) % 8) + (((n * (8 - h)) / (12 - w)) * h * mve->width);
-  scratch += ((n * w) % 8) + (((n * (8 - h)) / (12 - w)) * h * 8);
-
-  mve_quant_init (mve, q, ncols, src, w, h);
-
-  do {
-    data = src;
-    dest = scratch;
-    error = 0;
-
-    /* for each pixel find the closest cluster */
-    for (y = 0; y < h; ++y) {
-      for (x = 0; x < w; ++x) {
-        guint16 c = data[x];
-        guint8 r = MVE_RVAL (c), g = MVE_GVAL (c), b = MVE_BVAL (c);
-        guint32 minerr = MVE_APPROX_MAX_ERROR, err;
-        GstMveQuant *best = NULL;
-
-        for (i = 0; i < ncols; ++i) {
-          err = mve_color_dist_rgb (r, g, b, q[i].r, q[i].g, q[i].b);
-
-          if (err < minerr) {
-            minerr = err;
-            best = &q[i];
-          }
-        }
-
-        if (G_UNLIKELY (!best))
-          continue;
-
-        ++best->hits;
-        best->r_total += r;
-        best->g_total += g;
-        best->b_total += b;
-
-        if (minerr > best->max_error) {
-          best->max_error = minerr;
-          best->max_miss = c;
-        }
-
-        error += minerr;
-        dest[x] = best->col;
-      }
-      data += mve->width;
-      dest += 8;
-    }
-  } while (mve_quant_update_clusters (q, ncols));
-
-  /* fill cols array with result colors */
-  for (i = 0; i < ncols; ++i)
-    cols[i] = q[i].col;
-
-  return error;
-}
-
-static guint32
-mve_block_error (const GstMveMux * mve, const guint16 * b1, const guint16 * b2,
-    guint32 threshold)
-{
-  /* compute error between two blocks in a frame */
-  guint32 e = 0;
-  guint x, y;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x) {
-      e += mve_color_dist (*b1, *b2);
-
-      /* using a threshold to return early gives a huge performance bonus */
-      if (e >= threshold)
-        return MVE_APPROX_MAX_ERROR;
-      ++b1;
-      ++b2;
-    }
-
-    b1 += mve->width - 8;
-    b2 += mve->width - 8;
-  }
-
-  return e;
-}
-
-static guint32
-mve_block_error_packed (const GstMveMux * mve, const guint16 * block,
-    const guint16 * scratch)
-{
-  /* compute error between a block in a frame and a (continuous) scratch pad */
-  guint32 e = 0;
-  guint x, y;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x) {
-      e += mve_color_dist (block[x], scratch[x]);
-    }
-    block += mve->width;
-    scratch += 8;
-  }
-
-  return e;
-}
-
-static void
-mve_store_block (const GstMveMux * mve, const guint16 * block,
-    guint16 * scratch)
-{
-  /* copy block from frame to a (continuous) scratch pad */
-  guint y;
-
-  for (y = 0; y < 8; ++y) {
-    memcpy (scratch, block, 16);
-    block += mve->width;
-    scratch += 8;
-  }
-}
-
-static void
-mve_restore_block (const GstMveMux * mve, guint16 * block,
-    const guint16 * scratch)
-{
-  /* copy block from scratch pad to frame */
-  guint y;
-
-  for (y = 0; y < 8; ++y) {
-    memcpy (block, scratch, 16);
-    block += mve->width;
-    scratch += 8;
-  }
-}
-
-
-static guint32
-mve_try_vector (GstMveEncoderData * enc, const guint16 * src,
-    const guint16 * frame, gint pn, GstMveApprox * apx)
-{
-  /* try to locate a similar 8x8 block in the given frame using a motion vector */
-  guint i;
-  gint dx, dy;
-  gint fx, fy;
-  guint32 err;
-
-  apx->error = MVE_APPROX_MAX_ERROR;
-
-  for (i = 0; i < 256; ++i) {
-    if (i < 56) {
-      dx = 8 + (i % 7);
-      dy = i / 7;
-    } else {
-      dx = -14 + ((i - 56) % 29);
-      dy = 8 + ((i - 56) / 29);
-    }
-
-    fx = enc->x + dx * pn;
-    fy = enc->y + dy * pn;
-
-    if ((fx >= 0) && (fy >= 0) && (fx + 8 <= enc->mve->width)
-        && (fy + 8 <= enc->mve->height)) {
-      err =
-          mve_block_error (enc->mve, src, frame + fy * enc->mve->width + fx,
-          apx->error);
-      if (err < apx->error) {
-        apx->data[0] = i;
-        mve_store_block (enc->mve, frame + fy * enc->mve->width + fx,
-            apx->block);
-        apx->error = err;
-        if (err == 0)
-          return 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x0 (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* copy a block from the last frame (0 bytes) */
-  if (enc->mve->last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  mve_store_block (enc->mve,
-      ((guint16 *) GST_BUFFER_DATA (enc->mve->last_frame)) +
-      enc->y * enc->mve->width + enc->x, apx->block);
-  apx->error = mve_block_error_packed (enc->mve, src, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x1 (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* copy a block from the second to last frame (0 bytes) */
-  if (enc->mve->second_last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  mve_store_block (enc->mve,
-      ((guint16 *) GST_BUFFER_DATA (enc->mve->second_last_frame)) +
-      enc->y * enc->mve->width + enc->x, apx->block);
-  apx->error = mve_block_error_packed (enc->mve, src, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x2 (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* copy block from 2 frames ago using a motion vector (1 byte) */
-  if (enc->mve->quick_encoding || enc->mve->second_last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  apx->error = mve_try_vector (enc, src,
-      (guint16 *) GST_BUFFER_DATA (enc->mve->second_last_frame), 1, apx);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x3 (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* copy 8x8 block from current frame from an up/left block (1 byte) */
-  if (enc->mve->quick_encoding)
-    return MVE_APPROX_MAX_ERROR;
-
-  apx->error = mve_try_vector (enc, src,
-      src - enc->mve->width * enc->y - enc->x, -1, apx);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x4 (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* copy a block from previous frame using a motion vector (-8/-8 to +7/+7) (1 byte) */
-  const GstMveMux *mve = enc->mve;
-  guint32 err;
-  const guint16 *frame;
-  gint x1, x2, xi, y1, y2, yi;
-
-  if (mve->last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  frame = (guint16 *) GST_BUFFER_DATA (mve->last_frame);
-
-  x1 = enc->x - 8;
-  x2 = enc->x + 7;
-  if (x1 < 0)
-    x1 = 0;
-  else if (x2 + 8 > mve->width)
-    x2 = mve->width - 8;
-
-  y1 = enc->y - 8;
-  y2 = enc->y + 7;
-  if (y1 < 0)
-    y1 = 0;
-  else if (y2 + 8 > mve->height)
-    y2 = mve->height - 8;
-
-  apx->error = MVE_APPROX_MAX_ERROR;
-
-  for (yi = y1; yi <= y2; ++yi) {
-    guint yoff = yi * mve->width;
-
-    for (xi = x1; xi <= x2; ++xi) {
-      err = mve_block_error (mve, src, frame + yoff + xi, apx->error);
-      if (err < apx->error) {
-        apx->data[0] = ((xi - enc->x + 8) & 0xF) | ((yi - enc->y + 8) << 4);
-        mve_store_block (mve, frame + yoff + xi, apx->block);
-        apx->error = err;
-        if (err == 0)
-          return 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x5 (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* copy a block from previous frame using a motion vector
-     (-128/-128 to +127/+127) (2 bytes) */
-  const GstMveMux *mve = enc->mve;
-  guint32 err;
-  const guint16 *frame;
-  gint x1, x2, xi, y1, y2, yi;
-
-  if (mve->quick_encoding || mve->last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  frame = (guint16 *) GST_BUFFER_DATA (mve->last_frame);
-
-  x1 = enc->x - 128;
-  x2 = enc->x + 127;
-  if (x1 < 0)
-    x1 = 0;
-  if (x2 + 8 > mve->width)
-    x2 = mve->width - 8;
-
-  y1 = enc->y - 128;
-  y2 = enc->y + 127;
-  if (y1 < 0)
-    y1 = 0;
-  if (y2 + 8 > mve->height)
-    y2 = mve->height - 8;
-
-  apx->error = MVE_APPROX_MAX_ERROR;
-
-  for (yi = y1; yi <= y2; ++yi) {
-    gint yoff = yi * mve->width;
-
-    for (xi = x1; xi <= x2; ++xi) {
-      err = mve_block_error (mve, src, frame + yoff + xi, apx->error);
-      if (err < apx->error) {
-        apx->data[0] = xi - enc->x;
-        apx->data[1] = yi - enc->y;
-        mve_store_block (mve, frame + yoff + xi, apx->block);
-        apx->error = err;
-        if (err == 0)
-          return 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x7a (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for 2x2 solid blocks (6 bytes) */
-  guint16 p[2];
-  guint16 mean;
-  guint32 e1, e2;
-  guint x, y;
-  guint8 r[2], g[2], b[2], rb, gb, bb;
-  guint16 *block = apx->block;
-  guint16 mask = 0x0001;
-  guint16 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q2available) {
-    enc->q2error =
-        mve_quantize (enc->mve, src, 8, 8, 0, 2, enc->q2block, enc->q2colors);
-    enc->q2available = TRUE;
-  }
-
-  /* p[0] & 0x8000 */
-  GST_WRITE_UINT16_LE (&apx->data[0], enc->q2colors[0] | 0x8000);
-  GST_WRITE_UINT16_LE (&apx->data[2], enc->q2colors[1]);
-
-  for (x = 0; x < 2; ++x) {
-    r[x] = MVE_RVAL (enc->q2colors[x]);
-    g[x] = MVE_GVAL (enc->q2colors[x]);
-    b[x] = MVE_BVAL (enc->q2colors[x]);
-  }
-
-  /* calculate mean colors for each 2x2 block and map to global colors */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x, mask <<= 1) {
-      p[0] = src[enc->mve->width];
-      p[1] = src[enc->mve->width + 1];
-
-      rb = (MVE_RVAL (src[0]) + MVE_RVAL (src[1]) + MVE_RVAL (p[0]) +
-          MVE_RVAL (p[1]) + 2) / 4;
-      gb = (MVE_GVAL (src[0]) + MVE_GVAL (src[1]) + MVE_GVAL (p[0]) +
-          MVE_GVAL (p[1]) + 2) / 4;
-      bb = (MVE_BVAL (src[0]) + MVE_BVAL (src[1]) + MVE_BVAL (p[0]) +
-          MVE_BVAL (p[1]) + 2) / 4;
-
-      e1 = mve_color_dist_rgb (rb, gb, bb, r[0], g[0], b[0]);
-      e2 = mve_color_dist_rgb (rb, gb, bb, r[1], g[1], b[1]);
-
-      if (e1 > e2) {
-        mean = enc->q2colors[1];
-        flags |= mask;
-      } else {
-        mean = enc->q2colors[0];
-      }
-
-      block[0] = block[1] = block[8] = block[9] = mean;
-
-      src += 2;
-      block += 2;
-    }
-    src += (enc->mve->width * 2) - 8;
-    block += 8;
-  }
-
-  apx->data[4] = flags & 0x00FF;
-  apx->data[5] = (flags & 0xFF00) >> 8;
-
-  apx->error =
-      mve_block_error_packed (enc->mve, src - enc->mve->width * 8, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x7b (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* generic 2-color encoding (12 bytes) */
-  guint x, y;
-  guint8 *data = apx->data;
-  guint16 *block = apx->block;
-
-  if (!enc->q2available) {
-    enc->q2error =
-        mve_quantize (enc->mve, src, 8, 8, 0, 2, enc->q2block, enc->q2colors);
-    enc->q2available = TRUE;
-  }
-
-  memcpy (block, enc->q2block, 128);
-
-  /* !(p[0] & 0x8000) */
-  GST_WRITE_UINT16_LE (&data[0], enc->q2colors[0] & ~0x8000);
-  GST_WRITE_UINT16_LE (&data[2], enc->q2colors[1]);
-  data += 4;
-
-  for (y = 0; y < 8; ++y) {
-    guint8 flags = 0;
-
-    for (x = 0x01; x <= 0x80; x <<= 1) {
-      if (*block == enc->q2colors[1])
-        flags |= x;
-      ++block;
-    }
-    *data++ = flags;
-  }
-
-  apx->error = enc->q2error;
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x8a (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for top and bottom half (16 bytes) */
-  guint16 cols[2];
-  guint32 flags;
-  guint i, x, y, shifter;
-  guint16 *block = apx->block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc->mve, src, 8, 4, i, 2, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 & 0x8000 && p2 & 0x8000 */
-    GST_WRITE_UINT16_LE (&data[0], cols[0] | 0x8000);
-    GST_WRITE_UINT16_LE (&data[2], cols[1]);
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 8; ++x, ++shifter) {
-        if (block[x] == cols[1])
-          flags |= 1 << shifter;
-      }
-      block += 8;
-    }
-    data[4] = flags & 0x000000FF;
-    data[5] = (flags & 0x0000FF00) >> 8;
-    data[6] = (flags & 0x00FF0000) >> 16;
-    data[7] = (flags & 0xFF000000) >> 24;
-    data += 8;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x8b (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for left and right half (16 bytes) */
-  guint16 cols[2];
-  guint32 flags;
-  guint i, x, y, shifter;
-  guint16 *block = apx->block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc->mve, src, 4, 8, i, 2, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 & 0x8000 && !(p2 & 0x8000) */
-    GST_WRITE_UINT16_LE (&data[0], (cols[0] & ~0x8000) | (0x8000 * (i ^ 1)));
-    GST_WRITE_UINT16_LE (&data[2], cols[1]);
-
-    for (y = 0; y < 8; ++y) {
-      for (x = 0; x < 4; ++x, ++shifter) {
-        if (block[x] == cols[1])
-          flags |= 1 << shifter;
-      }
-      block += 8;
-    }
-
-    data[4] = flags & 0x000000FF;
-    data[5] = (flags & 0x0000FF00) >> 8;
-    data[6] = (flags & 0x00FF0000) >> 16;
-    data[7] = (flags & 0xFF000000) >> 24;
-    data += 8;
-    block = apx->block + 4;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x8c (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for each 4x4 quadrant (24 bytes) */
-  guint16 cols[2];
-  guint16 flags;
-  guint i, x, y, shifter;
-  guint16 *block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 4; ++i) {
-    apx->error +=
-        mve_quantize (enc->mve, src, 4, 4, ((i & 1) << 1) | ((i & 2) >> 1), 2,
-        apx->block, cols);
-
-    /* !(p0 & 0x8000) */
-    GST_WRITE_UINT16_LE (&data[0], cols[0] & ~0x8000);
-    GST_WRITE_UINT16_LE (&data[2], cols[1]);
-
-    block = apx->block + ((i / 2) * 4) + ((i % 2) * 32);
-    flags = 0;
-    shifter = 0;
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 4; ++x, ++shifter) {
-        if (block[x] == cols[1])
-          flags |= 1 << shifter;
-      }
-      block += 8;
-    }
-
-    data[4] = flags & 0x00FF;
-    data[5] = (flags & 0xFF00) >> 8;
-    data += 6;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9a (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for 2x2 solid blocks (12 bytes) */
-  guint16 p[2];
-  guint32 e, emin;
-  guint i, x, y, mean = 0;
-  guint8 r[4], g[4], b[4], rb, gb, bb;
-  guint16 *block = apx->block;
-  guint shifter = 0;
-  guint32 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc->mve, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  /* !(p[0] & 0x8000) && p[2] & 0x8000 */
-  GST_WRITE_UINT16_LE (&apx->data[0], enc->q4colors[0] & ~0x8000);
-  GST_WRITE_UINT16_LE (&apx->data[2], enc->q4colors[1]);
-  GST_WRITE_UINT16_LE (&apx->data[4], enc->q4colors[2] | 0x8000);
-  GST_WRITE_UINT16_LE (&apx->data[6], enc->q4colors[3]);
-
-  for (i = 0; i < 4; ++i) {
-    r[i] = MVE_RVAL (enc->q4colors[i]);
-    g[i] = MVE_GVAL (enc->q4colors[i]);
-    b[i] = MVE_BVAL (enc->q4colors[i]);
-  }
-
-  /* calculate mean colors for each 2x2 block and map to global colors */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x, shifter += 2) {
-      p[0] = src[enc->mve->width];
-      p[1] = src[enc->mve->width + 1];
-
-      rb = (MVE_RVAL (src[0]) + MVE_RVAL (src[1]) + MVE_RVAL (p[0]) +
-          MVE_RVAL (p[1]) + 2) / 4;
-      gb = (MVE_GVAL (src[0]) + MVE_GVAL (src[1]) + MVE_GVAL (p[0]) +
-          MVE_GVAL (p[1]) + 2) / 4;
-      bb = (MVE_BVAL (src[0]) + MVE_BVAL (src[1]) + MVE_BVAL (p[0]) +
-          MVE_BVAL (p[1]) + 2) / 4;
-
-      emin = MVE_APPROX_MAX_ERROR;
-      for (i = 0; i < 4; ++i) {
-        e = mve_color_dist_rgb (rb, gb, bb, r[i], g[i], b[i]);
-        if (e < emin) {
-          emin = e;
-          mean = i;
-        }
-      }
-
-      flags |= mean << shifter;
-      block[0] = block[1] = block[8] = block[9] = enc->q4colors[mean];
-
-      src += 2;
-      block += 2;
-    }
-    src += (enc->mve->width * 2) - 8;
-    block += 8;
-  }
-
-  apx->data[8] = flags & 0x000000FF;
-  apx->data[9] = (flags & 0x0000FF00) >> 8;
-  apx->data[10] = (flags & 0x00FF0000) >> 16;
-  apx->data[11] = (flags & 0xFF000000) >> 24;
-
-  apx->error =
-      mve_block_error_packed (enc->mve, src - 8 * enc->mve->width, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9b (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for 2x1 solid blocks (16 bytes) */
-  guint32 e, emin;
-  guint i, x, y, mean = 0;
-  guint8 r[4], g[4], b[4], rb, gb, bb;
-  guint8 *data = apx->data;
-  guint16 *block = apx->block;
-  guint shifter = 0;
-  guint32 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc->mve, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  /* p[0] & 0x8000 && !(p[2] & 0x8000) */
-  GST_WRITE_UINT16_LE (&data[0], enc->q4colors[0] | 0x8000);
-  GST_WRITE_UINT16_LE (&data[2], enc->q4colors[1]);
-  GST_WRITE_UINT16_LE (&data[4], enc->q4colors[2] & ~0x8000);
-  GST_WRITE_UINT16_LE (&data[6], enc->q4colors[3]);
-  data += 8;
-
-  for (i = 0; i < 4; ++i) {
-    r[i] = MVE_RVAL (enc->q4colors[i]);
-    g[i] = MVE_GVAL (enc->q4colors[i]);
-    b[i] = MVE_BVAL (enc->q4colors[i]);
-  }
-
-  /* calculate mean colors for each 2x1 block and map to global colors */
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 4; ++x, shifter += 2) {
-      rb = (MVE_RVAL (src[0]) + MVE_RVAL (src[1]) + 1) / 2;
-      gb = (MVE_GVAL (src[0]) + MVE_GVAL (src[1]) + 1) / 2;
-      bb = (MVE_BVAL (src[0]) + MVE_BVAL (src[1]) + 1) / 2;
-
-      emin = MVE_APPROX_MAX_ERROR;
-      for (i = 0; i < 4; ++i) {
-        e = mve_color_dist_rgb (rb, gb, bb, r[i], g[i], b[i]);
-        if (e < emin) {
-          emin = e;
-          mean = i;
-        }
-      }
-
-      flags |= mean << shifter;
-      block[0] = block[1] = enc->q4colors[mean];
-
-      src += 2;
-      block += 2;
-    }
-
-    if ((y == 3) || (y == 7)) {
-      data[0] = flags & 0x000000FF;
-      data[1] = (flags & 0x0000FF00) >> 8;
-      data[2] = (flags & 0x00FF0000) >> 16;
-      data[3] = (flags & 0xFF000000) >> 24;
-      data += 4;
-
-      flags = 0;
-      shifter = 0;
-    }
-
-    src += enc->mve->width - 8;
-  }
-
-  apx->error =
-      mve_block_error_packed (enc->mve, src - 8 * enc->mve->width, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9c (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for 1x2 solid blocks (16 bytes) */
-  guint16 p2;
-  guint32 e, emin;
-  guint i, x, y, mean = 0;
-  guint8 r[4], g[4], b[4], rb, gb, bb;
-  guint8 *data = apx->data;
-  guint16 *block = apx->block;
-  guint shifter = 0;
-  guint32 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc->mve, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  /* p[0] & 0x8000 && p[2] & 0x8000 */
-  GST_WRITE_UINT16_LE (&data[0], enc->q4colors[0] | 0x8000);
-  GST_WRITE_UINT16_LE (&data[2], enc->q4colors[1]);
-  GST_WRITE_UINT16_LE (&data[4], enc->q4colors[2] | 0x8000);
-  GST_WRITE_UINT16_LE (&data[6], enc->q4colors[3]);
-  data += 8;
-
-  for (i = 0; i < 4; ++i) {
-    r[i] = MVE_RVAL (enc->q4colors[i]);
-    g[i] = MVE_GVAL (enc->q4colors[i]);
-    b[i] = MVE_BVAL (enc->q4colors[i]);
-  }
-
-  /* calculate mean colors for each 1x2 block and map to global colors */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 8; ++x, shifter += 2) {
-      p2 = src[enc->mve->width];
-      rb = (MVE_RVAL (src[0]) + MVE_RVAL (p2) + 1) / 2;
-      gb = (MVE_GVAL (src[0]) + MVE_GVAL (p2) + 1) / 2;
-      bb = (MVE_BVAL (src[0]) + MVE_BVAL (p2) + 1) / 2;
-
-      emin = MVE_APPROX_MAX_ERROR;
-      for (i = 0; i < 4; ++i) {
-        e = mve_color_dist_rgb (rb, gb, bb, r[i], g[i], b[i]);
-        if (e < emin) {
-          emin = e;
-          mean = i;
-        }
-      }
-
-      flags |= mean << shifter;
-      block[0] = block[8] = enc->q4colors[mean];
-
-      ++src;
-      ++block;
-    }
-
-    if ((y == 1) || (y == 3)) {
-      data[0] = flags & 0x000000FF;
-      data[1] = (flags & 0x0000FF00) >> 8;
-      data[2] = (flags & 0x00FF0000) >> 16;
-      data[3] = (flags & 0xFF000000) >> 24;
-      data += 4;
-
-      flags = 0;
-      shifter = 0;
-    }
-
-    src += (enc->mve->width * 2) - 8;
-    block += 8;
-  }
-
-  apx->error =
-      mve_block_error_packed (enc->mve, src - 8 * enc->mve->width, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9d (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* generic 4-color encoding (24 bytes) */
-  guint32 flags = 0;
-  guint shifter = 0;
-  guint i, x, y;
-  guint8 *data = apx->data;
-  guint16 *block = apx->block;
-
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc->mve, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  memcpy (block, enc->q4block, 128);
-
-  /* !(p[0] & 0x8000) && !(p[2] & 0x8000) */
-  GST_WRITE_UINT16_LE (&data[0], enc->q4colors[0] & ~0x8000);
-  GST_WRITE_UINT16_LE (&data[2], enc->q4colors[1]);
-  GST_WRITE_UINT16_LE (&data[4], enc->q4colors[2] & ~0x8000);
-  GST_WRITE_UINT16_LE (&data[6], enc->q4colors[3]);
-  data += 8;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x, shifter += 2) {
-
-      for (i = 0; i < 3; ++i) {
-        if (*block == enc->q4colors[i])
-          break;
-      }
-
-      flags |= i << shifter;
-      ++block;
-    }
-
-    data[0] = flags & 0x000000FF;
-    data[1] = (flags & 0x0000FF00) >> 8;
-    data += 2;
-    shifter = 0;
-    flags = 0;
-  }
-
-  apx->error = enc->q4error;
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xaa (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for top and bottom half (32 bytes) */
-  guint16 cols[4];
-  guint32 flags;
-  guint i, j, x, y, shifter;
-  guint16 *block = apx->block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc->mve, src, 8, 4, i, 4, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 & 0x8000 && p4 & 0x8000 */
-    GST_WRITE_UINT16_LE (&data[0], cols[0] | 0x8000);
-    GST_WRITE_UINT16_LE (&data[2], cols[1]);
-    GST_WRITE_UINT16_LE (&data[4], cols[2]);
-    GST_WRITE_UINT16_LE (&data[6], cols[3]);
-    data += 8;
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 8; ++x, shifter += 2) {
-        for (j = 0; j < 3; ++j) {
-          if (block[x] == cols[j])
-            break;
-        }
-        flags |= j << shifter;
-      }
-      block += 8;
-
-      if ((y == 1) || (y == 3)) {
-        data[0] = flags & 0x000000FF;
-        data[1] = (flags & 0x0000FF00) >> 8;
-        data[2] = (flags & 0x00FF0000) >> 16;
-        data[3] = (flags & 0xFF000000) >> 24;
-        data += 4;
-        flags = 0;
-        shifter = 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xab (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for left and right half (32 bytes) */
-  guint16 cols[4];
-  guint32 flags;
-  guint i, j, x, y, shifter;
-  guint16 *block = apx->block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc->mve, src, 4, 8, i, 4, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 & 0x8000 && !(p4 & 0x8000) */
-    GST_WRITE_UINT16_LE (&data[0], (cols[0] & ~0x8000) | (0x8000 * (i ^ 1)));
-    GST_WRITE_UINT16_LE (&data[2], cols[1]);
-    GST_WRITE_UINT16_LE (&data[4], cols[2]);
-    GST_WRITE_UINT16_LE (&data[6], cols[3]);
-    data += 8;
-
-    for (y = 0; y < 8; ++y) {
-      for (x = 0; x < 4; ++x, shifter += 2) {
-        for (j = 0; j < 3; ++j) {
-          if (block[x] == cols[j])
-            break;
-        }
-        flags |= j << shifter;
-      }
-      block += 8;
-
-      if ((y == 3) || (y == 7)) {
-        data[0] = flags & 0x000000FF;
-        data[1] = (flags & 0x0000FF00) >> 8;
-        data[2] = (flags & 0x00FF0000) >> 16;
-        data[3] = (flags & 0xFF000000) >> 24;
-        data += 4;
-        flags = 0;
-        shifter = 0;
-      }
-    }
-    block = apx->block + 4;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xac (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for each 4x4 quadrant (48 bytes) */
-  guint16 cols[4];
-  guint32 flags;
-  guint i, j, x, y, shifter;
-  guint16 *block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 4; ++i) {
-    apx->error +=
-        mve_quantize (enc->mve, src, 4, 4, ((i & 1) << 1) | ((i & 2) >> 1), 4,
-        apx->block, cols);
-
-    /* !(p0 & 0x8000) */
-    GST_WRITE_UINT16_LE (&data[0], cols[0] & ~0x8000);
-    GST_WRITE_UINT16_LE (&data[2], cols[1]);
-    GST_WRITE_UINT16_LE (&data[4], cols[2]);
-    GST_WRITE_UINT16_LE (&data[6], cols[3]);
-
-    block = apx->block + ((i / 2) * 4) + ((i % 2) * 32);
-    flags = 0;
-    shifter = 0;
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 4; ++x, shifter += 2) {
-        for (j = 0; j < 3; ++j) {
-          if (block[x] == cols[j])
-            break;
-        }
-        flags |= j << shifter;
-      }
-      block += 8;
-    }
-
-    data[8] = flags & 0x000000FF;
-    data[9] = (flags & 0x0000FF00) >> 8;
-    data[10] = (flags & 0x00FF0000) >> 16;
-    data[11] = (flags & 0xFF000000) >> 24;
-    data += 12;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xb (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 64-color encoding (each pixel in block is a different color) (128 bytes) */
-  guint i;
-
-  apx->error = 0;
-
-  mve_store_block (enc->mve, src, apx->block);
-  for (i = 0; i < 64; ++i)
-    GST_WRITE_UINT16_LE (&apx->data[i << 1], apx->block[i]);
-
-  return 0;
-}
-
-static guint32
-mve_encode_0xc (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 16-color block encoding: each 2x2 block is a different color (32 bytes) */
-  guint i = 0, x, y;
-  const guint w = enc->mve->width;
-  guint16 r, g, b;
-
-  /* calculate median color for each 2x2 block */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x) {
-      r = MVE_RVAL (src[0]) + MVE_RVAL (src[1]) +
-          MVE_RVAL (src[w]) + MVE_RVAL (src[w + 1]) + 2;
-      g = MVE_GVAL (src[0]) + MVE_GVAL (src[1]) +
-          MVE_GVAL (src[w]) + MVE_GVAL (src[w + 1]) + 2;
-      b = MVE_BVAL (src[0]) + MVE_BVAL (src[1]) +
-          MVE_BVAL (src[w]) + MVE_BVAL (src[w + 1]) + 2;
-      apx->block[i] = apx->block[i + 1] = apx->block[i + 2] =
-          apx->block[i + 3] = MVE_COL (r >> 2, g >> 2, b >> 2);
-      GST_WRITE_UINT16_LE (&apx->data[i >> 1], apx->block[i]);
-
-      i += 4;
-      src += 2;
-    }
-    src += (w * 2) - 8;
-  }
-
-  apx->error = mve_block_error_packed (enc->mve, src - (8 * w), apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xd (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color block encoding: each 4x4 block is a different color (8 bytes) */
-  guint i, x, y;
-  guint16 *block;
-
-  /* calculate median color for each 4x4 block */
-  for (i = 0; i < 4; ++i) {
-    guint16 median =
-        mve_median_sub (enc->mve, src, 4, 4, ((i & 1) << 1) | ((i & 2) >> 1));
-
-    block = apx->block + ((i / 2) * 4) + ((i % 2) * 32);
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 4; ++x) {
-        block[x] = median;
-      }
-      block += 8;
-    }
-
-    GST_WRITE_UINT16_LE (&apx->data[i << 1], median);
-  }
-
-  apx->error = mve_block_error_packed (enc->mve, src, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xe (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 1-color encoding: the whole block is 1 solid color (2 bytes) */
-  guint i;
-  guint16 median = mve_median (enc->mve, src);
-
-  for (i = 0; i < 64; ++i)
-    apx->block[i] = median;
-
-  apx->error = mve_block_error_packed (enc->mve, src, apx->block);
-  GST_WRITE_UINT16_LE (apx->data, median);
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xf (GstMveEncoderData * enc, const guint16 * src,
-    GstMveApprox * apx)
-{
-  /* 2 colors dithered encoding (4 bytes) */
-  guint i, x, y;
-  guint32 r[2] = { 0 }, g[2] = {
-  0}, b[2] = {
-  0};
-  guint16 col[2];
-
-  /* find medians for both colors */
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; x += 2) {
-      guint16 p = src[x];
-
-      r[y & 1] += MVE_RVAL (p);
-      g[y & 1] += MVE_GVAL (p);
-      b[y & 1] += MVE_BVAL (p);
-
-      p = src[x + 1];
-      r[(y & 1) ^ 1] += MVE_RVAL (p);
-      g[(y & 1) ^ 1] += MVE_GVAL (p);
-      b[(y & 1) ^ 1] += MVE_BVAL (p);
-    }
-    src += enc->mve->width;
-  }
-  col[0] = MVE_COL ((r[0] + 16) / 32, (g[0] + 16) / 32, (b[0] + 16) / 32);
-  col[1] = MVE_COL ((r[1] + 16) / 32, (g[1] + 16) / 32, (b[1] + 16) / 32);
-
-  /* store block after encoding */
-  for (i = 0, y = 0; y < 8; ++y) {
-    for (x = 0; x < 4; ++x) {
-      apx->block[i++] = col[y & 1];
-      apx->block[i++] = col[(y & 1) ^ 1];
-    }
-  }
-
-  GST_WRITE_UINT16_LE (&apx->data[0], col[0]);
-  GST_WRITE_UINT16_LE (&apx->data[2], col[1]);
-  apx->error = mve_block_error_packed (enc->mve,
-      src - (8 * enc->mve->width), apx->block);
-  return apx->error;
-}
-
-/* all available encodings in the preferred order,
-   i.e. in ascending encoded size */
-static const GstMveEncoding mve_encodings[] = {
-  {0x1, 0, mve_encode_0x1},
-  {0x0, 0, mve_encode_0x0},
-  {0x3, 1, mve_encode_0x3},
-  {0x4, 1, mve_encode_0x4},
-  {0x2, 1, mve_encode_0x2},
-  {0xe, 2, mve_encode_0xe},
-  {0x5, 2, mve_encode_0x5},
-  {0xf, 4, mve_encode_0xf},
-  {0x7, 6, mve_encode_0x7a},
-  {0xd, 8, mve_encode_0xd},
-  {0x7, 12, mve_encode_0x7b},
-  {0x9, 12, mve_encode_0x9a},
-  {0x9, 16, mve_encode_0x9b},
-  {0x9, 16, mve_encode_0x9c},
-  {0x8, 16, mve_encode_0x8a},
-  {0x8, 16, mve_encode_0x8b},
-  {0x8, 24, mve_encode_0x8c},
-  {0x9, 24, mve_encode_0x9d},
-  {0xc, 32, mve_encode_0xc},
-  {0xa, 32, mve_encode_0xaa},
-  {0xa, 32, mve_encode_0xab},
-  {0xa, 48, mve_encode_0xac},
-  {0xb, 128, mve_encode_0xb}
-};
-
-static gboolean
-mve_reorder_solution (GArray ** solution, guint16 n)
-{
-  /* do a binary search to find the position to reinsert the modified element */
-  /* the block we need to reconsider is always at position 0 */
-  /* return TRUE if this block only has 1 encoding left and can be dropped */
-  if (mve_comp_solution (&solution[0], &solution[1]) <= 0)
-    return FALSE;               /* already sorted */
-
-  else if (solution[0]->len <= 1)
-    /* drop this element from further calculations since we cannot improve here */
-    return TRUE;
-
-  else {
-    /* we know the error value can only get worse, so we can actually start at 1 */
-    guint lower = 1;
-    guint upper = n - 1;
-    gint cmp;
-    guint idx = 0;
-
-    while (upper > lower) {
-      idx = lower + ((upper - lower) / 2);
-
-      cmp = mve_comp_solution (&solution[0], &solution[idx]);
-
-      if (cmp < 0) {
-        upper = idx;
-      } else if (cmp > 0) {
-        lower = ++idx;
-      } else {
-        upper = lower = idx;
-      }
-    }
-
-    if (idx > 0) {
-      /* rearrange array members in new order */
-      GArray *a = solution[0];
-
-      memcpy (&solution[0], &solution[1], sizeof (GArray *) * idx);
-      solution[idx] = a;
-    }
-  }
-  return FALSE;
-}
-
-static guint32
-gst_mve_find_solution (GArray ** approx, guint16 n, guint32 size, guint16 max)
-{
-  /* build an array of approximations we can shuffle around */
-  GstMveApprox *sol_apx;
-  GArray **solution = g_malloc (sizeof (GArray *) * n);
-  GArray **current = solution;
-
-  memcpy (solution, approx, sizeof (GArray *) * n);
-
-  qsort (solution, n, sizeof (GArray *), mve_comp_solution);
-
-  do {
-    /* array is now sorted by error of the next to optimal approximation;
-       drop optimal approximation for the best block */
-
-    /* unable to reduce size further */
-    if (current[0]->len <= 1)
-      break;
-
-    sol_apx = &g_array_index (current[0], GstMveApprox, current[0]->len - 1);
-    size -= mve_encodings[sol_apx->type].size;
-    g_array_remove_index_fast (current[0], current[0]->len - 1);
-    sol_apx = &g_array_index (current[0], GstMveApprox, current[0]->len - 1);
-    size += mve_encodings[sol_apx->type].size;
-
-    if (mve_reorder_solution (current, n)) {
-      ++current;
-      --n;
-    }
-  } while (size > max);
-
-  g_free (solution);
-
-  return size;
-}
-
-GstFlowReturn
-mve_encode_frame16 (GstMveMux * mve, GstBuffer * frame, guint16 max_data)
-{
-  guint16 *src;
-  GstFlowReturn ret = GST_FLOW_ERROR;
-  guint8 *cm = mve->chunk_code_map;
-  GByteArray *pstream;
-  GArray **approx;
-  GstMveApprox apx;
-  GstMveEncoderData enc;
-  const guint16 blocks = (mve->width * mve->height) / 64;
-  guint32 encoded_size = 2;     /* two initial bytes for the offset */
-  guint i = 0, x, y;
-
-  src = (guint16 *) GST_BUFFER_DATA (frame);
-
-  approx = g_malloc (sizeof (GArray *) * blocks);
-
-  enc.mve = mve;
-
-  for (enc.y = 0; enc.y < mve->height; enc.y += 8) {
-    for (enc.x = 0; enc.x < mve->width; enc.x += 8) {
-      guint32 err, last_err = MVE_APPROX_MAX_ERROR;
-      guint type = 0;
-      guint best = 0;
-
-      enc.q2available = enc.q4available = FALSE;
-      approx[i] = g_array_new (FALSE, FALSE, sizeof (GstMveApprox));
-
-      do {
-        err = mve_encodings[type].approx (&enc, src, &apx);
-
-        if (err < last_err) {
-          apx.type = best = type;
-          g_array_append_val (approx[i], apx);
-          last_err = err;
-        }
-
-        ++type;
-      } while (last_err != 0);
-
-      encoded_size += mve_encodings[best].size;
-      ++i;
-      src += 8;
-    }
-    src += 7 * mve->width;
-  }
-
-  /* find best solution with size constraints */
-  GST_DEBUG_OBJECT (mve, "encoded frame %u in %u bytes (lossless)",
-      mve->video_frames + 1, encoded_size);
-
-#if 0
-  /* FIXME */
-  src = (guint16 *) GST_BUFFER_DATA (frame);
-  for (i = 0, y = 0; y < mve->height; y += 8) {
-    for (x = 0; x < mve->width; x += 8, ++i) {
-      GstMveApprox *sol =
-          &g_array_index (approx[i], GstMveApprox, approx[i]->len - 1);
-      guint opcode = mve_encodings[sol->type].opcode;
-      guint j, k;
-
-      if (sol->error > 0)
-        GST_WARNING_OBJECT (mve, "error is %lu for %d/%d (0x%x)", sol->error, x,
-            y, opcode);
-
-      for (j = 0; j < 8; ++j) {
-        guint16 *o = src + j * mve->width;
-        guint16 *c = sol->block + j * 8;
-
-        if (memcmp (o, c, 16)) {
-          GST_WARNING_OBJECT (mve, "opcode 0x%x (type %d) at %d/%d, line %d:",
-              opcode, sol->type, x, y, j + 1);
-          for (k = 0; k < 8; ++k) {
-            o = src + k * mve->width;
-            c = sol->block + k * 8;
-            GST_WARNING_OBJECT (mve,
-                "%d should be: %4d  %4d  %4d  %4d  %4d  %4d  %4d  %4d", k, o[0],
-                o[1], o[2], o[3], o[4], o[5], o[6], o[7]);
-            GST_WARNING_OBJECT (mve,
-                "%d but is   : %4d  %4d  %4d  %4d  %4d  %4d  %4d  %4d", k, c[0],
-                c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
-          }
-        }
-      }
-      src += 8;
-    }
-    src += 7 * mve->width;
-  }
-#endif
-
-  if (encoded_size > max_data) {
-    encoded_size =
-        gst_mve_find_solution (approx, blocks, encoded_size, max_data);
-    if (encoded_size > max_data) {
-      GST_ERROR_OBJECT (mve, "unable to compress frame to less than %d bytes",
-          encoded_size);
-      for (i = 0; i < blocks; ++i)
-        g_array_free (approx[i], TRUE);
-
-      goto done;
-    }
-    GST_DEBUG_OBJECT (mve, "compressed frame %u to %u bytes (lossy)",
-        mve->video_frames + 1, encoded_size);
-  }
-
-  mve->chunk_video = g_byte_array_sized_new (encoded_size);
-  /* reserve two bytes for the offset pointer we'll fill in later */
-  g_byte_array_set_size (mve->chunk_video, 2);
-
-  pstream = g_byte_array_new ();
-
-  /* encode */
-  src = (guint16 *) GST_BUFFER_DATA (frame);
-  for (i = 0, y = 0; y < mve->height; y += 8) {
-    for (x = 0; x < mve->width; x += 8, ++i) {
-      GstMveApprox *sol =
-          &g_array_index (approx[i], GstMveApprox, approx[i]->len - 1);
-      guint opcode = mve_encodings[sol->type].opcode;
-      GByteArray *dest;
-
-      if (opcode >= 0x2 && opcode <= 0x4)
-        dest = pstream;
-      else
-        dest = mve->chunk_video;
-
-      g_byte_array_append (dest, sol->data, mve_encodings[sol->type].size);
-
-      if (i & 1) {
-        *cm |= opcode << 4;
-        ++cm;
-      } else
-        *cm = opcode;
-
-      /* modify the frame to match the image we actually encoded */
-      if (sol->error > 0)
-        mve_restore_block (mve, src, sol->block);
-
-      src += 8;
-      g_array_free (approx[i], TRUE);
-    }
-    src += 7 * mve->width;
-  }
-
-  /* now update the offset */
-  GST_WRITE_UINT16_LE (mve->chunk_video->data, mve->chunk_video->len);
-  g_byte_array_append (mve->chunk_video, pstream->data, pstream->len);
-  g_byte_array_free (pstream, TRUE);
-
-  ret = GST_FLOW_OK;
-
-done:
-  g_free (approx);
-
-  return ret;
-}
diff --git a/gst/mve/mvevideoenc8.c b/gst/mve/mvevideoenc8.c
deleted file mode 100644 (file)
index bd06693..0000000
+++ /dev/null
@@ -1,1733 +0,0 @@
-/*
- * Interplay MVE video encoder (8 bit)
- * Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "mve.h"
-#include "gstmvemux.h"
-
-typedef struct _GstMveEncoderData GstMveEncoderData;
-typedef struct _GstMveEncoding GstMveEncoding;
-typedef struct _GstMveApprox GstMveApprox;
-typedef struct _GstMveQuant GstMveQuant;
-
-#define MVE_RMASK   0x00ff0000
-#define MVE_GMASK   0x0000ff00
-#define MVE_BMASK   0x000000ff
-#define MVE_RSHIFT  16
-#define MVE_GSHIFT  8
-#define MVE_BSHIFT  0
-
-#define MVE_RVAL(p)     (((p) & MVE_RMASK) >> MVE_RSHIFT)
-#define MVE_GVAL(p)     (((p) & MVE_GMASK) >> MVE_GSHIFT)
-#define MVE_BVAL(p)     (((p) & MVE_BMASK) >> MVE_BSHIFT)
-#define MVE_COL(r,g,b)  (((r) << MVE_RSHIFT) | ((g) << MVE_GSHIFT) | ((b) << MVE_BSHIFT))
-
-struct _GstMveEncoderData
-{
-  GstMveMux *mve;
-  /* current position in frame */
-  guint16 x, y;
-
-  /* palette for current frame */
-  const guint32 *palette;
-
-  /* commonly used quantization results
-     (2 and 4 colors) for the current block */
-  guint8 q2block[64];
-  guint8 q2colors[2];
-  guint32 q2error;
-  gboolean q2available;
-
-  guint8 q4block[64];
-  guint8 q4colors[4];
-  guint32 q4error;
-  gboolean q4available;
-};
-
-struct _GstMveEncoding
-{
-  guint8 opcode;
-  guint8 size;
-    guint32 (*approx) (GstMveEncoderData * enc, const guint8 * src,
-      GstMveApprox * res);
-};
-
-#define MVE_APPROX_MAX_ERROR  G_MAXUINT32
-
-struct _GstMveApprox
-{
-  guint32 error;
-  guint8 type;
-  guint8 data[64];              /* max 64 bytes encoded per block */
-  guint8 block[64];             /* block in final image */
-};
-
-struct _GstMveQuant
-{
-  guint32 col;
-  guint16 r_total, g_total, b_total;
-  guint8 r, g, b;
-  guint8 hits, hits_last;
-  guint32 max_error;
-  guint32 max_miss;
-};
-
-#define mve_median(mve, src) mve_median_sub ((mve), (src), 8, 8, 0)
-#define mve_color_dist(c1, c2) \
-        mve_color_dist_rgb (MVE_RVAL (c1), MVE_GVAL (c1), MVE_BVAL (c1), \
-                            MVE_RVAL (c2), MVE_GVAL (c2), MVE_BVAL (c2));
-#define mve_color_dist2(c, r, g, b)  \
-        mve_color_dist_rgb (MVE_RVAL (c), MVE_GVAL (c), MVE_BVAL (c), (r), (g), (b))
-
-
-/* comparison function for qsort() */
-static int
-mve_comp_solution (const void *a, const void *b)
-{
-  const GArray *aa = *((GArray **) a);
-  const GArray *bb = *((GArray **) b);
-
-  if (aa->len <= 1)
-    return G_MAXINT;
-  else if (bb->len <= 1)
-    return G_MININT;
-  else
-    return g_array_index (aa, GstMveApprox, aa->len - 2).error -
-        g_array_index (bb, GstMveApprox, bb->len - 2).error;
-}
-
-static inline guint32
-mve_color_dist_rgb (guint8 r1, guint8 g1, guint8 b1,
-    guint8 r2, guint8 g2, guint8 b2)
-{
-  /* euclidean distance (minus sqrt) */
-  gint dr = r1 - r2;
-  gint dg = g1 - g2;
-  gint db = b1 - b2;
-
-  return dr * dr + dg * dg + db * db;
-}
-
-static guint8
-mve_find_pal_color (const guint32 * pal, guint32 col)
-{
-  /* find the closest matching color in the palette */
-  guint i;
-  guint8 best = 0;
-  const guint8 r = MVE_RVAL (col), g = MVE_GVAL (col), b = MVE_BVAL (col);
-  guint32 ebest = MVE_APPROX_MAX_ERROR;
-
-  for (i = 0; i < MVE_PALETTE_COUNT; ++i, ++pal) {
-    guint32 e = mve_color_dist2 (*pal, r, g, b);
-
-    if (e < ebest) {
-      ebest = e;
-      best = i;
-
-      if (ebest == 0)
-        break;
-    }
-  }
-
-  return best;
-}
-
-static guint8
-mve_find_pal_color2 (const guint32 * pal, const guint8 * subset, guint32 col,
-    guint size)
-{
-  /* find the closest matching color in the partial indexed palette */
-  guint i;
-  guint8 best = 0;
-  const guint8 r = MVE_RVAL (col), g = MVE_GVAL (col), b = MVE_BVAL (col);
-  guint32 ebest = MVE_APPROX_MAX_ERROR;
-
-  for (i = 0; i < size; ++i) {
-    guint32 e = mve_color_dist2 (pal[subset[i]], r, g, b);
-
-    if (e < ebest) {
-      ebest = e;
-      best = subset[i];
-
-      if (ebest == 0)
-        break;
-    }
-  }
-
-  return best;
-}
-
-static void
-mve_map_to_palette (const GstMveEncoderData * enc, const guint8 * colors,
-    const guint8 * data, guint8 * dest, guint w, guint h, guint ncols)
-{
-  guint x, y;
-
-  for (y = 0; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      dest[x] =
-          mve_find_pal_color2 (enc->palette, colors, enc->palette[data[x]],
-          ncols);
-    }
-    data += enc->mve->width;
-    dest += 8;
-  }
-}
-
-/* compute average color in a sub-block */
-static guint8
-mve_median_sub (const GstMveEncoderData * enc, const guint8 * src, guint w,
-    guint h, guint n)
-{
-  guint x, y;
-  const guint max = w * h, max2 = max >> 1;
-  guint32 r_total = max2, g_total = max2, b_total = max2;
-
-  src += ((n * w) % 8) + (((n * (8 - h)) / (12 - w)) * h * enc->mve->width);
-
-  for (y = 0; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      guint32 p = enc->palette[src[x]];
-
-      r_total += MVE_RVAL (p);
-      g_total += MVE_GVAL (p);
-      b_total += MVE_BVAL (p);
-    }
-    src += enc->mve->width;
-  }
-
-  return mve_find_pal_color (enc->palette,
-      MVE_COL (r_total / max, g_total / max, b_total / max));
-}
-
-static void
-mve_quant_init (const GstMveEncoderData * enc, GstMveQuant * q,
-    guint n_clusters, const guint8 * data, guint w, guint h)
-{
-  guint i;
-  guint x, y;
-  guint32 cols[4];
-  guint16 val[2];
-
-  /* init first cluster with lowest (darkest), second with highest (lightest)
-     color. if we need 4 clusters, fill in first and last color in the block
-     and hope they make for a good distribution */
-  cols[0] = cols[1] = cols[2] = enc->palette[data[0]];
-  cols[3] = enc->palette[data[(h - 1) * enc->mve->width + w - 1]];
-
-  /* favour red over green and blue */
-  val[0] = val[1] =
-      (MVE_RVAL (cols[0]) << 1) + MVE_GVAL (cols[0]) + MVE_BVAL (cols[0]);
-
-  for (y = 0; y < h; ++y) {
-    for (x = 0; x < w; ++x) {
-      guint32 c = enc->palette[data[x]];
-
-      if ((c != cols[0]) && (c != cols[1])) {
-        guint v = (MVE_RVAL (c) << 1) + MVE_GVAL (c) + MVE_BVAL (c);
-
-        if (v < val[0]) {
-          val[0] = v;
-          cols[0] = c;
-        } else if (v > val[1]) {
-          val[1] = v;
-          cols[1] = c;
-        }
-      }
-    }
-    data += enc->mve->width;
-  }
-
-  for (i = 0; i < n_clusters; ++i) {
-    q[i].col = cols[i];
-    q[i].r = MVE_RVAL (cols[i]);
-    q[i].g = MVE_GVAL (cols[i]);
-    q[i].b = MVE_BVAL (cols[i]);
-    q[i].r_total = q[i].g_total = q[i].b_total = 0;
-    q[i].hits = q[i].hits_last = 0;
-    q[i].max_error = 0;
-    q[i].max_miss = 0;
-  }
-}
-
-static gboolean
-mve_quant_update_clusters (GstMveQuant * q, guint n_clusters)
-{
-  gboolean changed = FALSE;
-  guint i;
-
-  for (i = 0; i < n_clusters; ++i) {
-    if (q[i].hits > 0) {
-      guint32 means = MVE_COL ((q[i].r_total + q[i].hits / 2) / q[i].hits,
-          (q[i].g_total + q[i].hits / 2) / q[i].hits,
-          (q[i].b_total + q[i].hits / 2) / q[i].hits);
-
-      if ((means != q[i].col) || (q[i].hits != q[i].hits_last))
-        changed = TRUE;
-
-      q[i].col = means;
-      q[i].r_total = q[i].g_total = q[i].b_total = 0;
-    } else {
-      guint j;
-      guint32 max_err = 0;
-      GstMveQuant *worst = NULL;
-
-      /* try to replace unused cluster with a better representative */
-      for (j = 0; j < n_clusters; ++j) {
-        if (q[j].max_error > max_err) {
-          worst = &q[j];
-          max_err = worst->max_error;
-        }
-      }
-      if (worst) {
-        q[i].col = worst->max_miss;
-        worst->max_error = 0;
-        changed = TRUE;
-      }
-    }
-
-    q[i].r = MVE_RVAL (q[i].col);
-    q[i].g = MVE_GVAL (q[i].col);
-    q[i].b = MVE_BVAL (q[i].col);
-    q[i].hits_last = q[i].hits;
-    q[i].hits = 0;
-  }
-  for (i = 0; i < n_clusters; ++i) {
-    q[i].max_error = 0;
-  }
-
-  return changed;
-}
-
-/* quantize a sub-block using a k-means algorithm */
-static guint32
-mve_quantize (const GstMveEncoderData * enc, const guint8 * src,
-    guint w, guint h, guint n, guint ncols, guint8 * dest, guint8 * cols)
-{
-  guint x, y, i;
-  GstMveQuant q[4];
-  const guint8 *data;
-  guint32 error;
-
-  g_assert (n <= 4 && ncols <= 4);
-
-  src += ((n * w) % 8) + (((n * (8 - h)) / (12 - w)) * h * enc->mve->width);
-  dest += ((n * w) % 8) + (((n * (8 - h)) / (12 - w)) * h * 8);
-
-  mve_quant_init (enc, q, ncols, src, w, h);
-
-  do {
-    data = src;
-    error = 0;
-
-    /* for each pixel find the closest cluster */
-    for (y = 0; y < h; ++y) {
-      for (x = 0; x < w; ++x) {
-        guint32 c = enc->palette[data[x]];
-        guint8 r = MVE_RVAL (c), g = MVE_GVAL (c), b = MVE_BVAL (c);
-        guint32 minerr = MVE_APPROX_MAX_ERROR, err;
-        GstMveQuant *best = NULL;
-
-        for (i = 0; i < ncols; ++i) {
-          err = mve_color_dist_rgb (r, g, b, q[i].r, q[i].g, q[i].b);
-
-          if (err < minerr) {
-            minerr = err;
-            best = &q[i];
-          }
-        }
-
-        ++best->hits;
-        best->r_total += r;
-        best->g_total += g;
-        best->b_total += b;
-
-        if (minerr > best->max_error) {
-          best->max_error = minerr;
-          best->max_miss = c;
-        }
-
-        error += minerr;
-      }
-      data += enc->mve->width;
-    }
-  } while (mve_quant_update_clusters (q, ncols));
-
-  /* fill cols array with result colors */
-  for (i = 0; i < ncols; ++i)
-    cols[i] = mve_find_pal_color (enc->palette, q[i].col);
-
-  /* make sure we have unique colors in slots 0/1 and 2/3 */
-  if (cols[0] == cols[1])
-    ++cols[1];
-  if ((ncols > 2) && (cols[2] == cols[3]))
-    ++cols[3];
-
-  /* generate the resulting quantized block */
-  mve_map_to_palette (enc, cols, src, dest, w, h, ncols);
-
-  return error;
-}
-
-static guint32
-mve_block_error (const GstMveEncoderData * enc, const guint8 * b1,
-    const guint8 * b2, guint32 threshold)
-{
-  /* compute error between two blocks in a frame */
-  guint32 e = 0;
-  guint x, y;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x) {
-      e += mve_color_dist (enc->palette[*b1], enc->palette[*b2]);
-
-      /* using a threshold to return early gives a huge performance bonus */
-      if (e >= threshold)
-        return MVE_APPROX_MAX_ERROR;
-      ++b1;
-      ++b2;
-    }
-
-    b1 += enc->mve->width - 8;
-    b2 += enc->mve->width - 8;
-  }
-
-  return e;
-}
-
-static guint32
-mve_block_error_packed (const GstMveEncoderData * enc, const guint8 * block,
-    const guint8 * scratch)
-{
-  /* compute error between a block in a frame and a (continuous) scratch pad */
-  guint32 e = 0;
-  guint x, y;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x) {
-      guint32 c1 = enc->palette[block[x]], c2 = enc->palette[scratch[x]];
-
-      e += mve_color_dist (c1, c2);
-    }
-    block += enc->mve->width;
-    scratch += 8;
-  }
-
-  return e;
-}
-
-static void
-mve_store_block (const GstMveMux * mve, const guint8 * block, guint8 * scratch)
-{
-  /* copy block from frame to a (continuous) scratch pad */
-  guint y;
-
-  for (y = 0; y < 8; ++y) {
-    memcpy (scratch, block, 8);
-    block += mve->width;
-    scratch += 8;
-  }
-}
-
-static void
-mve_restore_block (const GstMveMux * mve, guint8 * block,
-    const guint8 * scratch)
-{
-  /* copy block from scratch pad to frame */
-  guint y;
-
-  for (y = 0; y < 8; ++y) {
-    memcpy (block, scratch, 8);
-    block += mve->width;
-    scratch += 8;
-  }
-}
-
-
-static guint32
-mve_try_vector (GstMveEncoderData * enc, const guint8 * src,
-    const guint8 * frame, gint pn, GstMveApprox * apx)
-{
-  /* try to locate a similar 8x8 block in the given frame using a motion vector */
-  guint i;
-  gint dx, dy;
-  gint fx, fy;
-  guint32 err;
-
-  apx->error = MVE_APPROX_MAX_ERROR;
-
-  for (i = 0; i < 256; ++i) {
-    if (i < 56) {
-      dx = 8 + (i % 7);
-      dy = i / 7;
-    } else {
-      dx = -14 + ((i - 56) % 29);
-      dy = 8 + ((i - 56) / 29);
-    }
-
-    fx = enc->x + dx * pn;
-    fy = enc->y + dy * pn;
-
-    if ((fx >= 0) && (fy >= 0) && (fx + 8 <= enc->mve->width)
-        && (fy + 8 <= enc->mve->height)) {
-      err =
-          mve_block_error (enc, src, frame + fy * enc->mve->width + fx,
-          apx->error);
-      if (err < apx->error) {
-        apx->data[0] = i;
-        mve_store_block (enc->mve, frame + fy * enc->mve->width + fx,
-            apx->block);
-        apx->error = err;
-        if (err == 0)
-          return 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x0 (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* copy a block from the last frame (0 bytes) */
-  if (enc->mve->last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  mve_store_block (enc->mve,
-      GST_BUFFER_DATA (enc->mve->last_frame) +
-      enc->y * enc->mve->width + enc->x, apx->block);
-  apx->error = mve_block_error_packed (enc, src, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x1 (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* copy a block from the second to last frame (0 bytes) */
-  if (enc->mve->second_last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  mve_store_block (enc->mve,
-      GST_BUFFER_DATA (enc->mve->second_last_frame) +
-      enc->y * enc->mve->width + enc->x, apx->block);
-  apx->error = mve_block_error_packed (enc, src, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x2 (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* copy block from 2 frames ago using a motion vector (1 byte) */
-  if (enc->mve->quick_encoding || enc->mve->second_last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  apx->error = mve_try_vector (enc, src,
-      GST_BUFFER_DATA (enc->mve->second_last_frame), 1, apx);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x3 (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* copy 8x8 block from current frame from an up/left block (1 byte) */
-  if (enc->mve->quick_encoding)
-    return MVE_APPROX_MAX_ERROR;
-
-  apx->error = mve_try_vector (enc, src,
-      src - enc->mve->width * enc->y - enc->x, -1, apx);
-  return apx->error;
-}
-
-
-static guint32
-mve_encode_0x4 (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* copy a block from previous frame using a motion vector (-8/-8 to +7/+7) (1 byte) */
-  const GstMveMux *mve = enc->mve;
-  guint32 err;
-  const guint8 *frame;
-  gint x1, x2, xi, y1, y2, yi;
-
-  if (mve->last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  frame = GST_BUFFER_DATA (mve->last_frame);
-
-  x1 = enc->x - 8;
-  x2 = enc->x + 7;
-  if (x1 < 0)
-    x1 = 0;
-  else if (x2 + 8 > mve->width)
-    x2 = mve->width - 8;
-
-  y1 = enc->y - 8;
-  y2 = enc->y + 7;
-  if (y1 < 0)
-    y1 = 0;
-  else if (y2 + 8 > mve->height)
-    y2 = mve->height - 8;
-
-  apx->error = MVE_APPROX_MAX_ERROR;
-
-  for (yi = y1; yi <= y2; ++yi) {
-    guint yoff = yi * mve->width;
-
-    for (xi = x1; xi <= x2; ++xi) {
-      err = mve_block_error (enc, src, frame + yoff + xi, apx->error);
-      if (err < apx->error) {
-        apx->data[0] = ((xi - enc->x + 8) & 0xF) | ((yi - enc->y + 8) << 4);
-        mve_store_block (mve, frame + yoff + xi, apx->block);
-        apx->error = err;
-        if (err == 0)
-          return 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x5 (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* copy a block from previous frame using a motion vector
-     (-128/-128 to +127/+127) (2 bytes) */
-  const GstMveMux *mve = enc->mve;
-  guint32 err;
-  const guint8 *frame;
-  gint x1, x2, xi, y1, y2, yi;
-
-  if (mve->quick_encoding || mve->last_frame == NULL)
-    return MVE_APPROX_MAX_ERROR;
-
-  frame = GST_BUFFER_DATA (mve->last_frame);
-
-  x1 = enc->x - 128;
-  x2 = enc->x + 127;
-  if (x1 < 0)
-    x1 = 0;
-  if (x2 + 8 > mve->width)
-    x2 = mve->width - 8;
-
-  y1 = enc->y - 128;
-  y2 = enc->y + 127;
-  if (y1 < 0)
-    y1 = 0;
-  if (y2 + 8 > mve->height)
-    y2 = mve->height - 8;
-
-  apx->error = MVE_APPROX_MAX_ERROR;
-
-  for (yi = y1; yi <= y2; ++yi) {
-    gint yoff = yi * mve->width;
-
-    for (xi = x1; xi <= x2; ++xi) {
-      err = mve_block_error (enc, src, frame + yoff + xi, apx->error);
-      if (err < apx->error) {
-        apx->data[0] = xi - enc->x;
-        apx->data[1] = yi - enc->y;
-        mve_store_block (mve, frame + yoff + xi, apx->block);
-        apx->error = err;
-        if (err == 0)
-          return 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x7a (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for 2x2 solid blocks (4 bytes) */
-  guint32 pix[4];
-  guint8 mean;
-  guint32 e1, e2;
-  guint x, y;
-  guint8 r[2], g[2], b[2], rb, gb, bb;
-  guint8 *block = apx->block;
-  guint16 mask = 0x0001;
-  guint16 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q2available) {
-    enc->q2error =
-        mve_quantize (enc, src, 8, 8, 0, 2, enc->q2block, enc->q2colors);
-    enc->q2available = TRUE;
-  }
-
-  /* p0 > p1 */
-  apx->data[0] = MAX (enc->q2colors[0], enc->q2colors[1]);
-  apx->data[1] = MIN (enc->q2colors[0], enc->q2colors[1]);
-
-  for (x = 0; x < 2; ++x) {
-    r[x] = MVE_RVAL (enc->palette[apx->data[x]]);
-    g[x] = MVE_GVAL (enc->palette[apx->data[x]]);
-    b[x] = MVE_BVAL (enc->palette[apx->data[x]]);
-  }
-
-  /* calculate mean colors for each 2x2 block and map to global colors */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x, mask <<= 1) {
-      pix[0] = enc->palette[src[0]];
-      pix[1] = enc->palette[src[1]];
-      pix[2] = enc->palette[src[enc->mve->width]];
-      pix[3] = enc->palette[src[enc->mve->width + 1]];
-
-      rb = (MVE_RVAL (pix[0]) + MVE_RVAL (pix[1]) + MVE_RVAL (pix[2]) +
-          MVE_RVAL (pix[3]) + 2) / 4;
-      gb = (MVE_GVAL (pix[0]) + MVE_GVAL (pix[1]) + MVE_GVAL (pix[2]) +
-          MVE_GVAL (pix[3]) + 2) / 4;
-      bb = (MVE_BVAL (pix[0]) + MVE_BVAL (pix[1]) + MVE_BVAL (pix[2]) +
-          MVE_BVAL (pix[3]) + 2) / 4;
-
-      e1 = mve_color_dist_rgb (rb, gb, bb, r[0], g[0], b[0]);
-      e2 = mve_color_dist_rgb (rb, gb, bb, r[1], g[1], b[1]);
-
-      if (e1 > e2) {
-        mean = apx->data[1];
-        flags |= mask;
-      } else {
-        mean = apx->data[0];
-      }
-
-      block[0] = block[1] = block[8] = block[9] = mean;
-
-      src += 2;
-      block += 2;
-    }
-    src += (enc->mve->width * 2) - 8;
-    block += 8;
-  }
-
-  apx->data[2] = flags & 0x00FF;
-  apx->data[3] = (flags & 0xFF00) >> 8;
-
-  apx->error =
-      mve_block_error_packed (enc, src - enc->mve->width * 8, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x7b (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* generic 2-color encoding (10 bytes) */
-  guint x, y;
-  guint8 *data = apx->data;
-  guint8 *block = apx->block;
-
-  if (!enc->q2available) {
-    enc->q2error =
-        mve_quantize (enc, src, 8, 8, 0, 2, enc->q2block, enc->q2colors);
-    enc->q2available = TRUE;
-  }
-
-  memcpy (block, enc->q2block, 64);
-
-  /* p0 <= p1 */
-  data[0] = MIN (enc->q2colors[0], enc->q2colors[1]);
-  data[1] = MAX (enc->q2colors[0], enc->q2colors[1]);
-  data += 2;
-
-  for (y = 0; y < 8; ++y) {
-    guint8 flags = 0;
-
-    for (x = 0x01; x <= 0x80; x <<= 1) {
-      if (*block == apx->data[1])
-        flags |= x;
-      ++block;
-    }
-    *data++ = flags;
-  }
-
-  apx->error = enc->q2error;
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x8a (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for top and bottom half (12 bytes) */
-  guint8 cols[2];
-  guint32 flags;
-  guint i, x, y, shifter;
-  guint8 *block = apx->block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc, src, 8, 4, i, 2, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 > p1 && p2 > p3 */
-    data[0] = MAX (cols[0], cols[1]);
-    data[1] = MIN (cols[0], cols[1]);
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 8; ++x, ++shifter) {
-        if (block[x] == data[1])
-          flags |= 1 << shifter;
-      }
-      block += 8;
-    }
-    data[2] = flags & 0x000000FF;
-    data[3] = (flags & 0x0000FF00) >> 8;
-    data[4] = (flags & 0x00FF0000) >> 16;
-    data[5] = (flags & 0xFF000000) >> 24;
-    data += 6;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x8b (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for left and right half (12 bytes) */
-  guint8 cols[2];
-  guint32 flags;
-  guint i, x, y, shifter;
-  guint8 *block = apx->block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc, src, 4, 8, i, 2, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 > p1 && p2 <= p3 */
-    data[i] = MAX (cols[0], cols[1]);
-    data[i ^ 1] = MIN (cols[0], cols[1]);
-
-    for (y = 0; y < 8; ++y) {
-      for (x = 0; x < 4; ++x, ++shifter) {
-        if (block[x] == data[1])
-          flags |= 1 << shifter;
-      }
-      block += 8;
-    }
-
-    data[2] = flags & 0x000000FF;
-    data[3] = (flags & 0x0000FF00) >> 8;
-    data[4] = (flags & 0x00FF0000) >> 16;
-    data[5] = (flags & 0xFF000000) >> 24;
-    data += 6;
-    block = apx->block + 4;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x8c (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 2-color encoding for each 4x4 quadrant (16 bytes) */
-  guint8 cols[2];
-  guint16 flags;
-  guint i, x, y, shifter;
-  guint8 *block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 4; ++i) {
-    apx->error +=
-        mve_quantize (enc, src, 4, 4, ((i & 1) << 1) | ((i & 2) >> 1), 2,
-        apx->block, cols);
-
-    /* p0 < p1 */
-    if (i == 0) {
-      data[0] = MIN (cols[0], cols[1]);
-      data[1] = MAX (cols[0], cols[1]);
-    } else {
-      data[0] = cols[0];
-      data[1] = cols[1];
-    }
-
-    block = apx->block + ((i / 2) * 4) + ((i % 2) * 32);
-    flags = 0;
-    shifter = 0;
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 4; ++x, ++shifter) {
-        if (block[x] == data[1])
-          flags |= 1 << shifter;
-      }
-      block += 8;
-    }
-
-    data[2] = flags & 0x00FF;
-    data[3] = (flags & 0xFF00) >> 8;
-    data += 4;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9a (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for 2x2 solid blocks (8 bytes) */
-  guint32 p[4];
-  guint32 e, emin;
-  guint i, x, y, mean = 0;
-  guint8 r[4], g[4], b[4], rb, gb, bb;
-  guint8 *block = apx->block;
-  guint shifter = 0;
-  guint32 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  /* p0 <= p1 && p2 > p3 */
-  apx->data[0] = MIN (enc->q4colors[0], enc->q4colors[1]);
-  apx->data[1] = MAX (enc->q4colors[0], enc->q4colors[1]);
-  apx->data[2] = MAX (enc->q4colors[2], enc->q4colors[3]);
-  apx->data[3] = MIN (enc->q4colors[2], enc->q4colors[3]);
-
-  for (i = 0; i < 4; ++i) {
-    r[i] = MVE_RVAL (enc->palette[apx->data[i]]);
-    g[i] = MVE_GVAL (enc->palette[apx->data[i]]);
-    b[i] = MVE_BVAL (enc->palette[apx->data[i]]);
-  }
-
-  /* calculate mean colors for each 2x2 block and map to global colors */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x, shifter += 2) {
-      p[0] = enc->palette[src[0]];
-      p[1] = enc->palette[src[1]];
-      p[2] = enc->palette[src[enc->mve->width]];
-      p[3] = enc->palette[src[enc->mve->width + 1]];
-
-      rb = (MVE_RVAL (p[0]) + MVE_RVAL (p[1]) + MVE_RVAL (p[2]) +
-          MVE_RVAL (p[3]) + 2) / 4;
-      gb = (MVE_GVAL (p[0]) + MVE_GVAL (p[1]) + MVE_GVAL (p[2]) +
-          MVE_GVAL (p[3]) + 2) / 4;
-      bb = (MVE_BVAL (p[0]) + MVE_BVAL (p[1]) + MVE_BVAL (p[2]) +
-          MVE_BVAL (p[3]) + 2) / 4;
-
-      emin = MVE_APPROX_MAX_ERROR;
-      for (i = 0; i < 4; ++i) {
-        e = mve_color_dist_rgb (rb, gb, bb, r[i], g[i], b[i]);
-        if (e < emin) {
-          emin = e;
-          mean = i;
-        }
-      }
-
-      flags |= mean << shifter;
-      block[0] = block[1] = block[8] = block[9] = apx->data[mean];
-
-      src += 2;
-      block += 2;
-    }
-    src += (enc->mve->width * 2) - 8;
-    block += 8;
-  }
-
-  apx->data[4] = flags & 0x000000FF;
-  apx->data[5] = (flags & 0x0000FF00) >> 8;
-  apx->data[6] = (flags & 0x00FF0000) >> 16;
-  apx->data[7] = (flags & 0xFF000000) >> 24;
-
-  apx->error =
-      mve_block_error_packed (enc, src - 8 * enc->mve->width, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9b (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for 2x1 solid blocks (12 bytes) */
-  guint32 p[2];
-  guint32 e, emin;
-  guint i, x, y, mean = 0;
-  guint8 r[4], g[4], b[4], rb, gb, bb;
-  guint8 *data = apx->data;
-  guint8 *block = apx->block;
-  guint shifter = 0;
-  guint32 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  /* p0 > p1 && p2 <= p3 */
-  data[0] = MAX (enc->q4colors[0], enc->q4colors[1]);
-  data[1] = MIN (enc->q4colors[0], enc->q4colors[1]);
-  data[2] = MIN (enc->q4colors[2], enc->q4colors[3]);
-  data[3] = MAX (enc->q4colors[2], enc->q4colors[3]);
-
-  for (i = 0; i < 4; ++i) {
-    r[i] = MVE_RVAL (enc->palette[data[i]]);
-    g[i] = MVE_GVAL (enc->palette[data[i]]);
-    b[i] = MVE_BVAL (enc->palette[data[i]]);
-  }
-  data += 4;
-
-  /* calculate mean colors for each 2x1 block and map to global colors */
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 4; ++x, shifter += 2) {
-      p[0] = enc->palette[src[0]];
-      p[1] = enc->palette[src[1]];
-      rb = (MVE_RVAL (p[0]) + MVE_RVAL (p[1]) + 1) / 2;
-      gb = (MVE_GVAL (p[0]) + MVE_GVAL (p[1]) + 1) / 2;
-      bb = (MVE_BVAL (p[0]) + MVE_BVAL (p[1]) + 1) / 2;
-
-      emin = MVE_APPROX_MAX_ERROR;
-      for (i = 0; i < 4; ++i) {
-        e = mve_color_dist_rgb (rb, gb, bb, r[i], g[i], b[i]);
-        if (e < emin) {
-          emin = e;
-          mean = i;
-        }
-      }
-
-      flags |= mean << shifter;
-      block[0] = block[1] = apx->data[mean];
-
-      src += 2;
-      block += 2;
-    }
-
-    if ((y == 3) || (y == 7)) {
-      data[0] = flags & 0x000000FF;
-      data[1] = (flags & 0x0000FF00) >> 8;
-      data[2] = (flags & 0x00FF0000) >> 16;
-      data[3] = (flags & 0xFF000000) >> 24;
-      data += 4;
-
-      flags = 0;
-      shifter = 0;
-    }
-
-    src += enc->mve->width - 8;
-  }
-
-  apx->error =
-      mve_block_error_packed (enc, src - 8 * enc->mve->width, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9c (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for 1x2 solid blocks (12 bytes) */
-  guint32 p[2];
-  guint32 e, emin;
-  guint i, x, y, mean = 0;
-  guint8 r[4], g[4], b[4], rb, gb, bb;
-  guint8 *data = apx->data;
-  guint8 *block = apx->block;
-  guint shifter = 0;
-  guint32 flags = 0;
-
-  /* calculate mean colors for the entire block */
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  /* p0 > p1 && p2 > p3 */
-  data[0] = MAX (enc->q4colors[0], enc->q4colors[1]);
-  data[1] = MIN (enc->q4colors[0], enc->q4colors[1]);
-  data[2] = MAX (enc->q4colors[2], enc->q4colors[3]);
-  data[3] = MIN (enc->q4colors[2], enc->q4colors[3]);
-
-  for (i = 0; i < 4; ++i) {
-    r[i] = MVE_RVAL (enc->palette[data[i]]);
-    g[i] = MVE_GVAL (enc->palette[data[i]]);
-    b[i] = MVE_BVAL (enc->palette[data[i]]);
-  }
-  data += 4;
-
-  /* calculate mean colors for each 1x2 block and map to global colors */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 8; ++x, shifter += 2) {
-      p[0] = enc->palette[src[0]];
-      p[1] = enc->palette[src[enc->mve->width]];
-      rb = (MVE_RVAL (p[0]) + MVE_RVAL (p[1]) + 1) / 2;
-      gb = (MVE_GVAL (p[0]) + MVE_GVAL (p[1]) + 1) / 2;
-      bb = (MVE_BVAL (p[0]) + MVE_BVAL (p[1]) + 1) / 2;
-
-      emin = MVE_APPROX_MAX_ERROR;
-      for (i = 0; i < 4; ++i) {
-        e = mve_color_dist_rgb (rb, gb, bb, r[i], g[i], b[i]);
-        if (e < emin) {
-          emin = e;
-          mean = i;
-        }
-      }
-
-      flags |= mean << shifter;
-      block[0] = block[8] = apx->data[mean];
-
-      ++src;
-      ++block;
-    }
-
-    if ((y == 1) || (y == 3)) {
-      data[0] = flags & 0x000000FF;
-      data[1] = (flags & 0x0000FF00) >> 8;
-      data[2] = (flags & 0x00FF0000) >> 16;
-      data[3] = (flags & 0xFF000000) >> 24;
-      data += 4;
-
-      flags = 0;
-      shifter = 0;
-    }
-
-    src += (enc->mve->width * 2) - 8;
-    block += 8;
-  }
-
-  apx->error =
-      mve_block_error_packed (enc, src - 8 * enc->mve->width, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0x9d (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* generic 4-color encoding (20 bytes) */
-  guint32 flags = 0;
-  guint shifter = 0;
-  guint i, x, y;
-  guint8 *data = apx->data;
-  guint8 *block = apx->block;
-
-  if (!enc->q4available) {
-    enc->q4error =
-        mve_quantize (enc, src, 8, 8, 0, 4, enc->q4block, enc->q4colors);
-    enc->q4available = TRUE;
-  }
-
-  memcpy (block, enc->q4block, 64);
-
-  /* p0 <= p1 && p2 <= p3 */
-  data[0] = MIN (enc->q4colors[0], enc->q4colors[1]);
-  data[1] = MAX (enc->q4colors[0], enc->q4colors[1]);
-  data[2] = MIN (enc->q4colors[2], enc->q4colors[3]);
-  data[3] = MAX (enc->q4colors[2], enc->q4colors[3]);
-  data += 4;
-
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; ++x, shifter += 2) {
-
-      for (i = 0; i < 3; ++i) {
-        if (*block == apx->data[i])
-          break;
-      }
-
-      flags |= i << shifter;
-      ++block;
-    }
-
-    data[0] = flags & 0x000000FF;
-    data[1] = (flags & 0x0000FF00) >> 8;
-    data += 2;
-    shifter = 0;
-    flags = 0;
-  }
-
-  apx->error = enc->q4error;
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xaa (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for top and bottom half (24 bytes) */
-  guint8 cols[4];
-  guint32 flags;
-  guint i, j, x, y, shifter;
-  guint8 *block = apx->block;
-  guint8 *data = apx->data;
-  const guint8 *p;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc, src, 8, 4, i, 4, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 > p1 && p4 > p5 */
-    data[0] = MAX (cols[0], cols[1]);
-    data[1] = MIN (cols[0], cols[1]);
-    data[2] = cols[2];
-    data[3] = cols[3];
-    p = data;
-    data += 4;
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 8; ++x, shifter += 2) {
-        for (j = 0; j < 3; ++j) {
-          if (block[x] == p[j])
-            break;
-        }
-        flags |= j << shifter;
-      }
-      block += 8;
-
-      if ((y == 1) || (y == 3)) {
-        data[0] = flags & 0x000000FF;
-        data[1] = (flags & 0x0000FF00) >> 8;
-        data[2] = (flags & 0x00FF0000) >> 16;
-        data[3] = (flags & 0xFF000000) >> 24;
-        data += 4;
-        flags = 0;
-        shifter = 0;
-      }
-    }
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xab (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for left and right half (24 bytes) */
-  guint8 cols[4];
-  guint32 flags;
-  guint i, j, x, y, shifter;
-  guint8 *block = apx->block;
-  guint8 *data = apx->data;
-  const guint8 *p;
-
-  apx->error = 0;
-
-  for (i = 0; i < 2; ++i) {
-    apx->error += mve_quantize (enc, src, 4, 8, i, 4, apx->block, cols);
-
-    flags = 0;
-    shifter = 0;
-
-    /* p0 > p1 && p4 <= p5 */
-    data[i] = MAX (cols[0], cols[1]);
-    data[i ^ 1] = MIN (cols[0], cols[1]);
-    data[2] = cols[2];
-    data[3] = cols[3];
-    p = data;
-    data += 4;
-
-    for (y = 0; y < 8; ++y) {
-      for (x = 0; x < 4; ++x, shifter += 2) {
-        for (j = 0; j < 3; ++j) {
-          if (block[x] == p[j])
-            break;
-        }
-        flags |= j << shifter;
-      }
-      block += 8;
-
-      if ((y == 3) || (y == 7)) {
-        data[0] = flags & 0x000000FF;
-        data[1] = (flags & 0x0000FF00) >> 8;
-        data[2] = (flags & 0x00FF0000) >> 16;
-        data[3] = (flags & 0xFF000000) >> 24;
-        data += 4;
-        flags = 0;
-        shifter = 0;
-      }
-    }
-    block = apx->block + 4;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xac (GstMveEncoderData * enc, const guint8 * src,
-    GstMveApprox * apx)
-{
-  /* 4-color encoding for each 4x4 quadrant (32 bytes) */
-  guint8 cols[4];
-  guint32 flags;
-  guint i, j, x, y, shifter;
-  guint8 *block;
-  guint8 *data = apx->data;
-
-  apx->error = 0;
-
-  for (i = 0; i < 4; ++i) {
-    apx->error +=
-        mve_quantize (enc, src, 4, 4, ((i & 1) << 1) | ((i & 2) >> 1), 4,
-        apx->block, cols);
-
-    /* p0 <= p1 */
-    data[0] = MIN (cols[0], cols[1]);
-    data[1] = MAX (cols[0], cols[1]);
-    data[2] = cols[2];
-    data[3] = cols[3];
-
-    block = apx->block + ((i / 2) * 4) + ((i % 2) * 32);
-    flags = 0;
-    shifter = 0;
-
-    for (y = 0; y < 4; ++y) {
-      for (x = 0; x < 4; ++x, shifter += 2) {
-        for (j = 0; j < 3; ++j) {
-          if (block[x] == data[j])
-            break;
-        }
-        flags |= j << shifter;
-      }
-      block += 8;
-    }
-
-    data[4] = flags & 0x000000FF;
-    data[5] = (flags & 0x0000FF00) >> 8;
-    data[6] = (flags & 0x00FF0000) >> 16;
-    data[7] = (flags & 0xFF000000) >> 24;
-    data += 8;
-  }
-
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xb (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* 64-color encoding (each pixel in block is a different color) (64 bytes) */
-  mve_store_block (enc->mve, src, apx->block);
-  memcpy (apx->data, apx->block, 64);
-  apx->error = 0;
-
-  return 0;
-}
-
-static guint32
-mve_encode_0xc (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* 16-color block encoding: each 2x2 block is a different color (16 bytes) */
-  guint i = 0, x, y;
-  const guint w = enc->mve->width;
-  guint16 r, g, b;
-
-  /* calculate median color for each 2x2 block */
-  for (y = 0; y < 4; ++y) {
-    for (x = 0; x < 4; ++x) {
-      guint32 p = enc->palette[src[0]];
-
-      r = MVE_RVAL (p) + 2;
-      g = MVE_GVAL (p) + 2;
-      b = MVE_BVAL (p) + 2;
-
-      p = enc->palette[src[1]];
-      r += MVE_RVAL (p);
-      g += MVE_GVAL (p);
-      b += MVE_BVAL (p);
-
-      p = enc->palette[src[w]];
-      r += MVE_RVAL (p);
-      g += MVE_GVAL (p);
-      b += MVE_BVAL (p);
-
-      p = enc->palette[src[w + 1]];
-      r += MVE_RVAL (p);
-      g += MVE_GVAL (p);
-      b += MVE_BVAL (p);
-
-      apx->block[i] = apx->block[i + 1] = apx->block[i + 2] =
-          apx->block[i + 3] = apx->data[i >> 2] =
-          mve_find_pal_color (enc->palette, MVE_COL (r >> 2, g >> 2, b >> 2));
-
-      i += 4;
-      src += 2;
-    }
-    src += (w * 2) - 8;
-  }
-
-  apx->error = mve_block_error_packed (enc, src - (8 * w), apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xd (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* 4-color block encoding: each 4x4 block is a different color (4 bytes) */
-  guint i, y;
-
-  /* calculate median color for each 4x4 block */
-  for (i = 0; i < 4; ++i) {
-    guint8 median =
-        mve_median_sub (enc, src, 4, 4, ((i & 1) << 1) | ((i & 2) >> 1));
-    guint8 *block = apx->block + ((i / 2) * 4) + ((i % 2) * 32);
-
-    for (y = 0; y < 4; ++y) {
-      memset (block, median, 4);
-      block += 8;
-    }
-
-    apx->data[i] = median;
-  }
-
-  apx->error = mve_block_error_packed (enc, src, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xe (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* 1-color encoding: the whole block is 1 solid color (1 bytes) */
-  guint8 median = mve_median (enc, src);
-
-  memset (apx->block, median, 64);
-
-  apx->data[0] = median;
-  apx->error = mve_block_error_packed (enc, src, apx->block);
-  return apx->error;
-}
-
-static guint32
-mve_encode_0xf (GstMveEncoderData * enc, const guint8 * src, GstMveApprox * apx)
-{
-  /* 2 colors dithered encoding (2 bytes) */
-  guint i, x, y;
-  guint32 r[2] = { 0 }, g[2] = {
-  0}, b[2] = {
-  0};
-  guint8 col[2];
-
-  /* find medians for both colors */
-  for (y = 0; y < 8; ++y) {
-    for (x = 0; x < 8; x += 2) {
-      guint16 p = src[x];
-
-      r[y & 1] += MVE_RVAL (p);
-      g[y & 1] += MVE_GVAL (p);
-      b[y & 1] += MVE_BVAL (p);
-
-      p = src[x + 1];
-      r[(y & 1) ^ 1] += MVE_RVAL (p);
-      g[(y & 1) ^ 1] += MVE_GVAL (p);
-      b[(y & 1) ^ 1] += MVE_BVAL (p);
-    }
-    src += enc->mve->width;
-  }
-  col[0] = mve_find_pal_color (enc->palette,
-      MVE_COL ((r[0] + 16) / 32, (g[0] + 16) / 32, (b[0] + 16) / 32));
-  col[1] = mve_find_pal_color (enc->palette,
-      MVE_COL ((r[1] + 16) / 32, (g[1] + 16) / 32, (b[1] + 16) / 32));
-
-  /* store block after encoding */
-  for (i = 0, y = 0; y < 8; ++y) {
-    for (x = 0; x < 4; ++x) {
-      apx->block[i++] = col[y & 1];
-      apx->block[i++] = col[(y & 1) ^ 1];
-    }
-  }
-
-  apx->data[0] = col[0];
-  apx->data[1] = col[1];
-  apx->error = mve_block_error_packed (enc,
-      src - (8 * enc->mve->width), apx->block);
-  return apx->error;
-}
-
-/* all available encodings in the preferred order,
-   i.e. in ascending encoded size */
-static const GstMveEncoding mve_encodings[] = {
-  {0x1, 0, mve_encode_0x1},
-  {0x0, 0, mve_encode_0x0},
-  {0xe, 1, mve_encode_0xe},
-  {0x3, 1, mve_encode_0x3},
-  {0x4, 1, mve_encode_0x4},
-  {0x2, 1, mve_encode_0x2},
-  {0xf, 2, mve_encode_0xf},
-  {0x5, 2, mve_encode_0x5},
-  {0xd, 4, mve_encode_0xd},
-  {0x7, 4, mve_encode_0x7a},
-  {0x9, 8, mve_encode_0x9a},
-  {0x7, 10, mve_encode_0x7b},
-  {0x8, 12, mve_encode_0x8a},
-  {0x8, 12, mve_encode_0x8b},
-  {0x9, 12, mve_encode_0x9b},
-  {0x9, 12, mve_encode_0x9c},
-  {0xc, 16, mve_encode_0xc},
-  {0x8, 16, mve_encode_0x8c},
-  {0x9, 20, mve_encode_0x9d},
-  {0xa, 24, mve_encode_0xaa},
-  {0xa, 24, mve_encode_0xab},
-  {0xa, 32, mve_encode_0xac},
-  {0xb, 64, mve_encode_0xb}
-};
-
-static gboolean
-mve_reorder_solution (GArray ** solution, guint16 n)
-{
-  /* do a binary search to find the position to reinsert the modified element */
-  /* the block we need to reconsider is always at position 0 */
-  /* return TRUE if this block only has 1 encoding left and can be dropped */
-  if (mve_comp_solution (&solution[0], &solution[1]) <= 0)
-    return FALSE;               /* already sorted */
-
-  else if (solution[0]->len <= 1)
-    /* drop this element from further calculations since we cannot improve here */
-    return TRUE;
-
-  else {
-    /* we know the error value can only get worse, so we can actually start at 1 */
-    guint lower = 1;
-    guint upper = n - 1;
-    gint cmp;
-    guint idx = 0;
-
-    while (upper > lower) {
-      idx = lower + ((upper - lower) / 2);
-
-      cmp = mve_comp_solution (&solution[0], &solution[idx]);
-
-      if (cmp < 0) {
-        upper = idx;
-      } else if (cmp > 0) {
-        lower = ++idx;
-      } else {
-        upper = lower = idx;
-      }
-    }
-
-    if (idx > 0) {
-      /* rearrange array members in new order */
-      GArray *a = solution[0];
-
-      memcpy (&solution[0], &solution[1], sizeof (GArray *) * idx);
-      solution[idx] = a;
-    }
-  }
-  return FALSE;
-}
-
-static guint32
-gst_mve_find_solution (GArray ** approx, guint16 n, guint32 size, guint16 max)
-{
-  /* build an array of approximations we can shuffle around */
-  GstMveApprox *sol_apx;
-  GArray **solution = g_malloc (sizeof (GArray *) * n);
-  GArray **current = solution;
-
-  memcpy (solution, approx, sizeof (GArray *) * n);
-
-  qsort (solution, n, sizeof (GArray *), mve_comp_solution);
-
-  do {
-    /* array is now sorted by error of the next to optimal approximation;
-       drop optimal approximation for the best block */
-
-    /* unable to reduce size further */
-    if (current[0]->len <= 1)
-      break;
-
-    sol_apx = &g_array_index (current[0], GstMveApprox, current[0]->len - 1);
-    size -= mve_encodings[sol_apx->type].size;
-    g_array_remove_index_fast (current[0], current[0]->len - 1);
-    sol_apx = &g_array_index (current[0], GstMveApprox, current[0]->len - 1);
-    size += mve_encodings[sol_apx->type].size;
-
-    if (mve_reorder_solution (current, n)) {
-      ++current;
-      --n;
-    }
-  } while (size > max);
-
-  g_free (solution);
-
-  return size;
-}
-
-GstFlowReturn
-mve_encode_frame8 (GstMveMux * mve, GstBuffer * frame, const guint32 * palette,
-    guint16 max_data)
-{
-  guint8 *src;
-  GstFlowReturn ret = GST_FLOW_ERROR;
-  guint8 *cm = mve->chunk_code_map;
-  GArray **approx;
-  GstMveApprox apx;
-  GstMveEncoderData enc;
-  const guint16 blocks = (mve->width * mve->height) / 64;
-  guint32 encoded_size = 0;
-  guint i = 0, x, y;
-
-  src = GST_BUFFER_DATA (frame);
-
-  approx = g_malloc (sizeof (GArray *) * blocks);
-
-  enc.mve = mve;
-  enc.palette = palette;
-
-  for (enc.y = 0; enc.y < mve->height; enc.y += 8) {
-    for (enc.x = 0; enc.x < mve->width; enc.x += 8) {
-      guint32 err, last_err = MVE_APPROX_MAX_ERROR;
-      guint type = 0;
-      guint best = 0;
-
-      enc.q2available = enc.q4available = FALSE;
-      approx[i] = g_array_new (FALSE, FALSE, sizeof (GstMveApprox));
-
-      do {
-        err = mve_encodings[type].approx (&enc, src, &apx);
-
-        if (err < last_err) {
-          apx.type = best = type;
-          g_array_append_val (approx[i], apx);
-          last_err = err;
-        }
-
-        ++type;
-      } while (last_err != 0);
-
-      encoded_size += mve_encodings[best].size;
-      ++i;
-      src += 8;
-    }
-    src += 7 * mve->width;
-  }
-
-  /* find best solution with size constraints */
-  GST_DEBUG_OBJECT (mve, "encoded frame %u in %u bytes (lossless)",
-      mve->video_frames + 1, encoded_size);
-
-#if 0
-  /* FIXME */
-  src = GST_BUFFER_DATA (frame);
-  for (i = 0, y = 0; y < mve->height; y += 8) {
-    for (x = 0; x < mve->width; x += 8, ++i) {
-      GstMveApprox *sol =
-          &g_array_index (approx[i], GstMveApprox, approx[i]->len - 1);
-      guint opcode = mve_encodings[sol->type].opcode;
-      guint j, k;
-
-      if (sol->error > 0)
-        GST_WARNING_OBJECT (mve, "error is %lu for %d/%d (0x%x)", sol->error, x,
-            y, opcode);
-
-      for (j = 0; j < 8; ++j) {
-        guint8 *o = src + j * mve->width;
-        guint8 *c = sol->block + j * 8;
-
-        if (memcmp (o, c, 8)) {
-          GST_WARNING_OBJECT (mve, "opcode 0x%x (type %d) at %d/%d, line %d:",
-              opcode, sol->type, x, y, j + 1);
-          for (k = 0; k < 8; ++k) {
-            o = src + k * mve->width;
-            c = sol->block + k * 8;
-            GST_WARNING_OBJECT (mve,
-                "%d should be: %4d  %4d  %4d  %4d  %4d  %4d  %4d  %4d", k, o[0],
-                o[1], o[2], o[3], o[4], o[5], o[6], o[7]);
-            GST_WARNING_OBJECT (mve,
-                "%d but is   : %4d  %4d  %4d  %4d  %4d  %4d  %4d  %4d", k, c[0],
-                c[1], c[2], c[3], c[4], c[5], c[6], c[7]);
-          }
-        }
-      }
-      src += 8;
-    }
-    src += 7 * mve->width;
-  }
-#endif
-
-  if (encoded_size > max_data) {
-    encoded_size =
-        gst_mve_find_solution (approx, blocks, encoded_size, max_data);
-    if (encoded_size > max_data) {
-      GST_ERROR_OBJECT (mve, "unable to compress frame to less than %d bytes",
-          encoded_size);
-      for (i = 0; i < blocks; ++i)
-        g_array_free (approx[i], TRUE);
-
-      goto done;
-    }
-    GST_DEBUG_OBJECT (mve, "compressed frame %u to %u bytes (lossy)",
-        mve->video_frames + 1, encoded_size);
-  }
-
-  mve->chunk_video = g_byte_array_sized_new (encoded_size);
-
-  /* encode */
-  src = GST_BUFFER_DATA (frame);
-  for (i = 0, y = 0; y < mve->height; y += 8) {
-    for (x = 0; x < mve->width; x += 8, ++i) {
-      GstMveApprox *sol =
-          &g_array_index (approx[i], GstMveApprox, approx[i]->len - 1);
-      guint opcode = mve_encodings[sol->type].opcode;
-
-      g_byte_array_append (mve->chunk_video, sol->data,
-          mve_encodings[sol->type].size);
-
-      if (i & 1) {
-        *cm |= opcode << 4;
-        ++cm;
-      } else
-        *cm = opcode;
-
-      /* modify the frame to match the image we actually encoded */
-      if (sol->error > 0)
-        mve_restore_block (mve, src, sol->block);
-
-      src += 8;
-      g_array_free (approx[i], TRUE);
-    }
-    src += 7 * mve->width;
-  }
-
-  ret = GST_FLOW_OK;
-
-done:
-  g_free (approx);
-
-  return ret;
-}
diff --git a/gst/nuvdemux/Makefile.am b/gst/nuvdemux/Makefile.am
deleted file mode 100644 (file)
index aecae51..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-plugin_LTLIBRARIES = libgstnuvdemux.la
-
-libgstnuvdemux_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS)
-libgstnuvdemux_la_LIBADD = $(GST_BASE_LIBS)
-libgstnuvdemux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstnuvdemux_la_SOURCES = gstnuvdemux.c
-libgstnuvdemux_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstnuvdemux.h
diff --git a/gst/nuvdemux/gstnuvdemux.c b/gst/nuvdemux/gstnuvdemux.c
deleted file mode 100644 (file)
index 88968f0..0000000
+++ /dev/null
@@ -1,940 +0,0 @@
-/* GStreamer NUV demuxer
- * Copyright (C) <2006> Renato Araujo Oliveira Filho <renato.filho@indt.org.br>
- *                      Rosfran Borges <rosfran.borges@indt.org.br>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/* Element-Checklist-Version: 5 */
-
-/**
- * SECTION:element-nuvdemux
- * @see_also: mythtvsrc
- *
- * Demuxes MythTVs NuppelVideo .nuv file into raw or compressed audio and/or
- * video streams.
- * 
- * This element currently only supports pull-based scheduling.
- * 
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch-1.0 filesrc test.nuv ! nuvdemux name=demux  demux.audio_00 ! decodebin ! audioconvert ! audioresample ! autoaudiosink   demux.video_00 ! queue ! decodebin ! videoconvert ! videoscale ! autovideosink
- * ]| Play (parse and decode) an .nuv file and try to output it to
- * an automatically detected soundcard and videosink. If the NUV file contains
- * compressed audio or video data, this will only work if you have the
- * right decoder elements/plugins installed.
- * </refsect2>
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/gsterror.h>
-#include <gst/gstplugin.h>
-#include <string.h>
-
-#include "gst/gst-i18n-plugin.h"
-#include "gstnuvdemux.h"
-
-GST_DEBUG_CATEGORY_STATIC (nuvdemux_debug);
-#define GST_CAT_DEFAULT nuvdemux_debug
-
-
-#define GST_FLOW_ERROR_NO_DATA  -101
-
-GST_DEBUG_CATEGORY_EXTERN (GST_CAT_EVENT);
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-nuv"));
-
-static GstStaticPadTemplate audio_src_template =
-GST_STATIC_PAD_TEMPLATE ("audio_src",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate video_src_template =
-GST_STATIC_PAD_TEMPLATE ("video_src",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS_ANY);
-
-/* NUV Demux indexes init/dispose callers */
-static void gst_nuv_demux_finalize (GObject * object);
-static GstStateChangeReturn gst_nuv_demux_change_state (GstElement * element,
-    GstStateChange transition);
-static void gst_nuv_demux_loop (GstPad * pad);
-static GstFlowReturn gst_nuv_demux_chain (GstPad * pad, GstBuffer * buf);
-static GstFlowReturn gst_nuv_demux_play (GstPad * pad);
-static gboolean gst_nuv_demux_sink_activate_pull (GstPad * sinkpad,
-    gboolean active);
-static gboolean gst_nuv_demux_sink_activate (GstPad * sinkpad);
-static GstFlowReturn gst_nuv_demux_read_bytes (GstNuvDemux * nuv, guint64 size,
-    gboolean move, GstBuffer ** buffer);
-static void gst_nuv_demux_reset (GstNuvDemux * nuv);
-static gboolean gst_nuv_demux_handle_sink_event (GstPad * sinkpad,
-    GstEvent * event);
-static void gst_nuv_demux_destoy_src_pad (GstNuvDemux * nuv);
-static void gst_nuv_demux_send_eos (GstNuvDemux * nuv);
-
-/* GObject methods */
-GST_BOILERPLATE (GstNuvDemux, gst_nuv_demux, GstElement, GST_TYPE_ELEMENT);
-
-#if G_BYTE_ORDER == G_BIG_ENDIAN
-static inline gdouble
-_gdouble_swap_le_be (gdouble * d)
-{
-  union
-  {
-    guint64 i;
-    gdouble d;
-  } u;
-
-  u.d = *d;
-  u.i = GUINT64_SWAP_LE_BE (u.i);
-  return u.d;
-}
-
-#define READ_DOUBLE_FROM_LE(d) (_gdouble_swap_le_be((gdouble* ) d))
-#else /* G_BYTE_ORDER != G_BIG_ENDIAN */
-#define READ_DOUBLE_FROM_LE(d) *((gdouble* ) (d))
-#endif /* G_BYTE_ORDER != G_BIG_ENDIAN */
-
-
-static void
-gst_nuv_demux_base_init (gpointer klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &audio_src_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &video_src_template);
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_set_static_metadata (element_class, "Nuv demuxer",
-      "Codec/Demuxer",
-      "Demultiplex a MythTV NuppleVideo .nuv file into audio and video",
-      "Renato Araujo Oliveira Filho <renato.filho@indt.org.br>,"
-      "Rosfran Borges <rosfran.borges@indt.org.br>");
-}
-
-static void
-gst_nuv_demux_class_init (GstNuvDemuxClass * klass)
-{
-  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-
-  gobject_class->finalize = gst_nuv_demux_finalize;
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_nuv_demux_change_state);
-}
-
-static void
-gst_nuv_demux_init (GstNuvDemux * nuv, GstNuvDemuxClass * nuv_class)
-{
-  nuv->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-
-  gst_pad_set_activate_function (nuv->sinkpad, gst_nuv_demux_sink_activate);
-
-  gst_pad_set_activatepull_function (nuv->sinkpad,
-      gst_nuv_demux_sink_activate_pull);
-
-  gst_pad_set_chain_function (nuv->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_nuv_demux_chain));
-
-  gst_pad_set_event_function (nuv->sinkpad, gst_nuv_demux_handle_sink_event);
-
-  gst_element_add_pad (GST_ELEMENT (nuv), nuv->sinkpad);
-
-  nuv->adapter = NULL;
-  nuv->mpeg_buffer = NULL;
-  nuv->h = NULL;
-  nuv->eh = NULL;
-  nuv->fh = NULL;
-  gst_nuv_demux_reset (nuv);
-}
-
-static void
-gst_nuv_demux_finalize (GObject * object)
-{
-  GstNuvDemux *nuv = GST_NUV_DEMUX (object);
-
-  if (nuv->mpeg_buffer != NULL) {
-    gst_buffer_unref (nuv->mpeg_buffer);
-  }
-
-  gst_nuv_demux_destoy_src_pad (nuv);
-  gst_nuv_demux_reset (nuv);
-  if (nuv->adapter != NULL) {
-    g_object_unref (nuv->adapter);
-    nuv->adapter = NULL;
-  }
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-/*****************************************************************************
- * Utils functions
- *****************************************************************************/
-
-static gboolean
-gst_nuv_demux_handle_sink_event (GstPad * sinkpad, GstEvent * event)
-{
-  gboolean res = FALSE;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_NEWSEGMENT:
-      res = TRUE;
-      break;
-    default:
-      return gst_pad_event_default (sinkpad, event);
-      break;
-  }
-
-  gst_event_unref (event);
-  return res;
-}
-
-
-/* HeaderLoad:
- */
-static GstFlowReturn
-gst_nuv_demux_header_load (GstNuvDemux * nuv, nuv_header ** h_ret)
-{
-  GstBuffer *buffer = NULL;
-  GstFlowReturn res;
-  nuv_header *h;
-
-  res = gst_nuv_demux_read_bytes (nuv, 72, TRUE, &buffer);
-  if (res != GST_FLOW_OK)
-    return res;
-
-  h = g_new0 (nuv_header, 1);
-
-  memcpy (h->id, buffer->data, 12);
-  memcpy (h->version, buffer->data + 12, 5);
-  h->i_width = GST_READ_UINT32_LE (&buffer->data[20]);
-  h->i_height = GST_READ_UINT32_LE (&buffer->data[24]);
-  h->i_width_desired = GST_READ_UINT32_LE (&buffer->data[28]);
-  h->i_height_desired = GST_READ_UINT32_LE (&buffer->data[32]);
-  h->i_mode = buffer->data[36];
-  h->d_aspect = READ_DOUBLE_FROM_LE (&buffer->data[40]);
-  h->d_fps = READ_DOUBLE_FROM_LE (&buffer->data[48]);
-  h->i_video_blocks = GST_READ_UINT32_LE (&buffer->data[56]);
-  h->i_audio_blocks = GST_READ_UINT32_LE (&buffer->data[60]);
-  h->i_text_blocks = GST_READ_UINT32_LE (&buffer->data[64]);
-  h->i_keyframe_distance = GST_READ_UINT32_LE (&buffer->data[68]);
-
-  GST_DEBUG_OBJECT (nuv,
-      "nuv: h=%s v=%s %dx%d a=%f fps=%f v=%d a=%d t=%d kfd=%d", h->id,
-      h->version, h->i_width, h->i_height, h->d_aspect, h->d_fps,
-      h->i_video_blocks, h->i_audio_blocks, h->i_text_blocks,
-      h->i_keyframe_distance);
-
-  *h_ret = h;
-  gst_buffer_unref (buffer);
-  return res;
-}
-
-static GstFlowReturn
-gst_nuv_demux_stream_header_data (GstNuvDemux * nuv)
-{
-  GstFlowReturn res = gst_nuv_demux_header_load (nuv, &nuv->h);
-
-  if (res == GST_FLOW_OK)
-    nuv->state = GST_NUV_DEMUX_EXTRA_DATA;
-  return res;
-}
-
-/*
- * Read NUV file tag
- */
-static GstFlowReturn
-gst_nuv_demux_stream_file_header (GstNuvDemux * nuv)
-{
-  GstFlowReturn res = GST_FLOW_OK;
-  GstBuffer *file_header = NULL;
-
-  res = gst_nuv_demux_read_bytes (nuv, 12, FALSE, &file_header);
-  if (res != GST_FLOW_OK) {
-    return res;
-  } else {
-    if (strncmp ((gchar *) file_header->data, "MythTVVideo", 11) ||
-        strncmp ((gchar *) file_header->data, "NuppelVideo", 11)) {
-      nuv->state = GST_NUV_DEMUX_HEADER_DATA;
-    } else {
-      GST_DEBUG_OBJECT (nuv, "error parsing file header");
-      nuv->state = GST_NUV_DEMUX_INVALID_DATA;
-      res = GST_FLOW_ERROR;
-    }
-  }
-  if (file_header != NULL) {
-    gst_buffer_unref (file_header);
-  }
-  return res;
-}
-
-/* FrameHeaderLoad:
- */
-static GstFlowReturn
-gst_nuv_demux_frame_header_load (GstNuvDemux * nuv, nuv_frame_header ** h_ret)
-{
-  unsigned char *data;
-  nuv_frame_header *h;
-  GstBuffer *buf = NULL;
-
-  GstFlowReturn res = gst_nuv_demux_read_bytes (nuv, 12, TRUE, &buf);
-
-  if (res != GST_FLOW_OK) {
-    if (buf != NULL) {
-      gst_buffer_unref (buf);
-    }
-    return res;
-  }
-
-  h = g_new0 (nuv_frame_header, 1);
-  data = buf->data;
-
-  h->i_type = data[0];
-  h->i_compression = data[1];
-  h->i_keyframe = data[2];
-  h->i_filters = data[3];
-
-  h->i_timecode = GST_READ_UINT32_LE (&data[4]);
-  h->i_length = GST_READ_UINT32_LE (&data[8]);
-  GST_DEBUG_OBJECT (nuv, "frame hdr: t=%c c=%c k=%d f=0x%x timecode=%d l=%d",
-      h->i_type,
-      h->i_compression ? h->i_compression : ' ',
-      h->i_keyframe ? h->i_keyframe : ' ',
-      h->i_filters, h->i_timecode, h->i_length);
-
-  *h_ret = h;
-  gst_buffer_unref (buf);
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_nuv_demux_extended_header_load (GstNuvDemux * nuv,
-    nuv_extended_header ** h_ret)
-{
-  unsigned char *data;
-  GstBuffer *buff = NULL;
-  nuv_extended_header *h;
-
-
-  GstFlowReturn res = gst_nuv_demux_read_bytes (nuv, 512, TRUE, &buff);
-
-  if (res != GST_FLOW_OK) {
-    if (buff != NULL) {
-      gst_buffer_unref (buff);
-    }
-    return res;
-  }
-
-  h = g_new0 (nuv_extended_header, 1);
-  data = buff->data;
-  h->i_version = GST_READ_UINT32_LE (&data[0]);
-  h->i_video_fcc = GST_MAKE_FOURCC (data[4], data[5], data[6], data[7]);
-  h->i_audio_fcc = GST_MAKE_FOURCC (data[8], data[9], data[10], data[11]);
-  h->i_audio_sample_rate = GST_READ_UINT32_LE (&data[12]);
-  h->i_audio_bits_per_sample = GST_READ_UINT32_LE (&data[16]);
-  h->i_audio_channels = GST_READ_UINT32_LE (&data[20]);
-  h->i_audio_compression_ratio = GST_READ_UINT32_LE (&data[24]);
-  h->i_audio_quality = GST_READ_UINT32_LE (&data[28]);
-  h->i_rtjpeg_quality = GST_READ_UINT32_LE (&data[32]);
-  h->i_rtjpeg_luma_filter = GST_READ_UINT32_LE (&data[36]);
-  h->i_rtjpeg_chroma_filter = GST_READ_UINT32_LE (&data[40]);
-  h->i_lavc_bitrate = GST_READ_UINT32_LE (&data[44]);
-  h->i_lavc_qmin = GST_READ_UINT32_LE (&data[48]);
-  h->i_lavc_qmin = GST_READ_UINT32_LE (&data[52]);
-  h->i_lavc_maxqdiff = GST_READ_UINT32_LE (&data[56]);
-  h->i_seekable_offset = GST_READ_UINT64_LE (&data[60]);
-  h->i_keyframe_adjust_offset = GST_READ_UINT64_LE (&data[68]);
-
-  GST_DEBUG_OBJECT (nuv,
-      "ex hdr: v=%d vffc=%4.4s afcc=%4.4s %dHz %dbits ach=%d acr=%d aq=%d"
-      "rtjpeg q=%d lf=%d lc=%d lavc br=%d qmin=%d qmax=%d maxqdiff=%d seekableoff=%"
-      G_GINT64_FORMAT " keyfao=%" G_GINT64_FORMAT, h->i_version,
-      (gchar *) & h->i_video_fcc, (gchar *) & h->i_audio_fcc,
-      h->i_audio_sample_rate, h->i_audio_bits_per_sample, h->i_audio_channels,
-      h->i_audio_compression_ratio, h->i_audio_quality, h->i_rtjpeg_quality,
-      h->i_rtjpeg_luma_filter, h->i_rtjpeg_chroma_filter, h->i_lavc_bitrate,
-      h->i_lavc_qmin, h->i_lavc_qmax, h->i_lavc_maxqdiff, h->i_seekable_offset,
-      h->i_keyframe_adjust_offset);
-
-  *h_ret = h;
-  gst_buffer_unref (buff);
-  return res;
-}
-
-static gboolean
-gst_nuv_demux_handle_src_event (GstPad * pad, GstEvent * event)
-{
-  gst_event_unref (event);
-  return FALSE;
-}
-
-
-static void
-gst_nuv_demux_create_pads (GstNuvDemux * nuv)
-{
-  if (nuv->h->i_video_blocks != 0) {
-    GstCaps *video_caps = NULL;
-
-    nuv->src_video_pad =
-        gst_pad_new_from_static_template (&video_src_template, "video_src");
-
-    video_caps = gst_caps_new_simple ("video/x-divx",
-        "divxversion", G_TYPE_INT, 4,
-        "width", G_TYPE_INT, nuv->h->i_width,
-        "height", G_TYPE_INT, nuv->h->i_height,
-        "framerate", GST_TYPE_FRACTION, (gint) (nuv->h->d_fps * 1000.0f), 1000,
-        "pixel-aspect-ratio", GST_TYPE_FRACTION,
-        (gint) (nuv->h->d_aspect * 1000.0f), 1000, NULL);
-
-    gst_pad_use_fixed_caps (nuv->src_video_pad);
-    gst_pad_set_active (nuv->src_video_pad, TRUE);
-    gst_pad_set_caps (nuv->src_video_pad, video_caps);
-
-    gst_pad_set_event_function (nuv->src_video_pad,
-        gst_nuv_demux_handle_src_event);
-    gst_pad_set_active (nuv->src_video_pad, TRUE);
-    gst_element_add_pad (GST_ELEMENT (nuv), nuv->src_video_pad);
-
-    gst_caps_unref (video_caps);
-  }
-
-  if (nuv->h->i_audio_blocks != 0) {
-    GstCaps *audio_caps = NULL;
-
-    nuv->src_audio_pad =
-        gst_pad_new_from_static_template (&audio_src_template, "audio_src");
-
-    audio_caps = gst_caps_new_simple ("audio/mpeg",
-        "rate", G_TYPE_INT, nuv->eh->i_audio_sample_rate,
-        "format", GST_TYPE_FOURCC, nuv->eh->i_audio_fcc,
-        "channels", G_TYPE_INT, nuv->eh->i_audio_channels,
-        "mpegversion", G_TYPE_INT, nuv->eh->i_version, NULL);
-
-    gst_pad_use_fixed_caps (nuv->src_audio_pad);
-    gst_pad_set_active (nuv->src_audio_pad, TRUE);
-    gst_pad_set_caps (nuv->src_audio_pad, audio_caps);
-    gst_pad_set_active (nuv->src_audio_pad, TRUE);
-    gst_element_add_pad (GST_ELEMENT (nuv), nuv->src_audio_pad);
-
-    gst_pad_set_event_function (nuv->src_audio_pad,
-        gst_nuv_demux_handle_src_event);
-
-    gst_caps_unref (audio_caps);
-  }
-
-  gst_element_no_more_pads (GST_ELEMENT (nuv));
-}
-
-static GstFlowReturn
-gst_nuv_demux_read_head_frame (GstNuvDemux * nuv)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  ret = gst_nuv_demux_frame_header_load (nuv, &nuv->fh);
-  if (ret != GST_FLOW_OK)
-    return ret;
-
-  nuv->state = GST_NUV_DEMUX_MOVI;
-  return ret;
-}
-
-static GstFlowReturn
-gst_nuv_demux_stream_data (GstNuvDemux * nuv)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstBuffer *buf = NULL;
-  nuv_frame_header *h = nuv->fh;
-
-  if (h->i_type == 'R')
-    goto done;
-
-  if (h->i_length > 0) {
-    ret = gst_nuv_demux_read_bytes (nuv, h->i_length, TRUE, &buf);
-    if (ret != GST_FLOW_OK)
-      return ret;
-
-    if (h->i_timecode > 0)
-      GST_BUFFER_TIMESTAMP (buf) = h->i_timecode * GST_MSECOND;
-  }
-
-
-  switch (h->i_type) {
-    case 'V':
-    {
-      if (!buf)
-        break;
-
-      GST_BUFFER_OFFSET (buf) = nuv->video_offset;
-      gst_buffer_set_caps (buf, GST_PAD_CAPS (nuv->src_video_pad));
-      ret = gst_pad_push (nuv->src_video_pad, buf);
-      nuv->video_offset++;
-      break;
-    }
-    case 'A':
-    {
-      if (!buf)
-        break;
-
-      GST_BUFFER_OFFSET (buf) = nuv->audio_offset;
-      gst_buffer_set_caps (buf, GST_PAD_CAPS (nuv->src_audio_pad));
-      ret = gst_pad_push (nuv->src_audio_pad, buf);
-      nuv->audio_offset++;
-      break;
-    }
-    case 'S':
-    {
-      switch (h->i_compression) {
-        case 'V':
-          gst_pad_push_event (nuv->src_video_pad,
-              gst_event_new_new_segment (TRUE, 1.0, GST_FORMAT_TIME, 0, -1,
-                  h->i_timecode));
-          break;
-        case 'A':
-          gst_pad_push_event (nuv->src_audio_pad,
-              gst_event_new_new_segment (TRUE, 1.0, GST_FORMAT_TIME, 0, -1, 0));
-          break;
-        default:
-          break;
-      }
-    }
-    default:
-      if (buf != NULL)
-        gst_buffer_unref (buf);
-
-      break;
-  }
-
-done:
-  nuv->state = GST_NUV_DEMUX_FRAME_HEADER;
-  g_free (nuv->fh);
-  nuv->fh = NULL;
-  return ret;
-}
-
-static GstFlowReturn
-gst_nuv_demux_stream_mpeg_data (GstNuvDemux * nuv)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  /* ffmpeg extra data */
-  nuv->mpeg_buffer = NULL;
-  ret =
-      gst_nuv_demux_read_bytes (nuv, nuv->mpeg_data_size, TRUE,
-      &nuv->mpeg_buffer);
-  if (ret != GST_FLOW_OK) {
-    return GST_FLOW_ERROR;
-  }
-  GST_BUFFER_SIZE (nuv->mpeg_buffer) = nuv->mpeg_data_size;
-  nuv->state = GST_NUV_DEMUX_EXTEND_HEADER;
-  return ret;
-}
-
-static GstFlowReturn
-gst_nuv_demux_stream_extra_data (GstNuvDemux * nuv)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  /* Load 'D' */
-  nuv_frame_header *h;
-
-  ret = gst_nuv_demux_frame_header_load (nuv, &h);
-  if (ret != GST_FLOW_OK)
-    return ret;
-
-  if (h->i_type != 'D') {
-    g_free (h);
-    return GST_FLOW_ERROR;
-  }
-
-  if (h->i_length > 0) {
-    if (h->i_compression == 'F') {
-      nuv->state = GST_NUV_DEMUX_MPEG_DATA;
-    } else {
-      g_free (h);
-      return GST_FLOW_ERROR;
-    }
-  } else {
-    nuv->state = GST_NUV_DEMUX_EXTEND_HEADER;
-  }
-
-  g_free (h);
-  h = NULL;
-  return ret;
-}
-
-static GstFlowReturn
-gst_nuv_demux_stream_extend_header_data (GstNuvDemux * nuv)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  ret = gst_nuv_demux_extended_header_load (nuv, &nuv->eh);
-  if (ret != GST_FLOW_OK)
-    return ret;
-
-  gst_nuv_demux_create_pads (nuv);
-  nuv->state = GST_NUV_DEMUX_FRAME_HEADER;
-  return ret;
-}
-
-static GstFlowReturn
-gst_nuv_demux_stream_extend_header (GstNuvDemux * nuv)
-{
-  GstBuffer *buf = NULL;
-  GstFlowReturn res = GST_FLOW_OK;
-
-  res = gst_nuv_demux_read_bytes (nuv, 1, FALSE, &buf);
-  if (res != GST_FLOW_OK) {
-    if (buf != NULL) {
-      gst_buffer_unref (buf);
-    }
-    return res;
-  }
-
-  if (buf->data[0] == 'X') {
-    nuv_frame_header *h = NULL;
-
-    gst_buffer_unref (buf);
-    buf = NULL;
-
-    res = gst_nuv_demux_frame_header_load (nuv, &h);
-    if (res != GST_FLOW_OK)
-      return res;
-
-    if (h->i_length != 512) {
-      g_free (h);
-      return GST_FLOW_ERROR;
-    }
-    g_free (h);
-    h = NULL;
-    nuv->state = GST_NUV_DEMUX_EXTEND_HEADER_DATA;
-  } else {
-    nuv->state = GST_NUV_DEMUX_INVALID_DATA;
-    GST_ELEMENT_ERROR (nuv, STREAM, DEMUX, (NULL),
-        ("Unsupported extended header (0x%02x)", buf->data[0]));
-    gst_buffer_unref (buf);
-    return GST_FLOW_ERROR;
-  }
-  return res;
-}
-
-static GstFlowReturn
-gst_nuv_demux_play (GstPad * pad)
-{
-  GstFlowReturn res = GST_FLOW_OK;
-  GstNuvDemux *nuv = GST_NUV_DEMUX (GST_PAD_PARENT (pad));
-
-  switch (nuv->state) {
-    case GST_NUV_DEMUX_START:
-      res = gst_nuv_demux_stream_file_header (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_ERROR_NO_DATA)) {
-        goto pause;
-      }
-      if (nuv->state != GST_NUV_DEMUX_HEADER_DATA)
-        break;
-
-    case GST_NUV_DEMUX_HEADER_DATA:
-      res = gst_nuv_demux_stream_header_data (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_ERROR_NO_DATA)) {
-        goto pause;
-      }
-      if (nuv->state != GST_NUV_DEMUX_EXTRA_DATA)
-        break;
-
-    case GST_NUV_DEMUX_EXTRA_DATA:
-      res = gst_nuv_demux_stream_extra_data (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_ERROR_NO_DATA)) {
-        goto pause;
-      }
-      if (nuv->state != GST_NUV_DEMUX_MPEG_DATA)
-        break;
-
-    case GST_NUV_DEMUX_MPEG_DATA:
-      res = gst_nuv_demux_stream_mpeg_data (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_ERROR_NO_DATA)) {
-        goto pause;
-      }
-
-      if (nuv->state != GST_NUV_DEMUX_EXTEND_HEADER)
-        break;
-
-    case GST_NUV_DEMUX_EXTEND_HEADER:
-      res = gst_nuv_demux_stream_extend_header (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_ERROR_NO_DATA)) {
-        goto pause;
-      }
-      if (nuv->state != GST_NUV_DEMUX_EXTEND_HEADER_DATA)
-        break;
-
-    case GST_NUV_DEMUX_EXTEND_HEADER_DATA:
-      res = gst_nuv_demux_stream_extend_header_data (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_ERROR_NO_DATA)) {
-        goto pause;
-      }
-
-      if (nuv->state != GST_NUV_DEMUX_FRAME_HEADER)
-        break;
-
-    case GST_NUV_DEMUX_FRAME_HEADER:
-      res = gst_nuv_demux_read_head_frame (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_ERROR_NO_DATA)) {
-        goto pause;
-      }
-      if (nuv->state != GST_NUV_DEMUX_MOVI)
-        break;
-
-    case GST_NUV_DEMUX_MOVI:
-      res = gst_nuv_demux_stream_data (nuv);
-      if ((res != GST_FLOW_OK) && (res != GST_FLOW_CUSTOM_ERROR)) {
-        goto pause;
-      }
-      break;
-    case GST_NUV_DEMUX_INVALID_DATA:
-      goto pause;
-    default:
-      g_assert_not_reached ();
-  }
-
-  GST_DEBUG_OBJECT (nuv, "state: %d res:%s", nuv->state,
-      gst_flow_get_name (res));
-
-  return GST_FLOW_OK;
-
-pause:
-  GST_LOG_OBJECT (nuv, "pausing task, reason %s", gst_flow_get_name (res));
-  gst_pad_pause_task (nuv->sinkpad);
-  if (res == GST_FLOW_UNEXPECTED) {
-    gst_nuv_demux_send_eos (nuv);
-  } else if (res == GST_FLOW_NOT_LINKED || res < GST_FLOW_UNEXPECTED) {
-    GST_ELEMENT_FLOW_ERROR (nuv, res);
-
-    gst_nuv_demux_send_eos (nuv);
-  }
-  return res;
-}
-
-static void
-gst_nuv_demux_send_eos (GstNuvDemux * nuv)
-{
-  gst_element_post_message (GST_ELEMENT (nuv),
-      gst_message_new_segment_done (GST_OBJECT (nuv), GST_FORMAT_TIME, -1));
-
-  if (nuv->src_video_pad)
-    gst_pad_push_event (nuv->src_video_pad, gst_event_new_eos ());
-  if (nuv->src_audio_pad)
-    gst_pad_push_event (nuv->src_audio_pad, gst_event_new_eos ());
-}
-
-static GstFlowReturn
-gst_nuv_demux_read_bytes (GstNuvDemux * nuv, guint64 size, gboolean move,
-    GstBuffer ** buffer)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  if (size == 0) {
-    *buffer = gst_buffer_new ();
-    return ret;
-  }
-
-  if (nuv->mode == 0) {
-    ret = gst_pad_pull_range (nuv->sinkpad, nuv->offset, size, buffer);
-    if (ret == GST_FLOW_OK) {
-      if (move) {
-        nuv->offset += size;
-      }
-      /* got eos */
-    } else if (ret == GST_FLOW_UNEXPECTED) {
-      gst_nuv_demux_send_eos (nuv);
-      return GST_FLOW_FLUSHING;
-    }
-  } else {
-    if (gst_adapter_available (nuv->adapter) < size)
-      return GST_FLOW_ERROR_NO_DATA;
-
-    if (move) {
-      *buffer = gst_adapter_take_buffer (nuv->adapter, size);
-    } else {
-      guint8 *data = NULL;
-
-      data = (guint8 *) gst_adapter_peek (nuv->adapter, size);
-      *buffer = gst_buffer_new ();
-      gst_buffer_set_data (*buffer, data, size);
-    }
-  }
-  return ret;
-}
-
-static gboolean
-gst_nuv_demux_sink_activate (GstPad * sinkpad)
-{
-  gboolean res = TRUE;
-  GstNuvDemux *nuv = GST_NUV_DEMUX (gst_pad_get_parent (sinkpad));
-
-  if (gst_pad_check_pull_range (sinkpad)) {
-    nuv->mode = 0;
-    if (nuv->adapter != NULL) {
-      g_object_unref (nuv->adapter);
-      nuv->adapter = NULL;
-    }
-    res = gst_pad_activate_pull (sinkpad, TRUE);
-  } else {
-    nuv->mode = 1;
-    if (!nuv->adapter) {
-      nuv->adapter = gst_adapter_new ();
-    }
-    res = gst_pad_activate_push (sinkpad, TRUE);
-  }
-
-  g_object_unref (nuv);
-  return res;
-}
-
-static gboolean
-gst_nuv_demux_sink_activate_pull (GstPad * sinkpad, gboolean active)
-{
-  GstNuvDemux *nuv = GST_NUV_DEMUX (gst_pad_get_parent (sinkpad));
-
-  if (active) {
-    gst_pad_start_task (sinkpad, (GstTaskFunction) gst_nuv_demux_loop, sinkpad,
-        NULL);
-  } else {
-    gst_pad_stop_task (sinkpad);
-  }
-  gst_object_unref (nuv);
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_nuv_demux_chain (GstPad * pad, GstBuffer * buf)
-{
-  GstNuvDemux *nuv = GST_NUV_DEMUX (gst_pad_get_parent (pad));
-
-  gst_adapter_push (nuv->adapter, buf);
-
-  return gst_nuv_demux_play (pad);
-}
-
-static void
-gst_nuv_demux_loop (GstPad * pad)
-{
-  gst_nuv_demux_play (pad);
-}
-
-static void
-gst_nuv_demux_reset (GstNuvDemux * nuv)
-{
-  nuv->state = GST_NUV_DEMUX_START;
-  nuv->mode = 0;
-  nuv->offset = 0;
-  nuv->video_offset = 0;
-  nuv->audio_offset = 0;
-
-  if (nuv->adapter != NULL)
-    gst_adapter_clear (nuv->adapter);
-
-  if (nuv->mpeg_buffer != NULL) {
-    gst_buffer_unref (nuv->mpeg_buffer);
-    nuv->mpeg_buffer = NULL;
-  }
-
-  g_free (nuv->h);
-  nuv->h = NULL;
-
-  g_free (nuv->eh);
-  nuv->eh = NULL;
-
-  g_free (nuv->fh);
-  nuv->fh = NULL;
-}
-
-static void
-gst_nuv_demux_destoy_src_pad (GstNuvDemux * nuv)
-{
-  if (nuv->src_video_pad) {
-    gst_element_remove_pad (GST_ELEMENT (nuv), nuv->src_video_pad);
-    nuv->src_video_pad = NULL;
-  }
-
-  if (nuv->src_audio_pad) {
-    gst_element_remove_pad (GST_ELEMENT (nuv), nuv->src_audio_pad);
-    nuv->src_audio_pad = NULL;
-  }
-}
-
-static GstStateChangeReturn
-gst_nuv_demux_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  if (ret == GST_STATE_CHANGE_FAILURE)
-    goto done;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_nuv_demux_destoy_src_pad (GST_NUV_DEMUX (element));
-      gst_nuv_demux_reset (GST_NUV_DEMUX (element));
-      break;
-    default:
-      break;
-  }
-
-done:
-  return ret;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (nuvdemux_debug, "nuvdemux",
-      0, "Demuxer for NUV streams");
-
-#ifdef ENABLE_NLS
-  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
-      LOCALEDIR);
-  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-#endif /* ENABLE_NLS */
-
-  if (!gst_element_register (plugin, "nuvdemux", GST_RANK_SECONDARY,
-          GST_TYPE_NUV_DEMUX)) {
-    return FALSE;
-  }
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    nuvdemux,
-    "Demuxes MythTV NuppelVideo files",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/nuvdemux/gstnuvdemux.h b/gst/nuvdemux/gstnuvdemux.h
deleted file mode 100644 (file)
index f746a31..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/* GStreamer
- * Copyright (C) <2006> Renato Araujo Oliveira Filho <renato.filho@indt.org.br>
- *                      Rosfran Borges <rosfran.borges@indt.org.br>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_NUV_DEMUX_H__
-#define __GST_NUV_DEMUX_H__
-
-#include <gst/gst.h>
-
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_NUV_DEMUX \
-  (gst_nuv_demux_get_type ())
-#define GST_NUV_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NUV_DEMUX, GstNuvDemux))
-#define GST_NUV_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_NUV_DEMUX, GstNuvDemuxClass))
-#define GST_IS_NUV_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NUV_DEMUX))
-#define GST_IS_NUV_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_NUV_DEMUX))
-
-
-/* */
-typedef struct
-{
-    gchar id[12];       /* "NuppelVideo\0" or "MythTVVideo\0" */
-    gchar version[5];    /* "x.xx\0" */
-
-    gint  i_width;
-    gint  i_height;
-    gint  i_width_desired;
-    gint  i_height_desired;
-
-    gchar i_mode;            /* P progressive, I interlaced */
-
-    gdouble  d_aspect;       /* 1.0 squared pixel */
-    gdouble  d_fps;
-
-    gint     i_video_blocks; /* 0 no video, -1 unknown */
-    gint     i_audio_blocks;
-    gint     i_text_blocks;
-
-    gint     i_keyframe_distance;
-
-} nuv_header;
-
-typedef struct
-{
-    gchar i_type;        /* A: audio, V: video, S: sync; T: test
-                           R: Seekpoint (string:RTjjjjjjjj)
-                           D: Extra data for codec */
-    gchar i_compression; /* V: 0 uncompressed
-                              1 RTJpeg
-                              2 RTJpeg+lzo
-                              N black frame
-                              L copy last
-                           A: 0 uncompressed (44100 1-bits, 2ch)
-                              1 lzo
-                              2 layer 2
-                              3 layer 3
-                              F flac
-                              S shorten
-                              N null frame loudless
-                              L copy last
-                            S: B audio and vdeo sync point
-                               A audio sync info (timecode == effective
-                                    dsp frequency*100)
-                               V next video sync (timecode == next video
-                                    frame num)
-                               S audio,video,text correlation */
-    gchar i_keyframe;    /* 0 keyframe, else no no key frame */
-    guint8 i_filters;  /* 0x01: gauss 5 pixel (8,2,2,2,2)/16
-                           0x02: gauss 5 pixel (8,1,1,1,1)/12
-                           0x04: cartoon filter */
-
-    gint i_timecode;     /* ms */
-
-    gint i_length;       /* V,A,T: length of following data
-                           S: length of packet correl */
-} nuv_frame_header;
-
-/* FIXME Not sure of this one */
-typedef struct
-{
-    gint             i_version;
-    guint32                 i_video_fcc;
-
-    guint32                 i_audio_fcc;
-    gint             i_audio_sample_rate;
-    gint             i_audio_bits_per_sample;
-    gint             i_audio_channels;
-    gint             i_audio_compression_ratio;
-    gint             i_audio_quality;
-    gint             i_rtjpeg_quality;
-    gint             i_rtjpeg_luma_filter;
-    gint             i_rtjpeg_chroma_filter;
-    gint             i_lavc_bitrate;
-    gint             i_lavc_qmin;
-    gint             i_lavc_qmax;
-    gint             i_lavc_maxqdiff;
-    gint64              i_seekable_offset;
-    gint64           i_keyframe_adjust_offset;
-
-} nuv_extended_header;
-
-typedef enum {
-  GST_NUV_DEMUX_START,
-  GST_NUV_DEMUX_HEADER_DATA,
-  GST_NUV_DEMUX_EXTRA_DATA,
-  GST_NUV_DEMUX_MPEG_DATA,
-  GST_NUV_DEMUX_EXTEND_HEADER,
-  GST_NUV_DEMUX_EXTEND_HEADER_DATA,
-  GST_NUV_DEMUX_FRAME_HEADER,
-  GST_NUV_DEMUX_MOVI,
-  GST_NUV_DEMUX_INVALID_DATA
-} GstNuvDemuxState;
-
-typedef struct _GstNuvDemux {
-  GstElement     parent;
-
-  guint         mode;
-  GstAdapter    *adapter; 
-  guint64       video_offset;
-  guint64       audio_offset;
-
-  /* pads */
-  GstPad        *sinkpad;
-  GstPad        *src_video_pad;  
-  GstPad        *src_audio_pad;
-  gboolean      first_video;
-  gboolean      first_audio;
-
-  /* NUV decoding state */
-  GstNuvDemuxState state;
-  guint64        offset;
-
-  /* Mpeg ExtraData */
-  guint64       mpeg_data_size;
-  GstBuffer     *mpeg_buffer;
-  
-  nuv_header *h;
-  nuv_extended_header *eh;
-  nuv_frame_header *fh;
-} GstNuvDemux;
-
-typedef struct _GstNuvDemuxClass {
-  GstElementClass parent_class;
-} GstNuvDemuxClass;
-
-GType           gst_nuv_demux_get_type          (void);
-
-G_END_DECLS
-
-#endif /* __GST_NUV_DEMUX_H__ */
diff --git a/gst/nuvdemux/meson.build b/gst/nuvdemux/meson.build
deleted file mode 100644 (file)
index c6d803d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-nuvd_sources = [
-  'gstnuvdemux.c',
-]
-
-gstnuvdemux = library('gstnuvdemux',
-  nuvd_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc, libsinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/overlay/Makefile.am b/gst/overlay/Makefile.am
deleted file mode 100644 (file)
index 40230ef..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-plugin_LTLIBRARIES = libgstoverlay.la
-
-libgstoverlay_la_SOURCES = gstoverlay.c
-
-noinst_HEADERS = gstoverlay.h
-
-libgstoverlay_la_CFLAGS = $(GST_CFLAGS)
-libgstoverlay_la_LIBADD =
-libgstoverlay_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstoverlay_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-EXTRA_DIST = 
-
diff --git a/gst/overlay/gstoverlay.c b/gst/overlay/gstoverlay.c
deleted file mode 100644 (file)
index 20cf47a..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2003> David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "gstoverlay.h"
-#include <gst/video/video.h>
-
-static GstStaticPadTemplate overlay_src_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
-    );
-
-static GstStaticPadTemplate overlay_sink1_factory =
-GST_STATIC_PAD_TEMPLATE ("sink1",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
-    );
-
-static GstStaticPadTemplate overlay_sink2_factory =
-GST_STATIC_PAD_TEMPLATE ("sink2",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
-    );
-
-static GstStaticPadTemplate overlay_sink3_factory =
-GST_STATIC_PAD_TEMPLATE ("sink3",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
-    );
-
-/* OVERLAY signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0
-};
-
-
-static void gst_overlay_class_init (GstOverlayClass * klass);
-static void gst_overlay_base_init (GstOverlayClass * klass);
-static void gst_overlay_init (GstOverlay * overlay);
-
-static void gst_overlay_loop (GstElement * element);
-
-static void gst_overlay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_overlay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static GstElementClass *parent_class = NULL;
-
-/*static guint gst_overlay_signals[LAST_SIGNAL] = { 0 }; */
-
-static GType
-gst_overlay_get_type (void)
-{
-  static GType overlay_type = 0;
-
-  if (!overlay_type) {
-    static const GTypeInfo overlay_info = {
-      sizeof (GstOverlayClass),
-      (GBaseInitFunc) gst_overlay_base_init,
-      NULL,
-      (GClassInitFunc) gst_overlay_class_init,
-      NULL,
-      NULL,
-      sizeof (GstOverlay),
-      0,
-      (GInstanceInitFunc) gst_overlay_init,
-    };
-
-    overlay_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstOverlay", &overlay_info,
-        0);
-  }
-  return overlay_type;
-}
-
-static void
-gst_overlay_base_init (GstOverlayClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &overlay_sink1_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &overlay_sink2_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &overlay_sink3_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &overlay_src_factory);
-  gst_element_class_set_static_metadata (element_class, "Video overlay",
-      "Filter/Editor/Video", "Overlay multiple video streams",
-      "David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_overlay_class_init (GstOverlayClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->set_property = gst_overlay_set_property;
-  gobject_class->get_property = gst_overlay_get_property;
-
-}
-
-#if 0
-static GstCaps *
-gst_overlay_getcaps (GstPad * pad)
-{
-  GstCaps *caps;
-  GstOverlay *overlay;
-
-  overlay = GST_OVERLAY (gst_pad_get_parent (pad));
-
-  if (overlay->width && overlay->height) {
-    caps = GST_STATIC_CAPS ("overlay_sink2",
-        "video/raw",
-        "format", GST_TYPE_FOURCC (GST_MAKE_FOURCC ('I', '4', '2', '0')),
-        "width", G_TYPE_INT (overlay->width),
-        "height", G_TYPE_INT (overlay->height)
-        );
-  } else {
-    caps = GST_STATIC_CAPS ("overlay_sink2",
-        "video/raw",
-        "format", GST_TYPE_FOURCC (GST_MAKE_FOURCC ('I', '4', '2', '0')),
-        "width", G_TYPE_INT_RANGE (0, 4096),
-        "height", G_TYPE_INT_RANGE (0, 4096)
-        );
-  }
-
-  return caps;
-}
-#endif
-
-static gboolean
-gst_overlay_sinkconnect (GstPad * pad, const GstCaps * caps)
-{
-  GstOverlay *overlay;
-  GstStructure *structure;
-
-  overlay = GST_OVERLAY (gst_pad_get_parent (pad));
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  gst_structure_get_int (structure, "width", &overlay->width);
-  gst_structure_get_int (structure, "height", &overlay->height);
-  gst_structure_get_double (structure, "framerate", &overlay->framerate);
-
-  /* forward to the next plugin */
-  return gst_pad_try_set_caps (overlay->srcpad, caps);
-}
-
-static void
-gst_overlay_init (GstOverlay * overlay)
-{
-  overlay->sinkpad1 =
-      gst_pad_new_from_static_template (&overlay_sink1_factory, "sink1");
-  gst_pad_set_link_function (overlay->sinkpad1, gst_overlay_sinkconnect);
-  gst_element_add_pad (GST_ELEMENT (overlay), overlay->sinkpad1);
-
-  overlay->sinkpad2 =
-      gst_pad_new_from_static_template (&overlay_sink2_factory, "sink2");
-  gst_pad_set_link_function (overlay->sinkpad2, gst_overlay_sinkconnect);
-  gst_element_add_pad (GST_ELEMENT (overlay), overlay->sinkpad2);
-
-  overlay->sinkpad3 =
-      gst_pad_new_from_static_template (&overlay_sink3_factory, "sink3");
-  gst_pad_set_link_function (overlay->sinkpad3, gst_overlay_sinkconnect);
-  gst_element_add_pad (GST_ELEMENT (overlay), overlay->sinkpad3);
-
-  overlay->srcpad =
-      gst_pad_new_from_static_template (&overlay_src_factory, "src");
-  gst_element_add_pad (GST_ELEMENT (overlay), overlay->srcpad);
-
-  gst_element_set_loop_function (GST_ELEMENT (overlay), gst_overlay_loop);
-}
-
-static void
-gst_overlay_blend_i420 (guint8 * out, guint8 * in1, guint8 * in2, guint8 * in3,
-    gint width, gint height)
-{
-  int mask;
-  int i, j;
-  guint8 *in1u, *in1v, *in2u, *in2v, *outu, *outv;
-  int lumsize;
-  int chromsize;
-  int width2 = width / 2;
-  int height2 = height / 2;
-
-  lumsize = width * height;
-  chromsize = width2 * height2;
-
-  in1u = in1 + lumsize;
-  in1v = in1u + chromsize;
-  in2u = in2 + lumsize;
-  in2v = in2u + chromsize;
-  outu = out + lumsize;
-  outv = outu + chromsize;
-
-  for (i = 0; i < height; i++) {
-    for (j = 0; j < width; j++) {
-      mask = in3[i * width + j];
-      out[i * width + j] = ((in1[i * width + j] * mask) +
-          (in2[i * width + j] * (255 - mask))) >> 8;
-    }
-  }
-
-  for (i = 0; i < height / 2; i++) {
-    for (j = 0; j < width / 2; j++) {
-      mask =
-          (in3[(i * 2) * width + (j * 2)] + in3[(i * 2 + 1) * width + (j * 2)] +
-          in3[(i * 2) * width + (j * 2 + 1)] + in3[(i * 2 + 1) * width +
-              (j * 2 + 1)]) / 4;
-      outu[i * width2 + j] =
-          ((in1u[i * width2 + j] * mask) + (in2u[i * width2 + j] * (255 -
-                  mask))) >> 8;
-      outv[i * width2 + j] =
-          ((in1v[i * width2 + j] * mask) + (in2v[i * width2 + j] * (255 -
-                  mask))) >> 8;
-    }
-  }
-}
-
-static void
-gst_overlay_loop (GstElement * element)
-{
-  GstOverlay *overlay;
-  GstBuffer *out;
-  GstBuffer *in1 = NULL, *in2 = NULL, *in3 = NULL;
-  int size;
-
-  overlay = GST_OVERLAY (element);
-
-  in1 = GST_BUFFER (gst_pad_pull (overlay->sinkpad1));
-  if (GST_IS_EVENT (in1)) {
-    gst_pad_push (overlay->srcpad, GST_DATA (in1));
-    /* FIXME */
-    return;
-  }
-  in2 = GST_BUFFER (gst_pad_pull (overlay->sinkpad2));
-  if (GST_IS_EVENT (in2)) {
-    gst_pad_push (overlay->srcpad, GST_DATA (in2));
-    /* FIXME */
-    return;
-  }
-  in3 = GST_BUFFER (gst_pad_pull (overlay->sinkpad3));
-  if (GST_IS_EVENT (in3)) {
-    gst_pad_push (overlay->srcpad, GST_DATA (in3));
-    /* FIXME */
-    return;
-  }
-
-  g_return_if_fail (in1 != NULL);
-  g_return_if_fail (in2 != NULL);
-  g_return_if_fail (in3 != NULL);
-
-  size = (overlay->width * overlay->height * 3) / 2;
-  g_return_if_fail (GST_BUFFER_SIZE (in1) != size);
-  g_return_if_fail (GST_BUFFER_SIZE (in2) != size);
-  g_return_if_fail (GST_BUFFER_SIZE (in3) != size);
-
-  out = gst_buffer_new_and_alloc (size);
-
-  gst_overlay_blend_i420 (GST_BUFFER_DATA (out),
-      GST_BUFFER_DATA (in1),
-      GST_BUFFER_DATA (in2),
-      GST_BUFFER_DATA (in3), overlay->width, overlay->height);
-
-  GST_BUFFER_TIMESTAMP (out) = GST_BUFFER_TIMESTAMP (in1);
-  GST_BUFFER_DURATION (out) = GST_BUFFER_DURATION (in1);
-
-  gst_buffer_unref (in1);
-  gst_buffer_unref (in2);
-  gst_buffer_unref (in3);
-
-  gst_pad_push (overlay->srcpad, GST_DATA (out));
-}
-
-static void
-gst_overlay_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstOverlay *overlay;
-
-  overlay = GST_OVERLAY (object);
-
-  switch (prop_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_overlay_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstOverlay *overlay;
-
-  overlay = GST_OVERLAY (object);
-
-  switch (prop_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return gst_element_register (plugin, "overlay",
-      GST_RANK_NONE, GST_TYPE_OVERLAY);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    overlay,
-    "Overlay multiple video streams",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/overlay/gstoverlay.h b/gst/overlay/gstoverlay.h
deleted file mode 100644 (file)
index de39db2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_OVERLAY_H__
-#define __GST_OVERLAY_H__
-
-#include <gst/gst.h>
-
-#define GST_TYPE_OVERLAY \
-  (gst_overlay_get_type())
-#define GST_OVERLAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OVERLAY,GstOverlay))
-#define GST_OVERLAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OVERLAY,GstOverlayClass))
-#define GST_IS_OVERLAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OVERLAY))
-#define GST_IS_OVERLAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OVERLAY))
-
-typedef struct _GstOverlay GstOverlay;
-typedef struct _GstOverlayClass GstOverlayClass;
-
-struct _GstOverlay {
-  GstElement     element;
-
-  GstPad        *srcpad;
-  GstPad        *sinkpad1;
-  GstPad        *sinkpad2;
-  GstPad        *sinkpad3;
-
-  gint           format;
-  gint           width;
-  gint           height;
-
-  gint           duration;
-  gint           position;
-
-  gint           type;
-  gint           fps;
-  gint           border;
-  gint           depth;
-
-  gdouble        framerate;
-};
-
-struct _GstOverlayClass {
-  GstElementClass parent_class;
-};
-
-#endif /* __GST_OVERLAY_H__ */
diff --git a/gst/overlay/meson.build b/gst/overlay/meson.build
deleted file mode 100644 (file)
index 56854bc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-overlay_sources = [
-  'gstoverlay.c',
-]
-
-gstoverlay = library('gstoverlay',
-  overlay_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gst_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/patchdetect/Makefile.am b/gst/patchdetect/Makefile.am
deleted file mode 100644 (file)
index 5ddef3f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-plugin_LTLIBRARIES = libgstpatchdetect.la
-
-#ORC_SOURCE=gstpatchdetectorc
-#include $(top_srcdir)/common/orc.mak
-
-libgstpatchdetect_la_SOURCES = gstpatchdetect.c
-#nodist_libgstpatchdetect_la_SOURCES = $(ORC_NODIST_SOURCES)
-libgstpatchdetect_la_CFLAGS = \
-       $(GST_PLUGINS_BASE_CFLAGS) \
-       $(GST_CFLAGS)
-libgstpatchdetect_la_LIBADD = \
-       $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
-       $(GST_BASE_LIBS) \
-       $(GST_LIBS) \
-       $(LIBM)
-libgstpatchdetect_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstpatchdetect_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstpatchdetect.h
diff --git a/gst/patchdetect/gstpatchdetect.c b/gst/patchdetect/gstpatchdetect.c
deleted file mode 100644 (file)
index ff21fda..0000000
+++ /dev/null
@@ -1,1235 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 David Schleef <ds@entropywave.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Suite 500,
- * Boston, MA 02110-1335, USA.
- */
-/**
- * SECTION:element-gstpatchdetect
- *
- * The patchdetect element detects color patches from a color
- * calibration chart.  Currently, the patches for the 24-square
- * Munsell ColorChecker are hard-coded into the element.  When
- * a color chart is detected in the video stream, a message is
- * sent to the bus containing the detected color values of each
- * of the patches.
- *
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch -v dv1394src ! dvdemux ! dvdec ! patchdetect ! xvimagesink
- * ]|
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/video/video.h>
-#include <math.h>
-#include <string.h>
-#include "gstpatchdetect.h"
-
-GST_DEBUG_CATEGORY_STATIC (gst_patchdetect_debug_category);
-#define GST_CAT_DEFAULT gst_patchdetect_debug_category
-
-/* prototypes */
-
-
-static void gst_patchdetect_set_property (GObject * object,
-    guint property_id, const GValue * value, GParamSpec * pspec);
-static void gst_patchdetect_get_property (GObject * object,
-    guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_patchdetect_dispose (GObject * object);
-static void gst_patchdetect_finalize (GObject * object);
-
-static gboolean
-gst_patchdetect_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
-    guint * size);
-static gboolean
-gst_patchdetect_set_caps (GstBaseTransform * trans, GstCaps * incaps,
-    GstCaps * outcaps);
-static gboolean gst_patchdetect_start (GstBaseTransform * trans);
-static gboolean gst_patchdetect_stop (GstBaseTransform * trans);
-static gboolean gst_patchdetect_event (GstBaseTransform * trans,
-    GstEvent * event);
-static GstFlowReturn gst_patchdetect_transform_ip (GstBaseTransform * trans,
-    GstBuffer * buf);
-static gboolean gst_patchdetect_src_event (GstBaseTransform * trans,
-    GstEvent * event);
-
-enum
-{
-  PROP_0
-};
-
-/* pad templates */
-
-static GstStaticPadTemplate gst_patchdetect_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
-    );
-
-static GstStaticPadTemplate gst_patchdetect_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
-    );
-
-
-/* class initialization */
-
-#define DEBUG_INIT(bla) \
-  GST_DEBUG_CATEGORY_INIT (gst_patchdetect_debug_category, "patchdetect", 0, \
-      "debug category for patchdetect element");
-
-GST_BOILERPLATE_FULL (GstPatchdetect, gst_patchdetect, GstBaseTransform,
-    GST_TYPE_BASE_TRANSFORM, DEBUG_INIT);
-
-static void
-gst_patchdetect_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_patchdetect_sink_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_patchdetect_src_template);
-
-  gst_element_class_set_static_metadata (element_class, "Color Patch Detector",
-      "Video/Analysis", "Detects color patches from a color calibration chart",
-      "David Schleef <ds@entropywave.com>");
-}
-
-static void
-gst_patchdetect_class_init (GstPatchdetectClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstBaseTransformClass *base_transform_class =
-      GST_BASE_TRANSFORM_CLASS (klass);
-
-  gobject_class->set_property = gst_patchdetect_set_property;
-  gobject_class->get_property = gst_patchdetect_get_property;
-  gobject_class->dispose = gst_patchdetect_dispose;
-  gobject_class->finalize = gst_patchdetect_finalize;
-  base_transform_class->get_unit_size =
-      GST_DEBUG_FUNCPTR (gst_patchdetect_get_unit_size);
-  base_transform_class->set_caps = GST_DEBUG_FUNCPTR (gst_patchdetect_set_caps);
-  base_transform_class->start = GST_DEBUG_FUNCPTR (gst_patchdetect_start);
-  base_transform_class->stop = GST_DEBUG_FUNCPTR (gst_patchdetect_stop);
-  base_transform_class->event = GST_DEBUG_FUNCPTR (gst_patchdetect_event);
-  base_transform_class->transform_ip =
-      GST_DEBUG_FUNCPTR (gst_patchdetect_transform_ip);
-  base_transform_class->src_event =
-      GST_DEBUG_FUNCPTR (gst_patchdetect_src_event);
-
-}
-
-static void
-gst_patchdetect_init (GstPatchdetect * patchdetect,
-    GstPatchdetectClass * patchdetect_class)
-{
-}
-
-void
-gst_patchdetect_set_property (GObject * object, guint property_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  g_return_if_fail (GST_IS_PATCHDETECT (object));
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_patchdetect_get_property (GObject * object, guint property_id,
-    GValue * value, GParamSpec * pspec)
-{
-  g_return_if_fail (GST_IS_PATCHDETECT (object));
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_patchdetect_dispose (GObject * object)
-{
-  g_return_if_fail (GST_IS_PATCHDETECT (object));
-
-  /* clean up as possible.  may be called multiple times */
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_patchdetect_finalize (GObject * object)
-{
-  g_return_if_fail (GST_IS_PATCHDETECT (object));
-
-  /* clean up object here */
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static gboolean
-gst_patchdetect_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
-    guint * size)
-{
-  int width, height;
-  GstVideoFormat format;
-  gboolean ret;
-
-  ret = gst_video_format_parse_caps (caps, &format, &width, &height);
-  *size = gst_video_format_get_size (format, width, height);
-
-  return ret;
-}
-
-static gboolean
-gst_patchdetect_set_caps (GstBaseTransform * trans, GstCaps * incaps,
-    GstCaps * outcaps)
-{
-  GstPatchdetect *patchdetect = GST_PATCHDETECT (trans);
-  int width, height;
-  GstVideoFormat format;
-  gboolean ret;
-
-  ret = gst_video_format_parse_caps (incaps, &format, &width, &height);
-  if (ret) {
-    patchdetect->format = format;
-    patchdetect->width = width;
-    patchdetect->height = height;
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_patchdetect_start (GstBaseTransform * trans)
-{
-
-  return TRUE;
-}
-
-static gboolean
-gst_patchdetect_stop (GstBaseTransform * trans)
-{
-
-  return TRUE;
-}
-
-static gboolean
-gst_patchdetect_event (GstBaseTransform * trans, GstEvent * event)
-{
-
-  return TRUE;
-}
-
-typedef struct
-{
-  guint8 *y;
-  int ystride;
-  guint8 *u;
-  int ustride;
-  guint8 *v;
-  int vstride;
-  int width;
-  int height;
-  int t;
-} Frame;
-
-typedef struct
-{
-  int y, u, v;
-  int diff_y, diff_u, diff_v;
-  gboolean match;
-  int patch_block;
-  int color;
-  int count;
-  int sum_x;
-  int sum_y;
-} Stats;
-
-typedef struct
-{
-  int r, g, b;
-  int y, u, v;
-} Color;
-
-typedef struct
-{
-  int x, y;
-  int patch1, patch2;
-  gboolean valid;
-} Point;
-
-typedef struct
-{
-  int xmin, xmax;
-  int ymin, ymax;
-  int val;
-  int y, u, v;
-  int count;
-  int cen_x, cen_y;
-  gboolean valid;
-} Patch;
-
-static const Color patch_colors[24] = {
-  {115, 82, 68, 92, 119, 143},
-  {194, 150, 130, 152, 115, 148},
-  {98, 122, 157, 119, 146, 116},
-  {87, 108, 67, 102, 112, 120},
-  {133, 128, 177, 130, 149, 128},
-  {103, 189, 170, 161, 128, 91},
-  {214, 126, 44, 135, 83, 170},
-  {80, 91, 166, 97, 162, 120},
-  {193, 90, 99, 113, 122, 173},
-  {94, 60, 108, 77, 146, 141},
-  {157, 188, 64, 164, 77, 119},
-  {224, 163, 46, 160, 70, 160},
-  {56, 61, 150, 73, 168, 122},
-  {70, 148, 73, 124, 103, 97},
-  {175, 54, 60, 85, 118, 181},
-  {231, 199, 31, 182, 51, 149},
-  {187, 86, 149, 112, 146, 170},
-  {8, 133, 161, 109, 153, 72},
-  {243, 243, 243, 225, 128, 128},
-  {200, 200, 200, 188, 128, 128},
-  {160, 160, 160, 153, 128, 128},
-  {122, 122, 122, 121, 128, 128},
-  {85, 85, 85, 89, 128, 128},
-  {52, 52, 52, 61, 128, 128}
-};
-
-static void
-get_block_stats (Frame * frame, int x, int y, Stats * stats)
-{
-  int i, j;
-  guint8 *data;
-  int max;
-  int min;
-  int sum;
-
-  max = 0;
-  min = 255;
-  sum = 0;
-  for (j = 0; j < 8; j++) {
-    data = frame->y + frame->ystride * (j + y) + x;
-    for (i = 0; i < 8; i++) {
-      max = MAX (max, data[i]);
-      min = MIN (min, data[i]);
-      sum += data[i];
-    }
-  }
-  stats->y = sum / 64;
-  stats->diff_y = MAX (max - stats->y, stats->y - min);
-
-  max = 0;
-  min = 255;
-  sum = 0;
-  for (j = 0; j < 4; j++) {
-    data = frame->u + frame->ustride * (j + y / 2) + x / 2;
-    for (i = 0; i < 4; i++) {
-      max = MAX (max, data[i]);
-      min = MIN (min, data[i]);
-      sum += data[i];
-    }
-  }
-  stats->u = sum / 16;
-  stats->diff_u = MAX (max - stats->u, stats->u - min);
-
-  max = 0;
-  min = 255;
-  sum = 0;
-  for (j = 0; j < 4; j++) {
-    data = frame->v + frame->vstride * (j + y / 2) + x / 2;
-    for (i = 0; i < 4; i++) {
-      max = MAX (max, data[i]);
-      min = MIN (min, data[i]);
-      sum += data[i];
-    }
-  }
-  stats->v = sum / 16;
-  stats->diff_v = MAX (max - stats->v, stats->v - min);
-
-  stats->patch_block = -1;
-  stats->match = FALSE;
-#define MATCH 15
-  if (stats->diff_y < MATCH && stats->diff_u < MATCH && stats->diff_v < MATCH) {
-    stats->match = TRUE;
-  }
-}
-
-static void
-paint_block (Frame * frame, int x, int y, int value)
-{
-  int i, j;
-  guint8 *data;
-
-  for (j = 0; j < 8; j++) {
-    data = frame->y + frame->ystride * (j + y) + x;
-    for (i = 0; i < 8; i++) {
-      data[i] = value;
-    }
-  }
-
-  for (j = 0; j < 4; j++) {
-    data = frame->u + frame->ustride * (j + y / 2) + x / 2;
-    for (i = 0; i < 4; i++) {
-      data[i] = 128;
-    }
-  }
-
-  for (j = 0; j < 4; j++) {
-    data = frame->v + frame->vstride * (j + y / 2) + x / 2;
-    for (i = 0; i < 4; i++) {
-      data[i] = 128;
-    }
-  }
-}
-
-static gboolean
-patch_check (Frame * frame, guint8 * patchpix, int x, int y, int w, int h)
-{
-  int i, j;
-
-  for (j = y; j < y + h; j++) {
-    for (i = x; i < x + w; i++) {
-      if (patchpix[j * frame->width + i] != 0)
-        return FALSE;
-    }
-  }
-
-  return TRUE;
-}
-
-static void
-patch_start (Frame * frame, guint8 * patchpix, Patch * patch, int x, int y,
-    int w, int h)
-{
-  int i, j;
-
-  for (j = y; j < y + h; j++) {
-    for (i = x; i < x + w; i++) {
-      patchpix[j * frame->width + i] = patch->val;
-    }
-  }
-  patch->xmin = MAX (1, x - 1);
-  patch->xmax = MIN (x + w + 1, frame->width - 1);
-  patch->ymin = MAX (1, y - 1);
-  patch->ymax = MIN (y + h + 1, frame->height - 1);
-  patch->count = w * h;
-
-}
-
-static void
-patch_grow (Frame * frame, guint8 * patchpix, Patch * patch)
-{
-  gboolean growmore = FALSE;
-  guint8 *ydata, *udata, *vdata;
-  int i, j;
-  int count = 5;
-
-#define MAXDIFF 15
-  do {
-    for (j = patch->ymin; j < patch->ymax; j++) {
-      ydata = frame->y + frame->ystride * j;
-      udata = frame->u + frame->ustride * (j / 2);
-      vdata = frame->v + frame->vstride * (j / 2);
-      for (i = patch->xmin; i < patch->xmax; i++) {
-        if (patchpix[j * frame->width + i] != 0)
-          continue;
-
-        if (patchpix[(j + 1) * frame->width + i] == patch->val ||
-            patchpix[(j - 1) * frame->width + i] == patch->val ||
-            patchpix[j * frame->width + i + 1] == patch->val ||
-            patchpix[j * frame->width + i - 1] == patch->val) {
-          int diff = ABS (ydata[i] - patch->y) +
-              ABS (udata[i / 2] - patch->u) + ABS (vdata[i / 2] - patch->v);
-
-          if (diff < MAXDIFF) {
-            patchpix[j * frame->width + i] = patch->val;
-            patch->xmin = MIN (patch->xmin, MAX (i - 1, 1));
-            patch->xmax = MAX (patch->xmax, MIN (i + 2, frame->width - 1));
-            patch->ymin = MIN (patch->ymin, MAX (j - 1, 1));
-            patch->ymax = MAX (patch->ymax, MIN (j + 2, frame->height - 1));
-            patch->count++;
-            growmore = TRUE;
-          }
-        }
-      }
-    }
-    for (j = patch->ymax - 1; j >= patch->ymin; j--) {
-      ydata = frame->y + frame->ystride * j;
-      udata = frame->u + frame->ustride * (j / 2);
-      vdata = frame->v + frame->vstride * (j / 2);
-      for (i = patch->xmax - 1; i >= patch->xmin; i--) {
-        if (patchpix[j * frame->width + i] != 0)
-          continue;
-
-        if (patchpix[(j + 1) * frame->width + i] == patch->val ||
-            patchpix[(j - 1) * frame->width + i] == patch->val ||
-            patchpix[j * frame->width + i + 1] == patch->val ||
-            patchpix[j * frame->width + i - 1] == patch->val) {
-          int diff = ABS (ydata[i] - patch->y) +
-              ABS (udata[i / 2] - patch->u) + ABS (vdata[i / 2] - patch->v);
-
-          if (diff < MAXDIFF) {
-            patchpix[j * frame->width + i] = patch->val;
-            patch->xmin = MIN (patch->xmin, MAX (i - 1, 1));
-            patch->xmax = MAX (patch->xmax, MIN (i + 2, frame->width - 1));
-            patch->ymin = MIN (patch->ymin, MAX (j - 1, 1));
-            patch->ymax = MAX (patch->ymax, MIN (j + 2, frame->height - 1));
-            patch->count++;
-            growmore = TRUE;
-          }
-        }
-      }
-    }
-
-    count--;
-  } while (growmore && count > 0);
-
-#if 0
-  for (j = patch->ymin; j < patch->ymax; j++) {
-    guint8 *data;
-    data = frame->y + frame->ystride * j;
-    for (i = patch->xmin; i < patch->xmax; i++) {
-      if (patchpix[j * frame->width + i] != patch->val)
-        continue;
-      if ((i + j + frame->t) & 0x4) {
-        data[i] = 16;
-      }
-    }
-  }
-#endif
-
-}
-
-#if 0
-static void
-find_cluster (Point * points, int n_points, int *result_x, int *result_y)
-{
-  int dist;
-  int ave_x, ave_y;
-  int i;
-
-  for (dist = 50; dist >= 10; dist -= 5) {
-    int sum_x, sum_y;
-    int n_valid;
-
-    sum_x = 0;
-    sum_y = 0;
-    n_valid = 0;
-    for (i = 0; i < n_points; i++) {
-      if (!points[i].valid)
-        continue;
-      sum_x += points[i].x;
-      sum_y += points[i].y;
-      n_valid++;
-    }
-    ave_x = sum_x / n_valid;
-    ave_y = sum_y / n_valid;
-
-    for (i = 0; i < n_points; i++) {
-      int d;
-      if (!points[i].valid)
-        continue;
-      d = (points[i].x - ave_x) * (points[i].x - ave_x);
-      d += (points[i].y - ave_y) * (points[i].y - ave_y);
-      if (d > dist * dist)
-        points[i].valid = FALSE;
-    }
-  }
-  *result_x = ave_x;
-  *result_y = ave_y;
-}
-#endif
-
-typedef struct _Matrix Matrix;
-struct _Matrix
-{
-  double m[4][4];
-};
-
-#if 0
-static void
-dump_4x4 (double a[4][4], double b[4][4])
-{
-  int j;
-  int i;
-
-  for (j = 0; j < 4; j++) {
-    g_print ("[ ");
-    for (i = 0; i < 4; i++) {
-      g_print ("%8.2g", a[i][j]);
-      if (i != 4 - 1)
-        g_print (", ");
-    }
-    g_print ("|");
-    for (i = 0; i < 4; i++) {
-      g_print ("%8.2g", b[i][j]);
-      if (i != 4 - 1)
-        g_print (", ");
-    }
-    g_print ("]\n");
-  }
-  g_print ("\n");
-
-}
-#endif
-
-static void
-invert_matrix (double m[10][10], int n)
-{
-  int i, j, k;
-  double tmp[10][10] = { {0} };
-  double x;
-
-  for (i = 0; i < n; i++) {
-    tmp[i][i] = 1;
-  }
-
-  for (j = 0; j < n; j++) {
-    for (k = 0; k < n; k++) {
-      if (k == j)
-        continue;
-
-      x = m[j][k] / m[j][j];
-      for (i = 0; i < n; i++) {
-        m[i][k] -= x * m[i][j];
-        tmp[i][k] -= x * tmp[i][j];
-      }
-    }
-
-    x = m[j][j];
-    for (i = 0; i < n; i++) {
-      m[i][j] /= x;
-      tmp[i][j] /= x;
-    }
-  }
-
-  memcpy (m, tmp, sizeof (tmp));
-}
-
-static GstFlowReturn
-gst_patchdetect_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
-{
-  GstPatchdetect *patchdetect = GST_PATCHDETECT (trans);
-  Frame frame;
-  Point *points;
-  int i, j;
-  int blocks_x, blocks_y;
-  int n_points;
-  int n_patches;
-  Patch *patches;
-  guint8 *patchpix;
-  int vec1_x, vec1_y;
-  int vec2_x, vec2_y;
-  Color detected_colors[24];
-  gboolean detected = FALSE;
-
-  frame.y = GST_BUFFER_DATA (buf);
-  frame.ystride = gst_video_format_get_row_stride (patchdetect->format,
-      0, patchdetect->width);
-  frame.u =
-      frame.y + gst_video_format_get_component_offset (patchdetect->format, 1,
-      patchdetect->width, patchdetect->height);
-  frame.ustride =
-      gst_video_format_get_row_stride (patchdetect->format, 1,
-      patchdetect->width);
-  frame.v =
-      frame.y + gst_video_format_get_component_offset (patchdetect->format, 2,
-      patchdetect->width, patchdetect->height);
-  frame.vstride =
-      gst_video_format_get_row_stride (patchdetect->format, 2,
-      patchdetect->width);
-  frame.width = patchdetect->width;
-  frame.height = patchdetect->height;
-  frame.t = patchdetect->t;
-  patchdetect->t++;
-
-  blocks_y = (patchdetect->height & (~7)) / 8;
-  blocks_x = (patchdetect->width & (~7)) / 8;
-
-  patchpix = g_malloc0 (patchdetect->width * patchdetect->height);
-  patches = g_malloc0 (sizeof (Patch) * 256);
-
-  n_patches = 0;
-  for (j = 0; j < blocks_y; j += 4) {
-    for (i = 0; i < blocks_x; i += 4) {
-      Stats block = { 0 };
-
-      get_block_stats (&frame, i * 8, j * 8, &block);
-
-      patches[n_patches].val = n_patches + 2;
-      if (block.match) {
-        if (patch_check (&frame, patchpix, i * 8, j * 8, 8, 8)) {
-          patch_start (&frame, patchpix, patches + n_patches, i * 8, j * 8, 8,
-              8);
-
-          patches[n_patches].y = block.y;
-          patches[n_patches].u = block.u;
-          patches[n_patches].v = block.v;
-
-          patch_grow (&frame, patchpix, patches + n_patches);
-          n_patches++;
-          g_assert (n_patches < 256);
-        }
-      }
-    }
-  }
-
-  {
-    int n;
-
-    for (n = 0; n < n_patches; n++) {
-      Patch *patch = &patches[n];
-      int xsum;
-      int ysum;
-
-      if (patch->count > 10000)
-        continue;
-      patch->valid = TRUE;
-
-      xsum = 0;
-      ysum = 0;
-      for (j = patch->ymin; j < patch->ymax; j++) {
-        for (i = patch->xmin; i < patch->xmax; i++) {
-          if (patchpix[j * frame.width + i] != patch->val)
-            continue;
-          xsum += i;
-          ysum += j;
-        }
-      }
-
-      patch->cen_x = xsum / patch->count;
-      patch->cen_y = ysum / patch->count;
-    }
-
-  }
-
-  points = g_malloc0 (sizeof (Point) * 1000);
-  n_points = 0;
-
-  for (i = 0; i < n_patches; i++) {
-    for (j = i + 1; j < n_patches; j++) {
-      int dist_x, dist_y;
-
-      if (i == j)
-        continue;
-
-      dist_x = patches[i].cen_x - patches[j].cen_x;
-      dist_y = patches[i].cen_y - patches[j].cen_y;
-
-      if (dist_x < 0) {
-        dist_x = -dist_x;
-        dist_y = -dist_y;
-      }
-      if (ABS (2 * dist_y) < dist_x && dist_x < 100) {
-        points[n_points].x = dist_x;
-        points[n_points].y = dist_y;
-        points[n_points].valid = TRUE;
-        points[n_points].patch1 = i;
-        points[n_points].patch2 = j;
-        n_points++;
-        g_assert (n_points < 1000);
-      }
-    }
-  }
-
-  {
-    int dist;
-    int ave_x = 0, ave_y = 0;
-    for (dist = 50; dist >= 10; dist -= 5) {
-      int sum_x, sum_y;
-      int n_valid;
-
-      sum_x = 0;
-      sum_y = 0;
-      n_valid = 0;
-      for (i = 0; i < n_points; i++) {
-        if (!points[i].valid)
-          continue;
-        sum_x += points[i].x;
-        sum_y += points[i].y;
-        n_valid++;
-      }
-      if (n_valid == 0)
-        continue;
-      ave_x = sum_x / n_valid;
-      ave_y = sum_y / n_valid;
-
-      for (i = 0; i < n_points; i++) {
-        int d;
-        if (!points[i].valid)
-          continue;
-        d = (points[i].x - ave_x) * (points[i].x - ave_x);
-        d += (points[i].y - ave_y) * (points[i].y - ave_y);
-        if (d > dist * dist)
-          points[i].valid = FALSE;
-      }
-    }
-    vec1_x = ave_x;
-    vec1_y = ave_y;
-  }
-
-  n_points = 0;
-  for (i = 0; i < n_patches; i++) {
-    for (j = i + 1; j < n_patches; j++) {
-      int dist_x, dist_y;
-
-      if (i == j)
-        continue;
-
-      dist_x = patches[i].cen_x - patches[j].cen_x;
-      dist_y = patches[i].cen_y - patches[j].cen_y;
-
-      if (dist_y < 0) {
-        dist_x = -dist_x;
-        dist_y = -dist_y;
-      }
-      if (ABS (2 * dist_x) < dist_y && dist_y < 100) {
-        points[n_points].x = dist_x;
-        points[n_points].y = dist_y;
-        points[n_points].valid = TRUE;
-        points[n_points].patch1 = i;
-        points[n_points].patch2 = j;
-        n_points++;
-        g_assert (n_points < 1000);
-      }
-    }
-  }
-
-  {
-    int dist;
-    int ave_x = 0, ave_y = 0;
-    for (dist = 50; dist >= 10; dist -= 5) {
-      int sum_x, sum_y;
-      int n_valid;
-
-      sum_x = 0;
-      sum_y = 0;
-      n_valid = 0;
-      for (i = 0; i < n_points; i++) {
-        if (!points[i].valid)
-          continue;
-        sum_x += points[i].x;
-        sum_y += points[i].y;
-        n_valid++;
-      }
-      if (n_valid == 0)
-        continue;
-      ave_x = sum_x / n_valid;
-      ave_y = sum_y / n_valid;
-
-      for (i = 0; i < n_points; i++) {
-        int d;
-        if (!points[i].valid)
-          continue;
-        d = (points[i].x - ave_x) * (points[i].x - ave_x);
-        d += (points[i].y - ave_y) * (points[i].y - ave_y);
-        if (d > dist * dist)
-          points[i].valid = FALSE;
-      }
-    }
-    vec2_x = ave_x;
-    vec2_y = ave_y;
-  }
-
-#if 0
-  for (i = 0; i < n_points; i++) {
-    if (!points[i].valid)
-      continue;
-    paint_block (&frame, 4 * points[i].x, 240 + 4 * points[i].y, 16);
-  }
-#endif
-#if 0
-  paint_block (&frame, 360, 240, 16);
-  paint_block (&frame, 360 + vec1_x, 240 + vec1_y, 16);
-  paint_block (&frame, 360 + vec2_x, 240 + vec2_y, 16);
-#endif
-
-  {
-    double m00, m01, m10, m11;
-    double det;
-    double v1, v2;
-    double ave_v1 = 0, ave_v2 = 0;
-
-    det = vec1_x * vec2_y - vec1_y * vec2_x;
-    m00 = vec2_y / det;
-    m01 = -vec2_x / det;
-    m10 = -vec1_y / det;
-    m11 = vec1_x / det;
-
-    for (i = 0; i < n_patches - 1; i++) {
-      int count = 0;
-      double sum_v1 = 0;
-      double sum_v2 = 0;
-
-      if (!patches[i].valid)
-        continue;
-
-      n_points = 0;
-      for (j = i + 1; j < n_patches; j++) {
-        int diff_x = patches[j].cen_x - patches[i].cen_x;
-        int diff_y = patches[j].cen_y - patches[i].cen_y;
-
-        if (!patches[j].valid)
-          continue;
-
-        v1 = diff_x * m00 + diff_y * m01;
-        v2 = diff_x * m10 + diff_y * m11;
-
-        if (v1 > -0.5 && v1 < 5.5 && v2 > -0.5 && v2 < 3.5 &&
-            ABS (v1 - rint (v1)) < 0.1 && ABS (v2 - rint (v2)) < 0.1) {
-          sum_v1 += v1 - rint (v1);
-          sum_v2 += v2 - rint (v2);
-          count++;
-        }
-      }
-      ave_v1 = sum_v1 / count;
-      ave_v2 = sum_v2 / count;
-
-      if (count > 20) {
-        int k;
-        for (j = 0; j < 4; j++) {
-          for (k = 0; k < 6; k++) {
-            Stats block;
-
-            int xx;
-            int yy;
-            xx = patches[i].cen_x + (ave_v1 + k) * vec1_x + (ave_v2 +
-                j) * vec2_x;
-            yy = patches[i].cen_y + (ave_v1 + k) * vec1_y + (ave_v2 +
-                j) * vec2_y;
-
-            get_block_stats (&frame, xx - 4, yy - 4, &block);
-            //GST_ERROR("%d %d: %d %d %d", k, j, block.y, block.u, block.v);
-
-            detected_colors[k + j * 6].y = block.y;
-            detected_colors[k + j * 6].u = block.u;
-            detected_colors[k + j * 6].v = block.v;
-
-            paint_block (&frame, xx - 4, yy - 4, 16);
-          }
-        }
-
-        detected = TRUE;
-
-#if 0
-        for (j = i + 1; j < n_patches; j++) {
-          int diff_x = patches[j].cen_x - patches[i].cen_x;
-          int diff_y = patches[j].cen_y - patches[i].cen_y;
-          int xx;
-          int yy;
-
-          if (!patches[j].valid)
-            continue;
-
-          v1 = diff_x * m00 + diff_y * m01;
-          v2 = diff_x * m10 + diff_y * m11;
-
-          if (v1 > -0.5 && v1 < 5.5 && v2 > -0.5 && v2 < 3.5 &&
-              ABS (v1 - rint (v1)) < 0.1 && ABS (v2 - rint (v2)) < 0.1) {
-            v1 = rint (v1);
-            v2 = rint (v2);
-            xx = patches[i].cen_x + (ave_v1 + v1) * vec1_x + (ave_v2 +
-                v2) * vec2_x;
-            yy = patches[i].cen_y + (ave_v1 + v1) * vec1_y + (ave_v2 +
-                v2) * vec2_y;
-
-            paint_block (&frame, patches[j].cen_x, patches[j].cen_y, 128);
-            paint_block (&frame, xx, yy, 16);
-          }
-        }
-        paint_block (&frame, patches[i].cen_x, patches[i].cen_y, 240);
-#endif
-        break;
-      }
-    }
-  }
-
-#define N 10
-  if (detected) {
-    int i, j, k;
-    int n = N;
-    double diff = 0;
-    double matrix[10][10] = { {0} };
-    double vy[10] = { 0 };
-    double vu[10] = { 0 };
-    double vv[10] = { 0 };
-    double *by = patchdetect->by;
-    double *bu = patchdetect->bu;
-    double *bv = patchdetect->bv;
-    double flip_diff = 0;
-
-    for (i = 0; i < 24; i++) {
-      diff += ABS (detected_colors[i].y - patch_colors[i].y);
-      diff += ABS (detected_colors[i].u - patch_colors[i].u);
-      diff += ABS (detected_colors[i].v - patch_colors[i].v);
-
-      flip_diff += ABS (detected_colors[23 - i].y - patch_colors[i].y);
-      flip_diff += ABS (detected_colors[23 - i].u - patch_colors[i].u);
-      flip_diff += ABS (detected_colors[23 - i].v - patch_colors[i].v);
-    }
-    GST_ERROR ("uncorrected error %g (flipped %g)", diff / 24.0,
-        flip_diff / 24.0);
-    if (flip_diff < diff) {
-      for (i = 0; i < 12; i++) {
-        Color tmp;
-        tmp = detected_colors[i];
-        detected_colors[i] = detected_colors[23 - i];
-        detected_colors[23 - i] = tmp;
-      }
-    }
-
-    for (i = 0; i < 24; i++) {
-      int dy = detected_colors[i].y - patch_colors[i].y;
-      int du = detected_colors[i].u - patch_colors[i].u;
-      int dv = detected_colors[i].v - patch_colors[i].v;
-      int py = detected_colors[i].y - 128;
-      int pu = detected_colors[i].u - 128;
-      int pv = detected_colors[i].v - 128;
-      int w = (i < 18) ? 1 : 2;
-      double z[10];
-
-      diff += ABS (dy) + ABS (du) + ABS (dv);
-
-      z[0] = 1;
-      z[1] = py;
-      z[2] = pu;
-      z[3] = pv;
-      z[4] = py * py;
-      z[5] = py * pu;
-      z[6] = py * pv;
-      z[7] = pu * pu;
-      z[8] = pu * pv;
-      z[9] = pv * pv;
-
-      for (j = 0; j < n; j++) {
-        for (k = 0; k < n; k++) {
-          matrix[j][k] += w * z[j] * z[k];
-        }
-
-        vy[j] += w * dy * z[j];
-        vu[j] += w * du * z[j];
-        vv[j] += w * dv * z[j];
-      }
-    }
-
-    invert_matrix (matrix, n);
-
-    for (i = 0; i < n; i++) {
-      by[i] = 0;
-      bu[i] = 0;
-      bv[i] = 0;
-      for (j = 0; j < n; j++) {
-        by[i] += matrix[i][j] * vy[j];
-        bu[i] += matrix[i][j] * vu[j];
-        bv[i] += matrix[i][j] * vv[j];
-      }
-    }
-
-    //GST_ERROR("a %g %g %g b %g %g %g", ay, au, av, by, bu, bv);
-
-    diff = 0;
-    for (i = 0; i < 24; i++) {
-      double cy, cu, cv;
-      double z[10];
-      int py = detected_colors[i].y - 128;
-      int pu = detected_colors[i].u - 128;
-      int pv = detected_colors[i].v - 128;
-
-      z[0] = 1;
-      z[1] = py;
-      z[2] = pu;
-      z[3] = pv;
-      z[4] = py * py;
-      z[5] = py * pu;
-      z[6] = py * pv;
-      z[7] = pu * pu;
-      z[8] = pu * pv;
-      z[9] = pv * pv;
-
-      cy = 0;
-      cu = 0;
-      cv = 0;
-      for (j = 0; j < n; j++) {
-        cy += by[j] * z[j];
-        cu += bu[j] * z[j];
-        cv += bv[j] * z[j];
-      }
-
-      diff += fabs (patch_colors[i].y - (128 + py - cy));
-      diff += fabs (patch_colors[i].u - (128 + pu - cu));
-      diff += fabs (patch_colors[i].v - (128 + pv - cv));
-    }
-    GST_ERROR ("average error %g", diff / 24.0);
-    patchdetect->valid = 3000;
-  }
-
-  if (patchdetect->valid > 0) {
-    int n = N;
-    guint8 *u1, *u2;
-    guint8 *v1, *v2;
-    double *by = patchdetect->by;
-    double *bu = patchdetect->bu;
-    double *bv = patchdetect->bv;
-
-    patchdetect->valid--;
-    u1 = g_malloc (frame.width);
-    u2 = g_malloc (frame.width);
-    v1 = g_malloc (frame.width);
-    v2 = g_malloc (frame.width);
-
-    for (j = 0; j < frame.height; j += 2) {
-      for (i = 0; i < frame.width / 2; i++) {
-        u1[2 * i + 0] = frame.u[(j / 2) * frame.ustride + i];
-        u1[2 * i + 1] = u1[2 * i + 0];
-        u2[2 * i + 0] = u1[2 * i + 0];
-        u2[2 * i + 1] = u1[2 * i + 0];
-        v1[2 * i + 0] = frame.v[(j / 2) * frame.vstride + i];
-        v1[2 * i + 1] = v1[2 * i + 0];
-        v2[2 * i + 0] = v1[2 * i + 0];
-        v2[2 * i + 1] = v1[2 * i + 0];
-      }
-      for (i = 0; i < frame.width; i++) {
-        int k;
-        double z[10];
-        double cy, cu, cv;
-        int y, u, v;
-        int py, pu, pv;
-
-        y = frame.y[(j + 0) * frame.ystride + i];
-        u = u1[i];
-        v = v1[i];
-
-        py = y - 128;
-        pu = u - 128;
-        pv = v - 128;
-
-        z[0] = 1;
-        z[1] = py;
-        z[2] = pu;
-        z[3] = pv;
-        z[4] = py * py;
-        z[5] = py * pu;
-        z[6] = py * pv;
-        z[7] = pu * pu;
-        z[8] = pu * pv;
-        z[9] = pv * pv;
-
-        cy = 0;
-        cu = 0;
-        cv = 0;
-        for (k = 0; k < n; k++) {
-          cy += by[k] * z[k];
-          cu += bu[k] * z[k];
-          cv += bv[k] * z[k];
-        }
-
-        frame.y[(j + 0) * frame.ystride + i] = CLAMP (rint (y - cy), 0, 255);
-        u1[i] = CLAMP (rint (u - cu), 0, 255);
-        v1[i] = CLAMP (rint (v - cv), 0, 255);
-
-        y = frame.y[(j + 1) * frame.ystride + i];
-        u = u2[i];
-        v = v2[i];
-
-        py = y - 128;
-        pu = u - 128;
-        pv = v - 128;
-
-        z[0] = 1;
-        z[1] = py;
-        z[2] = pu;
-        z[3] = pv;
-        z[4] = py * py;
-        z[5] = py * pu;
-        z[6] = py * pv;
-        z[7] = pu * pu;
-        z[8] = pu * pv;
-        z[9] = pv * pv;
-
-        cy = 0;
-        cu = 0;
-        cv = 0;
-        for (k = 0; k < n; k++) {
-          cy += by[k] * z[k];
-          cu += bu[k] * z[k];
-          cv += bv[k] * z[k];
-        }
-
-        frame.y[(j + 1) * frame.ystride + i] = CLAMP (rint (y - cy), 0, 255);
-        u2[i] = CLAMP (rint (u - cu), 0, 255);
-        v2[i] = CLAMP (rint (v - cv), 0, 255);
-      }
-      for (i = 0; i < frame.width / 2; i++) {
-        frame.u[(j / 2) * frame.ustride + i] = (u1[2 * i + 0] +
-            u1[2 * i + 1] + u2[2 * i + 0] + u2[2 * i + 1] + 2) >> 2;
-        frame.v[(j / 2) * frame.vstride + i] = (v1[2 * i + 0] +
-            v1[2 * i + 1] + v2[2 * i + 0] + v2[2 * i + 1] + 2) >> 2;
-      }
-    }
-
-    g_free (u1);
-    g_free (u2);
-    g_free (v1);
-    g_free (v2);
-  }
-
-  g_free (points);
-  g_free (patches);
-  g_free (patchpix);
-
-  return GST_FLOW_OK;
-}
-
-static gboolean
-gst_patchdetect_src_event (GstBaseTransform * trans, GstEvent * event)
-{
-
-  return TRUE;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-
-  gst_element_register (plugin, "patchdetect", GST_RANK_NONE,
-      gst_patchdetect_get_type ());
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    patchdetect,
-    "patchdetect element",
-    plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/patchdetect/gstpatchdetect.h b/gst/patchdetect/gstpatchdetect.h
deleted file mode 100644 (file)
index 2ccbcf3..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 David Schleef <ds@entropywave.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef _GST_PATCHDETECT_H_
-#define _GST_PATCHDETECT_H_
-
-#include <gst/base/gstbasetransform.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_PATCHDETECT   (gst_patchdetect_get_type())
-#define GST_PATCHDETECT(obj)   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PATCHDETECT,GstPatchdetect))
-#define GST_PATCHDETECT_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PATCHDETECT,GstPatchdetectClass))
-#define GST_IS_PATCHDETECT(obj)   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PATCHDETECT))
-#define GST_IS_PATCHDETECT_CLASS(obj)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PATCHDETECT))
-
-typedef struct _GstPatchdetect GstPatchdetect;
-typedef struct _GstPatchdetectClass GstPatchdetectClass;
-
-struct _GstPatchdetect
-{
-  GstBaseTransform base_patchdetect;
-
-  GstVideoFormat format;
-  int width;
-  int height;
-
-  int t;
-  int valid;
-  double by[10], bu[10], bv[10];
-};
-
-struct _GstPatchdetectClass
-{
-  GstBaseTransformClass base_patchdetect_class;
-};
-
-GType gst_patchdetect_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/gst/patchdetect/meson.build b/gst/patchdetect/meson.build
deleted file mode 100644 (file)
index 1ee7734..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-patch_sources = [
-  'gstpatchdetect.c',
-]
-
-gstpatchdetect = library('gstpatchdetect',
-  patch_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep, gstvideo_dep, libm],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/rtjpeg/.gitignore b/gst/rtjpeg/.gitignore
deleted file mode 100644 (file)
index 08f5ed3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Makefile
-Makefile.in
-*.o
-*.lo
-*.la
-.deps
-.libs
diff --git a/gst/rtjpeg/Makefile.am b/gst/rtjpeg/Makefile.am
deleted file mode 100644 (file)
index d0fcdc3..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-plugin_LTLIBRARIES = libgstrtjpeg.la
-
-libgstrtjpeg_la_SOURCES = gstrtjpeg.c gstrtjpegenc.c gstrtjpegdec.c RTjpeg.c
-libgstrtjpeg_la_CFLAGS = $(GST_CFLAGS)
-libgstrtjpeg_la_LIBADD =
-libgstrtjpeg_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstrtjpeg_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstrtjpegenc.h gstrtjpegdec.h RTjpeg.h
diff --git a/gst/rtjpeg/README b/gst/rtjpeg/README
deleted file mode 100644 (file)
index 3479686..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This plugin contains elements necessary for doing RTjpeg compression and
-decompression, as well as conversion from RGB to YUV and back, based
-entirely on functions supplied by RTjpeg.c.
-
-You can find RTjpeg at Justin Schoeman's site:
-http://www.ee.up.ac.za/~justin/bttv/
-
-The idea is to start out with the code elements reading and writing YUV420
-images, with external elements to do the conversion.  Eventually (when
-typing is a bit more sane/globally used) the codec elements will
-automatically convert images to/from the proper format based on what their
-peer wants to be dealing with.
diff --git a/gst/rtjpeg/RTjpeg.c b/gst/rtjpeg/RTjpeg.c
deleted file mode 100644 (file)
index e387354..0000000
+++ /dev/null
@@ -1,3448 +0,0 @@
-/* 
-    This program is free software; you can redristibute 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
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-   This file is a modified version of RTjpeg 0.1.2, (C) Justin Schoeman 1998
-
-   (991101) Wim Taymans : added MMX dct and idct from intels site.
-*/
-
-
-/*
-
-Main Routines
-
-This file contains most of the initialisation and control functions
-
-(C) Justin Schoeman 1998
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-typedef unsigned char __u8;
-typedef signed char __s8;
-typedef unsigned short __u16;
-typedef signed short __s16;
-typedef unsigned long __u32;
-typedef signed long __s32;
-typedef unsigned long long __u64;
-
-/*#define MMX_TRACE */
-
-
-#ifdef HAVE_LIBMMX
-#include "mmx.h"
-#endif
-
-static const unsigned char RTjpeg_ZZ[64] = {
-  0,
-  8, 1,
-  2, 9, 16,
-  24, 17, 10, 3,
-  4, 11, 18, 25, 32,
-  40, 33, 26, 19, 12, 5,
-  6, 13, 20, 27, 34, 41, 48,
-  56, 49, 42, 35, 28, 21, 14, 7,
-  15, 22, 29, 36, 43, 50, 57,
-  58, 51, 44, 37, 30, 23,
-  31, 38, 45, 52, 59,
-  60, 53, 46, 39,
-  47, 54, 61,
-  62, 55,
-  63
-};
-
-static const __u64 RTjpeg_aan_tab[64] = {
-  4294967296ULL, 5957222912ULL, 5611718144ULL, 5050464768ULL, 4294967296ULL,
-  3374581504ULL, 2324432128ULL, 1184891264ULL,
-  5957222912ULL, 8263040512ULL, 7783580160ULL, 7005009920ULL, 5957222912ULL,
-  4680582144ULL, 3224107520ULL, 1643641088ULL,
-  5611718144ULL, 7783580160ULL, 7331904512ULL, 6598688768ULL, 5611718144ULL,
-  4408998912ULL, 3036936960ULL, 1548224000ULL,
-  5050464768ULL, 7005009920ULL, 6598688768ULL, 5938608128ULL, 5050464768ULL,
-  3968072960ULL, 2733115392ULL, 1393296000ULL,
-  4294967296ULL, 5957222912ULL, 5611718144ULL, 5050464768ULL, 4294967296ULL,
-  3374581504ULL, 2324432128ULL, 1184891264ULL,
-  3374581504ULL, 4680582144ULL, 4408998912ULL, 3968072960ULL, 3374581504ULL,
-  2651326208ULL, 1826357504ULL, 931136000ULL,
-  2324432128ULL, 3224107520ULL, 3036936960ULL, 2733115392ULL, 2324432128ULL,
-  1826357504ULL, 1258030336ULL, 641204288ULL,
-  1184891264ULL, 1643641088ULL, 1548224000ULL, 1393296000ULL, 1184891264ULL,
-  931136000ULL, 641204288ULL, 326894240ULL,
-};
-
-#ifndef HAVE_LIBMMX
-static __s32 RTjpeg_ws[64 + 31];
-#endif
-__u8 RTjpeg_alldata[2 * 64 + 4 * 64 + 4 * 64 + 4 * 64 + 4 * 64 + 32];
-
-__s16 *RTjpeg_block;
-__s32 *RTjpeg_lqt;
-__s32 *RTjpeg_cqt;
-__u32 *RTjpeg_liqt;
-__u32 *RTjpeg_ciqt;
-
-unsigned char RTjpeg_lb8;
-unsigned char RTjpeg_cb8;
-int RTjpeg_width, RTjpeg_height;
-int RTjpeg_Ywidth, RTjpeg_Cwidth;
-int RTjpeg_Ysize, RTjpeg_Csize;
-
-__s16 *RTjpeg_old = NULL;
-
-#ifdef HAVE_LIBMMX
-mmx_t RTjpeg_lmask;
-mmx_t RTjpeg_cmask;
-#else
-__u16 RTjpeg_lmask;
-__u16 RTjpeg_cmask;
-#endif
-int RTjpeg_mtest = 0;
-
-static const unsigned char RTjpeg_lum_quant_tbl[64] = {
-  16, 11, 10, 16, 24, 40, 51, 61,
-  12, 12, 14, 19, 26, 58, 60, 55,
-  14, 13, 16, 24, 40, 57, 69, 56,
-  14, 17, 22, 29, 51, 87, 80, 62,
-  18, 22, 37, 56, 68, 109, 103, 77,
-  24, 35, 55, 64, 81, 104, 113, 92,
-  49, 64, 78, 87, 103, 121, 120, 101,
-  72, 92, 95, 98, 112, 100, 103, 99
-};
-
-static const unsigned char RTjpeg_chrom_quant_tbl[64] = {
-  17, 18, 24, 47, 99, 99, 99, 99,
-  18, 21, 26, 66, 99, 99, 99, 99,
-  24, 26, 56, 99, 99, 99, 99, 99,
-  47, 66, 99, 99, 99, 99, 99, 99,
-  99, 99, 99, 99, 99, 99, 99, 99,
-  99, 99, 99, 99, 99, 99, 99, 99,
-  99, 99, 99, 99, 99, 99, 99, 99,
-  99, 99, 99, 99, 99, 99, 99, 99
-};
-
-int
-RTjpeg_b2s (__s16 * data, __s8 * strm, __u8 bt8)
-{
-  register int ci, co = 1, tmp;
-  register __s16 ZZvalue;
-
-  strm[0] =
-      (__u8) (data[RTjpeg_ZZ[0]] > 254) ? 254 : ((data[RTjpeg_ZZ[0]] <
-          0) ? 0 : data[RTjpeg_ZZ[0]]);
-
-  for (ci = 1; ci <= bt8; ci++) {
-    ZZvalue = data[RTjpeg_ZZ[ci]];
-
-    if (ZZvalue > 0) {
-      strm[co++] = (__s8) (ZZvalue > 127) ? 127 : ZZvalue;
-    } else {
-      strm[co++] = (__s8) (ZZvalue < -128) ? -128 : ZZvalue;
-    }
-  }
-
-  for (; ci < 64; ci++) {
-    ZZvalue = data[RTjpeg_ZZ[ci]];
-
-    if (ZZvalue > 0) {
-      strm[co++] = (__s8) (ZZvalue > 63) ? 63 : ZZvalue;
-    } else if (ZZvalue < 0) {
-      strm[co++] = (__s8) (ZZvalue < -64) ? -64 : ZZvalue;
-    } else {                    /* compress zeros */
-
-      tmp = ci;
-      do {
-        ci++;
-      }
-      while ((ci < 64) && (data[RTjpeg_ZZ[ci]] == 0));
-
-      strm[co++] = (__s8) (63 + (ci - tmp));
-      ci--;
-    }
-  }
-  return (int) co;
-}
-
-int
-RTjpeg_s2b (__s16 * data, __s8 * strm, __u8 bt8, __u32 * qtbl)
-{
-  int ci = 1, co = 1, tmp;
-  register int i;
-
-  i = RTjpeg_ZZ[0];
-  data[i] = ((__u8) strm[0]) * qtbl[i];
-
-  for (co = 1; co <= bt8; co++) {
-    i = RTjpeg_ZZ[co];
-    data[i] = strm[ci++] * qtbl[i];
-  }
-
-  for (; co < 64; co++) {
-    if (strm[ci] > 63) {
-      tmp = co + strm[ci] - 63;
-      for (; co < tmp; co++)
-        data[RTjpeg_ZZ[co]] = 0;
-      co--;
-    } else {
-      i = RTjpeg_ZZ[co];
-      data[i] = strm[ci] * qtbl[i];
-    }
-    ci++;
-  }
-  return (int) ci;
-}
-
-#if defined(HAVE_LIBMMX)
-void
-RTjpeg_quant_init (void)
-{
-  int i;
-  __s16 *qtbl;
-
-  qtbl = (__s16 *) RTjpeg_lqt;
-  for (i = 0; i < 64; i++)
-    qtbl[i] = (__s16) RTjpeg_lqt[i];
-
-  qtbl = (__s16 *) RTjpeg_cqt;
-  for (i = 0; i < 64; i++)
-    qtbl[i] = (__s16) RTjpeg_cqt[i];
-}
-
-static mmx_t RTjpeg_ones = (mmx_t) (long long) 0x0001000100010001LL;
-static mmx_t RTjpeg_half = (mmx_t) (long long) 0x7fff7fff7fff7fffLL;
-
-void
-RTjpeg_quant (__s16 * block, __s32 * qtbl)
-{
-  int i;
-  mmx_t *bl, *ql;
-
-  ql = (mmx_t *) qtbl;
-  bl = (mmx_t *) block;
-
-  movq_m2r (RTjpeg_ones, mm6);
-  movq_m2r (RTjpeg_half, mm7);
-
-  for (i = 16; i; i--) {
-    movq_m2r (*(ql++), mm0);    /* quant vals (4) */
-    movq_m2r (*bl, mm2);        /* block vals (4) */
-    movq_r2r (mm0, mm1);
-    movq_r2r (mm2, mm3);
-
-    punpcklwd_r2r (mm6, mm0);   /*           1 qb 1 qa */
-    punpckhwd_r2r (mm6, mm1);   /* 1 qd 1 qc */
-
-    punpcklwd_r2r (mm7, mm2);   /*                   32767 bb 32767 ba */
-    punpckhwd_r2r (mm7, mm3);   /* 32767 bd 32767 bc */
-
-    pmaddwd_r2r (mm2, mm0);     /*                         32767+bb*qb 32767+ba*qa */
-    pmaddwd_r2r (mm3, mm1);     /* 32767+bd*qd 32767+bc*qc */
-
-    psrad_i2r (16, mm0);
-    psrad_i2r (16, mm1);
-
-    packssdw_r2r (mm1, mm0);
-
-    movq_r2m (mm0, *(bl++));
-
-  }
-}
-#else
-void
-RTjpeg_quant_init (void)
-{
-}
-
-void
-RTjpeg_quant (__s16 * block, __s32 * qtbl)
-{
-  int i;
-
-  for (i = 0; i < 64; i++)
-    block[i] = (__s16) ((block[i] * qtbl[i] + 32767) >> 16);
-}
-#endif
-
-/*
- * Perform the forward DCT on one block of samples.
- */
-#ifdef HAVE_LIBMMX
-static mmx_t RTjpeg_C4 = (mmx_t) (long long) 0x2D412D412D412D41LL;
-static mmx_t RTjpeg_C6 = (mmx_t) (long long) 0x187E187E187E187ELL;
-static mmx_t RTjpeg_C2mC6 = (mmx_t) (long long) 0x22A322A322A322A3LL;
-static mmx_t RTjpeg_C2pC6 = (mmx_t) (long long) 0x539F539F539F539FLL;
-static mmx_t RTjpeg_zero = (mmx_t) (long long) 0x0000000000000000LL;
-
-#else
-
-#define FIX_0_382683433  ((__s32)   98) /* FIX(0.382683433) */
-#define FIX_0_541196100  ((__s32)  139) /* FIX(0.541196100) */
-#define FIX_0_707106781  ((__s32)  181) /* FIX(0.707106781) */
-#define FIX_1_306562965  ((__s32)  334) /* FIX(1.306562965) */
-
-#define DESCALE10(x) (__s16)( ((x)+128) >> 8)
-#define DESCALE20(x)  (__s16)(((x)+32768) >> 16)
-#define D_MULTIPLY(var,const)  ((__s32) ((var) * (const)))
-#endif
-
-void
-RTjpeg_dct_init (void)
-{
-  int i;
-
-  for (i = 0; i < 64; i++) {
-    RTjpeg_lqt[i] = (((__u64) RTjpeg_lqt[i] << 32) / RTjpeg_aan_tab[i]);
-    RTjpeg_cqt[i] = (((__u64) RTjpeg_cqt[i] << 32) / RTjpeg_aan_tab[i]);
-  }
-}
-
-void
-RTjpeg_dctY (__u8 * idata, __s16 * odata, int rskip)
-{
-#ifndef HAVE_LIBMMX
-  __s32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  __s32 tmp10, tmp11, tmp12, tmp13;
-  __s32 z1, z2, z3, z4, z5, z11, z13;
-  __u8 *idataptr;
-  __s16 *odataptr;
-  __s32 *wsptr;
-  int ctr;
-
-  idataptr = idata;
-  wsptr = RTjpeg_ws;
-  for (ctr = 7; ctr >= 0; ctr--) {
-    tmp0 = idataptr[0] + idataptr[7];
-    tmp7 = idataptr[0] - idataptr[7];
-    tmp1 = idataptr[1] + idataptr[6];
-    tmp6 = idataptr[1] - idataptr[6];
-    tmp2 = idataptr[2] + idataptr[5];
-    tmp5 = idataptr[2] - idataptr[5];
-    tmp3 = idataptr[3] + idataptr[4];
-    tmp4 = idataptr[3] - idataptr[4];
-
-    tmp10 = (tmp0 + tmp3);      /* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = (tmp1 + tmp2);
-    tmp12 = tmp1 - tmp2;
-
-    wsptr[0] = (tmp10 + tmp11) << 8;    /* phase 3 */
-    wsptr[4] = (tmp10 - tmp11) << 8;
-
-    z1 = D_MULTIPLY (tmp12 + tmp13, FIX_0_707106781);   /* c4 */
-    wsptr[2] = (tmp13 << 8) + z1;       /* phase 5 */
-    wsptr[6] = (tmp13 << 8) - z1;
-
-    tmp10 = tmp4 + tmp5;        /* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    z5 = D_MULTIPLY (tmp10 - tmp12, FIX_0_382683433);   /* c6 */
-    z2 = D_MULTIPLY (tmp10, FIX_0_541196100) + z5;      /* c2-c6 */
-    z4 = D_MULTIPLY (tmp12, FIX_1_306562965) + z5;      /* c2+c6 */
-    z3 = D_MULTIPLY (tmp11, FIX_0_707106781);   /* c4 */
-
-    z11 = (tmp7 << 8) + z3;     /* phase 5 */
-    z13 = (tmp7 << 8) - z3;
-
-    wsptr[5] = z13 + z2;        /* phase 6 */
-    wsptr[3] = z13 - z2;
-    wsptr[1] = z11 + z4;
-    wsptr[7] = z11 - z4;
-
-    idataptr += rskip << 3;     /* advance pointer to next row */
-    wsptr += 8;
-  }
-
-  wsptr = RTjpeg_ws;
-  odataptr = odata;
-  for (ctr = 7; ctr >= 0; ctr--) {
-    tmp0 = wsptr[0] + wsptr[56];
-    tmp7 = wsptr[0] - wsptr[56];
-    tmp1 = wsptr[8] + wsptr[48];
-    tmp6 = wsptr[8] - wsptr[48];
-    tmp2 = wsptr[16] + wsptr[40];
-    tmp5 = wsptr[16] - wsptr[40];
-    tmp3 = wsptr[24] + wsptr[32];
-    tmp4 = wsptr[24] - wsptr[32];
-
-    tmp10 = tmp0 + tmp3;        /* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    odataptr[0] = DESCALE10 (tmp10 + tmp11);    /* phase 3 */
-    odataptr[32] = DESCALE10 (tmp10 - tmp11);
-
-    z1 = D_MULTIPLY (tmp12 + tmp13, FIX_0_707106781);   /* c4 */
-    odataptr[16] = DESCALE20 ((tmp13 << 8) + z1);       /* phase 5 */
-    odataptr[48] = DESCALE20 ((tmp13 << 8) - z1);
-
-    tmp10 = tmp4 + tmp5;        /* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    z5 = D_MULTIPLY (tmp10 - tmp12, FIX_0_382683433);   /* c6 */
-    z2 = D_MULTIPLY (tmp10, FIX_0_541196100) + z5;      /* c2-c6 */
-    z4 = D_MULTIPLY (tmp12, FIX_1_306562965) + z5;      /* c2+c6 */
-    z3 = D_MULTIPLY (tmp11, FIX_0_707106781);   /* c4 */
-
-    z11 = (tmp7 << 8) + z3;     /* phase 5 */
-    z13 = (tmp7 << 8) - z3;
-
-    odataptr[40] = DESCALE20 (z13 + z2);        /* phase 6 */
-    odataptr[24] = DESCALE20 (z13 - z2);
-    odataptr[8] = DESCALE20 (z11 + z4);
-    odataptr[56] = DESCALE20 (z11 - z4);
-
-    odataptr++;                 /* advance pointer to next column */
-    wsptr++;
-  }
-#else
-  mmx_t tmp6, tmp7;
-  register mmx_t *dataptr = (mmx_t *) odata;
-  mmx_t *idata2 = (mmx_t *) idata;
-
-  /* first copy the input 8 bit to the destination 16 bits */
-
-  movq_m2r (RTjpeg_zero, mm2);
-
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 1));
-
-  idata2 += rskip;
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr + 2));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 3));
-
-  idata2 += rskip;
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr + 4));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 5));
-
-  idata2 += rskip;
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr + 6));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 7));
-
-  idata2 += rskip;
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr + 8));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 9));
-
-  idata2 += rskip;
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr + 10));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 11));
-
-  idata2 += rskip;
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr + 12));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 13));
-
-  idata2 += rskip;
-
-  movq_m2r (*idata2, mm0);
-  movq_r2r (mm0, mm1);
-
-  punpcklbw_r2r (mm2, mm0);
-  movq_r2m (mm0, *(dataptr + 14));
-
-  punpckhbw_r2r (mm2, mm1);
-  movq_r2m (mm1, *(dataptr + 15));
-
-/*  Start Transpose to do calculations on rows */
-
-  movq_m2r (*(dataptr + 9), mm7);       /* m03:m02|m01:m00 - first line (line 4)and copy into m5 */
-
-  movq_m2r (*(dataptr + 13), mm6);      /* m23:m22|m21:m20 - third line (line 6)and copy into m2 */
-  movq_r2r (mm7, mm5);
-
-  punpcklwd_m2r (*(dataptr + 11), mm7); /* m11:m01|m10:m00 - interleave first and second lines */
-  movq_r2r (mm6, mm2);
-
-  punpcklwd_m2r (*(dataptr + 15), mm6); /* m31:m21|m30:m20 - interleave third and fourth lines */
-  movq_r2r (mm7, mm1);
-
-  movq_m2r (*(dataptr + 11), mm3);      /* m13:m13|m11:m10 - second line   */
-  punpckldq_r2r (mm6, mm7);     /* m30:m20|m10:m00 - interleave to produce result 1 */
-
-  movq_m2r (*(dataptr + 15), mm0);      /* m13:m13|m11:m10 - fourth line */
-  punpckhdq_r2r (mm6, mm1);     /* m31:m21|m11:m01 - interleave to produce result 2 */
-
-  movq_r2m (mm7, *(dataptr + 9));       /* write result 1 */
-  punpckhwd_r2r (mm3, mm5);     /* m13:m03|m12:m02 - interleave first and second lines */
-
-  movq_r2m (mm1, *(dataptr + 11));      /* write result 2 */
-  punpckhwd_r2r (mm0, mm2);     /* m33:m23|m32:m22 - interleave third and fourth lines */
-
-  movq_r2r (mm5, mm1);
-  punpckldq_r2r (mm2, mm5);     /* m32:m22|m12:m02 - interleave to produce result 3 */
-
-  movq_m2r (*(dataptr + 1), mm0);       /* m03:m02|m01:m00 - first line, 4x4 */
-  punpckhdq_r2r (mm2, mm1);     /* m33:m23|m13:m03 - interleave to produce result 4 */
-
-  movq_r2m (mm5, *(dataptr + 13));      /* write result 3 */
-
-  /* last 4x4 done */
-
-  movq_r2m (mm1, *(dataptr + 15));      /* write result 4, last 4x4 */
-
-  movq_m2r (*(dataptr + 5), mm2);       /* m23:m22|m21:m20 - third line */
-  movq_r2r (mm0, mm6);
-
-  punpcklwd_m2r (*(dataptr + 3), mm0);  /* m11:m01|m10:m00 - interleave first and second lines */
-  movq_r2r (mm2, mm7);
-
-  punpcklwd_m2r (*(dataptr + 7), mm2);  /* m31:m21|m30:m20 - interleave third and fourth lines */
-  movq_r2r (mm0, mm4);
-
-
-  movq_m2r (*(dataptr + 8), mm1);       /* n03:n02|n01:n00 - first line  */
-  punpckldq_r2r (mm2, mm0);     /* m30:m20|m10:m00 - interleave to produce first result */
-
-  movq_m2r (*(dataptr + 12), mm3);      /* n23:n22|n21:n20 - third line */
-  punpckhdq_r2r (mm2, mm4);     /* m31:m21|m11:m01 - interleave to produce second result */
-
-  punpckhwd_m2r (*(dataptr + 3), mm6);  /* m13:m03|m12:m02 - interleave first and second lines */
-  movq_r2r (mm1, mm2);          /* copy first line */
-
-  punpckhwd_m2r (*(dataptr + 7), mm7);  /* m33:m23|m32:m22 - interleave third and fourth lines */
-  movq_r2r (mm6, mm5);          /* copy first intermediate result */
-
-  movq_r2m (mm0, *(dataptr + 8));       /* write result 1 */
-  punpckhdq_r2r (mm7, mm5);     /* m33:m23|m13:m03 - produce third result */
-
-  punpcklwd_m2r (*(dataptr + 10), mm1); /* n11:n01|n10:n00 - interleave first and second lines */
-  movq_r2r (mm3, mm0);          /* copy third line */
-
-  punpckhwd_m2r (*(dataptr + 10), mm2); /* n13:n03|n12:n02 - interleave first and second lines */
-
-  movq_r2m (mm4, *(dataptr + 10));      /* write result 2 out */
-  punpckldq_r2r (mm7, mm6);     /* m32:m22|m12:m02 - produce fourth result */
-
-  punpcklwd_m2r (*(dataptr + 14), mm3); /* n31:n21|n30:n20 - interleave third and fourth lines */
-  movq_r2r (mm1, mm4);
-
-  movq_r2m (mm6, *(dataptr + 12));      /* write result 3 out */
-  punpckldq_r2r (mm3, mm1);     /* n30:n20|n10:n00 - produce first result */
-
-  punpckhwd_m2r (*(dataptr + 14), mm0); /* n33:n23|n32:n22 - interleave third and fourth lines */
-  movq_r2r (mm2, mm6);
-
-  movq_r2m (mm5, *(dataptr + 14));      /* write result 4 out */
-  punpckhdq_r2r (mm3, mm4);     /* n31:n21|n11:n01- produce second result */
-
-  movq_r2m (mm1, *(dataptr + 1));       /* write result 5 out - (first result for other 4 x 4 block) */
-  punpckldq_r2r (mm0, mm2);     /* n32:n22|n12:n02- produce third result */
-
-  movq_r2m (mm4, *(dataptr + 3));       /* write result 6 out */
-  punpckhdq_r2r (mm0, mm6);     /* n33:n23|n13:n03 - produce fourth result */
-
-  movq_r2m (mm2, *(dataptr + 5));       /* write result 7 out */
-
-  movq_m2r (*dataptr, mm0);     /* m03:m02|m01:m00 - first line, first 4x4 */
-
-  movq_r2m (mm6, *(dataptr + 7));       /* write result 8 out */
-
-
-/* Do first 4x4 quadrant, which is used in the beginning of the DCT: */
-
-  movq_m2r (*(dataptr + 4), mm7);       /* m23:m22|m21:m20 - third line */
-  movq_r2r (mm0, mm2);
-
-  punpcklwd_m2r (*(dataptr + 2), mm0);  /* m11:m01|m10:m00 - interleave first and second lines */
-  movq_r2r (mm7, mm4);
-
-  punpcklwd_m2r (*(dataptr + 6), mm7);  /* m31:m21|m30:m20 - interleave third and fourth lines */
-  movq_r2r (mm0, mm1);
-
-  movq_m2r (*(dataptr + 2), mm6);       /* m13:m12|m11:m10 - second line */
-  punpckldq_r2r (mm7, mm0);     /* m30:m20|m10:m00 - interleave to produce result 1 */
-
-  movq_m2r (*(dataptr + 6), mm5);       /* m33:m32|m31:m30 - fourth line */
-  punpckhdq_r2r (mm7, mm1);     /* m31:m21|m11:m01 - interleave to produce result 2 */
-
-  movq_r2r (mm0, mm7);          /* write result 1 */
-  punpckhwd_r2r (mm6, mm2);     /* m13:m03|m12:m02 - interleave first and second lines */
-
-  psubw_m2r (*(dataptr + 14), mm7);     /* tmp07=x0-x7: Stage 1 */
-  movq_r2r (mm1, mm6);          /* write result 2 */
-
-  paddw_m2r (*(dataptr + 14), mm0);     /* tmp00=x0+x7: Stage 1 */
-  punpckhwd_r2r (mm5, mm4);     /* m33:m23|m32:m22 - interleave third and fourth lines */
-
-  paddw_m2r (*(dataptr + 12), mm1);     /* tmp01=x1+x6: Stage 1 */
-  movq_r2r (mm2, mm3);          /* copy first intermediate result */
-
-  psubw_m2r (*(dataptr + 12), mm6);     /* tmp06=x1-x6: Stage 1 */
-  punpckldq_r2r (mm4, mm2);     /* m32:m22|m12:m02 - interleave to produce result 3 */
-
-  movq_r2m (mm7, tmp7);
-  movq_r2r (mm2, mm5);          /* write result 3 */
-
-  movq_r2m (mm6, tmp6);
-  punpckhdq_r2r (mm4, mm3);     /* m33:m23|m13:m03 - interleave to produce result 4 */
-
-  paddw_m2r (*(dataptr + 10), mm2);     /* tmp02=x2+5: Stage 1 */
-  movq_r2r (mm3, mm4);          /* write result 4 */
-
-/************************************************************************************************
-                                        End of Transpose
-************************************************************************************************/
-
-
-  paddw_m2r (*(dataptr + 8), mm3);      /* tmp03=x3+x4: stage 1 */
-  movq_r2r (mm0, mm7);
-
-  psubw_m2r (*(dataptr + 8), mm4);      /* tmp04=x3-x4: stage 1 */
-  movq_r2r (mm1, mm6);
-
-  paddw_r2r (mm3, mm0);         /* tmp10 = tmp00 + tmp03: even 2 */
-  psubw_r2r (mm3, mm7);         /* tmp13 = tmp00 - tmp03: even 2 */
-
-  psubw_r2r (mm2, mm6);         /* tmp12 = tmp01 - tmp02: even 2 */
-  paddw_r2r (mm2, mm1);         /* tmp11 = tmp01 + tmp02: even 2 */
-
-  psubw_m2r (*(dataptr + 10), mm5);     /* tmp05=x2-x5: stage 1 */
-  paddw_r2r (mm7, mm6);         /* tmp12 + tmp13 */
-
-  /* stage 3 */
-
-  movq_m2r (tmp6, mm2);
-  movq_r2r (mm0, mm3);
-
-  psllw_i2r (2, mm6);           /* m8 * 2^2 */
-  paddw_r2r (mm1, mm0);
-
-  pmulhw_m2r (RTjpeg_C4, mm6);  /* z1 */
-  psubw_r2r (mm1, mm3);
-
-  movq_r2m (mm0, *dataptr);
-  movq_r2r (mm7, mm0);
-
-  /* Odd part */
-  movq_r2m (mm3, *(dataptr + 8));
-  paddw_r2r (mm5, mm4);         /* tmp10 */
-
-  movq_m2r (tmp7, mm3);
-  paddw_r2r (mm6, mm0);         /* tmp32 */
-
-  paddw_r2r (mm2, mm5);         /* tmp11 */
-  psubw_r2r (mm6, mm7);         /* tmp33 */
-
-  movq_r2m (mm0, *(dataptr + 4));
-  paddw_r2r (mm3, mm2);         /* tmp12 */
-
-  /* stage 4 */
-
-  movq_r2m (mm7, *(dataptr + 12));
-  movq_r2r (mm4, mm1);          /* copy of tmp10 */
-
-  psubw_r2r (mm2, mm1);         /* tmp10 - tmp12 */
-  psllw_i2r (2, mm4);           /* m8 * 2^2 */
-
-  movq_m2r (RTjpeg_C2mC6, mm0);
-  psllw_i2r (2, mm1);
-
-  pmulhw_m2r (RTjpeg_C6, mm1);  /* z5 */
-  psllw_i2r (2, mm2);
-
-  pmulhw_r2r (mm0, mm4);        /* z5 */
-
-  /* stage 5 */
-
-  pmulhw_m2r (RTjpeg_C2pC6, mm2);
-  psllw_i2r (2, mm5);
-
-  pmulhw_m2r (RTjpeg_C4, mm5);  /* z3 */
-  movq_r2r (mm3, mm0);          /* copy tmp7 */
-
-  movq_m2r (*(dataptr + 1), mm7);
-  paddw_r2r (mm1, mm4);         /* z2 */
-
-  paddw_r2r (mm1, mm2);         /* z4 */
-
-  paddw_r2r (mm5, mm0);         /* z11 */
-  psubw_r2r (mm5, mm3);         /* z13 */
-
-  /* stage 6 */
-
-  movq_r2r (mm3, mm5);          /* copy z13 */
-  psubw_r2r (mm4, mm3);         /* y3=z13 - z2 */
-
-  paddw_r2r (mm4, mm5);         /* y5=z13 + z2 */
-  movq_r2r (mm0, mm6);          /* copy z11 */
-
-  movq_r2m (mm3, *(dataptr + 6));       /*save y3 */
-  psubw_r2r (mm2, mm0);         /* y7=z11 - z4 */
-
-  movq_r2m (mm5, *(dataptr + 10));      /*save y5 */
-  paddw_r2r (mm2, mm6);         /* y1=z11 + z4 */
-
-  movq_r2m (mm0, *(dataptr + 14));      /*save y7 */
-
-        /************************************************
-         *  End of 1st 4 rows
-         ************************************************/
-
-  movq_m2r (*(dataptr + 3), mm1);       /* load x1: stage 1 */
-  movq_r2r (mm7, mm0);          /* copy x0 */
-
-  movq_r2m (mm6, *(dataptr + 2));       /*save y1 */
-
-  movq_m2r (*(dataptr + 5), mm2);       /* load x2: stage 1 */
-  movq_r2r (mm1, mm6);          /* copy x1 */
-
-  paddw_m2r (*(dataptr + 15), mm0);     /* tmp00 = x0 + x7 */
-
-  movq_m2r (*(dataptr + 7), mm3);       /* load x3 : stage 1 */
-  movq_r2r (mm2, mm5);          /* copy x2 */
-
-  psubw_m2r (*(dataptr + 15), mm7);     /* tmp07 = x0 - x7 */
-  movq_r2r (mm3, mm4);          /* copy x3 */
-
-  paddw_m2r (*(dataptr + 13), mm1);     /* tmp01 = x1 + x6 */
-
-  movq_r2m (mm7, tmp7);         /* save tmp07 */
-  movq_r2r (mm0, mm7);          /* copy tmp00 */
-
-  psubw_m2r (*(dataptr + 13), mm6);     /* tmp06 = x1 - x6 */
-
-  /* stage 2, Even Part */
-
-  paddw_m2r (*(dataptr + 9), mm3);      /* tmp03 = x3 + x4 */
-
-  movq_r2m (mm6, tmp6);         /* save tmp07 */
-  movq_r2r (mm1, mm6);          /* copy tmp01 */
-
-  paddw_m2r (*(dataptr + 11), mm2);     /* tmp02 = x2 + x5 */
-  paddw_r2r (mm3, mm0);         /* tmp10 = tmp00 + tmp03 */
-
-  psubw_r2r (mm3, mm7);         /* tmp13 = tmp00 - tmp03 */
-
-  psubw_m2r (*(dataptr + 9), mm4);      /* tmp04 = x3 - x4 */
-  psubw_r2r (mm2, mm6);         /* tmp12 = tmp01 - tmp02 */
-
-  paddw_r2r (mm2, mm1);         /* tmp11 = tmp01 + tmp02 */
-
-  psubw_m2r (*(dataptr + 11), mm5);     /* tmp05 = x2 - x5 */
-  paddw_r2r (mm7, mm6);         /*  tmp12 + tmp13 */
-
-  /* stage 3, Even and stage 4 & 5 even */
-
-  movq_m2r (tmp6, mm2);         /* load tmp6 */
-  movq_r2r (mm0, mm3);          /* copy tmp10 */
-
-  psllw_i2r (2, mm6);           /* shift z1 */
-  paddw_r2r (mm1, mm0);         /* y0=tmp10 + tmp11 */
-
-  pmulhw_m2r (RTjpeg_C4, mm6);  /* z1 */
-  psubw_r2r (mm1, mm3);         /* y4=tmp10 - tmp11 */
-
-  movq_r2m (mm0, *(dataptr + 1));       /*save y0 */
-  movq_r2r (mm7, mm0);          /* copy tmp13 */
-
-  /* odd part */
-
-  movq_r2m (mm3, *(dataptr + 9));       /*save y4 */
-  paddw_r2r (mm5, mm4);         /* tmp10 = tmp4 + tmp5 */
-
-  movq_m2r (tmp7, mm3);         /* load tmp7 */
-  paddw_r2r (mm6, mm0);         /* tmp32 = tmp13 + z1 */
-
-  paddw_r2r (mm2, mm5);         /* tmp11 = tmp5 + tmp6 */
-  psubw_r2r (mm6, mm7);         /* tmp33 = tmp13 - z1 */
-
-  movq_r2m (mm0, *(dataptr + 5));       /*save y2 */
-  paddw_r2r (mm3, mm2);         /* tmp12 = tmp6 + tmp7 */
-
-  /* stage 4 */
-
-  movq_r2m (mm7, *(dataptr + 13));      /*save y6 */
-  movq_r2r (mm4, mm1);          /* copy tmp10 */
-
-  psubw_r2r (mm2, mm1);         /* tmp10 - tmp12 */
-  psllw_i2r (2, mm4);           /* shift tmp10 */
-
-  movq_m2r (RTjpeg_C2mC6, mm0); /* load C2mC6 */
-  psllw_i2r (2, mm1);           /* shift (tmp10-tmp12) */
-
-  pmulhw_m2r (RTjpeg_C6, mm1);  /* z5 */
-  psllw_i2r (2, mm5);           /* prepare for multiply  */
-
-  pmulhw_r2r (mm0, mm4);        /* multiply by converted real */
-
-  /* stage 5 */
-
-  pmulhw_m2r (RTjpeg_C4, mm5);  /* z3 */
-  psllw_i2r (2, mm2);           /* prepare for multiply  */
-
-  pmulhw_m2r (RTjpeg_C2pC6, mm2);       /* multiply */
-  movq_r2r (mm3, mm0);          /* copy tmp7 */
-
-  movq_m2r (*(dataptr + 9), mm7);       /* m03:m02|m01:m00 - first line (line 4)and copy into mm7 */
-  paddw_r2r (mm1, mm4);         /* z2 */
-
-  paddw_r2r (mm5, mm0);         /* z11 */
-  psubw_r2r (mm5, mm3);         /* z13 */
-
-  /* stage 6 */
-
-  movq_r2r (mm3, mm5);          /* copy z13 */
-  paddw_r2r (mm1, mm2);         /* z4 */
-
-  movq_r2r (mm0, mm6);          /* copy z11 */
-  psubw_r2r (mm4, mm5);         /* y3 */
-
-  paddw_r2r (mm2, mm6);         /* y1 */
-  paddw_r2r (mm4, mm3);         /* y5 */
-
-  movq_r2m (mm5, *(dataptr + 7));       /*save y3 */
-
-  movq_r2m (mm6, *(dataptr + 3));       /*save y1 */
-  psubw_r2r (mm2, mm0);         /* y7 */
-
-/************************************************************************************************
-                                        Start of Transpose
-************************************************************************************************/
-
-  movq_m2r (*(dataptr + 13), mm6);      /* m23:m22|m21:m20 - third line (line 6)and copy into m2 */
-  movq_r2r (mm7, mm5);          /* copy first line */
-
-  punpcklwd_r2r (mm3, mm7);     /* m11:m01|m10:m00 - interleave first and second lines */
-  movq_r2r (mm6, mm2);          /* copy third line */
-
-  punpcklwd_r2r (mm0, mm6);     /* m31:m21|m30:m20 - interleave third and fourth lines */
-  movq_r2r (mm7, mm1);          /* copy first intermediate result */
-
-  punpckldq_r2r (mm6, mm7);     /* m30:m20|m10:m00 - interleave to produce result 1 */
-
-  punpckhdq_r2r (mm6, mm1);     /* m31:m21|m11:m01 - interleave to produce result 2 */
-
-  movq_r2m (mm7, *(dataptr + 9));       /* write result 1 */
-  punpckhwd_r2r (mm3, mm5);     /* m13:m03|m12:m02 - interleave first and second lines */
-
-  movq_r2m (mm1, *(dataptr + 11));      /* write result 2 */
-  punpckhwd_r2r (mm0, mm2);     /* m33:m23|m32:m22 - interleave third and fourth lines */
-
-  movq_r2r (mm5, mm1);          /* copy first intermediate result */
-  punpckldq_r2r (mm2, mm5);     /* m32:m22|m12:m02 - interleave to produce result 3 */
-
-  movq_m2r (*(dataptr + 1), mm0);       /* m03:m02|m01:m00 - first line, 4x4 */
-  punpckhdq_r2r (mm2, mm1);     /* m33:m23|m13:m03 - interleave to produce result 4 */
-
-  movq_r2m (mm5, *(dataptr + 13));      /* write result 3 */
-
-        /****** last 4x4 done */
-
-  movq_r2m (mm1, *(dataptr + 15));      /* write result 4, last 4x4 */
-
-  movq_m2r (*(dataptr + 5), mm2);       /* m23:m22|m21:m20 - third line */
-  movq_r2r (mm0, mm6);          /* copy first line */
-
-  punpcklwd_m2r (*(dataptr + 3), mm0);  /* m11:m01|m10:m00 - interleave first and second lines */
-  movq_r2r (mm2, mm7);          /* copy third line */
-
-  punpcklwd_m2r (*(dataptr + 7), mm2);  /* m31:m21|m30:m20 - interleave third and fourth lines */
-  movq_r2r (mm0, mm4);          /* copy first intermediate result */
-
-
-
-  movq_m2r (*(dataptr + 8), mm1);       /* n03:n02|n01:n00 - first line  */
-  punpckldq_r2r (mm2, mm0);     /* m30:m20|m10:m00 - interleave to produce first result */
-
-  movq_m2r (*(dataptr + 12), mm3);      /* n23:n22|n21:n20 - third line */
-  punpckhdq_r2r (mm2, mm4);     /* m31:m21|m11:m01 - interleave to produce second result */
-
-  punpckhwd_m2r (*(dataptr + 3), mm6);  /* m13:m03|m12:m02 - interleave first and second lines */
-  movq_r2r (mm1, mm2);          /* copy first line */
-
-  punpckhwd_m2r (*(dataptr + 7), mm7);  /* m33:m23|m32:m22 - interleave third and fourth lines */
-  movq_r2r (mm6, mm5);          /* copy first intermediate result */
-
-  movq_r2m (mm0, *(dataptr + 8));       /* write result 1 */
-  punpckhdq_r2r (mm7, mm5);     /* m33:m23|m13:m03 - produce third result */
-
-  punpcklwd_m2r (*(dataptr + 10), mm1); /* n11:n01|n10:n00 - interleave first and second lines */
-  movq_r2r (mm3, mm0);          /* copy third line */
-
-  punpckhwd_m2r (*(dataptr + 10), mm2); /* n13:n03|n12:n02 - interleave first and second lines */
-
-  movq_r2m (mm4, *(dataptr + 10));      /* write result 2 out */
-  punpckldq_r2r (mm7, mm6);     /* m32:m22|m12:m02 - produce fourth result */
-
-  punpcklwd_m2r (*(dataptr + 14), mm3); /* n33:n23|n32:n22 - interleave third and fourth lines */
-  movq_r2r (mm1, mm4);          /* copy second intermediate result */
-
-  movq_r2m (mm6, *(dataptr + 12));      /* write result 3 out */
-  punpckldq_r2r (mm3, mm1);     /*  */
-
-  punpckhwd_m2r (*(dataptr + 14), mm0); /* n33:n23|n32:n22 - interleave third and fourth lines */
-  movq_r2r (mm2, mm6);          /* copy second intermediate result */
-
-  movq_r2m (mm5, *(dataptr + 14));      /* write result 4 out */
-  punpckhdq_r2r (mm3, mm4);     /* n31:n21|n11:n01- produce second result */
-
-  movq_r2m (mm1, *(dataptr + 1));       /* write result 5 out - (first result for other 4 x 4 block) */
-  punpckldq_r2r (mm0, mm2);     /* n32:n22|n12:n02- produce third result */
-
-  movq_r2m (mm4, *(dataptr + 3));       /* write result 6 out */
-  punpckhdq_r2r (mm0, mm6);     /* n33:n23|n13:n03 - produce fourth result */
-
-  movq_r2m (mm2, *(dataptr + 5));       /* write result 7 out */
-
-  movq_m2r (*dataptr, mm0);     /* m03:m02|m01:m00 - first line, first 4x4 */
-
-  movq_r2m (mm6, *(dataptr + 7));       /* write result 8 out */
-
-/* Do first 4x4 quadrant, which is used in the beginning of the DCT: */
-
-  movq_m2r (*(dataptr + 4), mm7);       /* m23:m22|m21:m20 - third line */
-  movq_r2r (mm0, mm2);          /* copy first line */
-
-  punpcklwd_m2r (*(dataptr + 2), mm0);  /* m11:m01|m10:m00 - interleave first and second lines */
-  movq_r2r (mm7, mm4);          /* copy third line */
-
-  punpcklwd_m2r (*(dataptr + 6), mm7);  /* m31:m21|m30:m20 - interleave third and fourth lines */
-  movq_r2r (mm0, mm1);          /* copy first intermediate result */
-
-  movq_m2r (*(dataptr + 2), mm6);       /* m13:m12|m11:m10 - second line */
-  punpckldq_r2r (mm7, mm0);     /* m30:m20|m10:m00 - interleave to produce result 1 */
-
-  movq_m2r (*(dataptr + 6), mm5);       /* m33:m32|m31:m30 - fourth line */
-  punpckhdq_r2r (mm7, mm1);     /* m31:m21|m11:m01 - interleave to produce result 2 */
-
-  movq_r2r (mm0, mm7);          /* write result 1 */
-  punpckhwd_r2r (mm6, mm2);     /* m13:m03|m12:m02 - interleave first and second lines */
-
-  psubw_m2r (*(dataptr + 14), mm7);     /* tmp07=x0-x7: Stage 1 */
-  movq_r2r (mm1, mm6);          /* write result 2 */
-
-  paddw_m2r (*(dataptr + 14), mm0);     /* tmp00=x0+x7: Stage 1 */
-  punpckhwd_r2r (mm5, mm4);     /* m33:m23|m32:m22 - interleave third and fourth lines */
-
-  paddw_m2r (*(dataptr + 12), mm1);     /* tmp01=x1+x6: Stage 1 */
-  movq_r2r (mm2, mm3);          /* copy first intermediate result */
-
-  psubw_m2r (*(dataptr + 12), mm6);     /* tmp06=x1-x6: Stage 1 */
-  punpckldq_r2r (mm4, mm2);     /* m32:m22|m12:m02 - interleave to produce result 3 */
-
-  movq_r2m (mm7, tmp7);         /* save tmp07 */
-  movq_r2r (mm2, mm5);          /* write result 3 */
-
-  movq_r2m (mm6, tmp6);         /* save tmp06 */
-
-  punpckhdq_r2r (mm4, mm3);     /* m33:m23|m13:m03 - interleave to produce result 4 */
-
-  paddw_m2r (*(dataptr + 10), mm2);     /* tmp02=x2+x5: stage 1 */
-  movq_r2r (mm3, mm4);          /* write result 4 */
-
-/************************************************************************************************
-                                        End of Transpose 2
-************************************************************************************************/
-
-  paddw_m2r (*(dataptr + 8), mm3);      /* tmp03=x3+x4: stage 1 */
-  movq_r2r (mm0, mm7);
-
-  psubw_m2r (*(dataptr + 8), mm4);      /* tmp04=x3-x4: stage 1 */
-  movq_r2r (mm1, mm6);
-
-  paddw_r2r (mm3, mm0);         /* tmp10 = tmp00 + tmp03: even 2 */
-  psubw_r2r (mm3, mm7);         /* tmp13 = tmp00 - tmp03: even 2 */
-
-  psubw_r2r (mm2, mm6);         /* tmp12 = tmp01 - tmp02: even 2 */
-  paddw_r2r (mm2, mm1);         /* tmp11 = tmp01 + tmp02: even 2 */
-
-  psubw_m2r (*(dataptr + 10), mm5);     /* tmp05=x2-x5: stage 1 */
-  paddw_r2r (mm7, mm6);         /* tmp12 + tmp13 */
-
-  /* stage 3 */
-
-  movq_m2r (tmp6, mm2);
-  movq_r2r (mm0, mm3);
-
-  psllw_i2r (2, mm6);           /* m8 * 2^2 */
-  paddw_r2r (mm1, mm0);
-
-  pmulhw_m2r (RTjpeg_C4, mm6);  /* z1 */
-  psubw_r2r (mm1, mm3);
-
-  movq_r2m (mm0, *dataptr);
-  movq_r2r (mm7, mm0);
-
-  /* Odd part */
-  movq_r2m (mm3, *(dataptr + 8));
-  paddw_r2r (mm5, mm4);         /* tmp10 */
-
-  movq_m2r (tmp7, mm3);
-  paddw_r2r (mm6, mm0);         /* tmp32 */
-
-  paddw_r2r (mm2, mm5);         /* tmp11 */
-  psubw_r2r (mm6, mm7);         /* tmp33 */
-
-  movq_r2m (mm0, *(dataptr + 4));
-  paddw_r2r (mm3, mm2);         /* tmp12 */
-
-  /* stage 4 */
-  movq_r2m (mm7, *(dataptr + 12));
-  movq_r2r (mm4, mm1);          /* copy of tmp10 */
-
-  psubw_r2r (mm2, mm1);         /* tmp10 - tmp12 */
-  psllw_i2r (2, mm4);           /* m8 * 2^2 */
-
-  movq_m2r (RTjpeg_C2mC6, mm0);
-  psllw_i2r (2, mm1);
-
-  pmulhw_m2r (RTjpeg_C6, mm1);  /* z5 */
-  psllw_i2r (2, mm2);
-
-  pmulhw_r2r (mm0, mm4);        /* z5 */
-
-  /* stage 5 */
-
-  pmulhw_m2r (RTjpeg_C2pC6, mm2);
-  psllw_i2r (2, mm5);
-
-  pmulhw_m2r (RTjpeg_C4, mm5);  /* z3 */
-  movq_r2r (mm3, mm0);          /* copy tmp7 */
-
-  movq_m2r (*(dataptr + 1), mm7);
-  paddw_r2r (mm1, mm4);         /* z2 */
-
-  paddw_r2r (mm1, mm2);         /* z4 */
-
-  paddw_r2r (mm5, mm0);         /* z11 */
-  psubw_r2r (mm5, mm3);         /* z13 */
-
-  /* stage 6 */
-
-  movq_r2r (mm3, mm5);          /* copy z13 */
-  psubw_r2r (mm4, mm3);         /* y3=z13 - z2 */
-
-  paddw_r2r (mm4, mm5);         /* y5=z13 + z2 */
-  movq_r2r (mm0, mm6);          /* copy z11 */
-
-  movq_r2m (mm3, *(dataptr + 6));       /*save y3 */
-  psubw_r2r (mm2, mm0);         /* y7=z11 - z4 */
-
-  movq_r2m (mm5, *(dataptr + 10));      /*save y5 */
-  paddw_r2r (mm2, mm6);         /* y1=z11 + z4 */
-
-  movq_r2m (mm0, *(dataptr + 14));      /*save y7 */
-
-        /************************************************
-         *  End of 1st 4 rows
-         ************************************************/
-
-  movq_m2r (*(dataptr + 3), mm1);       /* load x1  : stage 1 */
-  movq_r2r (mm7, mm0);          /* copy x0 */
-
-  movq_r2m (mm6, *(dataptr + 2));       /*save y1 */
-
-  movq_m2r (*(dataptr + 5), mm2);       /* load x2  : stage 1 */
-  movq_r2r (mm1, mm6);          /* copy x1 */
-
-  paddw_m2r (*(dataptr + 15), mm0);     /* tmp00 = x0 + x7 */
-
-  movq_m2r (*(dataptr + 7), mm3);       /* load x3  : stage 1 */
-  movq_r2r (mm2, mm5);          /* copy x2 */
-
-  psubw_m2r (*(dataptr + 15), mm7);     /* tmp07 = x0 - x7 */
-  movq_r2r (mm3, mm4);          /* copy x3 */
-
-  paddw_m2r (*(dataptr + 13), mm1);     /* tmp01 = x1 + x6 */
-
-  movq_r2m (mm7, tmp7);         /* save tmp07 */
-  movq_r2r (mm0, mm7);          /* copy tmp00 */
-
-  psubw_m2r (*(dataptr + 13), mm6);     /* tmp06 = x1 - x6 */
-
-  /* stage 2, Even Part */
-
-  paddw_m2r (*(dataptr + 9), mm3);      /* tmp03 = x3 + x4 */
-
-  movq_r2m (mm6, tmp6);         /* save tmp07 */
-  movq_r2r (mm1, mm6);          /* copy tmp01 */
-
-  paddw_m2r (*(dataptr + 11), mm2);     /* tmp02 = x2 + x5 */
-  paddw_r2r (mm3, mm0);         /* tmp10 = tmp00 + tmp03 */
-
-  psubw_r2r (mm3, mm7);         /* tmp13 = tmp00 - tmp03 */
-
-  psubw_m2r (*(dataptr + 9), mm4);      /* tmp04 = x3 - x4 */
-  psubw_r2r (mm2, mm6);         /* tmp12 = tmp01 - tmp02 */
-
-  paddw_r2r (mm2, mm1);         /* tmp11 = tmp01 + tmp02 */
-
-  psubw_m2r (*(dataptr + 11), mm5);     /* tmp05 = x2 - x5 */
-  paddw_r2r (mm7, mm6);         /*  tmp12 + tmp13 */
-
-  /* stage 3, Even and stage 4 & 5 even */
-
-  movq_m2r (tmp6, mm2);         /* load tmp6 */
-  movq_r2r (mm0, mm3);          /* copy tmp10 */
-
-  psllw_i2r (2, mm6);           /* shift z1 */
-  paddw_r2r (mm1, mm0);         /* y0=tmp10 + tmp11 */
-
-  pmulhw_m2r (RTjpeg_C4, mm6);  /* z1 */
-  psubw_r2r (mm1, mm3);         /* y4=tmp10 - tmp11 */
-
-  movq_r2m (mm0, *(dataptr + 1));       /*save y0 */
-  movq_r2r (mm7, mm0);          /* copy tmp13 */
-
-  /* odd part */
-
-  movq_r2m (mm3, *(dataptr + 9));       /*save y4 */
-  paddw_r2r (mm5, mm4);         /* tmp10 = tmp4 + tmp5 */
-
-  movq_m2r (tmp7, mm3);         /* load tmp7 */
-  paddw_r2r (mm6, mm0);         /* tmp32 = tmp13 + z1 */
-
-  paddw_r2r (mm2, mm5);         /* tmp11 = tmp5 + tmp6 */
-  psubw_r2r (mm6, mm7);         /* tmp33 = tmp13 - z1 */
-
-  movq_r2m (mm0, *(dataptr + 5));       /*save y2 */
-  paddw_r2r (mm3, mm2);         /* tmp12 = tmp6 + tmp7 */
-
-  /* stage 4 */
-
-  movq_r2m (mm7, *(dataptr + 13));      /*save y6 */
-  movq_r2r (mm4, mm1);          /* copy tmp10 */
-
-  psubw_r2r (mm2, mm1);         /* tmp10 - tmp12 */
-  psllw_i2r (2, mm4);           /* shift tmp10 */
-
-  movq_m2r (RTjpeg_C2mC6, mm0); /* load C2mC6 */
-  psllw_i2r (2, mm1);           /* shift (tmp10-tmp12) */
-
-  pmulhw_m2r (RTjpeg_C6, mm1);  /* z5 */
-  psllw_i2r (2, mm5);           /* prepare for multiply  */
-
-  pmulhw_r2r (mm0, mm4);        /* multiply by converted real */
-
-  /* stage 5 */
-
-  pmulhw_m2r (RTjpeg_C4, mm5);  /* z3 */
-  psllw_i2r (2, mm2);           /* prepare for multiply  */
-
-  pmulhw_m2r (RTjpeg_C2pC6, mm2);       /* multiply */
-  movq_r2r (mm3, mm0);          /* copy tmp7 */
-
-  movq_m2r (*(dataptr + 9), mm7);       /* m03:m02|m01:m00 - first line (line 4)and copy into mm7 */
-  paddw_r2r (mm1, mm4);         /* z2 */
-
-  paddw_r2r (mm5, mm0);         /* z11 */
-  psubw_r2r (mm5, mm3);         /* z13 */
-
-  /* stage 6 */
-
-  movq_r2r (mm3, mm5);          /* copy z13 */
-  paddw_r2r (mm1, mm2);         /* z4 */
-
-  movq_r2r (mm0, mm6);          /* copy z11 */
-  psubw_r2r (mm4, mm5);         /* y3 */
-
-  paddw_r2r (mm2, mm6);         /* y1 */
-  paddw_r2r (mm4, mm3);         /* y5 */
-
-  movq_r2m (mm5, *(dataptr + 7));       /*save y3 */
-  psubw_r2r (mm2, mm0);         /* yè=z11 - z4 */
-
-  movq_r2m (mm3, *(dataptr + 11));      /*save y5 */
-
-  movq_r2m (mm6, *(dataptr + 3));       /*save y1 */
-
-  movq_r2m (mm0, *(dataptr + 15));      /*save y7 */
-
-
-#endif
-}
-
-#define FIX_1_082392200  ((__s32)  277) /* FIX(1.082392200) */
-#define FIX_1_414213562  ((__s32)  362) /* FIX(1.414213562) */
-#define FIX_1_847759065  ((__s32)  473) /* FIX(1.847759065) */
-#define FIX_2_613125930  ((__s32)  669) /* FIX(2.613125930) */
-
-#define DESCALE(x) (__s16)( ((x)+4) >> 3)
-
-/* clip yuv to 16..235 (should be 16..240 for cr/cb but ... */
-
-#define RL(x) ((x)>235) ? 235 : (((x)<16) ? 16 : (x))
-#define MULTIPLY(var,const)  (((__s32) ((var) * (const)) + 128)>>8)
-
-void
-RTjpeg_idct_init (void)
-{
-  int i;
-
-  for (i = 0; i < 64; i++) {
-    RTjpeg_liqt[i] = ((__u64) RTjpeg_liqt[i] * RTjpeg_aan_tab[i]) >> 32;
-    RTjpeg_ciqt[i] = ((__u64) RTjpeg_ciqt[i] * RTjpeg_aan_tab[i]) >> 32;
-  }
-}
-
-void
-RTjpeg_idct (__u8 * odata, __s16 * data, int rskip)
-{
-#ifdef HAVE_LIBMMX
-
-  static mmx_t fix_141 = (mmx_t) (long long) 0x5a825a825a825a82LL;
-  static mmx_t fix_184n261 = (mmx_t) (long long) 0xcf04cf04cf04cf04LL;
-  static mmx_t fix_184 = (mmx_t) (long long) 0x7641764176417641LL;
-  static mmx_t fix_n184 = (mmx_t) (long long) 0x896f896f896f896fLL;
-  static mmx_t fix_108n184 = (mmx_t) (long long) 0xcf04cf04cf04cf04LL;
-
-  mmx_t workspace[64];
-  mmx_t *wsptr = workspace;
-  register mmx_t *dataptr = (mmx_t *) odata;
-  mmx_t *idata = (mmx_t *) data;
-
-  rskip = rskip >> 3;
-/*
- * Perform inverse DCT on one block of coefficients.
- */
-
-  /* Odd part */
-
-  movq_m2r (*(idata + 10), mm1);        /* load idata[DCTSIZE*5] */
-
-  movq_m2r (*(idata + 6), mm0); /* load idata[DCTSIZE*3] */
-
-  movq_m2r (*(idata + 2), mm3); /* load idata[DCTSIZE*1] */
-
-  movq_r2r (mm1, mm2);          /* copy tmp6    : phase 6 */
-  */movq_m2r (*(idata + 14), mm4);      /* load idata[DCTSIZE*7] */
-
-  paddw_r2r (mm0, mm1);         /* z13 = tmp6 + tmp5; */
-
-  psubw_r2r (mm0, mm2);         /* z10 = tmp6 - tmp5    */
-
-  psllw_i2r (2, mm2);           /* shift z10 */
-  movq_r2r (mm2, mm0);          /* copy z10 */
-
-  pmulhw_m2r (fix_184n261, mm2);        /* MULTIPLY( z12, FIX_1_847759065); : 2*c2 */
-  movq_r2r (mm3, mm5);          /* copy tmp4 */
-
-  pmulhw_m2r (fix_n184, mm0);   /* MULTIPLY(z10, -FIX_1_847759065); : 2*c2 */
-  paddw_r2r (mm4, mm3);         /* z11 = tmp4 + tmp7; */
-
-  movq_r2r (mm3, mm6);          /* copy z11                     : phase 5 */
-  psubw_r2r (mm4, mm5);         /* z12 = tmp4 - tmp7; */
-
-  psubw_r2r (mm1, mm6);         /* z11-z13 */
-  psllw_i2r (2, mm5);           /*      shift z12 */
-
-  movq_m2r (*(idata + 12), mm4);        /* load idata[DCTSIZE*6], even part */
-  movq_r2r (mm5, mm7);          /*      copy z12 */
-
-  pmulhw_m2r (fix_108n184, mm5);        /*        MULT(z12, (FIX_1_08-FIX_1_84)) //- z5; 2*(c2-c6): even part */
-  paddw_r2r (mm1, mm3);         /* tmp7 = z11 + z13;     */
-
-  /*ok */
-
-  /* Even part */
-  pmulhw_m2r (fix_184, mm7);    /* MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) //+ z5; -2*(c2+c6) */
-  psllw_i2r (2, mm6);
-
-  movq_m2r (*(idata + 4), mm1); /* load idata[DCTSIZE*2] */
-
-  paddw_r2r (mm5, mm0);         /*      tmp10 */
-
-  paddw_r2r (mm7, mm2);         /* tmp12 */
-
-  pmulhw_m2r (fix_141, mm6);    /* tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); 2*c4 */
-  psubw_r2r (mm3, mm2);         /* tmp6 = tmp12 - tmp7 */
-
-  movq_r2r (mm1, mm5);          /* copy tmp1 */
-  paddw_r2r (mm4, mm1);         /* tmp13= tmp1 + tmp3; phases 5-3 */
-
-  psubw_r2r (mm4, mm5);         /* tmp1-tmp3 */
-  psubw_r2r (mm2, mm6);         /* tmp5 = tmp11 - tmp6; */
-
-  movq_r2m (mm1, *(wsptr));     /* save tmp13 in workspace */
-  psllw_i2r (2, mm5);           /* shift tmp1-tmp3 */
-
-  movq_m2r (*(idata), mm7);     /* load idata[DCTSIZE*0] */
-
-  pmulhw_m2r (fix_141, mm5);    /* MULTIPLY(tmp1 - tmp3, FIX_1_414213562) */
-  paddw_r2r (mm6, mm0);         /* tmp4 = tmp10 + tmp5; */
-
-  movq_m2r (*(idata + 8), mm4); /* load idata[DCTSIZE*4] */
-
-  psubw_r2r (mm1, mm5);         /* tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; 2*c4 */
-
-  movq_r2m (mm0, *(wsptr + 4)); /* save tmp4 in workspace */
-  movq_r2r (mm7, mm1);          /* copy tmp0    : phase 3 */
-
-  movq_r2m (mm5, *(wsptr + 2)); /* save tmp12 in workspace */
-  psubw_r2r (mm4, mm1);         /* tmp11 = tmp0 - tmp2;  */
-
-  paddw_r2r (mm4, mm7);         /* tmp10 = tmp0 + tmp2; */
-  movq_r2r (mm1, mm5);          /* copy tmp11 */
-
-  paddw_m2r (*(wsptr + 2), mm1);        /* tmp1 = tmp11 + tmp12; */
-  movq_r2r (mm7, mm4);          /* copy tmp10           : phase 2 */
-
-  paddw_m2r (*(wsptr), mm7);    /* tmp0 = tmp10 + tmp13;         */
-
-  psubw_m2r (*(wsptr), mm4);    /* tmp3 = tmp10 - tmp13; */
-  movq_r2r (mm7, mm0);          /*      copy tmp0 */
-
-  psubw_m2r (*(wsptr + 2), mm5);        /* tmp2 = tmp11 - tmp12; */
-  paddw_r2r (mm3, mm7);         /*      wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); */
-
-  psubw_r2r (mm3, mm0);         /* wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); */
-
-  movq_r2m (mm7, *(wsptr));     /*      wsptr[DCTSIZE*0] */
-  movq_r2r (mm1, mm3);          /*      copy tmp1 */
-
-  movq_r2m (mm0, *(wsptr + 14));        /* wsptr[DCTSIZE*7] */
-  paddw_r2r (mm2, mm1);         /* wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); */
-
-  psubw_r2r (mm2, mm3);         /* wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); */
-
-  movq_r2m (mm1, *(wsptr + 2)); /* wsptr[DCTSIZE*1] */
-  movq_r2r (mm4, mm1);          /*      copy tmp3 */
-
-  movq_r2m (mm3, *(wsptr + 12));        /* wsptr[DCTSIZE*6] */
-
-  paddw_m2r (*(wsptr + 4), mm4);        /* wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); */
-
-  psubw_m2r (*(wsptr + 4), mm1);        /* wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); */
-
-  movq_r2m (mm4, *(wsptr + 8));
-  movq_r2r (mm5, mm7);          /* copy tmp2 */
-
-  paddw_r2r (mm6, mm5);         /* wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5) */
-
-  movq_r2m (mm1, *(wsptr + 6));
-  psubw_r2r (mm6, mm7);         /*      wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); */
-
-  movq_r2m (mm5, *(wsptr + 4));
-
-  movq_r2m (mm7, *(wsptr + 10));
-
-  /*ok */
-
-
-/*****************************************************************/
-
-  idata++;
-  wsptr++;
-
-/*****************************************************************/
-
-  movq_m2r (*(idata + 10), mm1);        /* load idata[DCTSIZE*5] */
-
-  movq_m2r (*(idata + 6), mm0); /* load idata[DCTSIZE*3] */
-
-  movq_m2r (*(idata + 2), mm3); /* load idata[DCTSIZE*1] */
-  movq_r2r (mm1, mm2);          /*      copy tmp6       : phase 6 */
-  */movq_m2r (*(idata + 14), mm4);      /* load idata[DCTSIZE*7] */
-  paddw_r2r (mm0, mm1);         /*      z13 = tmp6 + tmp5; */
-
-  psubw_r2r (mm0, mm2);         /*      z10 = tmp6 - tmp5    */
-
-  psllw_i2r (2, mm2);           /*      shift z10 */
-  movq_r2r (mm2, mm0);          /*      copy z10 */
-
-  pmulhw_m2r (fix_184n261, mm2);        /* MULTIPLY( z12, FIX_1_847759065); : 2*c2 */
-  movq_r2r (mm3, mm5);          /*      copy tmp4 */
-
-  pmulhw_m2r (fix_n184, mm0);   /* MULTIPLY(z10, -FIX_1_847759065); : 2*c2 */
-  paddw_r2r (mm4, mm3);         /* z11 = tmp4 + tmp7; */
-
-  movq_r2r (mm3, mm6);          /* copy z11                     : phase 5 */
-  psubw_r2r (mm4, mm5);         /*      z12 = tmp4 - tmp7; */
-
-  psubw_r2r (mm1, mm6);         /* z11-z13 */
-  psllw_i2r (2, mm5);           /*      shift z12 */
-
-  movq_m2r (*(idata + 12), mm4);        /* load idata[DCTSIZE*6], even part */
-  movq_r2r (mm5, mm7);          /* copy z12 */
-
-  pmulhw_m2r (fix_108n184, mm5);        /* MULT(z12, (FIX_1_08-FIX_1_84)) //- z5; 2*(c2-c6) even part */
-  paddw_r2r (mm1, mm3);         /* tmp7 = z11 + z13;     */
-
-  /*ok */
-
-  /* Even part */
-  pmulhw_m2r (fix_184, mm7);    /* MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) //+ z5; -2*(c2+c6) */
-  psllw_i2r (2, mm6);
-
-  movq_m2r (*(idata + 4), mm1); /* load idata[DCTSIZE*2] */
-
-  paddw_r2r (mm5, mm0);         /*      tmp10 */
-
-  paddw_r2r (mm7, mm2);         /* tmp12 */
-
-  pmulhw_m2r (fix_141, mm6);    /* tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); 2*c4 */
-  psubw_r2r (mm3, mm2);         /* tmp6 = tmp12 - tmp7 */
-
-  movq_r2r (mm1, mm5);          /* copy tmp1 */
-  paddw_r2r (mm4, mm1);         /* tmp13= tmp1 + tmp3;  phases 5-3 */
-
-  psubw_r2r (mm4, mm5);         /* tmp1-tmp3 */
-  psubw_r2r (mm2, mm6);         /* tmp5 = tmp11 - tmp6; */
-
-  movq_r2m (mm1, *(wsptr));     /* save tmp13 in workspace */
-  psllw_i2r (2, mm5);           /* shift tmp1-tmp3 */
-
-  movq_m2r (*(idata), mm7);     /* load idata[DCTSIZE*0] */
-  paddw_r2r (mm6, mm0);         /* tmp4 = tmp10 + tmp5; */
-
-  pmulhw_m2r (fix_141, mm5);    /* MULTIPLY(tmp1 - tmp3, FIX_1_414213562) */
-
-  movq_m2r (*(idata + 8), mm4); /* load idata[DCTSIZE*4] */
-
-  psubw_r2r (mm1, mm5);         /* tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; 2*c4 */
-
-  movq_r2m (mm0, *(wsptr + 4)); /* save tmp4 in workspace */
-  movq_r2r (mm7, mm1);          /* copy tmp0: phase 3 */
-
-  movq_r2m (mm5, *(wsptr + 2)); /* save tmp12 in workspace */
-  psubw_r2r (mm4, mm1);         /* tmp11 = tmp0 - tmp2;  */
-
-  paddw_r2r (mm4, mm7);         /* tmp10 = tmp0 + tmp2; */
-  movq_r2r (mm1, mm5);          /* copy tmp11 */
-
-  paddw_m2r (*(wsptr + 2), mm1);        /* tmp1 = tmp11 + tmp12; */
-  movq_r2r (mm7, mm4);          /* copy tmp10: phase 2 */
-
-  paddw_m2r (*(wsptr), mm7);    /* tmp0 = tmp10 + tmp13;         */
-
-  psubw_m2r (*(wsptr), mm4);    /* tmp3 = tmp10 - tmp13; */
-  movq_r2r (mm7, mm0);          /* copy tmp0 */
-
-  psubw_m2r (*(wsptr + 2), mm5);        /* tmp2 = tmp11 - tmp12; */
-  paddw_r2r (mm3, mm7);         /* wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7); */
-
-  psubw_r2r (mm3, mm0);         /* wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7); */
-
-  movq_r2m (mm7, *(wsptr));     /* wsptr[DCTSIZE*0] */
-  movq_r2r (mm1, mm3);          /* copy tmp1 */
-
-  movq_r2m (mm0, *(wsptr + 14));        /* wsptr[DCTSIZE*7] */
-  paddw_r2r (mm2, mm1);         /* wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6); */
-
-  psubw_r2r (mm2, mm3);         /* wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6); */
-
-  movq_r2m (mm1, *(wsptr + 2)); /* wsptr[DCTSIZE*1] */
-  movq_r2r (mm4, mm1);          /* copy tmp3 */
-
-  movq_r2m (mm3, *(wsptr + 12));        /* wsptr[DCTSIZE*6] */
-
-  paddw_m2r (*(wsptr + 4), mm4);        /* wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4); */
-
-  psubw_m2r (*(wsptr + 4), mm1);        /* wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4); */
-
-  movq_r2m (mm4, *(wsptr + 8));
-  movq_r2r (mm5, mm7);          /* copy tmp2 */
-
-  paddw_r2r (mm6, mm5);         /* wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5) */
-
-  movq_r2m (mm1, *(wsptr + 6));
-  psubw_r2r (mm6, mm7);         /* wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5); */
-
-  movq_r2m (mm5, *(wsptr + 4));
-
-  movq_r2m (mm7, *(wsptr + 10));
-
-/*****************************************************************/
-
-  /* Pass 2: process rows from work array, store into output array. */
-  /* Note that we must descale the results by a factor of 8 == 2**3, */
-  /* and also undo the PASS1_BITS scaling. */
-
-/*****************************************************************/
-  /* Even part */
-
-  wsptr--;
-
-/*    tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); */
-/*    tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); */
-/*    tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); */
-/*    tmp14 = ((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6]); */
-  movq_m2r (*(wsptr), mm0);     /* wsptr[0,0],[0,1],[0,2],[0,3] */
-
-  movq_m2r (*(wsptr + 1), mm1); /* wsptr[0,4],[0,5],[0,6],[0,7] */
-  movq_r2r (mm0, mm2);
-
-  movq_m2r (*(wsptr + 2), mm3); /* wsptr[1,0],[1,1],[1,2],[1,3] */
-  paddw_r2r (mm1, mm0);         /* wsptr[0,tmp10],[xxx],[0,tmp13],[xxx] */
-
-  movq_m2r (*(wsptr + 3), mm4); /* wsptr[1,4],[1,5],[1,6],[1,7] */
-  psubw_r2r (mm1, mm2);         /* wsptr[0,tmp11],[xxx],[0,tmp14],[xxx] */
-
-  movq_r2r (mm0, mm6);
-  movq_r2r (mm3, mm5);
-
-  paddw_r2r (mm4, mm3);         /* wsptr[1,tmp10],[xxx],[1,tmp13],[xxx] */
-  movq_r2r (mm2, mm1);
-
-  psubw_r2r (mm4, mm5);         /* wsptr[1,tmp11],[xxx],[1,tmp14],[xxx] */
-  punpcklwd_r2r (mm3, mm0);     /* wsptr[0,tmp10],[1,tmp10],[xxx],[xxx] */
-
-  movq_m2r (*(wsptr + 7), mm7); /* wsptr[3,4],[3,5],[3,6],[3,7] */
-  punpckhwd_r2r (mm3, mm6);     /* wsptr[0,tmp13],[1,tmp13],[xxx],[xxx] */
-
-  movq_m2r (*(wsptr + 4), mm3); /* wsptr[2,0],[2,1],[2,2],[2,3] */
-  punpckldq_r2r (mm6, mm0);     /* wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13] */
-
-  punpcklwd_r2r (mm5, mm1);     /* wsptr[0,tmp11],[1,tmp11],[xxx],[xxx] */
-  movq_r2r (mm3, mm4);
-
-  movq_m2r (*(wsptr + 6), mm6); /* wsptr[3,0],[3,1],[3,2],[3,3] */
-  punpckhwd_r2r (mm5, mm2);     /* wsptr[0,tmp14],[1,tmp14],[xxx],[xxx] */
-
-  movq_m2r (*(wsptr + 5), mm5); /* wsptr[2,4],[2,5],[2,6],[2,7] */
-  punpckldq_r2r (mm2, mm1);     /* wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14] */
-
-
-  paddw_r2r (mm5, mm3);         /* wsptr[2,tmp10],[xxx],[2,tmp13],[xxx] */
-  movq_r2r (mm6, mm2);
-
-  psubw_r2r (mm5, mm4);         /* wsptr[2,tmp11],[xxx],[2,tmp14],[xxx] */
-  paddw_r2r (mm7, mm6);         /* wsptr[3,tmp10],[xxx],[3,tmp13],[xxx] */
-
-  movq_r2r (mm3, mm5);
-  punpcklwd_r2r (mm6, mm3);     /* wsptr[2,tmp10],[3,tmp10],[xxx],[xxx] */
-
-  psubw_r2r (mm7, mm2);         /* wsptr[3,tmp11],[xxx],[3,tmp14],[xxx] */
-  punpckhwd_r2r (mm6, mm5);     /* wsptr[2,tmp13],[3,tmp13],[xxx],[xxx] */
-
-  movq_r2r (mm4, mm7);
-  punpckldq_r2r (mm5, mm3);     /* wsptr[2,tmp10],[3,tmp10],[2,tmp13],[3,tmp13] */
-
-  punpcklwd_r2r (mm2, mm4);     /* wsptr[2,tmp11],[3,tmp11],[xxx],[xxx] */
-
-  punpckhwd_r2r (mm2, mm7);     /* wsptr[2,tmp14],[3,tmp14],[xxx],[xxx] */
-
-  punpckldq_r2r (mm7, mm4);     /* wsptr[2,tmp11],[3,tmp11],[2,tmp14],[3,tmp14] */
-  movq_r2r (mm1, mm6);
-
-  /*ok */
-
-/*      mm0 =   ;wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13] */
-/*      mm1 =   ;wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14] */
-
-
-  movq_r2r (mm0, mm2);
-  punpckhdq_r2r (mm4, mm6);     /* wsptr[0,tmp14],[1,tmp14],[2,tmp14],[3,tmp14] */
-
-  punpckldq_r2r (mm4, mm1);     /* wsptr[0,tmp11],[1,tmp11],[2,tmp11],[3,tmp11] */
-  psllw_i2r (2, mm6);
-
-  pmulhw_m2r (fix_141, mm6);
-  punpckldq_r2r (mm3, mm0);     /* wsptr[0,tmp10],[1,tmp10],[2,tmp10],[3,tmp10] */
-
-  punpckhdq_r2r (mm3, mm2);     /* wsptr[0,tmp13],[1,tmp13],[2,tmp13],[3,tmp13] */
-  movq_r2r (mm0, mm7);
-
-/*    tmp0 = tmp10 + tmp13; */
-/*    tmp3 = tmp10 - tmp13; */
-  paddw_r2r (mm2, mm0);         /* [0,tmp0],[1,tmp0],[2,tmp0],[3,tmp0] */
-  psubw_r2r (mm2, mm7);         /* [0,tmp3],[1,tmp3],[2,tmp3],[3,tmp3] */
-
-/*    tmp12 = MULTIPLY(tmp14, FIX_1_414213562) - tmp13; */
-  psubw_r2r (mm2, mm6);         /* wsptr[0,tmp12],[1,tmp12],[2,tmp12],[3,tmp12] */
-/*    tmp1 = tmp11 + tmp12; */
-/*    tmp2 = tmp11 - tmp12; */
-  movq_r2r (mm1, mm5);
-
-  /*OK */
-
-  /* Odd part */
-
-/*    z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; */
-/*    z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; */
-/*    z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; */
-/*    z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; */
-  movq_m2r (*(wsptr), mm3);     /* wsptr[0,0],[0,1],[0,2],[0,3] */
-  paddw_r2r (mm6, mm1);         /* [0,tmp1],[1,tmp1],[2,tmp1],[3,tmp1] */
-
-  movq_m2r (*(wsptr + 1), mm4); /* wsptr[0,4],[0,5],[0,6],[0,7] */
-  psubw_r2r (mm6, mm5);         /* [0,tmp2],[1,tmp2],[2,tmp2],[3,tmp2] */
-
-  movq_r2r (mm3, mm6);
-  punpckldq_r2r (mm4, mm3);     /* wsptr[0,0],[0,1],[0,4],[0,5] */
-
-  punpckhdq_r2r (mm6, mm4);     /* wsptr[0,6],[0,7],[0,2],[0,3] */
-  movq_r2r (mm3, mm2);
-
-/*Save tmp0 and tmp1 in wsptr */
-  movq_r2m (mm0, *(wsptr));     /* save tmp0 */
-  paddw_r2r (mm4, mm2);         /* wsptr[xxx],[0,z11],[xxx],[0,z13] */
-
-
-/*Continue with z10 --- z13 */
-  movq_m2r (*(wsptr + 2), mm6); /* wsptr[1,0],[1,1],[1,2],[1,3] */
-  psubw_r2r (mm4, mm3);         /* wsptr[xxx],[0,z12],[xxx],[0,z10] */
-
-  movq_m2r (*(wsptr + 3), mm0); /* wsptr[1,4],[1,5],[1,6],[1,7] */
-  movq_r2r (mm6, mm4);
-
-  movq_r2m (mm1, *(wsptr + 1)); /* save tmp1 */
-  punpckldq_r2r (mm0, mm6);     /* wsptr[1,0],[1,1],[1,4],[1,5] */
-
-  punpckhdq_r2r (mm4, mm0);     /* wsptr[1,6],[1,7],[1,2],[1,3] */
-  movq_r2r (mm6, mm1);
-
-/*Save tmp2 and tmp3 in wsptr */
-  paddw_r2r (mm0, mm6);         /* wsptr[xxx],[1,z11],[xxx],[1,z13] */
-  movq_r2r (mm2, mm4);
-
-/*Continue with z10 --- z13 */
-  movq_r2m (mm5, *(wsptr + 2)); /* save tmp2 */
-  punpcklwd_r2r (mm6, mm2);     /* wsptr[xxx],[xxx],[0,z11],[1,z11] */
-
-  psubw_r2r (mm0, mm1);         /* wsptr[xxx],[1,z12],[xxx],[1,z10] */
-  punpckhwd_r2r (mm6, mm4);     /* wsptr[xxx],[xxx],[0,z13],[1,z13] */
-
-  movq_r2r (mm3, mm0);
-  punpcklwd_r2r (mm1, mm3);     /* wsptr[xxx],[xxx],[0,z12],[1,z12] */
-
-  movq_r2m (mm7, *(wsptr + 3)); /* save tmp3 */
-  punpckhwd_r2r (mm1, mm0);     /* wsptr[xxx],[xxx],[0,z10],[1,z10] */
-
-  movq_m2r (*(wsptr + 4), mm6); /* wsptr[2,0],[2,1],[2,2],[2,3] */
-  punpckhdq_r2r (mm2, mm0);     /* wsptr[0,z10],[1,z10],[0,z11],[1,z11] */
-
-  movq_m2r (*(wsptr + 5), mm7); /* wsptr[2,4],[2,5],[2,6],[2,7] */
-  punpckhdq_r2r (mm4, mm3);     /* wsptr[0,z12],[1,z12],[0,z13],[1,z13] */
-
-  movq_m2r (*(wsptr + 6), mm1); /* wsptr[3,0],[3,1],[3,2],[3,3] */
-  movq_r2r (mm6, mm4);
-
-  punpckldq_r2r (mm7, mm6);     /* wsptr[2,0],[2,1],[2,4],[2,5] */
-  movq_r2r (mm1, mm5);
-
-  punpckhdq_r2r (mm4, mm7);     /* wsptr[2,6],[2,7],[2,2],[2,3] */
-  movq_r2r (mm6, mm2);
-
-  movq_m2r (*(wsptr + 7), mm4); /* wsptr[3,4],[3,5],[3,6],[3,7] */
-  paddw_r2r (mm7, mm6);         /* wsptr[xxx],[2,z11],[xxx],[2,z13] */
-
-  psubw_r2r (mm7, mm2);         /* wsptr[xxx],[2,z12],[xxx],[2,z10] */
-  punpckldq_r2r (mm4, mm1);     /* wsptr[3,0],[3,1],[3,4],[3,5] */
-
-  punpckhdq_r2r (mm5, mm4);     /* wsptr[3,6],[3,7],[3,2],[3,3] */
-  movq_r2r (mm1, mm7);
-
-  paddw_r2r (mm4, mm1);         /* wsptr[xxx],[3,z11],[xxx],[3,z13] */
-  psubw_r2r (mm4, mm7);         /* wsptr[xxx],[3,z12],[xxx],[3,z10] */
-
-  movq_r2r (mm6, mm5);
-  punpcklwd_r2r (mm1, mm6);     /* wsptr[xxx],[xxx],[2,z11],[3,z11] */
-
-  punpckhwd_r2r (mm1, mm5);     /* wsptr[xxx],[xxx],[2,z13],[3,z13] */
-  movq_r2r (mm2, mm4);
-
-  punpcklwd_r2r (mm7, mm2);     /* wsptr[xxx],[xxx],[2,z12],[3,z12] */
-
-  punpckhwd_r2r (mm7, mm4);     /* wsptr[xxx],[xxx],[2,z10],[3,z10] */
-
-  punpckhdq_r2r (mm6, mm4);     /*/ wsptr[2,z10],[3,z10],[2,z11],[3,z11] */
-
-  punpckhdq_r2r (mm5, mm2);     /* wsptr[2,z12],[3,z12],[2,z13],[3,z13] */
-  movq_r2r (mm0, mm5);
-
-  punpckldq_r2r (mm4, mm0);     /* wsptr[0,z10],[1,z10],[2,z10],[3,z10] */
-
-  punpckhdq_r2r (mm4, mm5);     /* wsptr[0,z11],[1,z11],[2,z11],[3,z11] */
-  movq_r2r (mm3, mm4);
-
-  punpckhdq_r2r (mm2, mm4);     /* wsptr[0,z13],[1,z13],[2,z13],[3,z13] */
-  movq_r2r (mm5, mm1);
-
-  punpckldq_r2r (mm2, mm3);     /* wsptr[0,z12],[1,z12],[2,z12],[3,z12] */
-/*    tmp7 = z11 + z13;         : phase 5 */
-/*    tmp8 = z11 - z13;         : phase 5 */
-  psubw_r2r (mm4, mm1);         /* tmp8 */
-
-  paddw_r2r (mm4, mm5);         /* tmp7 */
-/*    tmp21 = MULTIPLY(tmp8, FIX_1_414213562); 2*c4  */
-  psllw_i2r (2, mm1);
-
-  psllw_i2r (2, mm0);
-
-  pmulhw_m2r (fix_141, mm1);    /* tmp21 */
-/*    tmp20 = MULTIPLY(z12, (FIX_1_082392200- FIX_1_847759065))  2*(c2-c6) */
-/*                      + MULTIPLY(z10, - FIX_1_847759065); : 2*c2 */
-  psllw_i2r (2, mm3);
-  movq_r2r (mm0, mm7);
-
-  pmulhw_m2r (fix_n184, mm7);
-  movq_r2r (mm3, mm6);
-
-  movq_m2r (*(wsptr), mm2);     /* tmp0,final1 */
-
-  pmulhw_m2r (fix_108n184, mm6);
-/*       tmp22 = MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) : -2*(c2+c6) */
-/*                      + MULTIPLY(z12, FIX_1_847759065); 2*c2 */
-  movq_r2r (mm2, mm4);          /* final1 */
-
-  pmulhw_m2r (fix_184n261, mm0);
-  paddw_r2r (mm5, mm2);         /* tmp0+tmp7,final1 */
-
-  pmulhw_m2r (fix_184, mm3);
-  psubw_r2r (mm5, mm4);         /* tmp0-tmp7,final1 */
-
-/*    tmp6 = tmp22 - tmp7;      phase 2 */
-  psraw_i2r (3, mm2);           /* outptr[0,0],[1,0],[2,0],[3,0],final1 */
-
-  paddw_r2r (mm6, mm7);         /* tmp20 */
-  psraw_i2r (3, mm4);           /* outptr[0,7],[1,7],[2,7],[3,7],final1 */
-
-  paddw_r2r (mm0, mm3);         /* tmp22 */
-
-/*    tmp5 = tmp21 - tmp6; */
-  psubw_r2r (mm5, mm3);         /* tmp6 */
-
-/*    tmp4 = tmp20 + tmp5; */
-  movq_m2r (*(wsptr + 1), mm0); /* tmp1,final2 */
-  psubw_r2r (mm3, mm1);         /* tmp5 */
-
-  movq_r2r (mm0, mm6);          /* final2 */
-  paddw_r2r (mm3, mm0);         /* tmp1+tmp6,final2 */
-
-  /* Final output stage: scale down by a factor of 8 and range-limit */
-
-
-/*    outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final1 */
-
-
-/*    outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final2 */
-  psubw_r2r (mm3, mm6);         /* tmp1-tmp6,final2 */
-  psraw_i2r (3, mm0);           /* outptr[0,1],[1,1],[2,1],[3,1] */
-
-  psraw_i2r (3, mm6);           /* outptr[0,6],[1,6],[2,6],[3,6] */
-
-  packuswb_r2r (mm4, mm0);      /* out[0,1],[1,1],[2,1],[3,1],[0,7],[1,7],[2,7],[3,7] */
-
-  movq_m2r (*(wsptr + 2), mm5); /* tmp2,final3 */
-  packuswb_r2r (mm6, mm2);      /* out[0,0],[1,0],[2,0],[3,0],[0,6],[1,6],[2,6],[3,6] */
-
-/*    outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final3 */
-  paddw_r2r (mm1, mm7);         /* tmp4 */
-  movq_r2r (mm5, mm3);
-
-  paddw_r2r (mm1, mm5);         /* tmp2+tmp5 */
-  psubw_r2r (mm1, mm3);         /* tmp2-tmp5 */
-
-  psraw_i2r (3, mm5);           /* outptr[0,2],[1,2],[2,2],[3,2] */
-
-  movq_m2r (*(wsptr + 3), mm4); /* tmp3,final4 */
-  psraw_i2r (3, mm3);           /* outptr[0,5],[1,5],[2,5],[3,5] */
-
-
-
-/*    outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final4 */
-  movq_r2r (mm4, mm6);
-  paddw_r2r (mm7, mm4);         /* tmp3+tmp4 */
-
-  psubw_r2r (mm7, mm6);         /* tmp3-tmp4 */
-  psraw_i2r (3, mm4);           /* outptr[0,4],[1,4],[2,4],[3,4] */
-
-  /* mov                  ecx, [dataptr] */
-
-  psraw_i2r (3, mm6);           /* outptr[0,3],[1,3],[2,3],[3,3] */
-
-  packuswb_r2r (mm4, mm5);      /* out[0,2],[1,2],[2,2],[3,2],[0,4],[1,4],[2,4],[3,4] */
-
-  packuswb_r2r (mm3, mm6);      /* out[0,3],[1,3],[2,3],[3,3],[0,5],[1,5],[2,5],[3,5] */
-  movq_r2r (mm2, mm4);
-
-  movq_r2r (mm5, mm7);
-  punpcklbw_r2r (mm0, mm2);     /* out[0,0],[0,1],[1,0],[1,1],[2,0],[2,1],[3,0],[3,1] */
-
-  punpckhbw_r2r (mm0, mm4);     /* out[0,6],[0,7],[1,6],[1,7],[2,6],[2,7],[3,6],[3,7] */
-  movq_r2r (mm2, mm1);
-
-  punpcklbw_r2r (mm6, mm5);     /* out[0,2],[0,3],[1,2],[1,3],[2,2],[2,3],[3,2],[3,3] */
-
-  /* add                  dataptr, 4 */
-
-  punpckhbw_r2r (mm6, mm7);     /* out[0,4],[0,5],[1,4],[1,5],[2,4],[2,5],[3,4],[3,5] */
-
-  punpcklwd_r2r (mm5, mm2);     /* out[0,0],[0,1],[0,2],[0,3],[1,0],[1,1],[1,2],[1,3] */
-
-  /* add                  ecx, output_col */
-
-  movq_r2r (mm7, mm6);
-  punpckhwd_r2r (mm5, mm1);     /* out[2,0],[2,1],[2,2],[2,3],[3,0],[3,1],[3,2],[3,3] */
-
-  movq_r2r (mm2, mm0);
-  punpcklwd_r2r (mm4, mm6);     /* out[0,4],[0,5],[0,6],[0,7],[1,4],[1,5],[1,6],[1,7] */
-
-  /* mov                  idata, [dataptr] */
-
-  punpckldq_r2r (mm6, mm2);     /* out[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7] */
-
-  /* add                  dataptr, 4 */
-
-  movq_r2r (mm1, mm3);
-
-  /* add                  idata, output_col  */
-
-  punpckhwd_r2r (mm4, mm7);     /* out[2,4],[2,5],[2,6],[2,7],[3,4],[3,5],[3,6],[3,7] */
-
-  movq_r2m (mm2, *(dataptr));
-
-  punpckhdq_r2r (mm6, mm0);     /* out[1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7] */
-
-  dataptr += rskip;
-  movq_r2m (mm0, *(dataptr));
-
-  punpckldq_r2r (mm7, mm1);     /* out[2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7] */
-  punpckhdq_r2r (mm7, mm3);     /* out[3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7] */
-
-  dataptr += rskip;
-  movq_r2m (mm1, *(dataptr));
-
-  dataptr += rskip;
-  movq_r2m (mm3, *(dataptr));
-
-/*******************************************************************/
-
-  wsptr += 8;
-
-/*******************************************************************/
-
-/*    tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]); */
-/*    tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]); */
-/*    tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]); */
-/*    tmp14 = ((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6]); */
-  movq_m2r (*(wsptr), mm0);     /* wsptr[0,0],[0,1],[0,2],[0,3] */
-
-  movq_m2r (*(wsptr + 1), mm1); /* wsptr[0,4],[0,5],[0,6],[0,7] */
-  movq_r2r (mm0, mm2);
-
-  movq_m2r (*(wsptr + 2), mm3); /* wsptr[1,0],[1,1],[1,2],[1,3] */
-  paddw_r2r (mm1, mm0);         /* wsptr[0,tmp10],[xxx],[0,tmp13],[xxx] */
-
-  movq_m2r (*(wsptr + 3), mm4); /* wsptr[1,4],[1,5],[1,6],[1,7] */
-  psubw_r2r (mm1, mm2);         /* wsptr[0,tmp11],[xxx],[0,tmp14],[xxx] */
-
-  movq_r2r (mm0, mm6);
-  movq_r2r (mm3, mm5);
-
-  paddw_r2r (mm4, mm3);         /* wsptr[1,tmp10],[xxx],[1,tmp13],[xxx] */
-  movq_r2r (mm2, mm1);
-
-  psubw_r2r (mm4, mm5);         /* wsptr[1,tmp11],[xxx],[1,tmp14],[xxx] */
-  punpcklwd_r2r (mm3, mm0);     /* wsptr[0,tmp10],[1,tmp10],[xxx],[xxx] */
-
-  movq_m2r (*(wsptr + 7), mm7); /* wsptr[3,4],[3,5],[3,6],[3,7] */
-  punpckhwd_r2r (mm3, mm6);     /* wsptr[0,tmp13],[1,tmp13],[xxx],[xxx] */
-
-  movq_m2r (*(wsptr + 4), mm3); /* wsptr[2,0],[2,1],[2,2],[2,3] */
-  punpckldq_r2r (mm6, mm0);     /* wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13] */
-
-  punpcklwd_r2r (mm5, mm1);     /* wsptr[0,tmp11],[1,tmp11],[xxx],[xxx] */
-  movq_r2r (mm3, mm4);
-
-  movq_m2r (*(wsptr + 6), mm6); /* wsptr[3,0],[3,1],[3,2],[3,3] */
-  punpckhwd_r2r (mm5, mm2);     /* wsptr[0,tmp14],[1,tmp14],[xxx],[xxx] */
-
-  movq_m2r (*(wsptr + 5), mm5); /* wsptr[2,4],[2,5],[2,6],[2,7] */
-  punpckldq_r2r (mm2, mm1);     /* wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14] */
-
-  paddw_r2r (mm5, mm3);         /* wsptr[2,tmp10],[xxx],[2,tmp13],[xxx] */
-  movq_r2r (mm6, mm2);
-
-  psubw_r2r (mm5, mm4);         /* wsptr[2,tmp11],[xxx],[2,tmp14],[xxx] */
-  paddw_r2r (mm7, mm6);         /* wsptr[3,tmp10],[xxx],[3,tmp13],[xxx] */
-
-  movq_r2r (mm3, mm5);
-  punpcklwd_r2r (mm6, mm3);     /* wsptr[2,tmp10],[3,tmp10],[xxx],[xxx] */
-
-  psubw_r2r (mm7, mm2);         /* wsptr[3,tmp11],[xxx],[3,tmp14],[xxx] */
-  punpckhwd_r2r (mm6, mm5);     /* wsptr[2,tmp13],[3,tmp13],[xxx],[xxx] */
-
-  movq_r2r (mm4, mm7);
-  punpckldq_r2r (mm5, mm3);     /* wsptr[2,tmp10],[3,tmp10],[2,tmp13],[3,tmp13] */
-
-  punpcklwd_r2r (mm2, mm4);     /* wsptr[2,tmp11],[3,tmp11],[xxx],[xxx] */
-
-  punpckhwd_r2r (mm2, mm7);     /* wsptr[2,tmp14],[3,tmp14],[xxx],[xxx] */
-
-  punpckldq_r2r (mm7, mm4);     /* wsptr[2,tmp11],[3,tmp11],[2,tmp14],[3,tmp14] */
-  movq_r2r (mm1, mm6);
-
-  /*OK */
-
-/*      mm0 =   ;wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13] */
-/*      mm1 =   ;wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14] */
-
-  movq_r2r (mm0, mm2);
-  punpckhdq_r2r (mm4, mm6);     /* wsptr[0,tmp14],[1,tmp14],[2,tmp14],[3,tmp14] */
-
-  punpckldq_r2r (mm4, mm1);     /* wsptr[0,tmp11],[1,tmp11],[2,tmp11],[3,tmp11] */
-  psllw_i2r (2, mm6);
-
-  pmulhw_m2r (fix_141, mm6);
-  punpckldq_r2r (mm3, mm0);     /* wsptr[0,tmp10],[1,tmp10],[2,tmp10],[3,tmp10] */
-
-  punpckhdq_r2r (mm3, mm2);     /* wsptr[0,tmp13],[1,tmp13],[2,tmp13],[3,tmp13] */
-  movq_r2r (mm0, mm7);
-
-/*    tmp0 = tmp10 + tmp13; */
-/*    tmp3 = tmp10 - tmp13; */
-  paddw_r2r (mm2, mm0);         /* [0,tmp0],[1,tmp0],[2,tmp0],[3,tmp0] */
-  psubw_r2r (mm2, mm7);         /* [0,tmp3],[1,tmp3],[2,tmp3],[3,tmp3] */
-
-/*    tmp12 = MULTIPLY(tmp14, FIX_1_414213562) - tmp13; */
-  psubw_r2r (mm2, mm6);         /* wsptr[0,tmp12],[1,tmp12],[2,tmp12],[3,tmp12] */
-/*    tmp1 = tmp11 + tmp12; */
-/*    tmp2 = tmp11 - tmp12; */
-  movq_r2r (mm1, mm5);
-
-  /*OK */
-
-
-  /* Odd part */
-
-/*    z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3]; */
-/*    z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3]; */
-/*    z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7]; */
-/*    z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7]; */
-  movq_m2r (*(wsptr), mm3);     /* wsptr[0,0],[0,1],[0,2],[0,3] */
-  paddw_r2r (mm6, mm1);         /* [0,tmp1],[1,tmp1],[2,tmp1],[3,tmp1] */
-
-  movq_m2r (*(wsptr + 1), mm4); /* wsptr[0,4],[0,5],[0,6],[0,7] */
-  psubw_r2r (mm6, mm5);         /* [0,tmp2],[1,tmp2],[2,tmp2],[3,tmp2] */
-
-  movq_r2r (mm3, mm6);
-  punpckldq_r2r (mm4, mm3);     /* wsptr[0,0],[0,1],[0,4],[0,5] */
-
-  punpckhdq_r2r (mm6, mm4);     /* wsptr[0,6],[0,7],[0,2],[0,3] */
-  movq_r2r (mm3, mm2);
-
-/*Save tmp0 and tmp1 in wsptr */
-  movq_r2m (mm0, *(wsptr));     /* save tmp0 */
-  paddw_r2r (mm4, mm2);         /* wsptr[xxx],[0,z11],[xxx],[0,z13] */
-
-
-/*Continue with z10 --- z13 */
-  movq_m2r (*(wsptr + 2), mm6); /* wsptr[1,0],[1,1],[1,2],[1,3] */
-  psubw_r2r (mm4, mm3);         /* wsptr[xxx],[0,z12],[xxx],[0,z10] */
-
-  movq_m2r (*(wsptr + 3), mm0); /* wsptr[1,4],[1,5],[1,6],[1,7] */
-  movq_r2r (mm6, mm4);
-
-  movq_r2m (mm1, *(wsptr + 1)); /* save tmp1 */
-  punpckldq_r2r (mm0, mm6);     /* wsptr[1,0],[1,1],[1,4],[1,5] */
-
-  punpckhdq_r2r (mm4, mm0);     /* wsptr[1,6],[1,7],[1,2],[1,3] */
-  movq_r2r (mm6, mm1);
-
-/*Save tmp2 and tmp3 in wsptr */
-  paddw_r2r (mm0, mm6);         /* wsptr[xxx],[1,z11],[xxx],[1,z13] */
-  movq_r2r (mm2, mm4);
-
-/*Continue with z10 --- z13 */
-  movq_r2m (mm5, *(wsptr + 2)); /* save tmp2 */
-  punpcklwd_r2r (mm6, mm2);     /* wsptr[xxx],[xxx],[0,z11],[1,z11] */
-
-  psubw_r2r (mm0, mm1);         /* wsptr[xxx],[1,z12],[xxx],[1,z10] */
-  punpckhwd_r2r (mm6, mm4);     /* wsptr[xxx],[xxx],[0,z13],[1,z13] */
-
-  movq_r2r (mm3, mm0);
-  punpcklwd_r2r (mm1, mm3);     /* wsptr[xxx],[xxx],[0,z12],[1,z12] */
-
-  movq_r2m (mm7, *(wsptr + 3)); /* save tmp3 */
-  punpckhwd_r2r (mm1, mm0);     /* wsptr[xxx],[xxx],[0,z10],[1,z10] */
-
-  movq_m2r (*(wsptr + 4), mm6); /* wsptr[2,0],[2,1],[2,2],[2,3] */
-  punpckhdq_r2r (mm2, mm0);     /* wsptr[0,z10],[1,z10],[0,z11],[1,z11] */
-
-  movq_m2r (*(wsptr + 5), mm7); /* wsptr[2,4],[2,5],[2,6],[2,7] */
-  punpckhdq_r2r (mm4, mm3);     /* wsptr[0,z12],[1,z12],[0,z13],[1,z13] */
-
-  movq_m2r (*(wsptr + 6), mm1); /* wsptr[3,0],[3,1],[3,2],[3,3] */
-  movq_r2r (mm6, mm4);
-
-  punpckldq_r2r (mm7, mm6);     /* wsptr[2,0],[2,1],[2,4],[2,5] */
-  movq_r2r (mm1, mm5);
-
-  punpckhdq_r2r (mm4, mm7);     /* wsptr[2,6],[2,7],[2,2],[2,3] */
-  movq_r2r (mm6, mm2);
-
-  movq_m2r (*(wsptr + 7), mm4); /* wsptr[3,4],[3,5],[3,6],[3,7] */
-  paddw_r2r (mm7, mm6);         /* wsptr[xxx],[2,z11],[xxx],[2,z13] */
-
-  psubw_r2r (mm7, mm2);         /* wsptr[xxx],[2,z12],[xxx],[2,z10] */
-  punpckldq_r2r (mm4, mm1);     /* wsptr[3,0],[3,1],[3,4],[3,5] */
-
-  punpckhdq_r2r (mm5, mm4);     /* wsptr[3,6],[3,7],[3,2],[3,3] */
-  movq_r2r (mm1, mm7);
-
-  paddw_r2r (mm4, mm1);         /* wsptr[xxx],[3,z11],[xxx],[3,z13] */
-  psubw_r2r (mm4, mm7);         /* wsptr[xxx],[3,z12],[xxx],[3,z10] */
-
-  movq_r2r (mm6, mm5);
-  punpcklwd_r2r (mm1, mm6);     /* wsptr[xxx],[xxx],[2,z11],[3,z11] */
-
-  punpckhwd_r2r (mm1, mm5);     /* wsptr[xxx],[xxx],[2,z13],[3,z13] */
-  movq_r2r (mm2, mm4);
-
-  punpcklwd_r2r (mm7, mm2);     /* wsptr[xxx],[xxx],[2,z12],[3,z12] */
-
-  punpckhwd_r2r (mm7, mm4);     /* wsptr[xxx],[xxx],[2,z10],[3,z10] */
-
-  punpckhdq_r2r (mm6, mm4);     /* wsptr[2,z10],[3,z10],[2,z11],[3,z11] */
-
-  punpckhdq_r2r (mm5, mm2);     /* wsptr[2,z12],[3,z12],[2,z13],[3,z13] */
-  movq_r2r (mm0, mm5);
-
-  punpckldq_r2r (mm4, mm0);     /* wsptr[0,z10],[1,z10],[2,z10],[3,z10] */
-
-  punpckhdq_r2r (mm4, mm5);     /* wsptr[0,z11],[1,z11],[2,z11],[3,z11] */
-  movq_r2r (mm3, mm4);
-
-  punpckhdq_r2r (mm2, mm4);     /* wsptr[0,z13],[1,z13],[2,z13],[3,z13] */
-  movq_r2r (mm5, mm1);
-
-  punpckldq_r2r (mm2, mm3);     /* wsptr[0,z12],[1,z12],[2,z12],[3,z12] */
-/*    tmp7 = z11 + z13;         : phase 5 */
-/*    tmp8 = z11 - z13;         : phase 5 */
-  psubw_r2r (mm4, mm1);         /* tmp8 */
-
-  paddw_r2r (mm4, mm5);         /* tmp7 */
-/*    tmp21 = MULTIPLY(tmp8, FIX_1_414213562);  2*c4 */
-  psllw_i2r (2, mm1);
-
-  psllw_i2r (2, mm0);
-
-  pmulhw_m2r (fix_141, mm1);    /* tmp21 */
-/*    tmp20 = MULTIPLY(z12, (FIX_1_082392200- FIX_1_847759065)) :  2*(c2-c6) */
-/*                      + MULTIPLY(z10, - FIX_1_847759065); : 2*c2 */
-  psllw_i2r (2, mm3);
-  movq_r2r (mm0, mm7);
-
-  pmulhw_m2r (fix_n184, mm7);
-  movq_r2r (mm3, mm6);
-
-  movq_m2r (*(wsptr), mm2);     /* tmp0,final1 */
-
-  pmulhw_m2r (fix_108n184, mm6);
-/*       tmp22 = MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) : -2*(c2+c6) */
-/*                      + MULTIPLY(z12, FIX_1_847759065); : 2*c2 */
-  movq_r2r (mm2, mm4);          /* final1 */
-
-  pmulhw_m2r (fix_184n261, mm0);
-  paddw_r2r (mm5, mm2);         /* tmp0+tmp7,final1 */
-
-  pmulhw_m2r (fix_184, mm3);
-  psubw_r2r (mm5, mm4);         /* tmp0-tmp7,final1 */
-
-/*    tmp6 = tmp22 - tmp7;      phase 2 */
-  psraw_i2r (3, mm2);           /* outptr[0,0],[1,0],[2,0],[3,0],final1 */
-
-  paddw_r2r (mm6, mm7);         /* tmp20 */
-  psraw_i2r (3, mm4);           /* outptr[0,7],[1,7],[2,7],[3,7],final1 */
-
-  paddw_r2r (mm0, mm3);         /* tmp22 */
-
-/*    tmp5 = tmp21 - tmp6; */
-  psubw_r2r (mm5, mm3);         /* tmp6 */
-
-/*    tmp4 = tmp20 + tmp5; */
-  movq_m2r (*(wsptr + 1), mm0); /* tmp1,final2 */
-  psubw_r2r (mm3, mm1);         /* tmp5 */
-
-  movq_r2r (mm0, mm6);          /* final2 */
-  paddw_r2r (mm3, mm0);         /* tmp1+tmp6,final2 */
-
-  /* Final output stage: scale down by a factor of 8 and range-limit */
-
-/*    outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final1 */
-
-
-/*    outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final2 */
-  psubw_r2r (mm3, mm6);         /* tmp1-tmp6,final2 */
-  psraw_i2r (3, mm0);           /* outptr[0,1],[1,1],[2,1],[3,1] */
-
-  psraw_i2r (3, mm6);           /* outptr[0,6],[1,6],[2,6],[3,6] */
-
-  packuswb_r2r (mm4, mm0);      /* out[0,1],[1,1],[2,1],[3,1],[0,7],[1,7],[2,7],[3,7] */
-
-  movq_m2r (*(wsptr + 2), mm5); /* tmp2,final3 */
-  packuswb_r2r (mm6, mm2);      /* out[0,0],[1,0],[2,0],[3,0],[0,6],[1,6],[2,6],[3,6] */
-
-/*    outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final3 */
-  paddw_r2r (mm1, mm7);         /* tmp4 */
-  movq_r2r (mm5, mm3);
-
-  paddw_r2r (mm1, mm5);         /* tmp2+tmp5 */
-  psubw_r2r (mm1, mm3);         /* tmp2-tmp5 */
-
-  psraw_i2r (3, mm5);           /* outptr[0,2],[1,2],[2,2],[3,2] */
-
-  movq_m2r (*(wsptr + 3), mm4); /* tmp3,final4 */
-  psraw_i2r (3, mm3);           /* outptr[0,5],[1,5],[2,5],[3,5] */
-
-
-
-/*    outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3) */
-/*                          & RANGE_MASK]; */
-/*    outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3) */
-/*                          & RANGE_MASK];      final4 */
-  movq_r2r (mm4, mm6);
-  paddw_r2r (mm7, mm4);         /* tmp3+tmp4 */
-
-  psubw_r2r (mm7, mm6);         /* tmp3-tmp4 */
-  psraw_i2r (3, mm4);           /* outptr[0,4],[1,4],[2,4],[3,4] */
-
-  psraw_i2r (3, mm6);           /* outptr[0,3],[1,3],[2,3],[3,3] */
-
-  /*
-     movq_r2m(mm4, *dummy);
-     fprintf(stderr, "3-4 %016llx\n", dummy);
-     movq_r2m(mm4, *dummy);
-     fprintf(stderr, "3+4 %016llx\n", dummy);
-   */
-
-
-  packuswb_r2r (mm4, mm5);      /* out[0,2],[1,2],[2,2],[3,2],[0,4],[1,4],[2,4],[3,4] */
-
-  packuswb_r2r (mm3, mm6);      /* out[0,3],[1,3],[2,3],[3,3],[0,5],[1,5],[2,5],[3,5] */
-  movq_r2r (mm2, mm4);
-
-  movq_r2r (mm5, mm7);
-  punpcklbw_r2r (mm0, mm2);     /* out[0,0],[0,1],[1,0],[1,1],[2,0],[2,1],[3,0],[3,1] */
-
-  punpckhbw_r2r (mm0, mm4);     /* out[0,6],[0,7],[1,6],[1,7],[2,6],[2,7],[3,6],[3,7] */
-  movq_r2r (mm2, mm1);
-
-  punpcklbw_r2r (mm6, mm5);     /* out[0,2],[0,3],[1,2],[1,3],[2,2],[2,3],[3,2],[3,3] */
-
-  punpckhbw_r2r (mm6, mm7);     /* out[0,4],[0,5],[1,4],[1,5],[2,4],[2,5],[3,4],[3,5] */
-
-  punpcklwd_r2r (mm5, mm2);     /* out[0,0],[0,1],[0,2],[0,3],[1,0],[1,1],[1,2],[1,3] */
-
-  movq_r2r (mm7, mm6);
-  punpckhwd_r2r (mm5, mm1);     /* out[2,0],[2,1],[2,2],[2,3],[3,0],[3,1],[3,2],[3,3] */
-
-  movq_r2r (mm2, mm0);
-  punpcklwd_r2r (mm4, mm6);     /* out[0,4],[0,5],[0,6],[0,7],[1,4],[1,5],[1,6],[1,7] */
-
-  punpckldq_r2r (mm6, mm2);     /* out[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7] */
-
-  movq_r2r (mm1, mm3);
-
-  punpckhwd_r2r (mm4, mm7);     /* out[2,4],[2,5],[2,6],[2,7],[3,4],[3,5],[3,6],[3,7] */
-
-  dataptr += rskip;
-  movq_r2m (mm2, *(dataptr));
-
-  punpckhdq_r2r (mm6, mm0);     /* out[1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7] */
-
-  dataptr += rskip;
-  movq_r2m (mm0, *(dataptr));
-
-  punpckldq_r2r (mm7, mm1);     /* out[2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7] */
-
-  punpckhdq_r2r (mm7, mm3);     /* out[3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7] */
-
-  dataptr += rskip;
-  movq_r2m (mm1, *(dataptr));
-
-  dataptr += rskip;
-  movq_r2m (mm3, *(dataptr));
-
-#else
-  __s32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  __s32 tmp10, tmp11, tmp12, tmp13;
-  __s32 z5, z10, z11, z12, z13;
-  __s16 *inptr;
-  __s32 *wsptr;
-  __u8 *outptr;
-  int ctr;
-  __s32 dcval;
-  __s32 workspace[64];
-
-  inptr = data;
-  wsptr = workspace;
-  for (ctr = 8; ctr > 0; ctr--) {
-
-    if ((inptr[8] | inptr[16] | inptr[24] |
-            inptr[32] | inptr[40] | inptr[48] | inptr[56]) == 0) {
-      dcval = inptr[0];
-      wsptr[0] = dcval;
-      wsptr[8] = dcval;
-      wsptr[16] = dcval;
-      wsptr[24] = dcval;
-      wsptr[32] = dcval;
-      wsptr[40] = dcval;
-      wsptr[48] = dcval;
-      wsptr[56] = dcval;
-
-      inptr++;
-      wsptr++;
-      continue;
-    }
-
-    tmp0 = inptr[0];
-    tmp1 = inptr[16];
-    tmp2 = inptr[32];
-    tmp3 = inptr[48];
-
-    tmp10 = tmp0 + tmp2;
-    tmp11 = tmp0 - tmp2;
-
-    tmp13 = tmp1 + tmp3;
-    tmp12 = MULTIPLY (tmp1 - tmp3, FIX_1_414213562) - tmp13;
-
-    tmp0 = tmp10 + tmp13;
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    tmp4 = inptr[8];
-    tmp5 = inptr[24];
-    tmp6 = inptr[40];
-    tmp7 = inptr[56];
-
-    z13 = tmp6 + tmp5;
-    z10 = tmp6 - tmp5;
-    z11 = tmp4 + tmp7;
-    z12 = tmp4 - tmp7;
-
-    tmp7 = z11 + z13;
-    tmp11 = MULTIPLY (z11 - z13, FIX_1_414213562);
-
-    z5 = MULTIPLY (z10 + z12, FIX_1_847759065);
-    tmp10 = MULTIPLY (z12, FIX_1_082392200) - z5;
-    tmp12 = MULTIPLY (z10, -FIX_2_613125930) + z5;
-
-    tmp6 = tmp12 - tmp7;
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    wsptr[0] = (__s32) (tmp0 + tmp7);
-    wsptr[56] = (__s32) (tmp0 - tmp7);
-    wsptr[8] = (__s32) (tmp1 + tmp6);
-    wsptr[48] = (__s32) (tmp1 - tmp6);
-    wsptr[16] = (__s32) (tmp2 + tmp5);
-    wsptr[40] = (__s32) (tmp2 - tmp5);
-    wsptr[32] = (__s32) (tmp3 + tmp4);
-    wsptr[24] = (__s32) (tmp3 - tmp4);
-
-    inptr++;
-    wsptr++;
-  }
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++) {
-    outptr = &(odata[ctr * rskip]);
-
-    tmp10 = wsptr[0] + wsptr[4];
-    tmp11 = wsptr[0] - wsptr[4];
-
-    tmp13 = wsptr[2] + wsptr[6];
-    tmp12 = MULTIPLY (wsptr[2] - wsptr[6], FIX_1_414213562) - tmp13;
-
-    tmp0 = tmp10 + tmp13;
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    z13 = wsptr[5] + wsptr[3];
-    z10 = wsptr[5] - wsptr[3];
-    z11 = wsptr[1] + wsptr[7];
-    z12 = wsptr[1] - wsptr[7];
-
-    tmp7 = z11 + z13;
-    tmp11 = MULTIPLY (z11 - z13, FIX_1_414213562);
-
-    z5 = MULTIPLY (z10 + z12, FIX_1_847759065);
-    tmp10 = MULTIPLY (z12, FIX_1_082392200) - z5;
-    tmp12 = MULTIPLY (z10, -FIX_2_613125930) + z5;
-
-    tmp6 = tmp12 - tmp7;
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    outptr[0] = RL (DESCALE (tmp0 + tmp7));
-    outptr[7] = RL (DESCALE (tmp0 - tmp7));
-    outptr[1] = RL (DESCALE (tmp1 + tmp6));
-    outptr[6] = RL (DESCALE (tmp1 - tmp6));
-    outptr[2] = RL (DESCALE (tmp2 + tmp5));
-    outptr[5] = RL (DESCALE (tmp2 - tmp5));
-    outptr[4] = RL (DESCALE (tmp3 + tmp4));
-    outptr[3] = RL (DESCALE (tmp3 - tmp4));
-
-    wsptr += 8;
-  }
-#endif
-}
-
-/*
-
-Main Routines
-
-This file contains most of the initialisation and control functions
-
-(C) Justin Schoeman 1998
-
-*/
-
-/*
-
-Private function
-
-Initialise all the cache-aliged data blocks
-
-*/
-
-void
-RTjpeg_init_data (void)
-{
-  unsigned long dptr;
-
-  dptr = (unsigned long) &(RTjpeg_alldata[0]);
-  dptr += 32;
-  dptr = dptr >> 5;
-  dptr = dptr << 5;             /* cache align data */
-
-  RTjpeg_block = (__s16 *) dptr;
-  dptr += sizeof (__s16) * 64;
-  RTjpeg_lqt = (__s32 *) dptr;
-  dptr += sizeof (__s32) * 64;
-  RTjpeg_cqt = (__s32 *) dptr;
-  dptr += sizeof (__s32) * 64;
-  RTjpeg_liqt = (__u32 *) dptr;
-  dptr += sizeof (__u32) * 64;
-  RTjpeg_ciqt = (__u32 *) dptr;
-}
-
-/*
-
-External Function
-
-Re-set quality factor
-
-Input: buf -> pointer to 128 ints for quant values store to pass back to
-              init_decompress.
-       Q -> quality factor (192=best, 32=worst)
-*/
-
-void
-RTjpeg_init_Q (__u8 Q)
-{
-  int i;
-  __u64 qual;
-
-  qual = (__u64) Q << (32 - 7); /* 32 bit FP, 255=2, 0=0 */
-
-  for (i = 0; i < 64; i++) {
-    RTjpeg_lqt[i] =
-        (__s32) ((qual / ((__u64) RTjpeg_lum_quant_tbl[i] << 16)) >> 3);
-    if (RTjpeg_lqt[i] == 0)
-      RTjpeg_lqt[i] = 1;
-    RTjpeg_cqt[i] =
-        (__s32) ((qual / ((__u64) RTjpeg_chrom_quant_tbl[i] << 16)) >> 3);
-    if (RTjpeg_cqt[i] == 0)
-      RTjpeg_cqt[i] = 1;
-    RTjpeg_liqt[i] = (1 << 16) / (RTjpeg_lqt[i] << 3);
-    RTjpeg_ciqt[i] = (1 << 16) / (RTjpeg_cqt[i] << 3);
-    RTjpeg_lqt[i] = ((1 << 16) / RTjpeg_liqt[i]) >> 3;
-    RTjpeg_cqt[i] = ((1 << 16) / RTjpeg_ciqt[i]) >> 3;
-  }
-
-  RTjpeg_lb8 = 0;
-  while (RTjpeg_liqt[RTjpeg_ZZ[++RTjpeg_lb8]] <= 8);
-  RTjpeg_lb8--;
-  RTjpeg_cb8 = 0;
-  while (RTjpeg_ciqt[RTjpeg_ZZ[++RTjpeg_cb8]] <= 8);
-  RTjpeg_cb8--;
-
-  RTjpeg_dct_init ();
-  RTjpeg_idct_init ();
-  RTjpeg_quant_init ();
-}
-
-/*
-
-External Function
-
-Initialise compression.
-
-Input: buf -> pointer to 128 ints for quant values store to pass back to 
-                init_decompress.
-       width -> width of image
-       height -> height of image
-       Q -> quality factor (192=best, 32=worst)
-       
-*/
-
-void
-RTjpeg_init_compress (__u32 * buf, int width, int height, __u8 Q)
-{
-  int i;
-  __u64 qual;
-
-  RTjpeg_init_data ();
-
-  RTjpeg_width = width;
-  RTjpeg_height = height;
-  RTjpeg_Ywidth = RTjpeg_width >> 3;
-  RTjpeg_Ysize = width * height;
-  RTjpeg_Cwidth = RTjpeg_width >> 4;
-  RTjpeg_Csize = (width >> 1) * height;
-
-  qual = (__u64) Q << (32 - 7); /* 32 bit FP, 255=2, 0=0 */
-
-  for (i = 0; i < 64; i++) {
-    RTjpeg_lqt[i] =
-        (__s32) ((qual / ((__u64) RTjpeg_lum_quant_tbl[i] << 16)) >> 3);
-    if (RTjpeg_lqt[i] == 0)
-      RTjpeg_lqt[i] = 1;
-    RTjpeg_cqt[i] =
-        (__s32) ((qual / ((__u64) RTjpeg_chrom_quant_tbl[i] << 16)) >> 3);
-    if (RTjpeg_cqt[i] == 0)
-      RTjpeg_cqt[i] = 1;
-    RTjpeg_liqt[i] = (1 << 16) / (RTjpeg_lqt[i] << 3);
-    RTjpeg_ciqt[i] = (1 << 16) / (RTjpeg_cqt[i] << 3);
-    RTjpeg_lqt[i] = ((1 << 16) / RTjpeg_liqt[i]) >> 3;
-    RTjpeg_cqt[i] = ((1 << 16) / RTjpeg_ciqt[i]) >> 3;
-  }
-
-  RTjpeg_lb8 = 0;
-  while (RTjpeg_liqt[RTjpeg_ZZ[++RTjpeg_lb8]] <= 8);
-  RTjpeg_lb8--;
-  RTjpeg_cb8 = 0;
-  while (RTjpeg_ciqt[RTjpeg_ZZ[++RTjpeg_cb8]] <= 8);
-  RTjpeg_cb8--;
-
-  RTjpeg_dct_init ();
-  RTjpeg_quant_init ();
-
-  for (i = 0; i < 64; i++)
-    buf[i] = RTjpeg_liqt[i];
-  for (i = 0; i < 64; i++)
-    buf[64 + i] = RTjpeg_ciqt[i];
-}
-
-void
-RTjpeg_init_decompress (__u32 * buf, int width, int height)
-{
-  int i;
-
-  RTjpeg_init_data ();
-
-  RTjpeg_width = width;
-  RTjpeg_height = height;
-  RTjpeg_Ywidth = RTjpeg_width >> 3;
-  RTjpeg_Ysize = width * height;
-  RTjpeg_Cwidth = RTjpeg_width >> 4;
-  RTjpeg_Csize = (width >> 1) * height;
-
-  for (i = 0; i < 64; i++) {
-    RTjpeg_liqt[i] = buf[i];
-    RTjpeg_ciqt[i] = buf[i + 64];
-  }
-
-  RTjpeg_lb8 = 0;
-  while (RTjpeg_liqt[RTjpeg_ZZ[++RTjpeg_lb8]] <= 8);
-  RTjpeg_lb8--;
-  RTjpeg_cb8 = 0;
-  while (RTjpeg_ciqt[RTjpeg_ZZ[++RTjpeg_cb8]] <= 8);
-  RTjpeg_cb8--;
-
-  RTjpeg_idct_init ();
-
-/* RTjpeg_color_init(); */
-}
-
-int
-RTjpeg_compressYUV420 (__s8 * sp, unsigned char *bp)
-{
-  __s8 *sb;
-  register __s8 *bp1 = bp + (RTjpeg_width << 3);
-  register __s8 *bp2 = bp + RTjpeg_Ysize;
-  register __s8 *bp3 = bp2 + (RTjpeg_Csize >> 1);
-  register int i, j, k;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-  sb = sp;
-/* Y */
-  for (i = RTjpeg_height >> 1; i; i -= 8) {
-    for (j = 0, k = 0; j < RTjpeg_width; j += 16, k += 8) {
-      RTjpeg_dctY (bp + j, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-
-      RTjpeg_dctY (bp + j + 8, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-
-      RTjpeg_dctY (bp1 + j, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-
-      RTjpeg_dctY (bp1 + j + 8, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-
-      RTjpeg_dctY (bp2 + k, RTjpeg_block, RTjpeg_Cwidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_cqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_cb8);
-
-      RTjpeg_dctY (bp3 + k, RTjpeg_block, RTjpeg_Cwidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_cqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_cb8);
-
-    }
-    bp += RTjpeg_width << 4;
-    bp1 += RTjpeg_width << 4;
-    bp2 += RTjpeg_width << 2;
-    bp3 += RTjpeg_width << 2;
-
-  }
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-  return (sp - sb);
-}
-
-int
-RTjpeg_compressYUV422 (__s8 * sp, unsigned char *bp)
-{
-  __s8 *sb;
-  register __s8 *bp2 = bp + RTjpeg_Ysize;
-  register __s8 *bp3 = bp2 + RTjpeg_Csize;
-  register int i, j, k;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-  sb = sp;
-/* Y */
-  for (i = RTjpeg_height; i; i -= 8) {
-    for (j = 0, k = 0; j < RTjpeg_width; j += 16, k += 8) {
-      RTjpeg_dctY (bp + j, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-
-      RTjpeg_dctY (bp + j + 8, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-
-      RTjpeg_dctY (bp2 + k, RTjpeg_block, RTjpeg_Cwidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_cqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_cb8);
-
-      RTjpeg_dctY (bp3 + k, RTjpeg_block, RTjpeg_Cwidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_cqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_cb8);
-
-    }
-    bp += RTjpeg_width << 3;
-    bp2 += RTjpeg_width << 2;
-    bp3 += RTjpeg_width << 2;
-
-  }
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-  return (sp - sb);
-}
-
-int
-RTjpeg_compress8 (__s8 * sp, unsigned char *bp)
-{
-  __s8 *sb;
-  int i, j;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-
-  sb = sp;
-/* Y */
-  for (i = 0; i < RTjpeg_height; i += 8) {
-    for (j = 0; j < RTjpeg_width; j += 8) {
-      RTjpeg_dctY (bp + j, RTjpeg_block, RTjpeg_width);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-    }
-    bp += RTjpeg_width;
-  }
-
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-  return (sp - sb);
-}
-
-void
-RTjpeg_decompressYUV422 (__s8 * sp, __u8 * bp)
-{
-  register __s8 *bp2 = bp + RTjpeg_Ysize;
-  register __s8 *bp3 = bp2 + (RTjpeg_Csize);
-  int i, j, k;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-
-/* Y */
-  for (i = RTjpeg_height; i; i -= 8) {
-    for (k = 0, j = 0; j < RTjpeg_width; j += 16, k += 8) {
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
-        RTjpeg_idct (bp + j, RTjpeg_block, RTjpeg_width);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
-        RTjpeg_idct (bp + j + 8, RTjpeg_block, RTjpeg_width);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
-        RTjpeg_idct (bp2 + k, RTjpeg_block, RTjpeg_width >> 1);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
-        RTjpeg_idct (bp3 + k, RTjpeg_block, RTjpeg_width >> 1);
-      }
-    }
-    bp += RTjpeg_width << 3;
-    bp2 += RTjpeg_width << 2;
-    bp3 += RTjpeg_width << 2;
-  }
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-}
-
-void
-RTjpeg_decompressYUV420 (__s8 * sp, __u8 * bp)
-{
-  register __s8 *bp1 = bp + (RTjpeg_width << 3);
-  register __s8 *bp2 = bp + RTjpeg_Ysize;
-  register __s8 *bp3 = bp2 + (RTjpeg_Csize >> 1);
-  int i, j, k;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-
-/* Y */
-  for (i = RTjpeg_height >> 1; i; i -= 8) {
-    for (k = 0, j = 0; j < RTjpeg_width; j += 16, k += 8) {
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
-        RTjpeg_idct (bp + j, RTjpeg_block, RTjpeg_width);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
-        RTjpeg_idct (bp + j + 8, RTjpeg_block, RTjpeg_width);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
-        RTjpeg_idct (bp1 + j, RTjpeg_block, RTjpeg_width);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
-        RTjpeg_idct (bp1 + j + 8, RTjpeg_block, RTjpeg_width);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
-        RTjpeg_idct (bp2 + k, RTjpeg_block, RTjpeg_width >> 1);
-      }
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
-        RTjpeg_idct (bp3 + k, RTjpeg_block, RTjpeg_width >> 1);
-      }
-    }
-    bp += RTjpeg_width << 4;
-    bp1 += RTjpeg_width << 4;
-    bp2 += RTjpeg_width << 2;
-    bp3 += RTjpeg_width << 2;
-  }
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-}
-
-void
-RTjpeg_decompress8 (__s8 * sp, __u8 * bp)
-{
-  int i, j;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-
-/* Y */
-  for (i = 0; i < RTjpeg_height; i += 8) {
-    for (j = 0; j < RTjpeg_width; j += 8)
-      if (*sp == -1)
-        sp++;
-      else {
-        sp += RTjpeg_s2b (RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
-        RTjpeg_idct (bp + j, RTjpeg_block, RTjpeg_width);
-      }
-    bp += RTjpeg_width << 3;
-  }
-}
-
-/*
-External Function
-
-Initialise additional data structures for motion compensation
-
-*/
-
-void
-RTjpeg_init_mcompress (void)
-{
-  unsigned long tmp;
-
-  if (!RTjpeg_old) {
-    RTjpeg_old = malloc ((4 * RTjpeg_width * RTjpeg_height) + 32);
-    tmp = (unsigned long) RTjpeg_old;
-    tmp += 32;
-    tmp = tmp >> 5;
-    RTjpeg_old = (__s16 *) (tmp << 5);
-  }
-  if (!RTjpeg_old) {
-    fprintf (stderr, "RTjpeg: Could not allocate memory\n");
-    exit (-1);
-  }
-  memset (RTjpeg_old, 0, ((4 * RTjpeg_width * RTjpeg_height)));
-}
-
-#ifdef HAVE_LIBMMX
-
-int
-RTjpeg_bcomp (__s16 * old, mmx_t * mask)
-{
-  int i;
-  mmx_t *mold = (mmx_t *) old;
-  mmx_t *mblock = (mmx_t *) RTjpeg_block;
-  mmx_t result;
-  static mmx_t neg = (mmx_t) (unsigned long long) 0xffffffffffffffffULL;
-
-  movq_m2r (*mask, mm7);
-  movq_m2r (neg, mm6);
-  pxor_r2r (mm5, mm5);
-
-  for (i = 0; i < 8; i++) {
-    movq_m2r (*(mblock++), mm0);
-    movq_m2r (*(mblock++), mm2);
-    movq_m2r (*(mold++), mm1);
-    movq_m2r (*(mold++), mm3);
-    psubsw_r2r (mm1, mm0);
-    psubsw_r2r (mm3, mm2);
-    movq_r2r (mm0, mm1);
-    movq_r2r (mm2, mm3);
-    pcmpgtw_r2r (mm7, mm0);
-    pcmpgtw_r2r (mm7, mm2);
-    pxor_r2r (mm6, mm1);
-    pxor_r2r (mm6, mm3);
-    pcmpgtw_r2r (mm7, mm1);
-    pcmpgtw_r2r (mm7, mm3);
-    por_r2r (mm0, mm5);
-    por_r2r (mm2, mm5);
-    por_r2r (mm1, mm5);
-    por_r2r (mm3, mm5);
-  }
-  movq_r2m (mm5, result);
-
-  if (result.q) {
-    if (!RTjpeg_mtest)
-      for (i = 0; i < 16; i++)
-        ((__u64 *) old)[i] = ((__u64 *) RTjpeg_block)[i];
-    return 0;
-  }
-/* printf("."); */
-  return 1;
-}
-
-#else
-int
-RTjpeg_bcomp (__s16 * old, __u16 * mask)
-{
-  int i;
-
-  for (i = 0; i < 64; i++)
-    if (abs (old[i] - RTjpeg_block[i]) > *mask) {
-      if (!RTjpeg_mtest)
-        for (i = 0; i < 16; i++)
-          ((__u64 *) old)[i] = ((__u64 *) RTjpeg_block)[i];
-      return 0;
-    }
-  return 1;
-}
-#endif
-
-void
-RTjpeg_set_test (int i)
-{
-  RTjpeg_mtest = i;
-}
-
-int
-RTjpeg_mcompress (__s8 * sp, unsigned char *bp, __u16 lmask, __u16 cmask)
-{
-  __s8 *sb;
-  __s16 *block;
-  register __s8 *bp2;
-  register __s8 *bp3;
-  register int i, j, k;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-  RTjpeg_lmask =
-      (mmx_t) (((__u64) lmask << 48) | ((__u64) lmask << 32) | ((__u64) lmask <<
-          16) | lmask);
-  RTjpeg_cmask =
-      (mmx_t) (((__u64) cmask << 48) | ((__u64) cmask << 32) | ((__u64) cmask <<
-          16) | cmask);
-#else
-  RTjpeg_lmask = lmask;
-  RTjpeg_cmask = cmask;
-#endif
-
-  bp = bp - RTjpeg_width * 0;
-  bp2 = bp + RTjpeg_Ysize - RTjpeg_width * 0;
-  bp3 = bp2 + RTjpeg_Csize;
-
-  sb = sp;
-  block = RTjpeg_old;
-/* Y */
-  for (i = RTjpeg_height; i; i -= 8) {
-    for (j = 0, k = 0; j < RTjpeg_width; j += 16, k += 8) {
-      RTjpeg_dctY (bp + j, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      if (RTjpeg_bcomp (block, &RTjpeg_lmask)) {
-        *((__u8 *) sp++) = 255;
-      } else
-        sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-      block += 64;
-
-      RTjpeg_dctY (bp + j + 8, RTjpeg_block, RTjpeg_Ywidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      if (RTjpeg_bcomp (block, &RTjpeg_lmask)) {
-        *((__u8 *) sp++) = 255;
-      } else
-        sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-      block += 64;
-
-      RTjpeg_dctY (bp2 + k, RTjpeg_block, RTjpeg_Cwidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_cqt);
-      if (RTjpeg_bcomp (block, &RTjpeg_cmask)) {
-        *((__u8 *) sp++) = 255;
-      } else
-        sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_cb8);
-      block += 64;
-
-      RTjpeg_dctY (bp3 + k, RTjpeg_block, RTjpeg_Cwidth);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_cqt);
-      if (RTjpeg_bcomp (block, &RTjpeg_cmask)) {
-        *((__u8 *) sp++) = 255;
-      } else
-        sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_cb8);
-      block += 64;
-
-    }
-    bp += RTjpeg_width << 3;
-    bp2 += RTjpeg_width << 2;
-    bp3 += RTjpeg_width << 2;
-  }
-  /*printf ("%d\n", block - RTjpeg_old); */
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-  return (sp - sb);
-}
-
-int
-RTjpeg_mcompress8 (__s8 * sp, unsigned char *bp, __u16 lmask)
-{
-  __s8 *sb;
-  __s16 *block;
-  int i, j;
-
-#ifdef HAVE_LIBMMX
-  emms ();
-  RTjpeg_lmask =
-      (mmx_t) (((__u64) lmask << 48) | ((__u64) lmask << 32) | ((__u64) lmask <<
-          16) | lmask);
-#else
-  RTjpeg_lmask = lmask;
-#endif
-
-
-  sb = sp;
-  block = RTjpeg_old;
-/* Y */
-  for (i = 0; i < RTjpeg_height; i += 8) {
-    for (j = 0; j < RTjpeg_width; j += 8) {
-      RTjpeg_dctY (bp + j, RTjpeg_block, RTjpeg_width);
-      RTjpeg_quant (RTjpeg_block, RTjpeg_lqt);
-      if (RTjpeg_bcomp (block, &RTjpeg_lmask)) {
-        *((__u8 *) sp++) = 255;
-/*    printf("* %d ", sp[-1]); */
-      } else
-        sp += RTjpeg_b2s (RTjpeg_block, sp, RTjpeg_lb8);
-      block += 64;
-    }
-    bp += RTjpeg_width << 3;
-  }
-#ifdef HAVE_LIBMMX
-  emms ();
-#endif
-  return (sp - sb);
-}
-
-void
-RTjpeg_color_init (void)
-{
-}
-
-#define KcrR 76284
-#define KcrG 53281
-#define KcbG 25625
-#define KcbB 132252
-#define Ky 76284
-
-void
-RTjpeg_yuv422rgb (__u8 * buf, __u8 * rgb)
-{
-  int tmp;
-  int i, j;
-  __s32 y, crR, crG, cbG, cbB;
-  __u8 *bufcr, *bufcb, *bufy, *bufoute;
-  int yskip;
-
-  yskip = RTjpeg_width;
-
-  bufcb = &buf[RTjpeg_width * RTjpeg_height];
-  bufcr =
-      &buf[RTjpeg_width * RTjpeg_height + (RTjpeg_width * RTjpeg_height) / 2];
-  bufy = &buf[0];
-  bufoute = rgb;
-
-  for (i = 0; i < (RTjpeg_height); i++) {
-    for (j = 0; j < RTjpeg_width; j += 2) {
-      crR = (*bufcr - 128) * KcrR;
-      crG = (*(bufcr++) - 128) * KcrG;
-      cbG = (*bufcb - 128) * KcbG;
-      cbB = (*(bufcb++) - 128) * KcbB;
-
-      y = (bufy[j] - 16) * Ky;
-
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-      y = (bufy[j + 1] - 16) * Ky;
-
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-    }
-    bufy += yskip;
-  }
-}
-
-
-void
-RTjpeg_yuv420rgb (__u8 * buf, __u8 * rgb)
-{
-  int tmp;
-  int i, j;
-  __s32 y, crR, crG, cbG, cbB;
-  __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
-  int oskip, yskip;
-
-  oskip = RTjpeg_width * 3;
-  yskip = RTjpeg_width;
-
-  bufcb = &buf[RTjpeg_width * RTjpeg_height];
-  bufcr =
-      &buf[RTjpeg_width * RTjpeg_height + (RTjpeg_width * RTjpeg_height) / 4];
-  bufy = &buf[0];
-  bufoute = rgb;
-  bufouto = rgb + oskip;
-
-  for (i = 0; i < (RTjpeg_height >> 1); i++) {
-    for (j = 0; j < RTjpeg_width; j += 2) {
-      crR = (*bufcr - 128) * KcrR;
-      crG = (*(bufcr++) - 128) * KcrG;
-      cbG = (*bufcb - 128) * KcbG;
-      cbB = (*(bufcb++) - 128) * KcbB;
-
-      y = (bufy[j] - 16) * Ky;
-
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-      y = (bufy[j + 1] - 16) * Ky;
-
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-      y = (bufy[j + yskip] - 16) * Ky;
-
-      tmp = (y + crR) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + cbB) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-      y = (bufy[j + 1 + yskip] - 16) * Ky;
-
-      tmp = (y + crR) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + cbB) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-    }
-    bufoute += oskip;
-    bufouto += oskip;
-    bufy += yskip << 1;
-  }
-}
-
-
-void
-RTjpeg_yuvrgb32 (__u8 * buf, __u8 * rgb)
-{
-  int tmp;
-  int i, j;
-  __s32 y, crR, crG, cbG, cbB;
-  __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
-  int oskip, yskip;
-
-  oskip = RTjpeg_width * 4;
-  yskip = RTjpeg_width;
-
-  bufcb = &buf[RTjpeg_width * RTjpeg_height];
-  bufcr =
-      &buf[RTjpeg_width * RTjpeg_height + (RTjpeg_width * RTjpeg_height) / 2];
-  bufy = &buf[0];
-  bufoute = rgb;
-  bufouto = rgb + oskip;
-
-  for (i = 0; i < (RTjpeg_height >> 1); i++) {
-    for (j = 0; j < RTjpeg_width; j += 2) {
-      crR = (*bufcr - 128) * KcrR;
-      crG = (*(bufcr++) - 128) * KcrG;
-      cbG = (*bufcb - 128) * KcbG;
-      cbB = (*(bufcb++) - 128) * KcbB;
-
-      y = (bufy[j] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      bufoute++;
-
-      y = (bufy[j + 1] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      bufoute++;
-
-      y = (bufy[j + yskip] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      bufouto++;
-
-      y = (bufy[j + 1 + yskip] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      bufouto++;
-
-    }
-    bufoute += oskip;
-    bufouto += oskip;
-    bufy += yskip << 1;
-  }
-}
-
-void
-RTjpeg_yuvrgb24 (__u8 * buf, __u8 * rgb)
-{
-  int tmp;
-  int i, j;
-  __s32 y, crR, crG, cbG, cbB;
-  __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
-  int oskip, yskip;
-
-  oskip = RTjpeg_width * 3;
-  yskip = RTjpeg_width;
-
-  bufcb = &buf[RTjpeg_width * RTjpeg_height];
-  bufcr =
-      &buf[RTjpeg_width * RTjpeg_height + (RTjpeg_width * RTjpeg_height) / 4];
-  bufy = &buf[0];
-  bufoute = rgb;
-  bufouto = rgb + oskip;
-
-  for (i = 0; i < (RTjpeg_height >> 1); i++) {
-    for (j = 0; j < RTjpeg_width; j += 2) {
-      crR = (*bufcr - 128) * KcrR;
-      crG = (*(bufcr++) - 128) * KcrG;
-      cbG = (*bufcb - 128) * KcbG;
-      cbB = (*(bufcb++) - 128) * KcbB;
-
-      y = (bufy[j] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-      y = (bufy[j + 1] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufoute++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-      y = (bufy[j + yskip] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-      y = (bufy[j + 1 + yskip] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      *(bufouto++) = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-
-    }
-    bufoute += oskip;
-    bufouto += oskip;
-    bufy += yskip << 1;
-  }
-}
-
-void
-RTjpeg_yuvrgb16 (__u8 * buf, __u8 * rgb)
-{
-  int tmp;
-  int i, j;
-  __s32 y, crR, crG, cbG, cbB;
-  __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
-  int oskip, yskip;
-  unsigned char r, g, b;
-
-  oskip = RTjpeg_width * 2;
-  yskip = RTjpeg_width;
-
-  bufcb = &buf[RTjpeg_width * RTjpeg_height];
-  bufcr =
-      &buf[RTjpeg_width * RTjpeg_height + (RTjpeg_width * RTjpeg_height) / 4];
-  bufy = &buf[0];
-  bufoute = rgb;
-  bufouto = rgb + oskip;
-
-  for (i = 0; i < (RTjpeg_height >> 1); i++) {
-    for (j = 0; j < RTjpeg_width; j += 2) {
-      crR = (*bufcr - 128) * KcrR;
-      crG = (*(bufcr++) - 128) * KcrG;
-      cbG = (*bufcb - 128) * KcbG;
-      cbB = (*(bufcb++) - 128) * KcbB;
-
-      y = (bufy[j] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      b = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      g = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      r = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (int) ((int) b >> 3);
-      tmp |= (int) (((int) g >> 2) << 5);
-      tmp |= (int) (((int) r >> 3) << 11);
-      *(bufoute++) = tmp & 0xff;
-      *(bufoute++) = tmp >> 8;
-
-
-      y = (bufy[j + 1] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      b = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      g = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      r = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (int) ((int) b >> 3);
-      tmp |= (int) (((int) g >> 2) << 5);
-      tmp |= (int) (((int) r >> 3) << 11);
-      *(bufoute++) = tmp & 0xff;
-      *(bufoute++) = tmp >> 8;
-
-      y = (bufy[j + yskip] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      b = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      g = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      r = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (int) ((int) b >> 3);
-      tmp |= (int) (((int) g >> 2) << 5);
-      tmp |= (int) (((int) r >> 3) << 11);
-      *(bufouto++) = tmp & 0xff;
-      *(bufouto++) = tmp >> 8;
-
-      y = (bufy[j + 1 + yskip] - 16) * Ky;
-
-      tmp = (y + cbB) >> 16;
-      b = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y - crG - cbG) >> 16;
-      g = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (y + crR) >> 16;
-      r = (tmp > 255) ? 255 : ((tmp < 0) ? 0 : tmp);
-      tmp = (int) ((int) b >> 3);
-      tmp |= (int) (((int) g >> 2) << 5);
-      tmp |= (int) (((int) r >> 3) << 11);
-      *(bufouto++) = tmp & 0xff;
-      *(bufouto++) = tmp >> 8;
-
-    }
-    bufoute += oskip;
-    bufouto += oskip;
-    bufy += yskip << 1;
-  }
-}
-
-void
-RTjpeg_yuvrgb8 (__u8 * buf, __u8 * rgb)
-{
-  memcpy (rgb, buf, RTjpeg_width * RTjpeg_height);
-}
-
-void
-RTjpeg_double32 (__u32 * buf)
-{
-  int i, j;
-
-  __u32 *iptr, *optr1, *optr2;
-
-  iptr = buf + (RTjpeg_width * RTjpeg_height) - 1;
-  optr1 = buf + (RTjpeg_width * RTjpeg_height * 4) - 1;
-  optr2 = optr1 - (2 * RTjpeg_width);
-
-  for (i = 0; i < RTjpeg_height; i++) {
-    for (j = 0; j < RTjpeg_width; j++) {
-      *(optr1--) = *iptr;
-      *(optr1--) = *iptr;
-      *(optr2--) = *iptr;
-      *(optr2--) = *(iptr--);
-    }
-    optr2 = optr2 - 2 * RTjpeg_width;
-    optr1 = optr1 - 2 * RTjpeg_width;
-  }
-}
-
-void
-RTjpeg_double24 (__u8 * buf)
-{
-}
-
-void
-RTjpeg_double16 (__u16 * buf)
-{
-  int i, j;
-
-  __u16 *iptr, *optr1, *optr2;
-
-  iptr = buf + (RTjpeg_width * RTjpeg_height) - 1;
-  optr1 = buf + (RTjpeg_width * RTjpeg_height * 4) - 1;
-  optr2 = optr1 - (2 * RTjpeg_width);
-
-  for (i = 0; i < RTjpeg_height; i++) {
-    for (j = 0; j < RTjpeg_width; j++) {
-      *(optr1--) = *iptr;
-      *(optr1--) = *iptr;
-      *(optr2--) = *iptr;
-      *(optr2--) = *(iptr--);
-    }
-    optr2 = optr2 - 2 * RTjpeg_width;
-    optr1 = optr1 - 2 * RTjpeg_width;
-  }
-}
-
-void
-RTjpeg_double8 (__u8 * buf)
-{
-  int i, j;
-
-  __u8 *iptr, *optr1, *optr2;
-
-  iptr = buf + (RTjpeg_width * RTjpeg_height) - 1;
-  optr1 = buf + (RTjpeg_width * RTjpeg_height * 4) - 1;
-  optr2 = optr1 - (2 * RTjpeg_width);
-
-  for (i = 0; i < RTjpeg_height; i++) {
-    for (j = 0; j < RTjpeg_width; j++) {
-      *(optr1--) = *iptr;
-      *(optr1--) = *iptr;
-      *(optr2--) = *iptr;
-      *(optr2--) = *(iptr--);
-    }
-    optr2 = optr2 - 2 * RTjpeg_width;
-    optr1 = optr1 - 2 * RTjpeg_width;
-  }
-}
diff --git a/gst/rtjpeg/RTjpeg.h b/gst/rtjpeg/RTjpeg.h
deleted file mode 100644 (file)
index a2d0dc7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* 
-   bttvgrab 0.15.4 [1999-03-23]
-   (c) 1998, 1999 by Joerg Walter <trouble@moes.pmnet.uni-oldenburg.de>
-   Maintained by: Joerg Walter
-   Current version at http://moes.pmnet.uni-oldenburg.de/bttvgrab/
-
-    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
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-   This file is a modified version of RTjpeg 0.1.2, (C) Justin Schoeman 1998
-*/
-
-#include <inttypes.h>
-
-typedef uint8_t  __u8;
-typedef uint32_t __u32;
-typedef int8_t   __s8;
-typedef uint16_t __u16;
-
-extern void RTjpeg_init_Q(__u8 Q);
-extern void RTjpeg_init_compress(long unsigned int *buf, int width, int height, __u8 Q);
-extern void RTjpeg_init_decompress(long unsigned int *buf, int width, int height);
-extern int RTjpeg_compressYUV420(__s8 *sp, unsigned char *bp);
-extern int RTjpeg_compressYUV422(__s8 *sp, unsigned char *bp);
-extern void RTjpeg_decompressYUV420(__s8 *sp, __u8 *bp);
-extern void RTjpeg_decompressYUV422(__s8 *sp, __u8 *bp);
-extern int RTjpeg_compress8(__s8 *sp, unsigned char *bp);
-extern void RTjpeg_decompress8(__s8 *sp, __u8 *bp);
-
-extern void RTjpeg_init_mcompress(void);
-extern int RTjpeg_mcompress(__s8 *sp, unsigned char *bp, __u16 lmask, __u16 cmask);
-extern int RTjpeg_mcompress8(__s8 *sp, unsigned char *bp, __u16 lmask);
-extern void RTjpeg_set_test(int i);
-
-extern void RTjpeg_yuv420rgb(__u8 *buf, __u8 *rgb);
-extern void RTjpeg_yuv422rgb(__u8 *buf, __u8 *rgb);
-extern void RTjpeg_yuvrgb8(__u8 *buf, __u8 *rgb);
-extern void RTjpeg_yuvrgb16(__u8 *buf, __u8 *rgb);
-extern void RTjpeg_yuvrgb24(__u8 *buf, __u8 *rgb);
-extern void RTjpeg_yuvrgb32(__u8 *buf, __u8 *rgb);
-                  
diff --git a/gst/rtjpeg/gstrtjpeg.c b/gst/rtjpeg/gstrtjpeg.c
deleted file mode 100644 (file)
index dbb7b00..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstrtjpegenc.h"
-#include "gstrtjpegdec.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "rtjpegenc",
-          GST_RANK_NONE, GST_TYPE_RTJPEGENC) ||
-      !gst_element_register (plugin, "rtjpegdec",
-          GST_RANK_NONE, GST_TYPE_RTJPEGDEC))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    rtjpeg,
-    "Justin Schoeman's RTjpeg codec",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/rtjpeg/gstrtjpegdec.c b/gst/rtjpeg/gstrtjpegdec.c
deleted file mode 100644 (file)
index a03f159..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "gstrtjpegdec.h"
-
-/* GstRTJpegDec signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-};
-
-
-static void gst_rtjpegdec_class_init (GstRTJpegDecClass * klass);
-static void gst_rtjpegdec_base_init (GstRTJpegDecClass * klass);
-static void gst_rtjpegdec_init (GstRTJpegDec * rtjpegdec);
-
-static void gst_rtjpegdec_chain (GstPad * pad, GstData * _data);
-
-static GstElementClass *parent_class = NULL;
-
-/*static guint gst_rtjpegdec_signals[LAST_SIGNAL] = { 0 }; */
-
-GType
-gst_rtjpegdec_get_type (void)
-{
-  static GType rtjpegdec_type = 0;
-
-  if (!rtjpegdec_type) {
-    static const GTypeInfo rtjpegdec_info = {
-      sizeof (GstRTJpegDecClass),
-      (GBaseInitFunc) gst_rtjpegdec_base_init,
-      NULL,
-      (GClassInitFunc) gst_rtjpegdec_class_init,
-      NULL,
-      NULL,
-      sizeof (GstRTJpegDec),
-      0,
-      (GInstanceInitFunc) gst_rtjpegdec_init,
-    };
-
-    rtjpegdec_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstRTJpegDec",
-        &rtjpegdec_info, 0);
-  }
-  return rtjpegdec_type;
-}
-
-static void
-gst_rtjpegdec_base_init (GstRTJpegDecClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (element_class, "RTjpeg video decoder",
-      "Codec/Decoder/Video",
-      "Decodes video in RTjpeg format", "Erik Walthinsen <omega@cse.ogi.edu>");
-}
-
-static void
-gst_rtjpegdec_class_init (GstRTJpegDecClass * klass)
-{
-  GstElementClass *gstelement_class;
-
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-}
-
-static void
-gst_rtjpegdec_init (GstRTJpegDec * rtjpegdec)
-{
-  rtjpegdec->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
-  gst_element_add_pad (GST_ELEMENT (rtjpegdec), rtjpegdec->sinkpad);
-  gst_pad_set_chain_function (rtjpegdec->sinkpad, gst_rtjpegdec_chain);
-  rtjpegdec->srcpad = gst_pad_new ("src", GST_PAD_SRC);
-  gst_element_add_pad (GST_ELEMENT (rtjpegdec), rtjpegdec->srcpad);
-}
-
-static void
-gst_rtjpegdec_chain (GstPad * pad, GstData * _data)
-{
-  GstBuffer *buf = GST_BUFFER (_data);
-  GstRTJpegDec *rtjpegdec;
-  guchar *data;
-  gulong size;
-
-  g_return_if_fail (pad != NULL);
-  g_return_if_fail (GST_IS_PAD (pad));
-  g_return_if_fail (buf != NULL);
-
-  rtjpegdec = GST_RTJPEGDEC (GST_OBJECT_PARENT (pad));
-  data = GST_BUFFER_DATA (buf);
-  size = GST_BUFFER_SIZE (buf);
-
-  g_warning ("would be encoding frame here\n");
-
-  gst_pad_push (rtjpegdec->srcpad, GST_DATA (buf));
-}
diff --git a/gst/rtjpeg/gstrtjpegdec.h b/gst/rtjpeg/gstrtjpegdec.h
deleted file mode 100644 (file)
index 1324879..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __RTJPEGDEC_H__
-#define __RTJPEGDEC_H__
-
-
-#include <gst/gst.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-#define GST_TYPE_RTJPEGDEC \
-  (gst_rtjpegdec_get_type())
-#define GST_RTJPEGDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTJPEGDEC,GstRTJpegDec))
-#define GST_RTJPEGDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTJPEGDEC,GstRTJpegDecClass))
-#define GST_IS_RTJPEGDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTJPEGDEC))
-#define GST_IS_RTJPEGDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTJPEGDEC)))
-
-typedef struct _GstRTJpegDec GstRTJpegDec;
-typedef struct _GstRTJpegDecClass GstRTJpegDecClass;
-
-struct _GstRTJpegDec {
-  GstElement element;
-
-  GstPad *sinkpad,*srcpad;
-
-  gint width,height;
-  gint quality;
-  gint quant[128];
-
-};
-
-struct _GstRTJpegDecClass {
-  GstElementClass parent_class;
-};
-
-GType gst_rtjpegdec_get_type(void);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __RTJPEGDEC_H__ */
diff --git a/gst/rtjpeg/gstrtjpegenc.c b/gst/rtjpeg/gstrtjpegenc.c
deleted file mode 100644 (file)
index 6bafb02..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "gstrtjpegenc.h"
-
-/* GstRTJpegEnc signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-};
-
-
-static void gst_rtjpegenc_class_init (GstRTJpegEncClass * klass);
-static void gst_rtjpegenc_base_init (GstRTJpegEncClass * klass);
-static void gst_rtjpegenc_init (GstRTJpegEnc * rtjpegenc);
-
-static void gst_rtjpegenc_chain (GstPad * pad, GstData * _data);
-
-static GstElementClass *parent_class = NULL;
-
-/*static guint gst_rtjpegenc_signals[LAST_SIGNAL] = { 0 }; */
-
-GType
-gst_rtjpegenc_get_type (void)
-{
-  static GType rtjpegenc_type = 0;
-
-  if (!rtjpegenc_type) {
-    static const GTypeInfo rtjpegenc_info = {
-      sizeof (GstRTJpegEncClass),
-      (GBaseInitFunc) gst_rtjpegenc_base_init,
-      NULL,
-      (GClassInitFunc) gst_rtjpegenc_class_init,
-      NULL,
-      NULL,
-      sizeof (GstRTJpegEnc),
-      0,
-      (GInstanceInitFunc) gst_rtjpegenc_init,
-    };
-
-    rtjpegenc_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstRTJpegEnc",
-        &rtjpegenc_info, 0);
-  }
-  return rtjpegenc_type;
-}
-
-static void
-gst_rtjpegenc_base_init (GstRTJpegEncClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_set_static_metadata (element_class, "RTjpeg video encoder",
-      "Codec/Encoder/Video",
-      "Encodes video in RTjpeg format", "Erik Walthinsen <omega@cse.ogi.edu>");
-}
-
-static void
-gst_rtjpegenc_class_init (GstRTJpegEncClass * klass)
-{
-  GstElementClass *gstelement_class;
-
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-}
-
-static void
-gst_rtjpegenc_init (GstRTJpegEnc * rtjpegenc)
-{
-  rtjpegenc->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
-  gst_element_add_pad (GST_ELEMENT (rtjpegenc), rtjpegenc->sinkpad);
-  gst_pad_set_chain_function (rtjpegenc->sinkpad, gst_rtjpegenc_chain);
-  rtjpegenc->srcpad = gst_pad_new ("src", GST_PAD_SRC);
-  gst_element_add_pad (GST_ELEMENT (rtjpegenc), rtjpegenc->srcpad);
-}
-
-static void
-gst_rtjpegenc_chain (GstPad * pad, GstData * _data)
-{
-  GstBuffer *buf = GST_BUFFER (_data);
-  GstRTJpegEnc *rtjpegenc;
-  guchar *data;
-  gulong size;
-
-  g_return_if_fail (pad != NULL);
-  g_return_if_fail (GST_IS_PAD (pad));
-  g_return_if_fail (buf != NULL);
-
-  rtjpegenc = GST_RTJPEGENC (GST_OBJECT_PARENT (pad));
-  data = GST_BUFFER_DATA (buf);
-  size = GST_BUFFER_SIZE (buf);
-
-  g_warning ("would be encoding frame here\n");
-
-  gst_pad_push (rtjpegenc->srcpad, GST_DATA (buf));
-}
diff --git a/gst/rtjpeg/gstrtjpegenc.h b/gst/rtjpeg/gstrtjpegenc.h
deleted file mode 100644 (file)
index 9d81037..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __RTJPEGENC_H__
-#define __RTJPEGENC_H__
-
-
-#include <gst/gst.h>
-
-#include "RTjpeg.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-#define GST_TYPE_RTJPEGENC \
-  (gst_rtjpegenc_get_type())
-#define GST_RTJPEGENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTJPEGENC,GstRTJpegEnc))
-#define GST_RTJPEGENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTJPEGENC,GstRTJpegEncClass))
-#define GST_IS_RTJPEGENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTJPEGENC))
-#define GST_IS_RTJPEGENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTJPEGENC))
-
-typedef struct _GstRTJpegEnc GstRTJpegEnc;
-typedef struct _GstRTJpegEncClass GstRTJpegEncClass;
-
-struct _GstRTJpegEnc {
-  GstElement element;
-
-  GstPad *sinkpad,*srcpad;
-
-  gint width,height;
-  gint quality;
-  gint quant[128];
-};
-
-struct _GstRTJpegEncClass {
-  GstElementClass parent_class;
-};
-
-GType gst_rtjpegenc_get_type(void);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __RTJPEGENC_H__ */
diff --git a/gst/rtjpeg/meson.build b/gst/rtjpeg/meson.build
deleted file mode 100644 (file)
index e583baf..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-rtjpeg_sources = [
-  'gstrtjpeg.c',
-  'gstrtjpegenc.c',
-  'gstrtjpegdec.c',
-  'RTjpeg.c',
-]
-
-gstrtjpeg = library('gstrtjpeg',
-  rtjpeg_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/sdi/Makefile.am b/gst/sdi/Makefile.am
deleted file mode 100644 (file)
index 04744fa..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-plugin_LTLIBRARIES = libgstsdi.la
-
-libgstsdi_la_SOURCES = gstsdi.c \
-       gstsdidemux.c \
-       gstsdimux.c
-
-libgstsdi_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
-libgstsdi_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) \
-                      $(GST_LIBS)
-libgstsdi_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstsdi_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstsdidemux.h gstsdimux.h
diff --git a/gst/sdi/gstsdi.c b/gst/sdi/gstsdi.c
deleted file mode 100644 (file)
index 5d51301..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstsdidemux.h"
-#include "gstsdimux.h"
-
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-
-  gst_element_register (plugin, "sdidemux", GST_RANK_NONE,
-      gst_sdi_demux_get_type ());
-  gst_element_register (plugin, "sdimux", GST_RANK_NONE,
-      gst_sdi_mux_get_type ());
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    sdi,
-    "SDI elements", plugin_init, VERSION, "LGPL", PACKAGE_NAME,
-    GST_PACKAGE_ORIGIN)
diff --git a/gst/sdi/gstsdidemux.c b/gst/sdi/gstsdidemux.c
deleted file mode 100644 (file)
index 70184f4..0000000
+++ /dev/null
@@ -1,537 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/**
- * SECTION:element-gstsdidemux
- *
- * The gstsdidemux element does FIXME stuff.
- *
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch -v fakesrc ! gstsdidemux ! FIXME ! fakesink
- * ]|
- * FIXME Describe what the pipeline does.
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/gst.h>
-#include <string.h>
-#include "gstsdidemux.h"
-
-/* prototypes */
-
-
-static void gst_sdi_demux_set_property (GObject * object,
-    guint property_id, const GValue * value, GParamSpec * pspec);
-static void gst_sdi_demux_get_property (GObject * object,
-    guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_sdi_demux_dispose (GObject * object);
-static void gst_sdi_demux_finalize (GObject * object);
-
-static GstStateChangeReturn
-gst_sdi_demux_change_state (GstElement * element, GstStateChange transition);
-static GstFlowReturn gst_sdi_demux_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_sdi_demux_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_sdi_demux_src_event (GstPad * pad, GstEvent * event);
-static GstCaps *gst_sdi_demux_src_getcaps (GstPad * pad);
-
-
-enum
-{
-  PROP_0
-};
-
-/* pad templates */
-
-#define GST_VIDEO_CAPS_NTSC(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=480," \
-  "framerate=30000/1001,interlaced=TRUE,pixel-aspect-ratio=10/11," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-#define GST_VIDEO_CAPS_NTSC_WIDE(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=480," \
-  "framerate=30000/1001,interlaced=TRUE,pixel-aspect-ratio=40/33," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-#define GST_VIDEO_CAPS_PAL(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=576," \
-  "framerate=25/1,interlaced=TRUE,pixel-aspect-ratio=12/11," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-#define GST_VIDEO_CAPS_PAL_WIDE(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=576," \
-  "framerate=25/1,interlaced=TRUE,pixel-aspect-ratio=16/11," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-
-static GstStaticPadTemplate gst_sdi_demux_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-raw-sdi")
-    );
-
-static GstStaticPadTemplate gst_sdi_demux_src_template =
-    GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_NTSC ("UYVY") ";"
-        GST_VIDEO_CAPS_PAL ("UYVY"))
-    );
-
-/* class initialization */
-
-GST_BOILERPLATE (GstSdiDemux, gst_sdi_demux, GstElement, GST_TYPE_ELEMENT);
-
-static void
-gst_sdi_demux_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_sdi_demux_src_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_sdi_demux_sink_template);
-
-  gst_element_class_set_static_metadata (element_class,
-      "SDI Demuxer",
-      "Demuxer",
-      "Demultiplex SDI streams into raw audio and video",
-      "David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_sdi_demux_class_init (GstSdiDemuxClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gobject_class->set_property = gst_sdi_demux_set_property;
-  gobject_class->get_property = gst_sdi_demux_get_property;
-  gobject_class->dispose = gst_sdi_demux_dispose;
-  gobject_class->finalize = gst_sdi_demux_finalize;
-  if (0)
-    element_class->change_state =
-        GST_DEBUG_FUNCPTR (gst_sdi_demux_change_state);
-
-}
-
-static void
-gst_sdi_demux_init (GstSdiDemux * sdidemux, GstSdiDemuxClass * sdidemux_class)
-{
-
-  sdidemux->sinkpad =
-      gst_pad_new_from_static_template (&gst_sdi_demux_sink_template, "sink");
-  gst_pad_set_event_function (sdidemux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_sdi_demux_sink_event));
-  gst_pad_set_chain_function (sdidemux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_sdi_demux_chain));
-  gst_element_add_pad (GST_ELEMENT (sdidemux), sdidemux->sinkpad);
-
-  sdidemux->srcpad =
-      gst_pad_new_from_static_template (&gst_sdi_demux_src_template, "src");
-  gst_pad_set_event_function (sdidemux->srcpad,
-      GST_DEBUG_FUNCPTR (gst_sdi_demux_src_event));
-  gst_pad_set_getcaps_function (sdidemux->srcpad,
-      GST_DEBUG_FUNCPTR (gst_sdi_demux_src_getcaps));
-  gst_element_add_pad (GST_ELEMENT (sdidemux), sdidemux->srcpad);
-
-
-}
-
-void
-gst_sdi_demux_set_property (GObject * object, guint property_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  g_return_if_fail (GST_IS_SDI_DEMUX (object));
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_sdi_demux_get_property (GObject * object, guint property_id,
-    GValue * value, GParamSpec * pspec)
-{
-  g_return_if_fail (GST_IS_SDI_DEMUX (object));
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_sdi_demux_dispose (GObject * object)
-{
-  g_return_if_fail (GST_IS_SDI_DEMUX (object));
-
-  /* clean up as possible.  may be called multiple times */
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_sdi_demux_finalize (GObject * object)
-{
-  g_return_if_fail (GST_IS_SDI_DEMUX (object));
-
-  /* clean up object here */
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GstStateChangeReturn
-gst_sdi_demux_change_state (GstElement * element, GstStateChange transition)
-{
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-static GstCaps *
-gst_sdi_demux_src_getcaps (GstPad * pad)
-{
-  return gst_caps_from_string (GST_VIDEO_CAPS_NTSC ("UYVY"));
-}
-
-static void
-gst_sdi_demux_get_output_buffer (GstSdiDemux * sdidemux)
-{
-  sdidemux->output_buffer =
-      gst_buffer_new_and_alloc (720 * sdidemux->format->active_lines * 2);
-  gst_buffer_set_caps (sdidemux->output_buffer,
-      gst_caps_from_string (GST_VIDEO_CAPS_PAL ("UYVY")));
-  GST_BUFFER_TIMESTAMP (sdidemux->output_buffer) =
-      GST_SECOND * sdidemux->frame_number;
-  sdidemux->frame_number++;
-}
-
-static guint32
-get_word10 (guint8 * ptr)
-{
-  guint32 a;
-
-  a = (((ptr[0] >> 2) | (ptr[1] << 6)) & 0xff) << 24;
-  a |= (((ptr[1] >> 4) | (ptr[2] << 4)) & 0xff) << 16;
-  a |= (((ptr[2] >> 6) | (ptr[3] << 2)) & 0xff) << 8;
-  a |= ptr[4];
-
-  return a;
-}
-
-static void
-line10_copy (guint8 * dest, guint8 * src, int n)
-{
-  int i;
-  guint32 a;
-  for (i = 0; i < n; i++) {
-    a = get_word10 (src);
-    GST_WRITE_UINT32_BE (dest, a);
-    src += 5;
-    dest += 4;
-  }
-
-}
-
-
-static GstFlowReturn
-copy_line (GstSdiDemux * sdidemux, guint8 * line)
-{
-  guint8 *output_data;
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstSdiFormat *format = sdidemux->format;
-
-  output_data = GST_BUFFER_DATA (sdidemux->output_buffer);
-
-  /* line is one less than the video line */
-  if (sdidemux->line >= format->start0 - 1 &&
-      sdidemux->line < format->start0 - 1 + format->active_lines / 2) {
-#if 0
-    memcpy (output_data + 720 * 2 * ((sdidemux->line -
-                (format->start0 - 1)) * 2 + (!format->tff)),
-        line + (format->width - 720) * 2, 720 * 2);
-#else
-    line10_copy (output_data + 720 * 2 * ((sdidemux->line -
-                (format->start0 - 1)) * 2 + (!format->tff)),
-        line + (format->width - 720) / 2 * 5, 720 / 2);
-#endif
-  }
-  if (sdidemux->line >= format->start1 - 1 &&
-      sdidemux->line < format->start1 - 1 + format->active_lines / 2) {
-#if 0
-    memcpy (output_data + 720 * 2 * ((sdidemux->line -
-                (format->start1 - 1)) * 2 + (format->tff)),
-        line + (format->width - 720) * 2, 720 * 2);
-#else
-    line10_copy (output_data + 720 * 2 * ((sdidemux->line -
-                (format->start1 - 1)) * 2 + (format->tff)),
-        line + (format->width - 720) / 2 * 5, 720 / 2);
-#endif
-  }
-
-  sdidemux->offset = 0;
-  sdidemux->line++;
-  if (sdidemux->line == format->lines) {
-    ret = gst_pad_push (sdidemux->srcpad, sdidemux->output_buffer);
-    gst_sdi_demux_get_output_buffer (sdidemux);
-    sdidemux->line = 0;
-  }
-
-  return ret;
-}
-
-#define SDI_IS_SYNC(a) (((a)&0xffffff80) == 0xff000080)
-#define SDI_SYNC_F(a) (((a)>>6)&1)
-#define SDI_SYNC_V(a) (((a)>>5)&1)
-#define SDI_SYNC_H(a) (((a)>>4)&1)
-
-GstSdiFormat sd_ntsc = { 525, 480, 858, 20, 283, 0 };
-GstSdiFormat sd_pal = { 625, 576, 864, 23, 336, 1 };
-
-static GstFlowReturn
-gst_sdi_demux_chain (GstPad * pad, GstBuffer * buffer)
-{
-  GstSdiDemux *sdidemux;
-  int offset = 0;
-  guint8 *data = GST_BUFFER_DATA (buffer);
-  int size = GST_BUFFER_SIZE (buffer);
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstSdiFormat *format;
-
-  sdidemux = GST_SDI_DEMUX (gst_pad_get_parent (pad));
-  sdidemux->format = &sd_pal;
-  format = sdidemux->format;
-
-  GST_DEBUG_OBJECT (sdidemux, "chain");
-
-  if (GST_BUFFER_IS_DISCONT (buffer)) {
-    sdidemux->have_hsync = FALSE;
-    sdidemux->have_vsync = FALSE;
-  }
-
-  if (!sdidemux->have_hsync) {
-#if 0
-    for (offset = 0; offset < size; offset += 4) {
-      guint32 sync = READ_UINT32_BE (data + offset);
-      GST_ERROR ("sync value %08x", sync);
-      if (SDI_IS_SYNC (sync) && SDI_SYNC_H (sync)) {
-        sdidemux->have_hsync = TRUE;
-        sdidemux->line = 0;
-        sdidemux->offset = 0;
-        break;
-      }
-    }
-#else
-    for (offset = 0; offset < size; offset += 5) {
-      guint32 sync = get_word10 (data + offset);
-      //GST_ERROR("sync value %08x", sync);
-      if (SDI_IS_SYNC (sync) && SDI_SYNC_H (sync)) {
-        sdidemux->have_hsync = TRUE;
-        sdidemux->line = 0;
-        sdidemux->offset = 0;
-        break;
-      }
-    }
-#endif
-    if (!sdidemux->have_hsync) {
-      GST_ERROR ("no sync");
-      goto out;
-    }
-  }
-
-  if (sdidemux->output_buffer == NULL) {
-    gst_sdi_demux_get_output_buffer (sdidemux);
-  }
-#if 0
-  if (sdidemux->offset) {
-    int n;
-
-    /* second half of a line */
-    n = MIN (size - offset, format->width * 2 - sdidemux->offset);
-
-    memcpy (sdidemux->stored_line + sdidemux->offset, data + offset, n);
-
-    offset += n;
-    sdidemux->offset += n;
-
-    if (sdidemux->offset == format->width * 2) {
-      guint32 sync =
-          GST_READ_UINT32_BE (data + offset + (format->width - 720 - 2) * 2);
-
-      //GST_ERROR("%08x", sync);
-      if (!sdidemux->have_vsync) {
-        //GST_ERROR("%08x", GST_READ_UINT32_BE(data+offset));
-        if (SDI_IS_SYNC (sync) && !SDI_SYNC_F (sync) &&
-            SDI_SYNC_F (sdidemux->last_sync)) {
-          sdidemux->have_vsync = TRUE;
-        }
-        sdidemux->line = 0;
-      }
-
-      ret = copy_line (sdidemux, sdidemux->stored_line);
-
-      sdidemux->last_sync = sync;
-    }
-  }
-
-  while (size - offset >= format->width * 2) {
-    guint32 sync =
-        GST_READ_UINT32_BE (data + offset + (format->width - 720 - 2) * 2);
-
-    //GST_ERROR("%08x", sync);
-    if (!sdidemux->have_vsync) {
-      if (SDI_IS_SYNC (sync) && !SDI_SYNC_F (sync) &&
-          SDI_SYNC_F (sdidemux->last_sync)) {
-        sdidemux->have_vsync = TRUE;
-      }
-      sdidemux->line = 0;
-    }
-
-    ret = copy_line (sdidemux, data + offset);
-    offset += format->width * 2;
-
-    sdidemux->last_sync = sync;
-  }
-
-  if (size - offset > 0) {
-    memcpy (sdidemux->stored_line, data + offset, size - offset);
-    sdidemux->offset = size - offset;
-  }
-#else
-  if (sdidemux->offset) {
-    int n;
-
-    /* second half of a line */
-    n = MIN (size - offset, format->width / 2 * 5 - sdidemux->offset);
-
-    memcpy (sdidemux->stored_line + sdidemux->offset, data + offset, n);
-
-    offset += n;
-    sdidemux->offset += n;
-
-    if (sdidemux->offset == (format->width / 2) * 5) {
-      guint32 sync =
-          get_word10 (data + offset + ((format->width - 720 - 2) / 2) * 5);
-
-      if (!sdidemux->have_vsync) {
-        //GST_ERROR("%08x", GST_READ_UINT32_BE(data+offset));
-        if (SDI_IS_SYNC (sync) && !SDI_SYNC_F (sync) &&
-            SDI_SYNC_F (sdidemux->last_sync)) {
-          sdidemux->have_vsync = TRUE;
-        }
-        sdidemux->line = 0;
-      }
-
-      ret = copy_line (sdidemux, sdidemux->stored_line);
-
-      sdidemux->last_sync = sync;
-    }
-  }
-
-  while (size - offset >= format->width / 2 * 5) {
-    guint32 sync =
-        get_word10 (data + offset + ((format->width - 720 - 2) / 2) * 5);
-
-    //GST_ERROR("%08x", sync);
-    if (!sdidemux->have_vsync) {
-      if (SDI_IS_SYNC (sync) && !SDI_SYNC_F (sync) &&
-          SDI_SYNC_F (sdidemux->last_sync)) {
-        sdidemux->have_vsync = TRUE;
-      }
-      sdidemux->line = 0;
-    }
-
-    ret = copy_line (sdidemux, data + offset);
-    offset += (format->width / 2) * 5;
-
-    sdidemux->last_sync = sync;
-  }
-
-  if (size - offset > 0) {
-    memcpy (sdidemux->stored_line, data + offset, size - offset);
-    sdidemux->offset = size - offset;
-  }
-#endif
-
-out:
-  gst_buffer_unref (buffer);
-  gst_object_unref (sdidemux);
-  return ret;
-}
-
-static gboolean
-gst_sdi_demux_sink_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res = TRUE;
-  GstSdiDemux *sdidemux;
-
-  sdidemux = GST_SDI_DEMUX (gst_pad_get_parent (pad));
-
-  GST_DEBUG_OBJECT (sdidemux, "event");
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_FLUSH_START:
-      res = gst_pad_push_event (sdidemux->srcpad, event);
-      break;
-    case GST_EVENT_FLUSH_STOP:
-      res = gst_pad_push_event (sdidemux->srcpad, event);
-      break;
-    case GST_EVENT_NEWSEGMENT:
-      res = gst_pad_push_event (sdidemux->srcpad, event);
-      break;
-    case GST_EVENT_EOS:
-      res = gst_pad_push_event (sdidemux->srcpad, event);
-      break;
-    default:
-      res = gst_pad_push_event (sdidemux->srcpad, event);
-      break;
-  }
-
-  gst_object_unref (sdidemux);
-  return res;
-}
-
-static gboolean
-gst_sdi_demux_src_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res;
-  GstSdiDemux *sdidemux;
-
-  sdidemux = GST_SDI_DEMUX (gst_pad_get_parent (pad));
-
-  GST_DEBUG_OBJECT (sdidemux, "event");
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-      res = gst_pad_push_event (sdidemux->sinkpad, event);
-      break;
-    default:
-      res = gst_pad_push_event (sdidemux->sinkpad, event);
-      break;
-  }
-
-  gst_object_unref (sdidemux);
-  return res;
-}
diff --git a/gst/sdi/gstsdidemux.h b/gst/sdi/gstsdidemux.h
deleted file mode 100644 (file)
index d5284d2..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 REAL_NAME <EMAIL_ADDRESS>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef _GST_SDI_DEMUX_H_
-#define _GST_SDI_DEMUX_H_
-
-#include <gst/gst.h>
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SDI_DEMUX   (gst_sdi_demux_get_type())
-#define GST_SDI_DEMUX(obj)   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SDI_DEMUX,GstSdiDemux))
-#define GST_SDI_DEMUX_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SDI_DEMUX,GstSdiDemuxClass))
-#define GST_IS_SDI_DEMUX(obj)   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SDI_DEMUX))
-#define GST_IS_SDI_DEMUX_CLASS(obj)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SDI_DEMUX))
-
-typedef struct _GstSdiDemux GstSdiDemux;
-typedef struct _GstSdiDemuxClass GstSdiDemuxClass;
-typedef struct _GstSdiFormat GstSdiFormat;
-
-struct _GstSdiDemux
-{
-  GstElement base_sdidemux;
-  GstPad *sinkpad;
-  GstPad *srcpad;
-
-  GstBuffer *output_buffer;
-  int line;
-  int offset;
-
-  gboolean have_hsync;
-  gboolean have_vsync;
-  guchar stored_line[2160]; /* 864/2*5 */
-
-  int frame_number;
-  guint32 last_sync;
-  GstSdiFormat *format;
-};
-
-struct _GstSdiFormat
-{
-  int lines;
-  int active_lines;
-  int width;
-  int start0;
-  int start1;
-  int tff;
-};
-
-struct _GstSdiDemuxClass
-{
-  GstElementClass base_sdidemux_class;
-};
-
-GType gst_sdi_demux_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/gst/sdi/gstsdimux.c b/gst/sdi/gstsdimux.c
deleted file mode 100644 (file)
index 7734bad..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-/**
- * SECTION:element-gstsdimux
- *
- * The gstsdimux element does FIXME stuff.
- *
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch -v fakesrc ! gstsdimux ! FIXME ! fakesink
- * ]|
- * FIXME Describe what the pipeline does.
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/gst.h>
-#include "gstsdimux.h"
-
-/* prototypes */
-
-
-static void gst_sdi_mux_set_property (GObject * object,
-    guint property_id, const GValue * value, GParamSpec * pspec);
-static void gst_sdi_mux_get_property (GObject * object,
-    guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_sdi_mux_dispose (GObject * object);
-static void gst_sdi_mux_finalize (GObject * object);
-
-static GstPad *gst_sdi_mux_request_new_pad (GstElement * element,
-    GstPadTemplate * templ, const gchar * name);
-static void gst_sdi_mux_release_pad (GstElement * element, GstPad * pad);
-static GstStateChangeReturn
-gst_sdi_mux_change_state (GstElement * element, GstStateChange transition);
-static const GstQueryType *gst_sdi_mux_get_query_types (GstElement * element);
-static gboolean gst_sdi_mux_query (GstElement * element, GstQuery * query);
-static GstFlowReturn gst_sdi_mux_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_sdi_mux_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_sdi_mux_src_event (GstPad * pad, GstEvent * event);
-
-enum
-{
-  PROP_0
-};
-
-/* pad templates */
-
-#define GST_VIDEO_CAPS_NTSC(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=480," \
-  "framerate=30000/1001,interlaced=TRUE,pixel-aspect-ratio=10/11," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-#define GST_VIDEO_CAPS_NTSC_WIDE(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=480," \
-  "framerate=30000/1001,interlaced=TRUE,pixel-aspect-ratio=40/33," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-#define GST_VIDEO_CAPS_PAL(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=576," \
-  "framerate=25/1,interlaced=TRUE,pixel-aspect-ratio=12/11," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-#define GST_VIDEO_CAPS_PAL_WIDE(fourcc) \
-  "video/x-raw-yuv,format=(fourcc)" fourcc ",width=720,height=576," \
-  "framerate=25/1,interlaced=TRUE,pixel-aspect-ratio=16/11," \
-  "chroma-site=mpeg2,color-matrix=sdtv"
-
-static GstStaticPadTemplate gst_sdi_mux_sink_template =
-    GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_NTSC ("{UYVY,v210}") ";"
-        GST_VIDEO_CAPS_PAL ("{UYVY,v210}"))
-    );
-
-static GstStaticPadTemplate gst_sdi_mux_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS
-    ("application/x-raw-sdi,rate=270,format=(fourcc){UYVY,v210}")
-    );
-
-/* class initialization */
-
-GST_BOILERPLATE (GstSdiMux, gst_sdi_mux, GstElement, GST_TYPE_ELEMENT);
-
-static void
-gst_sdi_mux_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_sdi_mux_src_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_sdi_mux_sink_template);
-
-  gst_element_class_set_static_metadata (element_class, "SDI Muxer",
-      "Muxer",
-      "Multiplex raw audio and video into SDI",
-      "David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_sdi_mux_class_init (GstSdiMuxClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gobject_class->set_property = gst_sdi_mux_set_property;
-  gobject_class->get_property = gst_sdi_mux_get_property;
-  gobject_class->dispose = gst_sdi_mux_dispose;
-  gobject_class->finalize = gst_sdi_mux_finalize;
-  element_class->request_new_pad =
-      GST_DEBUG_FUNCPTR (gst_sdi_mux_request_new_pad);
-  element_class->release_pad = GST_DEBUG_FUNCPTR (gst_sdi_mux_release_pad);
-  element_class->change_state = GST_DEBUG_FUNCPTR (gst_sdi_mux_change_state);
-  element_class->get_query_types =
-      GST_DEBUG_FUNCPTR (gst_sdi_mux_get_query_types);
-  element_class->query = GST_DEBUG_FUNCPTR (gst_sdi_mux_query);
-
-}
-
-static void
-gst_sdi_mux_init (GstSdiMux * sdimux, GstSdiMuxClass * sdimux_class)
-{
-
-  sdimux->sinkpad =
-      gst_pad_new_from_static_template (&gst_sdi_mux_sink_template, "sink");
-  gst_pad_set_event_function (sdimux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_sdi_mux_sink_event));
-  gst_pad_set_chain_function (sdimux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_sdi_mux_chain));
-  gst_element_add_pad (GST_ELEMENT (sdimux), sdimux->sinkpad);
-
-  sdimux->srcpad = gst_pad_new_from_static_template (&gst_sdi_mux_src_template,
-      "src");
-  gst_pad_set_event_function (sdimux->srcpad,
-      GST_DEBUG_FUNCPTR (gst_sdi_mux_src_event));
-  gst_element_add_pad (GST_ELEMENT (sdimux), sdimux->srcpad);
-
-}
-
-void
-gst_sdi_mux_set_property (GObject * object, guint property_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  g_return_if_fail (GST_IS_SDI_MUX (object));
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_sdi_mux_get_property (GObject * object, guint property_id,
-    GValue * value, GParamSpec * pspec)
-{
-  g_return_if_fail (GST_IS_SDI_MUX (object));
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_sdi_mux_dispose (GObject * object)
-{
-  g_return_if_fail (GST_IS_SDI_MUX (object));
-
-  /* clean up as possible.  may be called multiple times */
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_sdi_mux_finalize (GObject * object)
-{
-  g_return_if_fail (GST_IS_SDI_MUX (object));
-
-  /* clean up object here */
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-static GstPad *
-gst_sdi_mux_request_new_pad (GstElement * element, GstPadTemplate * templ,
-    const gchar * name)
-{
-
-  return NULL;
-}
-
-static void
-gst_sdi_mux_release_pad (GstElement * element, GstPad * pad)
-{
-
-}
-
-static GstStateChangeReturn
-gst_sdi_mux_change_state (GstElement * element, GstStateChange transition)
-{
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-static const GstQueryType *
-gst_sdi_mux_get_query_types (GstElement * element)
-{
-
-  return NULL;
-}
-
-static gboolean
-gst_sdi_mux_query (GstElement * element, GstQuery * query)
-{
-
-  return FALSE;
-}
-
-static GstFlowReturn
-gst_sdi_mux_chain (GstPad * pad, GstBuffer * buffer)
-{
-  GstSdiMux *sdimux;
-
-  sdimux = GST_SDI_MUX (gst_pad_get_parent (pad));
-
-  GST_DEBUG_OBJECT (sdimux, "chain");
-
-
-  gst_object_unref (sdimux);
-  return GST_FLOW_OK;
-}
-
-static gboolean
-gst_sdi_mux_sink_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res;
-  GstSdiMux *sdimux;
-
-  sdimux = GST_SDI_MUX (gst_pad_get_parent (pad));
-
-  GST_DEBUG_OBJECT (sdimux, "event");
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_FLUSH_START:
-      res = gst_pad_push_event (sdimux->srcpad, event);
-      break;
-    case GST_EVENT_FLUSH_STOP:
-      res = gst_pad_push_event (sdimux->srcpad, event);
-      break;
-    case GST_EVENT_NEWSEGMENT:
-      res = gst_pad_push_event (sdimux->srcpad, event);
-      break;
-    case GST_EVENT_EOS:
-      res = gst_pad_push_event (sdimux->srcpad, event);
-      break;
-    default:
-      res = gst_pad_push_event (sdimux->srcpad, event);
-      break;
-  }
-
-  gst_object_unref (sdimux);
-  return res;
-}
-
-static gboolean
-gst_sdi_mux_src_event (GstPad * pad, GstEvent * event)
-{
-  gboolean res;
-  GstSdiMux *sdimux;
-
-  sdimux = GST_SDI_MUX (gst_pad_get_parent (pad));
-
-  GST_DEBUG_OBJECT (sdimux, "event");
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-      res = gst_pad_push_event (sdimux->sinkpad, event);
-      break;
-    default:
-      res = gst_pad_push_event (sdimux->sinkpad, event);
-      break;
-  }
-
-  gst_object_unref (sdimux);
-  return res;
-}
diff --git a/gst/sdi/gstsdimux.h b/gst/sdi/gstsdimux.h
deleted file mode 100644 (file)
index 481f4ea..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 REAL_NAME <EMAIL_ADDRESS>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef _GST_SDI_MUX_H_
-#define _GST_SDI_MUX_H_
-
-#include <gst/gst.h>
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SDI_MUX   (gst_sdi_mux_get_type())
-#define GST_SDI_MUX(obj)   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SDI_MUX,GstSdiMux))
-#define GST_SDI_MUX_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SDI_MUX,GstSdiMuxClass))
-#define GST_IS_SDI_MUX(obj)   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SDI_MUX))
-#define GST_IS_SDI_MUX_CLASS(obj)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SDI_MUX))
-
-typedef struct _GstSdiMux GstSdiMux;
-typedef struct _GstSdiMuxClass GstSdiMuxClass;
-
-struct _GstSdiMux
-{
-  GstElement base_sdimux;
-
-  GstPad *srcpad;
-  GstPad *sinkpad;
-};
-
-struct _GstSdiMuxClass
-{
-  GstElementClass base_sdimux_class;
-};
-
-GType gst_sdi_mux_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/gst/sdi/meson.build b/gst/sdi/meson.build
deleted file mode 100644 (file)
index 0220025..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-sdi_sources = [
-  'gstsdidemux.c',
-  'gstsdimux.c',
-]
-
-gstsdi = library('gstsdi',
-  sdi_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/tta/Makefile.am b/gst/tta/Makefile.am
deleted file mode 100644 (file)
index 3c8aa0f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-plugin_LTLIBRARIES = libgsttta.la
-
-libgsttta_la_SOURCES = gsttta.c \
-        gstttaparse.c \
-        gstttadec.c
-
-noinst_HEADERS = gstttaparse.h gstttadec.h \
-        ttadec.h crc32.h filters.h
-
-libgsttta_la_CFLAGS = $(GST_CFLAGS)
-libgsttta_la_LIBADD = $(GST_LIBS) $(LIBM)
-libgsttta_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgsttta_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/gst/tta/crc32.h b/gst/tta/crc32.h
deleted file mode 100644 (file)
index 2d6d37d..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * crc32.h
- *
- * Description:  CRC32 functions
- * Developed by: Alexander Djourik <sasha@iszf.irk.ru>
- *               Pavel Zhilin <pzh@iszf.irk.ru>
- *
- * Copyright (c) 1999-2004 Alexander Djourik. All rights reserved.
- *
- */
-
-/*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Please see the file COPYING in this directory for full copyright
- * information.
- */
-
-#ifndef CRC32_H
-#define CRC32_H
-
-static const unsigned long crc32_table[256] = {
-        0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
-        0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-        0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-        0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-        0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-        0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-        0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
-        0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-        0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-        0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-        0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
-        0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-        0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
-        0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-        0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-        0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-        0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
-        0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-        0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
-        0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-        0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-        0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-        0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
-        0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-        0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-        0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-        0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-        0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-        0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
-        0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-        0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
-        0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-        0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-        0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-        0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-        0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-        0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
-        0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-        0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-        0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-        0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
-        0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-        0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
-        0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-        0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-        0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-        0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
-        0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-        0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
-        0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-        0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-        0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-        0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
-        0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-        0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-        0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-        0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-        0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-        0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
-        0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-        0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
-        0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-        0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-        0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-}; 
-
-#define UPDATE_CRC32(x, crc) crc = \
-        (((crc>>8) & 0x00FFFFFF) ^ crc32_table[(crc^x) & 0xFF])
-
-static unsigned long 
-crc32 (unsigned char *buffer, unsigned long len) {
-        unsigned long   i;
-        unsigned long   crc = 0xFFFFFFFF;
-
-        for (i = 0; i < len; i++) UPDATE_CRC32(buffer[i], crc);
-
-        return (crc ^ 0xFFFFFFFF);
-}
-
-#endif  /* CRC32_H */
diff --git a/gst/tta/filters.h b/gst/tta/filters.h
deleted file mode 100644 (file)
index 9df5e1d..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * filters.h
- *
- * Description:  TTAv1 filter functions
- * Developed by: Alexander Djourik <sasha@iszf.irk.ru>
- *               Pavel Zhilin <pzh@iszf.irk.ru>
- *
- * Copyright (c) 1999-2004 Alexander Djourik. All rights reserved.
- *
- */
-
-/*
- * 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
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * aint with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please see the file COPYING in this directory for full copyright
- * information.
- */
-
-#ifndef FILTERS_H
-#define FILTERS_H
-
-///////// Filter Settings //////////
-static const long flt_set[3] = {10, 9, 10};
-
-static void
-memshl (register long *pA, register long *pB) {
-        *pA++ = *pB++;
-        *pA++ = *pB++;
-        *pA++ = *pB++;
-        *pA++ = *pB++;
-        *pA++ = *pB++;
-        *pA++ = *pB++;
-        *pA++ = *pB++;
-        *pA   = *pB;
-}
-
-static void
-hybrid_filter (fltst *fs, long *in) {
-        register long *pA = fs->dl;
-        register long *pB = fs->qm;
-        register long *pM = fs->dx;
-        register long sum = fs->round;
-
-        if (!fs->error) {
-                sum += *pA++ * *pB, pB++;
-                sum += *pA++ * *pB, pB++;
-                sum += *pA++ * *pB, pB++;
-                sum += *pA++ * *pB, pB++;
-                sum += *pA++ * *pB, pB++;
-                sum += *pA++ * *pB, pB++;
-                sum += *pA++ * *pB, pB++;
-                sum += *pA++ * *pB, pB++; pM += 8;
-        } else if (fs->error < 0) {
-                sum += *pA++ * (*pB -= *pM++), pB++;
-                sum += *pA++ * (*pB -= *pM++), pB++;
-                sum += *pA++ * (*pB -= *pM++), pB++;
-                sum += *pA++ * (*pB -= *pM++), pB++;
-                sum += *pA++ * (*pB -= *pM++), pB++;
-                sum += *pA++ * (*pB -= *pM++), pB++;
-                sum += *pA++ * (*pB -= *pM++), pB++;
-                sum += *pA++ * (*pB -= *pM++), pB++;
-        } else {
-                sum += *pA++ * (*pB += *pM++), pB++;
-                sum += *pA++ * (*pB += *pM++), pB++;
-                sum += *pA++ * (*pB += *pM++), pB++;
-                sum += *pA++ * (*pB += *pM++), pB++;
-                sum += *pA++ * (*pB += *pM++), pB++;
-                sum += *pA++ * (*pB += *pM++), pB++;
-                sum += *pA++ * (*pB += *pM++), pB++;
-                sum += *pA++ * (*pB += *pM++), pB++;
-        }
-
-        *(pM-0) = ((*(pA-1) >> 30) | 1) << 2;
-        *(pM-1) = ((*(pA-2) >> 30) | 1) << 1;
-        *(pM-2) = ((*(pA-3) >> 30) | 1) << 1;
-        *(pM-3) = ((*(pA-4) >> 30) | 1);
-
-        fs->error = *in;
-        *in += (sum >> fs->shift);
-        *pA = *in;
-
-        *(pA-1) = *(pA-0) - *(pA-1);
-        *(pA-2) = *(pA-1) - *(pA-2);
-        *(pA-3) = *(pA-2) - *(pA-3);
-
-        memshl (fs->dl, fs->dl + 1);
-        memshl (fs->dx, fs->dx + 1);
-}
-
-static void
-filter_init (fltst *fs, long shift) {
-        memset (fs, 0, sizeof(fltst));
-        fs->shift = shift;
-        fs->round = 1 << (shift - 1);
-}
-
-#endif  /* FILTERS_H */
-
diff --git a/gst/tta/gsttta.c b/gst/tta/gsttta.c
deleted file mode 100644 (file)
index 00e33d4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* GStreamer TTA plugin
- * (c) 2004 Arwed v. Merkatz <v.merkatz@gmx.net>
- *
- * gsttta.c: plugin loader
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstttaparse.h"
-#include "gstttadec.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return (gst_tta_parse_plugin_init (plugin) &&
-      gst_tta_dec_plugin_init (plugin));
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    tta,
-    "TTA lossless audio format handling",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/tta/gstttadec.c b/gst/tta/gstttadec.c
deleted file mode 100644 (file)
index 1aa9d95..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-/* GStreamer TTA plugin
- * (c) 2004 Arwed v. Merkatz <v.merkatz@gmx.net>
- *
- * based on ttalib
- * (c) 1999-2004 Alexander Djourik <sasha@iszf.irk.ru>
- * 
- * gstttadec.c: raw TTA bitstream decoder
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/gst.h>
-
-#include <math.h>
-#include <string.h>
-
-#include "gstttadec.h"
-#include "ttadec.h"
-#include "filters.h"
-
-#define TTA_BUFFER_SIZE (1024 * 32 * 8)
-
-/* this is from ttadec.h originally */
-
-static const unsigned long bit_mask[] = {
-  0x00000000, 0x00000001, 0x00000003, 0x00000007,
-  0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
-  0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
-  0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
-  0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
-  0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
-  0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
-  0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
-  0xffffffff
-};
-
-static const unsigned long bit_shift[] = {
-  0x00000001, 0x00000002, 0x00000004, 0x00000008,
-  0x00000010, 0x00000020, 0x00000040, 0x00000080,
-  0x00000100, 0x00000200, 0x00000400, 0x00000800,
-  0x00001000, 0x00002000, 0x00004000, 0x00008000,
-  0x00010000, 0x00020000, 0x00040000, 0x00080000,
-  0x00100000, 0x00200000, 0x00400000, 0x00800000,
-  0x01000000, 0x02000000, 0x04000000, 0x08000000,
-  0x10000000, 0x20000000, 0x40000000, 0x80000000,
-  0x80000000, 0x80000000, 0x80000000, 0x80000000,
-  0x80000000, 0x80000000, 0x80000000, 0x80000000
-};
-
-static const unsigned long *shift_16 = bit_shift + 4;
-
-/* Filter signals and args */
-enum
-{
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0
-};
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-tta, "
-        "width = (int) { 8, 16, 24 }, "
-        "channels = (int) { 1, 2 }, " "rate = (int) [ 8000, 96000 ]")
-    );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "width = (int) { 8, 16, 24 }, "
-        "depth = (int) { 8, 16, 24 }, "
-        "channels = (int) { 1, 2 }, "
-        "rate = (int) [ 8000, 96000 ], "
-        "endianness = (int) BYTE_ORDER, " "signed = (boolean) true")
-    );
-
-static void gst_tta_dec_class_init (GstTtaDecClass * klass);
-static void gst_tta_dec_base_init (GstTtaDecClass * klass);
-static void gst_tta_dec_init (GstTtaDec * ttadec);
-
-static GstFlowReturn gst_tta_dec_chain (GstPad * pad, GstBuffer * in);
-
-static GstElementClass *parent = NULL;
-
-static gboolean
-gst_tta_dec_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstTtaDec *ttadec = GST_TTA_DEC (gst_pad_get_parent (pad));
-  GstStructure *structure = gst_caps_get_structure (caps, 0);
-  GstCaps *srccaps;
-  gint bits, channels;
-  gint32 samplerate;
-
-//  if (!gst_caps_is_fixed (caps))
-//    return GST_PAD_LINK_DELAYED;
-
-  gst_structure_get_int (structure, "rate", &samplerate);
-  ttadec->samplerate = (guint32) samplerate;
-  gst_structure_get_int (structure, "channels", &channels);
-  ttadec->channels = (guint) channels;
-  gst_structure_get_int (structure, "width", &bits);
-  ttadec->bytes = bits / 8;
-
-  srccaps = gst_caps_new_simple ("audio/x-raw-int",
-      "rate", G_TYPE_INT, ttadec->samplerate,
-      "channels", G_TYPE_INT, ttadec->channels,
-      "depth", G_TYPE_INT, bits,
-      "width", G_TYPE_INT, bits,
-      "endianness", G_TYPE_INT, G_BYTE_ORDER,
-      "signed", G_TYPE_BOOLEAN, TRUE, NULL);
-
-  if (!gst_pad_set_caps (ttadec->srcpad, srccaps))
-    return FALSE;
-
-  ttadec->frame_length = FRAME_TIME * ttadec->samplerate;
-
-  ttadec->tta = g_malloc (ttadec->channels * sizeof (decoder));
-  ttadec->cache = g_malloc (ttadec->channels * sizeof (long));
-
-  ttadec->decdata =
-      (guchar *) g_malloc (ttadec->channels * ttadec->frame_length *
-      ttadec->bytes * sizeof (guchar));
-
-  return TRUE;
-}
-
-GType
-gst_tta_dec_get_type (void)
-{
-  static GType plugin_type = 0;
-
-  if (!plugin_type) {
-    static const GTypeInfo plugin_info = {
-      sizeof (GstTtaDecClass),
-      (GBaseInitFunc) gst_tta_dec_base_init,
-      NULL,
-      (GClassInitFunc) gst_tta_dec_class_init,
-      NULL,
-      NULL,
-      sizeof (GstTtaDec),
-      0,
-      (GInstanceInitFunc) gst_tta_dec_init,
-    };
-    plugin_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "GstTtaDec", &plugin_info, 0);
-  }
-  return plugin_type;
-}
-
-static void
-gst_tta_dec_base_init (GstTtaDecClass * klass)
-{
-
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &src_factory);
-  gst_element_class_add_static_pad_template (element_class, &sink_factory);
-  gst_element_class_set_static_metadata (element_class, "TTA audio decoder",
-      "Codec/Decoder/Audio",
-      "Decode TTA audio data", "Arwed v. Merkatz <v.merkatz@gmx.net>");
-}
-
-static void
-gst_tta_dec_dispose (GObject * object)
-{
-  GstTtaDec *ttadec = GST_TTA_DEC (object);
-
-  g_free (ttadec->tta);
-  g_free (ttadec->decdata);
-  g_free (ttadec->tta_buf.buffer);
-
-  G_OBJECT_CLASS (parent)->dispose (object);
-}
-
-static void
-gst_tta_dec_class_init (GstTtaDecClass * klass)
-{
-  GObjectClass *gobject_class;
-
-  gobject_class = (GObjectClass *) klass;
-
-  parent = g_type_class_peek_parent (klass);
-
-  gobject_class->dispose = gst_tta_dec_dispose;
-}
-
-static void
-gst_tta_dec_init (GstTtaDec * ttadec)
-{
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (ttadec);
-
-  ttadec->sinkpad =
-      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
-          "sink"), "sink");
-  gst_pad_set_setcaps_function (ttadec->sinkpad, gst_tta_dec_setcaps);
-
-  ttadec->srcpad =
-      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
-          "src"), "src");
-  gst_pad_use_fixed_caps (ttadec->srcpad);
-
-  gst_element_add_pad (GST_ELEMENT (ttadec), ttadec->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (ttadec), ttadec->srcpad);
-  gst_pad_set_chain_function (ttadec->sinkpad, gst_tta_dec_chain);
-  ttadec->tta_buf.buffer = (guchar *) g_malloc (TTA_BUFFER_SIZE + 4);
-  ttadec->tta_buf.buffer_end = ttadec->tta_buf.buffer + TTA_BUFFER_SIZE;
-}
-
-static void
-rice_init (adapt * rice, unsigned long k0, unsigned long k1)
-{
-  rice->k0 = k0;
-  rice->k1 = k1;
-  rice->sum0 = shift_16[k0];
-  rice->sum1 = shift_16[k1];
-}
-
-static void
-decoder_init (decoder * tta, long nch, long byte_size)
-{
-  long shift = flt_set[byte_size - 1];
-  long i;
-
-  for (i = 0; i < nch; i++) {
-    filter_init (&tta[i].fst, shift);
-    rice_init (&tta[i].rice, 10, 10);
-    tta[i].last = 0;
-  }
-}
-
-static void
-get_binary (tta_buffer * tta_buf, guchar * buffer, unsigned long buffersize,
-    unsigned long *value, unsigned long bits)
-{
-  while (tta_buf->bit_count < bits) {
-    if (tta_buf->bitpos == tta_buf->buffer_end) {
-      int max =
-          TTA_BUFFER_SIZE <=
-          buffersize - tta_buf->offset ? TTA_BUFFER_SIZE : buffersize -
-          tta_buf->offset;
-      memcpy (tta_buf->buffer, buffer + tta_buf->offset, max);
-      tta_buf->offset += max;
-      tta_buf->bitpos = tta_buf->buffer;
-    }
-
-    tta_buf->bit_cache |= *tta_buf->bitpos << tta_buf->bit_count;
-    tta_buf->bit_count += 8;
-    tta_buf->bitpos++;
-  }
-
-  *value = tta_buf->bit_cache & bit_mask[bits];
-  tta_buf->bit_cache >>= bits;
-  tta_buf->bit_count -= bits;
-  tta_buf->bit_cache &= bit_mask[tta_buf->bit_count];
-}
-
-static void
-get_unary (tta_buffer * tta_buf, guchar * buffer, unsigned long buffersize,
-    unsigned long *value)
-{
-  *value = 0;
-
-  while (!(tta_buf->bit_cache ^ bit_mask[tta_buf->bit_count])) {
-    if (tta_buf->bitpos == tta_buf->buffer_end) {
-      int max =
-          TTA_BUFFER_SIZE <=
-          buffersize - tta_buf->offset ? TTA_BUFFER_SIZE : buffersize -
-          tta_buf->offset;
-      memcpy (tta_buf->buffer, buffer + tta_buf->offset, max);
-      tta_buf->offset += max;
-      tta_buf->bitpos = tta_buf->buffer;
-    }
-
-    *value += tta_buf->bit_count;
-    tta_buf->bit_cache = *tta_buf->bitpos++;
-    tta_buf->bit_count = 8;
-  }
-
-  while (tta_buf->bit_cache & 1) {
-    (*value)++;
-    tta_buf->bit_cache >>= 1;
-    tta_buf->bit_count--;
-  }
-
-  tta_buf->bit_cache >>= 1;
-  tta_buf->bit_count--;
-}
-
-static GstFlowReturn
-gst_tta_dec_chain (GstPad * pad, GstBuffer * in)
-{
-  GstTtaDec *ttadec;
-  GstBuffer *outbuf, *buf = GST_BUFFER (in);
-  guchar *data, *p;
-  decoder *dec;
-  unsigned long outsize;
-  unsigned long size;
-  guint32 frame_samples;
-  long res;
-  long *prev;
-
-  ttadec = GST_TTA_DEC (GST_OBJECT_PARENT (pad));
-
-  data = GST_BUFFER_DATA (buf);
-  size = GST_BUFFER_SIZE (buf);
-
-  ttadec->tta_buf.bit_count = 0;
-  ttadec->tta_buf.bit_cache = 0;
-  ttadec->tta_buf.bitpos = ttadec->tta_buf.buffer_end;
-  ttadec->tta_buf.offset = 0;
-  decoder_init (ttadec->tta, ttadec->channels, ttadec->bytes);
-
-  if (GST_BUFFER_DURATION_IS_VALID (buf)) {
-    frame_samples =
-        ceil ((gdouble) (GST_BUFFER_DURATION (buf) * ttadec->samplerate) /
-        (gdouble) GST_SECOND);
-  } else {
-    frame_samples = ttadec->samplerate * FRAME_TIME;
-  }
-  outsize = ttadec->channels * frame_samples * ttadec->bytes;
-
-  dec = ttadec->tta;
-  p = ttadec->decdata;
-  prev = ttadec->cache;
-  for (res = 0;
-      p < ttadec->decdata + frame_samples * ttadec->channels * ttadec->bytes;) {
-    unsigned long unary, binary, depth, k;
-    long value, temp_value;
-    fltst *fst = &dec->fst;
-    adapt *rice = &dec->rice;
-    long *last = &dec->last;
-
-    // decode Rice unsigned
-    get_unary (&ttadec->tta_buf, data, size, &unary);
-
-    switch (unary) {
-      case 0:
-        depth = 0;
-        k = rice->k0;
-        break;
-      default:
-        depth = 1;
-        k = rice->k1;
-        unary--;
-    }
-
-    if (k) {
-      get_binary (&ttadec->tta_buf, data, size, &binary, k);
-      value = (unary << k) + binary;
-    } else
-      value = unary;
-
-    switch (depth) {
-      case 1:
-        rice->sum1 += value - (rice->sum1 >> 4);
-        if (rice->k1 > 0 && rice->sum1 < shift_16[rice->k1])
-          rice->k1--;
-        else if (rice->sum1 > shift_16[rice->k1 + 1])
-          rice->k1++;
-        value += bit_shift[rice->k0];
-      default:
-        rice->sum0 += value - (rice->sum0 >> 4);
-        if (rice->k0 > 0 && rice->sum0 < shift_16[rice->k0])
-          rice->k0--;
-        else if (rice->sum0 > shift_16[rice->k0 + 1])
-          rice->k0++;
-    }
-
-    /* this only uses a temporary variable to silence a gcc warning */
-    temp_value = DEC (value);
-    value = temp_value;
-
-    // decompress stage 1: adaptive hybrid filter
-    hybrid_filter (fst, &value);
-
-    // decompress stage 2: fixed order 1 prediction
-    switch (ttadec->bytes) {
-      case 1:
-        value += PREDICTOR1 (*last, 4);
-        break;                  // bps 8
-      case 2:
-        value += PREDICTOR1 (*last, 5);
-        break;                  // bps 16
-      case 3:
-        value += PREDICTOR1 (*last, 5);
-        break;                  // bps 24
-      case 4:
-        value += *last;
-        break;                  // bps 32
-    }
-    *last = value;
-
-    if (dec < ttadec->tta + ttadec->channels - 1) {
-      *prev++ = value;
-      dec++;
-    } else {
-      *prev = value;
-      if (ttadec->channels > 1) {
-        long *r = prev - 1;
-
-        for (*prev += *r / 2; r >= ttadec->cache; r--)
-          *r = *(r + 1) - *r;
-        for (r = ttadec->cache; r < prev; r++)
-          WRITE_BUFFER (r, ttadec->bytes, p);
-      }
-      WRITE_BUFFER (prev, ttadec->bytes, p);
-      prev = ttadec->cache;
-      res++;
-      dec = ttadec->tta;
-    }
-  }
-
-  outbuf = gst_buffer_new_and_alloc (outsize);
-  memcpy (GST_BUFFER_DATA (outbuf), ttadec->decdata, outsize);
-  GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf);
-  GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf);
-  gst_buffer_set_caps (outbuf, GST_PAD_CAPS (ttadec->srcpad));
-  return gst_pad_push (ttadec->srcpad, outbuf);
-}
-
-gboolean
-gst_tta_dec_plugin_init (GstPlugin * plugin)
-{
-  return gst_element_register (plugin, "ttadec",
-      GST_RANK_NONE, GST_TYPE_TTA_DEC);
-}
diff --git a/gst/tta/gstttadec.h b/gst/tta/gstttadec.h
deleted file mode 100644 (file)
index 6c6fb43..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/* GStreamer TTA plugin
- * (c) 2004 Arwed v. Merkatz <v.merkatz@gmx.net>
- *
- * gstttadec.h: raw TTA bitstream decoder
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_TTA_DEC_H__
-#define __GST_TTA_DEC_H__
-
-#include <gst/gst.h>
-
-#include "ttadec.h"
-
-G_BEGIN_DECLS
-
-/* #define's don't like whitespacey bits */
-#define GST_TYPE_TTA_DEC \
-  (gst_tta_dec_get_type())
-#define GST_TTA_DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TTA_DEC,GstTtaDec))
-#define GST_TTA_DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TTA_DEC,GstTtaDecClass))
-#define GST_IS_TTA_DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TTA_DEC))
-#define GST_IS_TTA_DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TTA_DEC))
-
-typedef struct _GstTtaDec      GstTtaDec;
-typedef struct _GstTtaDecClass GstTtaDecClass;
-
-typedef struct _tta_buffer
-{
-  guchar *buffer;
-  guchar *buffer_end;
-  gulong bit_count;
-  gulong bit_cache;
-  guchar *bitpos;
-  gulong offset;
-} tta_buffer;
-
-struct _GstTtaDec
-{
-  GstElement element;
-
-  GstPad *sinkpad, *srcpad;
-
-  guint32 samplerate;
-  guint channels;
-  guint bytes;
-  long frame_length;
-
-  decoder *tta;
-  guchar *decdata;
-  tta_buffer tta_buf;
-  long *cache;
-};
-
-struct _GstTtaDecClass 
-{
-  GstElementClass parent;
-};
-
-GType gst_tta_dec_get_type (void);
-
-gboolean gst_tta_dec_plugin_init (GstPlugin *plugin);
-
-G_END_DECLS
-
-#endif /* __GST_TTA_DEC_H__ */
diff --git a/gst/tta/gstttaparse.c b/gst/tta/gstttaparse.c
deleted file mode 100644 (file)
index 485a197..0000000
+++ /dev/null
@@ -1,507 +0,0 @@
-/* GStreamer TTA plugin
- * (c) 2004 Arwed v. Merkatz <v.merkatz@gmx.net>
- *
- * gstttaparse.c: TTA file parser
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GLib versions (>= 2.31.0) */
-#define GLIB_DISABLE_DEPRECATION_WARNINGS
-
-#include <gst/gst.h>
-
-#include <math.h>
-
-#include "gstttaparse.h"
-#include "ttadec.h"
-#include "crc32.h"
-
-GST_DEBUG_CATEGORY_STATIC (gst_tta_parse_debug);
-#define GST_CAT_DEFAULT gst_tta_parse_debug
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-ttafile")
-    );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-tta, "
-        "width = (int) { 8, 16, 24 }, "
-        "channels = (int) { 1, 2 }, " "rate = (int) [ 8000, 96000 ]")
-    );
-
-static void gst_tta_parse_class_init (GstTtaParseClass * klass);
-static void gst_tta_parse_base_init (GstTtaParseClass * klass);
-static void gst_tta_parse_init (GstTtaParse * ttaparse);
-
-static gboolean gst_tta_parse_src_event (GstPad * pad, GstEvent * event);
-static const GstQueryType *gst_tta_parse_get_query_types (GstPad * pad);
-static gboolean gst_tta_parse_query (GstPad * pad, GstQuery * query);
-static gboolean gst_tta_parse_activate (GstPad * pad);
-static gboolean gst_tta_parse_activate_pull (GstPad * pad, gboolean active);
-static void gst_tta_parse_loop (GstTtaParse * ttaparse);
-static GstStateChangeReturn gst_tta_parse_change_state (GstElement * element,
-    GstStateChange transition);
-
-static GstElementClass *parent_class = NULL;
-
-GType
-gst_tta_parse_get_type (void)
-{
-  static GType plugin_type = 0;
-
-  if (!plugin_type) {
-    static const GTypeInfo plugin_info = {
-      sizeof (GstTtaParseClass),
-      (GBaseInitFunc) gst_tta_parse_base_init,
-      NULL,
-      (GClassInitFunc) gst_tta_parse_class_init,
-      NULL,
-      NULL,
-      sizeof (GstTtaParse),
-      0,
-      (GInstanceInitFunc) gst_tta_parse_init,
-    };
-    plugin_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "GstTtaParse", &plugin_info, 0);
-  }
-  return plugin_type;
-}
-
-static void
-gst_tta_parse_base_init (GstTtaParseClass * klass)
-{
-
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &src_factory);
-  gst_element_class_add_static_pad_template (element_class, &sink_factory);
-  gst_element_class_set_static_metadata (element_class, "TTA file parser",
-      "Codec/Demuxer/Audio",
-      "Parses TTA files", "Arwed v. Merkatz <v.merkatz@gmx.net>");
-}
-
-static void
-gst_tta_parse_dispose (GObject * object)
-{
-  GstTtaParse *ttaparse = GST_TTA_PARSE (object);
-
-  g_free (ttaparse->index);
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-gst_tta_parse_class_init (GstTtaParseClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->dispose = gst_tta_parse_dispose;
-  gstelement_class->change_state = gst_tta_parse_change_state;
-}
-
-static void
-gst_tta_parse_reset (GstTtaParse * ttaparse)
-{
-  ttaparse->header_parsed = FALSE;
-  ttaparse->current_frame = 0;
-  ttaparse->data_length = 0;
-  ttaparse->samplerate = 0;
-}
-
-static void
-gst_tta_parse_init (GstTtaParse * ttaparse)
-{
-  GstElementClass *klass = GST_ELEMENT_GET_CLASS (ttaparse);
-
-  ttaparse->sinkpad =
-      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
-          "sink"), "sink");
-
-  ttaparse->srcpad =
-      gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
-          "src"), "src");
-  gst_pad_use_fixed_caps (ttaparse->srcpad);
-  gst_pad_set_query_type_function (ttaparse->srcpad,
-      gst_tta_parse_get_query_types);
-  gst_pad_set_query_function (ttaparse->srcpad, gst_tta_parse_query);
-  gst_pad_set_event_function (ttaparse->srcpad, gst_tta_parse_src_event);
-
-  gst_element_add_pad (GST_ELEMENT (ttaparse), ttaparse->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (ttaparse), ttaparse->srcpad);
-  gst_pad_set_activate_function (ttaparse->sinkpad, gst_tta_parse_activate);
-  gst_pad_set_activatepull_function (ttaparse->sinkpad,
-      gst_tta_parse_activate_pull);
-
-  gst_tta_parse_reset (ttaparse);
-}
-
-static gboolean
-gst_tta_parse_src_event (GstPad * pad, GstEvent * event)
-{
-  GstTtaParse *ttaparse = GST_TTA_PARSE (GST_PAD_PARENT (pad));
-
-  gboolean res = TRUE;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-    {
-      gdouble rate;
-      GstFormat format;
-      GstSeekFlags flags;
-      GstSeekType start_type, stop_type;
-      gint64 start, stop;
-
-      gst_event_parse_seek (event, &rate, &format, &flags,
-          &start_type, &start, &stop_type, &stop);
-
-      if (format == GST_FORMAT_TIME) {
-        if (flags & GST_SEEK_FLAG_FLUSH) {
-          gst_pad_push_event (ttaparse->srcpad, gst_event_new_flush_start ());
-          gst_pad_push_event (ttaparse->sinkpad, gst_event_new_flush_start ());
-        } else {
-          gst_pad_pause_task (ttaparse->sinkpad);
-        }
-        GST_PAD_STREAM_LOCK (ttaparse->sinkpad);
-
-        switch (start_type) {
-          case GST_SEEK_TYPE_CUR:
-            ttaparse->current_frame += (start / GST_SECOND) / FRAME_TIME;
-            break;
-          case GST_SEEK_TYPE_END:
-            ttaparse->current_frame += (start / GST_SECOND) / FRAME_TIME;
-            break;
-          case GST_SEEK_TYPE_SET:
-            ttaparse->current_frame = (start / GST_SECOND) / FRAME_TIME;
-            break;
-          case GST_SEEK_TYPE_NONE:
-            break;
-        }
-        res = TRUE;
-
-        if (flags & GST_SEEK_FLAG_FLUSH) {
-          gst_pad_push_event (ttaparse->srcpad, gst_event_new_flush_stop ());
-          gst_pad_push_event (ttaparse->sinkpad, gst_event_new_flush_stop ());
-        }
-
-        gst_pad_push_event (ttaparse->srcpad, gst_event_new_new_segment (FALSE,
-                1.0, GST_FORMAT_TIME, 0,
-                ttaparse->num_frames * FRAME_TIME * GST_SECOND, 0));
-
-        gst_pad_start_task (ttaparse->sinkpad,
-            (GstTaskFunction) gst_tta_parse_loop, ttaparse, NULL);
-
-        GST_PAD_STREAM_UNLOCK (ttaparse->sinkpad);
-
-      } else {
-        res = FALSE;
-      }
-
-      gst_event_unref (event);
-      break;
-    }
-    default:
-      res = gst_pad_event_default (pad, event);
-      break;
-  }
-
-  return res;
-}
-
-static const GstQueryType *
-gst_tta_parse_get_query_types (GstPad * pad)
-{
-  static const GstQueryType types[] = {
-    GST_QUERY_POSITION,
-    GST_QUERY_DURATION,
-    0
-  };
-
-  return types;
-}
-
-static gboolean
-gst_tta_parse_query (GstPad * pad, GstQuery * query)
-{
-  GstTtaParse *ttaparse = GST_TTA_PARSE (gst_pad_get_parent (pad));
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_POSITION:
-    {
-      GstFormat format;
-      gint64 cur;
-
-      gst_query_parse_position (query, &format, NULL);
-      switch (format) {
-        case GST_FORMAT_TIME:
-          cur = ttaparse->index[ttaparse->current_frame].time;
-          break;
-        default:
-          format = GST_FORMAT_BYTES;
-          cur = ttaparse->index[ttaparse->current_frame].pos;
-          break;
-      }
-      gst_query_set_position (query, format, cur);
-      break;
-    }
-    case GST_QUERY_DURATION:
-    {
-      GstFormat format;
-      gint64 end;
-
-      gst_query_parse_duration (query, &format, NULL);
-      switch (format) {
-        case GST_FORMAT_TIME:
-          end = ((gdouble) ttaparse->data_length /
-              (gdouble) ttaparse->samplerate) * GST_SECOND;
-          break;
-        default:
-          format = GST_FORMAT_BYTES;
-          end = ttaparse->index[ttaparse->num_frames].pos +
-              ttaparse->index[ttaparse->num_frames].size;
-          break;
-      }
-      gst_query_set_duration (query, format, end);
-      break;
-    }
-    default:
-      return FALSE;
-      break;
-  }
-  return TRUE;
-}
-
-static gboolean
-gst_tta_parse_activate (GstPad * pad)
-{
-  if (gst_pad_check_pull_range (pad)) {
-    return gst_pad_activate_pull (pad, TRUE);
-  }
-  return FALSE;
-}
-
-static gboolean
-gst_tta_parse_activate_pull (GstPad * pad, gboolean active)
-{
-  GstTtaParse *ttaparse = GST_TTA_PARSE (GST_OBJECT_PARENT (pad));
-
-  if (active) {
-    gst_pad_start_task (pad, (GstTaskFunction) gst_tta_parse_loop, ttaparse,
-        NULL);
-  } else {
-    gst_pad_stop_task (pad);
-  }
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_tta_parse_parse_header (GstTtaParse * ttaparse)
-{
-  guchar *data;
-  GstBuffer *buf = NULL;
-  guint32 crc;
-  double frame_length;
-  int num_frames;
-  GstCaps *caps;
-  int i;
-  guint32 offset;
-  GstEvent *discont;
-
-  if (gst_pad_pull_range (ttaparse->sinkpad, 0, 22, &buf) != GST_FLOW_OK)
-    goto pull_fail;
-  data = GST_BUFFER_DATA (buf);
-  ttaparse->channels = GST_READ_UINT16_LE (data + 6);
-  ttaparse->bits = GST_READ_UINT16_LE (data + 8);
-  ttaparse->samplerate = GST_READ_UINT32_LE (data + 10);
-  ttaparse->data_length = GST_READ_UINT32_LE (data + 14);
-  crc = crc32 (data, 18);
-  if (crc != GST_READ_UINT32_LE (data + 18)) {
-    GST_DEBUG ("Header CRC wrong!");
-  }
-  frame_length = FRAME_TIME * ttaparse->samplerate;
-  num_frames = (ttaparse->data_length / frame_length) + 1;
-  ttaparse->num_frames = num_frames;
-  gst_buffer_unref (buf);
-
-  ttaparse->index =
-      (GstTtaIndex *) g_malloc (num_frames * sizeof (GstTtaIndex));
-  if (gst_pad_pull_range (ttaparse->sinkpad,
-          22, num_frames * 4 + 4, &buf) != GST_FLOW_OK)
-    goto pull_fail;
-  data = GST_BUFFER_DATA (buf);
-
-  offset = 22 + num_frames * 4 + 4;     // header size + seektable size
-  for (i = 0; i < num_frames; i++) {
-    ttaparse->index[i].size = GST_READ_UINT32_LE (data + i * 4);
-    ttaparse->index[i].pos = offset;
-    offset += ttaparse->index[i].size;
-    ttaparse->index[i].time = i * FRAME_TIME * GST_SECOND;
-  }
-  crc = crc32 (data, num_frames * 4);
-  if (crc != GST_READ_UINT32_LE (data + num_frames * 4)) {
-    GST_DEBUG ("Seektable CRC wrong!");
-  }
-
-  GST_DEBUG
-      ("channels: %u, bits: %u, samplerate: %u, data_length: %u, num_frames: %u",
-      ttaparse->channels, ttaparse->bits, ttaparse->samplerate,
-      ttaparse->data_length, num_frames);
-
-  ttaparse->header_parsed = TRUE;
-  caps = gst_caps_new_simple ("audio/x-tta",
-      "width", G_TYPE_INT, ttaparse->bits,
-      "channels", G_TYPE_INT, ttaparse->channels,
-      "rate", G_TYPE_INT, ttaparse->samplerate, NULL);
-  gst_pad_set_caps (ttaparse->srcpad, caps);
-
-  discont =
-      gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME, 0,
-      num_frames * FRAME_TIME * GST_SECOND, 0);
-
-  gst_pad_push_event (ttaparse->srcpad, discont);
-
-  return GST_FLOW_OK;
-
-pull_fail:
-  {
-    GST_ELEMENT_ERROR (ttaparse, STREAM, DEMUX, (NULL),
-        ("Couldn't read header"));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstFlowReturn
-gst_tta_parse_stream_data (GstTtaParse * ttaparse)
-{
-  GstBuffer *buf = NULL;
-  GstFlowReturn res = GST_FLOW_OK;
-
-  if (ttaparse->current_frame >= ttaparse->num_frames)
-    goto found_eos;
-
-  GST_DEBUG ("playing frame %u of %u", ttaparse->current_frame + 1,
-      ttaparse->num_frames);
-  if ((res = gst_pad_pull_range (ttaparse->sinkpad,
-              ttaparse->index[ttaparse->current_frame].pos,
-              ttaparse->index[ttaparse->current_frame].size,
-              &buf)) != GST_FLOW_OK)
-    goto pull_error;
-
-  GST_BUFFER_OFFSET (buf) = ttaparse->index[ttaparse->current_frame].pos;
-  GST_BUFFER_TIMESTAMP (buf) = ttaparse->index[ttaparse->current_frame].time;
-  if (ttaparse->current_frame + 1 == ttaparse->num_frames) {
-    guint32 samples =
-        ttaparse->data_length % (gint64) (ttaparse->samplerate * FRAME_TIME);
-    gdouble frametime = (gdouble) samples / (gdouble) ttaparse->samplerate;
-
-    GST_BUFFER_DURATION (buf) = (guint64) (frametime * GST_SECOND);
-  } else {
-    GST_BUFFER_DURATION (buf) = FRAME_TIME * GST_SECOND;
-  }
-  gst_buffer_set_caps (buf, GST_PAD_CAPS (ttaparse->srcpad));
-
-  if ((res = gst_pad_push (ttaparse->srcpad, buf)) != GST_FLOW_OK)
-    goto push_error;
-  ttaparse->current_frame++;
-
-  return res;
-
-found_eos:
-  {
-    GST_DEBUG ("found EOS");
-    gst_pad_push_event (ttaparse->srcpad, gst_event_new_eos ());
-    return GST_FLOW_FLUSHING;
-  }
-pull_error:
-  {
-    GST_DEBUG ("Error getting frame from the sinkpad");
-    return res;
-  }
-push_error:
-  {
-    GST_DEBUG ("Error pushing on srcpad");
-    return res;
-  }
-}
-
-static void
-gst_tta_parse_loop (GstTtaParse * ttaparse)
-{
-  GstFlowReturn ret;
-
-  if (!ttaparse->header_parsed)
-    if ((ret = gst_tta_parse_parse_header (ttaparse)) != GST_FLOW_OK)
-      goto pause;
-  if ((ret = gst_tta_parse_stream_data (ttaparse)) != GST_FLOW_OK)
-    goto pause;
-
-  return;
-
-pause:
-  GST_LOG_OBJECT (ttaparse, "pausing task, %s", gst_flow_get_name (ret));
-  gst_pad_pause_task (ttaparse->sinkpad);
-  if (ret == GST_FLOW_UNEXPECTED) {
-    gst_pad_push_event (ttaparse->srcpad, gst_event_new_eos ());
-  } else if (ret < GST_FLOW_UNEXPECTED || ret == GST_FLOW_NOT_LINKED) {
-    GST_ELEMENT_FLOW_ERROR (ttaparse, ret);
-    gst_pad_push_event (ttaparse->srcpad, gst_event_new_eos ());
-  }
-}
-
-static GstStateChangeReturn
-gst_tta_parse_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret;
-  GstTtaParse *ttaparse = GST_TTA_PARSE (element);
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_tta_parse_reset (ttaparse);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-gboolean
-gst_tta_parse_plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "ttaparse",
-          GST_RANK_NONE, GST_TYPE_TTA_PARSE)) {
-    return FALSE;
-  }
-
-  GST_DEBUG_CATEGORY_INIT (gst_tta_parse_debug, "ttaparse", 0,
-      "tta file parser");
-
-  return TRUE;
-}
diff --git a/gst/tta/gstttaparse.h b/gst/tta/gstttaparse.h
deleted file mode 100644 (file)
index 2c1ccc7..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* GStreamer TTA plugin
- * (c) 2004 Arwed v. Merkatz <v.merkatz@gmx.net>
- *
- * gstttaparse.h: TTA file parser
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_TTA_PARSE_H__
-#define __GST_TTA_PARSE_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-/* #define's don't like whitespacey bits */
-#define GST_TYPE_TTA_PARSE \
-  (gst_tta_parse_get_type())
-#define GST_TTA_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TTA_PARSE,GstTtaParse))
-#define GST_TTA_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TTA_PARSE,GstTtaParseClass))
-#define GST_IS_TTA_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TTA_PARSE))
-#define GST_IS_TTA_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TTA_PARSE))
-
-typedef struct _GstTtaParse      GstTtaParse;
-typedef struct _GstTtaParseClass GstTtaParseClass;
-
-typedef struct _GstTtaIndex {
-  guint32   size;     /* size of frame frameno */
-  guint64   pos;      /* start of the frame */
-  guint64   time;     /* in nanoseconds */
-} GstTtaIndex;
-
-struct _GstTtaParse
-{
-  GstElement element;
-
-  GstPad *sinkpad, *srcpad;
-
-  gboolean header_parsed;
-  guint32 samplerate;
-  guint16 channels;
-  guint16 bits;
-  guint32 data_length;
-  guint num_frames;
-
-  GstTtaIndex *index;
-
-  guint32 current_frame;
-};
-
-struct _GstTtaParseClass 
-{
-  GstElementClass parent;
-};
-
-GType gst_tta_parse_get_type (void);
-
-gboolean gst_tta_parse_plugin_init (GstPlugin *plugin);
-
-G_END_DECLS
-
-#endif /* __GST_TTA_PARSE_H__ */
diff --git a/gst/tta/meson.build b/gst/tta/meson.build
deleted file mode 100644 (file)
index cd14b3f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-tta_sources = [
-  'gsttta.c',
-  'gstttaparse.c',
-  'gstttadec.c',
-]
-
-gsttta = library('gsttta',
-  tta_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/tta/ttadec.h b/gst/tta/ttadec.h
deleted file mode 100644 (file)
index 7a889d9..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * ttadec.h
- *
- * Description:  TTAv1 decoder definitions and prototypes
- * Developed by: Alexander Djourik <sasha@iszf.irk.ru>
- *               Pavel Zhilin <pzh@iszf.irk.ru>
- *
- * Copyright (c) 1999-2004 Alexander Djourik. All rights reserved.
- *
- */
-
-/*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- *
- * Please see the file COPYING in this directory for full copyright
- * information.
- */
-
-#ifndef TTADEC_H_
-#define TTADEC_H_
-
-#ifdef _WIN32
-#pragma pack(1)
-#define __ATTRIBUTE_PACKED__
-#else
-#define __ATTRIBUTE_PACKED__    __attribute__((packed))
-#endif
-
-#define TTA1_SIGN       0x31415454
-#define FRAME_TIME      1.04489795918367346939
-#define MAX_ORDER       8
-
-#ifndef WAVE_FORMAT_PCM
-#define WAVE_FORMAT_PCM 1
-#endif
-
-#ifdef _WIN32
-        typedef unsigned __int64 uint64;
-#else
-        typedef unsigned long long uint64;
-#endif
-
-/**
- * moved to gstttadec.c to silence gcc warnings
- */
-/*
-static const unsigned long bit_mask[] = {
-    0x00000000, 0x00000001, 0x00000003, 0x00000007,
-    0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
-    0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
-    0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
-    0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
-    0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
-    0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
-    0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
-    0xffffffff
-};
-
-static const unsigned long bit_shift[] = {
-    0x00000001, 0x00000002, 0x00000004, 0x00000008,
-    0x00000010, 0x00000020, 0x00000040, 0x00000080,
-    0x00000100, 0x00000200, 0x00000400, 0x00000800,
-    0x00001000, 0x00002000, 0x00004000, 0x00008000,
-    0x00010000, 0x00020000, 0x00040000, 0x00080000,
-    0x00100000, 0x00200000, 0x00400000, 0x00800000,
-    0x01000000, 0x02000000, 0x04000000, 0x08000000,
-    0x10000000, 0x20000000, 0x40000000, 0x80000000,
-    0x80000000, 0x80000000, 0x80000000, 0x80000000,
-    0x80000000, 0x80000000, 0x80000000, 0x80000000
-};
-
-static const unsigned long *shift_16 = bit_shift + 4;
-*/
-
-typedef unsigned char byte;
-
-#ifdef _BIG_ENDIAN
-#define ENDSWAP_INT16(x)        (((((x)>>8)&0xFF)|(((x)&0xFF)<<8)))
-#define ENDSWAP_INT32(x)        (((((x)>>24)&0xFF)|(((x)>>8)&0xFF00)|(((x)&0xFF00)<<8)|(((x)&0xFF)<<24)))
-#define WRITE_BUFFER(x, bsize, out) { \
-        if (bsize > 2) *out++ = (byte)(*x >> 16); \
-        if (bsize > 1) *out++ = (byte)(*x >> 8); \
-        *out++ = (byte) *x; }
-#else
-#define ENDSWAP_INT16(x)        (x)
-#define ENDSWAP_INT32(x)        (x)
-#define WRITE_BUFFER(x, bsize, out) { \
-        *out++ = (byte) *x; \
-        if (bsize > 1) *out++ = (byte)(*x >> 8); \
-        if (bsize > 2) *out++ = (byte)(*x >> 16); }
-#endif
-
-#define PREDICTOR1(x, k)        ((long)((((uint64)x << k) - x) >> k))
-#define DEC(x)                  (((x)&1)?(++(x)>>1):(-(x)>>1))
-
-#if 0
-/* This doesn't compile on non-gcc compilers */
-typedef struct {
-    unsigned long TTAid;
-    unsigned short AudioFormat;
-    unsigned short NumChannels;
-    unsigned short BitsPerSample;
-    unsigned long SampleRate;
-    unsigned long DataLength;
-    unsigned long CRC32;
-} __ATTRIBUTE_PACKED__ tta_hdr;
-#endif
-
-typedef struct {
-        unsigned long k0;
-        unsigned long k1;
-        unsigned long sum0;
-        unsigned long sum1;
-} adapt;
-
-typedef struct {
-        long shift;
-        long round;
-        long error;
-        long mutex;
-        long qm[MAX_ORDER+1];
-        long dx[MAX_ORDER+1];
-        long dl[MAX_ORDER+1];
-} fltst;
-
-typedef struct {
-        fltst fst;
-        adapt rice;
-        long last;
-} decoder;
-
-#endif /* TTADEC_H_ */
diff --git a/gst/vbidec/Makefile.am b/gst/vbidec/Makefile.am
deleted file mode 100644 (file)
index 8044525..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-plugin_LTLIBRARIES = libgstvbidec.la
-
-libgstvbidec_la_SOURCES = gstvbidec.h gstvbidec.c \
-       vbidata.h vbidata.c \
-       vbiscreen.h vbiscreen.c
-libgstvbidec_la_CFLAGS = $(GST_CFLAGS)
-libgstvbidec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstvbidec_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
diff --git a/gst/vbidec/gstvbidec.c b/gst/vbidec/gstvbidec.c
deleted file mode 100644 (file)
index 36531a9..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <inttypes.h>
-#include <ctype.h>
-#include <gst/gst.h>
-#include "gstvbidec.h"
-#include "vbidata.h"
-#include "vbiscreen.h"
-
-#define GST_TYPE_VBIDEC \
-  (gst_vbidec_get_type())
-#define GST_VBIDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VBIDEC,GstVBIDec))
-#define GST_VBIDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VBIDEC,GstVBIDec))
-#define GST_IS_VBIDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VBIDEC))
-#define GST_IS_VBIDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VBIDEC))
-
-//typedef struct _GstVBIDec GstVBIDec;
-typedef struct _GstVBIDecClass GstVBIDecClass;
-
-struct _GstVBIDec
-{
-  GstElement element;
-
-  /* pads */
-  GstPad *sinkpad, *srcpad;
-  char caption[128];
-  vbiscreen_t *vbiscreen;
-  vbidata_t *vbidata;
-  int caption_type;
-  gboolean dvd_input;
-};
-
-struct _GstVBIDecClass
-{
-  GstElementClass parent_class;
-};
-
-GType gst_vbidec_get_type (void);
-
-/* VBIDec signals and args */
-enum
-{
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-  PROP_VERBOSE,
-  PROP_CAPTION_TYPE,
-  PROP_DVD_INPUT
-};
-
-static GstStaticPadTemplate gst_vbidec_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate gst_vbidec_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("text/plain")
-    );
-
-
-#define GST_TYPE_VBIDEC_CAPTION_TYPE_TYPE (gst_vbidec_caption_type_get_type())
-static GType
-gst_vbidec_caption_type_get_type (void)
-{
-  static GType vbidec_caption_type_type = 0;
-  static const GEnumValue vbidec_caption_type[] = {
-    {CAPTURE_OFF, "0", "Closed Captions off"},
-    {CAPTURE_CC1, "1", "Closed Caption CC1"},
-    {CAPTURE_CC2, "2", "Closed Caption CC2"},
-    {CAPTURE_CC3, "4", "Closed Caption CC3"},
-    {CAPTURE_CC4, "5", "Closed Caption CC4"},
-    {CAPTURE_T1, "6", "Closed Caption T1"},
-    {CAPTURE_T2, "7", "Closed Caption T2"},
-    {CAPTURE_T3, "8", "Closed Caption T3"},
-    {CAPTURE_T4, "9", "Closed Caption T4"},
-    {0, NULL, NULL},
-  };
-
-  if (!vbidec_caption_type_type) {
-    vbidec_caption_type_type =
-        g_enum_register_static ("GstVBIDecCaptionTypeType",
-        vbidec_caption_type);
-  }
-  return vbidec_caption_type_type;
-}
-
-static void gst_vbidec_base_init (gpointer g_class);
-static void gst_vbidec_class_init (GstVBIDecClass * klass);
-static void gst_vbidec_init (GstVBIDec * vbidec);
-
-static void gst_vbidec_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_vbidec_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static void gst_vbidec_chain (GstPad * pad, GstData * _data);
-
-static GstElementClass *parent_class = NULL;
-
-/*static guint gst_vbidec_signals[LAST_SIGNAL] = { 0 };*/
-
-GType
-gst_vbidec_get_type (void)
-{
-  static GType vbidec_type = 0;
-
-  if (!vbidec_type) {
-    static const GTypeInfo vbidec_info = {
-      sizeof (GstVBIDecClass),
-      gst_vbidec_base_init,
-      NULL,
-      (GClassInitFunc) gst_vbidec_class_init,
-      NULL,
-      NULL,
-      sizeof (GstVBIDec),
-      0,
-      (GInstanceInitFunc) gst_vbidec_init,
-    };
-
-    vbidec_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstVBIDec", &vbidec_info, 0);
-  }
-  return vbidec_type;
-}
-
-static void
-gst_vbidec_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_set_static_metadata (element_class, "VBI decoder",
-      "Codec/Decoder/Video",
-      "Decodes closed captions and XDS data from VBI data",
-      "David I. Lehn <dlehn@users.sourceforge.net>");
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_vbidec_src_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_vbidec_sink_template);
-}
-
-static void
-gst_vbidec_class_init (GstVBIDecClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->set_property = gst_vbidec_set_property;
-  gobject_class->get_property = gst_vbidec_get_property;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_VERBOSE,
-      g_param_spec_boolean ("verbose", "verbose", "verbose",
-          FALSE, G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CAPTION_TYPE,
-      g_param_spec_enum ("caption-type", "caption type", "Closed Caption Type",
-          GST_TYPE_VBIDEC_CAPTION_TYPE_TYPE, CAPTURE_OFF,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DVD_INPUT,
-      g_param_spec_boolean ("dvd-input", "dvd input",
-          "VBI is encapsulated in MPEG2 GOP user_data field (as on DVDs)",
-          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-
-static void
-gst_vbidec_init (GstVBIDec * vbidec)
-{
-  /* create the sink and src pads */
-  vbidec->sinkpad =
-      gst_pad_new_from_static_template (&gst_vbidec_sink_template, "sink");
-  gst_element_add_pad (GST_ELEMENT (vbidec), vbidec->sinkpad);
-  gst_pad_set_chain_function (vbidec->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_vbidec_chain));
-
-  vbidec->srcpad =
-      gst_pad_new_from_static_template (&gst_vbidec_src_template, "src");
-  gst_element_add_pad (GST_ELEMENT (vbidec), vbidec->srcpad);
-
-  vbidec->vbiscreen = vbiscreen_new (0, 0, 1.0, 0, (void *) vbidec);
-  vbidec->vbidata = vbidata_new_line (vbidec->vbiscreen, 0);
-  vbidec->caption_type = CAPTURE_OFF;
-  vbidata_capture_mode (vbidec->vbidata, vbidec->caption_type);
-  vbidec->dvd_input = FALSE;
-}
-
-static void
-line21_decode (GstVBIDec * vbidec, guint8 * data, guint32 size)
-{
-  vbidata_process_line (vbidec->vbidata, data, 0);
-}
-
-static void
-dvd_user_data_decode (GstVBIDec * vbidec, guint8 * data, guint32 size)
-{
-  //char caption[128];
-  //int ci; /* caption index */
-  int i;                        /* buf index */
-  int num_disp_field;
-  guint8 b1, b2;
-  int w;
-
-  //g_print("%%%% vbi decode\n");
-  //g_print("== %p %d\n", data, size);
-  i = 0;
-  /* Check for Closed Captioning data */
-  if (data[i] != 0x43 || data[i + 1] != 0x43 ||
-      data[i + 2] != 0x01 || data[i + 3] != 0xf8) {
-    g_print ("non-CC data\n");
-    return;
-  }
-  //g_print ("CC data\n");
-  i += 4;                       /* above */
-  i += 4;                       /* ? */
-  num_disp_field = data[i] & 0x3f;
-  //g_print ("ndf %d\n", num_disp_field);
-  while ((data[i] & 0xfe) == 0xfe) {
-    if (data[i] & 0x1) {
-      b1 = data[i + 1] & 0x7f;
-      b2 = data[i + 2] & 0x7f;
-      w = (b2 << 8) | b1;
-      vbidata_process_16b (vbidec->vbidata, 0, w);
-    }
-    i += 3;
-  }
-}
-
-static void
-gst_vbidec_chain (GstPad * pad, GstData * _data)
-{
-  GstBuffer *buf = GST_BUFFER (_data);
-  GstVBIDec *vbidec = GST_VBIDEC (gst_pad_get_parent (pad));
-  guint32 size;
-  guint8 *data;
-  guint64 pts;
-
-  size = GST_BUFFER_SIZE (buf);
-  data = GST_BUFFER_DATA (buf);
-  pts = GST_BUFFER_TIMESTAMP (buf);
-
-  /*
-     g_print("** user_data: addr:%p len:%d state:%d\n", data, size, 0);
-     {
-     int i;
-     guint8 ud;
-     g_print("** \"");
-     for (i=0; i<size; i++) {
-     ud = data[i];
-     if (isprint((char)ud)) {
-     g_print("%c", (char)ud);
-     } else {
-     g_print("[0x%02x]", ud);
-     }
-     }
-     g_print("\"\n");
-     }
-   */
-
-  if (vbidec->dvd_input) {
-    dvd_user_data_decode (vbidec, data, size);
-  } else {
-    line21_decode (vbidec, data, size);
-  }
-
-  gst_buffer_unref (buf);
-}
-
-void
-gst_vbidec_show_text (GstVBIDec * vbidec, char *text, int len)
-{
-  //fprintf(stderr, "%*s\n", len, text);
-  if (len > 0) {
-    if (GST_PAD_IS_USABLE (vbidec->srcpad)) {
-      GstBuffer *buf = gst_buffer_new_and_alloc (len);
-
-      memcpy (GST_BUFFER_DATA (buf), text, len);
-      GST_BUFFER_SIZE (buf) = len;
-      // FIXME
-      //GST_BUFFER_TIMESTAMP (buf) = vbidec->...
-      //...
-      //fprintf(stderr, "vbi text pushed\n");
-      gst_pad_push (vbidec->srcpad, GST_DATA (buf));
-    }
-  }
-}
-
-static void
-gst_vbidec_set_property (GObject * object, guint prop_id, const GValue * value,
-    GParamSpec * pspec)
-{
-  GstVBIDec *vbidec;
-
-  g_return_if_fail (GST_IS_VBIDEC (object));
-  vbidec = GST_VBIDEC (object);
-
-  switch (prop_id) {
-    case PROP_VERBOSE:
-      vbidata_set_verbose (vbidec->vbidata, g_value_get_boolean (value));
-      vbiscreen_set_verbose (vbidec->vbiscreen, g_value_get_boolean (value));
-      break;
-    case PROP_DVD_INPUT:
-      vbidec->dvd_input = g_value_get_boolean (value);
-      break;
-    case PROP_CAPTION_TYPE:
-      vbidec->caption_type = g_value_get_enum (value);
-      vbidata_capture_mode (vbidec->vbidata, vbidec->caption_type);
-      break;
-    default:
-      break;
-  }
-}
-
-static void
-gst_vbidec_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstVBIDec *vbidec;
-
-  g_return_if_fail (GST_IS_VBIDEC (object));
-  vbidec = GST_VBIDEC (object);
-
-  switch (prop_id) {
-    case PROP_DVD_INPUT:
-      g_value_set_boolean (value, vbidec->dvd_input);
-      break;
-    case PROP_CAPTION_TYPE:
-      g_value_set_enum (value, vbidec->caption_type);
-      break;
-    default:
-      break;
-  }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return gst_element_register (plugin, "vbidec", GST_RANK_NONE,
-      GST_TYPE_VBIDEC);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    vbidec,
-    "Decodes closed captions and XDS data from VBI data",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/vbidec/gstvbidec.h b/gst/vbidec/gstvbidec.h
deleted file mode 100644 (file)
index 9383029..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-typedef struct _GstVBIDec GstVBIDec;
-
-void gst_vbidec_show_text (GstVBIDec *vbidec, char *text, int len);
diff --git a/gst/vbidec/meson.build b/gst/vbidec/meson.build
deleted file mode 100644 (file)
index 43d870e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-vbi_sources = [
-  'gstvbidec.c',
-  'vbidata.c',
-  'vbiscreen.c',
-]
-
-gstvbidec = library('gstvbidec',
-  vbi_sources,
-  c_args : gst_plugins_bad_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
diff --git a/gst/vbidec/vbidata.c b/gst/vbidec/vbidata.c
deleted file mode 100644 (file)
index 0dc013a..0000000
+++ /dev/null
@@ -1,1201 +0,0 @@
-/*
- * Copyright (c) 2002 Billy Biggs <vektor@dumbterm.net>.
- * Copyright (c) 2002 Doug Bell <drbell@users.sourceforge.net>
- *
- * CC code from Nathan Laredo's ccdecode, used under the GPL.
- * Lots of 'hey what does this mean?' code from
- * Billy Biggs and Doug Bell, like all the crap with
- * XDS and stuff.  Some help from Zapping's vbi library by
- * Michael H. Schimek and others, released under the GPL.
- *
- * Modified and adapted to GStreamer by
- * David I. Lehn <dlehn@users.sourceforge.net>
- *
- * 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
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <errno.h>
-#include "vbidata.h"
-#include "vbiscreen.h"
-/*#include "tvtimeosd.h"*/
-
-#define DO_LINE 11
-static int pll = 0;
-
-struct vbidata_s
-{
-  int fd;
-  vbiscreen_t *vs;
-  /*tvtime_osd_t *osd; */
-  char buf[65536];
-  int wanttop;
-  int wanttext;
-
-  unsigned int colour;
-  int row, ital;
-  int indent, ul;
-  int chan;
-
-  unsigned int current_colour;
-  int current_row, current_ital;
-  int current_indent, current_ul;
-  int current_chan;
-  int current_istext;
-
-  int initialised;
-  int enabled;
-  int lastcode;
-  int lastcount;
-  int verbose;
-
-  /* XDS data */
-  char xds_packet[2048];
-  int xds_cursor;
-
-  char *program_name;
-  char *network_name;
-  char *call_letters;
-  const char *rating;
-  const char *program_type;
-  int start_day;
-  int start_month;
-  int start_min;
-  int start_hour;
-  int length_hour;
-  int length_min;
-  int length_elapsed_hour;
-  int length_elapsed_min;
-  int length_elapsed_sec;
-  char *program_desc[8];
-};
-
-
-/* this is NOT exactly right */
-//static char ccode[] = " !\"#$%&'()\0341+,-./0123456789:;<=>?@"
-static const char ccode[] = " !\"#$%&'()a+,-./0123456789:;<=>?@"
-    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-//                     "abcdefghijklmnopqrstuvwxyz"
-//                     "[\0351]\0355\0363\0372abcdefghijklmnopqr"
-    "[e]iouabcdefghijklmnopqr"
-//                     "stuvwxyz\0347\0367\0245\0244\0240";
-    "stuvwxyzcoNn ";
-static const char wccode[] = "\0256\0260\0275\0277T\0242\0243#\0340 "
-    "\0350\0354\0362\0371";
-
-static const char extcode1[] = "\0301\0311\0323\0332\0334\0374"
-    "`\0241*'-\0251S*\"\"\0300\0302"
-    "\0307\0310\0312\0313\0353\0316\0317\0357" "\0324\0331\0371\0333\0253\0273";
-
-static const char extcode2[] = "\0303\0343\0315\0314\0354\0322\0362\0325"
-    "{}\\^_|~\0304\0344\0326\0366\0337\0245\0244|" "\0305\0345\0330\0370++++";
-
-int
-parityok (int n)
-{                               /* check parity for 2 bytes packed in n */
-  int j, k;
-
-  for (k = 0, j = 0; j < 7; j++)
-    if (n & (1 << j))
-      k++;
-  if ((k & 1) && (n & 0x80))
-    return 0;
-  for (k = 0, j = 8; j < 15; j++)
-    if (n & (1 << j))
-      k++;
-  if ((k & 1) && (n & 0x8000))
-    return 0;
-  return 1;
-}
-
-int
-decodebit (unsigned char *data, int threshold)
-{
-  return ((data[0] + data[1] + data[2] + data[3] + data[4] + data[5] +
-          data[6] + data[7] + data[8] + data[9] + data[10] + data[11] +
-          data[12] + data[13] + data[14] + data[15] + data[16] + data[17] +
-          data[18] + data[19] + data[20] + data[21] + data[22] + data[23] +
-          data[24] + data[25] + data[26] + data[27] + data[28] + data[29] +
-          data[30] + data[31]) >> 5 > threshold);
-}
-
-
-int
-ccdecode (unsigned char *vbiline)
-{
-  int max = 0, maxval = 0, minval = 255, i = 0, clk = 0, tmp = 0;
-  int sample, packedbits = 0;
-
-  for (i = 0; i < 250; i++) {
-    sample = vbiline[i];
-    if (sample - maxval > 10)
-      (maxval = sample, max = i);
-    if (sample < minval)
-      minval = sample;
-    if (maxval - sample > 40)
-      break;
-  }
-  sample = ((maxval + minval) >> 1);
-  pll = max;
-
-  /* found clock lead-in, double-check start */
-#ifndef PAL_DECODE
-  i = max + 478;
-#else
-  i = max + 538;
-#endif
-  if (!decodebit (&vbiline[i], sample))
-    return 0;
-#ifndef PAL_DECODE
-  tmp = i + 57;                 /* tmp = data bit zero */
-#else
-  tmp = i + 71;
-#endif
-  for (i = 0; i < 16; i++) {
-#ifndef PAL_DECODE
-    clk = tmp + i * 57;
-#else
-    clk = tmp + i * 71;
-#endif
-    if (decodebit (&vbiline[clk], sample)) {
-      packedbits |= 1 << i;
-    }
-  }
-  if (parityok (packedbits))
-    return packedbits;
-  return 0;
-}                               /* ccdecode */
-
-const char *movies[] = { "N/A", "G", "PG", "PG-13", "R",
-  "NC-17", "X", "Not Rated"
-};
-
-const char *usa_tv[] = { "Not Rated", "TV-Y", "TV-Y7", "TV-G",
-  "TV-PG", "TV-14", "TV-MA", "Not Rated"
-};
-
-const char *cane_tv[] = { "Exempt", "C", "C8+", "G", "PG",
-  "14+", "18+", "Reserved"
-};
-
-const char *canf_tv[] = { "Exempt", "G", "8 ans +", "13 ans +",
-  "16 ans +", "18 ans +", "Reserved",
-  "Reserved"
-};
-
-const char *months[] = { 0, "Jan", "Feb", "Mar", "Apr", "May",
-  "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-static const char *eia608_program_type[96] = {
-  "education", "entertainment", "movie", "news", "religious", "sports",
-  "other", "action", "advertisement", "animated", "anthology",
-  "automobile", "awards", "baseball", "basketball", "bulletin", "business",
-  "classical", "college", "combat", "comedy", "commentary", "concert",
-  "consumer", "contemporary", "crime", "dance", "documentary", "drama",
-  "elementary", "erotica", "exercise", "fantasy", "farm", "fashion",
-  "fiction", "food", "football", "foreign", "fund raiser", "game/quiz",
-  "garden", "golf", "government", "health", "high school", "history",
-  "hobby", "hockey", "home", "horror", "information", "instruction",
-  "international", "interview", "language", "legal", "live", "local",
-  "math", "medical", "meeting", "military", "miniseries", "music", "mystery",
-  "national", "nature", "police", "politics", "premiere", "prerecorded",
-  "product", "professional", "public", "racing", "reading", "repair", "repeat",
-  "review", "romance", "science", "series", "service", "shopping",
-  "soap opera", "special", "suspense", "talk", "technical", "tennis",
-  "travel", "variety", "video", "weather", "western"
-};
-
-
-static void
-parse_xds_packet (vbidata_t * vbi, char *packet, int length)
-{
-  int sum = 0;
-  int i;
-
-  if (!vbi)
-    return;
-
-  /* Check the checksum for validity of the packet. */
-  for (i = 0; i < length - 1; i++) {
-    sum += packet[i];
-  }
-  if ((((~sum) & 0x7f) + 1) != packet[length - 1]) {
-    return;
-  }
-
-  /* Stick a null at the end, and cut off the last two characters. */
-  packet[length - 2] = '\0';
-  length -= 2;
-
-  if (packet[0] == 0x01 && packet[1] == 0x03) {
-    if (vbi->program_name && !strcmp (vbi->program_name, packet + 2)) {
-      return;
-    }
-    if (vbi->verbose)
-      fprintf (stderr, "Current program name: '%s'\n", packet + 2);
-    if (vbi->program_name)
-      free (vbi->program_name);
-    vbi->program_name = strdup (packet + 2);
-    /*tvtime_osd_set_show_name( vbi->osd, vbi->program_name ); */
-  } else if (packet[0] == 0x03 && packet[1] == 0x03) {
-    if (vbi->verbose)
-      fprintf (stderr, "Future program name: '%s'\n", packet + 2);
-  } else if (packet[0] == 0x05 && packet[1] == 0x01) {
-    if (vbi->network_name && !strcmp (vbi->network_name, packet + 2)) {
-      return;
-    }
-
-    if (vbi->verbose)
-      fprintf (stderr, "Network name: '%s'\n", packet + 2);
-    if (vbi->network_name)
-      free (vbi->network_name);
-    vbi->network_name = strdup (packet + 2);
-    /*tvtime_osd_set_network_name( vbi->osd, vbi->network_name ); */
-  } else if (packet[0] == 0x01 && packet[1] == 0x05) {
-    int movie_rating = packet[2] & 7;
-    int scheme = (packet[2] & 56) >> 3;
-    int tv_rating = packet[3] & 7;
-    int VSL = packet[3] & 56;
-    const char *str;
-
-    switch (VSL | scheme) {
-      case 3:                  /* Canadian English TV */
-        str = cane_tv[tv_rating];
-        break;
-      case 7:                  /* Canadian French TV */
-        str = canf_tv[tv_rating];
-        break;
-      case 19:                 /* Reserved */
-      case 31:
-        str = "";
-        break;
-      default:
-        if (((VSL | scheme) & 3) == 1) {
-          /* USA TV */
-          str = usa_tv[tv_rating];
-        } else {
-          /* MPAA Movie Rating */
-          str = movies[movie_rating];
-        }
-        break;
-    }
-
-    if (vbi->rating && !strcmp (vbi->rating, str)) {
-      return;
-    }
-
-    if (vbi->verbose)
-      fprintf (stderr, "Show rating: %s", str);
-    if (((VSL | scheme) & 3) == 1 || ((VSL | scheme) & 3) == 0) {
-      /* show VSLD for the americans */
-      if ((VSL | scheme) & 32) {
-        if (vbi->verbose)
-          fprintf (stderr, " V");
-      }
-      if ((VSL | scheme) & 16) {
-        if (vbi->verbose)
-          fprintf (stderr, " S");
-      }
-      if ((VSL | scheme) & 8) {
-        if (vbi->verbose)
-          fprintf (stderr, " L");
-      }
-      if ((VSL | scheme) & 4) {
-        if (vbi->verbose)
-          fprintf (stderr, " D");
-      }
-    }
-    if (vbi->verbose)
-      fprintf (stderr, "\n");
-    vbi->rating = str;
-    /*tvtime_osd_set_show_rating( vbi->osd, vbi->rating ); */
-  } else if (packet[0] == 0x05 && packet[1] == 0x02) {
-    if (vbi->call_letters && !strcmp (vbi->call_letters, packet + 2)) {
-      return;
-    }
-
-    if (vbi->verbose)
-      fprintf (stderr, "Network call letters: '%s'\n", packet + 2);
-    if (vbi->call_letters)
-      free (vbi->call_letters);
-    vbi->call_letters = strdup (packet + 2);
-    /*tvtime_osd_set_network_call( vbi->osd, vbi->call_letters ); */
-  } else if (packet[0] == 0x01 && packet[1] == 0x01) {
-    int month = packet[5];      // & 15;
-    int day = packet[4];        // & 31;
-    int hour = packet[3];       // & 31;
-    int min = packet[2];        // & 63;
-    char str[33];
-
-    if (vbi->verbose)
-      fprintf (stderr, "Program Start: %02d %s, %02d:%02d\n",
-          day & 31, months[month & 15], hour & 31, min & 63);
-    // packet[ 3 ], packet[ 4 ], packet[ 5 ], packet[ 6 ] );
-    //packet[ 5 ] & 31, packet[ 6 ], packet[ 4 ] & 31, packet[ 3 ] & 63 );
-    vbi->start_month = month & 15;
-    vbi->start_day = day & 31;
-    vbi->start_hour = hour & 31;
-    vbi->start_min = hour & 63;
-    snprintf (str, 32, "%02d %s, %02d:%02d",
-        day & 31, months[month & 15], hour & 31, min & 63);
-    /*tvtime_osd_set_show_start( vbi->osd, str ); */
-  } else if (packet[0] == 0x01 && packet[1] == 0x04) {
-    if (vbi->verbose)
-      fprintf (stderr, "Program type: ");
-    for (i = 0; i < length - 2; i++) {
-      int cur = packet[2 + i] - 0x20;
-
-      if (cur >= 0 && cur < 96) {
-        if (vbi->verbose)
-          fprintf (stderr, "%s%s", i ? ", " : "", eia608_program_type[cur]);
-        /* this will cause us to keep only the last type we check */
-        vbi->program_type = eia608_program_type[cur];
-      }
-    }
-    if (vbi->verbose)
-      fprintf (stderr, "\n");
-  } else if (packet[0] < 0x03 && packet[1] >= 0x10 && packet[1] <= 0x17) {
-
-    if (vbi->program_desc[packet[1] & 0xf] &&
-        !strcmp (vbi->program_desc[packet[1] & 0xf], packet + 2)) {
-      return;
-    }
-
-    if (vbi->verbose)
-      fprintf (stderr, "Program Description: Line %d", packet[1] & 0xf);
-    if (vbi->verbose)
-      fprintf (stderr, "%s\n", packet + 2);
-    if (vbi->program_desc[packet[1] & 0xf])
-      free (vbi->program_desc[packet[1] & 0xf]);
-    vbi->program_desc[packet[1] & 0xf] = strdup (packet + 2);
-  } else if (packet[0] == 0x01 && packet[1] == 0x02) {
-    char str[33];
-
-    str[0] = 0;
-    if (vbi->verbose)
-      fprintf (stderr, "Program Length: %02d:%02d",
-          packet[3] & 63, packet[2] & 63);
-    vbi->length_hour = packet[3] & 63;
-    vbi->length_min = packet[2] & 63;
-    snprintf (str, 32, "%02d:%02d", packet[3] & 63, packet[2] & 63);
-    if (length > 4) {
-      if (vbi->verbose)
-        fprintf (stderr, " Elapsed: %02d:%02d", packet[5] & 63, packet[4] & 63);
-      vbi->length_elapsed_hour = packet[5] & 63;
-      vbi->length_elapsed_min = packet[4] & 63;
-      snprintf (str, 32, "%02d:%02d/%02d:%02d",
-          packet[5] & 63, packet[4] & 63, packet[3] & 63, packet[2] & 63);
-    } else {
-      vbi->length_elapsed_hour = 0;
-      vbi->length_elapsed_min = 0;
-    }
-
-    if (length > 6) {
-      if (vbi->verbose)
-        fprintf (stderr, ".%02d", packet[6] & 63);
-      vbi->length_elapsed_hour = packet[6] & 63;
-      snprintf (str, 32, "%02d:%02d.%02d/%02d:%02d",
-          packet[5] & 63, packet[4] & 63, packet[6] & 63,
-          packet[3] & 63, packet[2] & 63);
-    } else {
-      vbi->length_elapsed_hour = 0;
-    }
-    /*tvtime_osd_set_show_length( vbi->osd, str ); */
-    if (vbi->verbose)
-      fprintf (stderr, "\n");
-  } else if (packet[0] == 0x05 && packet[1] == 0x04) {
-    if (vbi->verbose)
-      fprintf (stderr, "Transmission Signal Identifier (TSID): 0x%04x\n",
-          packet[2] << 24 | packet[3] << 16 | packet[4] << 8 | packet[5]);
-  } else {
-    /* unknown */
-
-    if (vbi->verbose)
-      fprintf (stderr, "Unknown XDS packet, class ");
-    switch (packet[0]) {
-      case 0x1:
-        if (vbi->verbose)
-          fprintf (stderr, "CURRENT start\n");
-        break;
-      case 0x2:
-        if (vbi->verbose)
-          fprintf (stderr, "CURRENT continue\n");
-        break;
-
-      case 0x3:
-        if (vbi->verbose)
-          fprintf (stderr, "FUTURE start\n");
-        break;
-      case 0x4:
-        if (vbi->verbose)
-          fprintf (stderr, "FUTURE continue\n");
-        break;
-
-      case 0x5:
-        if (vbi->verbose)
-          fprintf (stderr, "CHANNEL start\n");
-        break;
-      case 0x6:
-        if (vbi->verbose)
-          fprintf (stderr, "CHANNEL continue\n");
-        break;
-
-      case 0x7:
-        if (vbi->verbose)
-          fprintf (stderr, "MISC start\n");
-        break;
-      case 0x8:
-        if (vbi->verbose)
-          fprintf (stderr, "MISC continue\n");
-        break;
-
-      case 0x9:
-        if (vbi->verbose)
-          fprintf (stderr, "PUB start\n");
-        break;
-      case 0xa:
-        if (vbi->verbose)
-          fprintf (stderr, "PUB continue\n");
-        break;
-
-      case 0xb:
-        if (vbi->verbose)
-          fprintf (stderr, "RES start\n");
-        break;
-      case 0xc:
-        if (vbi->verbose)
-          fprintf (stderr, "RES continue\n");
-        break;
-
-      case 0xd:
-        if (vbi->verbose)
-          fprintf (stderr, "UNDEF start\n");
-        break;
-      case 0xe:
-        if (vbi->verbose)
-          fprintf (stderr, "UNDEF continue\n");
-        break;
-    }
-    for (i = 0; i < length; i++) {
-      if (vbi->verbose)
-        fprintf (stderr, "0x%02x ", packet[i]);
-    }
-    if (vbi->verbose)
-      fprintf (stderr, "\n");
-  }
-}
-
-static int
-xds_decode (vbidata_t * vbi, int b1, int b2)
-{
-  if (!vbi)
-    return 0;
-  if (vbi->xds_cursor > 2046) {
-    vbi->xds_cursor = 0;
-  }
-
-  if (!vbi->xds_cursor && b1 > 0xf) {
-    return 0;
-  }
-
-
-  if (b1 < 0xf && (b1 & 0x2)) {
-    /* ignore the continue and thus 'support' continuation of
-       a single packet */
-    return 1;
-  } else if (b1 < 0xf) {
-    /* kill old packet cause we got a new one */
-    vbi->xds_cursor = 0;
-  }
-
-  vbi->xds_packet[vbi->xds_cursor] = b1;
-  vbi->xds_packet[vbi->xds_cursor + 1] = b2;
-  vbi->xds_cursor += 2;
-
-  if (b1 == 0xf) {
-    parse_xds_packet (vbi, vbi->xds_packet, vbi->xds_cursor);
-    vbi->xds_cursor = 0;
-  }
-
-  return 1;
-}
-
-#define NOMODE  0
-
-#define CC1     1
-#define CC2     2
-#define T1      3
-#define T2      4
-
-#define CC3     1
-#define CC4     2
-#define T3      3
-#define T4      4
-
-const unsigned int colours[] = {
-  0xFFFFFFFFU,                  /* white */
-  0xFF00FF00U,                  /* green */
-  0xFF0000FFU,                  /* blue */
-  0xFF00C7C7U,                  /* cyan */
-  0xFFFF0000U,                  /* red */
-  0xFFFFFF00U,                  /* yellow */
-  0xFFC700C7U                   /* magenta */
-};
-
-const int rows[] = {
-  11,
-  0,                            /* unused */
-  1,
-  2,
-  3,
-  4,
-  12,
-  13,
-  14,
-  15,
-  5,
-  6,
-  7,
-  8,
-  9,
-  10
-};
-
-#define ROLL_2      6
-#define ROLL_3      7
-#define ROLL_4      8
-#define POP_UP      9
-#define PAINT_ON    10
-
-
-static int
-Process16b (vbidata_t * vbi, int bottom, int w1)
-{
-  int b1, b2;
-
-  b1 = w1 & 0x7f;
-  b2 = (w1 >> 8) & 0x7f;
-
-  if (!b1 && !b2) {
-    return 0;
-  }
-
-  if (vbi->enabled && b1 >= 0x10 && b1 <= 0x1F && b2 >= 0x20 && b2 <= 0x7F) {
-    int code;
-
-    if ((b2 & 64)) {
-      /* Preamble Code */
-      /* This sets up colors and indenting */
-
-      if (!bottom && vbi->lastcode == ((b1 << 8) | b2)) {
-        vbi->lastcount = (vbi->lastcount + 1) % 2;
-        return 1;
-      }
-
-      vbi->current_chan = (b1 & 8) >> 3;
-      if (!bottom == vbi->wanttop) {
-        if (vbi->chan != vbi->current_chan)
-          return 0;
-      } else
-        return 0;
-
-      vbi->current_ital = (b2 & 1);
-      if (!(b2 & 16)) {
-        vbi->current_colour = colours[(b2 & 30) >> 1];
-        vbi->current_indent = 0;
-      } else {
-        vbi->current_colour = 0xFFFFFFFFU;      /* white */
-        vbi->current_indent = 4 * ((b2 & 14) >> 1);
-      }
-      vbi->current_row = rows[((b1 & 7) << 1) | ((b2 & 32) >> 5)];
-      vbi->current_ul = b2 & 1;
-
-      if (vbi->verbose)
-        fprintf (stderr, "field: %d chan %d, ital %d, ul %d, colour 0x%x, "
-            "indent %d, row %d\n", bottom, vbi->current_chan,
-            vbi->current_ital, vbi->current_ul, vbi->current_colour,
-            vbi->current_indent, vbi->current_row);
-
-      if (!bottom == vbi->wanttop &&
-          vbi->current_chan == vbi->chan &&
-          vbi->current_istext == vbi->wanttext) {
-
-        vbi->indent = vbi->current_indent;
-        vbi->ital = vbi->current_ital;
-        vbi->colour = vbi->current_colour;
-        vbi->row = vbi->current_row;
-        vbi->current_istext = 0;
-
-        vbiscreen_new_caption (vbi->vs, vbi->indent, vbi->ital,
-            vbi->colour, vbi->row);
-
-      }
-
-      vbi->lastcode = (b1 << 8) | b2;
-      vbi->lastcount = 0;
-      return 1;
-    }
-
-    if ((b1 & 8) == 1) {
-      /* Midrow code */
-      if (!vbi->initialised)
-        return 0;
-
-      if (!bottom && vbi->lastcode == ((b1 << 8) | b2)) {
-        vbi->lastcount = (vbi->lastcount + 1) % 2;
-        return 1;
-      }
-
-      if (vbi->verbose)
-        fprintf (stderr, "Midrow TODO: Add me.\n");
-
-      vbi->lastcode = (b1 << 8) | b2;
-      return 1;
-    }
-
-    if ((b1 & 2) && !(b2 & 64)) {
-      if (!vbi->initialised)
-        return 0;
-
-      if (!bottom && vbi->lastcode == ((b1 << 8) | b2)) {
-        vbi->lastcount = (vbi->lastcount + 1) % 2;
-        return 1;
-      }
-
-      if (vbi->verbose)
-        fprintf (stderr, "Tab Offset: %d columns\n", b2 & 3);
-      if (vbi->wanttext && vbi->current_istext &&
-          vbi->current_chan == vbi->chan && !bottom == vbi->wanttop) {
-        vbiscreen_tab (vbi->vs, b2 & 3);
-      }
-      vbi->lastcode = (b1 << 8) | b2;
-      return 1;
-    }
-
-    switch ((code = b2 & 15)) {
-      case 0:                  /* POP-UP */
-      case 5:                  /* ROLL UP 2 */
-      case 6:                  /* ROLL UP 3 */
-      case 7:                  /* ROLL UP 4 */
-      case 9:                  /* PAINT-ON */
-      case 10:                 /* TEXT */
-      case 11:                 /* TEXT */
-        vbi->initialised = 1;
-        if (!bottom && vbi->lastcode == ((b1 << 8) | b2)) {
-          /* This is the repeated Control Code */
-          vbi->lastcount = (vbi->lastcount + 1) % 2;
-          return 1;
-        }
-        switch (code) {
-          case 0:              /* POP-UP */
-            if (!vbi->wanttext && vbi->current_chan == vbi->chan &&
-                !bottom == vbi->wanttop) {
-              if (vbi->verbose)
-                fprintf (stderr, "Pop-Up\n");
-              vbi->indent = vbi->current_indent;
-              vbi->ital = vbi->current_ital;
-              vbi->colour = vbi->current_colour;
-              vbi->row = vbi->current_row;
-              vbi->current_istext = 0;
-              vbiscreen_set_mode (vbi->vs, 1, POP_UP);
-            }
-            break;
-          case 5:              /* ROLL UP 2 */
-            if (!vbi->wanttext && vbi->current_chan == vbi->chan &&
-                !bottom == vbi->wanttop) {
-              if (vbi->verbose)
-                fprintf (stderr, "Roll-Up 2 (RU2)\n");
-              vbi->indent = vbi->current_indent;
-              vbi->ital = vbi->current_ital;
-              vbi->colour = vbi->current_colour;
-              vbi->row = vbi->current_row;
-              vbi->current_istext = 0;
-              vbiscreen_set_mode (vbi->vs, 1, ROLL_2);
-            }
-            break;
-          case 6:              /* ROLL UP 3 */
-            if (!vbi->wanttext && vbi->current_chan == vbi->chan &&
-                !bottom == vbi->wanttop) {
-              if (vbi->verbose)
-                fprintf (stderr, "Roll-Up 3 (RU3)\n");
-              vbi->indent = vbi->current_indent;
-              vbi->ital = vbi->current_ital;
-              vbi->colour = vbi->current_colour;
-              vbi->row = vbi->current_row;
-              vbi->current_istext = 0;
-              vbiscreen_set_mode (vbi->vs, 1, ROLL_3);
-            }
-            break;
-          case 7:              /* ROLL UP 4 */
-            if (!vbi->wanttext && vbi->current_chan == vbi->chan &&
-                !bottom == vbi->wanttop) {
-              if (vbi->verbose)
-                fprintf (stderr, "Roll-Up 4 (RU4)\n");
-              vbi->indent = vbi->current_indent;
-              vbi->ital = vbi->current_ital;
-              vbi->colour = vbi->current_colour;
-              vbi->row = vbi->current_row;
-              vbi->current_istext = 0;
-              vbiscreen_set_mode (vbi->vs, 1, ROLL_4);
-            }
-            break;
-          case 9:              /* PAINT-ON */
-            if (!vbi->wanttext && vbi->current_chan == vbi->chan &&
-                !bottom == vbi->wanttop) {
-              if (vbi->verbose)
-                fprintf (stderr, "Paint-On\n");
-              vbi->indent = vbi->current_indent;
-              vbi->ital = vbi->current_ital;
-              vbi->colour = vbi->current_colour;
-              vbi->row = vbi->current_row;
-              vbi->current_istext = 0;
-              vbiscreen_set_mode (vbi->vs, 1, PAINT_ON);
-            }
-            break;
-          case 10:             /* TEXT */
-            if (vbi->wanttext && vbi->current_chan == vbi->chan &&
-                !bottom == vbi->wanttop) {
-              if (vbi->verbose)
-                fprintf (stderr, "Text Restart\n");
-              vbi->indent = vbi->current_indent;
-              vbi->ital = vbi->current_ital;
-              vbi->colour = vbi->current_colour;
-              vbi->row = vbi->current_row;
-              vbi->current_istext = 1;
-              vbiscreen_set_mode (vbi->vs, 0, 0);
-            }
-            break;
-          case 11:             /* TEXT */
-            if (vbi->wanttext && vbi->current_chan == vbi->chan &&
-                !bottom == vbi->wanttop) {
-              if (vbi->verbose)
-                fprintf (stderr, "Resume Text Display\n");
-              vbi->indent = vbi->current_indent;
-              vbi->ital = vbi->current_ital;
-              vbi->colour = vbi->current_colour;
-              vbi->row = vbi->current_row;
-              vbi->current_istext = 1;
-              vbiscreen_set_mode (vbi->vs, 0, 0);
-            }
-            break;
-          default:             /* impossible */
-            break;
-        }
-        break;
-      case 1:
-        if (!vbi->initialised)
-          return 0;
-        if (!bottom && vbi->lastcode == ((b1 << 8) | b2)) {
-          vbi->lastcount = (vbi->lastcount + 1) % 2;
-        }
-        if (!bottom == vbi->wanttop && vbi->current_chan == vbi->chan &&
-            vbi->current_istext == vbi->wanttext) {
-          if (vbi->verbose)
-            fprintf (stderr, "Backspace\n");
-          vbiscreen_backspace (vbi->vs);
-        }
-        break;
-      case 2:
-      case 3:
-        if (!vbi->initialised)
-          return 0;
-        fprintf (stderr, "Reserved\n");
-        break;
-      case 4:
-        if (!vbi->initialised)
-          return 0;
-        if (!bottom && vbi->lastcode == ((b1 << 8) | b2)) {
-          vbi->lastcount = (vbi->lastcount + 1) % 2;
-        }
-        if (!bottom == vbi->wanttop && vbi->current_chan == vbi->chan &&
-            vbi->current_istext == vbi->wanttext) {
-          if (vbi->verbose)
-            fprintf (stderr, "Delete to End of Row\n");
-          vbiscreen_delete_to_end (vbi->vs);
-        }
-        break;
-      case 8:
-        if (!vbi->initialised)
-          return 0;
-        if (vbi->verbose)
-          fprintf (stderr, "Flash On\n");
-        break;
-      case 12:
-      case 13:
-      case 14:
-      case 15:
-        if (!vbi->initialised)
-          return 0;
-        if (!bottom && vbi->lastcode == ((b1 << 8) | b2)) {
-          vbi->lastcount = (vbi->lastcount + 1) % 2;
-          return 1;
-        }
-
-        switch (code) {
-          case 12:
-            /* Show buffer 1, Fill buffer 2 */
-            if (!bottom == vbi->wanttop &&
-                vbi->current_chan == vbi->chan &&
-                vbi->current_istext == vbi->wanttext) {
-              if (vbi->verbose)
-                fprintf (stderr, "Erase Displayed Memory\n");
-              vbiscreen_erase_displayed (vbi->vs);
-            }
-            break;
-          case 13:
-            if (!bottom == vbi->wanttop &&
-                vbi->current_chan == vbi->chan &&
-                vbi->current_istext == vbi->wanttext) {
-              if (vbi->verbose)
-                fprintf (stderr, "Carriage Return\n");
-              vbiscreen_carriage_return (vbi->vs);
-            }
-            break;
-          case 14:
-            if (!bottom == vbi->wanttop &&
-                vbi->current_chan == vbi->chan &&
-                vbi->current_istext == vbi->wanttext) {
-              if (vbi->verbose)
-                fprintf (stderr, "Erase Non-Displayed\n");
-              vbiscreen_erase_non_displayed (vbi->vs);
-            }
-            break;
-          case 15:
-            /* Show buffer 2, Fill Buffer 1 */
-            if (!bottom == vbi->wanttop &&
-                vbi->current_chan == vbi->chan &&
-                vbi->current_istext == vbi->wanttext) {
-              if (vbi->verbose)
-                fprintf (stderr, "End Of Caption\n");
-              vbiscreen_end_of_caption (vbi->vs);
-            }
-            break;
-          default:             /* impossible */
-            return 0;
-            break;
-        }
-        break;
-      default:                 /* Impossible */
-        return 0;
-        break;
-    }
-
-    if (vbi->lastcode != ((b1 << 8) | b2)) {
-      vbi->lastcount = 0;
-    }
-
-    vbi->lastcode = (b1 << 8) | b2;
-    return 1;
-  }
-
-  if (bottom && xds_decode (vbi, b1, b2)) {
-    return 1;
-  }
-
-  if (!vbi->enabled)
-    return 0;
-
-  vbi->lastcode = 0;
-  vbi->lastcount = 0;
-
-  if (!vbi->initialised)
-    return 0;
-
-  if (!bottom != vbi->wanttop || vbi->current_chan != vbi->chan ||
-      vbi->current_istext != vbi->wanttext) {
-    return 0;
-  }
-
-  if (b1 == 0x11 || b1 == 0x19 ||
-      b1 == 0x12 || b1 == 0x13 || b1 == 0x1A || b1 == 0x1B) {
-    switch (b1) {
-      case 0x1A:
-      case 0x12:
-        /* use extcode1 */
-        if (b1 > 31 && b2 > 31 && b1 <= 0x3F && b2 <= 0x3F)
-          if (vbi->verbose)
-            fprintf (stderr, "char %d (%c),  char %d (%c)\n", b1,
-                extcode1[b1 - 32], b2, extcode1[b2 - 32]);
-
-        break;
-      case 0x13:
-      case 0x1B:
-        /* use extcode2 */
-        if (b1 > 31 && b2 > 31 && b1 <= 0x3F && b2 <= 0x3F)
-          if (vbi->verbose)
-            fprintf (stderr, "char %d (%c),  char %d (%c)\n", b1,
-                extcode2[b1 - 32], b2, extcode2[b2 - 32]);
-
-        break;
-      case 0x11:
-      case 0x19:
-        /* use wcode */
-        if (b1 > 31 && b2 > 31 && b1 <= 0x3F && b2 <= 0x3F)
-          if (vbi->verbose)
-            fprintf (stderr, "char %d (%c),  char %d (%c)\n", b1,
-                wccode[b1 - 32], b2, wccode[b2 - 32]);
-
-        break;
-      default:
-        break;
-    }
-  } else if (b1) {
-    /* use ccode */
-    if (b1 < 32)
-      b1 = 32;
-    if (b2 < 32)
-      b2 = 32;
-    if (vbi->verbose)
-      fprintf (stderr, "vbidata: data: %c %c\n", ccode[b1 - 32],
-          ccode[b2 - 32]);
-    vbiscreen_print (vbi->vs, ccode[b1 - 32], ccode[b2 - 32]);
-  }
-
-
-  return 1;
-}                               /* Process16b */
-
-int
-ProcessLine (vbidata_t * vbi, unsigned char *s, int bottom)
-{
-  int w1;
-
-  /*char *outbuf = NULL; */
-
-  if (!vbi)
-    return 0;
-
-  w1 = ccdecode (s);
-
-  return Process16b (vbi, bottom, w1);
-}                               /* ProcessLine */
-
-
-
-vbidata_t *
-vbidata_new_file (const char *filename, vbiscreen_t * vs,
-    /*tvtime_osd_t* osd, */ int verbose)
-{
-  vbidata_t *vbi = (vbidata_t *) malloc (sizeof (vbidata_t));
-
-  if (!vbi) {
-    return 0;
-  }
-
-  vbi->fd = open (filename, O_RDONLY);
-  if (vbi->fd < 0) {
-    fprintf (stderr, "vbidata: Can't open %s: %s\n",
-        filename, strerror (errno));
-    free (vbi);
-    return 0;
-  }
-
-  vbi->vs = vs;
-  /*vbi->osd = osd; */
-  vbi->verbose = verbose;
-
-  vbidata_reset (vbi);
-
-  return vbi;
-}
-
-vbidata_t *
-vbidata_new_line (vbiscreen_t * vs, int verbose)
-{
-  vbidata_t *vbi = (vbidata_t *) malloc (sizeof (vbidata_t));
-
-  if (!vbi) {
-    return 0;
-  }
-
-  vbi->vs = vs;
-  /*vbi->osd = osd; */
-  vbi->verbose = verbose;
-
-  vbidata_reset (vbi);
-
-  return vbi;
-}
-
-void
-vbidata_delete (vbidata_t * vbi)
-{
-  if (!vbi)
-    return;
-  if (vbi->fd != 0) {
-    close (vbi->fd);
-  }
-  free (vbi);
-}
-
-void
-vbidata_reset (vbidata_t * vbi)
-{
-  if (!vbi)
-    return;
-
-  vbi->wanttop = 0;
-  vbi->wanttext = 0;
-  vbi->colour = 0xFFFFFFFFU;
-  vbi->row = 0;
-
-  vbi->ital = 0;
-  vbi->indent = 0;
-  vbi->ul = 0;
-
-  vbi->chan = 0;
-
-  vbi->initialised = 0;
-  vbi->enabled = 0;
-
-  memset (vbi->program_desc, 0, 8 * sizeof (char *));
-  vbi->program_name = NULL;
-  vbi->network_name = NULL;
-  vbi->call_letters = NULL;
-  vbi->rating = NULL;
-  vbi->program_type = NULL;
-
-  vbi->start_day = 0;
-  vbi->start_month = 0;
-  vbi->start_min = 0;
-  vbi->start_hour = 0;
-  vbi->length_hour = 0;
-  vbi->length_min = 0;
-  vbi->length_elapsed_hour = 0;
-  vbi->length_elapsed_min = 0;
-  vbi->length_elapsed_sec = 0;
-
-  /*
-     tvtime_osd_set_network_call( vbi->osd, "" );
-     tvtime_osd_set_network_name( vbi->osd, "" );
-     tvtime_osd_set_show_name( vbi->osd, "" );
-     tvtime_osd_set_show_rating( vbi->osd, "" );
-     tvtime_osd_set_show_start( vbi->osd, "" );
-     tvtime_osd_set_show_length( vbi->osd, "" );
-   */
-
-
-
-  vbi->lastcode = 0;
-  vbi->lastcount = 0;
-  vbi->xds_packet[0] = 0;
-  vbi->xds_cursor = 0;
-  vbiscreen_reset (vbi->vs);
-}
-
-void
-vbidata_set_verbose (vbidata_t * vbi, int verbose)
-{
-  vbi->verbose = verbose;
-}
-
-void
-vbidata_capture_mode (vbidata_t * vbi, int mode)
-{
-  if (!vbi)
-    return;
-  switch (mode) {
-    case CAPTURE_OFF:
-      vbi->enabled = 0;
-      break;
-    case CAPTURE_CC1:
-      vbi->wanttop = 1;
-      vbi->wanttext = 0;
-      vbi->chan = 0;
-      vbi->enabled = 1;
-      break;
-    case CAPTURE_CC2:
-      vbi->wanttop = 1;
-      vbi->wanttext = 0;
-      vbi->chan = 1;
-      vbi->enabled = 1;
-      break;
-    case CAPTURE_CC3:
-      vbi->wanttop = 0;
-      vbi->wanttext = 0;
-      vbi->chan = 0;
-      vbi->enabled = 1;
-      break;
-    case CAPTURE_CC4:
-      vbi->wanttop = 0;
-      vbi->wanttext = 0;
-      vbi->chan = 1;
-      vbi->enabled = 1;
-      break;
-    case CAPTURE_T1:
-      vbi->wanttop = 1;
-      vbi->wanttext = 1;
-      vbi->chan = 0;
-      vbi->enabled = 1;
-      break;
-    case CAPTURE_T2:
-      vbi->wanttop = 1;
-      vbi->wanttext = 1;
-      vbi->chan = 1;
-      vbi->enabled = 1;
-      break;
-    case CAPTURE_T3:
-      vbi->wanttop = 0;
-      vbi->wanttext = 1;
-      vbi->chan = 0;
-      vbi->enabled = 1;
-      break;
-    case CAPTURE_T4:
-      vbi->wanttop = 0;
-      vbi->wanttext = 1;
-      vbi->chan = 1;
-      vbi->enabled = 1;
-      break;
-    default:
-      vbi->enabled = 0;
-      break;
-  }
-}
-
-void
-vbidata_process_frame (vbidata_t * vbi, int printdebug)
-{
-  if (read (vbi->fd, vbi->buf, 65536) < 65536) {
-    fprintf (stderr, "error, can't read vbi data.\n");
-    return;
-  }
-
-  ProcessLine (vbi, &vbi->buf[DO_LINE * 2048], 0);
-  ProcessLine (vbi, &vbi->buf[(16 + DO_LINE) * 2048], 1);
-}
-
-void
-vbidata_process_line (vbidata_t * vbi, unsigned char *s, int bottom)
-{
-  ProcessLine (vbi, s, bottom);
-}
-
-void
-vbidata_process_16b (vbidata_t * vbi, int bottom, int w)
-{
-  Process16b (vbi, bottom, w);
-}
diff --git a/gst/vbidec/vbidata.h b/gst/vbidec/vbidata.h
deleted file mode 100644 (file)
index c304533..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2002 Billy Biggs <vektor@dumbterm.net>.
- * Copyright (c) 2002 Doug Bell <drbell@users.sourceforge.net>
- *
- * CC code from Nathan Laredo's ccdecode.
- * Lots of 'hey what does this mean?' code from
- * Billy Biggs and Doug Bell, like all the crap with
- * XDS and stuff.  Some help from Zapping's vbi library by
- * Michael H. Schimek and others, released under the GPL.
- *
- * Modified and adapted to GStreamer by
- * David I. Lehn <dlehn@users.sourceforge.net>
- *
- * 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
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef VBIDATA_H_INCLUDED
-#define VBIDATA_H_INCLUDED
-
-#include "vbiscreen.h"
-/*#include "tvtimeosd.h"*/
-
-typedef struct vbidata_s vbidata_t;
-
-#define CAPTURE_OFF 0
-#define CAPTURE_CC1 1
-#define CAPTURE_CC2 2
-#define CAPTURE_CC3 4
-#define CAPTURE_CC4 5
-#define CAPTURE_T1  6
-#define CAPTURE_T2  7
-#define CAPTURE_T3  8
-#define CAPTURE_T4  9
-
-vbidata_t *vbidata_new_file( const char *filename, vbiscreen_t *vs, 
-                        /*tvtime_osd_t* osd,*/ int verbose  );
-vbidata_t *vbidata_new_line( vbiscreen_t *vs, int verbose  );
-
-void vbidata_delete( vbidata_t *vbi );
-void vbidata_reset( vbidata_t *vbi );
-void vbidata_set_verbose( vbidata_t *vbi, int verbose );
-void vbidata_capture_mode( vbidata_t *vbi, int mode );
-void vbidata_process_frame( vbidata_t *vbi, int printdebug );
-void vbidata_process_line( vbidata_t *vbi, unsigned char *s, int bottom );
-void vbidata_process_16b( vbidata_t *vbi, int bottom, int w );
-
-#endif /* VBIDATA_H_INCLUDED */
diff --git a/gst/vbidec/vbiscreen.c b/gst/vbidec/vbiscreen.c
deleted file mode 100644 (file)
index 52e91e0..0000000
+++ /dev/null
@@ -1,825 +0,0 @@
-/*
- * Copyright (c) 2002 Billy Biggs <vektor@dumbterm.net>.
- * Copyright (c) 2002 Doug Bell <drbell@users.sourceforge.net>.
- *
- * Modified and adapted to GStreamer by
- * David I. Lehn <dlehn@users.sourceforge.net>
- *
- * 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
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-/*#include "osdtools.h"*/
-/*#include "speedy.h"*/
-#include <glib.h>
-#include "vbiscreen.h"
-#include "gstvbidec.h"
-
-#define ROLL_2      6
-#define ROLL_3      7
-#define ROLL_4      8
-#define POP_UP      9
-#define PAINT_ON    10
-
-
-#define NUM_LINES  15
-#define ROWS       15
-#define COLS       32
-#define FONT_SIZE  20
-
-typedef struct osd_string_s osd_string_t;
-struct osd_string_s
-{
-  int width;
-  int height;
-  int r, g, b;
-  int visible;
-  GstVBIDec *vbidec;
-};
-
-osd_string_t *
-osd_string_new (char *c, int s, int w, int h, int a, void *user_data)
-{
-  osd_string_t *os;
-
-  os = (osd_string_t *) malloc (sizeof (osd_string_t));
-  if (!os)
-    return NULL;
-  os->width = 0;
-  os->height = 0;
-  os->r = os->g = os->b = 0;
-  os->visible = 1;
-  os->vbidec = (GstVBIDec *) user_data;
-  return os;
-}
-
-void
-osd_string_show_text (osd_string_t * os, char *s, int len)
-{
-  /* FIXME: just print data when it gets here */
-  if (len > 0) {
-    gst_vbidec_show_text (os->vbidec, s, len);
-  }
-}
-
-int
-osd_string_get_height (osd_string_t * os)
-{
-  return os->height;
-}
-
-int
-osd_string_get_width (osd_string_t * os)
-{
-  return os->width;
-}
-
-void
-osd_string_delete (osd_string_t * os)
-{
-  free (os);
-}
-
-void
-osd_string_set_colour_rgb (osd_string_t * os, int r, int g, int b)
-{
-  os->r = r;
-  os->g = g;
-  os->b = b;
-}
-
-void
-blit_colour_packed422_scanline (unsigned char *d, int w, int luma, int cb,
-    int cr)
-{
-}
-
-int
-osd_string_visible (osd_string_t * os)
-{
-  return os->visible;
-}
-
-void
-osd_string_composite_packed422_scanline (osd_string_t * os, unsigned char *a,
-    unsigned char *b, int w, int x, int y)
-{
-}
-
-struct vbiscreen_s
-{
-
-  osd_string_t *line[ROWS];
-
-  char buffers[ROWS * COLS * 2];
-  char text[2 * ROWS * COLS];
-  char hiddenbuf[COLS];
-  char paintbuf[ROWS * COLS];
-
-  unsigned int fgcolour;
-  unsigned int bgcolour;
-  int bg_luma, bg_cb, bg_cr;
-
-  int frame_width;
-  int frame_height;
-  int frame_aspect;
-
-  int x, y;                     /* where to draw console */
-  int width, height;            /* the size box we have to draw in */
-  int rowheight, charwidth;
-
-  int curx, cury;               /* cursor position */
-  int rows, cols;               /* 32 cols 15 rows */
-  int captions, style;          /* CC (1) or Text (0), RU2 RU3 RU4 POP_UP PAINT_ON */
-  int first_line;               /* where to start drawing */
-  int curbuffer;
-  int top_of_screen;            /* a pointer into line[] */
-  int indent;
-  int got_eoc;
-  int scroll;
-
-  char *fontfile;
-  int fontsize;
-  int verbose;
-
-  void *user_data;
-};
-
-vbiscreen_t *
-vbiscreen_new (int video_width, int video_height,
-    double video_aspect, int verbose, void *user_data)
-{
-  int i = 0, fontsize = FONT_SIZE;
-  vbiscreen_t *vs = (vbiscreen_t *) malloc (sizeof (struct vbiscreen_s));
-
-  if (!vs) {
-    return NULL;
-  }
-
-  vs->verbose = verbose;
-  vs->x = 0;
-  vs->y = 0;
-  vs->frame_width = video_width;
-  vs->frame_height = video_height;
-  vs->frame_aspect = video_aspect;
-  vs->curx = 0;
-  vs->cury = 0;
-  vs->fgcolour = 0xFFFFFFFFU;   /* white */
-  vs->bgcolour = 0xFF000000U;   /* black */
-  vs->bg_luma = 16;
-  vs->bg_cb = 128;
-  vs->bg_cr = 128;
-  vs->rows = ROWS;
-  vs->cols = COLS;
-  /*vs->fontfile = DATADIR "/FreeMonoBold.ttf"; */
-  vs->fontfile = NULL;
-  vs->fontsize = fontsize;
-  vs->width = video_width;
-  vs->height = video_height;
-  vs->first_line = 0;
-  vs->captions = 0;
-  vs->style = 0;
-  vs->curbuffer = 0;
-  vs->top_of_screen = 0;
-  vs->indent = 0;
-  memset (vs->buffers, 0, 2 * COLS * ROWS);
-  memset (vs->hiddenbuf, 0, COLS);
-  memset (vs->paintbuf, 0, ROWS * COLS);
-  vs->scroll = 0;
-
-  vs->user_data = user_data;
-
-  vs->line[0] = osd_string_new (vs->fontfile, fontsize, video_width,
-      video_height, video_aspect, user_data);
-
-  if (!vs->line[0]) {
-    vs->fontfile = "./FreeMonoBold.ttf";
-
-    vs->line[0] = osd_string_new (vs->fontfile, fontsize,
-        video_width, video_height, video_aspect, user_data);
-  }
-
-  if (!vs->line[0]) {
-    fprintf (stderr, "vbiscreen: Could not find my font (%s)!\n", vs->fontfile);
-    vbiscreen_delete (vs);
-    return NULL;
-  }
-
-  osd_string_show_text (vs->line[0], "W", 0);
-  vs->rowheight = osd_string_get_height (vs->line[0]);
-  vs->charwidth = osd_string_get_width (vs->line[0]);
-  osd_string_delete (vs->line[0]);
-
-  for (i = 0; i < ROWS; i++) {
-    vs->line[i] = osd_string_new (vs->fontfile, fontsize,
-        video_width, video_height, video_aspect, user_data);
-    if (!vs->line[i]) {
-      fprintf (stderr, "vbiscreen: Could not allocate a line.\n");
-      vbiscreen_delete (vs);
-      return NULL;
-    }
-    osd_string_set_colour_rgb (vs->line[i],
-        (vs->fgcolour & 0xff0000) >> 16,
-        (vs->fgcolour & 0xff00) >> 8, (vs->fgcolour & 0xff));
-    osd_string_show_text (vs->line[i], " ", 0);
-  }
-  memset (vs->text, 0, 2 * ROWS * COLS);
-  return vs;
-}
-
-void
-blank_screen (vbiscreen_t * vs)
-{
-  int i;
-
-  if (vs->verbose)
-    fprintf (stderr, "in blank\n");
-  for (i = 0; i < ROWS; i++) {
-    osd_string_show_text (vs->line[i], " ", 0);
-  }
-}
-
-void
-clear_screen (vbiscreen_t * vs)
-{
-  int base, i;
-
-  if (!vs)
-    return;
-
-  base = vs->top_of_screen * COLS;
-  for (i = 0; i < ROWS * COLS; i++) {
-    vs->text[base] = 0;
-    base++;
-    base %= 2 * ROWS * COLS;
-  }
-  blank_screen (vs);
-}
-
-void
-clear_hidden_roll (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  memset (vs->hiddenbuf, 0, COLS);
-}
-
-void
-clear_hidden_pop (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  memset (vs->buffers + vs->curbuffer * COLS * ROWS, 0, COLS * ROWS);
-}
-
-void
-clear_hidden_paint (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  memset (vs->paintbuf, 0, COLS * ROWS);
-}
-
-void
-clear_displayed_pop (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  memset (vs->buffers + (vs->curbuffer ^ 1) * COLS * ROWS, 0, COLS * ROWS);
-}
-
-void
-vbiscreen_dump_screen_text (vbiscreen_t * vs)
-{
-  int i, offset;
-
-  if (!vs)
-    return;
-  offset = vs->top_of_screen * COLS;
-
-  fprintf (stderr, "\n   0123456789abcdefghij012345678901");
-  for (i = 0; i < ROWS * COLS; i++) {
-    if (!(i % COLS))
-      fprintf (stderr, "\n%.2d ", i / COLS);
-    fprintf (stderr, "%c", vs->text[offset] ? vs->text[offset] : ' ');
-    offset++;
-    offset %= 2 * ROWS * COLS;
-  }
-  fprintf (stderr, "\n   0123456789abcdefghij012345678901\n   ");
-  for (i = 0; i < COLS; i++) {
-    fprintf (stderr, "%c", vs->text[offset] ? vs->text[offset] : ' ');
-    offset++;
-    offset %= 2 * ROWS * COLS;
-  }
-  fprintf (stderr, "\n   0123456789abcdefghij012345678901\n");
-}
-
-int
-update_row_x (vbiscreen_t * vs, int row)
-{
-  char text[COLS + 1];
-  int i, j, haschars = 0, base;
-
-  if (!vs)
-    return 0;
-
-  text[COLS] = 0;
-  base = ((vs->top_of_screen + row) % (2 * ROWS)) * COLS;
-  for (j = 0, i = base; i < base + COLS; i++, j++) {
-    if (vs->text[i]) {
-      text[j] = vs->text[i];
-      haschars = 1;
-    } else {
-      text[j] = ' ';
-    }
-  }
-
-  osd_string_set_colour_rgb (vs->line[row],
-      (vs->fgcolour & 0xff0000) >> 16,
-      (vs->fgcolour & 0xff00) >> 8, (vs->fgcolour & 0xff));
-  if (!haschars)
-    osd_string_show_text (vs->line[row], " ", 0);
-  else
-    osd_string_show_text (vs->line[row], text, 51);
-
-  return haschars;
-}
-
-void
-update_row (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-
-  update_row_x (vs, vs->cury);
-  //vbiscreen_dump_screen_text( vs );
-}
-
-void
-update_all_rows (vbiscreen_t * vs)
-{
-  int row = 0;
-
-  if (!vs)
-    return;
-
-  for (row = 0; row < ROWS; row++) {
-    update_row_x (vs, row);
-  }
-  //vbiscreen_dump_screen_text( vs );
-}
-
-void
-vbiscreen_delete (vbiscreen_t * vs)
-{
-  free (vs);
-}
-
-void
-copy_row_to_screen (vbiscreen_t * vs, char *row)
-{
-  int base, i, j;
-
-  base = ((vs->top_of_screen + vs->cury) % (2 * ROWS)) * COLS;
-  for (j = 0, i = base; i < base + COLS; j++, i++) {
-    vs->text[i] = row[j];
-  }
-  update_row (vs);
-}
-
-void
-scroll_screen (vbiscreen_t * vs)
-{
-  int start_row;
-
-  if (!vs || !vs->captions || !vs->style || vs->style > ROLL_4)
-    return;
-
-  start_row = (vs->first_line + vs->top_of_screen) % (2 * ROWS);
-  if (vs->verbose)
-    fprintf (stderr, "start row : %d first line %d\n ", start_row,
-        vs->first_line);
-
-  /* zero out top row */
-  memset ((char *) (vs->text + start_row * COLS), 0, COLS);
-  vs->top_of_screen = (vs->top_of_screen + 1) % (2 * ROWS);
-  vs->curx = vs->indent;
-  update_all_rows (vs);
-  copy_row_to_screen (vs, vs->hiddenbuf);
-  clear_hidden_roll (vs);
-  vs->scroll = 26;
-}
-
-void
-vbiscreen_set_verbose (vbiscreen_t * vs, int verbose)
-{
-  vs->verbose = verbose;
-}
-
-void
-vbiscreen_new_caption (vbiscreen_t * vs, int indent, int ital,
-    unsigned int colour, int row)
-{
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "indent: %d, ital: %d, colour: 0x%x, row: %d\n", indent,
-        ital, colour, row);
-
-  if (0 && vs->captions && vs->style <= ROLL_4 && vs->style) {
-    if (row != vs->cury + 1) {
-      vs->cury = row - 1;
-      clear_hidden_roll (vs);
-    } else {
-//            scroll_screen( vs );
-    }
-  }
-
-  if (vs->style > ROLL_4) {
-    vs->cury = ((row > 0) ? row - 1 : 0);
-  }
-
-  vs->fgcolour = colour;
-  vs->indent = indent;
-  vs->curx = indent;
-}
-
-void
-vbiscreen_set_mode (vbiscreen_t * vs, int caption, int style)
-{
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in set mode\n");
-
-  if (vs->verbose) {
-    fprintf (stderr, "Caption: %d ", caption);
-    switch (style) {
-      case ROLL_2:
-        fprintf (stderr, "ROLL 2\n");
-        break;
-      case ROLL_3:
-        fprintf (stderr, "ROLL 3\n");
-        break;
-      case ROLL_4:
-        fprintf (stderr, "ROLL 4\n");
-        break;
-      case POP_UP:
-        fprintf (stderr, "POP UP\n");
-        break;
-      case PAINT_ON:
-        fprintf (stderr, "PAINT ON\n");
-        break;
-      default:
-        break;
-    }
-  }
-  if (!caption) {
-    /* text mode */
-    vs->cury = 0;
-  } else {
-    /* captioning mode */
-    /* styles: ru2 ru3 ru4 pop paint
-     */
-    if (style != POP_UP && vs->style == POP_UP && !vs->got_eoc) {
-      /* stupid that sometimes they dont send a EOC */
-      vbiscreen_end_of_caption (vs);
-    }
-
-    switch (style) {
-      case ROLL_2:
-      case ROLL_3:
-      case ROLL_4:
-        if (vs->style == style) {
-          return;
-        }
-        vs->first_line = ROWS - (style - 4);
-
-        if (vs->verbose)
-          fprintf (stderr, "first_line %d\n", vs->first_line);
-
-        vs->cury = ROWS - 1;
-        break;
-      case POP_UP:
-        vs->got_eoc = 0;
-        break;
-      case PAINT_ON:
-        break;
-    }
-  }
-
-  vs->captions = caption;
-  vs->style = style;
-}
-
-void
-vbiscreen_tab (vbiscreen_t * vs, int cols)
-{
-  if (!vs)
-    return;
-  if (cols < 0 || cols > 3)
-    return;
-  vs->curx += cols;
-  if (vs->curx > 31)
-    vs->curx = 31;
-}
-
-void
-vbiscreen_set_colour (vbiscreen_t * vs, unsigned int col)
-{
-  if (!vs)
-    return;
-  vs->fgcolour = col;
-}
-
-void
-vbiscreen_clear_current_cell (vbiscreen_t * vs)
-{
-  vs->text[((vs->top_of_screen + vs->cury) % (2 * ROWS)) * COLS
-      + vs->curx + vs->indent] = 0;
-}
-
-void
-vbiscreen_set_current_cell (vbiscreen_t * vs, char text)
-{
-  int base;
-
-  if (!vs)
-    return;
-  base = ((vs->top_of_screen + vs->cury) % (2 * ROWS)) * COLS;
-  if (g_ascii_isprint (text))
-    vs->text[base + vs->curx + vs->indent] = text;
-  else
-    vs->text[base + vs->curx + vs->indent] = ' ';
-}
-
-void
-vbiscreen_delete_to_end (vbiscreen_t * vs)
-{
-  int i;
-
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in del to end\n");
-  for (i = vs->curx; i < COLS; i++) {
-    vbiscreen_clear_current_cell (vs);
-    vs->curx++;
-  }
-  vs->curx = COLS - 1;          /* is this right ? */
-  if (vs->captions && vs->style && vs->style != POP_UP)
-    update_row (vs);
-}
-
-void
-vbiscreen_backspace (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in backspace\n");
-  if (!vs->curx)
-    return;
-  vs->curx--;
-  vbiscreen_clear_current_cell (vs);
-  update_row (vs);
-}
-
-void
-vbiscreen_erase_displayed (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in erase disp\n");
-
-  if (vs->captions && vs->style && vs->style <= ROLL_4) {
-    clear_hidden_roll (vs);
-  }
-
-  clear_displayed_pop (vs);
-  clear_screen (vs);
-}
-
-void
-vbiscreen_erase_non_displayed (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in erase non disp\n");
-
-  if (vs->captions && vs->style == POP_UP) {
-    memset (vs->buffers + vs->curbuffer * COLS * ROWS + vs->cury * COLS, 0,
-        COLS);
-//        clear_hidden_pop( vs );
-  } else if (vs->captions && vs->style && vs->style <= ROLL_4) {
-    clear_hidden_roll (vs);
-  }
-}
-
-void
-vbiscreen_carriage_return (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in CR\n");
-  if (vs->style != POP_UP) {
-    /* not sure if this is right for text mode */
-    /* in text mode, perhaps a CR on last row clears screen and goes
-     * to (0,0) */
-    scroll_screen (vs);
-  }
-
-  /* keep cursor on bottom for rollup */
-  if (vs->captions && vs->style && vs->style <= ROLL_4)
-    vs->cury--;
-
-  vs->cury++;
-  vs->curx = 0;
-}
-
-void
-copy_buf_to_screen (vbiscreen_t * vs, char *buf)
-{
-  int base, i, j;
-
-  if (!vs)
-    return;
-
-  base = vs->top_of_screen * COLS;
-  for (j = 0, i = 0; i < ROWS * COLS; i++, j++) {
-    vs->text[base] = buf[j];
-    base++;
-    base %= 2 * ROWS * COLS;
-  }
-  update_all_rows (vs);
-}
-
-void
-vbiscreen_end_of_caption (vbiscreen_t * vs)
-{
-  /*int i; */
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in end of caption\n");
-
-  if (vs->style == PAINT_ON) {
-    copy_buf_to_screen (vs, vs->paintbuf);
-    clear_hidden_paint (vs);
-  } else if (vs->style == POP_UP) {
-    copy_buf_to_screen (vs, vs->buffers + vs->curbuffer * COLS * ROWS);
-    vs->curbuffer ^= 1;
-  }
-
-  /* to be safe? */
-  vs->curx = 0;
-  vs->cury = ROWS - 1;
-  vs->got_eoc = 1;
-}
-
-void
-vbiscreen_print (vbiscreen_t * vs, char c1, char c2)
-{
-  if (!vs)
-    return;
-  if (vs->verbose)
-    fprintf (stderr, "in print (%d, %d)[%c %c]\n", vs->curx, vs->cury, c1, c2);
-  if (vs->captions && vs->style == POP_UP) {
-    /* this all gets displayed at another time */
-    if (vs->curx != COLS - 1) {
-      *(vs->buffers + vs->curx + vs->curbuffer * ROWS * COLS +
-          vs->cury * COLS) = c1;
-      vs->curx++;
-    }
-
-    if (vs->curx != COLS - 1 && c2) {
-      *(vs->buffers + vs->curx + vs->curbuffer * ROWS * COLS +
-          vs->cury * COLS) = c2;
-      vs->curx++;
-    } else if (c2) {
-      *(vs->buffers + vs->curx + vs->curbuffer * ROWS * COLS +
-          vs->cury * COLS) = c2;
-    }
-  }
-
-  if (vs->captions && vs->style == PAINT_ON) {
-    if (vs->curx != COLS - 1) {
-      vs->paintbuf[vs->curx + vs->cury * COLS] = c1;
-      vs->curx++;
-    }
-
-    if (vs->curx != COLS - 1 && c2) {
-      vs->paintbuf[vs->curx + vs->cury * COLS] = c2;
-      vs->curx++;
-    } else if (c2) {
-      vs->paintbuf[vs->curx + vs->cury * COLS] = c2;
-    }
-  }
-
-  if (vs->captions && vs->style && vs->style <= ROLL_4) {
-    if (vs->curx != COLS - 1) {
-      vs->hiddenbuf[vs->curx] = c1;
-      vs->curx++;
-    } else {
-      vs->hiddenbuf[vs->curx] = c1;
-    }
-
-    if (vs->curx != COLS - 1 && c2) {
-      vs->hiddenbuf[vs->curx] = c2;
-      vs->curx++;
-    } else if (c2) {
-      vs->hiddenbuf[vs->curx] = c2;
-    }
-  }
-}
-
-void
-vbiscreen_reset (vbiscreen_t * vs)
-{
-  if (!vs)
-    return;
-  clear_screen (vs);
-  clear_hidden_pop (vs);
-  clear_displayed_pop (vs);
-  clear_hidden_roll (vs);
-  vs->captions = 0;
-  vs->style = 0;
-}
-
-void
-vbiscreen_composite_packed422_scanline (vbiscreen_t * vs,
-    unsigned char *output, int width, int xpos, int scanline)
-{
-  int x = 0, y = 0, row = 0, index = 0;
-
-  if (!vs)
-    return;
-  if (!output)
-    return;
-  if (scanline >= vs->y && scanline < vs->y + vs->height) {
-
-    if (0 && !vs->captions)
-      blit_colour_packed422_scanline (output + (vs->x * 2), vs->width,
-          vs->bg_luma, vs->bg_cb, vs->bg_cr);
-
-    index = vs->top_of_screen * COLS;
-    x = (vs->x + vs->charwidth) & ~1;
-    for (row = 0; row < ROWS; row++) {
-      y = vs->y + row * vs->rowheight + vs->rowheight;
-      if (osd_string_visible (vs->line[row])) {
-        if (scanline >= y && scanline < y + vs->rowheight) {
-
-          int startx;
-          int strx;
-
-          startx = x - xpos;
-          strx = 0;
-
-          if (startx < 0) {
-            strx = -startx;
-            startx = 0;
-          }
-
-
-          if (startx < width) {
-
-            if (vs->captions)
-              blit_colour_packed422_scanline (output + (startx * 2),
-                  osd_string_get_width (vs->line[row]),
-                  vs->bg_luma, vs->bg_cb, vs->bg_cr);
-
-            osd_string_composite_packed422_scanline (vs->line[row],
-                output + (startx * 2),
-                output + (startx * 2), width - startx, strx, scanline - y);
-          }
-        }
-        index++;
-      }
-    }
-  }
-}
diff --git a/gst/vbidec/vbiscreen.h b/gst/vbidec/vbiscreen.h
deleted file mode 100644 (file)
index d81fb52..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2002 Billy Biggs <vektor@dumbterm.net>.
- * Copyright (c) 2002 Doug Bell <drbell@users.sourceforge.net>.
- *
- * Modified and adapted to GStreamer by
- * David I. Lehn <dlehn@users.sourceforge.net>
- *
- * 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
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef HAVE_VBISCREEN_H
-#define HAVE_VBISCREEN_H
-
-typedef struct vbiscreen_s vbiscreen_t;
-
-vbiscreen_t *vbiscreen_new( int video_width, int video_height, 
-                            double video_aspect, int verbose, void *user_data );
-void vbiscreen_delete( vbiscreen_t *vs );
-void vbiscreen_set_verbose( vbiscreen_t *vs, int verbose );
-void vbiscreen_set_mode( vbiscreen_t *vs, int caption, int style);
-void vbiscreen_new_caption( vbiscreen_t *vs, int indent, int ital,
-                            unsigned int colour, int row );
-void vbiscreen_tab( vbiscreen_t *vs, int cols );
-void vbiscreen_delete_to_end( vbiscreen_t *vs );
-void vbiscreen_backspace( vbiscreen_t *vs );
-void vbiscreen_erase_displayed( vbiscreen_t *vs );
-void vbiscreen_erase_non_displayed( vbiscreen_t *vs );
-void vbiscreen_carriage_return( vbiscreen_t *vs );
-void vbiscreen_end_of_caption( vbiscreen_t *vs );
-void vbiscreen_print( vbiscreen_t *vs, char c1, char c2 );
-void vbiscreen_composite_packed422_scanline( vbiscreen_t *vs,
-                                             unsigned char *output,
-                                             int width, int xpos, 
-                                             int scanline );
-void vbiscreen_dump_screen_text( vbiscreen_t *vs );
-void vbiscreen_reset( vbiscreen_t *vs );
-
-#endif
index 1788267..79f7924 100644 (file)
@@ -72,7 +72,6 @@ check_headers = [
   ['HAVE_SYS_UTSNAME_H', 'sys/utsname.h'],
   ['HAVE_UNISTD_H', 'unistd.h'],
   ['HAVE_WINDOWS_H', 'windows.h'],
-  ['HAVE_WININET_H', 'wininet.h'],
   ['HAVE_WINSOCK2_H', 'winsock2.h'],
   ['HAVE_WS2TCPIP_H', 'ws2tcpip.h'],
 ]
@@ -128,8 +127,6 @@ check_functions = [
 # check token HAVE_FAAC
 # check token HAVE_FAAD
 # check token HAVE_FBDEV
-# check token HAVE_FIONREAD_IN_SYS_FILIO
-# check token HAVE_FIONREAD_IN_SYS_IOCTL
 # check token HAVE_FLITE
 # check token HAVE_FLUIDSYNTH
   ['HAVE_GETPAGESIZE', 'getpagesize'],
index dcb3471..0cf9802 100644 (file)
@@ -4,8 +4,6 @@ ext/opencv/gsttemplatematch.cpp
 ext/resindvd/resindvdsrc.c
 ext/smoothstreaming/gstmssdemux.c
 ext/sndfile/gstsfdec.c
-ext/sndio/sndiosink.c
-ext/sndio/sndiosrc.c
 gst/aiff/aiffparse.c
 gst/asfmux/gstasfmux.c
 gst/camerabin2/camerabingeneral.c
@@ -16,6 +14,5 @@ gst/camerabin2/gstwrappercamerabinsrc.c
 gst/dvdspu/gstdvdspu.c
 gst-libs/gst/adaptivedemux/gstadaptivedemux.c
 gst/mpegtsdemux/mpegtsbase.c
-gst/nuvdemux/gstnuvdemux.c
 sys/dvb/gstdvbsrc.c
 sys/dvb/parsechannels.c
index 50ff92f..ee71512 100644 (file)
@@ -1,8 +1,5 @@
 ext/sndfile/gstsfsink.c
 ext/sndfile/gstsfsrc.c
-sys/dxr3/dxr3audiosink.c
-sys/dxr3/dxr3spusink.c
-sys/dxr3/dxr3videosink.c
 tests/examples/camerabin2/gst-camera2.ui
 tests/examples/uvch264/boolean_property.glade
 tests/examples/uvch264/enum_property.glade
index 4e6e581..e5aa704 100644 (file)
@@ -16,12 +16,6 @@ else
 APPLE_MEDIA_DIR=
 endif
 
-if USE_AVC
-AVC_DIR=avc
-else
-AVC_DIR=
-endif
-
 if USE_BLUEZ
 BLUEZ_DIR=bluez
 else
@@ -76,24 +70,6 @@ else
 DVB_DIR=
 endif
 
-# if USE_DXR3
-# DXR3_DIR=dxr3
-# else
-# DXR3_DIR=
-# endif
-
-if USE_LINSYS
-LINSYS_DIR=linsys
-else
-LINSYS_DIR=
-endif
-
-if USE_PVR
-PVR_DIR=pvr2d
-else
-PVR_DIR=
-endif
-
 if USE_SHM
 SHM_DIR=shm
 else
@@ -106,18 +82,6 @@ else
 OPENSLES_DIR=
 endif
 
-# if USE_QCAM
-# QCAM_DIR=qcam
-# else
-# QCAM_DIR=
-# endif
-
-if USE_WININET
-WININET_DIR=wininet
-else
-WININET_DIR=
-endif
-
 if USE_VCD
 VCD_DIR=vcd
 else
@@ -160,10 +124,10 @@ else
 MSDK_DIR=
 endif
 
-SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(KMS_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(PVR_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR) $(NVENC_DIR) $(TINYALSA_DIR) $(MSDK_DIR)
+SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTSOUND_DIR) $(WINKS_DIR) $(DVB_DIR) $(FBDEV_DIR) $(KMS_DIR) $(OPENSLES_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR) $(NVENC_DIR) $(TINYALSA_DIR) $(MSDK_DIR)
 
-DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia avc bluez d3dvideosink decklink directsound dvb linsys fbdev kms dshowdecwrapper dshowsrcwrapper dshowvideosink \
-               opensles pvr2d shm uvch264 vcd vdpau wasapi wininet winks winscreencap \
+DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia bluez d3dvideosink decklink directsound dvb fbdev kms dshowdecwrapper dshowsrcwrapper dshowvideosink \
+               opensles shm uvch264 vcd vdpau wasapi winks winscreencap \
                nvenc tinyalsa msdk
 
 include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/sys/avc/Makefile.am b/sys/avc/Makefile.am
deleted file mode 100644 (file)
index dd61d9e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-plugin_LTLIBRARIES = libgstavc.la
-
-libgstavc_la_SOURCES = gstavcplugin.cpp gstavcsrc.cpp
-libgstavc_la_CPPFLAGS = \
-       $(GST_PLUGINS_BAD_CXXFLAGS) \
-       $(GST_PLUGINS_BASE_CXXFLAGS) \
-       $(GST_CXXFLAGS) \
-       -framework AVCVideoServices \
-       -Wno-deprecated-declarations
-libgstavc_la_LIBADD =  \
-       $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) \
-       -lgstinterfaces-$(GST_API_VERSION) \
-       $(GST_BASE_LIBS) \
-       $(GST_LIBS)
-
-libgstavc_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-libgstavc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) \
-       -Wl,-framework -Wl,AVCVideoServices \
-       -Wl,-framework -Wl,Cocoa \
-       -Wl,-framework -Wl,QuickTime
-
-noinst_HEADERS = gstavcsrc.h
-
diff --git a/sys/avc/gstavcplugin.cpp b/sys/avc/gstavcplugin.cpp
deleted file mode 100644 (file)
index 82ba935..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 David Schleef <ds@entropywave.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Suite 500,
- * Boston, MA 02110-1335, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include "gstavcsrc.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-
-  gst_element_register (plugin, "avcsrc", GST_RANK_NONE,
-      gst_avc_src_get_type ());
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    avcsrc,
-    "AVC Video Services plugin",
-    plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/avc/gstavcsrc.cpp b/sys/avc/gstavcsrc.cpp
deleted file mode 100644 (file)
index 09d3f05..0000000
+++ /dev/null
@@ -1,423 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 David Schleef <ds@entropywave.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Suite 500,
- * Boston, MA 02110-1335, USA.
- */
-/**
- * SECTION:element-gstavcsrc
- *
- * The avcsrc element captures video from an OS/X AVC Video Services
- * devices, typically a FireWire camera.
- *
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch -v avcsrc ! decodebin ! osxvideosink
- * ]|
- *
- * This pipeline captures from an AVC source, decodes the stream (either
- * DV or HDV), and displays the video.
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <AVCVideoServices/AVCVideoServices.h>
-using namespace AVS;
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesrc.h>
-#include "gstavcsrc.h"
-
-GST_DEBUG_CATEGORY_STATIC (gst_avc_src_debug_category);
-#define GST_CAT_DEFAULT gst_avc_src_debug_category
-
-/* prototypes */
-
-
-static void gst_avc_src_set_property (GObject * object,
-    guint property_id, const GValue * value, GParamSpec * pspec);
-static void gst_avc_src_get_property (GObject * object,
-    guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_avc_src_dispose (GObject * object);
-static void gst_avc_src_finalize (GObject * object);
-
-static GstCaps *gst_avc_src_get_caps (GstBaseSrc * src);
-static gboolean gst_avc_src_start (GstBaseSrc * src);
-static gboolean gst_avc_src_stop (GstBaseSrc * src);
-static gboolean gst_avc_src_is_seekable (GstBaseSrc * src);
-static gboolean gst_avc_src_unlock (GstBaseSrc * src);
-static gboolean gst_avc_src_event (GstBaseSrc * src, GstEvent * event);
-static GstFlowReturn
-gst_avc_src_create (GstBaseSrc * src, guint64 offset, guint size,
-    GstBuffer ** buf);
-static gboolean gst_avc_src_query (GstBaseSrc * src, GstQuery * query);
-static gboolean gst_avc_src_unlock_stop (GstBaseSrc * src);
-
-enum
-{
-  PROP_0
-};
-
-/* pad templates */
-
-static GstStaticPadTemplate gst_avc_src_src_template =
-    GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS
-    ("video/dv,systemstream=true;video/mpegts,systemstream=true,packetsize=188")
-    );
-
-
-/* class initialization */
-
-#define DEBUG_INIT(bla) \
-  GST_DEBUG_CATEGORY_INIT (gst_avc_src_debug_category, "avcsrc", 0, \
-      "debug category for avcsrc element");
-
-GST_BOILERPLATE_FULL (GstAVCSrc, gst_avc_src, GstBaseSrc,
-    GST_TYPE_BASE_SRC, DEBUG_INIT);
-
-static void
-gst_avc_src_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class, &gst_avc_src_src_template);
-
-  gst_element_class_set_static_metadata (element_class,
-      "AVC Video Services Source", "Video/Source",
-      "Captures DV or HDV video from Firewire port",
-      "David Schleef <ds@entropywave.com>");
-}
-
-static void
-gst_avc_src_class_init (GstAVCSrcClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
-
-  gobject_class->set_property = gst_avc_src_set_property;
-  gobject_class->get_property = gst_avc_src_get_property;
-  gobject_class->dispose = gst_avc_src_dispose;
-  gobject_class->finalize = gst_avc_src_finalize;
-  base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_avc_src_get_caps);
-  base_src_class->start = GST_DEBUG_FUNCPTR (gst_avc_src_start);
-  base_src_class->stop = GST_DEBUG_FUNCPTR (gst_avc_src_stop);
-  base_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_avc_src_is_seekable);
-  base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_avc_src_unlock);
-  base_src_class->event = GST_DEBUG_FUNCPTR (gst_avc_src_event);
-  base_src_class->create = GST_DEBUG_FUNCPTR (gst_avc_src_create);
-  if (0)
-    base_src_class->query = GST_DEBUG_FUNCPTR (gst_avc_src_query);
-  if (0)
-    base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_avc_src_unlock_stop);
-
-}
-
-static void
-gst_avc_src_init (GstAVCSrc * avcsrc, GstAVCSrcClass * avcsrc_class)
-{
-  gst_base_src_set_live (GST_BASE_SRC (avcsrc), TRUE);
-
-  avcsrc->srcpad = gst_pad_new_from_static_template (&gst_avc_src_src_template,
-      "src");
-
-  avcsrc->queue = gst_atomic_queue_new (16);
-  avcsrc->cond = g_cond_new ();
-  avcsrc->queue_lock = g_mutex_new ();
-}
-
-void
-gst_avc_src_set_property (GObject * object, guint property_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  /* GstAVCSrc *avcsrc = GST_AVC_SRC (object); */
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_avc_src_get_property (GObject * object, guint property_id,
-    GValue * value, GParamSpec * pspec)
-{
-  /* GstAVCSrc *avcsrc = GST_AVC_SRC (object); */
-
-  switch (property_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_avc_src_dispose (GObject * object)
-{
-  /* GstAVCSrc *avcsrc = GST_AVC_SRC (object); */
-
-  /* clean up as possible.  may be called multiple times */
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_avc_src_finalize (GObject * object)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (object);
-
-  /* clean up object here */
-  gst_atomic_queue_unref (avcsrc->queue);
-  g_cond_free (avcsrc->cond);
-  g_mutex_free (avcsrc->queue_lock);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GstCaps *
-gst_avc_src_get_caps (GstBaseSrc * src)
-{
-  /* GstAVCSrc *avcsrc = GST_AVC_SRC (src); */
-
-  return gst_caps_from_string ("video/mpegts,systemstream=true,packetsize=188");
-}
-
-#define kNumCyclesInMPEGReceiverSegment 200
-#define kNumSegmentsInMPEGReceiverProgram 10
-
-void
-MPEGReceiverMessageReceivedProc (UInt32 msg, UInt32 param1, UInt32 param2,
-    void *pRefCon)
-{
-
-}
-
-IOReturn
-MyStructuredDataPushProc (UInt32 CycleDataCount,
-    MPEGReceiveCycleData * pCycleData, void *pRefCon)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (pRefCon);
-
-  if (avcsrc) {
-    UInt32 numPackets = 0;
-    for (UInt32 cycle = 0; cycle < CycleDataCount; cycle++)
-      numPackets += pCycleData[cycle].tsPacketCount;
-    GstBuffer *buffer;
-
-    buffer = gst_buffer_new_and_alloc (numPackets*kMPEG2TSPacketSize);
-
-    guint8 *data = GST_BUFFER_DATA (buffer);
-
-    for (UInt32 cycle = 0; cycle < CycleDataCount; cycle++) {
-      GST_LOG("Received cycle %lu of %lu - %lu packets (fw time %lx)",
-             cycle, CycleDataCount, pCycleData[cycle].tsPacketCount,
-             pCycleData[cycle].fireWireTimeStamp);
-      for (UInt32 sourcePacket = 0; sourcePacket < pCycleData[cycle].tsPacketCount;
-          sourcePacket++) {
-        memcpy (data,
-            pCycleData[cycle].pBuf[sourcePacket], kMPEG2TSPacketSize);
-       data += kMPEG2TSPacketSize;
-
-       avcsrc->packets_enqueued++;
-      }
-    }
-
-    gst_atomic_queue_push (avcsrc->queue, buffer);
-
-    g_mutex_lock (avcsrc->queue_lock);
-    g_cond_signal (avcsrc->cond);
-    g_mutex_unlock (avcsrc->queue_lock);
-  }
-
-  return 0;
-}
-
-static gboolean
-gst_avc_src_start (GstBaseSrc * src)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-
-  GST_DEBUG_OBJECT (avcsrc, "start");
-
-  avcsrc->unlock = FALSE;
-
-  // Create a AVCDeviceController
-  if (!avcsrc->pAVCDeviceController)
-    CreateAVCDeviceController (&avcsrc->pAVCDeviceController);
-  if (!avcsrc->pAVCDeviceController) {
-    // TODO: This should never happen (unless we've run out of memory), but we should handle it cleanly anyway
-    GST_ERROR ("Failed to create AVC device controller.");
-    return FALSE;
-  }
-
-  GST_INFO ("Created AVC device controller.");
-
-  if (avcsrc->deviceIndex >= CFArrayGetCount (avcsrc->pAVCDeviceController->avcDeviceArray)) {
-    GST_ERROR ("Failed to find AVC device %d", avcsrc->deviceIndex);
-    return FALSE;
-  }
-
-  avcsrc->pAVCDevice = (AVCDevice *)
-      CFArrayGetValueAtIndex (avcsrc->pAVCDeviceController->avcDeviceArray,
-      avcsrc->deviceIndex);
-
-  if (!avcsrc->pAVCDevice) {
-    GST_ERROR ("Failed to find AVC device %d", avcsrc->deviceIndex);
-    return FALSE;
-  }
-
-  GST_INFO ("Found device with GUID 0x%016llX\n", avcsrc->pAVCDevice->guid);
-
-  avcsrc->pAVCDevice->openDevice (nil, nil);
-
-  avcsrc->pAVCDeviceStream = avcsrc->pAVCDevice->CreateMPEGReceiverForDevicePlug (0, nil,       // We'll install the structured callback later (MyStructuredDataPushProc),
-      nil,
-      MPEGReceiverMessageReceivedProc,
-      nil,
-      nil, kNumCyclesInMPEGReceiverSegment, kNumSegmentsInMPEGReceiverProgram);
-
-  avcsrc->pAVCDeviceStream->pMPEGReceiver->registerStructuredDataPushCallback
-      (MyStructuredDataPushProc,
-      kNumCyclesInMPEGReceiverSegment, (void *) avcsrc);
-
-  avcsrc->pAVCDevice->StartAVCDeviceStream (avcsrc->pAVCDeviceStream);
-
-  return TRUE;
-}
-
-static gboolean
-gst_avc_src_stop (GstBaseSrc * src)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-  GstBuffer *buffer;
-
-  GST_DEBUG_OBJECT (avcsrc, "stop");
-
-  // Stop the stream
-  avcsrc->pAVCDevice->StopAVCDeviceStream(avcsrc->pAVCDeviceStream);
-  // Destroy the stream
-  avcsrc->pAVCDevice->DestroyAVCDeviceStream(avcsrc->pAVCDeviceStream);
-  avcsrc->pAVCDeviceStream = nil;
-
-  // Forget about the device (don't destroy it; pAVCDeviceController manages it)
-  avcsrc->pAVCDevice = nil;
-
-  GST_DEBUG("Packets enqueued = %llu", avcsrc->packets_enqueued);
-  GST_DEBUG("Packets dequeued = %llu", avcsrc->packets_dequeued);
-
-  while ((buffer = GST_BUFFER (gst_atomic_queue_pop (avcsrc->queue))) != NULL) {
-    gst_buffer_unref (buffer);
-  }
-
-  return TRUE;
-}
-
-static gboolean
-gst_avc_src_is_seekable (GstBaseSrc * src)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-
-  GST_DEBUG_OBJECT (avcsrc, "is_seekable");
-
-  return FALSE;
-}
-
-static gboolean
-gst_avc_src_unlock (GstBaseSrc * src)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-
-  GST_DEBUG_OBJECT (avcsrc, "unlock");
-
-  g_mutex_lock (avcsrc->queue_lock);
-  avcsrc->unlock = TRUE;
-  g_cond_signal (avcsrc->cond);
-  g_mutex_unlock (avcsrc->queue_lock);
-
-  return TRUE;
-}
-
-static gboolean
-gst_avc_src_event (GstBaseSrc * src, GstEvent * event)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-
-  GST_DEBUG_OBJECT (avcsrc, "event of type '%s'", GST_EVENT_TYPE_NAME(event));
-
-  GST_DEBUG("Packets enqueued = %llu, dequeued = %llu",
-           avcsrc->packets_enqueued, avcsrc->packets_dequeued);
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_avc_src_create (GstBaseSrc * src, guint64 offset, guint size,
-    GstBuffer ** buf)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-  GstBuffer *buffer;
-
-  GST_DEBUG_OBJECT (avcsrc, "create");
-
-  g_mutex_lock (avcsrc->queue_lock);
-  buffer = GST_BUFFER (gst_atomic_queue_pop (avcsrc->queue));
-  while (buffer == NULL && !avcsrc->unlock) {
-    g_cond_wait (avcsrc->cond, avcsrc->queue_lock);
-    buffer = GST_BUFFER (gst_atomic_queue_pop (avcsrc->queue));
-  }
-  g_mutex_unlock (avcsrc->queue_lock);
-
-  if (avcsrc->unlock) {
-    if (buffer)
-      gst_buffer_unref (buffer);
-    return GST_FLOW_FLUSHING;
-  }
-
-  gst_buffer_set_caps (buffer, GST_PAD_CAPS (avcsrc->srcpad));
-
-  *buf = buffer;
-
-  avcsrc->packets_dequeued++;
-
-  return GST_FLOW_OK;
-}
-
-static gboolean
-gst_avc_src_query (GstBaseSrc * src, GstQuery * query)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-
-  GST_DEBUG_OBJECT (avcsrc, "query");
-
-  return TRUE;
-}
-
-static gboolean
-gst_avc_src_unlock_stop (GstBaseSrc * src)
-{
-  GstAVCSrc *avcsrc = GST_AVC_SRC (src);
-
-  GST_DEBUG_OBJECT (avcsrc, "stop");
-
-  return TRUE;
-}
diff --git a/sys/avc/gstavcsrc.h b/sys/avc/gstavcsrc.h
deleted file mode 100644 (file)
index 81c6f1c..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 FIXME <fixme@example.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef _GST_AVC_SRC_H_
-#define _GST_AVC_SRC_H_
-
-#include <gst/base/gstbasesrc.h>
-#include <AVCVideoServices/AVCVideoServices.h>
-using namespace AVS;
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AVC_SRC   (gst_avc_src_get_type())
-#define GST_AVC_SRC(obj)   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AVC_SRC,GstAVCSrc))
-#define GST_AVC_SRC_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AVC_SRC,GstAVCSrcClass))
-#define GST_IS_AVC_SRC(obj)   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AVC_SRC))
-#define GST_IS_AVC_SRC_CLASS(obj)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AVC_SRC))
-
-typedef struct _GstAVCSrc GstAVCSrc;
-typedef struct _GstAVCSrcClass GstAVCSrcClass;
-
-struct _GstAVCSrc
-{
-  GstBaseSrc base_avcsrc;
-
-  GstPad *srcpad;
-
-  AVCDeviceController *pAVCDeviceController;
-  AVCDevice *pAVCDevice;
-  AVCDeviceStream *pAVCDeviceStream;
-  int deviceIndex;
-
-  guint64 packets_enqueued;
-  guint64 packets_dequeued;
-
-  GstAtomicQueue *queue;
-  GCond *cond;
-  GMutex *queue_lock;
-  gboolean unlock;
-};
-
-struct _GstAVCSrcClass
-{
-  GstBaseSrcClass base_avcsrc_class;
-};
-
-GType gst_avc_src_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/dxr3/.gitignore b/sys/dxr3/.gitignore
deleted file mode 100644 (file)
index 58fd01e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-dxr3marshal.c
diff --git a/sys/dxr3/Makefile.am b/sys/dxr3/Makefile.am
deleted file mode 100644 (file)
index dc81c0c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-plugin_LTLIBRARIES = libgstdxr3.la
-
-libgstdxr3_la_SOURCES = dxr3videosink.c dxr3audiosink.c dxr3spusink.c \
-                       dxr3init.c ac3_padder.c 
-nodist_libgstdxr3_la_SOURCES = dxr3marshal.c
-libgstdxr3_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS)
-libgstdxr3_la_LIBADD =
-libgstdxr3_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstdxr3_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-BUILT_SOURCES = dxr3marshal.c dxr3marshal.h
-built_headers =        dxr3marshal.h
-
-noinst_HEADERS = dxr3videosink.h dxr3audiosink.h dxr3spusink.h \
-                dxr3common.h ac3_padder.h
-
-EXTRA_DIST = dxr3marshal.list
-       
-
-dxr3marshal.h: dxr3marshal.list
-       glib-genmarshal --header --prefix=dxr3_marshal $^ > dxr3marshal.h.tmp
-       mv dxr3marshal.h.tmp dxr3marshal.h
-
-dxr3marshal.c: dxr3marshal.list
-       echo "#include \"dxr3marshal.h\"" >> dxr3marshal.c.tmp
-       glib-genmarshal --body --prefix=dxr3_marshal $^ >> dxr3marshal.c.tmp
-       mv dxr3marshal.c.tmp dxr3marshal.c
-
-CLEANFILES = $(BUILT_SOURCES)
diff --git a/sys/dxr3/ac3_padder.c b/sys/dxr3/ac3_padder.c
deleted file mode 100644 (file)
index e64c88b..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * ac3_padder.c: Pad AC3 frames for use with an SPDIF interface.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include "ac3_padder.h"
-
-#define IEC61937_DATA_TYPE_AC3 1
-
-struct frmsize_s
-{
-  unsigned short bit_rate;
-  unsigned short frm_size[3];
-};
-
-
-static const struct frmsize_s frmsizecod_tbl[64] = {
-  {32, {64, 69, 96}},
-  {32, {64, 70, 96}},
-  {40, {80, 87, 120}},
-  {40, {80, 88, 120}},
-  {48, {96, 104, 144}},
-  {48, {96, 105, 144}},
-  {56, {112, 121, 168}},
-  {56, {112, 122, 168}},
-  {64, {128, 139, 192}},
-  {64, {128, 140, 192}},
-  {80, {160, 174, 240}},
-  {80, {160, 175, 240}},
-  {96, {192, 208, 288}},
-  {96, {192, 209, 288}},
-  {112, {224, 243, 336}},
-  {112, {224, 244, 336}},
-  {128, {256, 278, 384}},
-  {128, {256, 279, 384}},
-  {160, {320, 348, 480}},
-  {160, {320, 349, 480}},
-  {192, {384, 417, 576}},
-  {192, {384, 418, 576}},
-  {224, {448, 487, 672}},
-  {224, {448, 488, 672}},
-  {256, {512, 557, 768}},
-  {256, {512, 558, 768}},
-  {320, {640, 696, 960}},
-  {320, {640, 697, 960}},
-  {384, {768, 835, 1152}},
-  {384, {768, 836, 1152}},
-  {448, {896, 975, 1344}},
-  {448, {896, 976, 1344}},
-  {512, {1024, 1114, 1536}},
-  {512, {1024, 1115, 1536}},
-  {576, {1152, 1253, 1728}},
-  {576, {1152, 1254, 1728}},
-  {640, {1280, 1393, 1920}},
-  {640, {1280, 1394, 1920}}
-};
-
-
-
-/* Go one byte forward in the input buffer. */
-#define ac3p_in_fw(padder) ((padder)->in_ptr++, (padder)->remaining--)
-
-/* Go one byte forward in the output buffer. */
-#define ac3p_out_fw(padder) ((padder)->out_ptr++, (padder)->bytes_to_copy--)
-
-
-/**
- * ac3p_init:
- * @padder: The padder structure to initialize.
- *
- * Initializes an AC3 stream padder.  This structure can be
- * subsequently used to parse an AC3 stream and convert it to IEC958
- * (S/PDIF) padded packets.
- */
-extern void
-ac3p_init (ac3_padder * padder)
-{
-  const char sync[4] = { 0x72, 0xF8, 0x1F, 0x4E };
-
-  padder->state = AC3P_STATE_SYNC1;
-
-  /* No material to read yet. */
-  padder->remaining = 0;
-
-  /* Initialize the sync bytes in the frame. */
-  memcpy (padder->frame.header, sync, 4);
-}
-
-
-/**
- * ac3_push_data:
- * @padder: The padder structure.
- * @data: A pointer to a buffer with new data to parse.  This should 
- * correspond to a new piece of a stream containing raw AC3 data.
- * @size: The number of available bytes in the buffer.
- *
- * Pushes a new buffer of data to be parsed by the ac3 padder.  The
- * ac3_parse() function will actually parse the data and report when
- * new frames are found.  This funcion should only be called once at
- * the beginning of the parsing process, or when the ac3_parse()
- * function returns the %AC3P_EVENT_PUSH event.
- */
-extern void
-ac3p_push_data (ac3_padder * padder, guchar * data, guint size)
-{
-  padder->in_ptr = data;
-  padder->remaining = size;
-}
-
-
-/**
- * ac3p_parse:
- * @padder: The padder structure.
- * 
- * Parses the bytes already pushed into the padder structure (see
- * ac3p_push_data()) and returns an event value depending on the
- * results of the parsing.
- *
- * Returns: %AC3P_EVENT_FRAME to indicate that a new AC3 was found and
- * padded for IEC958 transmission.  This frame can be read inmediatly
- * with ac3p_frame(). %AC3P_EVENT_PUSH to indicate that new data from
- * the input stream must be pushed into the padder using
- * ac3p_push_data().  This function should be called again after
- * pushing the data.
- */
-extern int
-ac3p_parse (ac3_padder * padder)
-{
-  while (padder->remaining > 0) {
-    switch (padder->state) {
-      case AC3P_STATE_SYNC1:
-        if (*(padder->in_ptr) == 0x0b) {
-          /* The first sync byte was found.  Go to the next state. */
-          padder->frame.sync_byte1 = 0x0b;
-          padder->state = AC3P_STATE_SYNC2;
-        }
-        ac3p_in_fw (padder);
-        break;
-
-      case AC3P_STATE_SYNC2:
-        if (*(padder->in_ptr) == 0x77) {
-          /* The second sync byte was seen right after the first.  Go to
-             the next state. */
-          padder->frame.sync_byte2 = 0x77;
-          padder->state = AC3P_STATE_HEADER;
-
-          /* Skip one byte. */
-          ac3p_in_fw (padder);
-
-          /* Prepare for reading the header. */
-          padder->out_ptr = (guchar *) & (padder->frame.crc1);
-          /* Discount the 2 sync bytes from the header size. */
-          padder->bytes_to_copy = AC3P_AC3_HEADER_SIZE - 2;
-        } else {
-          /* The second sync byte was not seen.  Go back to the
-             first state. */
-          padder->state = AC3P_STATE_SYNC1;
-        }
-        break;
-
-      case AC3P_STATE_HEADER:
-        if (padder->bytes_to_copy > 0) {
-          /* Copy one byte. */
-          *(padder->out_ptr) = *(padder->in_ptr);
-          ac3p_in_fw (padder);
-          ac3p_out_fw (padder);
-        } else {
-          int fscod;
-
-          /* The header is ready: */
-
-          fscod = (padder->frame.code >> 6) & 0x03;
-
-          /* Calculate the frame size. */
-          padder->ac3_frame_size =
-              2 * frmsizecod_tbl[padder->frame.code & 0x3f].frm_size[fscod];
-
-          /* Set up the IEC header. */
-          if (padder->ac3_frame_size > 0) {
-            padder->frame.header[4] = IEC61937_DATA_TYPE_AC3;
-          } else {
-            /* Don't know what it is, better be careful. */
-            padder->state = AC3P_STATE_SYNC1;
-            break;
-          }
-          padder->frame.header[5] = 0x00;
-          padder->frame.header[6] = (padder->ac3_frame_size * 8) & 0xFF;
-          padder->frame.header[7] = ((padder->ac3_frame_size * 8) >> 8) & 0xFF;
-
-          /* Prepare for reading the body. */
-          padder->bytes_to_copy = padder->ac3_frame_size - AC3P_AC3_HEADER_SIZE;
-          padder->state = AC3P_STATE_CONTENT;
-        }
-        break;
-
-      case AC3P_STATE_CONTENT:
-        if (padder->bytes_to_copy > 0) {
-          /* Copy one byte. */
-          *(padder->out_ptr) = *(padder->in_ptr);
-          ac3p_in_fw (padder);
-          ac3p_out_fw (padder);
-        } else {
-          guint16 *ptr, i;
-
-          /* Frame ready.  Prepare for output: */
-
-          /* Zero the non AC3 portion of the padded frame. */
-          memset (&(padder->frame.sync_byte1) + padder->ac3_frame_size, 0,
-              AC3P_IEC_FRAME_SIZE - AC3P_IEC_HEADER_SIZE -
-              padder->ac3_frame_size);
-
-          /* Fix the byte order in the AC3 portion: */
-          ptr = (guint16 *) & (padder->frame.sync_byte1);
-          i = padder->ac3_frame_size / 2;
-          while (i > 0) {
-            *ptr = GUINT16_TO_BE (*ptr);
-            ptr++;
-            i--;
-          }
-
-          /* Start over again. */
-          padder->state = AC3P_STATE_SYNC1;
-
-          return AC3P_EVENT_FRAME;
-        }
-        break;
-    }
-  }
-
-  return AC3P_EVENT_PUSH;
-}
diff --git a/sys/dxr3/ac3_padder.h b/sys/dxr3/ac3_padder.h
deleted file mode 100644 (file)
index 7c03138..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * ac3_padder.h: Pad AC3 frames for use with an SPDIF interface.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef AC3_PADDER_INC
-#define AC3_PADDER_INC
-
-#include <glib.h>
-
-
-/* Size of an IEC958 padded AC3 frame. */
-#define AC3P_IEC_FRAME_SIZE 6144
-/* Size of the IEC958 header. */
-#define AC3P_IEC_HEADER_SIZE 8
-/* Size of the AC3 header. */
-#define AC3P_AC3_HEADER_SIZE 7
-
-
-/* An IEC958 padded AC3 frame. */
-typedef struct {
-  /* IEC header. */
-  guchar header[AC3P_IEC_HEADER_SIZE];
-
-  /* Begin of AC3 header. */
-  guchar sync_byte1;
-  guchar sync_byte2;
-
-  guchar crc1[2];
-  guchar code;
-  guchar bsidmod;
-  guchar acmod;
-  /* End of AC3 header. */
-  
-  unsigned char data[AC3P_IEC_FRAME_SIZE - AC3P_IEC_HEADER_SIZE 
-                     - AC3P_AC3_HEADER_SIZE];
-} ac3p_iec958_burst_frame;
-
-
-/* Possible states for the reading automaton: */
-
-/* Searching for sync byte 1. */
-#define AC3P_STATE_SYNC1 1
-/* Searching for sync byte 2. */
-#define AC3P_STATE_SYNC2 2
-/* Reading AC3 header. */
-#define AC3P_STATE_HEADER 3
-/* Reading packet contents.*/
-#define AC3P_STATE_CONTENT 4
-
-
-/* Events generated by the parse function: */
-
-/* The parser needs new data to be pushed. */
-#define AC3P_EVENT_PUSH 1
-/* There is a new padded frame ready to read from the padder structure. */
-#define AC3P_EVENT_FRAME 2
-
-
-/* The internal state for the padder. */
-typedef struct {
-  guint state;       /* State of the reading automaton. */
-
-  guchar *in_ptr;    /* Input pointer, marking the current
-                        postion in the input buffer. */
-  guint remaining;   /* The number of bytes remaining in the current
-                        reading buffer. */
-
-  guchar *out_ptr;   /* Output pointer, marking the current
-                        position in the output frame. */
-  guint bytes_to_copy;
-                     /* Number of bytes that still must be copied
-                        to the output frame *during this reading
-                        stage*. */
-
-  guint ac3_frame_size;
-                     /* The size in bytes of the pure AC3 portion
-                        of the current frame. */
-
-  ac3p_iec958_burst_frame frame;
-                     /* The current output frame. */
-} ac3_padder;
-
-
-
-extern void
-ac3p_init(ac3_padder *padder);
-
-extern void
-ac3p_push_data(ac3_padder *padder, guchar *data, guint size);
-
-extern int
-ac3p_parse(ac3_padder *padder);
-
-
-/*
- * ac3p_frame
- * @padder The padder structure.
- *
- * Returns a pointer to the padded frame contained in the padder.
- */
-#define ac3p_frame(padder) ((guint *) &((padder)->frame))
-
-/*
- * ac3p_frame_size
- * @padder The padder structure.
- *
- * Returns the length in bytes of the last read raw AC3 frame.
- */
-#define ac3p_frame_size(padder) ((padder)->ac3_frame_size)
-
-
-#endif
diff --git a/sys/dxr3/dxr3audiosink.c b/sys/dxr3/dxr3audiosink.c
deleted file mode 100644 (file)
index 9638feb..0000000
+++ /dev/null
@@ -1,740 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3audiosink.c: Audio sink for em8300 based DVD cards.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-
-#include <linux/soundcard.h>
-#include <linux/em8300.h>
-
-#include <gst/gst-i18n-plugin.h>
-#include <gst/gst.h>
-
-#include "dxr3audiosink.h"
-#include "dxr3marshal.h"
-#include "dxr3common.h"
-
-/* Our only supported AC3 byte rate. */
-#define AC3_BYTE_RATE 48000
-
-/* Determines the amount of time to play the given number of bytes of
-   the original AC3 stream.  The result is expressed as MPEG2. */
-#define TIME_FOR_BYTES(bytes) (((bytes) * 90) / 48)
-
-/* Dxr3AudioSink signals and args */
-enum
-{
-  SIGNAL_FLUSHED,
-  LAST_SIGNAL
-};
-
-enum
-{
-  ARG_0,
-  ARG_DIGITAL_PCM
-};
-
-static GstStaticPadTemplate dxr3audiosink_pcm_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("pcm_sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw-int, "
-        "endianness = (int) BYTE_ORDER, "
-        "signed = (boolean) TRUE, "
-        "width = (int) 16, "
-        "depth = (int) 16, "
-        "rate = (int) { 32000, 44100, 48000, 66000 }, " "channels = (int) 2")
-    );
-
-static GstStaticPadTemplate dxr3audiosink_ac3_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("ac3_sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-ac3"
-        /* no parameters needed, we don't need a parsed stream */
-    )
-    );
-
-
-static void dxr3audiosink_class_init (Dxr3AudioSinkClass * klass);
-static void dxr3audiosink_base_init (Dxr3AudioSinkClass * klass);
-static void dxr3audiosink_init (Dxr3AudioSink * sink);
-
-static void dxr3audiosink_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void dxr3audiosink_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-
-static gboolean dxr3audiosink_open (Dxr3AudioSink * sink);
-static gboolean dxr3audiosink_set_mode_pcm (Dxr3AudioSink * sink);
-static gboolean dxr3audiosink_set_mode_ac3 (Dxr3AudioSink * sink);
-static void dxr3audiosink_close (Dxr3AudioSink * sink);
-static gboolean dxr3audiosink_set_clock (GstElement * element,
-    GstClock * clock);
-
-static GstPadLinkReturn dxr3audiosink_pcm_sinklink (GstPad * pad,
-    const GstCaps * caps);
-static void dxr3audiosink_set_scr (Dxr3AudioSink * sink, guint32 scr);
-
-static gboolean dxr3audiosink_handle_event (GstPad * pad, GstEvent * event);
-static void dxr3audiosink_chain_pcm (GstPad * pad, GstData * buf);
-static void dxr3audiosink_chain_ac3 (GstPad * pad, GstData * buf);
-
-/* static void  dxr3audiosink_wait              (Dxr3AudioSink *sink, */
-/*                                                  GstClockTime time); */
-/* static int   dxr3audiosink_mvcommand         (Dxr3AudioSink *sink, */
-/*                                                  int command); */
-
-static GstStateChangeReturn dxr3audiosink_change_state (GstElement * element,
-    GstStateChange transition);
-
-static void dxr3audiosink_flushed (Dxr3AudioSink * sink);
-
-static GstElementClass *parent_class = NULL;
-static guint dxr3audiosink_signals[LAST_SIGNAL] = { 0 };
-
-
-extern GType
-dxr3audiosink_get_type (void)
-{
-  static GType dxr3audiosink_type = 0;
-
-  if (!dxr3audiosink_type) {
-    static const GTypeInfo dxr3audiosink_info = {
-      sizeof (Dxr3AudioSinkClass),
-      (GBaseInitFunc) dxr3audiosink_base_init,
-      NULL,
-      (GClassInitFunc) dxr3audiosink_class_init,
-      NULL,
-      NULL,
-      sizeof (Dxr3AudioSink),
-      0,
-      (GInstanceInitFunc) dxr3audiosink_init,
-    };
-
-    dxr3audiosink_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "Dxr3AudioSink", &dxr3audiosink_info, 0);
-  }
-
-  return dxr3audiosink_type;
-}
-
-
-static void
-dxr3audiosink_base_init (Dxr3AudioSinkClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &dxr3audiosink_pcm_sink_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &dxr3audiosink_ac3_sink_factory);
-  gst_element_class_set_static_metadata (element_class,
-      "dxr3/Hollywood+ mpeg decoder board audio plugin", "Audio/Sink",
-      "Feeds audio to Sigma Designs em8300 based boards",
-      "Martin Soto <martinsoto@users.sourceforge.net>");
-}
-
-static void
-dxr3audiosink_class_init (Dxr3AudioSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  dxr3audiosink_signals[SIGNAL_FLUSHED] =
-      g_signal_new ("flushed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (Dxr3AudioSinkClass, flushed),
-      NULL, NULL, dxr3_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
-  klass->flushed = dxr3audiosink_flushed;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DIGITAL_PCM,
-      g_param_spec_boolean ("digital-pcm", "Digital PCM",
-          "Use the digital output for PCM sound", FALSE, G_PARAM_READWRITE));
-
-  gobject_class->set_property = dxr3audiosink_set_property;
-  gobject_class->get_property = dxr3audiosink_get_property;
-
-  gstelement_class->change_state = dxr3audiosink_change_state;
-  gstelement_class->set_clock = dxr3audiosink_set_clock;
-}
-
-
-static void
-dxr3audiosink_init (Dxr3AudioSink * sink)
-{
-  GstPadTemplate *temp;
-
-  /* Create the PCM pad. */
-  temp = gst_static_pad_template_get (&dxr3audiosink_pcm_sink_factory);
-  sink->pcm_sinkpad = gst_pad_new_from_template (temp, "pcm_sink");
-  gst_pad_set_chain_function (sink->pcm_sinkpad, dxr3audiosink_chain_pcm);
-  gst_pad_set_link_function (sink->pcm_sinkpad, dxr3audiosink_pcm_sinklink);
-  gst_element_add_pad (GST_ELEMENT (sink), sink->pcm_sinkpad);
-
-  /* Create the AC3 pad. */
-  temp = gst_static_pad_template_get (&dxr3audiosink_ac3_sink_factory);
-  sink->ac3_sinkpad = gst_pad_new_from_template (temp, "ac3_sink");
-  gst_pad_set_chain_function (sink->ac3_sinkpad, dxr3audiosink_chain_ac3);
-  gst_element_add_pad (GST_ELEMENT (sink), sink->ac3_sinkpad);
-
-  GST_OBJECT_FLAG_SET (GST_ELEMENT (sink), GST_ELEMENT_EVENT_AWARE);
-
-  sink->card_number = 0;
-
-  sink->audio_filename = NULL;
-  sink->audio_fd = -1;
-
-  sink->control_filename = NULL;
-  sink->control_fd = -1;
-
-  /* Since we don't know any better, we set the initial scr to 0. */
-  sink->scr = 0;
-
-  /* Initially don't use digital output. */
-  sink->digital_pcm = FALSE;
-
-  /* Initially there's no padder. */
-  sink->padder = NULL;
-
-  sink->mode = DXR3AUDIOSINK_MODE_NONE;
-}
-
-
-static void
-dxr3audiosink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  Dxr3AudioSink *sink;
-
-  sink = DXR3AUDIOSINK (object);
-
-  switch (prop_id) {
-    case ARG_DIGITAL_PCM:
-      sink->digital_pcm = g_value_get_boolean (value);
-      /* Refresh the setup of the device. */
-      if (sink->mode == DXR3AUDIOSINK_MODE_PCM) {
-        dxr3audiosink_set_mode_pcm (sink);
-      }
-      g_object_notify (G_OBJECT (sink), "digital-pcm");
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static void
-dxr3audiosink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  Dxr3AudioSink *sink;
-
-  g_return_if_fail (GST_IS_DXR3AUDIOSINK (object));
-
-  sink = DXR3AUDIOSINK (object);
-
-  switch (prop_id) {
-    case ARG_DIGITAL_PCM:
-      g_value_set_boolean (value, sink->digital_pcm);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static gboolean
-dxr3audiosink_open (Dxr3AudioSink * sink)
-{
-  g_return_val_if_fail (!GST_OBJECT_FLAG_IS_SET (sink, DXR3AUDIOSINK_OPEN),
-      FALSE);
-
-  /* Compute the name of the audio device file. */
-  sink->audio_filename = g_strdup_printf ("/dev/em8300_ma-%d",
-      sink->card_number);
-
-  sink->audio_fd = open (sink->audio_filename, O_WRONLY);
-  if (sink->audio_fd < 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
-        (_("Could not open audio device \"%s\" for writing."),
-            sink->audio_filename), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  /* Open the control device. */
-  sink->control_filename = g_strdup_printf ("/dev/em8300-%d",
-      sink->card_number);
-
-  sink->control_fd = open (sink->control_filename, O_WRONLY);
-  if (sink->control_fd < 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
-        (_("Could not open control device \"%s\" for writing."),
-            sink->control_filename), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  GST_OBJECT_FLAG_SET (sink, DXR3AUDIOSINK_OPEN);
-
-  dxr3audiosink_set_mode_pcm (sink);
-
-  return TRUE;
-}
-
-
-/**
- * dxr3audiosink_set_mode:
- * @sink: The sink element to operate on.
- *
- * Set the operation mode of the element to PCM.
- */
-static gboolean
-dxr3audiosink_set_mode_pcm (Dxr3AudioSink * sink)
-{
-  int tmp, oss_mode, audiomode;
-
-  if (sink->audio_fd == -1 || sink->control_fd == -1) {
-    return FALSE;
-  }
-
-  /* Set the audio device mode. */
-  oss_mode = (G_BYTE_ORDER == G_BIG_ENDIAN ? AFMT_S16_BE : AFMT_S16_LE);
-  tmp = oss_mode;
-  if (ioctl (sink->audio_fd, SNDCTL_DSP_SETFMT, &tmp) < 0 || tmp != oss_mode) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, SETTINGS,
-        (_("Could not configure audio device \"%s\"."), sink->audio_filename),
-        GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  /* Set the card's general audio output mode. */
-  audiomode = sink->digital_pcm ?
-      EM8300_AUDIOMODE_DIGITALPCM : EM8300_AUDIOMODE_ANALOG;
-  ioctl (sink->control_fd, EM8300_IOCTL_SET_AUDIOMODE, &audiomode);
-
-  /* Set the sampling rate. */
-  tmp = sink->rate;
-  if (ioctl (sink->audio_fd, SNDCTL_DSP_SPEED, &tmp) < 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, SETTINGS,
-        (_("Could not set audio device \"%s\" to %d Hz."), sink->audio_filename,
-            sink->rate), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  /* Get rid of the padder, if any. */
-  if (sink->padder != NULL) {
-    g_free (sink->padder);
-    sink->padder = NULL;
-  }
-
-  sink->mode = DXR3AUDIOSINK_MODE_PCM;
-
-  return TRUE;
-}
-
-
-/**
- * dxr3audiosink_set_mode:
- * @sink: The sink element to operate on
- *
- * Set the operation mode of the element to AC3.
- */
-static gboolean
-dxr3audiosink_set_mode_ac3 (Dxr3AudioSink * sink)
-{
-  int tmp, audiomode;
-
-  if (sink->audio_fd == -1 || sink->control_fd == -1) {
-    return FALSE;
-  }
-
-  /* Set the sampling rate. */
-  tmp = AC3_BYTE_RATE;
-  if (ioctl (sink->audio_fd, SNDCTL_DSP_SPEED, &tmp) < 0 ||
-      tmp != AC3_BYTE_RATE) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, SETTINGS,
-        (_("Could not set audio device \"%s\" to %d Hz."), sink->audio_filename,
-            AC3_BYTE_RATE), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  /* Set the card's general audio output mode to AC3. */
-  audiomode = EM8300_AUDIOMODE_DIGITALAC3;
-  ioctl (sink->control_fd, EM8300_IOCTL_SET_AUDIOMODE, &audiomode);
-
-  /* Create a padder if necessary, */
-  if (sink->padder == NULL) {
-    sink->padder = g_malloc (sizeof (ac3_padder));
-    ac3p_init (sink->padder);
-  }
-
-  sink->mode = DXR3AUDIOSINK_MODE_AC3;
-
-  return TRUE;
-}
-
-
-static void
-dxr3audiosink_close (Dxr3AudioSink * sink)
-{
-  g_return_if_fail (GST_OBJECT_FLAG_IS_SET (sink, DXR3AUDIOSINK_OPEN));
-
-  if (close (sink->audio_fd) != 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
-        (_("Could not close audio device \"%s\"."), sink->audio_filename),
-        GST_ERROR_SYSTEM);
-    return;
-  }
-
-  if (close (sink->control_fd) != 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
-        (_("Could not close control device \"%s\"."), sink->audio_filename),
-        GST_ERROR_SYSTEM);
-    return;
-  }
-
-  GST_OBJECT_FLAG_UNSET (sink, DXR3AUDIOSINK_OPEN);
-
-  g_free (sink->audio_filename);
-  sink->audio_filename = NULL;
-
-  g_free (sink->control_filename);
-  sink->control_filename = NULL;
-
-  /* Get rid of the padder, if any. */
-  if (sink->padder != NULL) {
-    g_free (sink->padder);
-    sink->padder = NULL;
-  }
-}
-
-
-static gboolean
-dxr3audiosink_set_clock (GstElement * element, GstClock * clock)
-{
-  Dxr3AudioSink *src = DXR3AUDIOSINK (element);
-
-  src->clock = clock;
-
-  return GST_ELEMENT_CLASS (parent_class)->set_clock (element, clock);
-}
-
-
-static GstPadLinkReturn
-dxr3audiosink_pcm_sinklink (GstPad * pad, const GstCaps * caps)
-{
-  Dxr3AudioSink *sink = DXR3AUDIOSINK (gst_pad_get_parent (pad));
-  GstStructure *structure = gst_caps_get_structure (caps, 0);
-  gint rate;
-
-  if (!gst_caps_is_fixed (caps)) {
-    return GST_PAD_LINK_DELAYED;
-  }
-
-  gst_structure_get_int (structure, "rate", &rate);
-  sink->rate = rate;
-
-  return GST_PAD_LINK_OK;
-}
-
-
-static void
-dxr3audiosink_set_scr (Dxr3AudioSink * sink, guint32 scr)
-{
-  guint32 zero = 0;
-
-/*   fprintf (stderr, "====== Adjusting SCR\n"); */
-  ioctl (sink->control_fd, EM8300_IOCTL_SCR_SET, &zero);
-  ioctl (sink->control_fd, EM8300_IOCTL_SCR_SET, &scr);
-}
-
-
-static gboolean
-dxr3audiosink_handle_event (GstPad * pad, GstEvent * event)
-{
-  GstEventType type;
-  Dxr3AudioSink *sink = DXR3AUDIOSINK (gst_pad_get_parent (pad));
-
-  type = event ? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN;
-
-  switch (type) {
-    case GST_EVENT_FLUSH:
-      if (sink->control_fd >= 0) {
-        unsigned audiomode;
-
-        if (sink->mode == DXR3AUDIOSINK_MODE_AC3) {
-          audiomode = EM8300_AUDIOMODE_DIGITALPCM;
-          ioctl (sink->control_fd, EM8300_IOCTL_SET_AUDIOMODE, &audiomode);
-          audiomode = EM8300_AUDIOMODE_DIGITALAC3;
-          ioctl (sink->control_fd, EM8300_IOCTL_SET_AUDIOMODE, &audiomode);
-        }
-
-        /* Report the flush operation. */
-        g_signal_emit (G_OBJECT (sink),
-            dxr3audiosink_signals[SIGNAL_FLUSHED], 0);
-      }
-      break;
-    default:
-      gst_pad_event_default (pad, event);
-      break;
-  }
-
-  return TRUE;
-}
-
-
-static void
-dxr3audiosink_chain_pcm (GstPad * pad, GstData * _data)
-{
-  Dxr3AudioSink *sink;
-  gint bytes_written = 0;
-  GstBuffer *buf;
-
-  g_return_if_fail (pad != NULL);
-  g_return_if_fail (GST_IS_PAD (pad));
-  g_return_if_fail (_data != NULL);
-
-  sink = DXR3AUDIOSINK (gst_pad_get_parent (pad));
-
-  if (GST_IS_EVENT (_data)) {
-    dxr3audiosink_handle_event (pad, GST_EVENT (_data));
-    return;
-  }
-
-  buf = GST_BUFFER (_data);
-
-  if (sink->mode != DXR3AUDIOSINK_MODE_PCM) {
-    /* Switch to PCM mode. */
-    dxr3audiosink_set_mode_pcm (sink);
-  }
-
-  if (GST_OBJECT_FLAG_IS_SET (sink, DXR3AUDIOSINK_OPEN)) {
-    if (GST_BUFFER_TIMESTAMP (buf) != GST_CLOCK_TIME_NONE) {
-      /* We have a new scr value. */
-      sink->scr = GSTTIME_TO_MPEGTIME (GST_BUFFER_TIMESTAMP (buf));
-    }
-
-    /* Update the system reference clock (SCR) in the card. */
-    {
-      unsigned in, out, odelay;
-      unsigned diff;
-
-      ioctl (sink->control_fd, EM8300_IOCTL_SCR_GET, &out);
-
-      ioctl (sink->audio_fd, SNDCTL_DSP_GETODELAY, &odelay);
-
-      in = MPEGTIME_TO_DXRTIME (sink->scr - (odelay * 90) / 192);
-      diff = in > out ? in - out : out - in;
-      if (diff > 1800) {
-        dxr3audiosink_set_scr (sink, in);
-      }
-    }
-
-    /* Update our SCR value. */
-    sink->scr += (unsigned) (GST_BUFFER_SIZE (buf) *
-        (90000.0 / ((float) sink->rate * 4)));
-
-    /* Write the buffer to the sound device. */
-    bytes_written = write (sink->audio_fd, GST_BUFFER_DATA (buf),
-        GST_BUFFER_SIZE (buf));
-    if (bytes_written < GST_BUFFER_SIZE (buf)) {
-      fprintf (stderr, "dxr3audiosink: Warning: %d bytes should be "
-          "written, only %d bytes written\n",
-          GST_BUFFER_SIZE (buf), bytes_written);
-    }
-  }
-
-  gst_buffer_unref (buf);
-}
-
-
-static void
-dxr3audiosink_chain_ac3 (GstPad * pad, GstData * _data)
-{
-  Dxr3AudioSink *sink;
-  gint bytes_written = 0;
-  GstBuffer *buf;
-
-  g_return_if_fail (pad != NULL);
-  g_return_if_fail (GST_IS_PAD (pad));
-  g_return_if_fail (_data != NULL);
-
-  sink = DXR3AUDIOSINK (gst_pad_get_parent (pad));
-
-  if (GST_IS_EVENT (_data)) {
-    dxr3audiosink_handle_event (pad, GST_EVENT (_data));
-    return;
-  }
-
-  buf = GST_BUFFER (_data);
-
-  if (sink->mode != DXR3AUDIOSINK_MODE_AC3) {
-    /* Switch to AC3 mode. */
-    dxr3audiosink_set_mode_ac3 (sink);
-  }
-
-  if (GST_OBJECT_FLAG_IS_SET (sink, DXR3AUDIOSINK_OPEN)) {
-    int event;
-
-    if (GST_BUFFER_TIMESTAMP (buf) != GST_CLOCK_TIME_NONE) {
-      /* We have a new scr value. */
-
-/*       fprintf (stderr, "------ Audio Time %.04f\n", */
-/*                (double) GST_BUFFER_TIMESTAMP (buf) / GST_SECOND); */
-
-      sink->scr = GSTTIME_TO_MPEGTIME (GST_BUFFER_TIMESTAMP (buf));
-    }
-
-    /* Push the new data into the padder. */
-    ac3p_push_data (sink->padder, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
-
-    /* Parse the data. */
-    event = ac3p_parse (sink->padder);
-    while (event != AC3P_EVENT_PUSH) {
-      switch (event) {
-        case AC3P_EVENT_FRAME:
-          /* We have a new frame: */
-
-          /* Update the system reference clock (SCR) in the card. */
-        {
-          unsigned in, out, odelay;
-          unsigned diff;
-
-          ioctl (sink->control_fd, EM8300_IOCTL_SCR_GET, &out);
-
-          ioctl (sink->audio_fd, SNDCTL_DSP_GETODELAY, &odelay);
-          /* 192000 bytes/sec */
-
-          in = MPEGTIME_TO_DXRTIME (sink->scr - (odelay * 90) / 192);
-          diff = in > out ? in - out : out - in;
-          if (diff > 1800) {
-            dxr3audiosink_set_scr (sink, in);
-          }
-        }
-
-          /* Update our SCR value. */
-          sink->scr += TIME_FOR_BYTES (ac3p_frame_size (sink->padder));
-
-          /* Write the frame to the sound device. */
-          bytes_written = write (sink->audio_fd, ac3p_frame (sink->padder),
-              AC3P_IEC_FRAME_SIZE);
-
-          if (bytes_written < AC3P_IEC_FRAME_SIZE) {
-            fprintf (stderr, "dxr3audiosink: Warning: %d bytes should be "
-                "written, only %d bytes written\n",
-                AC3P_IEC_FRAME_SIZE, bytes_written);
-          }
-
-          break;
-      }
-
-      event = ac3p_parse (sink->padder);
-    }
-  }
-
-  gst_buffer_unref (buf);
-}
-
-#if 0
-/**
- * dxr3audiosink_wait:
- *
- * Make the sink wait the specified amount of time.
- */
-static void
-dxr3audiosink_wait (Dxr3AudioSink * sink, GstClockTime time)
-{
-  GstClockID id;
-  GstClockTimeDiff jitter;
-  GstClockReturn ret;
-  GstClockTime current_time = gst_clock_get_time (sink->clock);
-
-  id = gst_clock_new_single_shot_id (sink->clock, current_time + time);
-  ret = gst_clock_id_wait (id, &jitter);
-  gst_clock_id_free (id);
-}
-
-
-static int
-dxr3audiosink_mvcommand (Dxr3AudioSink * sink, int command)
-{
-  em8300_register_t regs;
-
-  regs.microcode_register = 1;
-  regs.reg = 0;
-  regs.val = command;
-
-  return ioctl (sink->control_fd, EM8300_IOCTL_WRITEREG, &regs);
-}
-#endif
-
-static GstStateChangeReturn
-dxr3audiosink_change_state (GstElement * element, GstStateChange transition)
-{
-  g_return_val_if_fail (GST_IS_DXR3AUDIOSINK (element),
-      GST_STATE_CHANGE_FAILURE);
-
-  if (GST_STATE_PENDING (element) == GST_STATE_NULL) {
-    if (GST_OBJECT_FLAG_IS_SET (element, DXR3AUDIOSINK_OPEN)) {
-      dxr3audiosink_close (DXR3AUDIOSINK (element));
-    }
-  } else {
-    if (!GST_OBJECT_FLAG_IS_SET (element, DXR3AUDIOSINK_OPEN)) {
-      if (!dxr3audiosink_open (DXR3AUDIOSINK (element))) {
-        return GST_STATE_CHANGE_FAILURE;
-      }
-    }
-  }
-
-  if (GST_ELEMENT_CLASS (parent_class)->change_state) {
-    return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  }
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-
-/**
- * dxr3audiosink_flushed:
- *
- * Default do nothing implementation for the "flushed" signal.  The
- * "flushed" signal will be fired right after flushing the hardware
- * queues due to a received flush event 
- */
-static void
-dxr3audiosink_flushed (Dxr3AudioSink * sink)
-{
-  /* Do nothing. */
-}
diff --git a/sys/dxr3/dxr3audiosink.h b/sys/dxr3/dxr3audiosink.h
deleted file mode 100644 (file)
index d1394a0..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3audiosink.h: Audio sink for em8300 based DVD cards.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __DXR3AUDIOSINK_H__
-#define __DXR3AUDIOSINK_H__
-
-#include <gst/gst.h>
-
-#include "ac3_padder.h"
-
-G_BEGIN_DECLS
-
-
-#define GST_TYPE_DXR3AUDIOSINK \
-  (dxr3audiosink_get_type())
-#define DXR3AUDIOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DXR3AUDIOSINK,Dxr3AudioSink))
-#define DXR3AUDIOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DXR3AUDIOSINK,Dxr3AudioSinkClass))
-#define GST_IS_DXR3AUDIOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXR3AUDIOSINK))
-#define GST_IS_DXR3AUDIOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXR3AUDIOSINK))
-
-
-typedef struct _Dxr3AudioSink Dxr3AudioSink;
-typedef struct _Dxr3AudioSinkClass Dxr3AudioSinkClass;
-
-
-typedef enum {
-  DXR3AUDIOSINK_OPEN            = (GST_ELEMENT_FLAG_LAST << 0),
-  DXR3AUDIOSINK_FLAG_LAST       = (GST_ELEMENT_FLAG_LAST << 2),
-} Dxr3AudioSinkFlags;
-
-
-/* PCM or AC3? */
-typedef enum {
-  DXR3AUDIOSINK_MODE_NONE, /* No mode set. */ 
-  DXR3AUDIOSINK_MODE_AC3,  /* AC3 out. */ 
-  DXR3AUDIOSINK_MODE_PCM,  /* PCM out. */
-} Dxr3AudioSinkMode;
-
-
-/* Information for a delayed SCR set operation. */
-typedef struct {
-  struct _Dxr3AudioSink *sink;
-  guint32 scr;
-} Dxr3AudioSinkDelayedSCR;
-
-
-struct _Dxr3AudioSink {
-  GstElement element;
-
-  GstPad *pcm_sinkpad;     /* The AC3 audio sink pad. */
-  GstPad *ac3_sinkpad;     /* The PCM audio sink pad. */
-
-  int card_number;         /* The number of the card to open. */
-
-  gchar *audio_filename;   /* File name for the audio device. */
-  int audio_fd;            /* File descriptor for the audio device. */
-
-  gchar *control_filename; /* File name for the control device. */
-  int control_fd;          /* File descriptor for the control
-                              device. */
-
-  guint64 scr;             /* The current System Reference Clock value
-                              for the audio stream. */
-
-  gboolean digital_pcm;    /* Should PCM use the digital or the 
-                              analog output? */
-
-  Dxr3AudioSinkMode mode;  /* The current sound output mode. */
-
-  gint rate;               /* The sampling rate for PCM sound. */
-
-  ac3_padder *padder;      /* AC3 to SPDIF padder object. */
-
-  GstClock *clock;         /* The clock for this element. */
-};
-
-
-struct _Dxr3AudioSinkClass {
-  GstElementClass parent_class;
-
-  /* signals */
-  void (*flushed) (Dxr3AudioSink *sink);
-};
-
-
-extern GType    dxr3audiosink_get_type (void);
-
-G_END_DECLS
-
-#endif /* __DXR3AUDIOINK_H__ */
diff --git a/sys/dxr3/dxr3common.h b/sys/dxr3/dxr3common.h
deleted file mode 100644 (file)
index 40aec8f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3videosink.h: Common declarations for the DXR3 plugin.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __DXR3COMMON_H__
-#define __DXR3COMMON_H__
-
-/* Convert from GStreamer time to MPEG time. */
-#define GSTTIME_TO_MPEGTIME(time) (((time) * 9) / (GST_MSECOND/10))
-
-
-/* The em8300 driver expresses time in units of  1/45000 of second. */
-
-/* Convert from MPEG time to em8300 time. */
-#define MPEGTIME_TO_DXRTIME(time) ((guint32) ((time) >> 1))
-
-/* Convert from em8300 time to GStreamer time. */
-#define DXRTIME_TO_GSTTIME(time) \
-  ((GstClockTime) ((double) (time) * (((double) GST_MSECOND) / 45.0)))
-
-
-#endif /* __DXR3COMMON_H__ */
diff --git a/sys/dxr3/dxr3init.c b/sys/dxr3/dxr3init.c
deleted file mode 100644 (file)
index ba36316..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3init.c: DXR3 plugin initialization.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gst/gst-i18n-plugin.h"
-
-#include "dxr3videosink.h"
-#include "dxr3spusink.h"
-#include "dxr3audiosink.h"
-
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "dxr3videosink",
-          GST_RANK_NONE, GST_TYPE_DXR3VIDEOSINK) ||
-      !gst_element_register (plugin, "dxr3audiosink",
-          GST_RANK_NONE, GST_TYPE_DXR3AUDIOSINK) ||
-      !gst_element_register (plugin, "dxr3spusink",
-          GST_RANK_NONE, GST_TYPE_DXR3SPUSINK))
-    return FALSE;
-
-#ifdef ENABLE_NLS
-  setlocale (LC_ALL, "");
-  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-#endif /* ENABLE_NLS */
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    dxr3,
-    "dxr3 mpeg video board elements",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/dxr3/dxr3marshal.list b/sys/dxr3/dxr3marshal.list
deleted file mode 100644 (file)
index 7b99b1e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-VOID:VOID
-VOID:BOOLEAN
-VOID:POINTER
-VOID:UINT,UINT,UINT,UINT,UINT,UINT
-
diff --git a/sys/dxr3/dxr3spusink.c b/sys/dxr3/dxr3spusink.c
deleted file mode 100644 (file)
index fbf1cf5..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3spusink.h: Subpicture sink for em8300 based cards.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-
-#include <linux/em8300.h>
-
-#include <gst/gst-i18n-plugin.h>
-#include <gst/gst.h>
-
-#include "dxr3spusink.h"
-#include "dxr3marshal.h"
-
-#include "dxr3common.h"
-
-/* Dxr3SpuSink signals and args */
-enum
-{
-  SET_CLUT_SIGNAL,
-  HIGHLIGHT_ON_SIGNAL,
-  HIGHLIGHT_OFF_SIGNAL,
-  SIGNAL_FLUSHED,
-  LAST_SIGNAL
-};
-
-enum
-{
-  ARG_0
-};
-
-
-static GstStaticPadTemplate dxr3spusink_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-
-static void dxr3spusink_class_init (Dxr3SpuSinkClass * klass);
-static void dxr3spusink_base_init (Dxr3SpuSinkClass * klass);
-static void dxr3spusink_init (Dxr3SpuSink * dxr3spusink);
-
-static void dxr3spusink_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void dxr3spusink_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-
-static gboolean dxr3spusink_open (Dxr3SpuSink * sink);
-static void dxr3spusink_close (Dxr3SpuSink * sink);
-static gboolean dxr3spusink_set_clock (GstElement * element, GstClock * clock);
-
-static gboolean dxr3spusink_handle_event (GstPad * pad, GstEvent * event);
-static void dxr3spusink_chain (GstPad * pad, GstData * _data);
-
-static GstStateChangeReturn dxr3spusink_change_state (GstElement * element,
-    GstStateChange transition);
-
-/* static void  dxr3spusink_wait                (Dxr3SpuSink *sink, */
-/*                                                  GstClockTime time); */
-
-static void dxr3spusink_set_clut (Dxr3SpuSink * sink, const guint32 * clut);
-static void dxr3spusink_highlight_on (Dxr3SpuSink * sink,
-    unsigned palette,
-    unsigned sx, unsigned sy, unsigned ex, unsigned ey, unsigned pts);
-static void dxr3spusink_highlight_off (Dxr3SpuSink * sink);
-
-static void dxr3spusink_flushed (Dxr3SpuSink * sink);
-
-
-static GstElementClass *parent_class = NULL;
-static guint dxr3spusink_signals[LAST_SIGNAL] = { 0 };
-
-
-GType
-dxr3spusink_get_type (void)
-{
-  static GType dxr3spusink_type = 0;
-
-  if (!dxr3spusink_type) {
-    static const GTypeInfo dxr3spusink_info = {
-      sizeof (Dxr3SpuSinkClass),
-      (GBaseInitFunc) dxr3spusink_base_init,
-      NULL,
-      (GClassInitFunc) dxr3spusink_class_init,
-      NULL,
-      NULL,
-      sizeof (Dxr3SpuSink),
-      0,
-      (GInstanceInitFunc) dxr3spusink_init,
-    };
-
-    dxr3spusink_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "Dxr3SpuSink", &dxr3spusink_info, 0);
-  }
-  return dxr3spusink_type;
-}
-
-
-static void
-dxr3spusink_base_init (Dxr3SpuSinkClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &dxr3spusink_sink_factory);
-  gst_element_class_set_static_metadata (element_class,
-      "dxr3/Hollywood+ mpeg decoder board subpicture element", "Sink/Video",
-      "Feeds subpicture information to Sigma Designs em8300 based boards",
-      "Martin Soto <martinsoto@users.sourceforge.net>");
-}
-
-static void
-dxr3spusink_class_init (Dxr3SpuSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  dxr3spusink_signals[SET_CLUT_SIGNAL] =
-      g_signal_new ("set-clut",
-      G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (Dxr3SpuSinkClass, set_clut),
-      NULL, NULL, dxr3_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER);
-
-  dxr3spusink_signals[HIGHLIGHT_ON_SIGNAL] =
-      g_signal_new ("highlight-on",
-      G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (Dxr3SpuSinkClass, highlight_on),
-      NULL, NULL,
-      dxr3_marshal_VOID__UINT_UINT_UINT_UINT_UINT_UINT,
-      G_TYPE_NONE, 6,
-      G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
-      G_TYPE_UINT, G_TYPE_UINT);
-
-  dxr3spusink_signals[HIGHLIGHT_OFF_SIGNAL] =
-      g_signal_new ("highlight-off",
-      G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-      G_STRUCT_OFFSET (Dxr3SpuSinkClass, highlight_off),
-      NULL, NULL, dxr3_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
-  dxr3spusink_signals[SIGNAL_FLUSHED] =
-      g_signal_new ("flushed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (Dxr3SpuSinkClass, flushed),
-      NULL, NULL, dxr3_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
-  klass->set_clut = dxr3spusink_set_clut;
-  klass->highlight_on = dxr3spusink_highlight_on;
-  klass->highlight_off = dxr3spusink_highlight_off;
-  klass->flushed = dxr3spusink_flushed;
-
-  gobject_class->set_property = dxr3spusink_set_property;
-  gobject_class->get_property = dxr3spusink_get_property;
-
-  gstelement_class->change_state = dxr3spusink_change_state;
-  gstelement_class->set_clock = dxr3spusink_set_clock;
-}
-
-
-static void
-dxr3spusink_init (Dxr3SpuSink * sink)
-{
-  GstPad *pad;
-
-  pad = gst_pad_new_from_static_template (&dxr3spusink_sink_factory, "sink");
-  gst_element_add_pad (GST_ELEMENT (sink), pad);
-  gst_pad_set_chain_function (pad, dxr3spusink_chain);
-
-  GST_OBJECT_FLAG_SET (GST_ELEMENT (sink), GST_ELEMENT_EVENT_AWARE);
-
-  sink->card_number = 0;
-
-  sink->spu_filename = NULL;
-  sink->spu_fd = -1;
-  sink->control_filename = NULL;
-  sink->control_fd = -1;
-
-  sink->clock = NULL;
-}
-
-
-static void
-dxr3spusink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  Dxr3SpuSink *sink;
-
-  sink = DXR3SPUSINK (object);
-
-  switch (prop_id) {
-    default:
-      break;
-  }
-}
-
-
-static void
-dxr3spusink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  Dxr3SpuSink *sink;
-
-  g_return_if_fail (GST_IS_DXR3SPUSINK (object));
-
-  sink = DXR3SPUSINK (object);
-
-  switch (prop_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static gboolean
-dxr3spusink_open (Dxr3SpuSink * sink)
-{
-  g_return_val_if_fail (!GST_OBJECT_FLAG_IS_SET (sink, DXR3SPUSINK_OPEN),
-      FALSE);
-
-  /* Compute the name of the spu device file. */
-  sink->spu_filename = g_strdup_printf ("/dev/em8300_sp-%d", sink->card_number);
-
-  sink->spu_fd = open (sink->spu_filename, O_WRONLY);
-  if (sink->spu_fd < 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
-        (_("Could not open spu device \"%s\" for writing."),
-            sink->spu_filename), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  /* Open the control device. */
-  sink->control_filename = g_strdup_printf ("/dev/em8300-%d",
-      sink->card_number);
-
-  sink->control_fd = open (sink->control_filename, O_WRONLY);
-  if (sink->control_fd < 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
-        (_("Could not open control device \"%s\" for writing."),
-            sink->control_filename), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  GST_OBJECT_FLAG_SET (sink, DXR3SPUSINK_OPEN);
-
-  return TRUE;
-}
-
-
-static void
-dxr3spusink_close (Dxr3SpuSink * sink)
-{
-  g_return_if_fail (GST_OBJECT_FLAG_IS_SET (sink, DXR3SPUSINK_OPEN));
-
-  if (close (sink->spu_fd) != 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
-        (_("Could not close spu device \"%s\"."), sink->spu_filename),
-        GST_ERROR_SYSTEM);
-    return;
-  }
-
-  if (close (sink->control_fd) != 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
-        (_("Could not close control device \"%s\"."), sink->control_filename),
-        GST_ERROR_SYSTEM);
-    return;
-  }
-
-  GST_OBJECT_FLAG_UNSET (sink, DXR3SPUSINK_OPEN);
-
-  free (sink->spu_filename);
-  sink->spu_filename = NULL;
-}
-
-
-static gboolean
-dxr3spusink_set_clock (GstElement * element, GstClock * clock)
-{
-  Dxr3SpuSink *src = DXR3SPUSINK (element);
-
-  src->clock = clock;
-
-  return GST_ELEMENT_CLASS (element)->set_clock (element, clock);
-}
-
-
-static gboolean
-dxr3spusink_handle_event (GstPad * pad, GstEvent * event)
-{
-  GstEventType type;
-  Dxr3SpuSink *sink;
-
-  sink = DXR3SPUSINK (gst_pad_get_parent (pad));
-
-  type = event ? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN;
-
-  switch (type) {
-    case GST_EVENT_FLUSH:
-      if (sink->control_fd >= 0) {
-        int subdevice;
-
-        subdevice = EM8300_SUBDEVICE_SUBPICTURE;
-        ioctl (sink->control_fd, EM8300_IOCTL_FLUSH, &subdevice);
-
-        /* FIXME: There should be a nicer way to do this, but I tried
-           everything and nothing else seems to really reset the video
-           fifo. */
-/*       dxr3spusink_close (sink); */
-/*       dxr3spusink_open (sink); */
-
-        /* Report the flush operation. */
-        g_signal_emit (G_OBJECT (sink), dxr3spusink_signals[SIGNAL_FLUSHED], 0);
-      }
-      break;
-    default:
-      gst_pad_event_default (pad, event);
-      break;
-  }
-
-  return TRUE;
-}
-
-
-static void
-dxr3spusink_chain (GstPad * pad, GstData * _data)
-{
-  GstBuffer *buf = GST_BUFFER (_data);
-  Dxr3SpuSink *sink;
-  gint bytes_written = 0;
-
-  g_return_if_fail (pad != NULL);
-  g_return_if_fail (GST_IS_PAD (pad));
-  g_return_if_fail (buf != NULL);
-
-  sink = DXR3SPUSINK (gst_pad_get_parent (pad));
-
-  if (GST_IS_EVENT (buf)) {
-    dxr3spusink_handle_event (pad, GST_EVENT (buf));
-    return;
-  }
-
-  if (GST_OBJECT_FLAG_IS_SET (sink, DXR3SPUSINK_OPEN)) {
-    /* If we have PTS information for the SPU unit, register it now.
-       The card needs the PTS to be written *before* the actual data. */
-    if (GST_BUFFER_TIMESTAMP (buf) != GST_CLOCK_TIME_NONE) {
-      guint pts = (guint) GSTTIME_TO_MPEGTIME (GST_BUFFER_TIMESTAMP (buf));
-
-      ioctl (sink->spu_fd, EM8300_IOCTL_SPU_SETPTS, &pts);
-    }
-
-    bytes_written = write (sink->spu_fd, GST_BUFFER_DATA (buf),
-        GST_BUFFER_SIZE (buf));
-    if (bytes_written < GST_BUFFER_SIZE (buf)) {
-      fprintf (stderr, "dxr3spusink: Warning: %d bytes should be written,"
-          " only %d bytes written\n", GST_BUFFER_SIZE (buf), bytes_written);
-    }
-  }
-
-  gst_buffer_unref (buf);
-}
-
-
-static GstStateChangeReturn
-dxr3spusink_change_state (GstElement * element, GstStateChange transition)
-{
-  g_return_val_if_fail (GST_IS_DXR3SPUSINK (element), GST_STATE_CHANGE_FAILURE);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!GST_OBJECT_FLAG_IS_SET (element, DXR3SPUSINK_OPEN)) {
-        if (!dxr3spusink_open (DXR3SPUSINK (element))) {
-          return GST_STATE_CHANGE_FAILURE;
-        }
-      }
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      if (GST_OBJECT_FLAG_IS_SET (element, DXR3SPUSINK_OPEN)) {
-        dxr3spusink_close (DXR3SPUSINK (element));
-      }
-      break;
-  }
-
-  if (GST_ELEMENT_CLASS (parent_class)->change_state) {
-    return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  }
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-#if 0
-/**
- * dxr3spusink_wait:
- *
- * Make the sink wait the specified amount of time.
- */
-static void
-dxr3spusink_wait (Dxr3SpuSink * sink, GstClockTime time)
-{
-  GstClockID id;
-  GstClockTimeDiff jitter;
-  GstClockReturn ret;
-  GstClockTime current_time = gst_clock_get_time (sink->clock);
-
-  id = gst_clock_new_single_shot_id (sink->clock, current_time + time);
-  ret = gst_clock_id_wait (id, &jitter);
-  gst_clock_id_free (id);
-}
-#endif
-
-/**
- * dxr3spusink_set_clut:
- *
- * Set a new SPU color lookup table (clut) in the dxr3 card.
- */
-static void
-dxr3spusink_set_clut (Dxr3SpuSink * sink, const guint32 * clut)
-{
-  guint32 clut_fixed[16];
-  int i;
-
-  /* Fix the byte order of the table. */
-  for (i = 0; i < 16; i++) {
-    clut_fixed[i] = GUINT32_TO_LE (clut[i]);
-  }
-
-  if (ioctl (sink->spu_fd, EM8300_IOCTL_SPU_SETPALETTE, clut_fixed))
-    fprintf (stderr, "dxr3spusink: failed to set CLUT (%s)\n",
-        strerror (errno));
-}
-
-
-static void
-dxr3spusink_highlight_on (Dxr3SpuSink * sink, unsigned palette,
-    unsigned sx, unsigned sy, unsigned ex, unsigned ey, unsigned pts)
-{
-  em8300_button_t btn;
-
-  btn.color = palette >> 16;
-  btn.contrast = palette;
-  btn.left = sx;
-  btn.top = sy;
-  btn.right = ex;
-  btn.bottom = ey;
-
-  if (ioctl (sink->spu_fd, EM8300_IOCTL_SPU_BUTTON, &btn)) {
-    fprintf (stderr, "dxr3spusink: failed to set spu button (%s)\n",
-        strerror (errno));
-  }
-}
-
-
-static void
-dxr3spusink_highlight_off (Dxr3SpuSink * sink)
-{
-  if (ioctl (sink->spu_fd, EM8300_IOCTL_SPU_BUTTON, NULL)) {
-    fprintf (stderr, "dxr3spusink: failed to set spu button (%s)\n",
-        strerror (errno));
-  }
-}
-
-
-/**
- * dxr3spusink_flushed:
- *
- * Default do nothing implementation for the "flushed" signal.  The
- * "flushed" signal will be fired right after flushing the hardware
- * queues due to a received flush event 
- */
-static void
-dxr3spusink_flushed (Dxr3SpuSink * sink)
-{
-  /* Do nothing. */
-}
diff --git a/sys/dxr3/dxr3spusink.h b/sys/dxr3/dxr3spusink.h
deleted file mode 100644 (file)
index 99a8086..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3spusink.h: Subpicture sink for em8300 based cards.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __DXR3SPUSINK_H__
-#define __DXR3SPUSINK_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-
-#define GST_TYPE_DXR3SPUSINK \
-  (dxr3spusink_get_type())
-#define DXR3SPUSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DXR3SPUSINK,Dxr3SpuSink))
-#define DXR3SPUSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DXR3SPUSINK,Dxr3SpuSinkClass))
-#define GST_IS_DXR3SPUSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXR3SPUSINK))
-#define GST_IS_DXR3SPUSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXR3SPUSINK))
-
-
-typedef struct _Dxr3SpuSink Dxr3SpuSink;
-typedef struct _Dxr3SpuSinkClass Dxr3SpuSinkClass;
-
-
-typedef enum {
-  DXR3SPUSINK_OPEN            = (GST_ELEMENT_FLAG_LAST << 0),
-  DXR3SPUSINK_FLAG_LAST       = (GST_ELEMENT_FLAG_LAST << 2),
-} Dxr3SpuSinkFlags;
-
-
-struct _Dxr3SpuSink {
-  GstElement element;
-
-  int card_number;              /* The number of the card to open. */
-
-  gchar *spu_filename;          /* File name for the spu device. */
-  int spu_fd;                   /* File descriptor for the spu device. */
-
-  gchar *control_filename;      /* File name for the control device. */
-  int control_fd;               /* File descriptor for the control
-                                   device. */
-
-  GstClock *clock;              /* The clock for this element. */
-};
-
-
-struct _Dxr3SpuSinkClass {
-  GstElementClass parent_class;
-
-  /* Signals */
-  void (*set_clut) (Dxr3SpuSink *sink, const guint32 *clut);
-  void (*highlight_on) (Dxr3SpuSink *sink, unsigned palette,
-                        unsigned sx, unsigned sy,
-                        unsigned ex, unsigned ey,
-                        unsigned pts);
-  void (*highlight_off) (Dxr3SpuSink *sink);
-  void (*flushed) (Dxr3SpuSink *sink);
-};
-
-
-extern GType    dxr3spusink_get_type (void);
-
-G_END_DECLS
-
-#endif /* __DXR3SPUSINK_H__ */
diff --git a/sys/dxr3/dxr3videosink.c b/sys/dxr3/dxr3videosink.c
deleted file mode 100644 (file)
index 486786b..0000000
+++ /dev/null
@@ -1,717 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3videosink.c: Video sink for em8300 based cards.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-
-#include <linux/em8300.h>
-
-#include <gst/gst-i18n-plugin.h>
-#include <gst/gst.h>
-
-#include "dxr3videosink.h"
-#include "dxr3marshal.h"
-
-#include "dxr3common.h"
-
-/* Dxr3VideoSink signals and args */
-enum
-{
-  SIGNAL_FLUSHED,
-  LAST_SIGNAL
-};
-
-enum
-{
-  ARG_0,
-};
-
-/* Possible states for the MPEG start code scanner. */
-enum
-{
-  SCAN_STATE_WAITING,           /* Waiting for a code. */
-  SCAN_STATE_0,                 /* 0 seen. */
-  SCAN_STATE_00,                /* 00 seen. */
-  SCAN_STATE_001                /* 001 seen. */
-};
-
-/* Possible states for the MPEG sequence parser. */
-enum
-{
-  PARSE_STATE_WAITING,          /* Waiting for the start of a sequence. */
-  PARSE_STATE_START,            /* Start of sequence seen. */
-  PARSE_STATE_PICTURE           /* Picture start seen. */
-};
-
-
-/* Relevant mpeg start codes. */
-#define START_CODE_PICTURE 0x00
-#define START_CODE_SEQUENCE_HEADER 0xB3
-#define START_CODE_SEQUENCE_END 0xB7
-
-static GstStaticPadTemplate dxr3videosink_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/mpeg, "
-        "mpegversion = (int) { 1, 2 }, " "systemstream = (boolean) FALSE"
-        /* width/height/framerate omitted, we don't
-         * need a parsed stream */
-    )
-    );
-
-
-static void dxr3videosink_class_init (Dxr3VideoSinkClass * klass);
-static void dxr3videosink_base_init (Dxr3VideoSinkClass * klass);
-static void dxr3videosink_init (Dxr3VideoSink * dxr3videosink);
-
-static void dxr3videosink_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void dxr3videosink_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-
-static gboolean dxr3videosink_open (Dxr3VideoSink * sink);
-static void dxr3videosink_close (Dxr3VideoSink * sink);
-static gboolean dxr3videosink_set_clock (GstElement * element,
-    GstClock * clock);
-
-static void dxr3videosink_reset_parser (Dxr3VideoSink * sink);
-static int dxr3videosink_next_start_code (Dxr3VideoSink * sink);
-static void dxr3videosink_discard_data (Dxr3VideoSink * sink, guint cut);
-static void dxr3videosink_write_data (Dxr3VideoSink * sink, guint cut);
-static void dxr3videosink_parse_data (Dxr3VideoSink * sink);
-
-static gboolean dxr3videosink_handle_event (GstPad * pad, GstEvent * event);
-static void dxr3videosink_chain (GstPad * pad, GstData * _data);
-
-static GstStateChangeReturn dxr3videosink_change_state (GstElement * element,
-    GstStateChange transition);
-
-/* static void  dxr3videosink_wait              (Dxr3VideoSink *sink, */
-/*                                                  GstClockTime time); */
-static int dxr3videosink_mvcommand (Dxr3VideoSink * sink, int command);
-
-static void dxr3videosink_flushed (Dxr3VideoSink * sink);
-
-static GstElementClass *parent_class = NULL;
-static guint dxr3videosink_signals[LAST_SIGNAL] = { 0 };
-
-
-extern GType
-dxr3videosink_get_type (void)
-{
-  static GType dxr3videosink_type = 0;
-
-  if (!dxr3videosink_type) {
-    static const GTypeInfo dxr3videosink_info = {
-      sizeof (Dxr3VideoSinkClass),
-      (GBaseInitFunc) dxr3videosink_base_init,
-      NULL,
-      (GClassInitFunc) dxr3videosink_class_init,
-      NULL,
-      NULL,
-      sizeof (Dxr3VideoSink),
-      0,
-      (GInstanceInitFunc) dxr3videosink_init,
-    };
-
-    dxr3videosink_type = g_type_register_static (GST_TYPE_ELEMENT,
-        "Dxr3VideoSink", &dxr3videosink_info, 0);
-  }
-
-  return dxr3videosink_type;
-}
-
-
-static void
-dxr3videosink_base_init (Dxr3VideoSinkClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &dxr3videosink_sink_factory);
-  gst_element_class_set_static_metadata (element_class,
-      "dxr3/Hollywood+ mpeg decoder board video element", "Sink/Video",
-      "Feeds MPEG2 video to Sigma Designs em8300 based boards",
-      "Martin Soto <martinsoto@users.sourceforge.net>");
-}
-
-static void
-dxr3videosink_class_init (Dxr3VideoSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  dxr3videosink_signals[SIGNAL_FLUSHED] =
-      g_signal_new ("flushed", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST,
-      G_STRUCT_OFFSET (Dxr3VideoSinkClass, flushed),
-      NULL, NULL, dxr3_marshal_VOID__VOID, G_TYPE_NONE, 0);
-
-  klass->flushed = dxr3videosink_flushed;
-
-  gobject_class->set_property = dxr3videosink_set_property;
-  gobject_class->get_property = dxr3videosink_get_property;
-
-  gstelement_class->change_state = dxr3videosink_change_state;
-  gstelement_class->set_clock = dxr3videosink_set_clock;
-}
-
-
-static void
-dxr3videosink_init (Dxr3VideoSink * sink)
-{
-  GstPad *pad;
-
-  pad = gst_pad_new_from_static_template (&dxr3videosink_sink_factory, "sink");
-  gst_element_add_pad (GST_ELEMENT (sink), pad);
-  gst_pad_set_chain_function (pad, dxr3videosink_chain);
-
-  GST_OBJECT_FLAG_SET (GST_ELEMENT (sink), GST_ELEMENT_EVENT_AWARE);
-
-  sink->card_number = 0;
-
-  sink->video_filename = NULL;
-  sink->video_fd = -1;
-  sink->control_filename = NULL;
-  sink->control_fd = -1;
-
-  sink->clock = NULL;
-
-  sink->last_ts = GST_CLOCK_TIME_NONE;
-
-  sink->cur_buf = NULL;
-  dxr3videosink_reset_parser (sink);
-}
-
-
-static void
-dxr3videosink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  Dxr3VideoSink *sink;
-
-  sink = DXR3VIDEOSINK (object);
-
-  switch (prop_id) {
-    default:
-      break;
-  }
-}
-
-
-static void
-dxr3videosink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  Dxr3VideoSink *sink;
-
-  g_return_if_fail (GST_IS_DXR3VIDEOSINK (object));
-
-  sink = DXR3VIDEOSINK (object);
-
-  switch (prop_id) {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-
-static gboolean
-dxr3videosink_open (Dxr3VideoSink * sink)
-{
-  g_return_val_if_fail (!GST_OBJECT_FLAG_IS_SET (sink, DXR3VIDEOSINK_OPEN),
-      FALSE);
-
-  /* Compute the name of the video device file. */
-  sink->video_filename = g_strdup_printf ("/dev/em8300_mv-%d",
-      sink->card_number);
-
-  sink->video_fd = open (sink->video_filename, O_WRONLY);
-  if (sink->video_fd < 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
-        (_("Could not open video device \"%s\" for writing."),
-            sink->video_filename), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  /* Open the control device. */
-  sink->control_filename = g_strdup_printf ("/dev/em8300-%d",
-      sink->card_number);
-
-  sink->control_fd = open (sink->control_filename, O_WRONLY);
-  if (sink->control_fd < 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
-        (_("Could not open control device \"%s\" for writing."),
-            sink->control_filename), GST_ERROR_SYSTEM);
-    return FALSE;
-  }
-
-  GST_OBJECT_FLAG_SET (sink, DXR3VIDEOSINK_OPEN);
-
-  return TRUE;
-}
-
-
-static void
-dxr3videosink_close (Dxr3VideoSink * sink)
-{
-  g_return_if_fail (GST_OBJECT_FLAG_IS_SET (sink, DXR3VIDEOSINK_OPEN));
-
-  if (close (sink->video_fd) != 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
-        (_("Could not close video device \"%s\"."), sink->video_filename),
-        GST_ERROR_SYSTEM);
-    return;
-  }
-
-  if (close (sink->control_fd) != 0) {
-    GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
-        (_("Could not close control device \"%s\"."), sink->control_filename),
-        GST_ERROR_SYSTEM);
-    return;
-  }
-
-  GST_OBJECT_FLAG_UNSET (sink, DXR3VIDEOSINK_OPEN);
-
-  free (sink->video_filename);
-  sink->video_filename = NULL;
-}
-
-
-static gboolean
-dxr3videosink_set_clock (GstElement * element, GstClock * clock)
-{
-  Dxr3VideoSink *src = DXR3VIDEOSINK (element);
-
-  src->clock = clock;
-
-  return GST_ELEMENT_CLASS (parent_class)->set_clock (element, clock);
-}
-
-
-static void
-dxr3videosink_reset_parser (Dxr3VideoSink * sink)
-{
-  if (sink->cur_buf != NULL) {
-    gst_buffer_unref (sink->cur_buf);
-    sink->cur_buf = NULL;
-  }
-  sink->cur_ts = GST_CLOCK_TIME_NONE;
-
-  sink->scan_state = SCAN_STATE_WAITING;
-  sink->scan_pos = 0;
-
-  sink->parse_state = PARSE_STATE_WAITING;
-}
-
-
-static int
-dxr3videosink_next_start_code (Dxr3VideoSink * sink)
-{
-  guchar c;
-
-  g_return_val_if_fail (sink->cur_buf != NULL, -1);
-
-  while (sink->scan_pos < GST_BUFFER_SIZE (sink->cur_buf)) {
-    c = (GST_BUFFER_DATA (sink->cur_buf))[sink->scan_pos];
-
-    switch (sink->scan_state) {
-      case SCAN_STATE_WAITING:
-        if (c == 0x00) {
-          sink->scan_state = SCAN_STATE_0;
-        }
-        break;
-      case SCAN_STATE_0:
-        if (c == 0x00) {
-          sink->scan_state = SCAN_STATE_00;
-        } else {
-          sink->scan_state = SCAN_STATE_WAITING;
-        }
-        break;
-      case SCAN_STATE_00:
-        if (c == 0x01) {
-          sink->scan_state = SCAN_STATE_001;
-        } else if (c != 0x00) {
-          sink->scan_state = SCAN_STATE_WAITING;
-        }
-        break;
-      case SCAN_STATE_001:
-        sink->scan_pos++;
-        sink->scan_state = SCAN_STATE_WAITING;
-        return c;
-    }
-
-    sink->scan_pos++;
-  }
-
-  return -1;
-}
-
-
-static void
-dxr3videosink_discard_data (Dxr3VideoSink * sink, guint cut)
-{
-  GstBuffer *sub;
-  guint size;
-
-  g_return_if_fail (sink->cur_buf != NULL);
-  g_assert (cut <= sink->scan_pos);
-
-  size = sink->scan_pos - cut;
-
-  g_return_if_fail (size <= GST_BUFFER_SIZE (sink->cur_buf));
-
-  if (GST_BUFFER_SIZE (sink->cur_buf) == size) {
-    gst_buffer_unref (sink->cur_buf);
-    sink->cur_buf = NULL;
-  } else {
-    sub = gst_buffer_create_sub (sink->cur_buf, size,
-        GST_BUFFER_SIZE (sink->cur_buf)
-        - size);
-    gst_buffer_unref (sink->cur_buf);
-    sink->cur_buf = sub;
-  }
-
-  sink->scan_state = SCAN_STATE_WAITING;
-  sink->scan_pos = cut;
-
-  sink->cur_ts = GST_CLOCK_TIME_NONE;
-}
-
-
-static void
-dxr3videosink_write_data (Dxr3VideoSink * sink, guint cut)
-{
-  guint size, written;
-  guint8 *data;
-
-  g_return_if_fail (sink->cur_buf != NULL);
-
-  if (GST_OBJECT_FLAG_IS_SET (sink, DXR3VIDEOSINK_OPEN)) {
-    if (sink->cur_ts != GST_CLOCK_TIME_NONE) {
-      guint pts;
-
-/*       fprintf (stderr, "------ Video Time %.04f\n", */
-/*                (double) sink->cur_ts / GST_SECOND); */
-
-      pts = (guint) GSTTIME_TO_MPEGTIME (sink->cur_ts);
-      ioctl (sink->video_fd, EM8300_IOCTL_VIDEO_SETPTS, &pts);
-      sink->cur_ts = GST_CLOCK_TIME_NONE;
-    }
-
-    data = GST_BUFFER_DATA (sink->cur_buf);
-    size = sink->scan_pos - cut;
-
-    g_assert (size <= GST_BUFFER_SIZE (sink->cur_buf));
-
-    /* We should always write data that corresponds to whole MPEG
-       video sintactical elements.  They should always start with an
-       MPEG start code. */
-    g_assert (size >= 4 && data[0] == 0 && data[1] == 0 && data[2] == 1);
-
-    while (size > 0) {
-      written = write (sink->video_fd, data, size);
-      if (written < 0) {
-        GST_ELEMENT_ERROR (sink, RESOURCE, WRITE,
-            (_("Could not write to device \"%s\"."), sink->video_filename),
-            GST_ERROR_SYSTEM);
-        break;
-      }
-      size = size - written;
-      data = data + written;
-    };
-  }
-
-  dxr3videosink_discard_data (sink, cut);
-}
-
-
-static void
-dxr3videosink_parse_data (Dxr3VideoSink * sink)
-{
-  int code;
-
-  /* Timestamp handling assumes that timestamps are associated to
-     sequence starts.  This seems to be the case, at least for
-     DVDs. */
-
-  code = dxr3videosink_next_start_code (sink);
-  while (code >= 0) {
-    switch (sink->parse_state) {
-
-      case PARSE_STATE_WAITING:
-        if (code == START_CODE_SEQUENCE_HEADER) {
-          dxr3videosink_discard_data (sink, 4);
-          sink->parse_state = PARSE_STATE_START;
-          sink->cur_ts = sink->last_ts;
-        }
-        break;
-
-      case PARSE_STATE_START:
-        switch (code) {
-          case START_CODE_SEQUENCE_HEADER:
-            dxr3videosink_discard_data (sink, 4);
-            sink->cur_ts = sink->last_ts;
-            break;
-          case START_CODE_SEQUENCE_END:
-            dxr3videosink_discard_data (sink, 0);
-            sink->parse_state = PARSE_STATE_WAITING;
-            break;
-          case START_CODE_PICTURE:
-            sink->parse_state = PARSE_STATE_PICTURE;
-            break;
-        }
-        break;
-
-      case PARSE_STATE_PICTURE:
-        switch (code) {
-          case START_CODE_SEQUENCE_HEADER:
-            dxr3videosink_write_data (sink, 4);
-            sink->parse_state = PARSE_STATE_START;
-            sink->cur_ts = sink->last_ts;
-            break;
-          case START_CODE_SEQUENCE_END:
-            dxr3videosink_write_data (sink, 0);
-            sink->parse_state = PARSE_STATE_WAITING;
-            break;
-          case START_CODE_PICTURE:
-            dxr3videosink_write_data (sink, 4);
-            break;
-        }
-        break;
-
-    }
-
-    code = dxr3videosink_next_start_code (sink);
-  }
-
-  if (sink->parse_state == PARSE_STATE_WAITING) {
-    dxr3videosink_discard_data (sink, 0);
-  }
-}
-
-
-static gboolean
-dxr3videosink_handle_event (GstPad * pad, GstEvent * event)
-{
-  GstEventType type;
-  Dxr3VideoSink *sink;
-
-  sink = DXR3VIDEOSINK (gst_pad_get_parent (pad));
-
-  type = event ? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN;
-
-  switch (type) {
-    case GST_EVENT_EMPTY:
-      //fprintf (stderr, "++++++ Video empty event\n");
-    {
-      /* FIXME: Handle this with a discontinuity or something. */
-      /* Write an MPEG2 sequence end code, to ensure that the card
-         actually displays the last picture.  Apparently some DVDs are
-         encoded without proper sequence end codes. */
-      static const guint8 sec[4] = { 0x00, 0x00, 0x01, 0xb7 };
-
-      if (sink->cur_buf != NULL) {
-        dxr3videosink_write_data (sink, 0);
-      }
-
-      write (sink->video_fd, &sec, 4);
-    }
-      break;
-
-    case GST_EVENT_DISCONTINUOUS:
-      //fprintf (stderr, "++++++ Video discont event\n");
-    {
-      gint64 time;
-      gboolean has_time;
-      unsigned cur_scr, mpeg_scr, diff;
-
-      has_time = gst_event_discont_get_value (event, GST_FORMAT_TIME, &time);
-      if (has_time) {
-/*         fprintf (stderr, "^^^^^^ Discontinuous event has time %.4f\n", */
-/*                  (double) time / GST_SECOND); */
-
-        /* If the SCR in the card is way off, fix it. */
-        ioctl (sink->control_fd, EM8300_IOCTL_SCR_GET, &cur_scr);
-        mpeg_scr = MPEGTIME_TO_DXRTIME (GSTTIME_TO_MPEGTIME (time));
-
-        diff = cur_scr > mpeg_scr ? cur_scr - mpeg_scr : mpeg_scr - cur_scr;
-        if (diff > 1800) {
-          unsigned zero = 0;
-
-/*           fprintf (stderr, "====== Adjusting SCR from video\n"); */
-
-          ioctl (sink->control_fd, EM8300_IOCTL_SCR_SET, &zero);
-          ioctl (sink->control_fd, EM8300_IOCTL_SCR_SET, &mpeg_scr);
-        }
-      } else {
-/*         fprintf (stderr, "^^^^^^ Discontinuous event has no time\n"); */
-      }
-    }
-      break;
-
-    case GST_EVENT_FLUSH:
-      dxr3videosink_reset_parser (sink);
-      break;
-
-    default:
-      gst_pad_event_default (pad, event);
-      break;
-  }
-
-  return TRUE;
-}
-
-
-static void
-dxr3videosink_chain (GstPad * pad, GstData * _data)
-{
-  GstBuffer *buf = GST_BUFFER (_data);
-  Dxr3VideoSink *sink;
-
-  g_return_if_fail (pad != NULL);
-  g_return_if_fail (GST_IS_PAD (pad));
-  g_return_if_fail (buf != NULL);
-
-  sink = DXR3VIDEOSINK (gst_pad_get_parent (pad));
-
-  if (GST_IS_EVENT (buf)) {
-    dxr3videosink_handle_event (pad, GST_EVENT (buf));
-    return;
-  }
-
-/*   fprintf (stderr, "^^^^^^ Video block\n"); */
-
-  if (sink->cur_buf == NULL) {
-    sink->cur_buf = buf;
-  } else {
-    sink->cur_buf = gst_buffer_append (sink->cur_buf, buf);
-  }
-
-  sink->last_ts = GST_BUFFER_TIMESTAMP (buf);
-
-  dxr3videosink_parse_data (sink);
-}
-
-
-static GstStateChangeReturn
-dxr3videosink_change_state (GstElement * element, GstStateChange transition)
-{
-  g_return_val_if_fail (GST_IS_DXR3VIDEOSINK (element),
-      GST_STATE_CHANGE_FAILURE);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!GST_OBJECT_FLAG_IS_SET (element, DXR3VIDEOSINK_OPEN)) {
-        if (!dxr3videosink_open (DXR3VIDEOSINK (element))) {
-          return GST_STATE_CHANGE_FAILURE;
-        }
-      }
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      dxr3videosink_mvcommand (DXR3VIDEOSINK (element), MVCOMMAND_PAUSE);
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      dxr3videosink_mvcommand (DXR3VIDEOSINK (element), MVCOMMAND_START);
-      break;
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      dxr3videosink_mvcommand (DXR3VIDEOSINK (element), MVCOMMAND_PAUSE);
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      dxr3videosink_mvcommand (DXR3VIDEOSINK (element), MVCOMMAND_STOP);
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      if (GST_OBJECT_FLAG_IS_SET (element, DXR3VIDEOSINK_OPEN)) {
-        dxr3videosink_close (DXR3VIDEOSINK (element));
-      }
-      break;
-  }
-
-  if (GST_ELEMENT_CLASS (parent_class)->change_state) {
-    return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  }
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-#if 0
-/**
- * dxr3videosink_wait:
- *
- * Make the sink wait the specified amount of time.
- */
-static void
-dxr3videosink_wait (Dxr3VideoSink * sink, GstClockTime time)
-{
-  GstClockID id;
-  GstClockTimeDiff jitter;
-  GstClockReturn ret;
-  GstClockTime current_time = gst_clock_get_time (sink->clock);
-
-  id = gst_clock_new_single_shot_id (sink->clock, current_time + time);
-  ret = gst_clock_id_wait (id, &jitter);
-  gst_clock_id_free (id);
-}
-#endif
-
-/**
- * dxr3videosink_mvcommand
- *
- * Send an MVCOMMAND to the card.
- */
-static int
-dxr3videosink_mvcommand (Dxr3VideoSink * sink, int command)
-{
-  em8300_register_t regs;
-
-  regs.microcode_register = 1;
-  regs.reg = 0;
-  regs.val = command;
-
-  return ioctl (sink->control_fd, EM8300_IOCTL_WRITEREG, &regs);
-}
-
-
-/**
- * dxr3videosink_flushed:
- *
- * Default do nothing implementation for the "flushed" signal.  The
- * "flushed" signal will be fired right after flushing the hardware
- * queues due to a received flush event 
- */
-static void
-dxr3videosink_flushed (Dxr3VideoSink * sink)
-{
-  /* Do nothing. */
-}
diff --git a/sys/dxr3/dxr3videosink.h b/sys/dxr3/dxr3videosink.h
deleted file mode 100644 (file)
index 1fd3669..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Martin Soto <martinsoto@users.sourceforge.net>
- *
- * dxr3videosink.h: Video sink for em8300 based cards.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __DXR3VIDEOSINK_H__
-#define __DXR3VIDEOSINK_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-
-#define GST_TYPE_DXR3VIDEOSINK \
-  (dxr3videosink_get_type())
-#define DXR3VIDEOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DXR3VIDEOSINK,Dxr3VideoSink))
-#define DXR3VIDEOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DXR3VIDEOSINK,Dxr3VideoSinkClass))
-#define GST_IS_DXR3VIDEOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DXR3VIDEOSINK))
-#define GST_IS_DXR3VIDEOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DXR3VIDEOSINK))
-
-
-typedef struct _Dxr3VideoSink Dxr3VideoSink;
-typedef struct _Dxr3VideoSinkClass Dxr3VideoSinkClass;
-
-
-typedef enum {
-  DXR3VIDEOSINK_OPEN            = (GST_ELEMENT_FLAG_LAST << 0),
-  DXR3VIDEOSINK_FLAG_LAST       = (GST_ELEMENT_FLAG_LAST << 2),
-} Dxr3VideoSinkFlags;
-
-
-struct _Dxr3VideoSink {
-  GstElement element;
-
-  int card_number;              /* The number of the card to open. */
-
-  gchar *video_filename;        /* File name for the video device. */
-  int video_fd;                 /* File descriptor for the video device. */
-
-  gchar *control_filename;      /* File name for the control device. */
-  int control_fd;               /* File descriptor for the control
-                                   device. */
-
-  GstClock *clock;              /* The clock for this element. */
-
-  GstClockTime last_ts;         /* Last timestamp received. */
-
-  GstBuffer *cur_buf;           /* The buffer we are currently
-                                   building. */
-  GstClockTime cur_ts;          /* Timestamp associated to the
-                                   current buffer. */
-
-  guchar scan_state;            /* The current state of the MPEG start
-                                   code scanner. */
-  guint scan_pos;               /* The current position of the MPEG
-                                   start code scanner (with respect to
-                                   the start of the current buffer. */
-
-  guchar parse_state;           /* The current state of the MPEG
-                                   sequence parser. */
-};
-
-
-struct _Dxr3VideoSinkClass {
-  GstElementClass parent_class;
-
-  /* signals */
-  void (*flushed) (Dxr3VideoSink *sink);
-};
-
-
-extern GType    dxr3videosink_get_type (void);
-
-G_END_DECLS
-
-#endif /* __DXR3VIDEOSINK_H__ */
diff --git a/sys/linsys/Makefile.am b/sys/linsys/Makefile.am
deleted file mode 100644 (file)
index 8b10472..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-plugin_LTLIBRARIES = libgstlinsys.la
-
-libgstlinsys_la_SOURCES = \
-       gstlinsyssdisink.c \
-       gstlinsyssdisrc.c \
-       gstlinsys.c
-
-noinst_HEADERS = \
-       gstlinsyssdisink.h \
-       gstlinsyssdisrc.h \
-       include/asi.h \
-       include/master.h \
-       include/sdi.h \
-       include/sdiaudio.h \
-       include/sdivideo.h
-
-libgstlinsys_la_CFLAGS = \
-       -I$(srcdir)/include \
-       $(GST_BASE_CFLAGS) \
-       $(GST_CFLAGS)
-libgstlinsys_la_LDFLAGS = \
-       $(GST_PLUGIN_LDFLAGS)
-libgstlinsys_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
-libgstlinsys_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/sys/linsys/gstlinsys.c b/sys/linsys/gstlinsys.c
deleted file mode 100644 (file)
index 4893fbe..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 FIXME <fixme@example.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesrc.h>
-
-#include "gstlinsyssdisink.h"
-#include "gstlinsyssdisrc.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-
-  gst_element_register (plugin, "linsyssdisrc", GST_RANK_NONE,
-      gst_linsys_sdi_src_get_type ());
-  gst_element_register (plugin, "linsyssdisink", GST_RANK_NONE,
-      gst_linsys_sdi_sink_get_type ());
-
-  return TRUE;
-}
-
-#define PACKAGE_ORIGIN "http://FIXME.org/"
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    linsys, "FIXME", plugin_init, VERSION, "LGPL", PACKAGE_NAME, PACKAGE_ORIGIN)
diff --git a/sys/linsys/gstlinsyssdisink.c b/sys/linsys/gstlinsyssdisink.c
deleted file mode 100644 (file)
index a8edf37..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 David Schleef <ds@entropywave.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesink.h>
-#include "gstlinsyssdisink.h"
-
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <poll.h>
-#include <sys/ioctl.h>
-
-#include "sdivideo.h"
-
-/* prototypes */
-
-
-static void gst_linsys_sdi_sink_set_property (GObject * object,
-    guint property_id, const GValue * value, GParamSpec * pspec);
-static void gst_linsys_sdi_sink_get_property (GObject * object,
-    guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_linsys_sdi_sink_dispose (GObject * object);
-static void gst_linsys_sdi_sink_finalize (GObject * object);
-
-static GstCaps *gst_linsys_sdi_sink_get_caps (GstBaseSink * sink);
-static gboolean gst_linsys_sdi_sink_set_caps (GstBaseSink * sink,
-    GstCaps * caps);
-static GstFlowReturn gst_linsys_sdi_sink_buffer_alloc (GstBaseSink * sink,
-    guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
-static void gst_linsys_sdi_sink_get_times (GstBaseSink * sink,
-    GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
-static gboolean gst_linsys_sdi_sink_start (GstBaseSink * sink);
-static gboolean gst_linsys_sdi_sink_stop (GstBaseSink * sink);
-static gboolean gst_linsys_sdi_sink_unlock (GstBaseSink * sink);
-static gboolean gst_linsys_sdi_sink_event (GstBaseSink * sink,
-    GstEvent * event);
-static GstFlowReturn gst_linsys_sdi_sink_preroll (GstBaseSink * sink,
-    GstBuffer * buffer);
-static GstFlowReturn gst_linsys_sdi_sink_render (GstBaseSink * sink,
-    GstBuffer * buffer);
-static GstStateChangeReturn gst_linsys_sdi_sink_async_play (GstBaseSink * sink);
-static gboolean gst_linsys_sdi_sink_activate_pull (GstBaseSink * sink,
-    gboolean active);
-static void gst_linsys_sdi_sink_fixate (GstBaseSink * sink, GstCaps * caps);
-static gboolean gst_linsys_sdi_sink_unlock_stop (GstBaseSink * sink);
-static GstFlowReturn
-gst_linsys_sdi_sink_render_list (GstBaseSink * sink,
-    GstBufferList * buffer_list);
-
-enum
-{
-  PROP_0,
-  PROP_DEVICE
-};
-
-#define DEFAULT_DEVICE "/dev/sditx0"
-
-/* pad templates */
-
-static GstStaticPadTemplate gst_linsys_sdi_sink_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw-yuv,format=(fourcc)UYVY,"
-        "width=720,height=480,pixel-aspect-ratio=10/11,"
-        "framerate=30000/1001,interlaced=true,"
-        "colorspec=sdtv,chroma-site=mpeg2")
-    );
-
-/* class initialization */
-
-GST_BOILERPLATE (GstLinsysSdiSink, gst_linsys_sdi_sink, GstBaseSink,
-    GST_TYPE_BASE_SINK);
-
-static void
-gst_linsys_sdi_sink_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_linsys_sdi_sink_sink_template);
-
-  gst_element_class_set_static_metadata (element_class, "SDI video sink",
-      "Sink/Video", "Writes video from SDI transmit device",
-      "David Schleef <ds@entropywave.com>");
-}
-
-static void
-gst_linsys_sdi_sink_class_init (GstLinsysSdiSinkClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass);
-
-  gobject_class->set_property = gst_linsys_sdi_sink_set_property;
-  gobject_class->get_property = gst_linsys_sdi_sink_get_property;
-  gobject_class->dispose = gst_linsys_sdi_sink_dispose;
-  gobject_class->finalize = gst_linsys_sdi_sink_finalize;
-  base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_get_caps);
-  base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_set_caps);
-  if (0)
-    base_sink_class->buffer_alloc =
-        GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_buffer_alloc);
-  base_sink_class->get_times =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_get_times);
-  base_sink_class->start = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_start);
-  base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_stop);
-  base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_unlock);
-  base_sink_class->event = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_event);
-  base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_preroll);
-  base_sink_class->render = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_render);
-  if (0)
-    base_sink_class->async_play =
-        GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_async_play);
-  if (0)
-    base_sink_class->activate_pull =
-        GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_activate_pull);
-  base_sink_class->fixate = GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_fixate);
-  base_sink_class->unlock_stop =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_unlock_stop);
-  base_sink_class->render_list =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_sink_render_list);
-
-  g_object_class_install_property (gobject_class, PROP_DEVICE,
-      g_param_spec_string ("device", "Device", "device to transmit data on",
-          DEFAULT_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-
-static void
-gst_linsys_sdi_sink_init (GstLinsysSdiSink * linsyssdisink,
-    GstLinsysSdiSinkClass * linsyssdisink_class)
-{
-  linsyssdisink->device = g_strdup (DEFAULT_DEVICE);
-}
-
-void
-gst_linsys_sdi_sink_set_property (GObject * object, guint property_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstLinsysSdiSink *linsyssdisink;
-
-  g_return_if_fail (GST_IS_LINSYS_SDI_SINK (object));
-  linsyssdisink = GST_LINSYS_SDI_SINK (object);
-
-  switch (property_id) {
-    case PROP_DEVICE:
-      g_free (linsyssdisink->device);
-      linsyssdisink->device = g_value_dup_string (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_linsys_sdi_sink_get_property (GObject * object, guint property_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstLinsysSdiSink *linsyssdisink;
-
-  g_return_if_fail (GST_IS_LINSYS_SDI_SINK (object));
-  linsyssdisink = GST_LINSYS_SDI_SINK (object);
-
-  switch (property_id) {
-    case PROP_DEVICE:
-      g_value_set_string (value, linsyssdisink->device);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_linsys_sdi_sink_dispose (GObject * object)
-{
-  GstLinsysSdiSink *linsyssdisink;
-
-  g_return_if_fail (GST_IS_LINSYS_SDI_SINK (object));
-  linsyssdisink = GST_LINSYS_SDI_SINK (object);
-
-  /* clean up as possible.  may be called multiple times */
-  g_free (linsyssdisink->device);
-  linsyssdisink->device = NULL;
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_linsys_sdi_sink_finalize (GObject * object)
-{
-  g_return_if_fail (GST_IS_LINSYS_SDI_SINK (object));
-
-  /* clean up object here */
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-static GstCaps *
-gst_linsys_sdi_sink_get_caps (GstBaseSink * sink)
-{
-  GST_ERROR_OBJECT (sink, "get_caps");
-
-  return NULL;
-}
-
-static gboolean
-gst_linsys_sdi_sink_set_caps (GstBaseSink * sink, GstCaps * caps)
-{
-  GST_ERROR_OBJECT (sink, "set_caps");
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_linsys_sdi_sink_buffer_alloc (GstBaseSink * sink, guint64 offset,
-    guint size, GstCaps * caps, GstBuffer ** buf)
-{
-  GST_ERROR_OBJECT (sink, "buffer_alloc");
-
-  return GST_FLOW_ERROR;
-}
-
-static void
-gst_linsys_sdi_sink_get_times (GstBaseSink * sink, GstBuffer * buffer,
-    GstClockTime * start, GstClockTime * end)
-{
-
-}
-
-static gboolean
-gst_linsys_sdi_sink_start (GstBaseSink * sink)
-{
-  GstLinsysSdiSink *linsyssdisink = GST_LINSYS_SDI_SINK (sink);
-  int fd;
-
-  GST_ERROR_OBJECT (sink, "start");
-
-  fd = open (linsyssdisink->device, O_WRONLY, 0);
-  if (fd < 0) {
-    GST_ERROR_OBJECT (sink, "failed to open device");
-    return FALSE;
-  }
-
-  linsyssdisink->fd = fd;
-  linsyssdisink->tmpdata = g_malloc (858 * 525 * 2);
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_sink_stop (GstBaseSink * sink)
-{
-  GstLinsysSdiSink *linsyssdisink = GST_LINSYS_SDI_SINK (sink);
-
-  GST_ERROR_OBJECT (sink, "stop");
-
-  if (linsyssdisink->fd > 0) {
-    close (linsyssdisink->fd);
-  }
-  g_free (linsyssdisink->tmpdata);
-  linsyssdisink->tmpdata = NULL;
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_sink_unlock (GstBaseSink * sink)
-{
-  GST_ERROR_OBJECT (sink, "unlock");
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_sink_event (GstBaseSink * sink, GstEvent * event)
-{
-  GST_ERROR_OBJECT (sink, "event");
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_linsys_sdi_sink_preroll (GstBaseSink * sink, GstBuffer * buffer)
-{
-  GST_ERROR_OBJECT (sink, "preroll");
-
-  return GST_FLOW_OK;
-}
-
-#define EAV 0x74
-#define SAV 0x80
-
-static int
-get_av (int f, int v, int h)
-{
-  static const int table[] = {
-    0x80, 0x9d, 0xab, 0xb6, 0xc7, 0xda, 0xec, 0xf1
-  };
-
-  return table[(f << 2) | (v << 1) | h];
-}
-
-static void
-sdi_mux (guint8 * data, GstBuffer * buffer)
-{
-  int j;
-  int i;
-  guint8 *dest;
-  int f, v;
-  int line;
-
-  for (j = 0; j < 525; j++) {
-    dest = data + 858 * 2 * j;
-
-    line = (j + 4) % 525;
-
-    if (line < 10 || (line >= 264 && line < 273)) {
-      v = 1;
-    } else {
-      v = 0;
-    }
-
-    if (line >= 266 || line < 4) {
-      f = 1;
-    } else {
-      f = 0;
-    }
-
-    dest[0] = 0xff;
-    dest[1] = 0;
-    dest[2] = 0;
-    dest[3] = get_av (f, v, 1);
-
-    for (i = 1; i < (858 - 720) / 2 - 1; i++) {
-      dest[i * 4 + 0] = 0x200 >> 2;
-      dest[i * 4 + 1] = 0x040 >> 2;
-      dest[i * 4 + 2] = 0x200 >> 2;
-      dest[i * 4 + 3] = 0x040 >> 2;
-    }
-
-    i = (858 - 720) / 2 - 1;
-    dest[i * 4 + 0] = 0xff;
-    dest[i * 4 + 1] = 0x00;
-    dest[i * 4 + 2] = 0x00;
-    dest[3] = get_av (f, v, 0);
-
-    i = (858 - 720) / 2;
-    if (line >= 23 && line <= 262) {
-      int src_line = (line - 23) * 2 + 1;
-      memcpy (dest + i * 4, GST_BUFFER_DATA (buffer) + 720 * 2 * src_line,
-          720 * 2);
-    } else if (line >= 285 && line <= 525) {
-      int src_line = (line - 285) * 2 + 0;
-      memcpy (dest + i * 4, GST_BUFFER_DATA (buffer) + 720 * 2 * src_line,
-          720 * 2);
-    } else {
-      for (i = (858 - 720) / 2; i < 858 / 2; i++) {
-        dest[i * 4 + 0] = 0x200 >> 2;
-        dest[i * 4 + 1] = 0x040 >> 2;
-        dest[i * 4 + 2] = 0x200 >> 2;
-        dest[i * 4 + 3] = 0x040 >> 2;
-      }
-    }
-  }
-
-}
-
-static GstFlowReturn
-gst_linsys_sdi_sink_render (GstBaseSink * sink, GstBuffer * buffer)
-{
-  GstLinsysSdiSink *linsyssdisink = GST_LINSYS_SDI_SINK (sink);
-  int ret;
-  struct pollfd pfd;
-  int offset;
-  guint8 *data = linsyssdisink->tmpdata;
-
-  GST_ERROR_OBJECT (sink, "render");
-
-  sdi_mux (data, buffer);
-
-  offset = 0;
-#define SIZE (858*525*2)
-  while (offset < SIZE) {
-    pfd.fd = linsyssdisink->fd;
-    pfd.events = POLLOUT | POLLPRI;
-    ret = poll (&pfd, 1, -1);
-    if (ret < 0) {
-      GST_ERROR_OBJECT (sink, "poll failed %d", ret);
-      return GST_FLOW_ERROR;
-    }
-
-    if (pfd.revents & POLLOUT) {
-      ret = write (linsyssdisink->fd, data + offset, SIZE - offset);
-      if (ret < 0) {
-        GST_ERROR_OBJECT (sink, "write failed %d", ret);
-        return GST_FLOW_ERROR;
-      }
-      offset += ret;
-    }
-    if (pfd.revents & POLLPRI) {
-      long val;
-
-      ret = ioctl (linsyssdisink->fd, SDIVIDEO_IOC_TXGETEVENTS, &val);
-      if (ret < 0) {
-        GST_ERROR_OBJECT (sink, "ioctl failed %d", ret);
-        return GST_FLOW_ERROR;
-      }
-      if (val & SDIVIDEO_EVENT_TX_BUFFER) {
-        GST_ERROR_OBJECT (sink, "transmit buffer underrun");
-        return GST_FLOW_ERROR;
-      }
-      if (val & SDIVIDEO_EVENT_TX_FIFO) {
-        GST_ERROR_OBJECT (sink, "transmit FIFO underrun");
-        return GST_FLOW_ERROR;
-      }
-      if (val & SDIVIDEO_EVENT_TX_DATA) {
-        GST_ERROR_OBJECT (sink, "transmit status change");
-      }
-    }
-  }
-
-  return GST_FLOW_OK;
-}
-
-static GstStateChangeReturn
-gst_linsys_sdi_sink_async_play (GstBaseSink * sink)
-{
-  GST_ERROR_OBJECT (sink, "render");
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-static gboolean
-gst_linsys_sdi_sink_activate_pull (GstBaseSink * sink, gboolean active)
-{
-  GST_ERROR_OBJECT (sink, "activate_pull");
-
-  return TRUE;
-}
-
-static void
-gst_linsys_sdi_sink_fixate (GstBaseSink * sink, GstCaps * caps)
-{
-  GST_ERROR_OBJECT (sink, "fixate");
-
-}
-
-static gboolean
-gst_linsys_sdi_sink_unlock_stop (GstBaseSink * sink)
-{
-  GST_ERROR_OBJECT (sink, "unlock_stop");
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_linsys_sdi_sink_render_list (GstBaseSink * sink,
-    GstBufferList * buffer_list)
-{
-  GST_ERROR_OBJECT (sink, "render_list");
-
-  return GST_FLOW_OK;
-}
diff --git a/sys/linsys/gstlinsyssdisink.h b/sys/linsys/gstlinsyssdisink.h
deleted file mode 100644 (file)
index f036af7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 FIXME <fixme@example.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef _GST_LINSYS_SDI_SINK_H_
-#define _GST_LINSYS_SDI_SINK_H_
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesink.h>
-
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_LINSYS_SDI_SINK   (gst_linsys_sdi_sink_get_type())
-#define GST_LINSYS_SDI_SINK(obj)   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_LINSYS_SDI_SINK,GstLinsysSdiSink))
-#define GST_LINSYS_SDI_SINK_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_LINSYS_SDI_SINK,GstLinsysSdiSinkClass))
-#define GST_IS_LINSYS_SDI_SINK(obj)   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_LINSYS_SDI_SINK))
-#define GST_IS_LINSYS_SDI_SINK_CLASS(obj)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_LINSYS_SDI_SINK))
-
-typedef struct _GstLinsysSdiSink GstLinsysSdiSink;
-typedef struct _GstLinsysSdiSinkClass GstLinsysSdiSinkClass;
-
-struct _GstLinsysSdiSink
-{
-  GstBaseSink base_linsyssdisink;
-
-  /* properties */
-  gchar *device;
-
-  /* state */
-  int fd;
-  guint8 *tmpdata;
-};
-
-struct _GstLinsysSdiSinkClass
-{
-  GstBaseSinkClass base_linsyssdisink_class;
-};
-
-GType gst_linsys_sdi_sink_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/linsys/gstlinsyssdisrc.c b/sys/linsys/gstlinsyssdisrc.c
deleted file mode 100644 (file)
index 43e2898..0000000
+++ /dev/null
@@ -1,551 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 David Schleef <ds@entropywave.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesrc.h>
-#include "gstlinsyssdisrc.h"
-
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <poll.h>
-#include <sys/ioctl.h>
-
-#include "sdivideo.h"
-
-/* prototypes */
-
-
-static void gst_linsys_sdi_src_set_property (GObject * object,
-    guint property_id, const GValue * value, GParamSpec * pspec);
-static void gst_linsys_sdi_src_get_property (GObject * object,
-    guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_linsys_sdi_src_dispose (GObject * object);
-static void gst_linsys_sdi_src_finalize (GObject * object);
-
-static GstCaps *gst_linsys_sdi_src_get_caps (GstBaseSrc * src);
-static gboolean gst_linsys_sdi_src_set_caps (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_linsys_sdi_src_negotiate (GstBaseSrc * src);
-static gboolean gst_linsys_sdi_src_newsegment (GstBaseSrc * src);
-static gboolean gst_linsys_sdi_src_start (GstBaseSrc * src);
-static gboolean gst_linsys_sdi_src_stop (GstBaseSrc * src);
-static void
-gst_linsys_sdi_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
-    GstClockTime * start, GstClockTime * end);
-static gboolean gst_linsys_sdi_src_get_size (GstBaseSrc * src, guint64 * size);
-static gboolean gst_linsys_sdi_src_is_seekable (GstBaseSrc * src);
-static gboolean gst_linsys_sdi_src_unlock (GstBaseSrc * src);
-static gboolean gst_linsys_sdi_src_event (GstBaseSrc * src, GstEvent * event);
-static GstFlowReturn
-gst_linsys_sdi_src_create (GstBaseSrc * src, guint64 offset, guint size,
-    GstBuffer ** buf);
-static gboolean gst_linsys_sdi_src_do_seek (GstBaseSrc * src,
-    GstSegment * segment);
-static gboolean gst_linsys_sdi_src_query (GstBaseSrc * src, GstQuery * query);
-static gboolean gst_linsys_sdi_src_check_get_range (GstBaseSrc * src);
-static void gst_linsys_sdi_src_fixate (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_linsys_sdi_src_unlock_stop (GstBaseSrc * src);
-static gboolean
-gst_linsys_sdi_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
-    GstSegment * segment);
-
-enum
-{
-  PROP_0,
-  PROP_DEVICE
-};
-
-#define DEFAULT_DEVICE "/dev/sdirx0"
-
-GST_DEBUG_CATEGORY (gst_linsys_sdi_src_debug);
-#define GST_CAT_DEFAULT gst_linsys_sdi_src_debug
-
-/* pad templates */
-
-static GstStaticPadTemplate gst_linsys_sdi_src_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw-yuv,format=(fourcc)UYVY,"
-        "width=720,height=480,pixel-aspect-ratio=10/11,"
-        "framerate=30000/1001,interlaced=true,"
-        "colorspec=sdtv,chroma-site=mpeg2")
-    );
-
-/* class initialization */
-
-GST_BOILERPLATE (GstLinsysSdiSrc, gst_linsys_sdi_src, GstBaseSrc,
-    GST_TYPE_BASE_SRC);
-
-static void
-gst_linsys_sdi_src_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_linsys_sdi_src_src_template);
-
-  gst_element_class_set_static_metadata (element_class, "SDI video source",
-      "Source/Video", "Reads video from SDI capture device",
-      "David Schleef <ds@entropywave.com>");
-}
-
-static void
-gst_linsys_sdi_src_class_init (GstLinsysSdiSrcClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
-
-  GST_DEBUG_CATEGORY_INIT (gst_linsys_sdi_src_debug, "linsyssdisrc", 0,
-      "FIXME");
-
-  gobject_class->set_property = gst_linsys_sdi_src_set_property;
-  gobject_class->get_property = gst_linsys_sdi_src_get_property;
-  gobject_class->dispose = gst_linsys_sdi_src_dispose;
-  gobject_class->finalize = gst_linsys_sdi_src_finalize;
-  base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_get_caps);
-  base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_set_caps);
-  if (0)
-    base_src_class->negotiate =
-        GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_negotiate);
-  base_src_class->newsegment =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_newsegment);
-  base_src_class->start = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_start);
-  base_src_class->stop = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_stop);
-  base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_get_times);
-  base_src_class->get_size = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_get_size);
-  base_src_class->is_seekable =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_is_seekable);
-  base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_unlock);
-  base_src_class->event = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_event);
-  base_src_class->create = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_create);
-  if (0)
-    base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_do_seek);
-  base_src_class->query = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_query);
-  base_src_class->check_get_range =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_check_get_range);
-  base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_fixate);
-  base_src_class->unlock_stop =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_unlock_stop);
-  base_src_class->prepare_seek_segment =
-      GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_prepare_seek_segment);
-
-  g_object_class_install_property (gobject_class, PROP_DEVICE,
-      g_param_spec_string ("device", "Device", "device to transmit data on",
-          DEFAULT_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-
-static void
-gst_linsys_sdi_src_init (GstLinsysSdiSrc * linsyssdisrc,
-    GstLinsysSdiSrcClass * linsyssdisrc_class)
-{
-
-  gst_base_src_set_live (GST_BASE_SRC (linsyssdisrc), TRUE);
-  gst_base_src_set_blocksize (GST_BASE_SRC (linsyssdisrc), 720 * 480 * 2);
-
-  linsyssdisrc->device = g_strdup (DEFAULT_DEVICE);
-
-  linsyssdisrc->is_625 = FALSE;
-  linsyssdisrc->fd = -1;
-}
-
-void
-gst_linsys_sdi_src_set_property (GObject * object, guint property_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstLinsysSdiSrc *linsyssdisrc;
-
-  g_return_if_fail (GST_IS_LINSYS_SDI_SRC (object));
-  linsyssdisrc = GST_LINSYS_SDI_SRC (object);
-
-  switch (property_id) {
-    case PROP_DEVICE:
-      g_free (linsyssdisrc->device);
-      linsyssdisrc->device = g_value_dup_string (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_linsys_sdi_src_get_property (GObject * object, guint property_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstLinsysSdiSrc *linsyssdisrc;
-
-  g_return_if_fail (GST_IS_LINSYS_SDI_SRC (object));
-  linsyssdisrc = GST_LINSYS_SDI_SRC (object);
-
-  switch (property_id) {
-    case PROP_DEVICE:
-      g_value_set_string (value, linsyssdisrc->device);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-      break;
-  }
-}
-
-void
-gst_linsys_sdi_src_dispose (GObject * object)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (object);
-  g_return_if_fail (linsyssdisrc != NULL);
-
-  /* clean up as possible.  may be called multiple times */
-  g_free (linsyssdisrc->device);
-  linsyssdisrc->device = NULL;
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_linsys_sdi_src_finalize (GObject * object)
-{
-  g_return_if_fail (GST_IS_LINSYS_SDI_SRC (object));
-
-  /* clean up object here */
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GstCaps *
-gst_linsys_sdi_src_get_caps (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "get_caps");
-
-  return NULL;
-}
-
-static gboolean
-gst_linsys_sdi_src_set_caps (GstBaseSrc * src, GstCaps * caps)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "set_caps");
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_src_negotiate (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "negotiate");
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_src_newsegment (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "newsegment");
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_src_start (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-  int fd;
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "start");
-
-  fd = open (linsyssdisrc->device, O_RDONLY);
-  if (fd < 0) {
-    GST_ERROR_OBJECT (src, "failed to open device");
-    return FALSE;
-  }
-
-  linsyssdisrc->fd = fd;
-
-  if (linsyssdisrc->is_625) {
-    linsyssdisrc->tmpdata = g_malloc (864 * 625 * 2);
-  } else {
-    linsyssdisrc->tmpdata = g_malloc (858 * 525 * 2);
-  }
-  linsyssdisrc->have_sync = FALSE;
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_src_stop (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "stop");
-
-#if 0
-  if (linsyssdisrc->fd > 0) {
-    close (linsyssdisrc->fd);
-    linsyssdisrc->fd = -1;
-  }
-  g_free (linsyssdisrc->tmpdata);
-  linsyssdisrc->tmpdata = NULL;
-#endif
-
-  return TRUE;
-}
-
-static void
-gst_linsys_sdi_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
-    GstClockTime * start, GstClockTime * end)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "get_times");
-}
-
-static gboolean
-gst_linsys_sdi_src_get_size (GstBaseSrc * src, guint64 * size)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "get_size");
-
-  return FALSE;
-}
-
-static gboolean
-gst_linsys_sdi_src_is_seekable (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "is_seekable");
-
-  return FALSE;
-}
-
-static gboolean
-gst_linsys_sdi_src_unlock (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "unlock");
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_src_event (GstBaseSrc * src, GstEvent * event)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "event");
-
-  return TRUE;
-}
-
-static void
-sdi_demux (guint8 * data, GstBuffer * buf, gboolean is_625)
-{
-  int j;
-  int line;
-  int offset;
-
-  if (is_625) {
-    offset = (864 - 720) / 2;
-
-    for (j = 0; j < 480; j++) {
-      if (j & 1) {
-        line = 23 + (j - 1) / 2;
-      } else {
-        line = 335 + j / 2;
-      }
-      memcpy (GST_BUFFER_DATA (buf) + j * 720 * 2,
-          data + (line - 1) * 864 * 2 + offset * 4, 720 * 2);
-    }
-  } else {
-    offset = (858 - 720) / 2;
-
-    for (j = 0; j < 480; j++) {
-      if (j & 1) {
-        line = 23 + (j - 1) / 2;
-      } else {
-        line = 285 + j / 2;
-      }
-      memcpy (GST_BUFFER_DATA (buf) + j * 720 * 2,
-          data + (line - 1) * 858 * 2 + offset * 4, 720 * 2);
-    }
-  }
-
-}
-
-static GstFlowReturn
-gst_linsys_sdi_src_create (GstBaseSrc * src, guint64 _offset, guint size,
-    GstBuffer ** buf)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-  int offset;
-  int ret;
-  struct pollfd pfd;
-  int sdi_size;
-  int sdi_width;
-  guint8 *data = linsyssdisrc->tmpdata;
-
-  if (linsyssdisrc->fd < 0)
-    return GST_FLOW_FLUSHING;
-
-  if (linsyssdisrc->is_625) {
-    sdi_width = 864;
-    sdi_size = 864 * 625 * 2;
-  } else {
-    sdi_width = 858;
-    sdi_size = 858 * 525 * 2;
-  }
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "create size=%d fd=%d", size,
-      linsyssdisrc->fd);
-
-  offset = 0;
-  while (offset < sdi_size) {
-    pfd.fd = linsyssdisrc->fd;
-    pfd.events = POLLIN | POLLPRI;
-    ret = poll (&pfd, 1, 1000);
-    if (ret < 0) {
-      GST_ERROR_OBJECT (src, "poll failed %d", ret);
-      return GST_FLOW_ERROR;
-    }
-
-    if (pfd.revents & POLLIN) {
-      if (linsyssdisrc->have_sync) {
-        ret = read (linsyssdisrc->fd, data + offset, sdi_size - offset);
-      } else {
-        ret = read (linsyssdisrc->fd, data + offset, sdi_width * 2);
-      }
-      if (ret < 0) {
-        GST_ERROR_OBJECT (src, "read failed %d", ret);
-        return GST_FLOW_ERROR;
-      }
-
-      if (!linsyssdisrc->have_sync) {
-        int v = (data[3] >> 5) & 1;
-        int f = (data[3] >> 6) & 1;
-        if (!linsyssdisrc->have_vblank && (f == 0) && (v == 1)) {
-          linsyssdisrc->have_vblank = TRUE;
-        } else if (linsyssdisrc->have_vblank && (f == 0) && (v == 0)) {
-          offset += sdi_width * 2 * 9;
-          linsyssdisrc->have_sync = TRUE;
-          offset += ret;
-        }
-      } else {
-        offset += ret;
-      }
-    }
-    if (pfd.revents & POLLPRI) {
-      long val;
-
-      ret = ioctl (linsyssdisrc->fd, SDIVIDEO_IOC_RXGETEVENTS, &val);
-      if (ret < 0) {
-        GST_ERROR_OBJECT (src, "ioctl failed %d", ret);
-        return GST_FLOW_ERROR;
-      }
-      if (val & SDIVIDEO_EVENT_RX_BUFFER) {
-        GST_ERROR_OBJECT (src, "receive buffer overrun");
-        return GST_FLOW_ERROR;
-      }
-      if (val & SDIVIDEO_EVENT_RX_FIFO) {
-        GST_ERROR_OBJECT (src, "receive FIFO overrun");
-        return GST_FLOW_ERROR;
-      }
-      if (val & SDIVIDEO_EVENT_RX_CARRIER) {
-        GST_ERROR_OBJECT (src, "carrier status change");
-      }
-    }
-  }
-
-  *buf = gst_buffer_new_and_alloc (size);
-  sdi_demux (data, *buf, linsyssdisrc->is_625);
-
-  return GST_FLOW_OK;
-}
-
-static gboolean
-gst_linsys_sdi_src_do_seek (GstBaseSrc * src, GstSegment * segment)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "do_seek");
-
-  return FALSE;
-}
-
-static gboolean
-gst_linsys_sdi_src_query (GstBaseSrc * src, GstQuery * query)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "query");
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_src_check_get_range (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "get_range");
-
-  return FALSE;
-}
-
-static void
-gst_linsys_sdi_src_fixate (GstBaseSrc * src, GstCaps * caps)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "fixate");
-}
-
-static gboolean
-gst_linsys_sdi_src_unlock_stop (GstBaseSrc * src)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "stop");
-
-  return TRUE;
-}
-
-static gboolean
-gst_linsys_sdi_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
-    GstSegment * segment)
-{
-  GstLinsysSdiSrc *linsyssdisrc = GST_LINSYS_SDI_SRC (src);
-
-  GST_DEBUG_OBJECT (linsyssdisrc, "seek_segment");
-
-  return FALSE;
-}
diff --git a/sys/linsys/gstlinsyssdisrc.h b/sys/linsys/gstlinsyssdisrc.h
deleted file mode 100644 (file)
index 80d8d31..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 FIXME <fixme@example.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef _GST_LINSYS_SDI_SRC_H_
-#define _GST_LINSYS_SDI_SRC_H_
-
-#include <gst/gst.h>
-#include <gst/base/gstbasesrc.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_LINSYS_SDI_SRC   (gst_linsys_sdi_src_get_type())
-#define GST_LINSYS_SDI_SRC(obj)   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_LINSYS_SDI_SRC,GstLinsysSdiSrc))
-#define GST_LINSYS_SDI_SRC_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_LINSYS_SDI_SRC,GstLinsysSdiSrcClass))
-#define GST_IS_LINSYS_SDI_SRC(obj)   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_LINSYS_SDI_SRC))
-#define GST_IS_LINSYS_SDI_SRC_CLASS(obj)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_LINSYS_SDI_SRC))
-
-typedef struct _GstLinsysSdiSrc GstLinsysSdiSrc;
-typedef struct _GstLinsysSdiSrcClass GstLinsysSdiSrcClass;
-
-struct _GstLinsysSdiSrc
-{
-  GstBaseSrc base_linsyssdisrc;
-
-  /* properties */
-  gchar *device;
-  gboolean is_625;
-
-  /* state */
-  int fd;
-  guint8 *tmpdata;
-  gboolean have_sync;
-  gboolean have_vblank;
-
-};
-
-struct _GstLinsysSdiSrcClass
-{
-  GstBaseSrcClass base_linsyssdisrc_class;
-};
-
-GType gst_linsys_sdi_src_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/sys/linsys/include/asi.h b/sys/linsys/include/asi.h
deleted file mode 100644 (file)
index 8963588..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/* asi.h
- *
- * Shared header file for the Linux user-space API for
- * Linear Systems Ltd. DVB Master ASI interface boards.
- *
- * Copyright (C) 1999 Tony Bolger <d7v@indigo.ie>
- * Copyright (C) 2000-2009 Linear Systems Ltd.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- *   3. Neither the name of Linear Systems Ltd. nor the names of its
- *      contributors may be used to endorse or promote products derived from
- *      this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY LINEAR SYSTEMS LTD. "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL LINEAR SYSTEMS LTD. OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Linear Systems can be contacted at <http://www.linsys.ca/>.
- *
- */
-
-#ifndef _ASI_H
-#define _ASI_H
-
-/* Driver info */
-#define ASI_DRIVER_NAME "asi"
-
-#define ASI_MAJOR 61   /* Set to 0 for dynamic allocation.
-                        * Otherwise, 61 is available.
-                        * See /usr/src/linux/Documentation/devices.txt */
-
-#define ASI_TX_BUFFERS_MIN 2 /* This must be at least 2 */
-/* The minimum transmit buffer size must be positive, divisible by 8,
- * and large enough that the buffers aren't transferred to the onboard FIFOs
- * too quickly for the machine to handle the interrupts.
- * This is especially a problem at startup, when the FIFOs are empty.
- * Relevant factors include onboard FIFO size, PCI bus throughput,
- * processor speed, and interrupt latency. */
-#define ASI_TX_BUFSIZE_MIN 1024
-#define ASI_RX_BUFFERS_MIN 2 /* This must be at least 2 */
-#define ASI_RX_BUFSIZE_MIN 8 /* This must be positive and divisible by 8 */
-
-#define ASI_TX_BUFFERS 54 /* This must be at least 2 */
-#define ASI_TX_BUFSIZE 38352 /* This must be positive and divisible by 8 */
-#define ASI_RX_BUFFERS 54 /* This must be at least 2 */
-#define ASI_RX_BUFSIZE 38352 /* This must be positive and divisible by 8 */
-
-/* Ioctl () definitions */
-#define ASI_IOC_MAGIC '?' /* This ioctl magic number is currently free. See
-                          * /usr/src/linux/Documentation/ioctl-number.txt */
-
-#define ASI_IOC_TXGETCAP       _IOR(ASI_IOC_MAGIC, 1, unsigned int)
-#define ASI_IOC_TXGETEVENTS    _IOR(ASI_IOC_MAGIC, 2, unsigned int)
-#define ASI_IOC_TXGETBUFLEVEL  _IOR(ASI_IOC_MAGIC, 3, unsigned int)
-#define ASI_IOC_TXSETSTUFFING  _IOW(ASI_IOC_MAGIC, 4, struct asi_txstuffing)
-#define ASI_IOC_TXGETBYTECOUNT _IOR(ASI_IOC_MAGIC, 5, unsigned int)
-/* #define ASI_IOC_TXGETFIFO   _IOR(ASI_IOC_MAGIC, 6, int) */
-#define ASI_IOC_TXGETTXD       _IOR(ASI_IOC_MAGIC, 7, int)
-#define ASI_IOC_TXGET27COUNT   _IOR(ASI_IOC_MAGIC, 8, unsigned int)
-/* Provide compatibility with applications compiled for older API */
-#define ASI_IOC_TXSETPID_DEPRECATED    _IOR(ASI_IOC_MAGIC, 9, unsigned int)
-#define ASI_IOC_TXSETPID       _IOW(ASI_IOC_MAGIC, 9, unsigned int)
-#define ASI_IOC_TXGETPCRSTAMP  _IOR(ASI_IOC_MAGIC, 10, struct asi_pcrstamp)
-/* Provide compatibility with applications compiled for older API */
-#define ASI_IOC_TXCHANGENEXTIP_DEPRECATED      _IOR(ASI_IOC_MAGIC, 11, int)
-#define ASI_IOC_TXCHANGENEXTIP _IOW(ASI_IOC_MAGIC, 11, int)
-
-#define ASI_IOC_RXGETCAP       _IOR(ASI_IOC_MAGIC, 65, unsigned int)
-#define ASI_IOC_RXGETEVENTS    _IOR(ASI_IOC_MAGIC, 66, unsigned int)
-#define ASI_IOC_RXGETBUFLEVEL  _IOR(ASI_IOC_MAGIC, 67, unsigned int)
-/* #define ASI_IOC_RXSETREFRAME        _IOW(ASI_IOC_MAGIC, 68, int) */
-#define ASI_IOC_RXGETSTATUS    _IOR(ASI_IOC_MAGIC, 69, int)
-#define ASI_IOC_RXGETBYTECOUNT _IOR(ASI_IOC_MAGIC, 70, unsigned int)
-/* #define ASI_IOC_RXGETFIFO   _IOR(ASI_IOC_MAGIC, 71, int) */
-#define ASI_IOC_RXSETINVSYNC   _IOW(ASI_IOC_MAGIC, 72, int)
-#define ASI_IOC_RXGETCARRIER   _IOR(ASI_IOC_MAGIC, 73, int)
-#define ASI_IOC_RXSETDSYNC     _IOW(ASI_IOC_MAGIC, 74, int)
-#define ASI_IOC_RXGETRXD       _IOR(ASI_IOC_MAGIC, 75, int)
-#define ASI_IOC_RXSETPF                _IOW(ASI_IOC_MAGIC, 76, unsigned int [256])
-/* #define ASI_IOC_RXSETPFE    _IOW(ASI_IOC_MAGIC, 77, int) */
-#define ASI_IOC_RXSETPID0      _IOW(ASI_IOC_MAGIC, 78, int)
-#define ASI_IOC_RXGETPID0COUNT _IOR(ASI_IOC_MAGIC, 79, unsigned int)
-#define ASI_IOC_RXSETPID1      _IOW(ASI_IOC_MAGIC, 80, int)
-#define ASI_IOC_RXGETPID1COUNT _IOR(ASI_IOC_MAGIC, 81, unsigned int)
-#define ASI_IOC_RXSETPID2      _IOW(ASI_IOC_MAGIC, 82, int)
-#define ASI_IOC_RXGETPID2COUNT _IOR(ASI_IOC_MAGIC, 83, unsigned int)
-#define ASI_IOC_RXSETPID3      _IOW(ASI_IOC_MAGIC, 84, int)
-#define ASI_IOC_RXGETPID3COUNT _IOR(ASI_IOC_MAGIC, 85, unsigned int)
-/* #define ASI_IOC_RXGETSTAMP  _IOR(ASI_IOC_MAGIC, 86, unsigned int) */
-#define ASI_IOC_RXGET27COUNT   _IOR(ASI_IOC_MAGIC, 87, unsigned int)
-#define ASI_IOC_RXGETSTATUS2   _IOR(ASI_IOC_MAGIC, 88, int)
-/* Provide compatibility with applications compiled for older API */
-#define ASI_IOC_RXSETINPUT_DEPRECATED  _IOR(ASI_IOC_MAGIC, 89, int)
-#define ASI_IOC_RXSETINPUT     _IOW(ASI_IOC_MAGIC, 89, int)
-#define ASI_IOC_RXGETRXD2      _IOR(ASI_IOC_MAGIC, 90, int)
-
-#define ASI_IOC_GETID          _IOR(ASI_IOC_MAGIC, 129, unsigned int)
-#define ASI_IOC_GETVERSION     _IOR(ASI_IOC_MAGIC, 130, unsigned int)
-
-/* Transmitter event flag bit locations */
-#define ASI_EVENT_TX_BUFFER_ORDER      0
-#define ASI_EVENT_TX_BUFFER            (1 << ASI_EVENT_TX_BUFFER_ORDER)
-#define ASI_EVENT_TX_FIFO_ORDER                1
-#define ASI_EVENT_TX_FIFO              (1 << ASI_EVENT_TX_FIFO_ORDER)
-#define ASI_EVENT_TX_DATA_ORDER                2
-#define ASI_EVENT_TX_DATA              (1 << ASI_EVENT_TX_DATA_ORDER)
-
-/* Receiver event flag bit locations */
-#define ASI_EVENT_RX_BUFFER_ORDER      0
-#define ASI_EVENT_RX_BUFFER            (1 << ASI_EVENT_RX_BUFFER_ORDER)
-#define ASI_EVENT_RX_FIFO_ORDER                1
-#define ASI_EVENT_RX_FIFO              (1 << ASI_EVENT_RX_FIFO_ORDER)
-#define ASI_EVENT_RX_CARRIER_ORDER     2
-#define ASI_EVENT_RX_CARRIER           (1 << ASI_EVENT_RX_CARRIER_ORDER)
-#define ASI_EVENT_RX_AOS_ORDER         3
-#define ASI_EVENT_RX_AOS               (1 << ASI_EVENT_RX_AOS_ORDER)
-#define ASI_EVENT_RX_LOS_ORDER         4
-#define ASI_EVENT_RX_LOS               (1 << ASI_EVENT_RX_LOS_ORDER)
-#define ASI_EVENT_RX_DATA_ORDER                5
-#define ASI_EVENT_RX_DATA              (1 << ASI_EVENT_RX_DATA_ORDER)
-
-/**
- * asi_txstuffing - Transmitter stuffing parameters
- * @ib: interbyte stuffing
- * @ip: interpacket stuffing
- * @normal_ip: FT0
- * @big_ip: FT1
- * @il_normal: IL0
- * @il_big: IL1
- **/
-struct asi_txstuffing {
-       /* Number of K28.5 characters to insert between packet bytes */
-       unsigned int ib;
-
-       /* Base number of K28.5 characters to insert between packets,
-        * not including the two required by ASI */
-       unsigned int ip;
-
-       /* Number of packets with (ip) bytes of interpacket stuffing
-        * per finetuning cycle */
-       unsigned int normal_ip;
-
-       /* Number of packets with (ip + 1) bytes of interpacket stuffing
-        * per finetuning cycle */
-       unsigned int big_ip;
-
-       /* Number of packets with (ip) bytes of interpacket stuffing
-        * per interleaved finetuning cycle */
-       unsigned int il_normal;
-
-       /* Number of packets with (ip + 1) bytes of interpacket stuffing
-        * per interleaved finetuning cycle */
-       unsigned int il_big;
-};
-
-/**
- * asi_pcrstamp - PCR - departure time pair
- * @adaptation_field_length: adaptation field length
- * @adaptation_field_flags: adaptation field flags
- * @PCR: a program clock reference
- * @count: departure time of this PCR, in 1 / 27 MHz
- **/
-struct asi_pcrstamp {
-       unsigned char adaptation_field_length;
-       unsigned char adaptation_field_flags;
-       unsigned char PCR[6];
-       long long int count;
-};
-
-/* Interface capabilities */
-#define ASI_CAP_TX_MAKE204     0x00000004
-#define ASI_CAP_TX_FINETUNING  0x00000008
-#define ASI_CAP_TX_BYTECOUNTER 0x00000010
-#define ASI_CAP_TX_SETCLKSRC   0x00000020
-#define ASI_CAP_TX_FIFOUNDERRUN        0x00000040
-#define ASI_CAP_TX_LARGEIB     0x00000080
-#define ASI_CAP_TX_INTERLEAVING        0x00000100
-#define ASI_CAP_TX_DATA                0x00000200
-#define ASI_CAP_TX_RXCLKSRC    0x00000400
-/* #define ASI_CAP_TX_COMPOSITEREF     0x00000800 */
-#define ASI_CAP_TX_PCRSTAMP    0x00001000
-#define ASI_CAP_TX_CHANGENEXTIP        0x00002000
-#define ASI_CAP_TX_27COUNTER   0x00004000
-#define ASI_CAP_TX_BYTESOR27   0x00008000
-#define ASI_CAP_TX_TIMESTAMPS  0x00010000
-#define ASI_CAP_TX_PTIMESTAMPS 0x00020000
-#define ASI_CAP_TX_NULLPACKETS 0x00040000
-
-#define ASI_CAP_RX_SYNC                0x00000004
-#define ASI_CAP_RX_MAKE188     0x00000008
-#define ASI_CAP_RX_BYTECOUNTER 0x00000010
-/* #define ASI_CAP_RX_FIFOSTATUS       0x00000020 */
-#define ASI_CAP_RX_INVSYNC     0x00000040
-#define ASI_CAP_RX_CD          0x00000080
-#define ASI_CAP_RX_DSYNC       0x00000100
-#define ASI_CAP_RX_DATA                0x00000200
-#define ASI_CAP_RX_PIDFILTER   0x00000400
-#define ASI_CAP_RX_PIDCOUNTER  0x00000800
-#define ASI_CAP_RX_4PIDCOUNTER 0x00001000
-#define ASI_CAP_RX_FORCEDMA    0x00002000
-#define ASI_CAP_RX_27COUNTER   0x00004000
-#define ASI_CAP_RX_BYTESOR27   0x00008000
-#define ASI_CAP_RX_TIMESTAMPS  0x00010000
-#define ASI_CAP_RX_PTIMESTAMPS 0x00020000
-#define ASI_CAP_RX_NULLPACKETS 0x00040000
-#define ASI_CAP_RX_REDUNDANT   0x00080000
-#define ASI_CAP_RX_DATA2       0x00100000
-
-/* Transmitter clock source settings */
-#define ASI_CTL_TX_CLKSRC_ONBOARD      0
-#define ASI_CTL_TX_CLKSRC_EXT          1
-#define ASI_CTL_TX_CLKSRC_RX           2
-/* #define ASI_CTL_TX_CLKSRC_EXT_PAL   3 */
-
-/* Transmitter mode settings */
-#define ASI_CTL_TX_MODE_188    0
-#define ASI_CTL_TX_MODE_204    1
-#define ASI_CTL_TX_MODE_MAKE204        2
-
-/* Receiver mode settings */
-#define ASI_CTL_RX_MODE_RAW            0
-#define ASI_CTL_RX_MODE_188            1
-#define ASI_CTL_RX_MODE_204            2
-#define ASI_CTL_RX_MODE_AUTO           3
-#define ASI_CTL_RX_MODE_AUTOMAKE188    4
-#define ASI_CTL_RX_MODE_204MAKE188     5
-
-/* Timestamping settings */
-#define ASI_CTL_TSTAMP_NONE    0
-#define ASI_CTL_TSTAMP_APPEND  1
-#define ASI_CTL_TSTAMP_PREPEND 2
-
-/* Transport settings */
-#define ASI_CTL_TRANSPORT_DVB_ASI      0
-#define ASI_CTL_TRANSPORT_SMPTE_310M   1
-
-#endif
-
diff --git a/sys/linsys/include/master.h b/sys/linsys/include/master.h
deleted file mode 100644 (file)
index 1d005c6..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* master.h
- *
- * Global definitions for Linear Systems Ltd.
- * digital television-related boards.
- *
- * Copyright (C) 2004-2009 Linear Systems Ltd.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- *   3. Neither the name of Linear Systems Ltd. nor the names of its
- *      contributors may be used to endorse or promote products derived from
- *      this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY LINEAR SYSTEMS LTD. "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL LINEAR SYSTEMS LTD. OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Linear Systems can be contacted at <http://www.linsys.ca/>.
- *
- */
-
-#ifndef _MASTER_H
-#define _MASTER_H
-
-#define MASTER_DRIVER_VERSION "2.7.0"
-#define MASTER_DRIVER_VERSION_CODE 0x020700
-#define MASTER_DRIVER_DATE "2010-01-11"
-
-#define MASTER_PCI_VENDOR_ID_LINSYS 0x1254
-
-/* Device capabilities */
-#define MASTER_CAP_BYPASS      0x00000001
-#define MASTER_CAP_WATCHDOG    0x00000002
-#define MASTER_CAP_GPI         0x00000004
-#define MASTER_CAP_GPO         0x00000008
-#define MASTER_CAP_UID         0x00000010
-#define MASTER_CAP_BLACKBURST  0x00000020
-
-/* Bypass mode settings */
-#define MASTER_CTL_BYPASS_ENABLE       0
-#define MASTER_CTL_BYPASS_DISABLE      1
-#define MASTER_CTL_BYPASS_WATCHDOG     2
-
-/* Black burst type settings */
-#define MASTER_CTL_BLACKBURST_NTSC     0
-#define MASTER_CTL_BLACKBURST_PAL      1
-
-/* Maximum watchdog timeout in milliseconds.
- * Limited to 32 bits at 40 MHz or 27 MHz */
-#define MASTER_WATCHDOG_MAX    100000
-
-#endif
-
diff --git a/sys/linsys/include/sdi.h b/sys/linsys/include/sdi.h
deleted file mode 100644 (file)
index 659c418..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/* sdi.h
- *
- * Shared header file for the Linux user-space API for
- * Linear Systems Ltd. SMPTE 259M-C interface boards.
- *
- * Copyright (C) 2004-2009 Linear Systems Ltd.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- *   3. Neither the name of Linear Systems Ltd. nor the names of its
- *      contributors may be used to endorse or promote products derived from
- *      this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY LINEAR SYSTEMS LTD. "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL LINEAR SYSTEMS LTD. OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Linear Systems can be contacted at <http://www.linsys.ca/>.
- *
- */
-
-#ifndef _SDI_H
-#define _SDI_H
-
-/* Driver info */
-#define SDI_DRIVER_NAME "sdi"
-
-#define SDI_MAJOR 121  /* Set to 0 for dynamic allocation.
-                        * Otherwise, 121 is available.
-                        * See /usr/src/linux/Documentation/devices.txt */
-
-#define SDI_TX_BUFFERS_MIN 2 /* This must be at least 2 */
-/* The minimum transmit buffer size must be positive, divisible by 4,
- * and large enough that the buffers aren't transferred to the onboard FIFOs
- * too quickly for the machine to handle the interrupts.
- * This is especially a problem at startup, when the FIFOs are empty.
- * Relevant factors include onboard FIFO size, PCI bus throughput,
- * processor speed, and interrupt latency. */
-#define SDI_TX_BUFSIZE_MIN 1024
-#define SDI_RX_BUFFERS_MIN 2 /* This must be at least 2 */
-#define SDI_RX_BUFSIZE_MIN 8 /* This must be positive and divisible by 4 */
-
-#define SDI_TX_BUFFERS 25 /* This must be at least 2 */
-#define SDI_TX_BUFSIZE 1235520 /* This must be positive and divisible by 4 */
-#define SDI_RX_BUFFERS 25 /* This must be at least 2 */
-#define SDI_RX_BUFSIZE 1235520 /* This must be positive and divisible by 4 */
-
-/* Ioctl () definitions */
-#define SDI_IOC_MAGIC '=' /* This ioctl magic number is currently free. See
-                          * /usr/src/linux/Documentation/ioctl-number.txt */
-
-#define SDI_IOC_TXGETCAP       _IOR(SDI_IOC_MAGIC, 1, unsigned int)
-#define SDI_IOC_TXGETEVENTS    _IOR(SDI_IOC_MAGIC, 2, unsigned int)
-#define SDI_IOC_TXGETBUFLEVEL  _IOR(SDI_IOC_MAGIC, 3, unsigned int)
-#define SDI_IOC_TXGETTXD       _IOR(SDI_IOC_MAGIC, 4, int)
-
-#define SDI_IOC_RXGETCAP       _IOR(SDI_IOC_MAGIC, 65, unsigned int)
-#define SDI_IOC_RXGETEVENTS    _IOR(SDI_IOC_MAGIC, 66, unsigned int)
-#define SDI_IOC_RXGETBUFLEVEL  _IOR(SDI_IOC_MAGIC, 67, unsigned int)
-#define SDI_IOC_RXGETCARRIER   _IOR(SDI_IOC_MAGIC, 68, int)
-#define SDI_IOC_RXGETSTATUS    _IOR(SDI_IOC_MAGIC, 69, int)
-
-#define SDI_IOC_GETID          _IOR(SDI_IOC_MAGIC, 129, unsigned int)
-#define SDI_IOC_GETVERSION     _IOR(SDI_IOC_MAGIC, 130, unsigned int)
-#define SDI_IOC_QBUF_DEPRECATED                _IOR(SDI_IOC_MAGIC, 131, unsigned int)
-#define SDI_IOC_QBUF           _IOW(SDI_IOC_MAGIC, 131, unsigned int)
-#define SDI_IOC_DQBUF_DEPRECATED       _IOR(SDI_IOC_MAGIC, 132, unsigned int)
-#define SDI_IOC_DQBUF          _IOW(SDI_IOC_MAGIC, 132, unsigned int)
-
-/* Transmitter event flag bit locations */
-#define SDI_EVENT_TX_BUFFER_ORDER      0
-#define SDI_EVENT_TX_BUFFER            (1 << SDI_EVENT_TX_BUFFER_ORDER)
-#define SDI_EVENT_TX_FIFO_ORDER                1
-#define SDI_EVENT_TX_FIFO              (1 << SDI_EVENT_TX_FIFO_ORDER)
-#define SDI_EVENT_TX_DATA_ORDER                2
-#define SDI_EVENT_TX_DATA              (1 << SDI_EVENT_TX_DATA_ORDER)
-
-/* Receiver event flag bit locations */
-#define SDI_EVENT_RX_BUFFER_ORDER      0
-#define SDI_EVENT_RX_BUFFER            (1 << SDI_EVENT_RX_BUFFER_ORDER)
-#define SDI_EVENT_RX_FIFO_ORDER                1
-#define SDI_EVENT_RX_FIFO              (1 << SDI_EVENT_RX_FIFO_ORDER)
-#define SDI_EVENT_RX_CARRIER_ORDER     2
-#define SDI_EVENT_RX_CARRIER           (1 << SDI_EVENT_RX_CARRIER_ORDER)
-
-/* Interface capabilities */
-#define SDI_CAP_TX_RXCLKSRC    0x00000001
-
-/* Transmitter clock source settings */
-#define SDI_CTL_TX_CLKSRC_ONBOARD      0
-#define SDI_CTL_TX_CLKSRC_EXT          1
-#define SDI_CTL_TX_CLKSRC_RX           2
-
-/* Mode settings */
-#define SDI_CTL_MODE_8BIT      0
-#define SDI_CTL_MODE_10BIT     1
-
-#endif
-
diff --git a/sys/linsys/include/sdiaudio.h b/sys/linsys/include/sdiaudio.h
deleted file mode 100644 (file)
index 1df6f86..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/* sdiaudio.h
- *
- * Shared header file for the Linux user-space API for
- * Linear Systems Ltd. SMPTE 292M and SMPTE 259M-C Audio interface boards.
- *
- * Copyright (C) 2009 Linear Systems Ltd.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- *   3. Neither the name of Linear Systems Ltd. nor the names of its
- *      contributors may be used to endorse or promote products derived from
- *      this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY LINEAR SYSTEMS LTD. "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL LINEAR SYSTEMS LTD. OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Linear Systems can be contacted at <http://www.linsys.ca/>.
- *
- */
-
-#ifndef _SDIAUDIO_H
-#define _SDIAUDIO_H
-
-/* Driver info */
-#define SDIAUDIO_DRIVER_NAME "sdiaudio"
-
-#define SDIAUDIO_MAJOR 0       /* Set to 0 for dynamic allocation.
-                        * See /usr/src/linux/Documentation/devices.txt */
-
-#define SDIAUDIO_TX_BUFFERS_MIN 2 /* This must be at least 2 */
-/* The minimum transmit buffer size must be positive, divisible by 4,
- * and large enough that the buffers aren't transferred to the onboard FIFOs
- * too quickly for the machine to handle the interrupts.
- * This is especially a problem at startup, when the FIFOs are empty.
- * Relevant factors include onboard FIFO size, PCI bus throughput,
- * processor speed, and interrupt latency. */
-#define SDIAUDIO_TX_BUFSIZE_MIN 1024
-#define SDIAUDIO_RX_BUFFERS_MIN 2 /* This must be at least 2 */
-#define SDIAUDIO_RX_BUFSIZE_MIN 8 /* This must be positive and divisible by 4 */
-
-#define SDIAUDIO_TX_BUFFERS 30 /* This must be at least 2 */
-#define SDIAUDIO_TX_BUFSIZE 6400 /* This must be positive and divisible by 4 */
-#define SDIAUDIO_RX_BUFFERS 30 /* This must be at least 2 */
-#define SDIAUDIO_RX_BUFSIZE 6400 /* This must be positive and divisible by 4 */
-
-/* Ioctl () definitions */
-#define SDIAUDIO_IOC_MAGIC '~' /* This ioctl magic number is currently free. See
-                          * /usr/src/linux/Documentation/ioctl-number.txt */
-
-#define SDIAUDIO_IOC_TXGETCAP                  _IOR(SDIAUDIO_IOC_MAGIC, 1, unsigned int)
-#define SDIAUDIO_IOC_TXGETEVENTS               _IOR(SDIAUDIO_IOC_MAGIC, 2, unsigned int)
-#define SDIAUDIO_IOC_TXGETBUFLEVEL             _IOR(SDIAUDIO_IOC_MAGIC, 3, unsigned int)
-#define SDIAUDIO_IOC_TXGETTXD                  _IOR(SDIAUDIO_IOC_MAGIC, 4, int)
-
-#define SDIAUDIO_IOC_RXGETCAP                  _IOR(SDIAUDIO_IOC_MAGIC, 65, unsigned int)
-#define SDIAUDIO_IOC_RXGETEVENTS               _IOR(SDIAUDIO_IOC_MAGIC, 66, unsigned int)
-#define SDIAUDIO_IOC_RXGETBUFLEVEL             _IOR(SDIAUDIO_IOC_MAGIC, 67, unsigned int)
-#define SDIAUDIO_IOC_RXGETCARRIER              _IOR(SDIAUDIO_IOC_MAGIC, 68, int)
-#define SDIAUDIO_IOC_RXGETSTATUS               _IOR(SDIAUDIO_IOC_MAGIC, 69, int)
-#define SDIAUDIO_IOC_RXGETAUDIOGR0ERROR                _IOR(SDIAUDIO_IOC_MAGIC, 70, unsigned int)
-#define SDIAUDIO_IOC_RXGETAUDIOGR0DELAYA       _IOR(SDIAUDIO_IOC_MAGIC, 71, unsigned int)
-#define SDIAUDIO_IOC_RXGETAUDIOGR0DELAYB       _IOR(SDIAUDIO_IOC_MAGIC, 72, unsigned int)
-#define SDIAUDIO_IOC_RXGETNONAUDIO             _IOR(SDIAUDIO_IOC_MAGIC, 73, unsigned int)
-#define SDIAUDIO_IOC_RXGETAUDSTAT              _IOR(SDIAUDIO_IOC_MAGIC, 74, unsigned int)
-#define SDIAUDIO_IOC_RXGETAUDRATE              _IOR(SDIAUDIO_IOC_MAGIC, 75, unsigned int)
-
-#define SDIAUDIO_IOC_GETID                     _IOR(SDIAUDIO_IOC_MAGIC, 129, unsigned int)
-#define SDIAUDIO_IOC_GETVERSION                        _IOR(SDIAUDIO_IOC_MAGIC, 130, unsigned int)
-#define SDIAUDIO_IOC_QBUF                      _IOW(SDIAUDIO_IOC_MAGIC, 131, unsigned int)
-#define SDIAUDIO_IOC_DQBUF                     _IOW(SDIAUDIO_IOC_MAGIC, 132, unsigned int)
-
-/* Transmitter event flag bit locations */
-#define SDIAUDIO_EVENT_TX_BUFFER_ORDER 0
-#define SDIAUDIO_EVENT_TX_BUFFER       (1 << SDIAUDIO_EVENT_TX_BUFFER_ORDER)
-#define SDIAUDIO_EVENT_TX_FIFO_ORDER   1
-#define SDIAUDIO_EVENT_TX_FIFO         (1 << SDIAUDIO_EVENT_TX_FIFO_ORDER)
-#define SDIAUDIO_EVENT_TX_DATA_ORDER   2
-#define SDIAUDIO_EVENT_TX_DATA         (1 << SDIAUDIO_EVENT_TX_DATA_ORDER)
-
-/* Receiver event flag bit locations */
-#define SDIAUDIO_EVENT_RX_BUFFER_ORDER 0
-#define SDIAUDIO_EVENT_RX_BUFFER       (1 << SDIAUDIO_EVENT_RX_BUFFER_ORDER)
-#define SDIAUDIO_EVENT_RX_FIFO_ORDER   1
-#define SDIAUDIO_EVENT_RX_FIFO         (1 << SDIAUDIO_EVENT_RX_FIFO_ORDER)
-#define SDIAUDIO_EVENT_RX_CARRIER_ORDER        2
-#define SDIAUDIO_EVENT_RX_CARRIER      (1 << SDIAUDIO_EVENT_RX_CARRIER_ORDER)
-#define SDIAUDIO_EVENT_RX_DATA_ORDER   3
-#define SDIAUDIO_EVENT_RX_DATA         (1 << SDIAUDIO_EVENT_RX_DATA_ORDER)
-
-/* Interface capabilities */
-#define SDIAUDIO_CAP_RX_CD             0x00000001
-#define SDIAUDIO_CAP_RX_DATA           0x00000002
-#define SDIAUDIO_CAP_RX_STATS          0x00000004
-#define SDIAUDIO_CAP_RX_NONAUDIO       0x00000008
-#define SDIAUDIO_CAP_RX_24BIT          0x00000010
-
-/* Audio sample size */
-#define SDIAUDIO_CTL_AUDSAMP_SZ_16     16 /* 16 bit */
-#define SDIAUDIO_CTL_AUDSAMP_SZ_24     24 /* 24 bit */
-#define SDIAUDIO_CTL_AUDSAMP_SZ_32     32 /* 32 bit */
-
-/* Audio channel enable */
-#define SDIAUDIO_CTL_AUDCH_EN_0                0 /* 0 channel/disable audio */
-#define SDIAUDIO_CTL_AUDCH_EN_2                2 /* 2 channel */
-#define SDIAUDIO_CTL_AUDCH_EN_4                4 /* 4 channel */
-#define SDIAUDIO_CTL_AUDCH_EN_6                6 /* 6 channel */
-#define SDIAUDIO_CTL_AUDCH_EN_8                8 /* 8 channel */
-
-#define SDIAUDIO_CTL_PCM_ALLCHANNEL            0x00000000 /* PCM for channel 1 - 8 */
-#define SDIAUDIO_CTL_NONAUDIO_ALLCHANNEL       0x000000ff /* No audio for channel 1 - 8 */
-
-/* Active audio channels status */
-#define SDIAUDIO_CTL_ACT_CHAN_0                0x00 /* no audio control packets */
-#define SDIAUDIO_CTL_ACT_CHAN_2                0x03 /* 2 channels */
-#define SDIAUDIO_CTL_ACT_CHAN_4                0x0f /* 4 channels */
-#define SDIAUDIO_CTL_ACT_CHAN_6                0x3f /* 6 channels */
-#define SDIAUDIO_CTL_ACT_CHAN_8                0xff /* 8 channels */
-
-/* Audio rate */
-#define SDIAUDIO_CTL_SYNC_48_KHZ       0 /* Synchronous, 48 kHz */
-#define SDIAUDIO_CTL_SYNC_44_1_KHZ     2 /* Synchronous, 44.1 kHz */
-#define SDIAUDIO_CTL_SYNC_32_KHZ       4 /* Synchronous, 32 kHz */
-#define SDIAUDIO_CTL_SYNC_96_KHZ       8 /* Synchronous, 96 kHz */
-#define SDIAUDIO_CTL_SYNC_FREE_RUNNING 14 /* Synchronous, free running */
-#define SDIAUDIO_CTL_ASYNC_48_KHZ      1 /* Asynchronous, 48 kHz */
-#define SDIAUDIO_CTL_ASYNC_44_1_KHZ    3 /* Asynchronous, 44.1 kHz */
-#define SDIAUDIO_CTL_ASYNC_32_KHZ      5 /* Asynchronous, 32 kHz */
-#define SDIAUDIO_CTL_ASYNC_96_KHZ      9 /* Asynchronous, 96 kHz */
-#define SDIAUDIO_CTL_ASYNC_FREE_RUNNING        15 /* Asynchronous, free running */
-
-#endif
-
diff --git a/sys/linsys/include/sdivideo.h b/sys/linsys/include/sdivideo.h
deleted file mode 100644 (file)
index e894f6b..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/* sdivideo.h
- *
- * Shared header file for the Linux user-space API for
- * Linear Systems Ltd. SMPTE 292M and SMPTE 259M-C interface boards.
- *
- * Copyright (C) 2009-2010 Linear Systems Ltd.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright notice,
- *      this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- *   3. Neither the name of Linear Systems Ltd. nor the names of its
- *      contributors may be used to endorse or promote products derived from
- *      this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY LINEAR SYSTEMS LTD. "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL LINEAR SYSTEMS LTD. OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Linear Systems can be contacted at <http://www.linsys.ca/>.
- *
- */
-
-#ifndef _SDIVIDEO_H
-#define _SDIVIDEO_H
-
-/* Driver info */
-#define SDIVIDEO_DRIVER_NAME "sdivideo"
-
-#define SDIVIDEO_MAJOR 0       /* Set to 0 for dynamic allocation.
-                        * See /usr/src/linux/Documentation/devices.txt */
-
-#define SDIVIDEO_TX_BUFFERS_MIN 2 /* This must be at least 2 */
-/* The minimum transmit buffer size must be positive, divisible by 4,
- * and large enough that the buffers aren't transferred to the onboard FIFOs
- * too quickly for the machine to handle the interrupts.
- * This is especially a problem at startup, when the FIFOs are empty.
- * Relevant factors include onboard FIFO size, PCI bus throughput,
- * processor speed, and interrupt latency. */
-#define SDIVIDEO_TX_BUFSIZE_MIN 1024
-#define SDIVIDEO_RX_BUFFERS_MIN 2 /* This must be at least 2 */
-#define SDIVIDEO_RX_BUFSIZE_MIN 8 /* This must be positive and divisible by 4 */
-
-#define SDIVIDEO_TX_BUFFERS 30 /* This must be at least 2 */
-#define SDIVIDEO_TX_BUFSIZE 1843200 /* This must be positive and divisible by 4 */
-#define SDIVIDEO_RX_BUFFERS 30 /* This must be at least 2 */
-#define SDIVIDEO_RX_BUFSIZE 1843200 /* This must be positive and divisible by 4 */
-
-/* Ioctl () definitions */
-#define SDIVIDEO_IOC_MAGIC '=' /* This ioctl magic number is currently free. See
-                          * /usr/src/linux/Documentation/ioctl-number.txt */
-
-#define SDIVIDEO_IOC_TXGETCAP          _IOR(SDIVIDEO_IOC_MAGIC, 1, unsigned int)
-#define SDIVIDEO_IOC_TXGETEVENTS       _IOR(SDIVIDEO_IOC_MAGIC, 2, unsigned int)
-#define SDIVIDEO_IOC_TXGETBUFLEVEL     _IOR(SDIVIDEO_IOC_MAGIC, 3, unsigned int)
-#define SDIVIDEO_IOC_TXGETTXD          _IOR(SDIVIDEO_IOC_MAGIC, 4, int)
-
-#define SDIVIDEO_IOC_RXGETCAP          _IOR(SDIVIDEO_IOC_MAGIC, 65, unsigned int)
-#define SDIVIDEO_IOC_RXGETEVENTS       _IOR(SDIVIDEO_IOC_MAGIC, 66, unsigned int)
-#define SDIVIDEO_IOC_RXGETBUFLEVEL     _IOR(SDIVIDEO_IOC_MAGIC, 67, unsigned int)
-#define SDIVIDEO_IOC_RXGETCARRIER      _IOR(SDIVIDEO_IOC_MAGIC, 68, int)
-#define SDIVIDEO_IOC_RXGETSTATUS       _IOR(SDIVIDEO_IOC_MAGIC, 69, int)
-#define SDIVIDEO_IOC_RXGETYCRCERROR    _IOR(SDIVIDEO_IOC_MAGIC, 70, unsigned int)
-#define SDIVIDEO_IOC_RXGETCCRCERROR    _IOR(SDIVIDEO_IOC_MAGIC, 71, unsigned int)
-#define SDIVIDEO_IOC_RXGETVIDSTATUS    _IOR(SDIVIDEO_IOC_MAGIC, 72, unsigned int)
-
-#define SDIVIDEO_IOC_GETID             _IOR(SDIVIDEO_IOC_MAGIC, 129, unsigned int)
-#define SDIVIDEO_IOC_GETVERSION                _IOR(SDIVIDEO_IOC_MAGIC, 130, unsigned int)
-#define SDIVIDEO_IOC_QBUF              _IOW(SDIVIDEO_IOC_MAGIC, 131, unsigned int)
-#define SDIVIDEO_IOC_DQBUF             _IOW(SDIVIDEO_IOC_MAGIC, 132, unsigned int)
-
-/* Transmitter event flag bit locations */
-#define SDIVIDEO_EVENT_TX_BUFFER_ORDER 0
-#define SDIVIDEO_EVENT_TX_BUFFER       (1 << SDIVIDEO_EVENT_TX_BUFFER_ORDER)
-#define SDIVIDEO_EVENT_TX_FIFO_ORDER   1
-#define SDIVIDEO_EVENT_TX_FIFO         (1 << SDIVIDEO_EVENT_TX_FIFO_ORDER)
-#define SDIVIDEO_EVENT_TX_DATA_ORDER   2
-#define SDIVIDEO_EVENT_TX_DATA         (1 << SDIVIDEO_EVENT_TX_DATA_ORDER)
-
-/* Receiver event flag bit locations */
-#define SDIVIDEO_EVENT_RX_BUFFER_ORDER 0
-#define SDIVIDEO_EVENT_RX_BUFFER       (1 << SDIVIDEO_EVENT_RX_BUFFER_ORDER)
-#define SDIVIDEO_EVENT_RX_FIFO_ORDER   1
-#define SDIVIDEO_EVENT_RX_FIFO         (1 << SDIVIDEO_EVENT_RX_FIFO_ORDER)
-#define SDIVIDEO_EVENT_RX_CARRIER_ORDER        2
-#define SDIVIDEO_EVENT_RX_CARRIER      (1 << SDIVIDEO_EVENT_RX_CARRIER_ORDER)
-#define SDIVIDEO_EVENT_RX_DATA_ORDER   3
-#define SDIVIDEO_EVENT_RX_DATA         (1 << SDIVIDEO_EVENT_RX_DATA_ORDER)
-
-/* Interface capabilities */
-#define SDIVIDEO_CAP_RX_CD             0x00000001
-#define SDIVIDEO_CAP_RX_DATA           0x00000002
-#define SDIVIDEO_CAP_RX_ERR_COUNT      0x00000004
-#define SDIVIDEO_CAP_RX_VBI            0x00000008
-#define SDIVIDEO_CAP_RX_RAWMODE                0x00000010
-#define SDIVIDEO_CAP_RX_DEINTERLACING  0x00000020
-
-/* Transmitter clock source settings */
-#define SDIVIDEO_CTL_TX_CLKSRC_ONBOARD 0
-#define SDIVIDEO_CTL_TX_CLKSRC_NTSC    1
-#define SDIVIDEO_CTL_TX_CLKSRC_PAL     2
-
-/* Mode settings */
-#define SDIVIDEO_CTL_MODE_UYVY                 0
-#define SDIVIDEO_CTL_MODE_V210                 1
-#define SDIVIDEO_CTL_MODE_V210_DEINTERLACE     2
-#define SDIVIDEO_CTL_MODE_RAW                  3
-
-/* Frame mode settings */
-#define SDIVIDEO_CTL_UNLOCKED                          0
-#define SDIVIDEO_CTL_SMPTE_125M_486I_29_97HZ           1
-#define SDIVIDEO_CTL_BT_601_576I_25HZ                  2
-#define SDIVIDEO_CTL_SMPTE_267M_486I_29_97HZ           3
-
-#define SDIVIDEO_CTL_SMPTE_260M_1035I_30HZ             5
-#define SDIVIDEO_CTL_SMPTE_260M_1035I_29_97HZ          6
-#define SDIVIDEO_CTL_SMPTE_295M_1080I_25HZ             7
-#define SDIVIDEO_CTL_SMPTE_274M_1080I_30HZ             8
-#define SDIVIDEO_CTL_SMPTE_274M_1080PSF_30HZ           9
-#define SDIVIDEO_CTL_SMPTE_274M_1080I_29_97HZ          10
-#define SDIVIDEO_CTL_SMPTE_274M_1080PSF_29_97HZ                11
-#define SDIVIDEO_CTL_SMPTE_274M_1080I_25HZ             12
-#define SDIVIDEO_CTL_SMPTE_274M_1080PSF_25HZ           13
-#define SDIVIDEO_CTL_SMPTE_274M_1080PSF_24HZ           14
-#define SDIVIDEO_CTL_SMPTE_274M_1080PSF_23_98HZ                15
-#define SDIVIDEO_CTL_SMPTE_274M_1080P_30HZ             16
-#define SDIVIDEO_CTL_SMPTE_274M_1080P_29_97HZ          17
-#define SDIVIDEO_CTL_SMPTE_274M_1080P_25HZ             18
-#define SDIVIDEO_CTL_SMPTE_274M_1080P_24HZ             19
-#define SDIVIDEO_CTL_SMPTE_274M_1080P_23_98HZ          20
-#define SDIVIDEO_CTL_SMPTE_296M_720P_60HZ              21
-#define SDIVIDEO_CTL_SMPTE_296M_720P_59_94HZ           22
-#define SDIVIDEO_CTL_SMPTE_296M_720P_50HZ              23
-#define SDIVIDEO_CTL_SMPTE_296M_720P_30HZ              24
-#define SDIVIDEO_CTL_SMPTE_296M_720P_29_97HZ           25
-#define SDIVIDEO_CTL_SMPTE_296M_720P_25HZ              26
-#define SDIVIDEO_CTL_SMPTE_296M_720P_24HZ              27
-#define SDIVIDEO_CTL_SMPTE_296M_720P_23_98HZ           28
-
-#endif
-
index d60ad35..a61b4d1 100644 (file)
@@ -3,9 +3,7 @@
 #subdir('acmmp3dec')
 #subdir('androidmedia')
 #subdir('applemedia')
-#subdir('avc')
 subdir('bluez')
-#subdir('cdrom')
 subdir('d3dvideosink')
 #subdir('decklink')
 subdir('directsound')
@@ -13,20 +11,15 @@ subdir('directsound')
 #subdir('dshowsrcwrapper')
 #subdir('dshowvideosink')
 subdir('dvb')
-#subdir('dxr3')
 subdir('fbdev')
 subdir('kms')
-#subdir('linsys')
 subdir('msdk')
 #subdir('nvenc')
 #subdir('opensles')
-#subdir('pvr2d')
-#subdir('qcam')
 #subdir('shm')
 #subdir('uvch264')
 #subdir('vcd')
 #subdir('vdpau')
 subdir('wasapi')
-#subdir('wininet')
 subdir('winks')
 subdir('winscreencap')
diff --git a/sys/pvr2d/Makefile.am b/sys/pvr2d/Makefile.am
deleted file mode 100644 (file)
index 8ed8986..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-plugin_LTLIBRARIES = libgstpvr.la
-
-libgstpvr_la_SOURCES = \
-       gstpvr.c \
-       gstpvrbufferpool.c \
-       gstpvrvideosink.c
-
-libgstpvr_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(PVR_CFLAGS)
-
-libgstpvr_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \
-       $(GST_PLUGINS_BASE_LIBS) $(X11_LIBS) -lgstvideo-$(GST_API_VERSION) \
-       -lgstinterfaces-$(GST_API_VERSION) -lpvr2d -lpvrPVR2D_DRIWSEGL\
-       $(PVR_LIBS) \
-       $(LIBM)
-
-libgstpvr_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstpvr_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = \
-       gstpvr.h \
-       gstpvrbufferpool.h \
-       gstpvrvideosink.h
diff --git a/sys/pvr2d/gstpvr.c b/sys/pvr2d/gstpvr.c
deleted file mode 100644 (file)
index 1f86abc..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * GStreamer
- * Copyright (c) 2010, Texas Instruments Incorporated
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "gstpvr.h"
-#include "gstpvrvideosink.h"
-
-GST_DEBUG_CATEGORY (gst_debug_pvrvideosink);
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (gst_debug_pvrvideosink, "pvrvideosink", 0,
-      "pvrvideosink");
-
-  return gst_element_register (plugin, "pvrvideosink", GST_RANK_PRIMARY,
-      GST_TYPE_PVRVIDEOSINK);
-}
-
-void *
-gst_ducati_alloc_1d (gint sz)
-{
-  MemAllocBlock block = {
-    .pixelFormat = PIXEL_FMT_PAGE,
-    .dim.len = sz,
-  };
-  return MemMgr_Alloc (&block, 1);
-}
-
-void *
-gst_ducati_alloc_2d (gint width, gint height, guint * sz)
-{
-  MemAllocBlock block[] = { {
-          .pixelFormat = PIXEL_FMT_8BIT,
-          .dim = {.area = {
-                      .width = width,
-                      .height = ALIGN2 (height, 1),
-                  }},
-      .stride = 4096}, {
-        .pixelFormat = PIXEL_FMT_16BIT,
-        .dim = {.area = {
-                    .width = width,
-                    .height = ALIGN2 (height, 1) / 2,
-                }},
-      .stride = 4096}
-  };
-  if (sz) {
-    *sz = (4096 * ALIGN2 (height, 1) * 3) / 2;
-  }
-  return MemMgr_Alloc (block, 2);
-}
-
-static struct
-{
-  PVR2DERROR code;
-  const gchar *errstring;
-} pvr2derrorcodestring[] = {
-  {
-  PVR2D_OK, "OK (0)"}, {
-  PVR2DERROR_INVALID_PARAMETER, "Invalid Parameter (-1)"}, {
-  PVR2DERROR_DEVICE_UNAVAILABLE, "Device Unavailable (-2)"}, {
-  PVR2DERROR_INVALID_CONTEXT, "Invalid Context (-3)"}, {
-  PVR2DERROR_MEMORY_UNAVAILABLE, "Memory Unavailable (-4)"}, {
-  PVR2DERROR_DEVICE_NOT_PRESENT, "Device not present (-5)"}, {
-  PVR2DERROR_IOCTL_ERROR, "ioctl Error (-6)"}, {
-  PVR2DERROR_GENERIC_ERROR, "Generic Error (-7)"}, {
-  PVR2DERROR_BLT_NOTCOMPLETE, "blt not complete (-8)"}, {
-  PVR2DERROR_HW_FEATURE_NOT_SUPPORTED, "Hardware feature not supported (-9)"}, {
-  PVR2DERROR_NOT_YET_IMPLEMENTED, "Not yet implemented (-10)"}, {
-  PVR2DERROR_MAPPING_FAILED, "Mapping failed (-11)"}
-};
-
-const gchar *
-gst_pvr2d_error_get_string (PVR2DERROR code)
-{
-  if (code <= PVR2D_OK && code >= PVR2DERROR_MAPPING_FAILED)
-    return pvr2derrorcodestring[PVR2D_OK - code].errstring;
-  return "Uknown Error";
-}
-
-/* PACKAGE: this is usually set by autotools depending on some _INIT macro
- * in configure.ac and then written into and defined in config.h, but we can
- * just set it ourselves here in case someone doesn't use autotools to
- * compile this code. GST_PLUGIN_DEFINE needs PACKAGE to be defined.
- */
-#ifndef PACKAGE
-#  define PACKAGE "ducati"
-#endif
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    pvr,
-    "Pvr2d based plugin",
-    plugin_init, VERSION, "LGPL", "GStreamer", "http://gstreamer.net/")
diff --git a/sys/pvr2d/gstpvr.h b/sys/pvr2d/gstpvr.h
deleted file mode 100644 (file)
index bbde497..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * GStreamer
- * Copyright (c) 2010, Texas Instruments Incorporated
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __GST_DUCATI_H__
-#define __GST_DUCATI_H__
-
-#include <stdint.h>
-#include <string.h>
-
-#include <tiler.h>
-#include <tilermem.h>
-#include <memmgr.h>
-#include "pvr2d.h"
-
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-/* align x to next highest multiple of 2^n */
-#define ALIGN2(x,n)   (((x) + ((1 << (n)) - 1)) & ~((1 << (n)) - 1))
-
-void * gst_ducati_alloc_1d (gint sz);
-void * gst_ducati_alloc_2d (gint width, gint height, guint * sz);
-
-const gchar * gst_pvr2d_error_get_string (PVR2DERROR code);
-
-G_END_DECLS
-
-#endif /* __GST_DUCATI_H__ */
diff --git a/sys/pvr2d/gstpvrbufferpool.c b/sys/pvr2d/gstpvrbufferpool.c
deleted file mode 100644 (file)
index 620d581..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * GStreamer
- * Copyright (c) 2010, Texas Instruments Incorporated
- * Copyright (c) 2011, Collabora Ltd
- *  @author: Edward Hervey <edward@collabora.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstpvrbufferpool.h"
-
-/* Debugging category */
-#include <gst/gstinfo.h>
-
-/* Helper functions */
-#include <gst/video/video.h>
-#include <gst/video/gstvideometa.h>
-#include <gst/video/gstvideopool.h>
-
-
-GST_DEBUG_CATEGORY_EXTERN (gst_debug_pvrvideosink);
-#define GST_CAT_DEFAULT gst_debug_pvrvideosink
-
-static gboolean
-gst_pvr_meta_init (GstPVRMeta * meta, gpointer params, GstBuffer * buffer)
-{
-  meta->src_mem = NULL;
-  meta->sink = NULL;
-
-  return TRUE;
-}
-
-static void
-gst_pvr_meta_free (GstPVRMeta * meta, GstBuffer * buffer)
-{
-  GstPVRVideoSink *pvrsink = (GstPVRVideoSink *) meta->sink;
-
-  GST_LOG ("Releasing PVRMeta for buffer %p (src_mem:%p)",
-      buffer, meta->src_mem);
-
-  if (meta->src_mem) {
-    PVR2DERROR pvr_error;
-
-    GST_OBJECT_LOCK (pvrsink);
-    if (pvrsink->dcontext == NULL || pvrsink->dcontext->pvr_context == NULL) {
-      GST_OBJECT_UNLOCK (pvrsink);
-      goto done;
-    }
-    pvr_error = PVR2DMemFree (pvrsink->dcontext->pvr_context, meta->src_mem);
-    GST_OBJECT_UNLOCK (pvrsink);
-
-    if (pvr_error != PVR2D_OK)
-      GST_ERROR ("Failed to unwrap PVR memory buffer. Error : %s",
-          gst_pvr2d_error_get_string (pvr_error));
-  }
-
-done:
-  gst_pvrvideosink_untrack_buffer (pvrsink, buffer);
-  gst_object_unref (pvrsink);
-}
-
-const GstMetaInfo *
-gst_pvr_meta_get_info (void)
-{
-  static const GstMetaInfo *pvr_meta_info = NULL;
-
-  if (g_once_init_enter (&pvr_meta_info)) {
-    const GstMetaInfo *meta = gst_meta_register ("GstPVRMeta", "GstPVRMeta",
-        sizeof (GstPVRMeta),
-        (GstMetaInitFunction) gst_pvr_meta_init,
-        (GstMetaFreeFunction) gst_pvr_meta_free,
-        (GstMetaTransformFunction) NULL);
-    g_once_init_leave (&pvr_meta_info, meta);
-  }
-  return pvr_meta_info;
-
-}
-
-/* Wrap existing buffers */
-GstPVRMeta *
-gst_buffer_add_pvr_meta (GstBuffer * buffer, GstElement * sink)
-{
-  guint8 *data;
-  gsize size;
-  GstPVRMeta *meta;
-  PVR2DERROR pvr_error;
-  GstPVRVideoSink *pvrsink = (GstPVRVideoSink *) sink;
-
-  g_return_val_if_fail (gst_buffer_n_memory (buffer) > 0, NULL);
-  g_return_val_if_fail (pvrsink != NULL, NULL);
-
-  GST_LOG_OBJECT (pvrsink, "Adding PVRMeta to buffer %p", buffer);
-
-  /* Add the meta */
-  meta = (GstPVRMeta *) gst_buffer_add_meta (buffer, GST_PVR_META_INFO, NULL);
-  meta->src_mem = NULL;
-  meta->sink = gst_object_ref (pvrsink);
-  gst_pvrvideosink_track_buffer (pvrsink, buffer);
-
-  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
-
-  GST_LOG_OBJECT (pvrsink, "data:%p, size:%" G_GSIZE_FORMAT, data, size);
-
-  GST_OBJECT_LOCK (pvrsink);
-  if (pvrsink->dcontext == NULL || pvrsink->dcontext->pvr_context == NULL)
-    goto no_pvr_context;
-  /* Map the memory and wrap it */
-  pvr_error =
-      PVR2DMemWrap (pvrsink->dcontext->pvr_context, data, 0, size, NULL,
-      &(meta->src_mem));
-  GST_OBJECT_UNLOCK (pvrsink);
-
-  gst_buffer_unmap (buffer, data, size);
-
-  if (pvr_error != PVR2D_OK)
-    goto wrap_error;
-
-  return meta;
-
-wrap_error:
-  {
-    GST_WARNING_OBJECT (pvrsink, "Failed to Wrap buffer memory. Error : %s",
-        gst_pvr2d_error_get_string (pvr_error));
-    gst_buffer_remove_meta (buffer, (GstMeta *) meta);
-
-    return NULL;
-  }
-
-no_pvr_context:
-  {
-    GST_OBJECT_UNLOCK (pvrsink);
-    GST_WARNING_OBJECT (pvrsink, "No PVR2D context available");
-    gst_buffer_remove_meta (buffer, (GstMeta *) meta);
-    return NULL;
-  }
-}
-
-/*
- * GstDucatiBufferPool
- */
-static void gst_pvr_buffer_pool_finalize (GObject * object);
-
-#define gst_pvr_buffer_pool_parent_class parent_class
-G_DEFINE_TYPE (GstPVRBufferPool, gst_pvr_buffer_pool, GST_TYPE_BUFFER_POOL);
-static const gchar **
-pvr_buffer_pool_get_options (GstBufferPool * pool)
-{
-  static const gchar *options[] = { GST_BUFFER_POOL_OPTION_VIDEO_META,
-    GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT, NULL
-  };
-
-  return options;
-}
-
-static gboolean
-pvr_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
-{
-  GstPVRBufferPool *pvrpool = GST_PVR_BUFFER_POOL_CAST (pool);
-  GstVideoInfo info;
-  guint size, align;
-  gboolean ret;
-  const GstCaps *caps;
-
-  if (!gst_buffer_pool_config_get (config, &caps, &size, NULL, NULL, NULL,
-          &align))
-    goto wrong_config;
-
-  if (caps == NULL)
-    goto no_caps;
-
-  /* now parse the caps from the config */
-  if (!gst_video_info_from_caps (&info, caps))
-    goto wrong_caps;
-
-  GST_LOG_OBJECT (pool, "%dx%d, size:%u, align:%u caps %" GST_PTR_FORMAT,
-      info.width, info.height, size, align, caps);
-
-  if (pvrpool->caps)
-    gst_caps_unref (pvrpool->caps);
-  pvrpool->caps = gst_caps_copy (caps);
-  pvrpool->info = info;
-  pvrpool->size = size;
-  gst_allocation_params_init (&pvrpool->params);
-  pvrpool->params.align = align;
-  pvrpool->padded_width = GST_VIDEO_INFO_WIDTH (&info);
-  pvrpool->padded_height = GST_VIDEO_INFO_HEIGHT (&info);
-
-  /* enable metadata based on config of the pool */
-  pvrpool->add_metavideo =
-      gst_buffer_pool_config_has_option (config,
-      GST_BUFFER_POOL_OPTION_VIDEO_META);
-
-#if 0
-  /* parse extra alignment info */
-  priv->need_alignment = gst_buffer_pool_config_has_option (config,
-      GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
-
-  if (priv->need_alignment) {
-    gst_buffer_pool_config_get_video_alignment (config, &priv->align);
-
-    GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top,
-        priv->align.padding_left, priv->align.padding_left,
-        priv->align.padding_bottom);
-
-    /* we need the video metadata too now */
-    priv->add_metavideo = TRUE;
-  }
-
-  /* add the padding */
-  priv->padded_width =
-      GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left +
-      priv->align.padding_right;
-  priv->padded_height =
-      GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
-      priv->align.padding_bottom;
-#endif
-
-  GST_DEBUG_OBJECT (pool, "before calling parent class");
-
-  ret = GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
-
-  GST_DEBUG_OBJECT (pool, "parent_class returned %d", ret);
-
-  return ret;
-
-  /* ERRORS */
-wrong_config:
-  {
-    GST_WARNING_OBJECT (pool, "invalid config");
-    return FALSE;
-  }
-no_caps:
-  {
-    GST_WARNING_OBJECT (pool, "no caps in config");
-    return FALSE;
-  }
-wrong_caps:
-  {
-    GST_WARNING_OBJECT (pool,
-        "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
-    return FALSE;
-  }
-}
-
-/* This function handles GstXImageBuffer creation depending on XShm availability */
-static GstFlowReturn
-pvr_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
-    GstBufferPoolAcquireParams * params)
-{
-  GstPVRBufferPool *pvrpool = GST_PVR_BUFFER_POOL_CAST (pool);
-  GstVideoInfo *info;
-  GstBuffer *pvr;
-  GstPVRMeta *meta;
-
-  info = &pvrpool->info;
-
-  pvr = gst_buffer_new_allocate (NULL, pvrpool->size, &pvrpool->params);
-  meta = gst_buffer_add_pvr_meta (pvr, pvrpool->pvrsink);
-  if (meta == NULL) {
-    gst_buffer_unref (pvr);
-    goto no_buffer;
-  }
-
-  if (pvrpool->add_metavideo) {
-    GstVideoMeta *meta;
-
-    GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
-    /* these are just the defaults for now */
-    meta = gst_buffer_add_video_meta (pvr, GST_VIDEO_FRAME_FLAG_NONE,
-        GST_VIDEO_INFO_FORMAT (info), pvrpool->padded_width,
-        pvrpool->padded_height);
-    if (G_UNLIKELY (meta == NULL))
-      GST_WARNING_OBJECT (pool, "Failed to add GstVideoMeta");
-
-#if 0
-    const GstVideoFormatInfo *vinfo = info->finfo;
-    gint i;
-
-    if (pvrpool->need_alignment) {
-      meta->width = GST_VIDEO_INFO_WIDTH (&pvrpool->info);
-      meta->height = GST_VIDEO_INFO_HEIGHT (&pvrpool->info);
-
-      /* FIXME, not quite correct, NV12 would apply the vedge twice on the second
-       * plane */
-      for (i = 0; i < GST_VIDEO_INFO_N_COMPONENTS (info); i++) {
-        gint vedge, hedge, plane;
-
-        hedge =
-            GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (vinfo, i,
-            pvrpool->align.padding_left);
-        vedge =
-            GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (vinfo, i,
-            pvrpool->align.padding_top);
-        plane = GST_VIDEO_FORMAT_INFO_PLANE (vinfo, i);
-
-        GST_LOG_OBJECT (pool, "comp %d, plane %d: hedge %d, vedge %d", i,
-            plane, hedge, vedge);
-
-        meta->offset[plane] += (vedge * meta->stride[plane]) + hedge;
-      }
-    }
-#endif
-  }
-
-  *buffer = pvr;
-
-  return GST_FLOW_OK;
-
-  /* ERROR */
-no_buffer:
-  {
-    GST_WARNING_OBJECT (pool, "can't create image");
-    return GST_FLOW_ERROR;
-  }
-}
-
-/** create new bufferpool
- */
-GstBufferPool *
-gst_pvr_buffer_pool_new (GstElement * pvrsink)
-{
-  GstPVRBufferPool *pool;
-
-  g_return_val_if_fail (GST_IS_PVRVIDEOSINK (pvrsink), NULL);
-
-  GST_DEBUG_OBJECT (pvrsink, "Creating new GstPVRBufferPool");
-
-  pool = g_object_new (GST_TYPE_PVR_BUFFER_POOL, NULL);
-  pool->pvrsink = gst_object_ref (pvrsink);
-
-  return GST_BUFFER_POOL_CAST (pool);
-}
-
-static void
-gst_pvr_buffer_pool_class_init (GstPVRBufferPoolClass * klass)
-{
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-  GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
-
-  gobject_class->finalize = gst_pvr_buffer_pool_finalize;
-
-  gstbufferpool_class->get_options = pvr_buffer_pool_get_options;
-  gstbufferpool_class->set_config = pvr_buffer_pool_set_config;
-  gstbufferpool_class->alloc_buffer = pvr_buffer_pool_alloc;
-}
-
-static void
-gst_pvr_buffer_pool_init (GstPVRBufferPool * pool)
-{
-
-}
-
-static void
-gst_pvr_buffer_pool_finalize (GObject * object)
-{
-  GstPVRBufferPool *pool = GST_PVR_BUFFER_POOL_CAST (object);
-
-  GST_LOG_OBJECT (pool, "finalize PVR buffer pool %p", pool);
-
-  if (pool->caps)
-    gst_caps_unref (pool->caps);
-  gst_object_unref (pool->pvrsink);
-
-  G_OBJECT_CLASS (gst_pvr_buffer_pool_parent_class)->finalize (object);
-}
diff --git a/sys/pvr2d/gstpvrbufferpool.h b/sys/pvr2d/gstpvrbufferpool.h
deleted file mode 100644 (file)
index b749b7c..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * GStreamer
- * Copyright (c) 2010, 2011 Texas Instruments Incorporated
- * Copyright (c) 2011, Collabora Ltda
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __GSTPVRBUFFERPOOL_H__
-#define __GSTPVRBUFFERPOOL_H__
-
-#include "gstpvr.h"
-#include <pvr2d.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstPVRMeta GstPVRMeta;
-
-typedef struct _GstPVRBufferPool GstPVRBufferPool;
-typedef struct _GstPVRBufferPoolClass GstPVRBufferPoolClass;
-
-#include "gstpvrvideosink.h"
-
-const GstMetaInfo * gst_pvr_meta_get_info (void);
-#define GST_PVR_META_INFO  (gst_pvr_meta_get_info())
-
-#define gst_buffer_get_pvr_meta(b) ((GstPVRMeta*)gst_buffer_get_meta((b),GST_PVR_META_INFO))
-
-struct _GstPVRMeta
-{
-  GstMeta meta;
-
-  PVR2DMEMINFO *src_mem;       /* Memory wrapped by pvr */
-  GstElement *sink;            /* sink, holds a ref */
-};
-
-GstPVRMeta *
-gst_buffer_add_pvr_meta(GstBuffer *buffer, GstElement *pvrsink);
-
-#define GST_TYPE_PVR_BUFFER_POOL      (gst_pvr_buffer_pool_get_type())
-#define GST_IS_PVR_BUFFER_POOL(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PVR_BUFFER_POOL))
-#define GST_PVR_BUFFER_POOL(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PVR_BUFFER_POOL, GstPVRBufferPool))
-#define GST_PVR_BUFFER_POOL_CAST(obj) ((GstPVRBufferPool*)(obj))
-
-struct _GstPVRBufferPool
-{
-  GstBufferPool parent;
-
-  /* output (padded) size including any codec padding: */
-  gint padded_width, padded_height;
-  guint size;
-  GstAllocationParams params;
-
-  GstElement *pvrsink;
-
-  GstCaps *caps;
-  GstVideoInfo info;
-  gboolean add_metavideo;
-};
-
-struct _GstPVRBufferPoolClass
-{
-  GstBufferPoolClass parent_class;
-};
-
-GType gst_pvr_buffer_pool_get_type (void);
-GstBufferPool *gst_pvr_buffer_pool_new (GstElement *pvrsink);
-
-G_END_DECLS
-
-#endif /* __GSTPVRBUFFERPOOL_H__ */
diff --git a/sys/pvr2d/gstpvrvideosink.c b/sys/pvr2d/gstpvrvideosink.c
deleted file mode 100644 (file)
index 4e32a8c..0000000
+++ /dev/null
@@ -1,1479 +0,0 @@
-/* GStreamer
- *
- * Copyright (C) 2011 Collabora Ltda
- * Copyright (C) 2011 Texas Instruments
- *  @author: Luciana Fujii Pontello <luciana.fujii@collabora.co.uk>
- *  @author: Edward Hervey <edward@collabora.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* Object header */
-#include "gstpvrvideosink.h"
-#include "gstpvrbufferpool.h"
-
-#include <gst/video/gstvideosink.h>
-#include <gst/video/videooverlay.h>
-/* Helper functions */
-#include <gst/video/gstvideometa.h>
-
-/* Debugging category */
-#include <gst/gstinfo.h>
-
-#define LINUX
-#include <dri2_ws.h>
-#include <services.h>
-#include <img_defs.h>
-#include <servicesext.h>
-
-#define DEFAULT_QUEUE_SIZE 12
-
-GST_DEBUG_CATEGORY_EXTERN (gst_debug_pvrvideosink);
-#define GST_CAT_DEFAULT gst_debug_pvrvideosink
-
-#define PVR2DMEMINFO_INITIALISE(d, s) \
-{ \
-  (d)->hPrivateData = (IMG_VOID *)(s); \
-  (d)->hPrivateMapData = (IMG_VOID *)(s->hKernelMemInfo); \
-  (d)->ui32DevAddr = (IMG_UINT32) (s)->sDevVAddr.uiAddr; \
-  (d)->ui32MemSize = (s)->uAllocSize; \
-  (d)->pBase = (s)->pvLinAddr;\
-  (d)->ulFlags = (s)->ui32Flags;\
-}
-
-/* end of internal definitions */
-
-static void gst_pvrvideosink_reset (GstPVRVideoSink * pvrvideosink);
-static void gst_pvrvideosink_xwindow_draw_borders (GstPVRVideoSink *
-    pvrvideosink, GstXWindow * xwindow, GstVideoRectangle rect);
-static void gst_pvrvideosink_expose (GstVideoOverlay * overlay);
-static void gst_pvrvideosink_xwindow_destroy (GstPVRVideoSink * pvrvideosink,
-    GstXWindow * xwindow);
-static void gst_pvrvideosink_dcontext_free (GstDrawContext * dcontext);
-
-static void gst_pvrvideosink_videooverlay_init (GstVideoOverlayInterface *
-    iface);
-
-#define gst_pvrvideosink_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstPVRVideoSink, gst_pvrvideosink, GST_TYPE_VIDEO_SINK,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY,
-        gst_pvrvideosink_videooverlay_init));
-
-
-static GstStaticPadTemplate gst_pvrvideosink_sink_template_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("NV12")));
-
-enum
-{
-  PROP_0,
-  PROP_FORCE_ASPECT_RATIO,
-  PROP_WINDOW_WIDTH,
-  PROP_WINDOW_HEIGHT
-};
-
-/* ============================================================= */
-/*                                                               */
-/*                       Private Methods                         */
-/*                                                               */
-/* ============================================================= */
-
-/* pvrvideo buffers */
-
-static void
-gst_pvrvideosink_xwindow_update_geometry (GstPVRVideoSink * pvrvideosink)
-{
-  XWindowAttributes attr;
-  WSEGLError glerror;
-  WSEGLDrawableParams source_params;
-  PVRSRV_CLIENT_MEM_INFO *client_mem_info;
-
-  /* Update the window geometry */
-  g_mutex_lock (pvrvideosink->dcontext->x_lock);
-  if (G_UNLIKELY (pvrvideosink->xwindow == NULL)) {
-    g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-    return;
-  }
-  pvrvideosink->redraw_borders = TRUE;
-
-  XGetWindowAttributes (pvrvideosink->dcontext->x_display,
-      pvrvideosink->xwindow->window, &attr);
-
-  pvrvideosink->xwindow->width = attr.width;
-  pvrvideosink->xwindow->height = attr.height;
-
-  if (!pvrvideosink->have_render_rect) {
-    pvrvideosink->render_rect.x = pvrvideosink->render_rect.y = 0;
-    pvrvideosink->render_rect.w = attr.width;
-    pvrvideosink->render_rect.h = attr.height;
-  }
-  if (pvrvideosink->dcontext != NULL) {
-    glerror =
-        pvrvideosink->dcontext->wsegl_table->
-        pfnWSEGL_DeleteDrawable (pvrvideosink->dcontext->drawable_handle);
-    if (glerror != WSEGL_SUCCESS) {
-      GST_ERROR_OBJECT (pvrvideosink, "Error destroying drawable");
-      return;
-    }
-    glerror =
-        pvrvideosink->dcontext->wsegl_table->
-        pfnWSEGL_CreateWindowDrawable (pvrvideosink->dcontext->display_handle,
-        pvrvideosink->dcontext->glconfig,
-        &pvrvideosink->dcontext->drawable_handle,
-        (NativeWindowType) pvrvideosink->xwindow->window,
-        &pvrvideosink->dcontext->rotation);
-    if (glerror != WSEGL_SUCCESS) {
-      GST_ERROR_OBJECT (pvrvideosink, "Error creating drawable");
-      return;
-    }
-    glerror =
-        pvrvideosink->dcontext->wsegl_table->
-        pfnWSEGL_GetDrawableParameters (pvrvideosink->dcontext->drawable_handle,
-        &source_params, &pvrvideosink->render_params);
-    if (glerror != WSEGL_SUCCESS) {
-      GST_ERROR_OBJECT (pvrvideosink, "Error getting Drawable params");
-      return;
-    }
-
-    client_mem_info =
-        (PVRSRV_CLIENT_MEM_INFO *) pvrvideosink->render_params.hPrivateData;
-    PVR2DMEMINFO_INITIALISE (&pvrvideosink->dcontext->dst_mem, client_mem_info);
-  }
-
-  g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-}
-
-/* This function handles XEvents that might be in the queue. It generates
-   GstEvent that will be sent upstream in the pipeline to handle interactivity
-   and navigation. It will also listen for configure events on the window to
-   trigger caps renegotiation so on the fly software scaling can work. */
-static void
-gst_pvrvideosink_handle_xevents (GstPVRVideoSink * pvrvideosink)
-{
-  XEvent e;
-  gboolean exposed = FALSE;
-  gboolean configured = FALSE;
-
-  g_mutex_lock (pvrvideosink->flow_lock);
-  g_mutex_lock (pvrvideosink->dcontext->x_lock);
-
-  /* Handle Expose */
-  while (XCheckWindowEvent (pvrvideosink->dcontext->x_display,
-          pvrvideosink->xwindow->window, ExposureMask | StructureNotifyMask,
-          &e)) {
-    switch (e.type) {
-      case Expose:
-        exposed = TRUE;
-        break;
-      case ConfigureNotify:
-        g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-        gst_pvrvideosink_xwindow_update_geometry (pvrvideosink);
-        g_mutex_lock (pvrvideosink->dcontext->x_lock);
-        configured = TRUE;
-        break;
-      default:
-        break;
-    }
-  }
-
-  if (exposed || configured) {
-    g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-    g_mutex_unlock (pvrvideosink->flow_lock);
-
-    gst_pvrvideosink_expose (GST_VIDEO_OVERLAY (pvrvideosink));
-
-    g_mutex_lock (pvrvideosink->flow_lock);
-    g_mutex_lock (pvrvideosink->dcontext->x_lock);
-  }
-
-  /* Handle Display events */
-  while (XPending (pvrvideosink->dcontext->x_display)) {
-    XNextEvent (pvrvideosink->dcontext->x_display, &e);
-
-    switch (e.type) {
-      case ClientMessage:{
-        Atom wm_delete;
-
-        wm_delete = XInternAtom (pvrvideosink->dcontext->x_display,
-            "WM_DELETE_WINDOW", True);
-        if (wm_delete != None && wm_delete == (Atom) e.xclient.data.l[0]) {
-          /* Handle window deletion by posting an error on the bus */
-          GST_ELEMENT_ERROR (pvrvideosink, RESOURCE, NOT_FOUND,
-              ("Output window was closed"), (NULL));
-
-          g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-          gst_pvrvideosink_xwindow_destroy (pvrvideosink,
-              pvrvideosink->xwindow);
-          pvrvideosink->xwindow = NULL;
-          g_mutex_lock (pvrvideosink->dcontext->x_lock);
-        }
-        break;
-      }
-      default:
-        break;
-    }
-  }
-
-  g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-  g_mutex_unlock (pvrvideosink->flow_lock);
-}
-
-static gpointer
-gst_pvrvideosink_event_thread (GstPVRVideoSink * pvrvideosink)
-{
-  GST_OBJECT_LOCK (pvrvideosink);
-  while (pvrvideosink->running) {
-    GST_OBJECT_UNLOCK (pvrvideosink);
-
-    if (pvrvideosink->xwindow) {
-      gst_pvrvideosink_handle_xevents (pvrvideosink);
-    }
-    g_usleep (G_USEC_PER_SEC / 20);
-
-    GST_OBJECT_LOCK (pvrvideosink);
-  }
-  GST_OBJECT_UNLOCK (pvrvideosink);
-
-  return NULL;
-}
-
-static void
-gst_pvrvideosink_manage_event_thread (GstPVRVideoSink * pvrvideosink)
-{
-  GThread *thread = NULL;
-
-  /* don't start the thread too early */
-  if (pvrvideosink->dcontext == NULL) {
-    return;
-  }
-
-  GST_OBJECT_LOCK (pvrvideosink);
-  if (!pvrvideosink->event_thread) {
-    /* Setup our event listening thread */
-    GST_DEBUG_OBJECT (pvrvideosink, "run xevent thread");
-    pvrvideosink->running = TRUE;
-    pvrvideosink->event_thread = g_thread_create (
-        (GThreadFunc) gst_pvrvideosink_event_thread, pvrvideosink, TRUE, NULL);
-  }
-  GST_OBJECT_UNLOCK (pvrvideosink);
-
-  /* Wait for our event thread to finish */
-  if (thread)
-    g_thread_join (thread);
-}
-
-
-static GstDrawContext *
-gst_pvrvideosink_get_dcontext (GstPVRVideoSink * pvrvideosink)
-{
-  GstDrawContext *dcontext = NULL;
-  PVR2DERROR pvr_error;
-  gint refresh_rate;
-  DRI2WSDisplay *displayImpl;
-  WSEGLError glerror;
-  const WSEGLCaps *glcaps;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "Getting draw context");
-
-  dcontext = g_new0 (GstDrawContext, 1);
-  dcontext->x_lock = g_mutex_new ();
-
-  dcontext->p_blt_info = g_new0 (PVR2D_3DBLT_EXT, 1);
-  if (!dcontext->p_blt_info)
-    goto p_blt_info_alloc_failed;
-
-  dcontext->p_blt2d_info = g_new0 (PVR2DBLTINFO, 1);
-
-  GST_LOG_OBJECT (pvrvideosink, "Opening X Display");
-  dcontext->x_display = XOpenDisplay (NULL);
-
-  if (dcontext->x_display == NULL)
-    goto fail_open_display;
-
-  GST_LOG_OBJECT (pvrvideosink, "WSEGL_GetFunctionTablePointer()");
-  dcontext->wsegl_table = WSEGL_GetFunctionTablePointer ();
-
-  GST_LOG_OBJECT (pvrvideosink, "pfnWSEGL_IsDisplayValid()");
-  glerror = dcontext->wsegl_table->pfnWSEGL_IsDisplayValid (
-      (NativeDisplayType) dcontext->x_display);
-
-  if (glerror != WSEGL_SUCCESS)
-    goto display_invalid;
-
-  GST_LOG_OBJECT (pvrvideosink, "pfnWSEGL_InitialiseDisplay()");
-
-  glerror = dcontext->wsegl_table->pfnWSEGL_InitialiseDisplay (
-      (NativeDisplayType) dcontext->x_display, &dcontext->display_handle,
-      &glcaps, &dcontext->glconfig);
-  if (glerror != WSEGL_SUCCESS)
-    goto display_init_failed;
-
-  displayImpl = (DRI2WSDisplay *) dcontext->display_handle;
-  dcontext->pvr_context = displayImpl->hContext;
-
-  GST_LOG_OBJECT (pvrvideosink, "PVR2DGetScreenMode()");
-
-  pvr_error = PVR2DGetScreenMode (dcontext->pvr_context,
-      &dcontext->display_format, &dcontext->display_width,
-      &dcontext->display_height, &dcontext->stride, &refresh_rate);
-  if (pvr_error != PVR2D_OK)
-    goto screen_mode_failed;
-
-  GST_DEBUG_OBJECT (pvrvideosink,
-      "Got format:%d, width:%d, height:%d, stride:%d, refresh_rate:%d",
-      dcontext->display_format, dcontext->display_width,
-      dcontext->display_height, dcontext->stride, refresh_rate);
-
-  dcontext->screen_num = DefaultScreen (dcontext->x_display);
-  dcontext->black = XBlackPixel (dcontext->x_display, dcontext->screen_num);
-
-  GST_DEBUG_OBJECT (pvrvideosink, "Returning dcontext %p", dcontext);
-
-  return dcontext;
-
-p_blt_info_alloc_failed:
-  {
-    GST_ERROR_OBJECT (pvrvideosink, "Alloc of bltinfo failed");
-    gst_pvrvideosink_dcontext_free (dcontext);
-    return NULL;
-  }
-
-fail_open_display:
-  {
-    GST_ERROR_OBJECT (pvrvideosink, "Failed to open X Display");
-    gst_pvrvideosink_dcontext_free (dcontext);
-    return NULL;
-  }
-
-display_invalid:
-  {
-    GST_ERROR_OBJECT (pvrvideosink, "Display is not valid (glerror:%d)",
-        glerror);
-    gst_pvrvideosink_dcontext_free (dcontext);
-    return NULL;
-  }
-
-display_init_failed:
-  {
-    GST_ERROR_OBJECT (pvrvideosink, "Error initializing display (glerror:%d)",
-        glerror);
-    gst_pvrvideosink_dcontext_free (dcontext);
-    return NULL;
-  }
-
-screen_mode_failed:
-  {
-    GST_ERROR_OBJECT (pvrvideosink, "Failed to get screen mode. error : %s",
-        gst_pvr2d_error_get_string (pvr_error));
-    gst_pvrvideosink_dcontext_free (dcontext);
-    return NULL;
-  }
-}
-
-static void
-gst_pvrvideosink_xwindow_set_title (GstPVRVideoSink * pvrvideosink,
-    GstXWindow * xwindow, const gchar * media_title)
-{
-  if (media_title) {
-    g_free (pvrvideosink->media_title);
-    pvrvideosink->media_title = g_strdup (media_title);
-  }
-  if (xwindow) {
-    /* we have a window */
-    if (xwindow->internal) {
-      XTextProperty xproperty;
-      const gchar *app_name;
-      const gchar *title = NULL;
-      gchar *title_mem = NULL;
-
-      /* set application name as a title */
-      app_name = g_get_application_name ();
-
-      if (app_name && pvrvideosink->media_title) {
-        title = title_mem = g_strconcat (pvrvideosink->media_title, " : ",
-            app_name, NULL);
-      } else if (app_name) {
-        title = app_name;
-      } else if (pvrvideosink->media_title) {
-        title = pvrvideosink->media_title;
-      }
-
-      if (title) {
-        if ((XStringListToTextProperty (((char **) &title), 1,
-                    &xproperty)) != 0) {
-          XSetWMName (pvrvideosink->dcontext->x_display, xwindow->window,
-              &xproperty);
-          XFree (xproperty.value);
-        }
-
-        g_free (title_mem);
-      }
-    }
-  }
-}
-
-static GstXWindow *
-gst_pvrvideosink_create_window (GstPVRVideoSink * pvrvideosink, gint width,
-    gint height)
-{
-  WSEGLError glerror;
-  WSEGLDrawableParams source_params;
-  Window root;
-  GstXWindow *xwindow;
-  GstDrawContext *dcontext;
-  XGCValues values;
-  Atom wm_delete;
-  PVRSRV_CLIENT_MEM_INFO *client_mem_info;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "begin");
-
-  dcontext = pvrvideosink->dcontext;
-  xwindow = g_new0 (GstXWindow, 1);
-
-  xwindow->internal = TRUE;
-  pvrvideosink->render_rect.x = pvrvideosink->render_rect.y = 0;
-  pvrvideosink->render_rect.w = width;
-  pvrvideosink->render_rect.h = height;
-  xwindow->width = width;
-  xwindow->height = height;
-  xwindow->internal = TRUE;
-
-  g_mutex_lock (pvrvideosink->dcontext->x_lock);
-
-  root = DefaultRootWindow (dcontext->x_display);
-  xwindow->window = XCreateSimpleWindow (dcontext->x_display, root, 0, 0,
-      width, height, 2, 2, pvrvideosink->dcontext->black);
-  XSelectInput (dcontext->x_display, xwindow->window,
-      ExposureMask | StructureNotifyMask);
-
-  /* Tell the window manager we'd like delete client messages instead of
-   * being killed */
-  wm_delete = XInternAtom (pvrvideosink->dcontext->x_display,
-      "WM_DELETE_WINDOW", True);
-  if (wm_delete != None) {
-    (void) XSetWMProtocols (pvrvideosink->dcontext->x_display, xwindow->window,
-        &wm_delete, 1);
-  }
-
-  XMapWindow (dcontext->x_display, xwindow->window);
-
-  /* We have to do that to prevent X from redrawing the background on
-   * ConfigureNotify. This takes away flickering of video when resizing. */
-  XSetWindowBackgroundPixmap (pvrvideosink->dcontext->x_display,
-      xwindow->window, None);
-
-  gst_pvrvideosink_xwindow_set_title (pvrvideosink, xwindow, NULL);
-
-  xwindow->gc = XCreateGC (pvrvideosink->dcontext->x_display,
-      xwindow->window, 0, &values);
-
-  g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-
-  glerror =
-      dcontext->wsegl_table->
-      pfnWSEGL_CreateWindowDrawable (dcontext->display_handle,
-      dcontext->glconfig, &(dcontext->drawable_handle),
-      (NativeWindowType) xwindow->window, &(dcontext->rotation));
-
-  if (glerror != WSEGL_SUCCESS) {
-    GST_ERROR_OBJECT (pvrvideosink, "Error creating drawable");
-    return NULL;
-  }
-  glerror =
-      dcontext->wsegl_table->
-      pfnWSEGL_GetDrawableParameters (dcontext->drawable_handle, &source_params,
-      &pvrvideosink->render_params);
-  client_mem_info =
-      (PVRSRV_CLIENT_MEM_INFO *) pvrvideosink->render_params.hPrivateData;
-  PVR2DMEMINFO_INITIALISE (&dcontext->dst_mem, client_mem_info);
-
-  GST_DEBUG_OBJECT (pvrvideosink, "end");
-  return xwindow;
-}
-
-static void
-gst_pvrvideosink_blit (GstPVRVideoSink * pvrvideosink, GstBuffer * buffer)
-{
-  PVR2DERROR pvr_error;
-  GstDrawContext *dcontext = pvrvideosink->dcontext;
-  gint video_width;
-  gint video_height;
-  gboolean draw_border = FALSE;
-  PPVR2D_3DBLT_EXT p_blt_3d;
-  PVR2DMEMINFO *src_mem;
-  PVR2DFORMAT pvr_format;
-  GstVideoRectangle result;
-  GstPVRMeta *meta;
-  GstVideoCropMeta *cropmeta;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "buffer %p", buffer);
-
-  pvr_format =
-      GST_VIDEO_INFO_FORMAT (&pvrvideosink->info) ==
-      GST_VIDEO_FORMAT_NV12 ? PVR2D_YUV420_2PLANE : PVR2D_ARGB8888;
-
-  g_mutex_lock (pvrvideosink->flow_lock);
-  if (buffer == NULL)
-    buffer = pvrvideosink->current_buffer;
-
-  if (buffer == NULL)
-    goto done;
-
-  meta = gst_buffer_get_pvr_meta (buffer);
-  if (G_UNLIKELY (meta == NULL))
-    goto no_pvr_meta;
-
-  src_mem = meta->src_mem;
-  p_blt_3d = dcontext->p_blt_info;
-
-  video_width = GST_VIDEO_SINK_WIDTH (pvrvideosink);
-  video_height = GST_VIDEO_SINK_HEIGHT (pvrvideosink);
-
-  g_mutex_lock (pvrvideosink->dcontext->x_lock);
-
-  /* Draw borders when displaying the first frame. After this
-     draw borders only on expose event or after a size change. */
-  if (!(pvrvideosink->current_buffer) || pvrvideosink->redraw_borders) {
-    draw_border = TRUE;
-  }
-
-  /* Store a reference to the last image we put, lose the previous one */
-  if (buffer && pvrvideosink->current_buffer != buffer) {
-    if (pvrvideosink->current_buffer) {
-      GST_LOG_OBJECT (pvrvideosink, "unreffing %p",
-          pvrvideosink->current_buffer);
-      gst_buffer_unref (GST_BUFFER_CAST (pvrvideosink->current_buffer));
-    }
-    GST_LOG_OBJECT (pvrvideosink, "reffing %p as our current buffer", buffer);
-    pvrvideosink->current_buffer = gst_buffer_ref (buffer);
-  }
-
-  if (pvrvideosink->keep_aspect) {
-    GstVideoRectangle src = { 0, };
-    GstVideoRectangle dst = { 0, };
-
-    src.w = GST_VIDEO_SINK_WIDTH (pvrvideosink);
-    src.h = GST_VIDEO_SINK_HEIGHT (pvrvideosink);
-    dst.w = pvrvideosink->render_rect.w;
-    dst.h = pvrvideosink->render_rect.h;
-    gst_video_sink_center_rect (src, dst, &result, TRUE);
-    result.x += pvrvideosink->render_rect.x;
-    result.y += pvrvideosink->render_rect.y;
-  } else {
-    memcpy (&result, &pvrvideosink->render_rect, sizeof (GstVideoRectangle));
-  }
-
-  p_blt_3d->sDst.pSurfMemInfo = &dcontext->dst_mem;
-  p_blt_3d->sDst.SurfOffset = 0;
-  p_blt_3d->sDst.Stride = 4 * pvrvideosink->render_params.ui32Stride;
-  p_blt_3d->sDst.Format = PVR2D_ARGB8888;
-  p_blt_3d->sDst.SurfWidth = pvrvideosink->xwindow->width;
-  p_blt_3d->sDst.SurfHeight = pvrvideosink->xwindow->height;
-
-  p_blt_3d->rcDest.left = result.x;
-  p_blt_3d->rcDest.top = result.y;
-  p_blt_3d->rcDest.right = result.w + result.x;
-  p_blt_3d->rcDest.bottom = result.h + result.y;
-
-  p_blt_3d->sSrc.pSurfMemInfo = src_mem;
-  p_blt_3d->sSrc.SurfOffset = 0;
-  p_blt_3d->sSrc.Stride = GST_VIDEO_INFO_COMP_STRIDE (&pvrvideosink->info, 0);
-  p_blt_3d->sSrc.Format = pvr_format;
-  p_blt_3d->sSrc.SurfWidth = video_width;
-  p_blt_3d->sSrc.SurfHeight = video_height;
-
-  /* If buffer has crop information, use that */
-  if ((cropmeta = gst_buffer_get_video_crop_meta (buffer))) {
-    p_blt_3d->rcSource.left = cropmeta->x;
-    p_blt_3d->rcSource.top = cropmeta->y;
-    p_blt_3d->rcSource.right = cropmeta->x + cropmeta->width;
-    p_blt_3d->rcSource.bottom = cropmeta->y + cropmeta->height;
-  } else {
-    p_blt_3d->rcSource.left = 0;
-    p_blt_3d->rcSource.top = 0;
-    p_blt_3d->rcSource.right = video_width;
-    p_blt_3d->rcSource.bottom = video_height;
-  }
-
-  p_blt_3d->hUseCode = NULL;
-
-  if (GST_VIDEO_INFO_FORMAT (&pvrvideosink->info) == GST_VIDEO_FORMAT_NV12)
-    p_blt_3d->bDisableDestInput = TRUE;
-  else
-    /* blit fails for RGB without this... not sure why yet... */
-    p_blt_3d->bDisableDestInput = FALSE;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "about to blit");
-
-  pvr_error = PVR2DBlt3DExt (pvrvideosink->dcontext->pvr_context,
-      dcontext->p_blt_info);
-
-  if (pvr_error != PVR2D_OK) {
-    GST_ERROR_OBJECT (pvrvideosink, "Failed to blit. Error : %s",
-        gst_pvr2d_error_get_string (pvr_error));
-    goto done;
-  }
-  dcontext->wsegl_table->pfnWSEGL_SwapDrawable (dcontext->drawable_handle, 1);
-
-  if (draw_border) {
-    gst_pvrvideosink_xwindow_draw_borders (pvrvideosink, pvrvideosink->xwindow,
-        result);
-    pvrvideosink->redraw_borders = FALSE;
-  }
-  g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-
-done:
-  GST_DEBUG_OBJECT (pvrvideosink, "end");
-  g_mutex_unlock (pvrvideosink->flow_lock);
-  return;
-
-  /* Error cases */
-
-no_pvr_meta:
-  {
-    g_mutex_unlock (pvrvideosink->flow_lock);
-    GST_ERROR_OBJECT (pvrvideosink, "Got a buffer without GstPVRMeta");
-    return;
-  }
-}
-
-static void
-gst_pvrvideosink_destroy_drawable (GstPVRVideoSink * pvrvideosink)
-{
-  GST_DEBUG_OBJECT (pvrvideosink, "dcontext : %p", pvrvideosink->dcontext);
-
-  if (pvrvideosink->dcontext != NULL) {
-    if (pvrvideosink->dcontext->drawable_handle) {
-      GST_DEBUG_OBJECT (pvrvideosink, "Deleting Drawable (drawable_handle:%p)",
-          pvrvideosink->dcontext->drawable_handle);
-      pvrvideosink->dcontext->wsegl_table->
-          pfnWSEGL_DeleteDrawable (pvrvideosink->dcontext->drawable_handle);
-    }
-
-    GST_DEBUG_OBJECT (pvrvideosink, "Closing display (display_handle:%p)",
-        pvrvideosink->dcontext->display_handle);
-    pvrvideosink->dcontext->wsegl_table->
-        pfnWSEGL_CloseDisplay (pvrvideosink->dcontext->display_handle);
-  }
-}
-
-/* We are called with the x_lock taken */
-static void
-gst_pvrvideosink_pvrfill_rectangle (GstPVRVideoSink * pvrvideosink,
-    GstVideoRectangle rect)
-{
-  PVR2DERROR pvr_error;
-  PPVR2DBLTINFO p_blt2d_info = 0;
-  GstDrawContext *dcontext = pvrvideosink->dcontext;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "begin");
-
-  p_blt2d_info = dcontext->p_blt2d_info;
-
-  p_blt2d_info->pDstMemInfo = &dcontext->dst_mem;
-  p_blt2d_info->BlitFlags = PVR2D_BLIT_DISABLE_ALL;
-  p_blt2d_info->DstOffset = 0;
-  p_blt2d_info->CopyCode = PVR2DROPclear;
-  p_blt2d_info->DstStride = 4 * pvrvideosink->render_params.ui32Stride;
-  p_blt2d_info->DstFormat = PVR2D_ARGB8888;
-  p_blt2d_info->DstSurfWidth = pvrvideosink->xwindow->width;
-  p_blt2d_info->DstSurfHeight = pvrvideosink->xwindow->height;
-  p_blt2d_info->DstX = rect.x;
-  p_blt2d_info->DstY = rect.y;
-  p_blt2d_info->DSizeX = rect.w;
-  p_blt2d_info->DSizeY = rect.h;
-
-  pvr_error = PVR2DBlt (pvrvideosink->dcontext->pvr_context, p_blt2d_info);
-
-  if (pvr_error != PVR2D_OK) {
-    GST_ERROR_OBJECT (pvrvideosink, "Failed to blit. Error : %s",
-        gst_pvr2d_error_get_string (pvr_error));
-    goto done;
-  }
-  dcontext->wsegl_table->pfnWSEGL_SwapDrawable (dcontext->drawable_handle, 1);
-
-done:
-  GST_DEBUG_OBJECT (pvrvideosink, "end");
-}
-
-/* We are called with the x_lock taken */
-static void
-gst_pvrvideosink_xwindow_draw_borders (GstPVRVideoSink * pvrvideosink,
-    GstXWindow * xwindow, GstVideoRectangle rect)
-{
-  gint t1, t2;
-  GstVideoRectangle result;
-
-  g_return_if_fail (GST_IS_PVRVIDEOSINK (pvrvideosink));
-  g_return_if_fail (xwindow != NULL);
-
-  /* Left border */
-  result.x = pvrvideosink->render_rect.x;
-  result.y = pvrvideosink->render_rect.y;
-  result.w = rect.x - pvrvideosink->render_rect.x;
-  result.h = pvrvideosink->render_rect.h;
-  if (rect.x > pvrvideosink->render_rect.x)
-    gst_pvrvideosink_pvrfill_rectangle (pvrvideosink, result);
-
-  /* Right border */
-  t1 = rect.x + rect.w;
-  t2 = pvrvideosink->render_rect.x + pvrvideosink->render_rect.w;
-  result.x = t1;
-  result.y = pvrvideosink->render_rect.y;
-  result.w = t2 - t1;
-  result.h = pvrvideosink->render_rect.h;
-  if (t1 < t2)
-    gst_pvrvideosink_pvrfill_rectangle (pvrvideosink, result);
-
-  /* Top border */
-  result.x = pvrvideosink->render_rect.x;
-  result.y = pvrvideosink->render_rect.y;
-  result.w = pvrvideosink->render_rect.w;
-  result.h = rect.y - pvrvideosink->render_rect.y;
-  if (rect.y > pvrvideosink->render_rect.y)
-    gst_pvrvideosink_pvrfill_rectangle (pvrvideosink, result);
-
-  /* Bottom border */
-  t1 = rect.y + rect.h;
-  t2 = pvrvideosink->render_rect.y + pvrvideosink->render_rect.h;
-  result.x = pvrvideosink->render_rect.x;
-  result.y = t1;
-  result.w = pvrvideosink->render_rect.w;
-  result.h = t2 - t1;
-  if (t1 < t2)
-    gst_pvrvideosink_pvrfill_rectangle (pvrvideosink, result);
-}
-
-/* Element stuff */
-
-static gboolean
-gst_pvrvideosink_setcaps (GstBaseSink * bsink, GstCaps * caps)
-{
-  GstPVRVideoSink *pvrvideosink;
-  GstVideoInfo info;
-  GstStructure *structure;
-  GstBufferPool *oldpool, *newpool;
-
-  pvrvideosink = GST_PVRVIDEOSINK (bsink);
-
-  GST_DEBUG_OBJECT (pvrvideosink,
-      "sinkconnect possible caps with given caps %" GST_PTR_FORMAT, caps);
-
-  if (!gst_video_info_from_caps (&info, caps))
-    goto invalid_format;
-
-  GST_VIDEO_SINK_WIDTH (pvrvideosink) = info.width;
-  GST_VIDEO_SINK_HEIGHT (pvrvideosink) = info.height;
-
-  /* Notify application to set xwindow id now */
-  g_mutex_lock (pvrvideosink->flow_lock);
-  if (!pvrvideosink->xwindow) {
-    g_mutex_unlock (pvrvideosink->flow_lock);
-    gst_video_overlay_prepare_window_handle (GST_VIDEO_OVERLAY (pvrvideosink));
-  } else {
-    g_mutex_unlock (pvrvideosink->flow_lock);
-  }
-
-  g_mutex_lock (pvrvideosink->flow_lock);
-  if (!pvrvideosink->xwindow)
-    pvrvideosink->xwindow = gst_pvrvideosink_create_window (pvrvideosink,
-        GST_VIDEO_SINK_WIDTH (pvrvideosink),
-        GST_VIDEO_SINK_HEIGHT (pvrvideosink));
-  g_mutex_unlock (pvrvideosink->flow_lock);
-
-  pvrvideosink->info = info;
-
-  /* After a resize, we want to redraw the borders in case the new frame size
-   * doesn't cover the same area */
-  pvrvideosink->redraw_borders = TRUE;
-
-  /* create a new pool for the new configuration */
-  newpool = gst_pvr_buffer_pool_new (GST_ELEMENT_CAST (pvrvideosink));
-
-  /* PVR needs at least 3 buffers */
-  structure = gst_buffer_pool_get_config (newpool);
-  gst_buffer_pool_config_set (structure, caps, GST_VIDEO_INFO_SIZE (&info), 3,
-      0, 0, 15);
-  if (!gst_buffer_pool_set_config (newpool, structure))
-    goto config_failed;
-
-  oldpool = pvrvideosink->pool;
-  pvrvideosink->pool = newpool;
-  g_mutex_unlock (pvrvideosink->flow_lock);
-
-  /* unref the old sink */
-  if (oldpool) {
-    /* we don't deactivate, some elements might still be using it, it will
-     * be deactivated when the last ref is gone */
-    gst_object_unref (oldpool);
-  }
-
-  return TRUE;
-
-config_failed:
-  {
-    GST_ERROR_OBJECT (pvrvideosink, "failed to set config.");
-    g_mutex_unlock (pvrvideosink->flow_lock);
-    return FALSE;
-  }
-
-invalid_format:
-  {
-    GST_DEBUG_OBJECT (pvrvideosink,
-        "Could not locate image format from caps %" GST_PTR_FORMAT, caps);
-    return FALSE;
-  }
-}
-
-static GstCaps *
-gst_pvrvideosink_getcaps (GstBaseSink * bsink, GstCaps * filter)
-{
-  GstPVRVideoSink *pvrvideosink;
-  GstCaps *caps;
-
-  GST_DEBUG_OBJECT (bsink, "filter:%" GST_PTR_FORMAT, filter);
-
-  pvrvideosink = GST_PVRVIDEOSINK (bsink);
-
-  /* FIXME : If we have curently configured caps, we should return those
-   * intersected with the filter*/
-
-  caps = gst_pad_get_pad_template_caps (GST_BASE_SINK (pvrvideosink)->sinkpad);
-  if (filter) {
-    GstCaps *intersection;
-
-    intersection =
-        gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (caps);
-    caps = intersection;
-  }
-
-  GST_DEBUG_OBJECT (bsink, "Returning %" GST_PTR_FORMAT, caps);
-
-  return caps;
-}
-
-static GstStateChangeReturn
-gst_pvrvideosink_change_state (GstElement * element, GstStateChange transition)
-{
-  GstPVRVideoSink *pvrvideosink;
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstDrawContext *dcontext;
-
-  pvrvideosink = GST_PVRVIDEOSINK (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (pvrvideosink->dcontext == NULL) {
-        dcontext = gst_pvrvideosink_get_dcontext (pvrvideosink);
-        if (dcontext == NULL)
-          return GST_STATE_CHANGE_FAILURE;
-        GST_OBJECT_LOCK (pvrvideosink);
-        pvrvideosink->dcontext = dcontext;
-        GST_OBJECT_UNLOCK (pvrvideosink);
-      }
-      gst_pvrvideosink_manage_event_thread (pvrvideosink);
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      GST_VIDEO_SINK_WIDTH (pvrvideosink) = 0;
-      GST_VIDEO_SINK_HEIGHT (pvrvideosink) = 0;
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_pvrvideosink_reset (pvrvideosink);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_pvrvideosink_get_times (GstBaseSink * bsink, GstBuffer * buf,
-    GstClockTime * start, GstClockTime * end)
-{
-  GstPVRVideoSink *pvrvideosink;
-
-  pvrvideosink = GST_PVRVIDEOSINK (bsink);
-
-  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
-    *start = GST_BUFFER_TIMESTAMP (buf);
-    if (GST_BUFFER_DURATION_IS_VALID (buf)) {
-      *end = *start + GST_BUFFER_DURATION (buf);
-    } else {
-      gint fps_n, fps_d;
-      fps_n = GST_VIDEO_INFO_FPS_N (&pvrvideosink->info);
-      fps_d = GST_VIDEO_INFO_FPS_D (&pvrvideosink->info);
-      if (fps_n > 0) {
-        *end = *start + gst_util_uint64_scale_int (GST_SECOND, fps_d, fps_n);
-      }
-    }
-  }
-}
-
-static GstFlowReturn
-gst_pvrvideosink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
-{
-  GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (vsink);
-  GstPVRMeta *meta;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "render buffer: %p", buf);
-
-  meta = gst_buffer_get_pvr_meta (buf);
-
-  if (G_UNLIKELY (meta == NULL)) {
-    meta = gst_buffer_add_pvr_meta (buf, GST_ELEMENT_CAST (pvrvideosink));
-    if (meta == NULL)
-      goto meta_failure;
-  }
-
-  gst_pvrvideosink_blit (pvrvideosink, buf);
-
-  return GST_FLOW_OK;
-
-meta_failure:
-  {
-    GST_WARNING_OBJECT (pvrvideosink, "Failed to map incoming buffer");
-    return GST_FLOW_ERROR;
-  }
-}
-
-static gboolean
-gst_pvrvideosink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
-{
-  GstPVRVideoSink *pvrvideosink = (GstPVRVideoSink *) bsink;
-  GstBufferPool *pool;
-  GstStructure *config;
-  GstCaps *caps;
-  guint size;
-  gboolean need_pool;
-
-  gst_query_parse_allocation (query, &caps, &need_pool);
-
-  if (caps == NULL)
-    goto no_caps;
-
-  g_mutex_lock (pvrvideosink->flow_lock);
-  if ((pool = pvrvideosink->pool))
-    gst_object_ref (pool);
-  g_mutex_unlock (pvrvideosink->flow_lock);
-
-  if (pool != NULL) {
-    const GstCaps *pcaps;
-
-    /* we had a pool, check caps */
-    GST_DEBUG_OBJECT (pvrvideosink, "check existing pool caps");
-    config = gst_buffer_pool_get_config (pool);
-    gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, NULL);
-    gst_structure_free (config);
-
-    if (!gst_caps_is_equal (caps, pcaps)) {
-      GST_DEBUG_OBJECT (pvrvideosink, "pool has different caps");
-      /* different caps, we can't use this pool */
-      gst_object_unref (pool);
-      pool = NULL;
-    }
-  }
-
-  if (pool == NULL && need_pool) {
-    GstVideoInfo info;
-
-    GST_DEBUG_OBJECT (pvrvideosink, "create new pool");
-    pool = gst_pvr_buffer_pool_new (GST_ELEMENT_CAST (pvrvideosink));
-
-    if (!gst_video_info_from_caps (&info, caps))
-      goto invalid_caps;
-
-    /* the normal size of a frame */
-    size = info.size;
-
-    config = gst_buffer_pool_get_config (pool);
-    gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 0);
-    if (!gst_buffer_pool_set_config (pool, config))
-      goto config_failed;
-  }
-  /* we need at least 3 buffers */
-  gst_query_set_allocation_params (query, size, 3, 0, 0, 0, pool);
-
-  /* we also support various metadata */
-  gst_query_add_allocation_meta (query, GST_VIDEO_CROP_META_API, NULL);
-
-  gst_object_unref (pool);
-
-  return TRUE;
-
-  /* ERRORS */
-no_caps:
-  {
-    GST_DEBUG_OBJECT (bsink, "no caps specified");
-    return FALSE;
-  }
-invalid_caps:
-  {
-    GST_DEBUG_OBJECT (bsink, "invalid caps specified");
-    return FALSE;
-  }
-config_failed:
-  {
-    GST_DEBUG_OBJECT (bsink, "failed setting config");
-    return FALSE;
-  }
-}
-
-/* Interfaces stuff */
-
-/* This function destroys a GstXWindow */
-static void
-gst_pvrvideosink_xwindow_destroy (GstPVRVideoSink * pvrvideosink,
-    GstXWindow * xwindow)
-{
-  g_return_if_fail (xwindow != NULL);
-
-  g_mutex_lock (pvrvideosink->dcontext->x_lock);
-
-  /* If we did not create that window we just free the GC and let it live */
-  if (xwindow->internal)
-    XDestroyWindow (pvrvideosink->dcontext->x_display, xwindow->window);
-  else
-    XSelectInput (pvrvideosink->dcontext->x_display, xwindow->window, 0);
-
-  XFreeGC (pvrvideosink->dcontext->x_display, xwindow->gc);
-
-  XSync (pvrvideosink->dcontext->x_display, FALSE);
-
-  g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-
-  g_free (xwindow);
-}
-
-static void
-gst_pvrvideosink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
-{
-  XID window_handle = id;
-  GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
-  GstXWindow *xwindow = NULL;
-
-  g_return_if_fail (GST_IS_PVRVIDEOSINK (pvrvideosink));
-
-  g_mutex_lock (pvrvideosink->flow_lock);
-
-  /* If we already use that window return */
-  if (pvrvideosink->xwindow && (window_handle == pvrvideosink->xwindow->window)) {
-    g_mutex_unlock (pvrvideosink->flow_lock);
-    return;
-  }
-
-  /* If the element has not initialized the X11 context try to do so */
-  if (!pvrvideosink->dcontext && !(pvrvideosink->dcontext =
-          gst_pvrvideosink_get_dcontext (pvrvideosink))) {
-    g_mutex_unlock (pvrvideosink->flow_lock);
-    /* we have thrown a GST_ELEMENT_ERROR now */
-    return;
-  }
-
-  /* If a window is there already we destroy it */
-  if (pvrvideosink->xwindow) {
-    gst_pvrvideosink_xwindow_destroy (pvrvideosink, pvrvideosink->xwindow);
-    pvrvideosink->xwindow = NULL;
-  }
-
-  /* If the xid is 0 we will create an internal one in buffer_alloc */
-  if (window_handle != 0) {
-    XWindowAttributes attr;
-    WSEGLError glerror;
-    WSEGLDrawableParams source_params;
-    PVRSRV_CLIENT_MEM_INFO *client_mem_info;
-
-    xwindow = g_new0 (GstXWindow, 1);
-    xwindow->window = window_handle;
-
-    /* Set the event we want to receive and create a GC */
-    g_mutex_lock (pvrvideosink->dcontext->x_lock);
-
-    XGetWindowAttributes (pvrvideosink->dcontext->x_display, xwindow->window,
-        &attr);
-
-    xwindow->width = attr.width;
-    xwindow->height = attr.height;
-    xwindow->internal = FALSE;
-    if (!pvrvideosink->have_render_rect) {
-      pvrvideosink->render_rect.x = pvrvideosink->render_rect.y = 0;
-      pvrvideosink->render_rect.w = attr.width;
-      pvrvideosink->render_rect.h = attr.height;
-    }
-    XSelectInput (pvrvideosink->dcontext->x_display, xwindow->window,
-        ExposureMask | StructureNotifyMask);
-
-    XSetWindowBackgroundPixmap (pvrvideosink->dcontext->x_display,
-        xwindow->window, None);
-
-    XMapWindow (pvrvideosink->dcontext->x_display, xwindow->window);
-    xwindow->gc = XCreateGC (pvrvideosink->dcontext->x_display,
-        xwindow->window, 0, NULL);
-    g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-
-    glerror =
-        pvrvideosink->dcontext->wsegl_table->
-        pfnWSEGL_CreateWindowDrawable (pvrvideosink->dcontext->display_handle,
-        pvrvideosink->dcontext->glconfig,
-        &(pvrvideosink->dcontext->drawable_handle),
-        (NativeWindowType) xwindow->window,
-        &(pvrvideosink->dcontext->rotation));
-
-    if (glerror != WSEGL_SUCCESS) {
-      GST_ERROR_OBJECT (pvrvideosink, "Error creating drawable");
-      return;
-    }
-    glerror =
-        pvrvideosink->dcontext->wsegl_table->
-        pfnWSEGL_GetDrawableParameters (pvrvideosink->dcontext->drawable_handle,
-        &source_params, &pvrvideosink->render_params);
-
-    client_mem_info =
-        (PVRSRV_CLIENT_MEM_INFO *) pvrvideosink->render_params.hPrivateData;
-    PVR2DMEMINFO_INITIALISE (&pvrvideosink->dcontext->dst_mem, client_mem_info);
-  }
-
-  if (xwindow)
-    pvrvideosink->xwindow = xwindow;
-
-  g_mutex_unlock (pvrvideosink->flow_lock);
-}
-
-static void
-gst_pvrvideosink_expose (GstVideoOverlay * overlay)
-{
-  GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
-
-  gst_pvrvideosink_blit (pvrvideosink, NULL);
-}
-
-static void
-gst_pvrvideosink_set_event_handling (GstVideoOverlay * overlay,
-    gboolean handle_events)
-{
-  GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
-
-  g_mutex_lock (pvrvideosink->flow_lock);
-
-  if (G_UNLIKELY (!pvrvideosink->xwindow)) {
-    g_mutex_unlock (pvrvideosink->flow_lock);
-    return;
-  }
-
-  g_mutex_lock (pvrvideosink->dcontext->x_lock);
-
-  XSelectInput (pvrvideosink->dcontext->x_display,
-      pvrvideosink->xwindow->window, ExposureMask | StructureNotifyMask);
-
-  g_mutex_unlock (pvrvideosink->dcontext->x_lock);
-
-  g_mutex_unlock (pvrvideosink->flow_lock);
-}
-
-static void
-gst_pvrvideosink_set_render_rectangle (GstVideoOverlay * overlay, gint x,
-    gint y, gint width, gint height)
-{
-  GstPVRVideoSink *pvrvideosink = GST_PVRVIDEOSINK (overlay);
-
-  /* FIXME: how about some locking? */
-  if (width >= 0 && height >= 0) {
-    pvrvideosink->render_rect.x = x;
-    pvrvideosink->render_rect.y = y;
-    pvrvideosink->render_rect.w = width;
-    pvrvideosink->render_rect.h = height;
-    pvrvideosink->have_render_rect = TRUE;
-  } else {
-    pvrvideosink->render_rect.x = 0;
-    pvrvideosink->render_rect.y = 0;
-    pvrvideosink->render_rect.w = pvrvideosink->xwindow->width;
-    pvrvideosink->render_rect.h = pvrvideosink->xwindow->height;
-    pvrvideosink->have_render_rect = FALSE;
-  }
-}
-
-static void
-gst_pvrvideosink_videooverlay_init (GstVideoOverlayInterface * iface)
-{
-  iface->set_window_handle = gst_pvrvideosink_set_window_handle;
-  iface->expose = gst_pvrvideosink_expose;
-  iface->handle_events = gst_pvrvideosink_set_event_handling;
-  iface->set_render_rectangle = gst_pvrvideosink_set_render_rectangle;
-}
-
-/* =========================================== */
-/*                                             */
-/*              Init & Class init              */
-/*                                             */
-/* =========================================== */
-
-static void
-gst_pvrvideosink_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstPVRVideoSink *pvrvideosink;
-
-  g_return_if_fail (GST_IS_PVRVIDEOSINK (object));
-
-  pvrvideosink = GST_PVRVIDEOSINK (object);
-
-  switch (prop_id) {
-    case PROP_FORCE_ASPECT_RATIO:
-      pvrvideosink->keep_aspect = g_value_get_boolean (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_pvrvideosink_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstPVRVideoSink *pvrvideosink;
-
-  g_return_if_fail (GST_IS_PVRVIDEOSINK (object));
-
-  pvrvideosink = GST_PVRVIDEOSINK (object);
-
-  switch (prop_id) {
-    case PROP_FORCE_ASPECT_RATIO:
-      g_value_set_boolean (value, pvrvideosink->keep_aspect);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-void
-gst_pvrvideosink_track_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer)
-{
-  GST_DEBUG_OBJECT (pvrsink, "Adding buffer %p to tracked buffers", buffer);
-  pvrsink->metabuffers = g_list_prepend (pvrsink->metabuffers, buffer);
-}
-
-void
-gst_pvrvideosink_untrack_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer)
-{
-  GST_DEBUG_OBJECT (pvrsink, "Removing buffer %p from tracked buffers", buffer);
-  pvrsink->metabuffers = g_list_remove_all (pvrsink->metabuffers, buffer);
-}
-
-static void
-gst_pvrvideosink_release_pvr_metas (GstPVRVideoSink * pvrsink)
-{
-  GstBuffer *buf;
-  GstPVRMeta *pvrmeta;
-
-  GST_DEBUG_OBJECT (pvrsink, "Releasing pending PVR metas");
-
-  while (pvrsink->metabuffers) {
-    buf = (GstBuffer *) pvrsink->metabuffers->data;
-
-    pvrmeta = gst_buffer_get_pvr_meta (buf);
-    if (pvrmeta)
-      gst_buffer_remove_meta (buf, (GstMeta *) pvrmeta);
-  }
-
-  GST_DEBUG_OBJECT (pvrsink, "Done");
-}
-
-static void
-gst_pvrvideosink_dcontext_free (GstDrawContext * dcontext)
-{
-  GST_DEBUG ("Freeing dcontext %p", dcontext);
-
-  g_free (dcontext->p_blt_info);
-  g_free (dcontext->p_blt2d_info);
-
-  if (dcontext->x_lock)
-    g_mutex_lock (dcontext->x_lock);
-  if (dcontext->x_display) {
-    GST_LOG ("Closing display");
-    XCloseDisplay (dcontext->x_display);
-  }
-  if (dcontext->x_lock) {
-    g_mutex_unlock (dcontext->x_lock);
-    g_mutex_free (dcontext->x_lock);
-  }
-
-  g_free (dcontext);
-}
-
-static void
-gst_pvrvideosink_dcontext_clear (GstPVRVideoSink * pvrvideosink)
-{
-  GstDrawContext *dcontext;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "Clearing dcontext %p",
-      pvrvideosink->dcontext);
-
-  GST_OBJECT_LOCK (pvrvideosink);
-  if (!pvrvideosink->dcontext) {
-    GST_OBJECT_UNLOCK (pvrvideosink);
-    return;
-  }
-
-  dcontext = pvrvideosink->dcontext;
-  pvrvideosink->dcontext = NULL;
-  GST_OBJECT_UNLOCK (pvrvideosink);
-
-  gst_pvrvideosink_dcontext_free (dcontext);
-}
-
-static void
-gst_pvrvideosink_reset (GstPVRVideoSink * pvrvideosink)
-{
-  GThread *thread;
-
-  GST_DEBUG_OBJECT (pvrvideosink, "Resetting");
-
-  GST_OBJECT_LOCK (pvrvideosink);
-  pvrvideosink->running = FALSE;
-  thread = pvrvideosink->event_thread;
-  pvrvideosink->event_thread = NULL;
-  GST_OBJECT_UNLOCK (pvrvideosink);
-
-  if (thread)
-    g_thread_join (thread);
-
-  if (pvrvideosink->current_buffer) {
-    GST_LOG_OBJECT (pvrvideosink, "Removing cached buffer");
-    gst_buffer_unref (pvrvideosink->current_buffer);
-    pvrvideosink->current_buffer = NULL;
-  }
-
-  if (pvrvideosink->pool) {
-    GST_LOG_OBJECT (pvrvideosink, "Unreffing pool");
-    gst_object_unref (pvrvideosink->pool);
-    pvrvideosink->pool = NULL;
-  }
-  memset (&pvrvideosink->render_params, 0, sizeof (WSEGLDrawableParams));
-
-  pvrvideosink->render_rect.x = pvrvideosink->render_rect.y = 0;
-  pvrvideosink->render_rect.w = pvrvideosink->render_rect.h = 0;
-  pvrvideosink->have_render_rect = FALSE;
-
-  gst_pvrvideosink_release_pvr_metas (pvrvideosink);
-
-  gst_pvrvideosink_destroy_drawable (pvrvideosink);
-
-  if (pvrvideosink->xwindow) {
-    gst_pvrvideosink_xwindow_destroy (pvrvideosink, pvrvideosink->xwindow);
-    pvrvideosink->xwindow = NULL;
-  }
-
-  gst_pvrvideosink_dcontext_clear (pvrvideosink);
-}
-
-static void
-gst_pvrvideosink_finalize (GObject * object)
-{
-  GstPVRVideoSink *pvrvideosink;
-
-  pvrvideosink = GST_PVRVIDEOSINK (object);
-
-  gst_pvrvideosink_reset (pvrvideosink);
-
-  if (pvrvideosink->flow_lock) {
-    g_mutex_free (pvrvideosink->flow_lock);
-    pvrvideosink->flow_lock = NULL;
-  }
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_pvrvideosink_init (GstPVRVideoSink * pvrvideosink)
-{
-  pvrvideosink->running = FALSE;
-
-  pvrvideosink->flow_lock = g_mutex_new ();
-  pvrvideosink->pool = NULL;
-
-  pvrvideosink->keep_aspect = FALSE;
-  pvrvideosink->current_caps = NULL;
-  pvrvideosink->dcontext = NULL;
-  pvrvideosink->xwindow = NULL;
-  pvrvideosink->redraw_borders = TRUE;
-  pvrvideosink->current_buffer = NULL;
-  pvrvideosink->event_thread = NULL;
-  memset (&pvrvideosink->render_params, 0, sizeof (WSEGLDrawableParams));
-}
-
-static void
-gst_pvrvideosink_class_init (GstPVRVideoSinkClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstBaseSinkClass *gstbasesink_class;
-  GstVideoSinkClass *videosink_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-  gstbasesink_class = (GstBaseSinkClass *) klass;
-  videosink_class = (GstVideoSinkClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->finalize = gst_pvrvideosink_finalize;
-  gobject_class->set_property = gst_pvrvideosink_set_property;
-  gobject_class->get_property = gst_pvrvideosink_get_property;
-
-  g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
-      g_param_spec_boolean ("force-aspect-ratio", "Force aspect ratio",
-          "When enabled, reverse caps negotiation (scaling) will respect "
-          "original aspect ratio", TRUE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  gst_element_class_set_static_metadata (gstelement_class,
-      "PVR Video sink", "Sink/Video",
-      "A PVR videosink",
-      "Luciana Fujii Pontello <luciana.fujii@collabora.co.uk");
-
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_pvrvideosink_sink_template_factory);
-
-  gstelement_class->change_state = gst_pvrvideosink_change_state;
-
-  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_pvrvideosink_setcaps);
-  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_pvrvideosink_getcaps);
-  gstbasesink_class->propose_allocation =
-      GST_DEBUG_FUNCPTR (gst_pvrvideosink_propose_allocation);
-  gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_pvrvideosink_get_times);
-
-  videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_pvrvideosink_show_frame);
-}
diff --git a/sys/pvr2d/gstpvrvideosink.h b/sys/pvr2d/gstpvrvideosink.h
deleted file mode 100644 (file)
index c84bb22..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/* GStreamer
- *
- * Copyright (C) 2011 - Collabora Ltda
- * Copyright (C) 2011 - Texas Instruments
- *  @author: Luciana Fujii Pontello <luciana.fujii@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_PVRVIDEOSINK_H__
-#define __GST_PVRVIDEOSINK_H__
-
-#include <gst/video/gstvideosink.h>
-#include <gst/video/video.h>
-
-#include <string.h>
-#include <math.h>
-#include <pvr2d.h>
-#include <EGL/egl.h>
-#include <wsegl.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-
-G_BEGIN_DECLS
-#define GST_TYPE_PVRVIDEOSINK (gst_pvrvideosink_get_type())
-#define GST_PVRVIDEOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_PVRVIDEOSINK, GstPVRVideoSink))
-#define GST_PVRVIDEOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_PVRVIDEOSINK, GstPVRVideoSinkClass))
-#define GST_IS_PVRVIDEOSINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_PVRVIDEOSINK))
-#define GST_IS_PVRVIDEOSINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_PVRVIDEOSINK))
-typedef struct _GstDrawContext GstDrawContext;
-typedef struct _GstXWindow GstXWindow;
-
-typedef struct _GstPVRVideoBuffer GstPVRVideoBuffer;
-typedef struct _GstPVRVideoBufferClass GstPVRVideoBufferClass;
-
-typedef struct _GstPVRVideoSink GstPVRVideoSink;
-typedef struct _GstPVRVideoSinkClass GstPVRVideoSinkClass;
-
-struct _GstDrawContext
-{
-  /* PVR2D */
-  PVR2DCONTEXTHANDLE pvr_context;
-  PVR2DMEMINFO dst_mem;
-  PPVR2D_3DBLT_EXT p_blt_info;
-  PPVR2DBLTINFO p_blt2d_info;
-
-  long stride;
-  PVR2DFORMAT display_format;
-  long display_width;
-  long display_height;
-
-  /* WSEGL */
-  const WSEGL_FunctionTable *wsegl_table;
-
-  WSEGLDisplayHandle display_handle;
-  const WSEGLCaps **glcaps;
-  WSEGLConfig *glconfig;
-  WSEGLDrawableHandle drawable_handle;
-  WSEGLRotationAngle rotation;
-
-  GMutex *x_lock;
-  Display *x_display;
-  gint screen_num;
-  gulong black;
-};
-
-struct _GstXWindow
-{
-  Window window;
-  gint width, height;
-  gboolean internal;
-  GC gc;
-};
-
-
-/**
- * GstPVRVideoSink:
- * @running: used to inform @event_thread if it should run/shutdown
- * @fps_n: the framerate fraction numerator
- * @fps_d: the framerate fraction denominator
- * @flow_lock: used to protect data flow routines from external calls such as
- * events from @event_thread or methods from the #GstXOverlay interface
- * @x_lock: used to protect X calls
- * @buffer_pool: a list of #GstPVRVideoBuffer that could be reused at next buffer
- * allocation call
- * @keep_aspect: used to remember if reverse negotiation scaling should respect
- * aspect ratio
- *
- * The #GstPVRVideoSink data structure.
- */
-struct _GstPVRVideoSink
-{
-  /* Our element stuff */
-  GstVideoSink videosink;
-
-  gboolean running;
-
-  /* Framerate numerator and denominator */
-  GstVideoInfo info;
-
-  GThread *event_thread;
-  GMutex *flow_lock;
-
-  GstBufferPool *pool;
-
-  gboolean keep_aspect;
-
-  GstCaps *current_caps;
-  GstDrawContext *dcontext;
-  GstXWindow *xwindow;
-
-  GstVideoRectangle render_rect;
-  gboolean have_render_rect;
-
-  gchar *media_title;
-  gboolean redraw_borders;
-  GstBuffer *current_buffer;
-
-  /* List of buffer using GstPVRMeta on ourselves */
-  GList *metabuffers;
-
-  WSEGLDrawableParams render_params;
-};
-
-struct _GstPVRVideoSinkClass
-{
-  GstVideoSinkClass parent_class;
-};
-
-GType gst_pvrvideosink_get_type (void);
-
-void gst_pvrvideosink_track_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer);
-void gst_pvrvideosink_untrack_buffer (GstPVRVideoSink * pvrsink, GstBuffer * buffer);
-
-G_END_DECLS
-#endif /* __GST_PVRVIDEOSINK_H__ */
diff --git a/sys/pvr2d/pvr_includes/dri2_ws.h b/sys/pvr2d/pvr_includes/dri2_ws.h
deleted file mode 100644 (file)
index 743d5bb..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/**********************************************************************\r
-*\r
-* Copyright(c) Imagination Technologies Ltd.\r
-*\r
-* The contents of this file are subject to the MIT license as set out below.\r
-*\r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"),\r
-* to deal in the Software without restriction, including without limitation\r
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-* and/or sell copies of the Software, and to permit persons to whom the\r
-* Software is furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included\r
-* in all copies or substantial portions of the Software.\r
-*\r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\r
-* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r
-* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-* \r
-* This License is also included in this distribution in the file called \r
-* "COPYING".\r
-* \r
-******************************************************************************/\r
-\r
-\r
-\r
-#if !defined(__DRI2_WS_H__)\r
-#define __DRI2_WS_H__\r
-\r
-#define DRI2WS_DISPFLAG_DEFAULT_DISPLAY 0x00000001\r
-\r
-/*\r
-// Constants (macros) related to back-buffering.\r
-*/\r
-\r
-#define XWS_FLIP_BUFFERS               3\r
-#define DRI2_FLIP_BUFFERS_NUM  XWS_FLIP_BUFFERS\r
-#define XWS_FLIP_BUFFER_INDEX  (XWS_MAX_FLIP_BUFFERS - 1)\r
-\r
-#define XWS_BLIT_BUFFERS               2\r
-#define DRI2_BLIT_BUFFERS_NUM  XWS_BLIT_BUFFERS\r
-#define XWS_BLIT_BUFFER_INDEX  (XWS_MAX_BLIT_BUFFERS - 1)\r
-\r
-#if 0\r
-#define MIN(a,b) ((a)<(b)?(a):(b))\r
-#define MAX(a,b) ((a)>(b)?(a):(b))\r
-#endif\r
-\r
-#define        XWS_MAX_BUFFERS MAX(XWS_FLIP_BUFFERS, XWS_BLIT_BUFFERS)\r
-#define        DRI2_MAX_BUFFERS_NUM    XWS_MAX_BUFFERS\r
-\r
-\r
-#define __DRI_BUFFER_EMPTY 103\r
-\r
-/** Used for ugly ugly ugly swap interval passing to dri2 driver and receiving current frame index */\r
-#define __DRI_BUFFER_PVR_CTRL            0x80 /* 100000XX <- last 2 bits for swap interval value */\r
-#define __DRI_BUFFER_PVR_CTRL_RET 0x90 /* 11000000 */\r
-\r
-\r
-\r
-#define DRI2_BACK_BUFFER_EXPORT_TYPE_BUFFERS 1\r
-#define DRI2_BACK_BUFFER_EXPORT_TYPE_SWAPCHAIN 2\r
-\r
-#define UNREFERENCED_PARAMETER(x) (x) = (x)\r
-\r
-\r
-/*\r
- * Structure used to pass information about back buffers between client application and\r
- * X.Org. Watch out for equivalent structure in pvr_video lib \r
- */\r
-typedef struct _PVRDRI2BackBuffersExport_\r
-{\r
-       /* Type of export. _BUFFERS mean set of handles, _SWAPCHAIN mean Swap chain ID */\r
-       unsigned int    ui32Type;   \r
-       PVR2D_HANDLE    hBuffers[DRI2_MAX_BUFFERS_NUM];\r
-       unsigned int    ui32BuffersCount;\r
-       unsigned int    ui32SwapChainID;\r
-} PVRDRI2BackBuffersExport;\r
-\r
-/*\r
-// Private window system display information\r
-*/\r
-typedef struct DRI2WS_Display_TAG\r
-{\r
-       unsigned int                    ui32RefCount;\r
-       \r
-       Display                         *display;\r
-       int                             screen;\r
-       unsigned int                    ui32Flags;\r
-\r
-       unsigned int                    ui32Width;\r
-       unsigned int                    ui32Height;\r
-       unsigned int                    ui32StrideInBytes;\r
-       unsigned int                    ui32BytesPerPixel;\r
-       WSEGLPixelFormat                ePixelFormat;\r
-\r
-       PVR2DFORMAT                             ePVR2DPixelFormat;\r
-       PVR2DCONTEXTHANDLE              hContext;\r
-       PVR2DMEMINFO                    *psMemInfo;\r
-\r
-       int                             iDRMfd;\r
-} DRI2WSDisplay;\r
-\r
-\r
-typedef enum DRI2WS_DrawableType_TAG \r
-{\r
-       DRI2_DRAWABLE_UNKNOWN = 0,\r
-       DRI2_DRAWABLE_WINDOW = 1,\r
-       DRI2_DRAWABLE_PIXMAP = 2,\r
-} DRI2WS_DrawableType;\r
-\r
-\r
-/*\r
-// Private window system drawable information\r
-*/\r
-typedef struct DRI2WS_Drawable_TAG\r
-{\r
-       DRI2WS_DrawableType     eDrawableType;\r
-\r
-       Window                          nativeWin;\r
-\r
-       /** Index of current render-to back buffer (received from Xserver) */\r
-       unsigned int            ui32BackBufferCurrent;\r
-\r
-       /** Number of buffers */\r
-       unsigned int            ui32BackBufferNum;\r
-\r
-       /** Swap interval (works only in fliping/fullscreen case, values 0-3) */\r
-       unsigned int            ui32SwapInterval;\r
-\r
-       /** PVR2D Handles received from Xserver (back buffers export structure) */\r
-       PVR2D_HANDLE            hPVR2DBackBufferExport;\r
-\r
-       /** Stamp of current back buffer */\r
-       unsigned char           ucBackBufferExportStamp;\r
-\r
-       /** Array of PVR2D Handles received from Xserver (our back buffers) */\r
-       PVR2D_HANDLE            hPVR2DBackBuffer[XWS_MAX_BUFFERS];\r
-\r
-       /** Array of PVR2D mapped back buffers */\r
-       PVR2DMEMINFO            *psMemBackBuffer[XWS_MAX_BUFFERS];\r
-\r
-       /** Stamp of current back buffer */\r
-       unsigned char           ucFrontBufferStamp;\r
-\r
-       /** Array of PVR2D Handles received from Xserver (our back buffers) */\r
-       PVR2D_HANDLE            hPVR2DFrontBuffer;\r
-\r
-       /** Array of PVR2D mapped back buffers */\r
-       PVR2DMEMINFO            *psMemFrontBuffer;\r
-\r
-       /** ID of flip/swap chain received from X.Org */\r
-       unsigned int            ui32FlipChainID;\r
-\r
-       /** PVR2D Handle of flip chain used to get buffers to draw to */\r
-       PVR2DFLIPCHAINHANDLE    hFlipChain;\r
-\r
-       int                                     iWidth;\r
-       int                                     iHeight;\r
-\r
-       WSEGLPixelFormat        ePixelFormat;\r
-       unsigned int            ui32BytesPerPixel;\r
-       unsigned int            ui32StrideInPixels;\r
-       unsigned int            ui32StrideInBytes;\r
-       PVR2DFORMAT                     ePVR2DPixelFormat;\r
-\r
-       DRI2WSDisplay           *psXWSDisplay;\r
-\r
-} DRI2WSDrawable;\r
-\r
-#endif /* __DRI2_WS_H__ */\r
diff --git a/sys/pvr2d/pvr_includes/img_defs.h b/sys/pvr2d/pvr_includes/img_defs.h
deleted file mode 100644 (file)
index 64db711..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/**********************************************************************\r
-*\r
-* Copyright(c) Imagination Technologies Ltd.\r
-*\r
-* The contents of this file are subject to the MIT license as set out below.\r
-*\r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"),\r
-* to deal in the Software without restriction, including without limitation\r
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-* and/or sell copies of the Software, and to permit persons to whom the\r
-* Software is furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included\r
-* in all copies or substantial portions of the Software.\r
-*\r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\r
-* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r
-* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-* \r
-* This License is also included in this distribution in the file called \r
-* "COPYING".\r
-* \r
-******************************************************************************/\r
-\r
-\r
-\r
-#if !defined (__IMG_DEFS_H__)\r
-#define __IMG_DEFS_H__\r
-\r
-#include "img_types.h"\r
-\r
-typedef                enum    img_tag_TriStateSwitch\r
-{\r
-       IMG_ON          =       0x00,\r
-       IMG_OFF,\r
-       IMG_IGNORE\r
-\r
-} img_TriStateSwitch, * img_pTriStateSwitch;\r
-\r
-#define                IMG_SUCCESS                             0\r
-\r
-#define                IMG_NO_REG                              1\r
-\r
-#if defined (NO_INLINE_FUNCS)\r
-       #define INLINE\r
-       #define FORCE_INLINE\r
-#else\r
-#if defined (__cplusplus)\r
-       #define INLINE                                  inline\r
-       #define FORCE_INLINE                    inline\r
-#else\r
-#if    !defined(INLINE)\r
-       #define INLINE                                  __inline\r
-#endif\r
-       #define FORCE_INLINE                    static __inline\r
-#endif\r
-#endif\r
-\r
-\r
-#ifndef PVR_UNREFERENCED_PARAMETER\r
-#define        PVR_UNREFERENCED_PARAMETER(param) (param) = (param)\r
-#endif\r
-\r
-#ifdef __GNUC__\r
-#define unref__ __attribute__ ((unused))\r
-#else\r
-#define unref__\r
-#endif\r
-\r
-#ifndef _TCHAR_DEFINED\r
-#if defined(UNICODE)\r
-typedef unsigned short         TCHAR, *PTCHAR, *PTSTR;\r
-#else  \r
-typedef char                           TCHAR, *PTCHAR, *PTSTR;\r
-#endif \r
-#define _TCHAR_DEFINED\r
-#endif \r
-\r
-\r
-                       #if defined(__linux__) || defined(__METAG)\r
-\r
-                               #define IMG_CALLCONV\r
-                               #define IMG_INTERNAL    __attribute__((visibility("hidden")))\r
-                               #define IMG_EXPORT              __attribute__((visibility("default")))\r
-                               #define IMG_IMPORT\r
-                               #define IMG_RESTRICT    __restrict__\r
-\r
-                       #else\r
-                                       #error("define an OS")\r
-                       #endif\r
-\r
-#ifndef IMG_ABORT\r
-       #define IMG_ABORT()     abort()\r
-#endif\r
-\r
-#ifndef IMG_MALLOC\r
-       #define IMG_MALLOC(A)           malloc  (A)\r
-#endif\r
-\r
-#ifndef IMG_FREE\r
-       #define IMG_FREE(A)                     free    (A)\r
-#endif\r
-\r
-#define IMG_CONST const\r
-\r
-#if defined(__GNUC__)\r
-#define IMG_FORMAT_PRINTF(x,y)         __attribute__((format(printf,x,y)))\r
-#else\r
-#define IMG_FORMAT_PRINTF(x,y)\r
-#endif\r
-\r
-#if defined (_WIN64)\r
-#define IMG_UNDEF      (~0ULL)\r
-#else\r
-#define IMG_UNDEF      (~0UL)\r
-#endif\r
-\r
-#endif \r
diff --git a/sys/pvr2d/pvr_includes/img_types.h b/sys/pvr2d/pvr_includes/img_types.h
deleted file mode 100644 (file)
index c312c83..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/**********************************************************************\r
-*\r
-* Copyright(c) Imagination Technologies Ltd.\r
-*\r
-* The contents of this file are subject to the MIT license as set out below.\r
-*\r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"),\r
-* to deal in the Software without restriction, including without limitation\r
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-* and/or sell copies of the Software, and to permit persons to whom the\r
-* Software is furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included\r
-* in all copies or substantial portions of the Software.\r
-*\r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\r
-* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r
-* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-* \r
-* This License is also included in this distribution in the file called \r
-* "COPYING".\r
-* \r
-******************************************************************************/\r
-\r
-\r
-\r
-#ifndef __IMG_TYPES_H__\r
-#define __IMG_TYPES_H__\r
-\r
-#if !defined(IMG_ADDRSPACE_CPUVADDR_BITS)\r
-#define IMG_ADDRSPACE_CPUVADDR_BITS            32\r
-#endif\r
-\r
-#if !defined(IMG_ADDRSPACE_PHYSADDR_BITS)\r
-#define IMG_ADDRSPACE_PHYSADDR_BITS            32\r
-#endif\r
-\r
-typedef unsigned int   IMG_UINT,       *IMG_PUINT;\r
-typedef signed int             IMG_INT,        *IMG_PINT;\r
-\r
-typedef unsigned char  IMG_UINT8,      *IMG_PUINT8;\r
-typedef unsigned char  IMG_BYTE,       *IMG_PBYTE;\r
-typedef signed char            IMG_INT8,       *IMG_PINT8;\r
-typedef char                   IMG_CHAR,       *IMG_PCHAR;\r
-\r
-typedef unsigned short IMG_UINT16,     *IMG_PUINT16;\r
-typedef signed short   IMG_INT16,      *IMG_PINT16;\r
-#if !defined(IMG_UINT32_IS_ULONG)\r
-typedef unsigned int   IMG_UINT32,     *IMG_PUINT32;\r
-typedef signed int             IMG_INT32,      *IMG_PINT32;\r
-#else\r
-typedef unsigned long  IMG_UINT32,     *IMG_PUINT32;\r
-typedef signed long            IMG_INT32,      *IMG_PINT32;\r
-#endif\r
-#if !defined(IMG_UINT32_MAX)\r
-       #define IMG_UINT32_MAX 0xFFFFFFFFUL\r
-#endif\r
-\r
-       #if (defined(LINUX) || defined(__METAG))\r
-#if !defined(USE_CODE)\r
-               typedef unsigned long long              IMG_UINT64,     *IMG_PUINT64;\r
-               typedef long long                               IMG_INT64,      *IMG_PINT64;\r
-#endif\r
-       #else\r
-\r
-               #error("define an OS")\r
-\r
-       #endif\r
-\r
-#if !(defined(LINUX) && defined (__KERNEL__))\r
-typedef float                  IMG_FLOAT,      *IMG_PFLOAT;\r
-typedef double                 IMG_DOUBLE, *IMG_PDOUBLE;\r
-#endif\r
-\r
-typedef        enum tag_img_bool\r
-{\r
-       IMG_FALSE               = 0,\r
-       IMG_TRUE                = 1,\r
-       IMG_FORCE_ALIGN = 0x7FFFFFFF\r
-} IMG_BOOL, *IMG_PBOOL;\r
-\r
-typedef void            IMG_VOID, *IMG_PVOID;\r
-\r
-typedef IMG_INT32       IMG_RESULT;\r
-\r
-#if defined(_WIN64)\r
-typedef unsigned __int64 IMG_UINTPTR_T;\r
-#else\r
-typedef unsigned int     IMG_UINTPTR_T;\r
-#endif\r
-\r
-typedef IMG_PVOID       IMG_HANDLE;\r
-\r
-typedef void**          IMG_HVOID,     * IMG_PHVOID;\r
-\r
-typedef IMG_UINT32             IMG_SIZE_T;\r
-\r
-#define IMG_NULL        0 \r
-\r
-typedef IMG_UINT32      IMG_SID;\r
-\r
-\r
-typedef IMG_PVOID IMG_CPU_VIRTADDR;\r
-\r
-typedef struct _IMG_DEV_VIRTADDR\r
-{\r
-       \r
-       IMG_UINT32  uiAddr;\r
-#define IMG_CAST_TO_DEVVADDR_UINT(var)         (IMG_UINT32)(var)\r
-       \r
-} IMG_DEV_VIRTADDR;\r
-\r
-typedef struct _IMG_CPU_PHYADDR\r
-{\r
-       \r
-       IMG_UINTPTR_T uiAddr;\r
-} IMG_CPU_PHYADDR;\r
-\r
-typedef struct _IMG_DEV_PHYADDR\r
-{\r
-#if IMG_ADDRSPACE_PHYSADDR_BITS == 32\r
-       \r
-       IMG_UINTPTR_T uiAddr;\r
-#else\r
-       IMG_UINT32 uiAddr;\r
-       IMG_UINT32 uiHighAddr;\r
-#endif\r
-} IMG_DEV_PHYADDR;\r
-\r
-typedef struct _IMG_SYS_PHYADDR\r
-{\r
-       \r
-       IMG_UINTPTR_T uiAddr;\r
-} IMG_SYS_PHYADDR;\r
-\r
-#include "img_defs.h"\r
-\r
-#endif \r
diff --git a/sys/pvr2d/pvr_includes/pvr2d.h b/sys/pvr2d/pvr_includes/pvr2d.h
deleted file mode 100644 (file)
index 5dce7cf..0000000
+++ /dev/null
@@ -1,669 +0,0 @@
-/**********************************************************************\r
-*\r
-* Copyright(c) Imagination Technologies Ltd.\r
-*\r
-* The contents of this file are subject to the MIT license as set out below.\r
-*\r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"),\r
-* to deal in the Software without restriction, including without limitation\r
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-* and/or sell copies of the Software, and to permit persons to whom the\r
-* Software is furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included\r
-* in all copies or substantial portions of the Software.\r
-*\r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\r
-* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r
-* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-* \r
-* This License is also included in this distribution in the file called \r
-* "COPYING".\r
-* \r
-******************************************************************************/\r
-\r
-\r
-\r
-/******************************************************************************\r
-Modifications :-\r
-$Log: pvr2d.h $\r
-\r
- --- Revision Logs Removed --- \r
-******************************************************************************/\r
-\r
-#ifndef _PVR2D_H_\r
-#define _PVR2D_H_\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif \r
-\r
-/* PVR2D Platform-specific definitions */\r
-#if defined (__linux__)\r
-#define PVR2D_EXPORT __attribute__((visibility("default")))\r
-#define PVR2D_IMPORT\r
-#else\r
-#define PVR2D_EXPORT\r
-#define PVR2D_IMPORT\r
-#endif\r
-\r
-/* PVR2D header revision */\r
-#define PVR2D_REV_MAJOR                3\r
-#define PVR2D_REV_MINOR                5\r
-\r
-/* Basic types */\r
-typedef enum\r
-{\r
-       PVR2D_FALSE = 0,\r
-       PVR2D_TRUE\r
-} PVR2D_BOOL;\r
-\r
-typedef void* PVR2D_HANDLE;\r
-\r
-typedef char             PVR2D_CHAR,   *PVR2D_PCHAR;\r
-typedef unsigned char    PVR2D_UCHAR,  *PVR2D_PUCHAR;\r
-typedef int              PVR2D_INT,            *PVR2D_PINT;\r
-typedef unsigned int     PVR2D_UINT,   *PVR2D_PUINT;\r
-typedef long             PVR2D_LONG,   *PVR2D_PLONG;\r
-typedef unsigned long    PVR2D_ULONG,  *PVR2D_PULONG;\r
-\r
-typedef void             PVR2D_VOID,   *PVR2D_PVOID;\r
-\r
-\r
-/* error codes */\r
-typedef enum\r
-{\r
-       PVR2D_OK = 0,\r
-       PVR2DERROR_INVALID_PARAMETER = -1,\r
-       PVR2DERROR_DEVICE_UNAVAILABLE = -2,\r
-       PVR2DERROR_INVALID_CONTEXT = -3,\r
-       PVR2DERROR_MEMORY_UNAVAILABLE = -4,\r
-       PVR2DERROR_DEVICE_NOT_PRESENT = -5,\r
-       PVR2DERROR_IOCTL_ERROR = -6,\r
-       PVR2DERROR_GENERIC_ERROR = -7,\r
-       PVR2DERROR_BLT_NOTCOMPLETE = -8,\r
-       PVR2DERROR_HW_FEATURE_NOT_SUPPORTED = -9,\r
-       PVR2DERROR_NOT_YET_IMPLEMENTED = -10,\r
-       PVR2DERROR_MAPPING_FAILED = -11\r
-}PVR2DERROR;\r
-\r
-/* 32 bit PVR2D pixel format specifier */\r
-typedef unsigned long PVR2DFORMAT;\r
-\r
-/* Standard PVR2D pixel formats */\r
-#define        PVR2D_1BPP                                              0x00UL // 1bpp mask surface or palletized 1 bit source with 2x32 bit CLUT\r
-#define        PVR2D_RGB565                                    0x01UL // Common rgb 565 format\r
-#define        PVR2D_ARGB4444                                  0x02UL // Common argb 4444 format\r
-#define        PVR2D_RGB888                                    0x03UL // Common rgb 888 format (not supported)\r
-#define        PVR2D_ARGB8888                                  0x04UL // Common argb 8888 format\r
-#define        PVR2D_ARGB1555                                  0x05UL // Common argb 1555 format\r
-#define        PVR2D_ALPHA8                                    0x06UL // Alpha-only 8 bit per pixel (used with a constant fill colour)\r
-#define        PVR2D_ALPHA4                                    0x07UL // Alpha-only 4 bits per pixel (used with a constant fill colour)\r
-#define        PVR2D_PAL2                                              0x08UL // Palletized 2 bit format (requires   4x32 bit CLUT)\r
-#define        PVR2D_PAL4                                              0x09UL // Palletized 4 bit format (requires  16x32 bit CLUT)\r
-#define        PVR2D_PAL8                                              0x0AUL // Palletized 8 bit format (requires 256x32 bit CLUT)\r
-#define PVR2D_U8                                               0x10UL // monochrome unsigned 8 bit\r
-#define PVR2D_U88                                              0x11UL // monochrome unsigned 16 bit\r
-#define PVR2D_S8                                               0x12UL // signed 8 bit\r
-#define PVR2D_YUV422_YUYV                              0x13UL // YUV 422 low-high byte order Y0UY1V\r
-#define PVR2D_YUV422_UYVY                              0x14UL // YUV 422 low-high byte order UY0VY1\r
-#define PVR2D_YUV422_YVYU                              0x15UL // YUV 422 low-high byte order Y0VY1U\r
-#define PVR2D_YUV422_VYUY                              0x16UL // YUV 422 low-high byte order VY0UY1\r
-#define PVR2D_YUV420_2PLANE                            0x17UL // YUV420 2 Plane\r
-#define PVR2D_YUV420_3PLANE                            0x18UL // YUV420 3 Plane\r
-#define PVR2D_2101010ARGB                              0x19UL // 32 bit 2 10 10 10 \r
-#define PVR2D_888RSGSBS                                        0x1AUL\r
-#define PVR2D_16BPP_RAW                                        0x1BUL // 16 bit raw (no format conversion)\r
-#define PVR2D_32BPP_RAW                                        0x1CUL // 32 bit raw\r
-#define PVR2D_64BPP_RAW                                        0x1DUL // 64 bit raw\r
-#define PVR2D_128BPP_RAW                               0x1EUL // 128 bit raw\r
-\r
-#define        PVR2D_NO_OF_FORMATS                             0x1FUL\r
-\r
-/* Format modifier bit field (DstFormat and SrcFormat bits 16..23) */\r
-#define PVR2D_FORMAT_MASK                              0x0000FFFFUL    // PVR2D Format bits\r
-#define PVR2D_FORMAT_LAYOUT_MASK               0x000F0000UL    // Format layout (strided / twiddled / tiled)\r
-#define PVR2D_FORMAT_FLAGS_MASK                        0x0FF00000UL    // Surface Flags mask\r
-\r
-/* Layout */\r
-#define PVR2D_FORMAT_LAYOUT_SHIFT              16\r
-#define PVR2D_FORMAT_LAYOUT_STRIDED            0x00000000UL\r
-#define PVR2D_FORMAT_LAYOUT_TILED              0x00010000UL\r
-#define PVR2D_FORMAT_LAYOUT_TWIDDLED   0x00020000UL\r
-\r
-/*\r
-       PVR2D_SURFACE_PDUMP\r
-       This flag requests a surface pdump, to capture the pixel state after host writes.\r
-       Not needed if the surface state has resulted from previous SGX 2D/3D core writes.\r
-*/\r
-#define PVR2D_SURFACE_PDUMP                            0x00100000UL    // calls PVRSRVPDumpMem to capture the surface (pdump builds only) \r
-\r
-/*\r
-       Low level 3D format extension - for blts via the 3D core only.\r
-       If the top bit of the format field is set then PVR2D reads it as a PVRSRV_PIXEL_FORMAT.\r
-       The outcome is hardware dependant.\r
-       There is no guarantee that any specific PVRSRV format will be supported.\r
-*/\r
-#define PVR2D_FORMAT_PVRSRV                            0x80000000\r
-\r
-/* wrap surface type */\r
-typedef enum\r
-{\r
-       PVR2D_WRAPFLAG_NONCONTIGUOUS = 0,\r
-       PVR2D_WRAPFLAG_CONTIGUOUS = 1,\r
-\r
-}PVR2DWRAPFLAGS;\r
-\r
-#define        PVR2D_CONTEXT_FLAGS_PRIORITY_MASK                       0x00000003\r
-\r
-#define        PVR2D_CONTEXT_FLAGS_LOW_PRIORITY_CONTEXT        1\r
-#define        PVR2D_CONTEXT_FLAGS_NORMAL_PRIORITY_CONTEXT     0\r
-#define        PVR2D_CONTEXT_FLAGS_HIGH_PRIORITY_CONTEXT       2\r
-\r
-/* flags for control information of additional blits */\r
-typedef enum\r
-{\r
-       PVR2D_BLIT_DISABLE_ALL                                  = 0x00000000,   /* disable all additional controls */\r
-       PVR2D_BLIT_CK_ENABLE                                    = 0x00000001,   /* enable colour key */\r
-       PVR2D_BLIT_GLOBAL_ALPHA_ENABLE                  = 0x00000002,   /* enable standard global alpha */\r
-       PVR2D_BLIT_PERPIXEL_ALPHABLEND_ENABLE   = 0x00000004,   /* enable per-pixel alpha bleding */\r
-       PVR2D_BLIT_PAT_SURFACE_ENABLE                   = 0x00000008,   /* enable pattern surf (disable fill) */\r
-       PVR2D_BLIT_FULLY_SPECIFIED_ALPHA_ENABLE = 0x00000010,   /* enable fully specified alpha */\r
-       PVR2D_BLIT_ROT_90                                               = 0x00000020,   /* apply 90 degree rotation to the blt */\r
-       PVR2D_BLIT_ROT_180                                              = 0x00000040,   /* apply 180 degree rotation to the blt */\r
-       PVR2D_BLIT_ROT_270                                              = 0x00000080,   /* apply 270 degree rotation to the blt */\r
-       PVR2D_BLIT_COPYORDER_TL2BR                              = 0x00000100,   /* copy order overrides */\r
-       PVR2D_BLIT_COPYORDER_BR2TL                              = 0x00000200,\r
-       PVR2D_BLIT_COPYORDER_TR2BL                              = 0x00000400,\r
-       PVR2D_BLIT_COPYORDER_BL2TR                              = 0x00000800,\r
-       PVR2D_BLIT_COLKEY_SOURCE                                = 0x00001000,   /* Key colour is on the source surface */\r
-       PVR2D_BLIT_COLKEY_DEST                                  = 0x00002000,   /* Key colour is on the destination surface */\r
-       PVR2D_BLIT_COLKEY_MASKED                                = 0x00004000,   /* Mask enabled for colour key */\r
-       PVR2D_BLIT_COLKEY_OP_PASS                               = 0x00008000,   /* Colour key op = pass */\r
-       PVR2D_BLIT_COLKEY_OP_REJECT                             = 0x00010000,   /* Colour key op = reject */\r
-       PVR2D_BLIT_PATH_2DCORE                                  = 0x00100000,   /* Blt via dedicated 2D Core or PTLA */\r
-       PVR2D_BLIT_PATH_3DCORE                                  = 0x00200000,   /* Blt via 3D Core */\r
-       PVR2D_BLIT_PATH_SWBLT                                   = 0x00400000,   /* Blt via host software */\r
-       PVR2D_BLIT_NO_SRC_SYNC_INFO                             = 0x00800000,   /* Dont send a source sync info*/\r
-       PVR2D_BLIT_ISSUE_STATUS_UPDATES                 = 0x01000000,   /* Issue status updates */\r
-\r
-} PVR2DBLITFLAGS;\r
-\r
-/* standard alpha-blending functions, AlphaBlendingFunc field of PVR2DBLTINFO */\r
-typedef enum\r
-{\r
-       PVR2D_ALPHA_OP_SRC_DSTINV = 1,  /* source alpha : Cdst = Csrc*Asrc + Cdst*(1-Asrc) */\r
-       PVR2D_ALPHA_OP_SRCP_DSTINV = 2  /* premultiplied source alpha : Cdst = Csrc + Cdst*(1-Asrc) */\r
-} PVR2D_ALPHABLENDFUNC;\r
-\r
-/* blend ops for fully specified alpha (SGX 2D Core only) */\r
-typedef enum\r
-{\r
-       PVR2D_BLEND_OP_ZERO = 0,\r
-       PVR2D_BLEND_OP_ONE = 1,\r
-       PVR2D_BLEND_OP_SRC = 2,\r
-       PVR2D_BLEND_OP_DST = 3,\r
-       PVR2D_BLEND_OP_GLOBAL = 4,\r
-       PVR2D_BLEND_OP_SRC_PLUS_GLOBAL = 5,\r
-       PVR2D_BLEND_OP_DST_PLUS_GLOBAL = 6\r
-}PVR2D_BLEND_OP;\r
-\r
-/* SGX 2D Core Fully specified alpha blend :   pAlpha field of PVR2DBLTINFO structure          */\r
-/* a fully specified Alpha Blend operation is defined as                                                                       */\r
-/* DST (ALPHA) = (ALPHA_1 * SRC (ALPHA)) + (ALPHA_3 * DST (ALPHA))                                                     */\r
-/* DST (RGB)   = (ALPHA_2 * SRC (RGB)) + (ALPHA_4 * DST (RGB))                                                         */\r
-/* if the pre-multiplication stage is enabled then the equations become the following:         */\r
-/* PRE_MUL     = ((SRC(A)) * (Global Alpha Value))                                                                                     */\r
-/* DST (ALPHA) = (ALPHA_1 * SRC (ALPHA)) + (PRE_MUL * DST (ALPHA))                                                     */\r
-/* DST (RGB)   = (ALPHA_2 * SRC (RGB)) + (PRE_MUL * DST (RGB))                                                         */\r
-/* if the transparent source alpha stage is enabled then a source alpha of zero forces the     */\r
-/* source to be transparent for that pixel regardless of the blend equation being used.                */\r
-typedef struct _PVR2D_ALPHABLT\r
-{\r
-       PVR2D_BLEND_OP  eAlpha1;\r
-       PVR2D_BOOL              bAlpha1Invert;\r
-       PVR2D_BLEND_OP  eAlpha2;\r
-       PVR2D_BOOL              bAlpha2Invert;\r
-       PVR2D_BLEND_OP  eAlpha3;\r
-       PVR2D_BOOL              bAlpha3Invert;\r
-       PVR2D_BLEND_OP  eAlpha4;\r
-       PVR2D_BOOL              bAlpha4Invert;\r
-       PVR2D_BOOL              bPremulAlpha;                   /* enable pre-multiplication stage */\r
-       PVR2D_BOOL              bTransAlpha;                    /* enable transparent source alpha stage */\r
-       PVR2D_BOOL              bUpdateAlphaLookup;             /* enable and update the 1555-Lookup alpha table */\r
-       PVR2D_UCHAR             uAlphaLookup0;                  /* 8 bit alpha when A=0 in a 1555-Lookup surface */\r
-       PVR2D_UCHAR             uAlphaLookup1;                  /* 8 bit alpha when A=1 in a 1555-Lookup surface */\r
-       PVR2D_UCHAR             uGlobalRGB;                             /* Global Alpha Value for RGB, 0=transparent 255=opaque */\r
-       PVR2D_UCHAR             uGlobalA;                               /* Global Alpha Value for Alpha */\r
-\r
-} PVR2D_ALPHABLT, *PPVR2D_ALPHABLT;\r
-\r
-\r
-/* surface memory info structure */\r
-typedef struct _PVR2DMEMINFO\r
-{\r
-       PVR2D_VOID                      *pBase;\r
-       PVR2D_ULONG                     ui32MemSize;\r
-       PVR2D_ULONG                     ui32DevAddr;\r
-       PVR2D_ULONG                     ulFlags;\r
-       PVR2D_VOID                      *hPrivateData;\r
-       PVR2D_VOID                      *hPrivateMapData;\r
-\r
-}PVR2DMEMINFO, *PPVR2DMEMINFO;\r
-\r
-\r
-#define PVR2D_MAX_DEVICE_NAME 20\r
-\r
-typedef struct _PVR2DDEVICEINFO\r
-{\r
-       PVR2D_ULONG             ulDevID;\r
-       PVR2D_CHAR              szDeviceName[PVR2D_MAX_DEVICE_NAME];\r
-}PVR2DDEVICEINFO;\r
-\r
-\r
-typedef struct _PVR2DISPLAYINFO\r
-{\r
-       PVR2D_ULONG     ulMaxFlipChains;\r
-       PVR2D_ULONG     ulMaxBuffersInChain;\r
-       PVR2DFORMAT     eFormat;\r
-       PVR2D_ULONG     ulWidth;\r
-       PVR2D_ULONG     ulHeight;\r
-       PVR2D_LONG      lStride;\r
-       PVR2D_ULONG     ulMinFlipInterval;\r
-       PVR2D_ULONG     ulMaxFlipInterval;\r
-\r
-}PVR2DDISPLAYINFO;\r
-\r
-\r
-typedef struct _PVR2MISCDISPLAYINFO\r
-{\r
-       PVR2D_ULONG ulPhysicalWidthmm;\r
-       PVR2D_ULONG ulPhysicalHeightmm;\r
-       PVR2D_ULONG ulUnused[10];\r
-\r
-}PVR2DMISCDISPLAYINFO;\r
-\r
-\r
-typedef struct _PVR2DBLTINFO\r
-{\r
-       PVR2D_ULONG             CopyCode;                       /* rop code  */\r
-       PVR2D_ULONG             Colour;                         /* fill colour */\r
-       PVR2D_ULONG             ColourKey;                      /* colour key argb8888 (see CKEY_ defs below) */\r
-       PVR2D_UCHAR             GlobalAlphaValue;       /* global alpha blending */\r
-       PVR2D_UCHAR             AlphaBlendingFunc;      /* per-pixel alpha-blending function */\r
-\r
-       PVR2DBLITFLAGS  BlitFlags;                      /* additional blit control information */\r
-\r
-       PVR2DMEMINFO    *pDstMemInfo;           /* destination memory */\r
-       PVR2D_ULONG             DstOffset;                      /* byte offset from start of allocation to destination surface pixel 0,0 */\r
-       PVR2D_LONG              DstStride;                      /* signed stride, the number of bytes from pixel 0,0 to 0,1 */\r
-       PVR2D_LONG              DstX, DstY;                     /* pixel offset from start of dest surface to start of blt rectangle */\r
-       PVR2D_LONG              DSizeX,DSizeY;          /* blt size */\r
-       PVR2DFORMAT             DstFormat;                      /* dest format */\r
-       PVR2D_ULONG             DstSurfWidth;           /* size of dest surface in pixels */\r
-       PVR2D_ULONG             DstSurfHeight;          /* size of dest surface in pixels */\r
-\r
-       PVR2DMEMINFO    *pSrcMemInfo;           /* source mem, (source fields are also used for patterns) */\r
-       PVR2D_ULONG             SrcOffset;                      /* byte offset from start of allocation to src/pat surface pixel 0,0 */\r
-       PVR2D_LONG              SrcStride;                      /* signed stride, the number of bytes from pixel 0,0 to 0,1 */\r
-       PVR2D_LONG              SrcX, SrcY;                     /* pixel offset from start of surface to start of source rectangle */\r
-                                                                               /* for patterns this is the start offset within the pattern */\r
-       PVR2D_LONG              SizeX,SizeY;            /* source rectangle size or pattern size in pixels */\r
-       PVR2DFORMAT             SrcFormat;                      /* source/pattern format */\r
-       PVR2DMEMINFO    *pPalMemInfo;           /* source/pattern palette memory containing argb8888 colour table */\r
-       PVR2D_ULONG             PalOffset;                      /* byte offset from start of allocation to start of palette */\r
-       PVR2D_ULONG             SrcSurfWidth;           /* size of source surface in pixels */\r
-       PVR2D_ULONG             SrcSurfHeight;          /* size of source surface in pixels */\r
-\r
-       PVR2DMEMINFO    *pMaskMemInfo;          /* mask memory, 1bpp format implied */\r
-       PVR2D_ULONG             MaskOffset;                     /* byte offset from start of allocation to mask surface pixel 0,0 */\r
-       PVR2D_LONG              MaskStride;                     /* signed stride, the number of bytes from pixel 0,0 to 0,1 */\r
-       PVR2D_LONG              MaskX, MaskY;           /* mask rect top left (mask size = blt size) */\r
-       PVR2D_ULONG             MaskSurfWidth;          /* size of mask surface in pixels */\r
-       PVR2D_ULONG             MaskSurfHeight;         /* size of mask surface in pixels */\r
-       \r
-       PPVR2D_ALPHABLT pAlpha;                         /* fully specified alpha blend (2DCore only) */\r
-       \r
-       PVR2D_ULONG             uSrcChromaPlane1;       /* mem offset from start of source alloc to chroma plane 1 */\r
-       PVR2D_ULONG             uSrcChromaPlane2;       /* mem offset from start of source alloc to chroma plane 2 */\r
-       PVR2D_ULONG             uDstChromaPlane1;       /* mem offset from start of dest alloc to chroma plane 1 */\r
-       PVR2D_ULONG             uDstChromaPlane2;       /* mem offset from start of dest alloc to chroma plane 2 */\r
-       \r
-       PVR2D_ULONG             ColourKeyMask;          /* 32 bit colour key mask, only valid when PVR2D_BLIT_COLKEY_MASKED is set */\r
-\r
-}PVR2DBLTINFO, *PPVR2DBLTINFO;\r
-\r
-typedef struct _PVR2DRECT\r
-{\r
-       PVR2D_LONG left, top;\r
-       PVR2D_LONG right, bottom;\r
-} PVR2DRECT;\r
-\r
-typedef struct\r
-{\r
-       PVR2DMEMINFO    *pSurfMemInfo;          /* surface memory */\r
-       PVR2D_ULONG             SurfOffset;                     /* byte offset from start of allocation to destination surface pixel 0,0 */\r
-       PVR2D_LONG              Stride;                         /* signed stride */\r
-       PVR2DFORMAT             Format;                         /* format */\r
-       PVR2D_ULONG             SurfWidth;                      /* surface width in pixels */\r
-       PVR2D_ULONG             SurfHeight;                     /* surface height in pixels */\r
-\r
-} PVR2D_SURFACE, *PPVR2D_SURFACE;\r
-\r
-typedef struct\r
-{\r
-       PVR2D_ULONG             uChromaPlane1;          /* YUV multiplane - byte offset from start of alloc to chroma plane 1 */\r
-       PVR2D_ULONG             uChromaPlane2;          /* YUV multiplane - byte offset from start of alloc to chroma plane 2 */\r
-       PVR2D_LONG              Reserved[2];            /* Reserved, must be zero */\r
-\r
-} PVR2D_SURFACE_EXT, *PPVR2D_SURFACE_EXT;\r
-\r
-typedef struct\r
-{\r
-       PVR2D_ULONG             *pUseCode;                                      /* USSE code */\r
-       PVR2D_ULONG             UseCodeSize;                            /* usse code size in bytes */\r
-\r
-} PVR2D_USECODE, *PPVR2D_USECODE;\r
-\r
-typedef struct\r
-{\r
-       PVR2D_SURFACE                   sDst;                           /* destination surface */\r
-       PVR2D_SURFACE                   sSrc;                           /* source surface */\r
-       PVR2DRECT                               rcDest;                         /* destination rectangle */\r
-       PVR2DRECT                               rcSource;                       /* source rectangle */\r
-       PVR2D_HANDLE                    hUseCode;                       /* custom USE code (NULL implies source copy) */\r
-       PVR2D_ULONG                             UseParams[2];           /* per-blt params for use code */\r
-\r
-} PVR2D_3DBLT, *PPVR2D_3DBLT;\r
-\r
-typedef struct\r
-{\r
-       PVR2D_SURFACE                   sDst;                                           /* destination surface */\r
-       PVR2DRECT                               rcDest;                                         /* destination rectangle; scaling is supported */\r
-       PVR2D_SURFACE                   sSrc;                                           /* source surface */\r
-       PVR2DRECT                               rcSource;                                       /* source rectangle; scaling is supported */\r
-       PPVR2D_SURFACE                  pSrc2;                                          /* optional second source surface (NULL if not required) */\r
-       PVR2DRECT*                              prcSource2;                                     /* optional pSrc2 rectangle */\r
-       PVR2D_HANDLE                    hUseCode;                                       /* custom USSE shader code (NULL implies default source copy) */\r
-       PVR2D_ULONG                             UseParams[2];                           /* per-blt params for usse code */\r
-       PVR2D_ULONG                             uiNumTemporaryRegisters;        /* no. of temporary registers used in custom shader code */\r
-       PVR2D_BOOL                              bDisableDestInput;                      /* set true if the destination is output only */\r
-       PPVR2D_SURFACE_EXT              pDstExt;                                        /* Extended format params for dest */\r
-       PPVR2D_SURFACE_EXT              pSrcExt[2];                                     /* Extended format params for source 1 and 2 */\r
-       PVR2D_LONG                              Reserved[4];                            /* Reserved, must be zero */\r
-\r
-} PVR2D_3DBLT_EXT, *PPVR2D_3DBLT_EXT;\r
-\r
-\r
-#define MAKE_COPY_BLIT(src,soff,dest,doff,sx,sy,dx,dy,sz)\r
-\r
-typedef void* PVR2DCONTEXTHANDLE;\r
-typedef void* PVR2DFLIPCHAINHANDLE;\r
-\r
-\r
-// CopyCode field of PVR2DBLTINFO structure:\r
-// the CopyCode field of the PVR2DBLTINFO structure should contain a rop3 or rop4 code.\r
-// a rop3 is an 8 bit code that describes a blt with three inputs : source dest and pattern\r
-// rop4 is a 16 bit code that describes a blt with four inputs : source dest pattern and mask\r
-// common rop3 codes are defined below\r
-// a colour fill blt is processed in the pattern channel as a constant colour with a rop code of 0xF0\r
-// PVR2D_BLIT_PAT_SURFACE_ENABLE defines whether the pattern channel is a surface or a fill colour.\r
-// a rop4 is defined by two rop3 codes, and the 1 bit-per-pixel mask surface defines which is used.\r
-// a common rop4 is 0xAAF0 which is the mask copy blt used for text glyphs.\r
-// CopyCode is taken to be a rop4 when pMaskMemInfo is non zero, otherwise it is assumed to be a rop3\r
-// use the PVR2DMASKROP4 macro below to construct a rop4 from two rop3's\r
-// rop3a is the rop used when mask pixel = 1, and rop3b when mask = 0\r
-#define PVR2DROP4(rop3b, rop3a)                        ((rop3b<<8)|rop3a)\r
-\r
-/* common rop codes */\r
-#define PVR2DROPclear                          0x00       /* 0 (whiteness) */\r
-#define PVR2DROPset                                    0xFF       /* 1 (blackness) */\r
-#define PVR2DROPnoop                           0xAA       /* dst (used for masked blts) */\r
-\r
-/* source and  dest rop codes */\r
-#define PVR2DROPand                                    0x88       /* src AND dst */\r
-#define PVR2DROPandReverse                     0x44       /* src AND NOT dst */\r
-#define PVR2DROPcopy                           0xCC       /* src (used for source copy and alpha blts) */\r
-#define PVR2DROPandInverted                    0x22       /* NOT src AND dst */\r
-#define PVR2DROPxor                                    0x66       /* src XOR dst */\r
-#define PVR2DROPor                                     0xEE       /* src OR dst */\r
-#define PVR2DROPnor                                    0x11       /* NOT src AND NOT dst */\r
-#define PVR2DROPequiv                          0x99       /* NOT src XOR dst */\r
-#define PVR2DROPinvert                         0x55       /* NOT dst */\r
-#define PVR2DROPorReverse                      0xDD       /* src OR NOT dst */\r
-#define PVR2DROPcopyInverted           0x33       /* NOT src */\r
-#define PVR2DROPorInverted                     0xBB       /* NOT src OR dst */\r
-#define PVR2DROPnand                           0x77       /* NOT src OR NOT dst */\r
-\r
-/* pattern rop codes */\r
-#define PVR2DPATROPand                         0xA0       /* pat AND dst */\r
-#define PVR2DPATROPandReverse          0x50       /* pat AND NOT dst */\r
-#define PVR2DPATROPcopy                                0xF0       /* pat (used for solid color fills and pattern blts) */\r
-#define PVR2DPATROPandInverted         0x0A       /* NOT pat AND dst */\r
-#define PVR2DPATROPxor                         0x5A       /* pat XOR dst */\r
-#define PVR2DPATROPor                          0xFA       /* pat OR dst */\r
-#define PVR2DPATROPnor                         0x05       /* NOT pat AND NOT dst */\r
-#define PVR2DPATROPequiv                       0xA5       /* NOT pat XOR dst */\r
-#define PVR2DPATROPinvert                      0x55       /* NOT dst */\r
-#define PVR2DPATROPorReverse           0xF5       /* pat OR NOT dst */\r
-#define PVR2DPATROPcopyInverted                0x0F       /* NOT pat */\r
-#define PVR2DPATROPorInverted          0xAF       /* NOT pat OR dst */\r
-#define PVR2DPATROPnand                                0x5F       /* NOT pat OR NOT dst */\r
-\r
-/* common rop4 codes */\r
-#define PVR2DROP4MaskedCopy              PVR2DROP4(PVR2DROPnoop,PVR2DROPcopy)          /* masked source copy blt (used for rounded window corners etc) */\r
-#define PVR2DROP4MaskedFill              PVR2DROP4(PVR2DROPnoop,PVR2DPATROPcopy)       /* masked colour fill blt (used for text) */\r
-\r
-/* Legacy support */\r
-#define PVR2DROP3_PATMASK                      PVR2DPATROPcopy\r
-#define PVR2DROP3_SRCMASK                      PVR2DROPcopy\r
-\r
-/* pixmap memory alignment */\r
-#define PVR2D_ALIGNMENT_4                      4                       /* DWORD alignment */\r
-#define PVR2D_ALIGNMENT_ANY                    0                       /* no alignment    */\r
-#define PVR2D_ALIGNMENT_PALETTE                16                      /* 16 byte alignment is required for palettes */\r
-\r
-/* Heap number for PVR2DGetFrameBuffer */\r
-#define PVR2D_FB_PRIMARY_SURFACE 0\r
-\r
-#define PVR2D_PRESENT_PROPERTY_SRCSTRIDE       (1UL << 0)\r
-#define PVR2D_PRESENT_PROPERTY_DSTSIZE         (1UL << 1)\r
-#define PVR2D_PRESENT_PROPERTY_DSTPOS          (1UL << 2)\r
-#define PVR2D_PRESENT_PROPERTY_CLIPRECTS       (1UL << 3)\r
-#define PVR2D_PRESENT_PROPERTY_INTERVAL                (1UL << 4)\r
-\r
-#define PVR2D_CREATE_FLIPCHAIN_SHARED          (1UL << 0)\r
-#define PVR2D_CREATE_FLIPCHAIN_QUERY           (1UL << 1)\r
-#define PVR2D_CREATE_FLIPCHAIN_OEMOVERLAY   (1UL << 2)\r
-#define PVR2D_CREATE_FLIPCHAIN_AS_BLITCHAIN (1UL << 3)\r
-\r
-/* Colour-key colour must be translated into argb8888 format */\r
-#define CKEY_8888(P)           (P)\r
-#define CKEY_4444(P)           (((P&0xF000UL)<<16) | ((P&0x0F00UL)<<12) | ((P&0x00F0UL)<<8) | ((P&0x000FUL)<<4))\r
-#define CKEY_1555(P)           (((P&0x8000UL)<<16) | ((P&0x7C00UL)<<9)  | ((P&0x3E0UL)<<6)  | ((P&0x1FUL)<<3))\r
-#define CKEY_565(P)                    (((P&0xF800UL)<<8)  | ((P&0x7E0UL)<<5)   | ((P&0x1FUL)<<3))\r
-#define CKEY_MASK_8888         0x00FFFFFFUL\r
-#define CKEY_MASK_4444         0x00F0F0F0UL\r
-#define CKEY_MASK_1555         0x00F8F8F8UL    /* Alpha is not normally included in the key test */\r
-#define CKEY_MASK_565          0x00F8FCF8UL\r
-\r
-/* Fill colours must be translated into argb8888 format */\r
-#define CFILL_4444(P)          (((P&0xF000UL)<<16) | ((P&0x0F00UL)<<12) | ((P&0x00F0UL)<<8) | ((P&0x000FUL)<<4))\r
-#define CFILL_1555(P)          (((P&0x8000UL)<<16) | ((P&0x7C00UL)<<9)  | ((P&0x3E0UL)<<6)  | ((P&0x1FUL)<<3))\r
-#define CFILL_565(P)           (((P&0xF800UL)<<8)  | ((P&0x7E0UL)<<5)   | ((P&0x1FUL)<<3))\r
-\r
-/* PVR2DCreateDeviceContext flags */\r
-#define PVR2D_XSERVER_PROC                     0x00000001UL            /*!< Set for the Xserver connection */\r
-\r
-/* PVR2DMemAlloc flags */\r
-#define PVR2D_MEM_UNCACHED                     0x00000000UL    /* Default */\r
-#define PVR2D_MEM_CACHED                       0x00000001UL    /* Caller must flush and sync when necessary */\r
-#define PVR2D_MEM_WRITECOMBINE         0x00000002UL\r
-\r
-/* Functions that the library exports */\r
-\r
-PVR2D_IMPORT\r
-int PVR2DEnumerateDevices(PVR2DDEVICEINFO *pDevInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DCreateDeviceContext(PVR2D_ULONG ulDevID,\r
-                                                                       PVR2DCONTEXTHANDLE* phContext,\r
-                                                                       PVR2D_ULONG ulFlags);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DDestroyDeviceContext(PVR2DCONTEXTHANDLE hContext);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DGetDeviceInfo(PVR2DCONTEXTHANDLE hContext,\r
-                                                         PVR2DDISPLAYINFO *pDisplayInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DGetMiscDisplayInfo(PVR2DCONTEXTHANDLE hContext,\r
-                                                         PVR2DMISCDISPLAYINFO *pMiscDisplayInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DGetScreenMode(PVR2DCONTEXTHANDLE hContext,\r
-                                                         PVR2DFORMAT *pFormat,\r
-                                                         PVR2D_LONG *plWidth,\r
-                                                         PVR2D_LONG *plHeight,\r
-                                                         PVR2D_LONG *plStride,\r
-                                                         PVR2D_INT *piRefreshRate);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DGetFrameBuffer(PVR2DCONTEXTHANDLE hContext,\r
-                                                          PVR2D_INT nHeap,\r
-                                                          PVR2DMEMINFO **ppsMemInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DMemAlloc(PVR2DCONTEXTHANDLE hContext,\r
-                                                PVR2D_ULONG ulBytes,\r
-                                                PVR2D_ULONG ulAlign,\r
-                                                PVR2D_ULONG ulFlags,\r
-                                                PVR2DMEMINFO **ppsMemInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DMemExport(PVR2DCONTEXTHANDLE hContext,\r
-                                                PVR2D_ULONG ulFlags,\r
-                                                PVR2DMEMINFO *psMemInfo,\r
-                                                PVR2D_HANDLE *phMemHandle);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DMemWrap(PVR2DCONTEXTHANDLE hContext,\r
-                                               PVR2D_VOID *pMem,\r
-                                               PVR2D_ULONG ulFlags,\r
-                                               PVR2D_ULONG ulBytes,\r
-                                               PVR2D_ULONG alPageAddress[],\r
-                                               PVR2DMEMINFO **ppsMemInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DMemMap(PVR2DCONTEXTHANDLE hContext,\r
-                                               PVR2D_ULONG ulFlags,\r
-                                               PVR2D_HANDLE hMemHandle,\r
-                                               PVR2DMEMINFO **ppsDstMem);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DMemFree(PVR2DCONTEXTHANDLE hContext,\r
-                                               PVR2DMEMINFO *psMemInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DBlt(PVR2DCONTEXTHANDLE hContext,\r
-                                       PVR2DBLTINFO *pBltInfo);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DBltClipped(PVR2DCONTEXTHANDLE hContext,\r
-                                                  PVR2DBLTINFO *pBltInfo,\r
-                                                  PVR2D_ULONG ulNumClipRects,\r
-                                                  PVR2DRECT *pClipRects);\r
-\r
-PVR2D_EXPORT\r
-PVR2DERROR PVR2DSet1555Alpha (PVR2DCONTEXTHANDLE hContext,\r
-                                                         PVR2D_UCHAR Alpha0, PVR2D_UCHAR Alpha1);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DQueryBlitsComplete(PVR2DCONTEXTHANDLE hContext,\r
-                                                                  const PVR2DMEMINFO *pMemInfo,\r
-                                                                  PVR2D_UINT uiWaitForComplete);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DSetPresentBltProperties(PVR2DCONTEXTHANDLE hContext,\r
-                                                                               PVR2D_ULONG ulPropertyMask,\r
-                                                                               PVR2D_LONG lSrcStride,\r
-                                                                               PVR2D_ULONG ulDstWidth,\r
-                                                                               PVR2D_ULONG ulDstHeight,\r
-                                                                               PVR2D_LONG lDstXPos,\r
-                                                                               PVR2D_LONG lDstYPos,\r
-                                                                               PVR2D_ULONG ulNumClipRects,\r
-                                                                               PVR2DRECT *pClipRects,\r
-                                                                               PVR2D_ULONG ulSwapInterval);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DPresentBlt(PVR2DCONTEXTHANDLE hContext,\r
-                                                  PVR2DMEMINFO *pMemInfo,\r
-                                                  PVR2D_LONG lRenderID);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DCreateFlipChain(PVR2DCONTEXTHANDLE hContext,\r
-                                                               PVR2D_ULONG ulFlags,\r
-                                                               PVR2D_ULONG ulNumBuffers,\r
-                                                               PVR2D_ULONG ulWidth,\r
-                                                               PVR2D_ULONG ulHeight,\r
-                                                               PVR2DFORMAT eFormat,\r
-                                                               PVR2D_LONG *plStride,\r
-                                                               PVR2D_ULONG *pulFlipChainID,\r
-                                                               PVR2DFLIPCHAINHANDLE *phFlipChain);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DDestroyFlipChain(PVR2DCONTEXTHANDLE hContext,\r
-                                                                PVR2DFLIPCHAINHANDLE hFlipChain);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DGetFlipChainBuffers(PVR2DCONTEXTHANDLE hContext,\r
-                                                                       PVR2DFLIPCHAINHANDLE hFlipChain,\r
-                                                                       PVR2D_ULONG *pulNumBuffers,\r
-                                                                       PVR2DMEMINFO *psMemInfo[]);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DSetPresentFlipProperties(PVR2DCONTEXTHANDLE hContext,\r
-                                                                                PVR2DFLIPCHAINHANDLE hFlipChain,\r
-                                                                                PVR2D_ULONG ulPropertyMask,\r
-                                                                                PVR2D_LONG lDstXPos,\r
-                                                                                PVR2D_LONG lDstYPos,\r
-                                                                                PVR2D_ULONG ulNumClipRects, \r
-                                                                                PVR2DRECT *pClipRects,\r
-                                                                                PVR2D_ULONG ulSwapInterval);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DPresentFlip(PVR2DCONTEXTHANDLE hContext,\r
-                                                       PVR2DFLIPCHAINHANDLE hFlipChain,\r
-                                                       PVR2DMEMINFO *psMemInfo,\r
-                                                       PVR2D_LONG lRenderID);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DGetAPIRev(PVR2D_LONG *lRevMajor, PVR2D_LONG *lRevMinor);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DLoadUseCode (const PVR2DCONTEXTHANDLE hContext, const PVR2D_UCHAR      *pUseCode,\r
-                                                                       const PVR2D_ULONG UseCodeSize, PVR2D_HANDLE *pUseCodeHandle);\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DFreeUseCode (const PVR2DCONTEXTHANDLE hContext, const PVR2D_HANDLE hUseCodeHandle);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DBlt3D (const PVR2DCONTEXTHANDLE hContext, const PPVR2D_3DBLT pBlt3D);\r
-\r
-PVR2D_IMPORT\r
-PVR2DERROR PVR2DBlt3DExt (const PVR2DCONTEXTHANDLE hContext, const PPVR2D_3DBLT_EXT pBlt3D);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif \r
-\r
-#endif /* _PVR2D_H_ */\r
-\r
-/******************************************************************************\r
- End of file (pvr2d.h)\r
-******************************************************************************/\r
diff --git a/sys/pvr2d/pvr_includes/services.h b/sys/pvr2d/pvr_includes/services.h
deleted file mode 100644 (file)
index 93263a8..0000000
+++ /dev/null
@@ -1,1211 +0,0 @@
-/**********************************************************************
- *
- * Copyright (C) Imagination Technologies Ltd. All rights reserved.
- * 
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- * 
- * This program is distributed in the hope it will be useful but, except 
- * as otherwise stated in writing, without any warranty; without even the 
- * implied warranty of merchantability or fitness for a particular purpose. 
- * See the 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.,
- * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- * 
- * The full GNU General Public License is included in this distribution in
- * the file called "COPYING".
- *
- * Contact Information:
- * Imagination Technologies Ltd. <gpl-support@imgtec.com>
- * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
- *
- ******************************************************************************/
-
-#ifndef __SERVICES_H__
-#define __SERVICES_H__
-
-#if defined (__cplusplus)
-extern "C" {
-#endif
-
-#include "img_defs.h"
-#include "servicesext.h"
-
-#define PVRSRV_4K_PAGE_SIZE            4096UL
-
-#define PVRSRV_MAX_CMD_SIZE            1024
-
-#define PVRSRV_MAX_DEVICES             16      
-
-#define EVENTOBJNAME_MAXLENGTH (50)
-
-#define PVRSRV_MEM_READ                                                (1U<<0)
-#define PVRSRV_MEM_WRITE                                       (1U<<1)
-#define PVRSRV_MEM_CACHE_CONSISTENT                    (1U<<2)
-#define PVRSRV_MEM_NO_SYNCOBJ                          (1U<<3)
-#define PVRSRV_MEM_INTERLEAVED                         (1U<<4)
-#define PVRSRV_MEM_DUMMY                                       (1U<<5)
-#define PVRSRV_MEM_EDM_PROTECT                         (1U<<6)
-#define PVRSRV_MEM_ZERO                                                (1U<<7)
-#define PVRSRV_MEM_USER_SUPPLIED_DEVVADDR      (1U<<8)
-#define PVRSRV_MEM_RAM_BACKED_ALLOCATION       (1U<<9)
-#define PVRSRV_MEM_NO_RESMAN                           (1U<<10)
-#define PVRSRV_MEM_EXPORTED                                    (1U<<11)
-
-
-#define PVRSRV_HAP_CACHED                                      (1U<<12)
-#define PVRSRV_HAP_UNCACHED                                    (1U<<13)
-#define PVRSRV_HAP_SMART                                       (1U<<20)  /* XXX could we use CACHED|UNCACHED? */
-#define PVRSRV_HAP_WRITECOMBINE                                (1U<<14)
-#define PVRSRV_HAP_CACHETYPE_MASK                      (PVRSRV_HAP_CACHED|PVRSRV_HAP_UNCACHED|PVRSRV_HAP_SMART|PVRSRV_HAP_WRITECOMBINE)
-#define PVRSRV_HAP_KERNEL_ONLY                         (1U<<15)
-#define PVRSRV_HAP_SINGLE_PROCESS                      (1U<<16)
-#define PVRSRV_HAP_MULTI_PROCESS                       (1U<<17)
-#define PVRSRV_HAP_FROM_EXISTING_PROCESS       (1U<<18)
-#define PVRSRV_HAP_NO_CPU_VIRTUAL                      (1U<<19)
-#define PVRSRV_HAP_GPU_PAGEABLE                                (1U<<21)
-#define PVRSRV_HAP_MAPTYPE_MASK                                (PVRSRV_HAP_KERNEL_ONLY \
-                                            |PVRSRV_HAP_SINGLE_PROCESS \
-                                            |PVRSRV_HAP_MULTI_PROCESS \
-                                            |PVRSRV_HAP_FROM_EXISTING_PROCESS \
-                                            |PVRSRV_HAP_NO_CPU_VIRTUAL\
-                                            |PVRSRV_HAP_GPU_PAGEABLE)
-
-#define PVRSRV_MEM_CACHED                                      PVRSRV_HAP_CACHED
-#define PVRSRV_MEM_UNCACHED                                    PVRSRV_HAP_UNCACHED
-#define PVRSRV_MEM_SMART                                       PVRSRV_HAP_SMART
-#define PVRSRV_MEM_WRITECOMBINE                                PVRSRV_HAP_WRITECOMBINE
-
-#define PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT    (24)
-
-#define PVRSRV_MAP_NOUSERVIRTUAL            (1UL<<27)
-#define PVRSRV_MEM_XPROC                                       (1U<<28)
-
-#define PVRSRV_NO_CONTEXT_LOSS                                 0               
-#define PVRSRV_SEVERE_LOSS_OF_CONTEXT                  1               
-#define PVRSRV_PRE_STATE_CHANGE_MASK                   0x80    
-
-
-#define PVRSRV_DEFAULT_DEV_COOKIE                      (1)      
-
-
-#define PVRSRV_MISC_INFO_TIMER_PRESENT                         (1U<<0)
-#define PVRSRV_MISC_INFO_CLOCKGATE_PRESENT                     (1U<<1)
-#define PVRSRV_MISC_INFO_MEMSTATS_PRESENT                      (1U<<2)
-#define PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT     (1U<<3)
-#define PVRSRV_MISC_INFO_DDKVERSION_PRESENT                    (1U<<4)
-#define PVRSRV_MISC_INFO_CPUCACHEOP_PRESENT                    (1U<<5)
-#define PVRSRV_MISC_INFO_FREEMEM_PRESENT                       (1U<<6)
-
-#define PVRSRV_MISC_INFO_RESET_PRESENT                         (1U<<31)
-
-#define PVRSRV_PDUMP_MAX_FILENAME_SIZE                 20
-#define PVRSRV_PDUMP_MAX_COMMENT_SIZE                  200
-
-
-#define PVRSRV_CHANGEDEVMEM_ATTRIBS_CACHECOHERENT              0x00000001
-
-#define PVRSRV_MAPEXTMEMORY_FLAGS_ALTERNATEVA                  0x00000001
-#define PVRSRV_MAPEXTMEMORY_FLAGS_PHYSCONTIG                   0x00000002
-
-#define PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC                      0x00000001
-#define PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC                      0x00000002
-
-#define SRV_FLAGS_PERSIST              0x1
-#define SRV_FLAGS_PDUMP_ACTIVE 0x2
-
-#define PVRSRV_PDUMP_FLAGS_CONTINUOUS          0x1
-
-#define PVR_FULL_CACHE_OP_THRESHOLD    (0x7D000)
-
-typedef enum _PVRSRV_DEVICE_TYPE_
-{
-       PVRSRV_DEVICE_TYPE_UNKNOWN                      = 0 ,
-       PVRSRV_DEVICE_TYPE_MBX1                         = 1 ,
-       PVRSRV_DEVICE_TYPE_MBX1_LITE            = 2 ,
-
-       PVRSRV_DEVICE_TYPE_M24VA                        = 3,
-       PVRSRV_DEVICE_TYPE_MVDA2                        = 4,
-       PVRSRV_DEVICE_TYPE_MVED1                        = 5,
-       PVRSRV_DEVICE_TYPE_MSVDX                        = 6,
-
-       PVRSRV_DEVICE_TYPE_SGX                          = 7,
-
-       PVRSRV_DEVICE_TYPE_VGX                          = 8,
-
-       
-       PVRSRV_DEVICE_TYPE_EXT                          = 9,
-
-    PVRSRV_DEVICE_TYPE_LAST             = 9,
-
-       PVRSRV_DEVICE_TYPE_FORCE_I32            = 0x7fffffff
-
-} PVRSRV_DEVICE_TYPE;
-
-#define HEAP_ID( _dev_ , _dev_heap_idx_ )      (  ((_dev_)<<24) | ((_dev_heap_idx_)&((1<<24)-1))  )
-#define HEAP_IDX( _heap_id_ )                          ( (_heap_id_)&((1<<24) - 1 ) )
-#define HEAP_DEV( _heap_id_ )                          ( (_heap_id_)>>24 )
-
-#define PVRSRV_UNDEFINED_HEAP_ID                       (~0LU)
-
-typedef enum
-{
-       IMG_EGL                         = 0x00000001,
-       IMG_OPENGLES1           = 0x00000002,
-       IMG_OPENGLES2           = 0x00000003,
-       IMG_D3DM                        = 0x00000004,
-       IMG_SRV_UM                      = 0x00000005,
-       IMG_OPENVG                      = 0x00000006,
-       IMG_SRVCLIENT           = 0x00000007,
-       IMG_VISTAKMD            = 0x00000008,
-       IMG_VISTA3DNODE         = 0x00000009,
-       IMG_VISTAMVIDEONODE     = 0x0000000A,
-       IMG_VISTAVPBNODE        = 0x0000000B,
-       IMG_OPENGL                      = 0x0000000C,
-       IMG_D3D                         = 0x0000000D,
-#if defined(SUPPORT_GRAPHICS_HAL) || defined(SUPPORT_COMPOSER_HAL)
-       IMG_ANDROID_HAL         = 0x0000000E,
-#endif
-#if defined(SUPPORT_OPENCL)
-       IMG_OPENCL                      = 0x0000000F,
-#endif
-
-} IMG_MODULE_ID;
-
-
-#define APPHINT_MAX_STRING_SIZE        256
-
-typedef enum
-{
-       IMG_STRING_TYPE         = 1,
-       IMG_FLOAT_TYPE          ,
-       IMG_UINT_TYPE           ,
-       IMG_INT_TYPE            ,
-       IMG_FLAG_TYPE
-}IMG_DATA_TYPE;
-
-
-typedef struct _PVRSRV_DEV_DATA_ *PPVRSRV_DEV_DATA;
-
-typedef struct _PVRSRV_DEVICE_IDENTIFIER_
-{
-       PVRSRV_DEVICE_TYPE              eDeviceType;            
-       PVRSRV_DEVICE_CLASS             eDeviceClass;           
-       IMG_UINT32                              ui32DeviceIndex;        
-       IMG_CHAR                                *pszPDumpDevName;       
-       IMG_CHAR                                *pszPDumpRegName;       
-
-} PVRSRV_DEVICE_IDENTIFIER;
-
-
-typedef struct _PVRSRV_CLIENT_DEV_DATA_
-{
-       IMG_UINT32              ui32NumDevices;                         
-       PVRSRV_DEVICE_IDENTIFIER asDevID[PVRSRV_MAX_DEVICES];           
-       PVRSRV_ERROR    (*apfnDevConnect[PVRSRV_MAX_DEVICES])(PPVRSRV_DEV_DATA);        
-       PVRSRV_ERROR    (*apfnDumpTrace[PVRSRV_MAX_DEVICES])(PPVRSRV_DEV_DATA);         
-
-} PVRSRV_CLIENT_DEV_DATA;
-
-
-typedef struct _PVRSRV_CONNECTION_
-{
-       IMG_HANDLE hServices;                                   
-       IMG_UINT32 ui32ProcessID;                               
-       PVRSRV_CLIENT_DEV_DATA  sClientDevData; 
-       IMG_UINT32 ui32SrvFlags;                                
-}PVRSRV_CONNECTION;
-
-
-typedef struct _PVRSRV_DEV_DATA_
-{
-       IMG_CONST PVRSRV_CONNECTION      *psConnection; 
-#if defined (SUPPORT_SID_INTERFACE)
-       IMG_SID                 hDevCookie;                             
-#else
-       IMG_HANDLE                      hDevCookie;                             
-#endif
-
-} PVRSRV_DEV_DATA;
-
-typedef struct _PVRSRV_MEMUPDATE_
-{
-       IMG_UINT32                      ui32UpdateAddr;         
-       IMG_UINT32                      ui32UpdateVal;          
-} PVRSRV_MEMUPDATE;
-
-typedef struct _PVRSRV_HWREG_
-{
-       IMG_UINT32                      ui32RegAddr;    
-       IMG_UINT32                      ui32RegVal;             
-} PVRSRV_HWREG;
-
-typedef struct _PVRSRV_MEMBLK_
-{
-       IMG_DEV_VIRTADDR        sDevVirtAddr;                   
-       IMG_HANDLE                      hOSMemHandle;                   
-       IMG_HANDLE                      hOSWrapMem;                             
-       IMG_HANDLE                      hBuffer;                                
-       IMG_HANDLE                      hResItem;                               
-       IMG_SYS_PHYADDR         *psIntSysPAddr;
-
-} PVRSRV_MEMBLK;
-
-typedef struct _PVRSRV_KERNEL_MEM_INFO_ *PPVRSRV_KERNEL_MEM_INFO;
-
-typedef struct _PVRSRV_CLIENT_MEM_INFO_
-{
-       
-       IMG_PVOID                               pvLinAddr;
-
-       
-       IMG_PVOID                               pvLinAddrKM;
-
-       
-       IMG_DEV_VIRTADDR                sDevVAddr;
-
-       
-
-
-
-
-       IMG_CPU_PHYADDR                 sCpuPAddr;
-
-       
-       IMG_UINT32                              ui32Flags;
-
-       
-
-
-       IMG_UINT32                              ui32ClientFlags;
-
-       
-       IMG_SIZE_T                              uAllocSize;
-
-
-       
-       struct _PVRSRV_CLIENT_SYNC_INFO_        *psClientSyncInfo;
-
-#if defined (SUPPORT_SID_INTERFACE)
-       
-       IMG_SID                                                         hMappingInfo;
-
-       
-       IMG_SID                                                         hKernelMemInfo;
-
-       
-       IMG_SID                                                         hResItem;
-#else
-       
-       IMG_HANDLE                                                      hMappingInfo;
-
-       
-       IMG_HANDLE                                                      hKernelMemInfo;
-
-       
-       IMG_HANDLE                                                      hResItem;
-#endif
-
-#if defined(SUPPORT_MEMINFO_IDS)
-       #if !defined(USE_CODE)
-       
-       IMG_UINT64                                                      ui64Stamp;
-       #else 
-       IMG_UINT32                                                      dummy1;
-       IMG_UINT32                                                      dummy2;
-       #endif 
-#endif 
-
-       
-
-
-       struct _PVRSRV_CLIENT_MEM_INFO_         *psNext;
-
-} PVRSRV_CLIENT_MEM_INFO, *PPVRSRV_CLIENT_MEM_INFO;
-
-
-#define PVRSRV_MAX_CLIENT_HEAPS (32)
-typedef struct _PVRSRV_HEAP_INFO_
-{
-       IMG_UINT32                      ui32HeapID;
-#if defined (SUPPORT_SID_INTERFACE)
-       IMG_SID                         hDevMemHeap;
-#else
-       IMG_HANDLE                      hDevMemHeap;
-#endif
-       IMG_DEV_VIRTADDR        sDevVAddrBase;
-       IMG_UINT32                      ui32HeapByteSize;
-       IMG_UINT32                      ui32Attribs;
-       IMG_UINT32                      ui32XTileStride;
-}PVRSRV_HEAP_INFO;
-
-
-
-
-typedef struct _PVRSRV_EVENTOBJECT_
-{
-       
-       IMG_CHAR        szName[EVENTOBJNAME_MAXLENGTH];
-       
-#if defined (SUPPORT_SID_INTERFACE)
-       IMG_SID     hOSEventKM;
-#else
-       IMG_HANDLE      hOSEventKM;
-#endif
-
-} PVRSRV_EVENTOBJECT;
-
-typedef enum
-{
-       PVRSRV_MISC_INFO_CPUCACHEOP_NONE = 0,
-       PVRSRV_MISC_INFO_CPUCACHEOP_CLEAN,
-       PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH,
-       PVRSRV_MISC_INFO_CPUCACHEOP_CUSTOM_FLUSH,
-       PVRSRV_MISC_INFO_CPUCACHEOP_CUSTOM_INV
-} PVRSRV_MISC_INFO_CPUCACHEOP_TYPE;
-
-typedef struct _PVRSRV_MISC_INFO_
-{
-       IMG_UINT32      ui32StateRequest;               
-       IMG_UINT32      ui32StatePresent;               
-
-       
-       IMG_VOID        *pvSOCTimerRegisterKM;
-       IMG_VOID        *pvSOCTimerRegisterUM;
-#if defined (SUPPORT_SID_INTERFACE)
-       IMG_SID         hSOCTimerRegisterOSMemHandle;
-       IMG_SID         hSOCTimerRegisterMappingInfo;
-#else
-       IMG_HANDLE      hSOCTimerRegisterOSMemHandle;
-       IMG_HANDLE      hSOCTimerRegisterMappingInfo;
-#endif
-
-       
-       IMG_VOID        *pvSOCClockGateRegs;
-       IMG_UINT32      ui32SOCClockGateRegsSize;
-
-       
-       IMG_CHAR        *pszMemoryStr;
-       IMG_UINT32      ui32MemoryStrLen;
-
-       
-       PVRSRV_EVENTOBJECT      sGlobalEventObject;
-#if defined (SUPPORT_SID_INTERFACE)
-       IMG_EVENTSID            hOSGlobalEvent;
-#else
-       IMG_HANDLE                      hOSGlobalEvent;
-#endif
-
-       
-       IMG_UINT32      aui32DDKVersion[4];
-
-       
-       struct
-       {
-               
-               IMG_BOOL bDeferOp;
-
-               
-               PVRSRV_MISC_INFO_CPUCACHEOP_TYPE eCacheOpType;
-
-               
-#if !defined (SUPPORT_SID_INTERFACE)
-               union
-               {
-                       
-                       PVRSRV_CLIENT_MEM_INFO *psClientMemInfo;
-
-                       
-                       struct _PVRSRV_KERNEL_MEM_INFO_ *psKernelMemInfo;
-               } u;
-#endif
-
-               
-               IMG_VOID *pvBaseVAddr;
-
-               
-               IMG_UINT32      ui32Length;
-       } sCacheOpCtl;
-} PVRSRV_MISC_INFO;
-
-typedef struct _PVRSRV_SYNC_TOKEN_
-{
-       
-
-       struct
-       {
-#if defined (SUPPORT_SID_INTERFACE)
-               IMG_SID    hKernelSyncInfo;
-#else
-               IMG_HANDLE hKernelSyncInfo;
-#endif
-               IMG_UINT32 ui32ReadOpsPendingSnapshot;
-               IMG_UINT32 ui32WriteOpsPendingSnapshot;
-       } sPrivate;
-} PVRSRV_SYNC_TOKEN;
-
-
-typedef enum _PVRSRV_CLIENT_EVENT_
-{
-       PVRSRV_CLIENT_EVENT_HWTIMEOUT = 0,
-} PVRSRV_CLIENT_EVENT;
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVClientEvent(IMG_CONST PVRSRV_CLIENT_EVENT eEvent,
-                                                                                       PVRSRV_DEV_DATA *psDevData,
-                                                                                       IMG_PVOID pvData);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVConnect(PVRSRV_CONNECTION **ppsConnection, IMG_UINT32 ui32SrvFlags);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVDisconnect(IMG_CONST PVRSRV_CONNECTION *psConnection);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDevices(IMG_CONST PVRSRV_CONNECTION                   *psConnection,
-                                                                                                       IMG_UINT32                                      *puiNumDevices,
-                                                                                                       PVRSRV_DEVICE_IDENTIFIER        *puiDevIDs);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVAcquireDeviceData(IMG_CONST PVRSRV_CONNECTION  *psConnection,
-                                                                                                       IMG_UINT32                      uiDevIndex,
-                                                                                                       PVRSRV_DEV_DATA         *psDevData,
-                                                                                                       PVRSRV_DEVICE_TYPE      eDeviceType);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfo (IMG_CONST PVRSRV_CONNECTION *psConnection, PVRSRV_MISC_INFO *psMiscInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVReleaseMiscInfo (IMG_CONST PVRSRV_CONNECTION *psConnection, PVRSRV_MISC_INFO *psMiscInfo);
-
-#if 1
-IMG_IMPORT
-IMG_UINT32 ReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset);
-
-IMG_IMPORT
-IMG_VOID WriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value);
-
-IMG_IMPORT IMG_VOID WriteHWRegs(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Count, PVRSRV_HWREG *psHWRegs);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR PVRSRVPollForValue ( const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                       IMG_SID    hOSEvent,
-#else
-                                                       IMG_HANDLE hOSEvent,
-#endif
-                                                       volatile IMG_UINT32 *pui32LinMemAddr,
-                                                       IMG_UINT32 ui32Value,
-                                                       IMG_UINT32 ui32Mask,
-                                                       IMG_UINT32 ui32Waitus,
-                                                       IMG_UINT32 ui32Tries);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID    *phDevMemContext,
-#else
-                                                                                       IMG_HANDLE *phDevMemContext,
-#endif
-                                                                                       IMG_UINT32 *pui32SharedHeapCount,
-                                                                                       PVRSRV_HEAP_INFO *psHeapInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID                         hDevMemContext);
-#else
-                                                                                       IMG_HANDLE                      hDevMemContext);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID     hDevMemContext,
-#else
-                                                                                       IMG_HANDLE hDevMemContext,
-#endif
-                                                                                       IMG_UINT32 *pui32SharedHeapCount,
-                                                                                       PVRSRV_HEAP_INFO *psHeapInfo);
-
-#if defined(PVRSRV_LOG_MEMORY_ALLOCS)
-       #define PVRSRVAllocDeviceMem_log(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo, logStr) \
-               (PVR_TRACE(("PVRSRVAllocDeviceMem(" #psDevData "," #hDevMemHeap "," #ui32Attribs "," #ui32Size "," #ui32Alignment "," #ppsMemInfo ")" \
-                       ": " logStr " (size = 0x%lx)", ui32Size)), \
-               PVRSRVAllocDeviceMem(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo))
-#else
-       #define PVRSRVAllocDeviceMem_log(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo, logStr) \
-               PVRSRVAllocDeviceMem(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo)
-#endif
-
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocDeviceMem(IMG_CONST PVRSRV_DEV_DATA       *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                       IMG_SID                 hDevMemHeap,
-#else
-                                                                       IMG_HANDLE              hDevMemHeap,
-#endif
-                                                                       IMG_UINT32              ui32Attribs,
-                                                                       IMG_SIZE_T              ui32Size,
-                                                                       IMG_SIZE_T              ui32Alignment,
-                                                                       PVRSRV_CLIENT_MEM_INFO  **ppsMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMem(IMG_CONST PVRSRV_DEV_DATA        *psDevData,
-                                                               PVRSRV_CLIENT_MEM_INFO          *psMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVRemapToDev(IMG_CONST PVRSRV_DEV_DATA   *psDevData,
-                                                               PVRSRV_CLIENT_MEM_INFO          *psMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapFromDev(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                               PVRSRV_CLIENT_MEM_INFO          *psMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVExportDeviceMem(IMG_CONST PVRSRV_DEV_DATA      *psDevData,
-                                                                                               PVRSRV_CLIENT_MEM_INFO          *psMemInfo,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                               IMG_SID                                         *phMemInfo);
-#else
-                                                                                               IMG_HANDLE                                      *phMemInfo);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVReserveDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID                         hDevMemHeap,
-#else
-                                                                                       IMG_HANDLE                      hDevMemHeap,
-#endif
-                                                                                       IMG_DEV_VIRTADDR        *psDevVAddr,
-                                                                                       IMG_SIZE_T                      ui32Size,
-                                                                                       IMG_SIZE_T                      ui32Alignment,
-                                                                                       PVRSRV_CLIENT_MEM_INFO          **ppsMemInfo);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                                       PVRSRV_CLIENT_MEM_INFO *psMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                       IMG_SID hKernelMemInfo,
-                                                                       IMG_SID hDstDevMemHeap,
-#else
-                                                                       IMG_HANDLE hKernelMemInfo,
-                                                                       IMG_HANDLE hDstDevMemHeap,
-#endif
-                                                                       PVRSRV_CLIENT_MEM_INFO **ppsDstMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                               PVRSRV_CLIENT_MEM_INFO *psMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVMapExtMemory (IMG_CONST PVRSRV_DEV_DATA        *psDevData,
-                                                                       PVRSRV_CLIENT_MEM_INFO          *psMemInfo,
-                                                                       IMG_SYS_PHYADDR                         *psSysPAddr,
-                                                                       IMG_UINT32                                      ui32Flags);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                       PVRSRV_CLIENT_MEM_INFO          *psMemInfo,
-                                                                       IMG_UINT32                                      ui32Flags);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemory(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                               IMG_SID                                 hDevMemContext,
-#else
-                                                                                               IMG_HANDLE                              hDevMemContext,
-#endif
-                                                                                               IMG_SIZE_T                              ui32ByteSize,
-                                                                                               IMG_SIZE_T                              ui32PageOffset,
-                                                                                               IMG_BOOL                                bPhysContig,
-                                                                                               IMG_SYS_PHYADDR                 *psSysPAddr,
-                                                                                               IMG_VOID                                *pvLinAddr,
-                                                                                               IMG_UINT32                              ui32Flags,
-                                                                                               PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                               PVRSRV_CLIENT_MEM_INFO *psMemInfo);
-
-PVRSRV_ERROR PVRSRVChangeDeviceMemoryAttributes(IMG_CONST PVRSRV_DEV_DATA                      *psDevData,
-                                                                                               PVRSRV_CLIENT_MEM_INFO  *psClientMemInfo,
-                                                                                               IMG_UINT32                              ui32Attribs);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID hDevMemContext,
-                                                                               IMG_SID hDeviceClassBuffer,
-#else
-                                                                               IMG_HANDLE hDevMemContext,
-                                                                               IMG_HANDLE hDeviceClassBuffer,
-#endif
-                                                                               PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                               PVRSRV_CLIENT_MEM_INFO *psMemInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVMapPhysToUserSpace(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                         IMG_SYS_PHYADDR sSysPhysAddr,
-                                                                         IMG_UINT32 uiSizeInBytes,
-                                                                         IMG_PVOID *ppvUserAddr,
-                                                                         IMG_UINT32 *puiActualSize,
-                                                                         IMG_PVOID *ppvProcess);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapPhysToUserSpace(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                               IMG_PVOID pvUserAddr,
-                                                                               IMG_PVOID pvProcess);
-
-#if defined(LINUX)
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVExportDeviceMem2(IMG_CONST PVRSRV_DEV_DATA     *psDevData,
-                                                                                                PVRSRV_CLIENT_MEM_INFO         *psMemInfo,
-                                                                                                IMG_INT                                        *iFd);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory2(IMG_CONST PVRSRV_DEV_DATA     *psDevData,
-                                                                                                IMG_INT                                        iFd,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                IMG_SID                                        hDstDevMemHeap,
-#else
-                                                                                                IMG_HANDLE                                     hDstDevMemHeap,
-#endif
-                                                                                                PVRSRV_CLIENT_MEM_INFO         **ppsDstMemInfo);
-#endif 
-
-typedef enum _PVRSRV_SYNCVAL_MODE_
-{
-       PVRSRV_SYNCVAL_READ                             = IMG_TRUE,
-       PVRSRV_SYNCVAL_WRITE                    = IMG_FALSE,
-
-} PVRSRV_SYNCVAL_MODE, *PPVRSRV_SYNCVAL_MODE;
-
-typedef IMG_UINT32 PVRSRV_SYNCVAL;
-
-IMG_IMPORT PVRSRV_ERROR PVRSRVWaitForOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
-       PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired);
-
-IMG_IMPORT PVRSRV_ERROR PVRSRVWaitForAllOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
-       PVRSRV_SYNCVAL_MODE eMode);
-
-IMG_IMPORT IMG_BOOL PVRSRVTestOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
-       PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired);
-
-IMG_IMPORT IMG_BOOL PVRSRVTestAllOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
-       PVRSRV_SYNCVAL_MODE eMode);
-
-IMG_IMPORT IMG_BOOL PVRSRVTestOpsNotComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
-       PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired);
-
-IMG_IMPORT IMG_BOOL PVRSRVTestAllOpsNotComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
-       PVRSRV_SYNCVAL_MODE eMode);
-
-IMG_IMPORT PVRSRV_SYNCVAL PVRSRVGetPendingOpSyncVal(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
-       PVRSRV_SYNCVAL_MODE eMode);
-
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDeviceClass(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                                       PVRSRV_DEVICE_CLASS DeviceClass,
-                                                                                                       IMG_UINT32 *pui32DevCount,
-                                                                                                       IMG_UINT32 *pui32DevID);
-
-IMG_IMPORT
-IMG_HANDLE IMG_CALLCONV PVRSRVOpenDCDevice(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                       IMG_UINT32 ui32DeviceID);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVCloseDCDevice(IMG_CONST PVRSRV_CONNECTION      *psConnection, IMG_HANDLE hDevice);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCFormats (IMG_HANDLE hDevice,
-                                                                                       IMG_UINT32              *pui32Count,
-                                                                                       DISPLAY_FORMAT  *psFormat);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCDims (IMG_HANDLE hDevice,
-                                                                               IMG_UINT32              *pui32Count,
-                                                                               DISPLAY_FORMAT  *psFormat,
-                                                                               DISPLAY_DIMS    *psDims);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCSystemBuffer(IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID *phBuffer);
-#else
-                                                                               IMG_HANDLE *phBuffer);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCInfo(IMG_HANDLE hDevice,
-                                                                               DISPLAY_INFO* psDisplayInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDCSwapChain (IMG_HANDLE                          hDevice,
-                                                                                                       IMG_UINT32                              ui32Flags,
-                                                                                                       DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib,
-                                                                                                       DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib,
-                                                                                                       IMG_UINT32                              ui32BufferCount,
-                                                                                                       IMG_UINT32                              ui32OEMFlags,
-                                                                                                       IMG_UINT32                              *pui32SwapChainID,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                       IMG_SID                                 *phSwapChain);
-#else
-                                                                                                       IMG_HANDLE                              *phSwapChain);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDCSwapChain (IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID hSwapChain);
-#else
-                                                                                       IMG_HANDLE              hSwapChain);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstRect (IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID         hSwapChain,
-#else
-                                                                               IMG_HANDLE      hSwapChain,
-#endif
-                                                                               IMG_RECT        *psDstRect);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcRect (IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID         hSwapChain,
-#else
-                                                                               IMG_HANDLE      hSwapChain,
-#endif
-                                                                               IMG_RECT        *psSrcRect);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstColourKey (IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID         hSwapChain,
-#else
-                                                                                       IMG_HANDLE      hSwapChain,
-#endif
-                                                                                       IMG_UINT32      ui32CKColour);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcColourKey (IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                       IMG_SID         hSwapChain,
-#else
-                                                                                       IMG_HANDLE      hSwapChain,
-#endif
-                                                                                       IMG_UINT32      ui32CKColour);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCBuffers(IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                       IMG_SID     hSwapChain,
-                                                                       IMG_SID    *phBuffer);
-#else
-                                                                       IMG_HANDLE hSwapChain,
-                                                                       IMG_HANDLE *phBuffer);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCBuffer (IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID    hBuffer,
-#else
-                                                                               IMG_HANDLE hBuffer,
-#endif
-                                                                               IMG_UINT32 ui32ClipRectCount,
-                                                                               IMG_RECT  *psClipRect,
-                                                                               IMG_UINT32 ui32SwapInterval,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID hPrivateTag);
-#else
-                                                                               IMG_HANDLE hPrivateTag);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCSystem (IMG_HANDLE hDevice,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                               IMG_SID hSwapChain);
-#else
-                                                                               IMG_HANDLE hSwapChain);
-#endif
-
-
-IMG_IMPORT
-IMG_HANDLE IMG_CALLCONV PVRSRVOpenBCDevice(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                       IMG_UINT32 ui32DeviceID);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVCloseBCDevice(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                               IMG_HANDLE hDevice);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBufferInfo(IMG_HANDLE hDevice,
-                                                                                               BUFFER_INFO     *psBuffer);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBuffer(IMG_HANDLE hDevice,
-                                                                                               IMG_UINT32 ui32BufferIndex,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                               IMG_SID   *phBuffer);
-#else
-                                                                                               IMG_HANDLE *phBuffer);
-#endif
-
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpInit(IMG_CONST PVRSRV_CONNECTION *psConnection);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpStartInitPhase(IMG_CONST PVRSRV_CONNECTION *psConnection);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpStopInitPhase(IMG_CONST PVRSRV_CONNECTION *psConnection);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSyncPol(IMG_CONST PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                        IMG_SID    hKernelSyncInfo,
-#else
-                                                                                        PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo,
-#endif
-                                                                                        IMG_BOOL   bIsRead,
-                                                                                        IMG_UINT32 ui32Value,
-                                                                                        IMG_UINT32 ui32Mask);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSyncPol2(IMG_CONST PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                        IMG_SID  hKernelSyncInfo,
-#else
-                                                                                        PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo,
-#endif
-                                                                                        IMG_BOOL bIsRead);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMem(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                       IMG_PVOID pvAltLinAddr,
-                                                                       PVRSRV_CLIENT_MEM_INFO *psMemInfo,
-                                                                       IMG_UINT32 ui32Offset,
-                                                                       IMG_UINT32 ui32Bytes,
-                                                                       IMG_UINT32 ui32Flags);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSync(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                               IMG_PVOID pvAltLinAddr,
-                                                                               PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo,
-                                                                               IMG_UINT32 ui32Offset,
-                                                                               IMG_UINT32 ui32Bytes);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpReg(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                IMG_CHAR *pszRegRegion,
-                                                                                       IMG_UINT32 ui32RegAddr,
-                                                                                       IMG_UINT32 ui32RegValue,
-                                                                                       IMG_UINT32 ui32Flags);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegPolWithFlags(const PVRSRV_DEV_DATA *psDevData,
-                                                                                                        IMG_CHAR *pszRegRegion,
-                                                                                                        IMG_UINT32 ui32RegAddr,
-                                                                                                        IMG_UINT32 ui32RegValue,
-                                                                                                        IMG_UINT32 ui32Mask,
-                                                                                                        IMG_UINT32 ui32Flags);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegPol(const PVRSRV_DEV_DATA *psDevData,
-                                                                                       IMG_CHAR *pszRegRegion,
-                                                                                       IMG_UINT32 ui32RegAddr,
-                                                                                       IMG_UINT32 ui32RegValue,
-                                                                                       IMG_UINT32 ui32Mask);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpPDReg(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                       IMG_UINT32 ui32RegAddr,
-                                                                                       IMG_UINT32 ui32RegValue);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpPDDevPAddr(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                               PVRSRV_CLIENT_MEM_INFO *psMemInfo,
-                                                                                               IMG_UINT32 ui32Offset,
-                                                                                               IMG_DEV_PHYADDR sPDDevPAddr);
-
-#if !defined(USE_CODE)
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPages(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                                  IMG_SID                              hKernelMemInfo,
-#else
-                                                                                                                  IMG_HANDLE                   hKernelMemInfo,
-#endif
-                                                                                                                  IMG_DEV_PHYADDR              *pPages,
-                                                                                                                  IMG_UINT32                   ui32NumPages,
-                                                                                                                  IMG_DEV_VIRTADDR             sDevVAddr,
-                                                                                                                  IMG_UINT32                   ui32Start,
-                                                                                                                  IMG_UINT32                   ui32Length,
-                                                                                                                  IMG_UINT32                   ui32Flags);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSetFrame(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                         IMG_UINT32 ui32Frame);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpComment(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                        IMG_CONST IMG_CHAR *pszComment,
-                                                                                        IMG_BOOL bContinuous);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCommentf(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                         IMG_BOOL bContinuous,
-                                                                                         IMG_CONST IMG_CHAR *pszFormat, ...)
-#if !defined(USE_CODE)
-                                                                                         IMG_FORMAT_PRINTF(3, 4)
-#endif
-;
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCommentWithFlagsf(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                                          IMG_UINT32 ui32Flags,
-                                                                                                          IMG_CONST IMG_CHAR *pszFormat, ...)
-#if !defined(USE_CODE)
-                                                                                                          IMG_FORMAT_PRINTF(3, 4)
-#endif
-;
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpDriverInfo(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                               IMG_CHAR *pszString,
-                                                                                               IMG_BOOL bContinuous);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpIsCapturing(IMG_CONST PVRSRV_CONNECTION *psConnection,
-                                                                                               IMG_BOOL *pbIsCapturing);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegRead(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                       IMG_CONST IMG_CHAR *pszRegRegion,
-                                                                                       IMG_CONST IMG_CHAR *pszFileName,
-                                                                                       IMG_UINT32 ui32FileOffset,
-                                                                                       IMG_UINT32 ui32Address,
-                                                                                       IMG_UINT32 ui32Size,
-                                                                                       IMG_UINT32 ui32PDumpFlags);
-
-
-IMG_IMPORT
-IMG_BOOL IMG_CALLCONV PVRSRVPDumpIsCapturingTest(IMG_CONST PVRSRV_CONNECTION *psConnection);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCycleCountRegRead(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                                               IMG_UINT32 ui32RegOffset,
-                                                                                                               IMG_BOOL bLastFrame);
-
-IMG_IMPORT IMG_HANDLE  PVRSRVLoadLibrary(const IMG_CHAR *pszLibraryName);
-IMG_IMPORT PVRSRV_ERROR        PVRSRVUnloadLibrary(IMG_HANDLE hExtDrv);
-IMG_IMPORT PVRSRV_ERROR        PVRSRVGetLibFuncAddr(IMG_HANDLE hExtDrv, const IMG_CHAR *pszFunctionName, IMG_VOID **ppvFuncAddr);
-
-IMG_IMPORT IMG_UINT32 PVRSRVClockus (void);
-IMG_IMPORT IMG_VOID PVRSRVWaitus (IMG_UINT32 ui32Timeus);
-IMG_IMPORT IMG_VOID PVRSRVReleaseThreadQuanta (void);
-IMG_IMPORT IMG_UINT32 IMG_CALLCONV PVRSRVGetCurrentProcessID(void);
-IMG_IMPORT IMG_CHAR * IMG_CALLCONV PVRSRVSetLocale(const IMG_CHAR *pszLocale);
-
-
-
-
-
-IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVCreateAppHintState(IMG_MODULE_ID eModuleID,
-                                                                                                               const IMG_CHAR *pszAppName,
-                                                                                                               IMG_VOID **ppvState);
-IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVFreeAppHintState(IMG_MODULE_ID eModuleID,
-                                                                                IMG_VOID *pvHintState);
-
-IMG_IMPORT IMG_BOOL IMG_CALLCONV PVRSRVGetAppHint(IMG_VOID                     *pvHintState,
-                                                                                                 const IMG_CHAR        *pszHintName,
-                                                                                                 IMG_DATA_TYPE         eDataType,
-                                                                                                 const IMG_VOID        *pvDefault,
-                                                                                                 IMG_VOID                      *pvReturn);
-
-IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVAllocUserModeMem (IMG_SIZE_T ui32Size);
-IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVCallocUserModeMem (IMG_SIZE_T ui32Size);
-IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVReallocUserModeMem (IMG_PVOID pvBase, IMG_SIZE_T uNewSize);
-IMG_IMPORT IMG_VOID  IMG_CALLCONV PVRSRVFreeUserModeMem (IMG_PVOID pvMem);
-IMG_IMPORT IMG_VOID PVRSRVMemCopy(IMG_VOID *pvDst, const IMG_VOID *pvSrc, IMG_SIZE_T ui32Size);
-IMG_IMPORT IMG_VOID PVRSRVMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_T ui32Size);
-
-struct _PVRSRV_MUTEX_OPAQUE_STRUCT_;
-typedef        struct  _PVRSRV_MUTEX_OPAQUE_STRUCT_ *PVRSRV_MUTEX_HANDLE;
-
-IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateMutex(PVRSRV_MUTEX_HANDLE *phMutex);
-IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyMutex(PVRSRV_MUTEX_HANDLE hMutex);
-IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex);
-IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockMutex(PVRSRV_MUTEX_HANDLE hMutex);
-
-IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockProcessGlobalMutex(void);
-IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockProcessGlobalMutex(void);
-
-
-struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_;
-typedef        struct  _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_ *PVRSRV_SEMAPHORE_HANDLE;
-
-
-       #define IMG_SEMAPHORE_WAIT_INFINITE       ((IMG_UINT64)0xFFFFFFFFFFFFFFFFull)
-
-
-#if !defined(USE_CODE)
-
-#ifdef INLINE_IS_PRAGMA
-#pragma inline(PVRSRVCreateSemaphore)
-#endif
-static INLINE PVRSRV_ERROR PVRSRVCreateSemaphore(PVRSRV_SEMAPHORE_HANDLE *phSemaphore, IMG_INT iInitialCount)
-{
-       PVR_UNREFERENCED_PARAMETER(iInitialCount);
-       *phSemaphore = 0;
-       return PVRSRV_OK;
-}
-
-#ifdef INLINE_IS_PRAGMA
-#pragma inline(PVRSRVDestroySemaphore)
-#endif
-static INLINE PVRSRV_ERROR PVRSRVDestroySemaphore(PVRSRV_SEMAPHORE_HANDLE hSemaphore)
-{
-       PVR_UNREFERENCED_PARAMETER(hSemaphore);
-       return PVRSRV_OK;
-}
-
-#ifdef INLINE_IS_PRAGMA
-#pragma inline(PVRSRVWaitSemaphore)
-#endif
-static INLINE PVRSRV_ERROR PVRSRVWaitSemaphore(PVRSRV_SEMAPHORE_HANDLE hSemaphore, IMG_UINT64 ui64TimeoutMicroSeconds)
-{
-       PVR_UNREFERENCED_PARAMETER(hSemaphore);
-       PVR_UNREFERENCED_PARAMETER(ui64TimeoutMicroSeconds);
-       return PVRSRV_ERROR_INVALID_PARAMS;
-}
-
-#ifdef INLINE_IS_PRAGMA
-#pragma inline(PVRSRVPostSemaphore)
-#endif
-static INLINE IMG_VOID PVRSRVPostSemaphore(PVRSRV_SEMAPHORE_HANDLE hSemaphore, IMG_INT iPostCount)
-{
-       PVR_UNREFERENCED_PARAMETER(hSemaphore);
-       PVR_UNREFERENCED_PARAMETER(iPostCount);
-}
-
-#endif 
-
-
-#if (defined(DEBUG) && defined(__linux__))
-IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVAllocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber);
-
-IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVCallocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber);
-
-IMG_IMPORT IMG_VOID  IMG_CALLCONV PVRSRVFreeUserModeMemTracking(IMG_VOID *pvMem);
-
-IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVReallocUserModeMemTracking(IMG_VOID *pvMem, IMG_SIZE_T ui32NewSize, 
-                                                                                                         IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber);
-#endif 
-
-IMG_IMPORT PVRSRV_ERROR PVRSRVEventObjectWait(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                       IMG_EVENTSID hOSEvent);
-#else
-                                                                       IMG_HANDLE hOSEvent);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateSyncInfoModObj(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                        IMG_SID *phKernelSyncInfoModObj);
-#else
-                                                                                                        IMG_HANDLE *phKernelSyncInfoModObj);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroySyncInfoModObj(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                         IMG_SID hKernelSyncInfoModObj);
-#else
-                                                                                                         IMG_HANDLE hKernelSyncInfoModObj);
-#endif
-
-
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyPendingSyncOps(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                         IMG_SID    hKernelSyncInfoModObj,
-#else
-                                                                                                         IMG_HANDLE hKernelSyncInfoModObj,
-#endif
-                                                                                                         PVRSRV_CLIENT_SYNC_INFO *psSyncInfo,
-                                                                                                         IMG_UINT32 ui32ModifyFlags,
-                                                                                                         IMG_UINT32 *pui32ReadOpsPending,
-                                                                                                         IMG_UINT32 *pui32WriteOpsPending);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyCompleteSyncOps(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                         IMG_SID hKernelSyncInfoModObj);
-#else
-                                                                                                         IMG_HANDLE hKernelSyncInfoModObj);
-#endif
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsTakeToken(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                const IMG_SID      hKernelSyncInfo,
-#else
-                                                                                                const PVRSRV_CLIENT_SYNC_INFO *psSyncInfo,
-#endif
-                                                                                                PVRSRV_SYNC_TOKEN *psSyncToken);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToToken(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                       const IMG_SID            hKernelSyncInfo,
-#else
-                                                                                                       const PVRSRV_CLIENT_SYNC_INFO *psSyncInfo,
-#endif
-                                                                                                       const PVRSRV_SYNC_TOKEN *psSyncToken,
-                                                                                                       IMG_BOOL bWait);
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToModObj(const PVRSRV_CONNECTION *psConnection,
-#if defined (SUPPORT_SID_INTERFACE)
-                                                                                                        IMG_SID  hKernelSyncInfoModObj,
-#else
-                                                                                                        IMG_HANDLE hKernelSyncInfoModObj,
-#endif
-                                                                                                        IMG_BOOL bWait);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVSyncOpsFlushToDelta(const PVRSRV_CONNECTION *psConnection,
-                                                                                                       PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo,
-                                                                                                       IMG_UINT32 ui32Delta,
-                                                                                                       IMG_BOOL bWait);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfo(IMG_CONST PVRSRV_DEV_DATA        *psDevData,
-                                                                                         PVRSRV_CLIENT_SYNC_INFO **ppsSyncInfo);
-
-IMG_IMPORT
-PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeSyncInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData,
-                                                                                        PVRSRV_CLIENT_SYNC_INFO *psSyncInfo);
-
-IMG_IMPORT
-const IMG_CHAR *PVRSRVGetErrorString(PVRSRV_ERROR eError);
-
-
-#define TIME_NOT_PASSED_UINT32(a,b,c)          (((a) - (b)) < (c))
-
-#if defined (__cplusplus)
-}
-#endif
-#endif 
-
diff --git a/sys/pvr2d/pvr_includes/servicesext.h b/sys/pvr2d/pvr_includes/servicesext.h
deleted file mode 100644 (file)
index d326245..0000000
+++ /dev/null
@@ -1,855 +0,0 @@
-/**********************************************************************\r
-*\r
-* Copyright(c) Imagination Technologies Ltd.\r
-*\r
-* The contents of this file are subject to the MIT license as set out below.\r
-*\r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"),\r
-* to deal in the Software without restriction, including without limitation\r
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-* and/or sell copies of the Software, and to permit persons to whom the\r
-* Software is furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included\r
-* in all copies or substantial portions of the Software.\r
-*\r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\r
-* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r
-* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-* \r
-* This License is also included in this distribution in the file called \r
-* "COPYING".\r
-* \r
-******************************************************************************/\r
-\r
-\r
-\r
-#if !defined (__SERVICESEXT_H__)\r
-#define __SERVICESEXT_H__\r
-\r
-#define PVRSRV_LOCKFLG_READONLY        (1)             \r
-\r
-typedef enum _PVRSRV_ERROR_\r
-{\r
-       PVRSRV_OK = 0,\r
-       PVRSRV_ERROR_OUT_OF_MEMORY,\r
-       PVRSRV_ERROR_TOO_FEW_BUFFERS,\r
-       PVRSRV_ERROR_INVALID_PARAMS,\r
-       PVRSRV_ERROR_INIT_FAILURE,\r
-       PVRSRV_ERROR_CANT_REGISTER_CALLBACK,\r
-       PVRSRV_ERROR_INVALID_DEVICE,\r
-       PVRSRV_ERROR_NOT_OWNER,\r
-       PVRSRV_ERROR_BAD_MAPPING,\r
-       PVRSRV_ERROR_TIMEOUT,\r
-       PVRSRV_ERROR_FLIP_CHAIN_EXISTS,\r
-       PVRSRV_ERROR_INVALID_SWAPINTERVAL,\r
-       PVRSRV_ERROR_SCENE_INVALID,\r
-       PVRSRV_ERROR_STREAM_ERROR,\r
-       PVRSRV_ERROR_FAILED_DEPENDENCIES,\r
-       PVRSRV_ERROR_CMD_NOT_PROCESSED,\r
-       PVRSRV_ERROR_CMD_TOO_BIG,\r
-       PVRSRV_ERROR_DEVICE_REGISTER_FAILED,\r
-       PVRSRV_ERROR_TOOMANYBUFFERS,\r
-       PVRSRV_ERROR_NOT_SUPPORTED,\r
-       PVRSRV_ERROR_PROCESSING_BLOCKED,\r
-\r
-       PVRSRV_ERROR_CANNOT_FLUSH_QUEUE,\r
-       PVRSRV_ERROR_CANNOT_GET_QUEUE_SPACE,\r
-       PVRSRV_ERROR_CANNOT_GET_RENDERDETAILS,\r
-       PVRSRV_ERROR_RETRY,\r
-\r
-       PVRSRV_ERROR_DDK_VERSION_MISMATCH,\r
-       PVRSRV_ERROR_BUILD_MISMATCH,\r
-       PVRSRV_ERROR_CORE_REVISION_MISMATCH,\r
-\r
-       PVRSRV_ERROR_UPLOAD_TOO_BIG,\r
-\r
-       PVRSRV_ERROR_INVALID_FLAGS,\r
-       PVRSRV_ERROR_FAILED_TO_REGISTER_PROCESS,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_LOAD_LIBRARY,\r
-       PVRSRV_ERROR_UNABLE_GET_FUNC_ADDR,\r
-       PVRSRV_ERROR_UNLOAD_LIBRARY_FAILED,\r
-\r
-       PVRSRV_ERROR_BRIDGE_CALL_FAILED,\r
-       PVRSRV_ERROR_IOCTL_CALL_FAILED,\r
-\r
-    PVRSRV_ERROR_MMU_CONTEXT_NOT_FOUND,\r
-       PVRSRV_ERROR_BUFFER_DEVICE_NOT_FOUND,\r
-       PVRSRV_ERROR_BUFFER_DEVICE_ALREADY_PRESENT,\r
-\r
-       PVRSRV_ERROR_PCI_DEVICE_NOT_FOUND,\r
-       PVRSRV_ERROR_PCI_CALL_FAILED,\r
-       PVRSRV_ERROR_PCI_REGION_TOO_SMALL,\r
-       PVRSRV_ERROR_PCI_REGION_UNAVAILABLE,\r
-       PVRSRV_ERROR_BAD_REGION_SIZE_MISMATCH,\r
-\r
-       PVRSRV_ERROR_REGISTER_BASE_NOT_SET,\r
-\r
-       PVRSRV_ERROR_FAILED_TO_ALLOC_USER_MEM,\r
-       PVRSRV_ERROR_FAILED_TO_ALLOC_VP_MEMORY,\r
-       PVRSRV_ERROR_FAILED_TO_MAP_SHARED_PBDESC,\r
-       PVRSRV_ERROR_FAILED_TO_GET_PHYS_ADDR,\r
-\r
-       PVRSRV_ERROR_FAILED_TO_ALLOC_VIRT_MEMORY,\r
-       PVRSRV_ERROR_FAILED_TO_COPY_VIRT_MEMORY,\r
-\r
-       PVRSRV_ERROR_FAILED_TO_ALLOC_PAGES,\r
-       PVRSRV_ERROR_FAILED_TO_FREE_PAGES,\r
-       PVRSRV_ERROR_FAILED_TO_COPY_PAGES,\r
-       PVRSRV_ERROR_UNABLE_TO_LOCK_PAGES,\r
-       PVRSRV_ERROR_UNABLE_TO_UNLOCK_PAGES,\r
-       PVRSRV_ERROR_STILL_MAPPED,\r
-       PVRSRV_ERROR_MAPPING_NOT_FOUND,\r
-       PVRSRV_ERROR_PHYS_ADDRESS_EXCEEDS_32BIT,\r
-       PVRSRV_ERROR_FAILED_TO_MAP_PAGE_TABLE,\r
-\r
-       PVRSRV_ERROR_INVALID_SEGMENT_BLOCK,\r
-       PVRSRV_ERROR_INVALID_SGXDEVDATA,\r
-       PVRSRV_ERROR_INVALID_DEVINFO,\r
-       PVRSRV_ERROR_INVALID_MEMINFO,\r
-       PVRSRV_ERROR_INVALID_MISCINFO,\r
-       PVRSRV_ERROR_UNKNOWN_IOCTL,\r
-       PVRSRV_ERROR_INVALID_CONTEXT,\r
-       PVRSRV_ERROR_UNABLE_TO_DESTROY_CONTEXT,\r
-       PVRSRV_ERROR_INVALID_HEAP,\r
-       PVRSRV_ERROR_INVALID_KERNELINFO,\r
-       PVRSRV_ERROR_UNKNOWN_POWER_STATE,\r
-       PVRSRV_ERROR_INVALID_HANDLE_TYPE,\r
-       PVRSRV_ERROR_INVALID_WRAP_TYPE,\r
-       PVRSRV_ERROR_INVALID_PHYS_ADDR,\r
-       PVRSRV_ERROR_INVALID_CPU_ADDR,\r
-       PVRSRV_ERROR_INVALID_HEAPINFO,\r
-       PVRSRV_ERROR_INVALID_PERPROC,\r
-       PVRSRV_ERROR_FAILED_TO_RETRIEVE_HEAPINFO,\r
-       PVRSRV_ERROR_INVALID_MAP_REQUEST,\r
-       PVRSRV_ERROR_INVALID_UNMAP_REQUEST,\r
-       PVRSRV_ERROR_UNABLE_TO_FIND_MAPPING_HEAP,\r
-       PVRSRV_ERROR_MAPPING_STILL_IN_USE,\r
-\r
-       PVRSRV_ERROR_EXCEEDED_HW_LIMITS,\r
-       PVRSRV_ERROR_NO_STAGING_BUFFER_ALLOCATED,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_CREATE_PERPROC_AREA,\r
-       PVRSRV_ERROR_UNABLE_TO_CREATE_EVENT,\r
-       PVRSRV_ERROR_UNABLE_TO_ENABLE_EVENT,\r
-       PVRSRV_ERROR_UNABLE_TO_REGISTER_EVENT,\r
-       PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT,\r
-       PVRSRV_ERROR_UNABLE_TO_CREATE_THREAD,\r
-       PVRSRV_ERROR_UNABLE_TO_CLOSE_THREAD,\r
-       PVRSRV_ERROR_THREAD_READ_ERROR,\r
-       PVRSRV_ERROR_UNABLE_TO_REGISTER_ISR_HANDLER,\r
-       PVRSRV_ERROR_UNABLE_TO_INSTALL_ISR,\r
-       PVRSRV_ERROR_UNABLE_TO_UNINSTALL_ISR,\r
-       PVRSRV_ERROR_ISR_ALREADY_INSTALLED,\r
-       PVRSRV_ERROR_ISR_NOT_INSTALLED,\r
-       PVRSRV_ERROR_UNABLE_TO_INITIALISE_INTERRUPT,\r
-       PVRSRV_ERROR_UNABLE_TO_RETRIEVE_INFO,\r
-       PVRSRV_ERROR_UNABLE_TO_DO_BACKWARDS_BLIT,\r
-       PVRSRV_ERROR_UNABLE_TO_CLOSE_SERVICES,\r
-       PVRSRV_ERROR_UNABLE_TO_REGISTER_CONTEXT,\r
-       PVRSRV_ERROR_UNABLE_TO_REGISTER_RESOURCE,\r
-\r
-       PVRSRV_ERROR_INVALID_CCB_COMMAND,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_LOCK_RESOURCE,\r
-       PVRSRV_ERROR_INVALID_LOCK_ID,\r
-       PVRSRV_ERROR_RESOURCE_NOT_LOCKED,\r
-\r
-       PVRSRV_ERROR_FLIP_FAILED,\r
-       PVRSRV_ERROR_UNBLANK_DISPLAY_FAILED,\r
-\r
-       PVRSRV_ERROR_TIMEOUT_POLLING_FOR_VALUE,\r
-\r
-       PVRSRV_ERROR_CREATE_RENDER_CONTEXT_FAILED,\r
-       PVRSRV_ERROR_UNKNOWN_PRIMARY_FRAG,\r
-       PVRSRV_ERROR_UNEXPECTED_SECONDARY_FRAG,\r
-       PVRSRV_ERROR_UNEXPECTED_PRIMARY_FRAG,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_INSERT_FENCE_ID,\r
-\r
-       PVRSRV_ERROR_BLIT_SETUP_FAILED,\r
-\r
-       PVRSRV_ERROR_PDUMP_NOT_AVAILABLE,\r
-       PVRSRV_ERROR_PDUMP_BUFFER_FULL,\r
-       PVRSRV_ERROR_PDUMP_BUF_OVERFLOW,\r
-       PVRSRV_ERROR_PDUMP_NOT_ACTIVE,\r
-       PVRSRV_ERROR_INCOMPLETE_LINE_OVERLAPS_PAGES,\r
-\r
-       PVRSRV_ERROR_MUTEX_DESTROY_FAILED,\r
-       PVRSRV_ERROR_MUTEX_INTERRUPTIBLE_ERROR,\r
-\r
-       PVRSRV_ERROR_INSUFFICIENT_SCRIPT_SPACE,\r
-       PVRSRV_ERROR_INSUFFICIENT_SPACE_FOR_COMMAND,\r
-\r
-       PVRSRV_ERROR_PROCESS_NOT_INITIALISED,\r
-       PVRSRV_ERROR_PROCESS_NOT_FOUND,\r
-       PVRSRV_ERROR_SRV_CONNECT_FAILED,\r
-       PVRSRV_ERROR_SRV_DISCONNECT_FAILED,\r
-       PVRSRV_ERROR_DEINT_PHASE_FAILED,\r
-       PVRSRV_ERROR_INIT2_PHASE_FAILED,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_FIND_RESOURCE,\r
-\r
-       PVRSRV_ERROR_NO_DC_DEVICES_FOUND,\r
-       PVRSRV_ERROR_UNABLE_TO_OPEN_DC_DEVICE,\r
-       PVRSRV_ERROR_UNABLE_TO_REMOVE_DEVICE,\r
-       PVRSRV_ERROR_NO_DEVICEDATA_FOUND,\r
-       PVRSRV_ERROR_NO_DEVICENODE_FOUND,\r
-       PVRSRV_ERROR_NO_CLIENTNODE_FOUND,\r
-       PVRSRV_ERROR_FAILED_TO_PROCESS_QUEUE,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_INIT_TASK,\r
-       PVRSRV_ERROR_UNABLE_TO_SCHEDULE_TASK,\r
-       PVRSRV_ERROR_UNABLE_TO_KILL_TASK,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_ENABLE_TIMER,\r
-       PVRSRV_ERROR_UNABLE_TO_DISABLE_TIMER,\r
-       PVRSRV_ERROR_UNABLE_TO_REMOVE_TIMER,\r
-\r
-       PVRSRV_ERROR_UNKNOWN_PIXEL_FORMAT,\r
-       PVRSRV_ERROR_UNKNOWN_SCRIPT_OPERATION,\r
-\r
-       PVRSRV_ERROR_HANDLE_INDEX_OUT_OF_RANGE,\r
-       PVRSRV_ERROR_HANDLE_NOT_ALLOCATED,\r
-       PVRSRV_ERROR_HANDLE_TYPE_MISMATCH,\r
-       PVRSRV_ERROR_UNABLE_TO_ADD_HANDLE,\r
-       PVRSRV_ERROR_HANDLE_NOT_SHAREABLE,\r
-       PVRSRV_ERROR_HANDLE_NOT_FOUND,\r
-       PVRSRV_ERROR_INVALID_SUBHANDLE,\r
-       PVRSRV_ERROR_HANDLE_BATCH_IN_USE,\r
-       PVRSRV_ERROR_HANDLE_BATCH_COMMIT_FAILURE,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_CREATE_HASH_TABLE,\r
-       PVRSRV_ERROR_INSERT_HASH_TABLE_DATA_FAILED,\r
-\r
-       PVRSRV_ERROR_UNSUPPORTED_BACKING_STORE,\r
-       PVRSRV_ERROR_UNABLE_TO_DESTROY_BM_HEAP,\r
-\r
-       PVRSRV_ERROR_UNKNOWN_INIT_SERVER_STATE,\r
-\r
-       PVRSRV_ERROR_NO_FREE_DEVICEIDS_AVALIABLE,\r
-       PVRSRV_ERROR_INVALID_DEVICEID,\r
-       PVRSRV_ERROR_DEVICEID_NOT_FOUND,\r
-\r
-       PVRSRV_ERROR_MEMORY_TEST_FAILED,\r
-       PVRSRV_ERROR_CPUPADDR_TEST_FAILED,\r
-       PVRSRV_ERROR_COPY_TEST_FAILED,\r
-\r
-       PVRSRV_ERROR_SEMAPHORE_NOT_INITIALISED,\r
-\r
-       PVRSRV_ERROR_UNABLE_TO_RELEASE_CLOCK,\r
-       PVRSRV_ERROR_CLOCK_REQUEST_FAILED,\r
-       PVRSRV_ERROR_DISABLE_CLOCK_FAILURE,\r
-       PVRSRV_ERROR_UNABLE_TO_SET_CLOCK_RATE,\r
-       PVRSRV_ERROR_UNABLE_TO_ROUND_CLOCK_RATE,\r
-       PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK,\r
-       PVRSRV_ERROR_UNABLE_TO_GET_CLOCK,\r
-       PVRSRV_ERROR_UNABLE_TO_GET_PARENT_CLOCK,\r
-       PVRSRV_ERROR_UNABLE_TO_GET_SYSTEM_CLOCK,\r
-\r
-       PVRSRV_ERROR_UNKNOWN_SGL_ERROR,\r
-\r
-       PVRSRV_ERROR_SYSTEM_POWER_CHANGE_FAILURE,\r
-       PVRSRV_ERROR_DEVICE_POWER_CHANGE_FAILURE,\r
-\r
-       PVRSRV_ERROR_BAD_SYNC_STATE,\r
-\r
-       PVRSRV_ERROR_CACHEOP_FAILED,\r
-\r
-       PVRSRV_ERROR_FORCE_I32 = 0x7fffffff\r
-\r
-} PVRSRV_ERROR;\r
-\r
-\r
-typedef enum _PVRSRV_DEVICE_CLASS_\r
-{\r
-       PVRSRV_DEVICE_CLASS_3D                          = 0 ,\r
-       PVRSRV_DEVICE_CLASS_DISPLAY                     = 1 ,\r
-       PVRSRV_DEVICE_CLASS_BUFFER                      = 2 ,\r
-       PVRSRV_DEVICE_CLASS_VIDEO                       = 3 ,\r
-\r
-       PVRSRV_DEVICE_CLASS_FORCE_I32           = 0x7fffffff\r
-\r
-} PVRSRV_DEVICE_CLASS;\r
-\r
-\r
-typedef enum _PVRSRV_SYS_POWER_STATE_\r
-{\r
-       PVRSRV_SYS_POWER_STATE_Unspecified              = -1,   \r
-       PVRSRV_SYS_POWER_STATE_D0                               = 0,    \r
-       PVRSRV_SYS_POWER_STATE_D1                               = 1,    \r
-       PVRSRV_SYS_POWER_STATE_D2                               = 2,    \r
-       PVRSRV_SYS_POWER_STATE_D3                               = 3,    \r
-       PVRSRV_SYS_POWER_STATE_D4                               = 4,    \r
-\r
-       PVRSRV_SYS_POWER_STATE_FORCE_I32 = 0x7fffffff\r
-\r
-} PVRSRV_SYS_POWER_STATE, *PPVRSRV_SYS_POWER_STATE;\r
-\r
-\r
-typedef enum _PVRSRV_DEV_POWER_STATE_\r
-{\r
-       PVRSRV_DEV_POWER_STATE_DEFAULT  = -1,   \r
-       PVRSRV_DEV_POWER_STATE_ON               = 0,    \r
-       PVRSRV_DEV_POWER_STATE_IDLE             = 1,    \r
-       PVRSRV_DEV_POWER_STATE_OFF              = 2,    \r
-\r
-       PVRSRV_DEV_POWER_STATE_FORCE_I32 = 0x7fffffff\r
-\r
-} PVRSRV_DEV_POWER_STATE, *PPVRSRV_DEV_POWER_STATE;    \r
-\r
-\r
-typedef PVRSRV_ERROR (*PFN_PRE_POWER) (IMG_HANDLE                              hDevHandle,\r
-                                                                          PVRSRV_DEV_POWER_STATE       eNewPowerState,\r
-                                                                          PVRSRV_DEV_POWER_STATE       eCurrentPowerState);\r
-typedef PVRSRV_ERROR (*PFN_POST_POWER) (IMG_HANDLE                             hDevHandle,\r
-                                                                               PVRSRV_DEV_POWER_STATE  eNewPowerState,\r
-                                                                               PVRSRV_DEV_POWER_STATE  eCurrentPowerState);\r
-\r
-typedef PVRSRV_ERROR (*PFN_PRE_CLOCKSPEED_CHANGE) (IMG_HANDLE                          hDevHandle,\r
-                                                                                                  IMG_BOOL                                     bIdleDevice,\r
-                                                                                                  PVRSRV_DEV_POWER_STATE       eCurrentPowerState);\r
-typedef PVRSRV_ERROR (*PFN_POST_CLOCKSPEED_CHANGE) (IMG_HANDLE                         hDevHandle,\r
-                                                                                                       IMG_BOOL                                bIdleDevice,\r
-                                                                                                       PVRSRV_DEV_POWER_STATE  eCurrentPowerState);\r
-\r
-\r
-typedef enum _PVRSRV_PIXEL_FORMAT_ {\r
-       \r
-       PVRSRV_PIXEL_FORMAT_UNKNOWN                             =  0,\r
-       PVRSRV_PIXEL_FORMAT_RGB565                              =  1,\r
-       PVRSRV_PIXEL_FORMAT_RGB555                              =  2,\r
-       PVRSRV_PIXEL_FORMAT_RGB888                              =  3,   \r
-       PVRSRV_PIXEL_FORMAT_BGR888                              =  4,   \r
-       PVRSRV_PIXEL_FORMAT_GREY_SCALE                  =  8,\r
-       PVRSRV_PIXEL_FORMAT_PAL12                               = 13,\r
-       PVRSRV_PIXEL_FORMAT_PAL8                                = 14,\r
-       PVRSRV_PIXEL_FORMAT_PAL4                                = 15,\r
-       PVRSRV_PIXEL_FORMAT_PAL2                                = 16,\r
-       PVRSRV_PIXEL_FORMAT_PAL1                                = 17,\r
-       PVRSRV_PIXEL_FORMAT_ARGB1555                    = 18,\r
-       PVRSRV_PIXEL_FORMAT_ARGB4444                    = 19,\r
-       PVRSRV_PIXEL_FORMAT_ARGB8888                    = 20,\r
-       PVRSRV_PIXEL_FORMAT_ABGR8888                    = 21,\r
-       PVRSRV_PIXEL_FORMAT_YV12                                = 22,\r
-       PVRSRV_PIXEL_FORMAT_I420                                = 23,\r
-    PVRSRV_PIXEL_FORMAT_IMC2                           = 25,\r
-       PVRSRV_PIXEL_FORMAT_XRGB8888                    = 26,\r
-       PVRSRV_PIXEL_FORMAT_XBGR8888                    = 27,\r
-       PVRSRV_PIXEL_FORMAT_BGRA8888                    = 28,\r
-       PVRSRV_PIXEL_FORMAT_XRGB4444                    = 29,\r
-       PVRSRV_PIXEL_FORMAT_ARGB8332                    = 30,\r
-       PVRSRV_PIXEL_FORMAT_A2RGB10                             = 31,   \r
-       PVRSRV_PIXEL_FORMAT_A2BGR10                             = 32,   \r
-       PVRSRV_PIXEL_FORMAT_P8                                  = 33,\r
-       PVRSRV_PIXEL_FORMAT_L8                                  = 34,\r
-       PVRSRV_PIXEL_FORMAT_A8L8                                = 35,\r
-       PVRSRV_PIXEL_FORMAT_A4L4                                = 36,\r
-       PVRSRV_PIXEL_FORMAT_L16                                 = 37,\r
-       PVRSRV_PIXEL_FORMAT_L6V5U5                              = 38,\r
-       PVRSRV_PIXEL_FORMAT_V8U8                                = 39,\r
-       PVRSRV_PIXEL_FORMAT_V16U16                              = 40,\r
-       PVRSRV_PIXEL_FORMAT_QWVU8888                    = 41,\r
-       PVRSRV_PIXEL_FORMAT_XLVU8888                    = 42,\r
-       PVRSRV_PIXEL_FORMAT_QWVU16                              = 43,\r
-       PVRSRV_PIXEL_FORMAT_D16                                 = 44,\r
-       PVRSRV_PIXEL_FORMAT_D24S8                               = 45,\r
-       PVRSRV_PIXEL_FORMAT_D24X8                               = 46,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_ABGR16                              = 47,\r
-       PVRSRV_PIXEL_FORMAT_ABGR16F                             = 48,\r
-       PVRSRV_PIXEL_FORMAT_ABGR32                              = 49,\r
-       PVRSRV_PIXEL_FORMAT_ABGR32F                             = 50,\r
-       PVRSRV_PIXEL_FORMAT_B10GR11                             = 51,\r
-       PVRSRV_PIXEL_FORMAT_GR88                                = 52,\r
-       PVRSRV_PIXEL_FORMAT_BGR32                               = 53,\r
-       PVRSRV_PIXEL_FORMAT_GR32                                = 54,\r
-       PVRSRV_PIXEL_FORMAT_E5BGR9                              = 55,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_RESERVED1                   = 56,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED2                   = 57,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED3                   = 58,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED4                   = 59,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED5                   = 60,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_R8G8_B8G8                   = 61,\r
-       PVRSRV_PIXEL_FORMAT_G8R8_G8B8                   = 62,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_NV11                                = 63,\r
-       PVRSRV_PIXEL_FORMAT_NV12                                = 64,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_YUY2                                = 65,\r
-       PVRSRV_PIXEL_FORMAT_YUV420                              = 66,\r
-       PVRSRV_PIXEL_FORMAT_YUV444                              = 67,\r
-       PVRSRV_PIXEL_FORMAT_VUY444                              = 68,\r
-       PVRSRV_PIXEL_FORMAT_YUYV                                = 69,\r
-       PVRSRV_PIXEL_FORMAT_YVYU                                = 70,\r
-       PVRSRV_PIXEL_FORMAT_UYVY                                = 71,\r
-       PVRSRV_PIXEL_FORMAT_VYUY                                = 72,\r
-\r
-       PVRSRV_PIXEL_FORMAT_FOURCC_ORG_UYVY             = 73,   \r
-       PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YUYV             = 74,   \r
-       PVRSRV_PIXEL_FORMAT_FOURCC_ORG_YVYU             = 75,   \r
-       PVRSRV_PIXEL_FORMAT_FOURCC_ORG_VYUY             = 76,   \r
-       PVRSRV_PIXEL_FORMAT_FOURCC_ORG_AYUV             = 77,   \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_A32B32G32R32                = 78,   \r
-       PVRSRV_PIXEL_FORMAT_A32B32G32R32F               = 79,   \r
-       PVRSRV_PIXEL_FORMAT_A32B32G32R32_UINT   = 80,   \r
-       PVRSRV_PIXEL_FORMAT_A32B32G32R32_SINT   = 81,   \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_B32G32R32                   = 82,   \r
-       PVRSRV_PIXEL_FORMAT_B32G32R32F                  = 83,   \r
-       PVRSRV_PIXEL_FORMAT_B32G32R32_UINT              = 84,   \r
-       PVRSRV_PIXEL_FORMAT_B32G32R32_SINT              = 85,   \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_G32R32                              = 86,   \r
-       PVRSRV_PIXEL_FORMAT_G32R32F                             = 87,   \r
-       PVRSRV_PIXEL_FORMAT_G32R32_UINT                 = 88,   \r
-       PVRSRV_PIXEL_FORMAT_G32R32_SINT                 = 89,   \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_D32F                                = 90,   \r
-       PVRSRV_PIXEL_FORMAT_R32                                 = 91,   \r
-       PVRSRV_PIXEL_FORMAT_R32F                                = 92,   \r
-       PVRSRV_PIXEL_FORMAT_R32_UINT                    = 93,   \r
-       PVRSRV_PIXEL_FORMAT_R32_SINT                    = 94,   \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_A16B16G16R16                = 95,   \r
-       PVRSRV_PIXEL_FORMAT_A16B16G16R16F               = 96,   \r
-       PVRSRV_PIXEL_FORMAT_A16B16G16R16_SINT   = 97,   \r
-       PVRSRV_PIXEL_FORMAT_A16B16G16R16_SNORM  = 98,   \r
-       PVRSRV_PIXEL_FORMAT_A16B16G16R16_UINT   = 99,   \r
-       PVRSRV_PIXEL_FORMAT_A16B16G16R16_UNORM  = 100,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_G16R16                              = 101,  \r
-       PVRSRV_PIXEL_FORMAT_G16R16F                             = 102,  \r
-       PVRSRV_PIXEL_FORMAT_G16R16_UINT                 = 103,  \r
-       PVRSRV_PIXEL_FORMAT_G16R16_UNORM                = 104,  \r
-       PVRSRV_PIXEL_FORMAT_G16R16_SINT                 = 105,  \r
-       PVRSRV_PIXEL_FORMAT_G16R16_SNORM                = 106,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_R16                                 = 107,  \r
-       PVRSRV_PIXEL_FORMAT_R16F                                = 108,  \r
-       PVRSRV_PIXEL_FORMAT_R16_UINT                    = 109,  \r
-       PVRSRV_PIXEL_FORMAT_R16_UNORM                   = 110,  \r
-       PVRSRV_PIXEL_FORMAT_R16_SINT                    = 111,  \r
-       PVRSRV_PIXEL_FORMAT_R16_SNORM                   = 112,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_X8R8G8B8                    = 113,  \r
-       PVRSRV_PIXEL_FORMAT_X8R8G8B8_UNORM              = 114,  \r
-       PVRSRV_PIXEL_FORMAT_X8R8G8B8_UNORM_SRGB = 115,  \r
-\r
-       PVRSRV_PIXEL_FORMAT_A8R8G8B8                    = 116,  \r
-       PVRSRV_PIXEL_FORMAT_A8R8G8B8_UNORM              = 117,  \r
-       PVRSRV_PIXEL_FORMAT_A8R8G8B8_UNORM_SRGB = 118,  \r
-\r
-       PVRSRV_PIXEL_FORMAT_A8B8G8R8                    = 119,  \r
-       PVRSRV_PIXEL_FORMAT_A8B8G8R8_UINT               = 120,  \r
-       PVRSRV_PIXEL_FORMAT_A8B8G8R8_UNORM              = 121,  \r
-       PVRSRV_PIXEL_FORMAT_A8B8G8R8_UNORM_SRGB = 122,  \r
-       PVRSRV_PIXEL_FORMAT_A8B8G8R8_SINT               = 123,  \r
-       PVRSRV_PIXEL_FORMAT_A8B8G8R8_SNORM              = 124,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_G8R8                                = 125,  \r
-       PVRSRV_PIXEL_FORMAT_G8R8_UINT                   = 126,  \r
-       PVRSRV_PIXEL_FORMAT_G8R8_UNORM                  = 127,  \r
-       PVRSRV_PIXEL_FORMAT_G8R8_SINT                   = 128,  \r
-       PVRSRV_PIXEL_FORMAT_G8R8_SNORM                  = 129,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_A8                                  = 130,  \r
-       PVRSRV_PIXEL_FORMAT_R8                                  = 131,  \r
-       PVRSRV_PIXEL_FORMAT_R8_UINT                             = 132,  \r
-       PVRSRV_PIXEL_FORMAT_R8_UNORM                    = 133,  \r
-       PVRSRV_PIXEL_FORMAT_R8_SINT                             = 134,  \r
-       PVRSRV_PIXEL_FORMAT_R8_SNORM                    = 135,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_A2B10G10R10                 = 136,  \r
-       PVRSRV_PIXEL_FORMAT_A2B10G10R10_UNORM   = 137,  \r
-       PVRSRV_PIXEL_FORMAT_A2B10G10R10_UINT    = 138,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_B10G11R11                   = 139,  \r
-       PVRSRV_PIXEL_FORMAT_B10G11R11F                  = 140,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_X24G8R32                    = 141,  \r
-       PVRSRV_PIXEL_FORMAT_G8R24                               = 142,  \r
-       PVRSRV_PIXEL_FORMAT_X8R24                               = 143,\r
-       PVRSRV_PIXEL_FORMAT_E5B9G9R9                    = 144,  \r
-       PVRSRV_PIXEL_FORMAT_R1                                  = 145,  \r
-\r
-       PVRSRV_PIXEL_FORMAT_RESERVED6                   = 146,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED7                   = 147,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED8                   = 148,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED9                   = 149,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED10                  = 150,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED11                  = 151,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED12                  = 152,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED13                  = 153,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED14                  = 154,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED15                  = 155,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED16                  = 156,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED17                  = 157,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED18                  = 158,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED19                  = 159,\r
-       PVRSRV_PIXEL_FORMAT_RESERVED20                  = 160,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_UBYTE4                              = 161,  \r
-       PVRSRV_PIXEL_FORMAT_SHORT4                              = 162,  \r
-       PVRSRV_PIXEL_FORMAT_SHORT4N                             = 163,  \r
-       PVRSRV_PIXEL_FORMAT_USHORT4N                    = 164,  \r
-       PVRSRV_PIXEL_FORMAT_SHORT2N                             = 165,  \r
-       PVRSRV_PIXEL_FORMAT_SHORT2                              = 166,  \r
-       PVRSRV_PIXEL_FORMAT_USHORT2N                    = 167,  \r
-       PVRSRV_PIXEL_FORMAT_UDEC3                               = 168,  \r
-       PVRSRV_PIXEL_FORMAT_DEC3N                               = 169,  \r
-       PVRSRV_PIXEL_FORMAT_F16_2                               = 170,  \r
-       PVRSRV_PIXEL_FORMAT_F16_4                               = 171,  \r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_L_F16                               = 172,\r
-       PVRSRV_PIXEL_FORMAT_L_F16_REP                   = 173,\r
-       PVRSRV_PIXEL_FORMAT_L_F16_A_F16                 = 174,\r
-       PVRSRV_PIXEL_FORMAT_A_F16                               = 175,\r
-       PVRSRV_PIXEL_FORMAT_B16G16R16F                  = 176,\r
-\r
-       PVRSRV_PIXEL_FORMAT_L_F32                               = 177,\r
-       PVRSRV_PIXEL_FORMAT_A_F32                               = 178,\r
-       PVRSRV_PIXEL_FORMAT_L_F32_A_F32                 = 179,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_PVRTC2                              = 180,\r
-       PVRSRV_PIXEL_FORMAT_PVRTC4                              = 181,\r
-       PVRSRV_PIXEL_FORMAT_PVRTCII2                    = 182,\r
-       PVRSRV_PIXEL_FORMAT_PVRTCII4                    = 183,\r
-       PVRSRV_PIXEL_FORMAT_PVRTCIII                    = 184,\r
-       PVRSRV_PIXEL_FORMAT_PVRO8                               = 185,\r
-       PVRSRV_PIXEL_FORMAT_PVRO88                              = 186,\r
-       PVRSRV_PIXEL_FORMAT_PT1                                 = 187,\r
-       PVRSRV_PIXEL_FORMAT_PT2                                 = 188,\r
-       PVRSRV_PIXEL_FORMAT_PT4                                 = 189,\r
-       PVRSRV_PIXEL_FORMAT_PT8                                 = 190,\r
-       PVRSRV_PIXEL_FORMAT_PTW                                 = 191,\r
-       PVRSRV_PIXEL_FORMAT_PTB                                 = 192,\r
-       PVRSRV_PIXEL_FORMAT_MONO8                               = 193,\r
-       PVRSRV_PIXEL_FORMAT_MONO16                              = 194,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_C0_YUYV                             = 195,\r
-       PVRSRV_PIXEL_FORMAT_C0_UYVY                             = 196,\r
-       PVRSRV_PIXEL_FORMAT_C0_YVYU                             = 197,\r
-       PVRSRV_PIXEL_FORMAT_C0_VYUY                             = 198,\r
-       PVRSRV_PIXEL_FORMAT_C1_YUYV                             = 199,\r
-       PVRSRV_PIXEL_FORMAT_C1_UYVY                             = 200,\r
-       PVRSRV_PIXEL_FORMAT_C1_YVYU                             = 201,\r
-       PVRSRV_PIXEL_FORMAT_C1_VYUY                             = 202,\r
-\r
-       \r
-       PVRSRV_PIXEL_FORMAT_C0_YUV420_2P_UV             = 203,\r
-       PVRSRV_PIXEL_FORMAT_C0_YUV420_2P_VU             = 204,\r
-       PVRSRV_PIXEL_FORMAT_C0_YUV420_3P                = 205,\r
-       PVRSRV_PIXEL_FORMAT_C1_YUV420_2P_UV             = 206,\r
-       PVRSRV_PIXEL_FORMAT_C1_YUV420_2P_VU             = 207,\r
-       PVRSRV_PIXEL_FORMAT_C1_YUV420_3P                = 208,\r
-\r
-       PVRSRV_PIXEL_FORMAT_A2B10G10R10F                = 209,\r
-       PVRSRV_PIXEL_FORMAT_B8G8R8_SINT                 = 210,\r
-       PVRSRV_PIXEL_FORMAT_PVRF32SIGNMASK              = 211,\r
-       \r
-       PVRSRV_PIXEL_FORMAT_ABGR4444                    = 212,  \r
-       PVRSRV_PIXEL_FORMAT_ABGR1555                    = 213,\r
-       PVRSRV_PIXEL_FORMAT_BGR565                              = 214,                  \r
-\r
-       PVRSRV_PIXEL_FORMAT_FORCE_I32                   = 0x7fffffff\r
-\r
-} PVRSRV_PIXEL_FORMAT;\r
-\r
-typedef enum _PVRSRV_ALPHA_FORMAT_ {\r
-       PVRSRV_ALPHA_FORMAT_UNKNOWN             =  0x00000000,\r
-       PVRSRV_ALPHA_FORMAT_PRE                 =  0x00000001,\r
-       PVRSRV_ALPHA_FORMAT_NONPRE              =  0x00000002,\r
-       PVRSRV_ALPHA_FORMAT_MASK                =  0x0000000F,\r
-} PVRSRV_ALPHA_FORMAT;\r
-\r
-typedef enum _PVRSRV_COLOURSPACE_FORMAT_ {\r
-       PVRSRV_COLOURSPACE_FORMAT_UNKNOWN               =  0x00000000,\r
-       PVRSRV_COLOURSPACE_FORMAT_LINEAR                =  0x00010000,\r
-       PVRSRV_COLOURSPACE_FORMAT_NONLINEAR             =  0x00020000,\r
-       PVRSRV_COLOURSPACE_FORMAT_MASK                  =  0x000F0000,\r
-} PVRSRV_COLOURSPACE_FORMAT;\r
-\r
-\r
-typedef enum _PVRSRV_ROTATION_ {\r
-       PVRSRV_ROTATE_0         =       0,\r
-       PVRSRV_ROTATE_90        =       1,\r
-       PVRSRV_ROTATE_180       =       2,\r
-       PVRSRV_ROTATE_270       =       3,\r
-       PVRSRV_FLIP_Y\r
-\r
-} PVRSRV_ROTATION;\r
-\r
-#define PVRSRV_CREATE_SWAPCHAIN_SHARED         (1<<0)\r
-#define PVRSRV_CREATE_SWAPCHAIN_QUERY          (1<<1)\r
-#define PVRSRV_CREATE_SWAPCHAIN_OEMOVERLAY     (1<<2)\r
-\r
-typedef struct _PVRSRV_SYNC_DATA_\r
-{\r
-       \r
-       IMG_UINT32                                      ui32WriteOpsPending;\r
-       volatile IMG_UINT32                     ui32WriteOpsComplete;\r
-\r
-       \r
-       IMG_UINT32                                      ui32ReadOpsPending;\r
-       volatile IMG_UINT32                     ui32ReadOpsComplete;\r
-\r
-       \r
-       IMG_UINT32                                      ui32LastOpDumpVal;\r
-       IMG_UINT32                                      ui32LastReadOpDumpVal;\r
-\r
-} PVRSRV_SYNC_DATA;\r
-\r
-typedef struct _PVRSRV_CLIENT_SYNC_INFO_\r
-{\r
-       \r
-       PVRSRV_SYNC_DATA                        *psSyncData;\r
-\r
-       \r
-\r
-\r
-       \r
-       IMG_DEV_VIRTADDR                sWriteOpsCompleteDevVAddr;\r
-\r
-       \r
-       IMG_DEV_VIRTADDR                sReadOpsCompleteDevVAddr;\r
-\r
-       \r
-       IMG_HANDLE                                      hMappingInfo;\r
-\r
-       \r
-       IMG_HANDLE                                      hKernelSyncInfo;\r
-\r
-} PVRSRV_CLIENT_SYNC_INFO, *PPVRSRV_CLIENT_SYNC_INFO;\r
-\r
-typedef struct PVRSRV_RESOURCE_TAG\r
-{\r
-       volatile IMG_UINT32 ui32Lock;\r
-       IMG_UINT32                      ui32ID;\r
-}PVRSRV_RESOURCE;\r
-typedef PVRSRV_RESOURCE PVRSRV_RES_HANDLE;\r
-\r
-\r
-typedef IMG_VOID (*PFN_CMD_COMPLETE) (IMG_HANDLE);\r
-typedef IMG_VOID (**PPFN_CMD_COMPLETE) (IMG_HANDLE);\r
-\r
-typedef IMG_BOOL (*PFN_CMD_PROC) (IMG_HANDLE, IMG_UINT32, IMG_VOID*);\r
-typedef IMG_BOOL (**PPFN_CMD_PROC) (IMG_HANDLE, IMG_UINT32, IMG_VOID*);\r
-\r
-\r
-typedef struct _IMG_RECT_\r
-{\r
-       IMG_INT32       x0;\r
-       IMG_INT32       y0;\r
-       IMG_INT32       x1;\r
-       IMG_INT32       y1;\r
-}IMG_RECT;\r
-\r
-typedef struct _IMG_RECT_16_\r
-{\r
-       IMG_INT16       x0;\r
-       IMG_INT16       y0;\r
-       IMG_INT16       x1;\r
-       IMG_INT16       y1;\r
-}IMG_RECT_16;\r
-\r
-\r
-typedef PVRSRV_ERROR (*PFN_GET_BUFFER_ADDR)(IMG_HANDLE,\r
-                                                                                       IMG_HANDLE,\r
-                                                                                       IMG_SYS_PHYADDR**,\r
-                                                                                       IMG_SIZE_T*,\r
-                                                                                       IMG_VOID**,\r
-                                                                                       IMG_HANDLE*,\r
-                                                                                       IMG_BOOL*,\r
-                                                                                       IMG_UINT32*);\r
-\r
-\r
-typedef struct DISPLAY_DIMS_TAG\r
-{\r
-       IMG_UINT32      ui32ByteStride;\r
-       IMG_UINT32      ui32Width;\r
-       IMG_UINT32      ui32Height;\r
-} DISPLAY_DIMS;\r
-\r
-\r
-typedef struct DISPLAY_FORMAT_TAG\r
-{\r
-       \r
-       PVRSRV_PIXEL_FORMAT             pixelformat;\r
-} DISPLAY_FORMAT;\r
-\r
-typedef struct DISPLAY_SURF_ATTRIBUTES_TAG\r
-{\r
-       \r
-       PVRSRV_PIXEL_FORMAT             pixelformat;\r
-       \r
-       DISPLAY_DIMS                    sDims;\r
-} DISPLAY_SURF_ATTRIBUTES;\r
-\r
-\r
-typedef struct DISPLAY_MODE_INFO_TAG\r
-{\r
-       \r
-       PVRSRV_PIXEL_FORMAT             pixelformat;\r
-       \r
-       DISPLAY_DIMS                    sDims;\r
-       \r
-       IMG_UINT32                              ui32RefreshHZ;\r
-       \r
-       IMG_UINT32                              ui32OEMFlags;\r
-} DISPLAY_MODE_INFO;\r
-\r
-\r
-\r
-#define MAX_DISPLAY_NAME_SIZE  (50) \r
-\r
-typedef struct DISPLAY_INFO_TAG\r
-{\r
-       \r
-       IMG_UINT32 ui32MaxSwapChains;\r
-       \r
-       IMG_UINT32 ui32MaxSwapChainBuffers;\r
-       \r
-       IMG_UINT32 ui32MinSwapInterval;\r
-       \r
-       IMG_UINT32 ui32MaxSwapInterval;\r
-       \r
-       IMG_UINT32 ui32PhysicalWidthmm;\r
-       IMG_UINT32 ui32PhysicalHeightmm;\r
-       \r
-       IMG_CHAR        szDisplayName[MAX_DISPLAY_NAME_SIZE];\r
-#if defined(SUPPORT_HW_CURSOR)\r
-       \r
-       IMG_UINT16      ui32CursorWidth;\r
-       IMG_UINT16      ui32CursorHeight;\r
-#endif\r
-} DISPLAY_INFO;\r
-\r
-typedef struct ACCESS_INFO_TAG\r
-{\r
-       IMG_UINT32              ui32Size;\r
-       IMG_UINT32      ui32FBPhysBaseAddress;\r
-       IMG_UINT32              ui32FBMemAvailable;                     \r
-       IMG_UINT32      ui32SysPhysBaseAddress;\r
-       IMG_UINT32              ui32SysSize;\r
-       IMG_UINT32              ui32DevIRQ;\r
-}ACCESS_INFO;\r
-\r
-\r
-typedef struct PVRSRV_CURSOR_SHAPE_TAG\r
-{\r
-       IMG_UINT16                      ui16Width;\r
-       IMG_UINT16                      ui16Height;\r
-       IMG_INT16                       i16XHot;\r
-       IMG_INT16                       i16YHot;\r
-\r
-       \r
-       IMG_VOID*               pvMask;\r
-       IMG_INT16                       i16MaskByteStride;\r
-\r
-       \r
-       IMG_VOID*                       pvColour;\r
-       IMG_INT16                       i16ColourByteStride;\r
-       PVRSRV_PIXEL_FORMAT     eColourPixelFormat;\r
-} PVRSRV_CURSOR_SHAPE;\r
-\r
-#define PVRSRV_SET_CURSOR_VISIBILITY   (1<<0)\r
-#define PVRSRV_SET_CURSOR_POSITION             (1<<1)\r
-#define PVRSRV_SET_CURSOR_SHAPE                        (1<<2)\r
-#define PVRSRV_SET_CURSOR_ROTATION             (1<<3)\r
-\r
-typedef struct PVRSRV_CURSOR_INFO_TAG\r
-{\r
-       \r
-       IMG_UINT32 ui32Flags;\r
-\r
-       \r
-       IMG_BOOL bVisible;\r
-\r
-       \r
-       IMG_INT16 i16XPos;\r
-       IMG_INT16 i16YPos;\r
-\r
-       \r
-       PVRSRV_CURSOR_SHAPE sCursorShape;\r
-\r
-       \r
-       IMG_UINT32 ui32Rotation;\r
-\r
-} PVRSRV_CURSOR_INFO;\r
-\r
-\r
-typedef struct _PVRSRV_REGISTRY_INFO_\r
-{\r
-    IMG_UINT32         ui32DevCookie;\r
-    IMG_PCHAR          pszKey;\r
-    IMG_PCHAR          pszValue;\r
-    IMG_PCHAR          pszBuf;\r
-    IMG_UINT32         ui32BufSize;\r
-} PVRSRV_REGISTRY_INFO, *PPVRSRV_REGISTRY_INFO;\r
-\r
-\r
-PVRSRV_ERROR IMG_CALLCONV PVRSRVReadRegistryString (PPVRSRV_REGISTRY_INFO psRegInfo);\r
-PVRSRV_ERROR IMG_CALLCONV PVRSRVWriteRegistryString (PPVRSRV_REGISTRY_INFO psRegInfo);\r
-\r
-\r
-#define PVRSRV_BC_FLAGS_YUVCSC_CONFORMANT_RANGE        (0 << 0)\r
-#define PVRSRV_BC_FLAGS_YUVCSC_FULL_RANGE              (1 << 0)\r
-\r
-#define PVRSRV_BC_FLAGS_YUVCSC_BT601                   (0 << 1)\r
-#define PVRSRV_BC_FLAGS_YUVCSC_BT709                   (1 << 1)\r
-\r
-#define MAX_BUFFER_DEVICE_NAME_SIZE    (50) \r
-\r
-typedef struct BUFFER_INFO_TAG\r
-{\r
-       IMG_UINT32                      ui32BufferCount;\r
-       IMG_UINT32                      ui32BufferDeviceID;\r
-       PVRSRV_PIXEL_FORMAT     pixelformat;\r
-       IMG_UINT32                      ui32ByteStride;\r
-       IMG_UINT32                      ui32Width;\r
-       IMG_UINT32                      ui32Height;\r
-       IMG_UINT32                      ui32Flags;\r
-       IMG_CHAR                        szDeviceName[MAX_BUFFER_DEVICE_NAME_SIZE];\r
-} BUFFER_INFO;\r
-\r
-typedef enum _OVERLAY_DEINTERLACE_MODE_\r
-{\r
-       WEAVE=0x0,\r
-       BOB_ODD,\r
-       BOB_EVEN,\r
-       BOB_EVEN_NONINTERLEAVED\r
-} OVERLAY_DEINTERLACE_MODE;\r
-\r
-#endif \r
diff --git a/sys/pvr2d/pvr_includes/wsegl.h b/sys/pvr2d/pvr_includes/wsegl.h
deleted file mode 100644 (file)
index e5191ec..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/**********************************************************************\r
-*\r
-* Copyright(c) Imagination Technologies Ltd.\r
-*\r
-* The contents of this file are subject to the MIT license as set out below.\r
-*\r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"),\r
-* to deal in the Software without restriction, including without limitation\r
-* the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-* and/or sell copies of the Software, and to permit persons to whom the\r
-* Software is furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included\r
-* in all copies or substantial portions of the Software.\r
-*\r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT\r
-* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\r
-* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-* \r
-* This License is also included in this distribution in the file called \r
-* "COPYING".\r
-* \r
-******************************************************************************/\r
-\r
-\r
-\r
-#if !defined(__WSEGL_H__)\r
-#define __WSEGL_H__\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif \r
-\r
-/*\r
-// WSEGL Platform-specific definitions\r
-*/\r
-#if defined(__linux__)\r
-#define WSEGL_EXPORT __attribute__((visibility("default")))\r
-#define WSEGL_IMPORT\r
-#else\r
-#define WSEGL_EXPORT\r
-#define WSEGL_IMPORT\r
-#endif\r
-\r
-/*\r
-// WSEGL API Version Number\r
-*/\r
-\r
-#define WSEGL_VERSION 2\r
-#define WSEGL_DEFAULT_DISPLAY 0\r
-#define WSEGL_DEFAULT_NATIVE_ENGINE 0\r
-\r
-#define WSEGL_FALSE            0\r
-#define WSEGL_TRUE             1\r
-#define WSEGL_NULL             0\r
-\r
-#define        WSEGL_UNREFERENCED_PARAMETER(param) (param) = (param)\r
-\r
-/*\r
-// WSEGL handles\r
-*/\r
-typedef void *WSEGLDisplayHandle;\r
-typedef void *WSEGLDrawableHandle;\r
-\r
-/*\r
-// Display capability type\r
-*/\r
-typedef enum WSEGLCapsType_TAG\r
-{\r
-       WSEGL_NO_CAPS = 0,\r
-       WSEGL_CAP_MIN_SWAP_INTERVAL = 1, /* System default value = 1 */\r
-       WSEGL_CAP_MAX_SWAP_INTERVAL = 2, /* System default value = 1 */\r
-       WSEGL_CAP_WINDOWS_USE_HW_SYNC = 3, /* System default value = 0 (FALSE) */\r
-       WSEGL_CAP_PIXMAPS_USE_HW_SYNC = 4, /* System default value = 0 (FALSE) */\r
-\r
-} WSEGLCapsType;\r
-\r
-/*\r
-// Display capability\r
-*/\r
-typedef struct WSEGLCaps_TAG\r
-{\r
-       WSEGLCapsType eCapsType;\r
-       unsigned long ui32CapsValue;\r
-\r
-} WSEGLCaps;\r
-\r
-/*\r
-// Drawable type\r
-*/\r
-#define WSEGL_NO_DRAWABLE                      0x0\r
-#define WSEGL_DRAWABLE_WINDOW          0x1\r
-#define WSEGL_DRAWABLE_PIXMAP          0x2\r
-\r
-\r
-/*\r
-// Pixel format of display/drawable\r
-*/\r
-typedef enum WSEGLPixelFormat_TAG\r
-{\r
-       /* These must not be re-ordered */\r
-       WSEGL_PIXELFORMAT_RGB565        = 0,\r
-       WSEGL_PIXELFORMAT_ARGB4444      = 1,\r
-       WSEGL_PIXELFORMAT_ARGB8888      = 2,\r
-       WSEGL_PIXELFORMAT_ARGB1555      = 3,\r
-       WSEGL_PIXELFORMAT_ABGR8888      = 4,\r
-       WSEGL_PIXELFORMAT_XBGR8888      = 5,\r
-\r
-       /* These are compatibility names only; new WSEGL\r
-        * modules should not use them.\r
-        */\r
-       WSEGL_PIXELFORMAT_565           = WSEGL_PIXELFORMAT_RGB565,\r
-       WSEGL_PIXELFORMAT_4444          = WSEGL_PIXELFORMAT_ARGB4444,\r
-       WSEGL_PIXELFORMAT_8888          = WSEGL_PIXELFORMAT_ARGB8888,\r
-       WSEGL_PIXELFORMAT_1555          = WSEGL_PIXELFORMAT_ARGB1555,\r
-\r
-} WSEGLPixelFormat;\r
-\r
-/*\r
-// Transparent of display/drawable\r
-*/\r
-typedef enum WSEGLTransparentType_TAG\r
-{\r
-       WSEGL_OPAQUE = 0,\r
-       WSEGL_COLOR_KEY = 1,\r
-\r
-} WSEGLTransparentType;\r
-\r
-/*\r
-// Display/drawable configuration\r
-*/\r
-typedef struct WSEGLConfig_TAG\r
-{\r
-       /*\r
-       // Type of drawables this configuration applies to -\r
-       // OR'd values of drawable types. \r
-       */\r
-       unsigned long ui32DrawableType;\r
-\r
-       /* Pixel format */\r
-       WSEGLPixelFormat ePixelFormat;\r
-\r
-       /* Native Renderable  - set to WSEGL_TRUE if native renderable */\r
-       unsigned long ulNativeRenderable;\r
-\r
-       /* FrameBuffer Level Parameter */\r
-       unsigned long ulFrameBufferLevel;\r
-\r
-       /* Native Visual ID */\r
-       unsigned long ulNativeVisualID;\r
-\r
-       /* Native Visual */\r
-       void *hNativeVisual;\r
-\r
-       /* Transparent Type */\r
-       WSEGLTransparentType eTransparentType;\r
-\r
-       /* Transparent Color - only used if transparent type is COLOR_KEY */\r
-       unsigned long ulTransparentColor; /* packed as 0x00RRGGBB */\r
-\r
-\r
-} WSEGLConfig;\r
-\r
-/*\r
-// WSEGL errors\r
-*/\r
-typedef enum WSEGLError_TAG\r
-{\r
-       WSEGL_SUCCESS = 0,\r
-       WSEGL_CANNOT_INITIALISE = 1,\r
-       WSEGL_BAD_NATIVE_DISPLAY = 2,\r
-       WSEGL_BAD_NATIVE_WINDOW = 3,\r
-       WSEGL_BAD_NATIVE_PIXMAP = 4,\r
-       WSEGL_BAD_NATIVE_ENGINE = 5,\r
-       WSEGL_BAD_DRAWABLE = 6,\r
-       WSEGL_BAD_MATCH = 7,\r
-       WSEGL_OUT_OF_MEMORY = 8,\r
-\r
-       /* These are compatibility names only; new WSEGL\r
-        * modules should not use them.\r
-        */\r
-       WSEGL_BAD_CONFIG = WSEGL_BAD_MATCH,\r
-\r
-} WSEGLError; \r
-\r
-/*\r
-// Drawable orientation (in degrees anti-clockwise)\r
-*/\r
-typedef enum WSEGLRotationAngle_TAG\r
-{\r
-       WSEGL_ROTATE_0 = 0,\r
-       WSEGL_ROTATE_90 = 1,\r
-       WSEGL_ROTATE_180 = 2,\r
-       WSEGL_ROTATE_270 = 3\r
-\r
-} WSEGLRotationAngle; \r
-\r
-/*\r
-// Drawable information required by OpenGL-ES driver\r
-*/\r
-typedef struct WSEGLDrawableParams_TAG\r
-{\r
-       /* Width in pixels of the drawable */\r
-       unsigned long   ui32Width;\r
-\r
-       /* Height in pixels of the drawable */\r
-       unsigned long   ui32Height;\r
-\r
-       /* Stride in pixels of the drawable */\r
-       unsigned long   ui32Stride;\r
-\r
-       /* Pixel format of the drawable */\r
-       WSEGLPixelFormat        ePixelFormat;\r
-\r
-       /* User space cpu virtual address of the drawable */\r
-       void                    *pvLinearAddress;\r
-\r
-       /* HW address of the drawable */\r
-       unsigned long   ui32HWAddress;\r
-\r
-       /* Private data for the drawable */\r
-       void                    *hPrivateData;\r
-\r
-\r
-} WSEGLDrawableParams;\r
-\r
-\r
-/*\r
-// Table of function pointers that is returned by WSEGL_GetFunctionTablePointer()\r
-//\r
-// The first entry in the table is the version number of the wsegl.h header file that\r
-// the module has been written against, and should therefore be set to WSEGL_VERSION\r
-*/\r
-typedef struct WSEGL_FunctionTable_TAG\r
-{\r
-       unsigned long ui32WSEGLVersion;\r
-\r
-       WSEGLError (*pfnWSEGL_IsDisplayValid)(NativeDisplayType);\r
-\r
-       WSEGLError (*pfnWSEGL_InitialiseDisplay)(NativeDisplayType, WSEGLDisplayHandle *, const WSEGLCaps **, WSEGLConfig **);\r
-\r
-       WSEGLError (*pfnWSEGL_CloseDisplay)(WSEGLDisplayHandle);\r
-\r
-       WSEGLError (*pfnWSEGL_CreateWindowDrawable)(WSEGLDisplayHandle, WSEGLConfig *, WSEGLDrawableHandle *, NativeWindowType, WSEGLRotationAngle *);\r
-\r
-       WSEGLError (*pfnWSEGL_CreatePixmapDrawable)(WSEGLDisplayHandle, WSEGLConfig *, WSEGLDrawableHandle *, NativePixmapType, WSEGLRotationAngle *);\r
-\r
-       WSEGLError (*pfnWSEGL_DeleteDrawable)(WSEGLDrawableHandle);\r
-\r
-       WSEGLError (*pfnWSEGL_SwapDrawable)(WSEGLDrawableHandle, unsigned long);\r
-\r
-       WSEGLError (*pfnWSEGL_SwapControlInterval)(WSEGLDrawableHandle, unsigned long);\r
-\r
-       WSEGLError (*pfnWSEGL_WaitNative)(WSEGLDrawableHandle, unsigned long);\r
-\r
-       WSEGLError (*pfnWSEGL_CopyFromDrawable)(WSEGLDrawableHandle, NativePixmapType);\r
-\r
-       WSEGLError (*pfnWSEGL_CopyFromPBuffer)(void *, unsigned long, unsigned long, unsigned long, WSEGLPixelFormat, NativePixmapType);\r
-\r
-       WSEGLError (*pfnWSEGL_GetDrawableParameters)(WSEGLDrawableHandle, WSEGLDrawableParams *, WSEGLDrawableParams *);\r
-\r
-       WSEGLError (*pfnWSEGL_ConnectDrawable)(WSEGLDrawableHandle);\r
-\r
-       WSEGLError (*pfnWSEGL_DisconnectDrawable)(WSEGLDrawableHandle);\r
-\r
-\r
-} WSEGL_FunctionTable;\r
-\r
-\r
-WSEGL_IMPORT const WSEGL_FunctionTable *WSEGL_GetFunctionTablePointer(void);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif \r
-\r
-#endif /* __WSEGL_H__ */\r
-\r
-/******************************************************************************\r
- End of file (wsegl.h)\r
-******************************************************************************/\r
diff --git a/sys/qcam/Makefile.am b/sys/qcam/Makefile.am
deleted file mode 100644 (file)
index 3843ae8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-plugin_LTLIBRARIES = libgstqcam.la
-
-EXTRA_DIST = qcam-os.c qcam-Linux.c
-
-libgstqcam_la_SOURCES =        gstqcamsrc.c qcam-lib.c exposure.c
-libgstqcam_la_CFLAGS = -O2 $(GST_CFLAGS)
-libgstqcam_la_LIBADD =
-libgstqcam_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstqcam_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstqcamsrc.h qcam-os.h qcam.h qcamip.h qcam-Linux.h
diff --git a/sys/qcam/dark.c b/sys/qcam/dark.c
deleted file mode 100644 (file)
index cdfa2ab..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/******************************************************************
-
-Copyright (C) 1996 by Brian Scearce
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-and/or distribute copies of the Software, and to permit persons to whom
-the Software is furnished to do so, subject to the following conditions:
-
-1. The above copyright notice and this permission notice shall be
-   included in all copies or substantial portions of the Software.
-
-2. Redistribution for profit requires the express, written permission of
-   the author.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL BRIAN SCEARCE BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-******************************************************************/
-
-/* Fixdark
-        Routine to repair dark current artifacts in qcam output.
-        Basic idea: the Qcam CCD suffers from "dark current";
-        that is, some of the CCD pixels will leak current under
-        long exposures, even if they're in the dark, and this
-        shows up as ugly speckling on images taken in low light.
-
-        Fortunately, the leaky pixels are the same from shot to
-        shot.  So, we can figure out which pixels are leaky by
-        taking some establishing shots in the dark, and try to
-        fix those pixels on subsequent shots.  The dark
-        establishing shots need only be done once per camera.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include "qcam.h"
-#define MAX_LOOPS 10
-#define FNAME "qcam.darkfile"
-
-static unsigned char master_darkmask1[MAX_HEIGHT][MAX_WIDTH];
-static unsigned char master_darkmask2[MAX_HEIGHT / 2 + 1][MAX_WIDTH / 2 + 1];
-static unsigned char master_darkmask4[MAX_HEIGHT / 4 + 1][MAX_WIDTH / 4 + 1];
-
-/*
-int
-read_darkmask()
-{
-  int x, y;
-  int min_bright;
-  char darkfile[BUFSIZ], *p;
-  FILE *fp;
-
-  strcpy(darkfile, CONFIG_FILE);
-  if ( (p = strrchr(darkfile, '/'))) {
-    strcpy(p+1, FNAME);
-  } else {
-    strcpy(darkfile, FNAME);
-  }
-
-  if (!(fp = fopen(darkfile, "r"))) {
-#ifdef DEBUG
-    fprintf(stderr, "Can't open darkfile %s\n", darkfile);
-#endif
-    return 0;
-  }
-
-  if (fread(master_darkmask1, sizeof(unsigned char), MAX_WIDTH*MAX_HEIGHT, fp) !=
-        MAX_WIDTH*MAX_HEIGHT) {
-#ifdef DEBUG
-    fprintf(stderr, "Error reading darkfile\n");
-#endif
-    return 0;
-  }
-
-  for (y = 0; y < MAX_HEIGHT; y += 2) {
-    for (x = 0; x < MAX_WIDTH; x += 2) {
-      min_bright = master_darkmask1[y][x];
-      if (y < MAX_HEIGHT-1 && master_darkmask1[y+1][x] < min_bright)
-        min_bright = master_darkmask1[y+1][x];
-      if (x < MAX_WIDTH-1 && master_darkmask1[y][x+1] < min_bright)
-        min_bright = master_darkmask1[y][x+1];
-      if (y < MAX_HEIGHT-1 && x < MAX_WIDTH-1 && master_darkmask1[y+1][x+1] < min_bright)
-        min_bright = master_darkmask1[y+1][x+1];
-      master_darkmask2[y/2][x/2] = min_bright;
-        assert(y/2 < MAX_HEIGHT/2+1);
-        assert(x/2 < MAX_WIDTH/2+1);
-    }
-  }
-
-  for (y = 0; y < MAX_HEIGHT/2; y += 2) {
-    for (x = 0; x < MAX_WIDTH/2; x += 2) {
-      min_bright = master_darkmask2[y][x];
-      if (y < MAX_HEIGHT/2-1 && master_darkmask2[y+1][x] < min_bright)
-        min_bright = master_darkmask2[y+1][x];
-      if (x < MAX_WIDTH/2-1 && master_darkmask2[y][x+1] < min_bright)
-        min_bright = master_darkmask2[y][x+1];
-      if (y < MAX_HEIGHT/2-1 && x < MAX_WIDTH-1 && master_darkmask2[y+1][x+1] < min_bright)
-        min_bright = master_darkmask2[y+1][x+1];
-      master_darkmask4[y/2][x/2] = min_bright;
-        assert(y/2 < MAX_HEIGHT/4+1);
-        assert(x/2 < MAX_WIDTH/4+1);
-    }
-  }
-
-  fclose(fp);
-  return 1;
-}
-*/
-
-
-/* fixdark
-                We first record a list of bad leaky pixels, by making a
-                number of exposures in the dark.  master_darkmask holds
-                this information.  It's a map of the CCD.
-                master_darkmask[y][x] == val means that the pixel is
-                unreliable for brightnesses of "val" and above.
-
-                We go over the image.  If a pixel is bad, look at the
-                adjacent four pixels, average the ones that have good
-                values, and use that instead.
-*/
-
-int
-fixdark (const struct qcam *q, scanbuf * scan)
-{
-  static int init = 0;
-  static int smallest_dm = 255;
-  unsigned char darkmask[MAX_HEIGHT][MAX_WIDTH];
-  unsigned char new_image[MAX_HEIGHT][MAX_WIDTH];
-  int width, height;
-  int max_width, max_height;
-  int x, y;
-  int ccd_x, ccd_y;
-  int pixelcount, pixeltotal;
-  int again, loopcount = 0;
-  int val;
-  int brightness = q->brightness;
-  int scale = q->transfer_scale;
-
-  if (!init) {
-    if (!read_darkmask ())
-      return 0;
-    for (y = 0; y < MAX_HEIGHT; y++)
-      for (x = 0; x < MAX_HEIGHT; x++)
-        if (master_darkmask1[y][x] < smallest_dm) {
-          smallest_dm = master_darkmask1[y][x];
-#ifdef DEBUG
-          fprintf (stderr, "Smallest mask is %d at (%d, %d)\n",
-              smallest_dm, x, y);
-#endif
-        }
-    init = 1;
-  }
-
-  if (brightness < smallest_dm) {
-#ifdef DEBUG
-    fprintf (stderr,
-        "Brightness %d (dark current starts at %d), no fixup needed\n",
-        brightness, smallest_dm);
-#endif
-    return 1;
-  }
-
-  width = q->width / scale;
-  height = q->height / scale;
-
-  max_height = MAX_HEIGHT / scale;
-  max_width = MAX_WIDTH / scale;
-  for (y = 0; y < max_height; y++)
-    for (x = 0; x < max_width; x++)
-      if (scale == 1) {
-        darkmask[y][x] = master_darkmask1[y][x];
-      } else if (scale == 2) {
-        darkmask[y][x] = master_darkmask2[y][x];
-      } else if (scale == 4) {
-        darkmask[y][x] = master_darkmask4[y][x];
-      } else {
-#ifdef DEBUG
-        fprintf (stderr, "Bad transfer_scale in darkmask assignment!\n");
-#endif
-        return 0;
-      }
-
-  do {
-    again = 0;
-    ccd_y = (q->top - 1) / scale;
-    for (y = 0; y < height; y++, ccd_y++) {
-      ccd_x = q->left - 1;
-      ccd_x /= 2;
-      ccd_x *= 2;
-      ccd_x /= scale;
-      for (x = 0; x < width; x++, ccd_x++) {
-        val = scan[y * width + x];
-        if (brightness < darkmask[ccd_y][ccd_x]) {      /* good pixel */
-          new_image[y][x] = val;
-        } else {                /* bad pixel */
-          /* look at nearby pixels, average the good values */
-          pixelcount = 0;
-          pixeltotal = 0;
-          if (x > 0) {          /* left */
-            if (brightness < darkmask[ccd_y][ccd_x - 1]) {
-              pixelcount++;
-              pixeltotal += scan[y * width + x - 1];
-            }
-          }
-          if (x < width - 1) {  /* right */
-            if (brightness < darkmask[ccd_y][ccd_x + 1]) {
-              pixelcount++;
-              pixeltotal += scan[y * width + x + 1];
-            }
-          }
-          if (y > 0) {          /* above */
-            if (brightness < darkmask[ccd_y - 1][ccd_x]) {
-              pixelcount++;
-              pixeltotal += scan[(y - 1) * width + x];
-            }
-          }
-          if (y < height - 1) { /* below */
-            if (brightness < darkmask[ccd_y + 1][ccd_x]) {
-              pixelcount++;
-              pixeltotal += scan[(y + 1) * width + x];
-            }
-          }
-
-          if (pixelcount == 0) {        /* no valid neighbors! */
-            again = 1;
-          } else {
-            new_image[y][x] = pixeltotal / pixelcount;
-            /* mark this pixel as valid, so we don't loop forever */
-            darkmask[ccd_y][ccd_x] = 255;
-          }
-        }
-      }
-    }
-
-    for (y = 0; y < height; y++)
-      for (x = 0; x < width; x++)
-        scan[y * width + x] = new_image[y][x];
-
-  } while (loopcount++ < MAX_LOOPS && again);
-#ifdef DEBUG
-  fprintf (stderr, "Darkmask fix took %d loop%s\n",
-      loopcount, (loopcount == 1) ? "" : "s");
-#endif
-  return 1;
-}
diff --git a/sys/qcam/exposure.c b/sys/qcam/exposure.c
deleted file mode 100644 (file)
index 8f18e48..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-/* exposure.c
- *
- * Time-stamp: <02 Sep 96 11:52:21 HST edo@eosys.com>
- *
- * Version 0.2
- */
-
-
-/******************************************************************
-
-Copyright (C) 1996 by Ed Orcutt Systems
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, and/or distribute copies of the
-Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-1. The above copyright notice and this permission notice shall
-   be included in all copies or substantial portions of the
-   Software.
-
-2. Redistribution for profit requires the express, written
-   permission of the author.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT.  IN NO EVENT SHALL ED ORCUTT SYSTEMS BE LIABLE
-FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include "qcam.h"
-#include "qcamip.h"
-
-/* Prototypes for private (static) functions used by the routines
- * within this file.  Externally visible functions should be
- * prototyped in qcamip.h
- */
-
-static int qcip_pixel_average (struct qcam *q, scanbuf * scan);
-static int qcip_luminance_std (struct qcam *q, scanbuf * scan, int avg);
-
-/* Private data used by the auto exposure routine */
-
-static int luminance_target = -1;
-static int luminance_tolerance = 0;
-static int luminance_std_target = -1;
-static int luminance_std_tolerance = 0;
-static int ae_mode = AE_ALL_AVG;
-
-/* Calculate average pixel value for entire image */
-
-static int
-qcip_pixel_average (struct qcam *q, scanbuf * scan)
-{
-  int count = 0;
-  int sum = 0;
-  int pixels;
-  int i;
-
-  pixels = q->height / q->transfer_scale;
-  pixels *= q->width / q->transfer_scale;
-
-  for (i = 0; i < pixels; i++) {
-    sum += scan[i];
-    count++;
-  }
-  return (sum / count);
-}
-
-/* Calculate average pixel value for center of image */
-
-static int
-qcip_pixel_average_center (struct qcam *q, scanbuf * scan)
-{
-  int count = 0;
-  int sum = 0;
-  int height, width;
-  int maxrow, maxcol;
-  int i, j;
-
-  /* actual image width & height after scaling */
-  width = q->width / q->transfer_scale;
-  height = q->height / q->transfer_scale;
-
-  maxcol = width * 2 / 3;
-  maxrow = height * 2 / 3;
-
-  for (i = width / 3; i < maxcol; i++) {
-    for (j = height / 3; j < maxrow; j++) {
-      sum += scan[j * width + i];
-      count++;
-    }
-  }
-  return (sum / count);
-}
-
-int
-qcip_set_luminance_target (struct qcam *q, int val)
-{
-  const int max_pixel_val = q->bpp == 6 ? 63 : 15;
-
-  if ((val - luminance_tolerance) >= 0 &&
-      (val + luminance_tolerance) <= max_pixel_val) {
-    luminance_target = val;
-    return QCIP_XPSR_OK;
-  }
-  return QCIP_XPSR_LUM_INVLD;
-}
-
-int
-qcip_set_luminance_tolerance (struct qcam *q, int val)
-{
-  const int max_pixel_val = q->bpp == 6 ? 63 : 15;
-
-  /* set target if it has not been explicitly set */
-  if (luminance_target == -1) {
-    luminance_target = q->bpp == 6 ? 32 : 8;
-  }
-
-  if ((luminance_target - val) >= 0 &&
-      (luminance_target + val) <= max_pixel_val) {
-    luminance_tolerance = val;
-    return QCIP_XPSR_OK;
-  }
-  return QCIP_XPSR_LUM_INVLD;
-}
-
-int
-qcip_set_luminance_std_target (struct qcam *q, int val)
-{
-  luminance_std_target = val;
-  return QCIP_XPSR_OK;
-}
-
-int
-qcip_set_luminance_std_tolerance (struct qcam *q, int val)
-{
-  luminance_std_tolerance = val;
-  return QCIP_XPSR_OK;
-}
-
-int
-qcip_set_autoexposure_mode (int val)
-{
-  ae_mode = val;
-  return 0;
-}
-
-/* Calculate standard deviation of pixel value for entire image */
-
-static int
-qcip_luminance_std (struct qcam *q, scanbuf * scan, int avg)
-{
-  int count = 0;
-  int sum = 0;
-  int pixels;
-  int i;
-
-  pixels = q->height / q->transfer_scale;
-  pixels *= q->width / q->transfer_scale;
-
-  for (i = 0; i < pixels; i++) {
-    if (scan[i] < avg) {
-      sum += avg - scan[i];
-    } else {
-      sum += scan[i] - avg;
-    }
-    count++;
-  }
-  return (sum / count);
-}
-
-
-/* If necessary adjust the brightness in an attempt to achieve
- * a target average pixel value: 32 for 6 bpp, 8 for 4bpp.
- * This routine *will* modify the brightness value in preparation
- * for another scan unless the target average pixel values has
- * been reached. If the exposure is correct (yes, I realize that
- * this is subjective) QCIP_XPSR_OK will be returned, otherwise
- * return QCIP_XPSR_RSCN after adjusting the exposure.
- *
- * Caveat: If the new calculated brightness value is invalid,
- *         QCIP_XPSR_ERR will be returned.
- */
-
-int
-qcip_autoexposure (struct qcam *q, scanbuf * scan)
-{
-  int luminance_dif;
-  int luminance_avg;
-  int brightness_adj;
-  int lum_min, lum_max;
-  int lum_std, lum_std_min, lum_std_max;
-  int ret = QCIP_XPSR_OK;
-
-#ifdef DEBUG
-  fprintf (stderr, "Brightness: %d  Contrast: %d\n",
-      qc_getbrightness (q), qc_getcontrast (q));
-#endif
-
-  switch (ae_mode) {
-    case AE_CTR_AVG:
-      luminance_avg = qcip_pixel_average_center (q, scan);
-      break;
-    case AE_STD_AVG:
-      luminance_avg = qcip_pixel_average (q, scan);
-      lum_std = qcip_luminance_std (q, scan, luminance_avg);
-
-      /* ==>> Contrast adjustment <<== */
-
-      /* set target if it has not been explicitly set */
-      if (luminance_std_target == -1) {
-        luminance_std_target = q->bpp == 6 ? 10 : 2;
-      }
-
-      /* Adjust contrast to reach target luminance standard deviation */
-      lum_std_min = luminance_std_target - luminance_std_tolerance;
-      lum_std_max = luminance_std_target + luminance_std_tolerance;
-
-      if (lum_std < lum_std_min || lum_std > lum_std_max) {
-        ret = QCIP_XPSR_RSCN;
-        if (qc_setcontrast (q,
-                luminance_std_target - lum_std + qc_getcontrast (q))) {
-          return QCIP_XPSR_ERR;
-        }
-      }
-#ifdef DEBUG
-      fprintf (stderr, "Luminance std/target/tolerance: %d/%d/%d\n",
-          lum_std, luminance_std_target, luminance_std_tolerance);
-#endif
-
-      break;
-    case AE_ALL_AVG:
-    default:
-      luminance_avg = qcip_pixel_average (q, scan);
-      break;
-  }
-
-  /* ==>> Brightness adjustment <<== */
-
-  /* set target if it has not been explicitly set */
-  if (luminance_target == -1) {
-    luminance_target = q->bpp == 6 ? 32 : 8;
-  }
-
-  lum_min = luminance_target - luminance_tolerance;
-  lum_max = luminance_target + luminance_tolerance;
-
-#ifdef DEBUG
-  fprintf (stderr, "Luminance avg/target/tolerance: %d/%d/%d\n",
-      luminance_avg, luminance_target, luminance_tolerance);
-#endif
-
-  /* check for luminance within target range */
-  if (luminance_avg < lum_min || luminance_avg > lum_max) {
-    ret = QCIP_XPSR_RSCN;
-    /* we need to adjust the brighness, which way? */
-    luminance_dif = luminance_target - luminance_avg;
-    if (luminance_dif > 0) {
-      brightness_adj = luminance_dif / 2 + 1;
-    } else {
-      brightness_adj = luminance_dif / 2 - 1;
-    }
-
-    /* Adjusted brightness is out of range ..
-     * throw in the towel ... auto-exposure has failed!
-     */
-    if (qc_setbrightness (q, brightness_adj + qc_getbrightness (q))) {
-      return QCIP_XPSR_ERR;
-    }
-  }
-
-  return ret;
-}
diff --git a/sys/qcam/gstqcamsrc.c b/sys/qcam/gstqcamsrc.c
deleted file mode 100644 (file)
index dbe7740..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-#include <string.h>
-
-/*#define DEBUG_ENABLED */
-#include <gstqcamsrc.h>
-#include <gst/video/video.h>
-
-#include "qcamip.h"
-
-#define AE_NONE                 3
-
-#define DEF_WIDTH               320
-#define DEF_HEIGHT              224
-#define DEF_BRIGHTNESS          226
-#define DEF_WHITEBAL            128
-#define DEF_CONTRAST            72
-#define DEF_TOP                 1
-#define DEF_LEFT                14
-#define DEF_TRANSFER_SCALE      2
-#define DEF_DEPTH               6
-#define DEF_PORT                0x378
-#define DEF_AUTOEXP             AE_NONE
-
-static GstStaticPadTemplate gst_qcamsrc_src_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
-    );
-
-#define GST_TYPE_AUTOEXP_MODE (gst_autoexp_mode_get_type())
-static GType
-gst_autoexp_mode_get_type (void)
-{
-  static GType autoexp_mode_type = 0;
-  static const GEnumValue autoexp_modes[] = {
-    {AE_ALL_AVG, "0", "Average Picture"},
-    {AE_CTR_AVG, "1", "Average Center"},
-    {AE_STD_AVG, "2", "Standard Deviation"},
-    {AE_NONE, "3", "None"},
-    {0, NULL, NULL},
-  };
-
-  if (!autoexp_mode_type) {
-    autoexp_mode_type =
-        g_enum_register_static ("GstAutoExposureMode", autoexp_modes);
-  }
-  return autoexp_mode_type;
-}
-
-/* QCamSrc signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  ARG_0,
-  ARG_WIDTH,
-  ARG_HEIGHT,
-  ARG_BRIGHTNESS,
-  ARG_WHITEBAL,
-  ARG_CONTRAST,
-  ARG_TOP,
-  ARG_LEFT,
-  ARG_TRANSFER_SCALE,
-  ARG_DEPTH,
-  ARG_PORT,
-  ARG_AUTOEXP
-};
-
-static void gst_qcamsrc_base_init (gpointer g_class);
-static void gst_qcamsrc_class_init (GstQCamSrcClass * klass);
-static void gst_qcamsrc_init (GstQCamSrc * qcamsrc);
-
-static void gst_qcamsrc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_qcamsrc_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static GstStateChangeReturn gst_qcamsrc_change_state (GstElement * element,
-    GstStateChange transition);
-static void gst_qcamsrc_close (GstQCamSrc * src);
-static gboolean gst_qcamsrc_open (GstQCamSrc * src);
-
-static GstData *gst_qcamsrc_get (GstPad * pad);
-
-static GstElementClass *parent_class = NULL;
-
-/*//static guint gst_qcamsrc_signals[LAST_SIGNAL] = { 0 }; */
-
-GType
-gst_qcamsrc_get_type (void)
-{
-  static GType qcamsrc_type = 0;
-
-  if (!qcamsrc_type) {
-    static const GTypeInfo qcamsrc_info = {
-      sizeof (GstQCamSrcClass),
-      gst_qcamsrc_base_init,
-      NULL,
-      (GClassInitFunc) gst_qcamsrc_class_init,
-      NULL,
-      NULL,
-      sizeof (GstQCamSrc),
-      0,
-      (GInstanceInitFunc) gst_qcamsrc_init,
-      NULL
-    };
-
-    qcamsrc_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstQCamSrc", &qcamsrc_info,
-        0);
-  }
-  return qcamsrc_type;
-}
-
-static void
-gst_qcamsrc_base_init (gpointer g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_qcamsrc_src_factory);
-  gst_element_class_set_static_metadata (element_class, "QCam Source",
-      "Source/Video", "Read from a QuickCam device",
-      "Wim Taymans <wim.taymans@chello.be>");
-}
-
-static void
-gst_qcamsrc_class_init (GstQCamSrcClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_WIDTH,
-      g_param_spec_int ("width", "width", "width",
-          0, 320, DEF_WIDTH, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_HEIGHT,
-      g_param_spec_int ("height", "height", "height",
-          0, 240, DEF_HEIGHT, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BRIGHTNESS,
-      g_param_spec_int ("brightness", "brightness", "brightness",
-          0, 255, DEF_BRIGHTNESS, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_WHITEBAL,
-      g_param_spec_int ("whitebal", "whitebal", "whitebal",
-          0, 255, DEF_WHITEBAL, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CONTRAST,
-      g_param_spec_int ("contrast", "contrast", "contrast",
-          0, 255, DEF_CONTRAST, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TOP,
-      g_param_spec_int ("top", "top", "top",
-          0, 240, DEF_TOP, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LEFT,
-      g_param_spec_int ("left", "left", "left",
-          0, 320, DEF_LEFT, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TRANSFER_SCALE,
-      g_param_spec_int ("transfer_scale", "transfer_scale", "transfer_scale",
-          1, 4, DEF_TRANSFER_SCALE, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DEPTH,
-      g_param_spec_int ("depth", "depth", "depth",
-          4, 6, DEF_DEPTH, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PORT,
-      g_param_spec_int ("port", "port", "port",
-          0, G_MAXINT, DEF_PORT, G_PARAM_READWRITE));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_AUTOEXP,
-      g_param_spec_enum ("autoexposure", "autoexposure", "autoexposure",
-          GST_TYPE_AUTOEXP_MODE, DEF_AUTOEXP, G_PARAM_READWRITE));
-
-  gobject_class->set_property = gst_qcamsrc_set_property;
-  gobject_class->get_property = gst_qcamsrc_get_property;
-
-  gstelement_class->change_state = gst_qcamsrc_change_state;
-}
-
-static void
-gst_qcamsrc_init (GstQCamSrc * qcamsrc)
-{
-  qcamsrc->srcpad =
-      gst_pad_new_from_static_template (&gst_qcamsrc_src_factory, "src");
-  gst_element_add_pad (GST_ELEMENT (qcamsrc), qcamsrc->srcpad);
-  gst_pad_set_get_function (qcamsrc->srcpad, gst_qcamsrc_get);
-
-  /* if the destination cannot say what it wants, we give this */
-  qcamsrc->qcam = qc_init ();
-  qcamsrc->qcam->port = DEF_PORT;
-  qc_setwidth (qcamsrc->qcam, DEF_WIDTH);
-  qc_setheight (qcamsrc->qcam, DEF_HEIGHT);
-  qc_setbrightness (qcamsrc->qcam, DEF_BRIGHTNESS);
-  qc_setwhitebal (qcamsrc->qcam, DEF_WHITEBAL);
-  qc_setcontrast (qcamsrc->qcam, DEF_CONTRAST);
-  qc_settop (qcamsrc->qcam, DEF_TOP);
-  qc_setleft (qcamsrc->qcam, DEF_LEFT);
-  qc_settransfer_scale (qcamsrc->qcam, DEF_TRANSFER_SCALE);
-  qc_setbitdepth (qcamsrc->qcam, DEF_DEPTH);
-  qcamsrc->autoexposure = DEF_AUTOEXP;
-  if (qcamsrc->autoexposure != AE_NONE)
-    qcip_set_autoexposure_mode (qcamsrc->autoexposure);
-}
-
-static GstData *
-gst_qcamsrc_get (GstPad * pad)
-{
-  GstQCamSrc *qcamsrc;
-  GstBuffer *buf;
-  scanbuf *scan;
-  guchar *outdata;
-  gint i, frame, scale, convert;
-
-  g_return_val_if_fail (pad != NULL, NULL);
-
-  qcamsrc = GST_QCAMSRC (gst_pad_get_parent (pad));
-
-  scale = qc_gettransfer_scale (qcamsrc->qcam);
-
-  frame = qcamsrc->qcam->width * qcamsrc->qcam->height / (scale * scale);
-
-  buf = gst_buffer_new ();
-  outdata = GST_BUFFER_DATA (buf) = g_malloc0 ((frame * 3) / 2);
-  GST_BUFFER_SIZE (buf) = (frame * 3) / 2;
-
-  qc_set (qcamsrc->qcam);
-  if (!GST_PAD_CAPS (pad)) {
-    gst_pad_try_set_caps (pad, gst_caps_new_simple ("video/x-raw-yuv",
-            "format", GST_TYPE_FOURCC, "I420",
-            "width", G_TYPE_INT, qcamsrc->qcam->width / scale,
-            "height", G_TYPE_INT, qcamsrc->qcam->height / scale,
-            "framerate", G_TYPE_DOUBLE, 10., NULL));
-  }
-  scan = qc_scan (qcamsrc->qcam);
-
-  /* FIXME, this doesn't seem to work... */
-  /*fixdark(qcamsrc->qcam, scan); */
-
-  if (qcamsrc->autoexposure != AE_NONE)
-    qcip_autoexposure (qcamsrc->qcam, scan);
-
-  convert = (qcamsrc->qcam->bpp == 4 ? 4 : 2);
-
-  for (i = frame; i; i--) {
-    outdata[i] = scan[i] << convert;
-  }
-  memset (outdata + frame, 128, frame >> 1);
-  g_free (scan);
-
-  return GST_DATA (buf);
-}
-
-static void
-gst_qcamsrc_set_property (GObject * object, guint prop_id, const GValue * value,
-    GParamSpec * pspec)
-{
-  GstQCamSrc *src;
-
-  g_return_if_fail (GST_IS_QCAMSRC (object));
-  src = GST_QCAMSRC (object);
-
-  switch (prop_id) {
-    case ARG_WIDTH:
-      qc_setwidth (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_HEIGHT:
-      qc_setheight (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_BRIGHTNESS:
-      qc_setbrightness (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_WHITEBAL:
-      qc_setwhitebal (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_CONTRAST:
-      qc_setcontrast (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_TOP:
-      qc_settop (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_LEFT:
-      qc_setleft (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_TRANSFER_SCALE:
-      qc_settransfer_scale (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_DEPTH:
-      qc_setbitdepth (src->qcam, g_value_get_int (value));
-      break;
-    case ARG_PORT:
-      src->qcam->port = g_value_get_int (value);
-      break;
-    case ARG_AUTOEXP:
-      src->autoexposure = g_value_get_enum (value);
-      if (src->autoexposure != AE_NONE)
-        qcip_set_autoexposure_mode (src->autoexposure);
-      break;
-    default:
-      break;
-  }
-}
-
-static void
-gst_qcamsrc_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstQCamSrc *src;
-
-  g_return_if_fail (GST_IS_QCAMSRC (object));
-  src = GST_QCAMSRC (object);
-
-  switch (prop_id) {
-    case ARG_WIDTH:
-      g_value_set_int (value, qc_getwidth (src->qcam));
-      break;
-    case ARG_HEIGHT:
-      g_value_set_int (value, qc_getheight (src->qcam));
-      break;
-    case ARG_BRIGHTNESS:
-      g_value_set_int (value, qc_getbrightness (src->qcam));
-      break;
-    case ARG_WHITEBAL:
-      g_value_set_int (value, qc_getwhitebal (src->qcam));
-      break;
-    case ARG_CONTRAST:
-      g_value_set_int (value, qc_getcontrast (src->qcam));
-      break;
-    case ARG_TOP:
-      g_value_set_int (value, qc_gettop (src->qcam));
-      break;
-    case ARG_LEFT:
-      g_value_set_int (value, qc_getleft (src->qcam));
-      break;
-    case ARG_TRANSFER_SCALE:
-      g_value_set_int (value, qc_gettransfer_scale (src->qcam));
-      break;
-    case ARG_DEPTH:
-      g_value_set_int (value, qc_getbitdepth (src->qcam));
-      break;
-    case ARG_PORT:
-      g_value_set_int (value, src->qcam->port);
-      break;
-    case ARG_AUTOEXP:
-      g_value_set_enum (value, src->autoexposure);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static GstStateChangeReturn
-gst_qcamsrc_change_state (GstElement * element, GstStateChange transition)
-{
-  g_return_val_if_fail (GST_IS_QCAMSRC (element), FALSE);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      if (GST_OBJECT_FLAG_IS_SET (element, GST_QCAMSRC_OPEN))
-        gst_qcamsrc_close (GST_QCAMSRC (element));
-      break;
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!GST_OBJECT_FLAG_IS_SET (element, GST_QCAMSRC_OPEN)) {
-        GST_DEBUG ("opening");
-        if (!gst_qcamsrc_open (GST_QCAMSRC (element))) {
-          GST_DEBUG ("open failed");
-          return GST_STATE_CHANGE_FAILURE;
-        }
-      }
-      break;
-    default:
-      break;
-  }
-
-  if (GST_ELEMENT_CLASS (parent_class)->change_state)
-    return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
-
-static gboolean
-gst_qcamsrc_open (GstQCamSrc * qcamsrc)
-{
-  if (qc_open (qcamsrc->qcam)) {
-    GST_ELEMENT_ERROR (qcamsrc, RESOURCE, OPEN_READ, (NULL),
-        ("Failed to open QuickCam"));
-    return FALSE;
-  }
-
-  GST_OBJECT_FLAG_SET (qcamsrc, GST_QCAMSRC_OPEN);
-
-  return TRUE;
-}
-
-static void
-gst_qcamsrc_close (GstQCamSrc * src)
-{
-  qc_close (src->qcam);
-  GST_OBJECT_FLAG_UNSET (src, GST_QCAMSRC_OPEN);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  if (!gst_element_register (plugin, "qcamsrc", GST_RANK_NONE,
-          GST_TYPE_QCAMSRC))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    qcamsrc,
-    "Read from a QuickCam device",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/qcam/gstqcamsrc.h b/sys/qcam/gstqcamsrc.h
deleted file mode 100644 (file)
index a617b8d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __GST_QCAMSRC_H__
-#define __GST_QCAMSRC_H__
-
-
-#include <gst/gst.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/** QuickCam include files */
-#include "qcam.h"
-#include "qcam-os.h"
-
-#define GST_TYPE_QCAMSRC \
-  (gst_qcamsrc_get_type())
-#define GST_QCAMSRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_QCAMSRC,GstQCamSrc))
-#define GST_QCAMSRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_QCAMSRC,GstQCamSrcClass))
-#define GST_IS_QCAMSRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_QCAMSRC))
-#define GST_IS_QCAMSRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QCAMSRC))
-
-/* NOTE: per-element flags start with 16 for now */
-typedef enum {
-  GST_QCAMSRC_OPEN            = (GST_ELEMENT_FLAG_LAST << 0),
-
-  GST_QCAMSRC_FLAG_LAST       = (GST_ELEMENT_FLAG_LAST << 2),
-} GstQCamSrcFlags;
-
-typedef struct _GstQCamSrc GstQCamSrc;
-typedef struct _GstQCamSrcClass GstQCamSrcClass;
-
-struct _GstQCamSrc {
-  GstElement element;
-
-  /* pads */
-  GstPad *srcpad;
-
-  struct qcam *qcam;
-  gboolean autoexposure;
-  gint port;
-};
-
-struct _GstQCamSrcClass {
-  GstElementClass parent_class;
-};
-
-GType gst_qcamsrc_get_type(void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GST_QCAMSRC_H__ */
diff --git a/sys/qcam/qcam-Linux.c b/sys/qcam/qcam-Linux.c
deleted file mode 100644 (file)
index 07e6917..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/* qcam-Linux.c -- Linux-specific routines for accessing QuickCam */
-
-/* Version 0.1, January 2, 1996 */
-/* Version 0.5, August 24, 1996 */
-
-#define LOCALSTATEDIR ""
-//#define LOCALSTATEDIR "/var/run"
-
-/******************************************************************
-
-Copyright (C) 1996 by Scott Laird
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef TESTING
-#include <errno.h>
-#endif
-#include <sys/io.h>
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "qcam.h"
-#include "qcam-Linux.h"
-
-int __inline__
-read_lpstatus (const struct qcam *q)
-{
-  return inb (q->port + 1);
-}
-
-int
-read_lpcontrol (const struct qcam *q)
-{
-  return inb (q->port + 2);
-}
-
-int
-read_lpdata (const struct qcam *q)
-{
-  return inb (q->port);
-}
-
-void
-write_lpdata (const struct qcam *q, int d)
-{
-  outb (d, q->port);
-}
-
-void
-write_lpcontrol (const struct qcam *q, int d)
-{
-  outb (d, q->port + 2);
-}
-
-int
-enable_ports (const struct qcam *q)
-{
-  if (q->port < 0x278)
-    return 1;                   /* Better safe than sorry */
-  if (q->port > 0x3bc)
-    return 1;
-  return (ioperm (q->port, 3, 1));
-}
-
-int
-disable_ports (const struct qcam *q)
-{
-  return (ioperm (q->port, 3, 0));
-}
-
-/* Lock port.  This is currently sub-optimal, and is begging to be
-   fixed.  It should check for dead locks.  Any takers? */
-
-/* qc_lock_wait
- * This function uses POSIX fcntl-style locking on a file created in the
- * /tmp directory.  Because it uses the Unix record locking facility, locks
- * are relinquished automatically on process termination, so "dead locks"
- * are not a problem.  (FYI, the lock file will remain after process
- * termination, but this is actually desired so that the next process need
- * not re-creat(2)e it... just lock it.)
- * The wait argument indicates whether or not this funciton should "block"
- * waiting for the previous lock to be relinquished.  This is ideal so that
- * multiple processes (eg. qcam) taking "snapshots" can peacefully coexist.
- * - Dave Plonka (plonka@carroll1.cc.edu)
- */
-int
-qc_lock_wait (struct qcam *q, int wait)
-{
-#if 1
-  static struct flock sfl;
-
-  if (-1 == q->fd) {            /* we've yet to open the lock file */
-    static char lockfile[128];
-
-    sprintf (lockfile, LOCALSTATEDIR "/LOCK.qcam.0x%x", q->port);
-    if (-1 == (q->fd = open (lockfile, O_WRONLY | O_CREAT, 0666))) {
-      perror ("open");
-      return 1;
-    }
-#ifdef TESTING
-    fprintf (stderr, "%s - %d: %s open(2)ed\n", __FILE__, __LINE__, lockfile);
-#endif
-
-    /* initialize the l_type memver to lock the file exclusively */
-    sfl.l_type = F_WRLCK;
-  }
-#ifdef TESTING
-  if (0 != fcntl (q->fd, F_SETLK, &sfl))        /* non-blocking set lock */
-#else
-  if (0 != fcntl (q->fd, wait ? F_SETLKW : F_SETLK, &sfl))
-#endif
-  {
-#ifdef TESTING
-    perror ("fcntl");
-    if (EAGAIN != errno || !wait)
-      return 1;
-
-    fprintf (stderr, "%s - %d: waiting for exclusive lock on fd %d...\n",
-        __FILE__, __LINE__, q->fd);
-
-    if (0 != fcntl (q->fd, F_SETLKW, &sfl))     /* "blocking" set lock */
-#endif
-    {
-      perror ("fcntl");
-      return 1;
-    }
-  }
-#ifdef TESTING
-  fprintf (stderr, "%s - %d: fd %d locked exclusively\n", __FILE__, __LINE__,
-      q->fd);
-#endif
-
-#else
-  char lockfile[128], tmp[128];
-  struct stat statbuf;
-
-  sprintf (lockfile, LOCALSTATEDIR "/LOCK.qcam.0x%x", q->port);
-  sprintf (tmp, "%s-%d", lockfile, getpid ());
-
-  if ((creat (tmp, 0) == -1) ||
-      (link (tmp, lockfile) == -1) ||
-      (stat (tmp, &statbuf) == -1) || (statbuf.st_nlink == 1)) {
-#ifdef DEBUGQC
-    perror ("QuickCam Locked");
-    if (unlink (tmp) == -1)
-      perror ("Error unlinking temp file.");
-#else
-    unlink (tmp);
-#endif
-    return 1;
-  }
-
-  unlink (tmp);
-  if (chown (lockfile, getuid (), getgid ()) == -1)
-    perror ("Chown problems");
-#endif
-
-  return 0;
-}
-
-int
-qc_lock (struct qcam *q)
-{
-#if 1
-  return qc_lock_wait (q, 1 /*wait */ );
-#else
-  return qc_lock_wait (q, 0 /*don't wait */ );
-#endif
-}
-
-/* Unlock port */
-
-int
-qc_unlock (struct qcam *q)
-{
-  static struct flock sfl;
-
-#if 1
-  if (-1 == q->fd) {            /* port was not locked */
-    return 1;
-  }
-
-  /* clear the exclusive lock */
-  sfl.l_type = F_UNLCK;
-  if (0 != fcntl (q->fd, F_SETLK, &sfl)) {
-    perror ("fcntl");
-    return 1;
-  }
-#ifdef TESTING
-  fprintf (stderr, "%s - %d: fd %d unlocked\n", __FILE__, __LINE__, q->fd);
-#endif
-
-#else
-  char lockfile[128];
-
-  sprintf (lockfile, LOCALSTATEDIR "/LOCK.qcam.0x%x", q->port);
-  unlink (lockfile);            /* What would I do with an error? */
-#endif
-
-  return 0;
-}
-
-
-/* Probe for camera.  Returns 0 if found, 1 if not found, sets
-   q->port.*/
-
-int
-qc_probe (struct qcam *q)
-{
-  int ioports[] = { 0x378, 0x278, 0x3bc, 0 };
-  int i = 0;
-
-  /* Attempt to get permission to access IO ports.  Must be root */
-
-  while (ioports[i] != 0) {
-    q->port = ioports[i++];
-
-    if (qc_open (q)) {
-      perror ("Can't get I/O permission");
-      exit (1);
-    }
-
-    if (qc_detect (q)) {
-      fprintf (stderr, "QuickCam detected at 0x%x\n", q->port);
-      qc_close (q);
-      return (0);
-    } else
-      qc_close (q);
-  }
-
-  return 1;
-}
-
-
-/* THIS IS UGLY.  I need a short delay loop -- somthing well under a
-millisecond.  Unfortunately, adding 2 usleep(1)'s to qc_command slowed
-it down by a factor of over 1000 over the same loop with 2
-usleep(0)'s, and that's too slow -- qc_start was taking over a second
-to run.  This seems to help, but if anyone has a good
-speed-independent pause routine, please tell me. -- Scott */
-
-void
-qc_wait (int val)
-{
-  int i;
-
-  while (val--)
-    for (i = 0; i < 50000; i++);
-}
diff --git a/sys/qcam/qcam-Linux.h b/sys/qcam/qcam-Linux.h
deleted file mode 100644 (file)
index 46dcbe5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* qcam-linux.h -- Linux-specific routines for accessing QuickCam */
-
-/* Version 0.1, January 2, 1996 */
-/* Version 0.5, August 24, 1996 */
-
-
-/******************************************************************
-
-Copyright (C) 1996 by Scott Laird
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************/
-
-
diff --git a/sys/qcam/qcam-lib.c b/sys/qcam/qcam-lib.c
deleted file mode 100644 (file)
index c472e57..0000000
+++ /dev/null
@@ -1,849 +0,0 @@
-/* qcam-lib.c -- Library for programming with the Connectix QuickCam.
- * See the included documentation for usage instructions and details
- * of the protocol involved. */
-
-
-/* Version 0.5, August 4, 1996 */
-/* Version 0.7, August 27, 1996 */
-/* Version 0.9, November 17, 1996 */
-
-
-/******************************************************************
-
-Copyright (C) 1996 by Scott Laird
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include <unistd.h>
-
-#include <assert.h>
-
-#include "qcam.h"
-#include "qcam-os.h"
-#include "qcam-os.c"
-
-/* Prototypes for static functions.  Externally visible functions
- * should be prototyped in qcam.h */
-
-static int qc_waithand (const struct qcam *q, int val);
-static int qc_command (const struct qcam *q, int command);
-static int qc_readparam (const struct qcam *q);
-static int qc_setscanmode (struct qcam *q);
-static int qc_readbytes (const struct qcam *q, char buffer[]);
-
-/* The next several functions are used for controlling the qcam
- * structure.  They aren't used inside this library, but they should
- * provide a clean interface for external programs.*/
-
-/* Gets/sets the brightness. */
-
-int
-qc_getbrightness (const struct qcam *q)
-{
-  return q->brightness;
-}
-
-int
-qc_setbrightness (struct qcam *q, int val)
-{
-  if (val >= 0 && val <= 255) {
-    q->brightness = val;
-    return 0;
-  }
-  return 1;
-}
-
-
-/* Gets/sets the contrast */
-
-int
-qc_getcontrast (const struct qcam *q)
-{
-  return q->contrast;
-}
-
-int
-qc_setcontrast (struct qcam *q, int val)
-{
-  if (val >= 0 && val <= 255) {
-    q->contrast = val;
-    return 0;
-  }
-  return 1;
-}
-
-
-/* Gets/sets the white balance */
-
-int
-qc_getwhitebal (const struct qcam *q)
-{
-  return q->whitebal;
-}
-
-int
-qc_setwhitebal (struct qcam *q, int val)
-{
-  if (val >= 0 && val <= 255) {
-    q->whitebal = val;
-    return 0;
-  }
-  return 1;
-}
-
-
-/* Gets/sets the resolution */
-
-void
-qc_getresolution (const struct qcam *q, int *x, int *y)
-{
-  *x = q->width;
-  *y = q->height;
-}
-
-int
-qc_setresolution (struct qcam *q, int x, int y)
-{
-  if (x >= 0 && x <= 336 && y >= 0 && y <= 243) {
-    q->width = x;
-    q->height = y;
-    return 0;
-  }
-  return 1;
-}
-
-int
-qc_getheight (const struct qcam *q)
-{
-  return q->height;
-}
-
-int
-qc_setheight (struct qcam *q, int y)
-{
-  if (y >= 0 && y <= 243) {
-    q->height = y;
-    return 0;
-  }
-  return 1;
-}
-
-int
-qc_getwidth (const struct qcam *q)
-{
-  return q->width;
-}
-
-int
-qc_setwidth (struct qcam *q, int x)
-{
-  if (x >= 0 && x <= 336) {
-    q->width = x;
-    return 0;
-  }
-  return 1;
-}
-
-/* Gets/sets the bit depth */
-
-int
-qc_getbitdepth (const struct qcam *q)
-{
-  return q->bpp;
-}
-
-int
-qc_setbitdepth (struct qcam *q, int val)
-{
-  if (val == 4 || val == 6) {
-    q->bpp = val;
-    return qc_setscanmode (q);
-  }
-  return 1;
-}
-
-int
-qc_gettop (const struct qcam *q)
-{
-  return q->top;
-}
-
-int
-qc_settop (struct qcam *q, int val)
-{
-  if (val >= 1 && val <= 243) {
-    q->top = val;
-    return 0;
-  }
-  return 1;
-}
-
-int
-qc_getleft (const struct qcam *q)
-{
-  return q->left;
-}
-
-int
-qc_setleft (struct qcam *q, int val)
-{
-  if (val % 2 == 0 && val >= 2 && val <= 336) {
-    q->left = val;
-    return 0;
-  }
-  return 1;
-}
-
-int
-qc_gettransfer_scale (const struct qcam *q)
-{
-  return q->transfer_scale;
-}
-
-int
-qc_settransfer_scale (struct qcam *q, int val)
-{
-  if (val == 1 || val == 2 || val == 4) {
-    q->transfer_scale = val;
-    return qc_setscanmode (q);
-  }
-  return 1;
-}
-
-int
-qc_calibrate (struct qcam *q)
-/* bugfix by Hanno Mueller hmueller@kabel.de, Mai 21 96 */
-/* The white balance is an individiual value for each */
-/* quickcam. Run calibration once, write the value down */
-/* and put it in your qcam.conf file. You won't need to */
-/* recalibrate your camera again. */
-{
-  int value;
-
-#ifdef DEBUG
-  int count = 0;
-#endif
-
-  qc_command (q, 27);           /* AutoAdjustOffset */
-  qc_command (q, 0);            /* Dummy Parameter, ignored by the camera */
-
-  /* GetOffset (33) will read 255 until autocalibration */
-  /* is finished. After that, a value of 1-254 will be */
-  /* returned. */
-
-  do {
-    qc_command (q, 33);
-    value = qc_readparam (q);
-#ifdef DEBUG
-    count++;
-#endif
-  } while (value == 0xff);
-
-  q->whitebal = value;
-
-#ifdef DEBUG
-  fprintf (stderr, "%d loops to calibrate\n", count);
-  fprintf (stderr, "Calibrated to %d\n", value);
-#endif
-
-  return value;
-}
-
-int
-qc_forceunidir (struct qcam *q)
-{
-  q->port_mode = (q->port_mode & ~QC_FORCE_MASK) | QC_FORCE_UNIDIR;
-  return 0;
-}
-
-
-/* Initialize the QuickCam driver control structure.  This is where
- * defaults are set for people who don't have a config file.*/
-struct qcam *
-qc_init (void)
-{
-  struct qcam *q;
-
-  q = malloc (sizeof (struct qcam));
-
-  q->port = 0;                  /* Port 0 == Autoprobe */
-  q->port_mode = (QC_ANY | QC_NOTSET);
-  q->width = 160;
-  q->height = 120;
-  q->bpp = 4;
-  q->transfer_scale = 2;
-  q->contrast = 104;
-  q->brightness = 150;
-  q->whitebal = 150;
-  q->top = 1;
-  q->left = 14;
-  q->mode = -1;
-  q->fd = -1;                   /* added initialization of fd member
-                                 * BTW, there doesn't seem to be a place to close this fd...
-                                 * I think we need a qc_free function.
-                                 * - Dave Plonka (plonka@carroll1.cc.edu)
-                                 */
-
-  return q;
-}
-
-
-/* qc_open enables access to the port specified in q->port.  It takes
- * care of locking and enabling I/O port access by calling the
- * appropriate routines.
- *
- * Returns 0 for success, 1 for opening error, 2 for locking error,
- * and 3 for qcam not found */
-
-int
-qc_open (struct qcam *q)
-{
-  if (q->port == 0)
-    if (qc_probe (q)) {
-      fprintf (stderr, "Qcam not found\n");
-      return 3;
-    }
-
-  if (qc_lock (q)) {
-    fprintf (stderr, "Cannot lock qcam.\n");
-    return 2;
-  }
-
-  if (enable_ports (q)) {
-    fprintf (stderr, "Cannot open QuickCam -- permission denied.");
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-
-/* qc_close closes and unlocks the driver.  You *need* to call this,
- * or lockfiles will be left behind and everything will be screwed. */
-
-int
-qc_close (struct qcam *q)
-{
-  qc_unlock (q);
-
-  disable_ports (q);
-  return 0;
-}
-
-
-/* qc_command is probably a bit of a misnomer -- it's used to send
- * bytes *to* the camera.  Generally, these bytes are either commands
- * or arguments to commands, so the name fits, but it still bugs me a
- * bit.  See the documentation for a list of commands. */
-
-static int
-qc_command (const struct qcam *q, int command)
-{
-  int n1, n2;
-  int cmd;
-
-  write_lpdata (q, command);
-  write_lpcontrol (q, 6);
-
-  n1 = qc_waithand (q, 1);
-
-  write_lpcontrol (q, 0xe);
-  n2 = qc_waithand (q, 0);
-
-  cmd = (n1 & 0xf0) | ((n2 & 0xf0) >> 4);
-#ifdef DEBUG
-  if (cmd != command) {
-    fprintf (stderr, "Command 0x%02x sent, 0x%02x echoed", command, cmd);
-    n2 = read_lpstatus (q);
-    cmd = (n1 & 0xf0) | ((n2 & 0xf0) >> 4);
-    if (cmd != command)
-      fprintf (stderr, " (re-read does not help)\n");
-    else
-      fprintf (stderr, " (fixed on re-read)\n");
-  }
-#endif
-  return cmd;
-}
-
-static int
-qc_readparam (const struct qcam *q)
-{
-  int n1, n2;
-  int cmd;
-
-  write_lpcontrol (q, 6);
-  n1 = qc_waithand (q, 1);
-
-  write_lpcontrol (q, 0xe);
-  n2 = qc_waithand (q, 0);
-
-  cmd = (n1 & 0xf0) | ((n2 & 0xf0) >> 4);
-  return cmd;
-}
-
-/* qc_waithand busy-waits for a handshake signal from the QuickCam.
- * Almost all communication with the camera requires handshaking. */
-
-static int
-qc_waithand (const struct qcam *q, int val)
-{
-  int status;
-
-  if (val)
-    while (!((status = read_lpstatus (q)) & 8));
-  else
-    while (((status = read_lpstatus (q)) & 8));
-
-  return status;
-}
-
-/* Waithand2 is used when the qcam is in bidirectional mode, and the
- * handshaking signal is CamRdy2 (bit 0 of data reg) instead of CamRdy1
- * (bit 3 of status register).  It also returns the last value read,
- * since this data is useful. */
-
-static unsigned int
-qc_waithand2 (const struct qcam *q, int val)
-{
-  unsigned int status;
-
-  do {
-    status = read_lpdata (q);
-  } while ((status & 1) != val);
-
-  return status;
-}
-
-
-/* Try to detect a QuickCam.  It appears to flash the upper 4 bits of
-   the status register at 5-10 Hz.  This is only used in the autoprobe
-   code.  Be aware that this isn't the way Connectix detects the
-   camera (they send a reset and try to handshake), but this should be
-   almost completely safe, while their method screws up my printer if
-   I plug it in before the camera. */
-
-int
-qc_detect (const struct qcam *q)
-{
-  int reg, lastreg;
-  int count = 0;
-  int i;
-
-  lastreg = reg = read_lpstatus (q) & 0xf0;
-
-  for (i = 0; i < 30; i++) {
-    reg = read_lpstatus (q) & 0xf0;
-    if (reg != lastreg)
-      count++;
-    lastreg = reg;
-    usleep (10000);
-  }
-
-  /* Be liberal in what you accept...  */
-
-  if (count > 3 && count < 15)
-    return 1;                   /* found */
-  else
-    return 0;                   /* not found */
-}
-
-
-/* Reset the QuickCam.  This uses the same sequence the Windows
- * QuickPic program uses.  Someone with a bi-directional port should
- * check that bi-directional mode is detected right, and then
- * implement bi-directional mode in qc_readbyte(). */
-
-void
-qc_reset (struct qcam *q)
-{
-  switch (q->port_mode & QC_FORCE_MASK) {
-    case QC_FORCE_UNIDIR:
-      q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_UNIDIR;
-      break;
-
-    case QC_FORCE_BIDIR:
-      q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_BIDIR;
-      break;
-
-    case QC_ANY:
-      write_lpcontrol (q, 0x20);
-      write_lpdata (q, 0x75);
-
-      if (read_lpdata (q) != 0x75) {
-        q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_BIDIR;
-      } else {
-        q->port_mode = (q->port_mode & ~QC_MODE_MASK) | QC_UNIDIR;
-      }
-      break;
-
-    case QC_FORCE_SERIAL:
-    default:
-      fprintf (stderr, "Illegal port_mode %x\n", q->port_mode);
-      break;
-  }
-
-  /* usleep(250); */
-  write_lpcontrol (q, 0xb);
-  usleep (250);
-  write_lpcontrol (q, 0xe);
-  (void) qc_setscanmode (q);    /* in case port_mode changed */
-}
-
-
-/* Decide which scan mode to use.  There's no real requirement that
- * the scanmode match the resolution in q->height and q-> width -- the
- * camera takes the picture at the resolution specified in the
- * "scanmode" and then returns the image at the resolution specified
- * with the resolution commands.  If the scan is bigger than the
- * requested resolution, the upper-left hand corner of the scan is
- * returned.  If the scan is smaller, then the rest of the image
- * returned contains garbage. */
-
-static int
-qc_setscanmode (struct qcam *q)
-{
-  switch (q->transfer_scale) {
-    case 1:
-      q->mode = 0;
-      break;
-    case 2:
-      q->mode = 4;
-      break;
-    case 4:
-      q->mode = 8;
-      break;
-    default:
-      return 1;
-  }
-
-  switch (q->bpp) {
-    case 4:
-      break;
-    case 6:
-      q->mode += 2;
-      break;
-    default:
-      fprintf (stderr, "Error: Unsupported bit depth\n");
-      return 1;
-  }
-
-  switch (q->port_mode & QC_MODE_MASK) {
-    case QC_BIDIR:
-      q->mode += 1;
-      break;
-    case QC_NOTSET:
-    case QC_UNIDIR:
-      break;
-    default:
-      return 1;
-  }
-  return 0;
-}
-
-
-/* Reset the QuickCam and program for brightness, contrast,
- * white-balance, and resolution. */
-
-void
-qc_set (struct qcam *q)
-{
-  int val;
-  int val2;
-
-  qc_reset (q);
-
-  /* Set the brightness.  Yes, this is repetitive, but it works.
-   * Shorter versions seem to fail subtly.  Feel free to try :-). */
-  /* I think the problem was in qc_command, not here -- bls */
-  qc_command (q, 0xb);
-  qc_command (q, q->brightness);
-
-  val = q->height / q->transfer_scale;
-  qc_command (q, 0x11);
-  qc_command (q, val);
-  if ((q->port_mode & QC_MODE_MASK) == QC_UNIDIR && q->bpp == 6) {
-    /* The normal "transfers per line" calculation doesn't seem to work
-       as expected here (and yet it works fine in qc_scan).  No idea
-       why this case is the odd man out.  Fortunately, Laird's original
-       working version gives me a good way to guess at working values.
-       -- bls */
-    val = q->width;
-    val2 = q->transfer_scale * 4;
-  } else {
-    val = q->width * q->bpp;
-    val2 = (((q->port_mode & QC_MODE_MASK) == QC_BIDIR) ? 24 : 8) *
-        q->transfer_scale;
-  }
-  val = (val + val2 - 1) / val2;
-  qc_command (q, 0x13);
-  qc_command (q, val);
-
-  /* I still don't know what these do! */
-  /* They're setting top and left -- bls */
-  qc_command (q, 0xd);
-  qc_command (q, q->top);
-  qc_command (q, 0xf);
-  qc_command (q, q->left / 2);
-
-  qc_command (q, 0x19);
-  qc_command (q, q->contrast);
-  qc_command (q, 0x1f);
-  qc_command (q, q->whitebal);
-}
-
-
-/* Qc_readbytes reads some bytes from the QC and puts them in
-   the supplied buffer.  It returns the number of bytes read,
-   or -1 on error. */
-
-static int __inline__
-qc_readbytes (const struct qcam *q, char buffer[])
-{
-  int ret;
-  unsigned int hi, lo;
-  unsigned int hi2, lo2;
-  static unsigned int saved_bits;
-  static int state = 0;
-
-  if (buffer == NULL) {
-    state = 0;
-    return 0;
-  }
-
-  switch (q->port_mode & QC_MODE_MASK) {
-    case QC_BIDIR:             /* Bi-directional Port */
-      write_lpcontrol (q, 0x26);
-      lo = (qc_waithand2 (q, 1) >> 1);
-      hi = (read_lpstatus (q) >> 3) & 0x1f;
-      write_lpcontrol (q, 0x2e);
-      lo2 = (qc_waithand2 (q, 0) >> 1);
-      hi2 = (read_lpstatus (q) >> 3) & 0x1f;
-      switch (q->bpp) {
-        case 4:
-          buffer[0] = lo & 0xf;
-          buffer[1] = ((lo & 0x70) >> 4) | ((hi & 1) << 3);
-          buffer[2] = (hi & 0x1e) >> 1;
-          buffer[3] = lo2 & 0xf;
-          buffer[4] = ((lo2 & 0x70) >> 4) | ((hi2 & 1) << 3);
-          buffer[5] = (hi2 & 0x1e) >> 1;
-          ret = 6;
-          break;
-        case 6:
-          buffer[0] = lo & 0x3f;
-          buffer[1] = ((lo & 0x40) >> 6) | (hi << 1);
-          buffer[2] = lo2 & 0x3f;
-          buffer[3] = ((lo2 & 0x40) >> 6) | (hi2 << 1);
-          ret = 4;
-          break;
-        default:
-          fprintf (stderr, "Bad bidir pixel depth %d\n", q->bpp);
-          ret = -1;
-          break;
-      }
-      break;
-
-    case QC_UNIDIR:            /* Unidirectional Port */
-      write_lpcontrol (q, 6);
-      lo = (qc_waithand (q, 1) & 0xf0) >> 4;
-      write_lpcontrol (q, 0xe);
-      hi = (qc_waithand (q, 0) & 0xf0) >> 4;
-
-      switch (q->bpp) {
-        case 4:
-          buffer[0] = lo;
-          buffer[1] = hi;
-          ret = 2;
-          break;
-        case 6:
-          switch (state) {
-            case 0:
-              buffer[0] = (lo << 2) | ((hi & 0xc) >> 2);
-              saved_bits = (hi & 3) << 4;
-              state = 1;
-              ret = 1;
-              break;
-            case 1:
-              buffer[0] = lo | saved_bits;
-              saved_bits = hi << 2;
-              state = 2;
-              ret = 1;
-              break;
-            case 2:
-              buffer[0] = ((lo & 0xc) >> 2) | saved_bits;
-              buffer[1] = ((lo & 3) << 4) | hi;
-              state = 0;
-              ret = 2;
-              break;
-            default:
-              fprintf (stderr, "Unidir 6-bit state %d?\n", state);
-              ret = -1;
-              break;
-          }
-          break;
-        default:
-          fprintf (stderr, "Bad unidir pixel depth %d\n", q->bpp);
-          ret = -1;
-          break;
-      }
-      break;
-    case QC_SERIAL:            /* Serial Interface.  Just in case. */
-    default:
-      fprintf (stderr, "Mode %x not supported\n", q->port_mode);
-      ret = -1;
-      break;
-  }
-  return ret;
-}
-
-/* Read a scan from the QC.  This takes the qcam structure and
- * requests a scan from the camera.  It sends the correct instructions
- * to the camera and then reads back the correct number of bytes.  In
- * previous versions of this routine the return structure contained
- * the raw output from the camera, and there was a 'qc_convertscan'
- * function that converted that to a useful format.  In version 0.3 I
- * rolled qc_convertscan into qc_scan and now I only return the
- * converted scan.  The format is just an one-dimensional array of
- * characters, one for each pixel, with 0=black up to n=white, where
- * n=2^(bit depth)-1.  Ask me for more details if you don't understand
- * this. */
-
-scanbuf *
-qc_scan (const struct qcam * q)
-{
-  unsigned char *ret;
-  int i, j, k;
-  int bytes;
-  int linestotrans, transperline;
-  int divisor;
-  int pixels_per_line;
-  int pixels_read;
-  char buffer[6];
-  char invert;
-
-  if (q->mode != -1) {
-    qc_command (q, 0x7);
-    qc_command (q, q->mode);
-  } else {
-    struct qcam bogus_cam;
-
-    /* We're going through these odd hoops to retain the "const"
-       qualification on q.  We can't do a qc_setscanmode directly on q,
-       so we copy it, do a setscanmode on that, and pass in the newly
-       computed mode. -- bls 11/21/96
-     */
-
-#ifdef DEBUG
-    fprintf (stderr, "Warning!  qc->mode not set!\n");
-#endif
-    bogus_cam = *q;
-    (void) qc_setscanmode (&bogus_cam);
-    qc_command (q, 0x7);
-    qc_command (q, bogus_cam.mode);
-  }
-
-  if ((q->port_mode & QC_MODE_MASK) == QC_BIDIR) {
-    write_lpcontrol (q, 0x2e);  /* turn port around */
-    write_lpcontrol (q, 0x26);
-    (void) qc_waithand (q, 1);
-    write_lpcontrol (q, 0x2e);
-    (void) qc_waithand (q, 0);
-  }
-
-  /* strange -- should be 15:63 below, but 4bpp is odd */
-  invert = (q->bpp == 4) ? 16 : 63;
-
-  linestotrans = q->height / q->transfer_scale;
-  pixels_per_line = q->width / q->transfer_scale;
-  transperline = q->width * q->bpp;
-  divisor = (((q->port_mode & QC_MODE_MASK) == QC_BIDIR) ? 24 : 8) *
-      q->transfer_scale;
-  transperline = (transperline + divisor - 1) / divisor;
-
-  ret = malloc (linestotrans * pixels_per_line);
-  assert (ret);
-
-#ifdef DEBUG
-  fprintf (stderr, "%s %d bpp\n%d lines of %d transfers each\n",
-      ((q->port_mode & QC_MODE_MASK) == QC_BIDIR) ? "Bidir" : "Unidir",
-      q->bpp, linestotrans, transperline);
-#endif
-
-  for (i = 0; i < linestotrans; i++) {
-    for (pixels_read = j = 0; j < transperline; j++) {
-      bytes = qc_readbytes (q, buffer);
-      assert (bytes > 0);
-      for (k = 0; k < bytes && (pixels_read + k) < pixels_per_line; k++) {
-        assert (buffer[k] <= invert);
-        assert (buffer[k] >= 0);
-        if (buffer[k] == 0 && invert == 16) {
-          /* 4bpp is odd (again) -- inverter is 16, not 15, but output
-             must be 0-15 -- bls */
-          buffer[k] = 16;
-        }
-        ret[i * pixels_per_line + pixels_read + k] = invert - buffer[k];
-      }
-      pixels_read += bytes;
-    }
-    (void) qc_readbytes (q, 0); /* reset state machine */
-  }
-
-  if ((q->port_mode & QC_MODE_MASK) == QC_BIDIR) {
-    write_lpcontrol (q, 2);
-    write_lpcontrol (q, 6);
-    usleep (3);
-    write_lpcontrol (q, 0xe);
-  }
-
-  return ret;
-}
-
-
-void
-qc_dump (const struct qcam *q, char *fname)
-{
-  FILE *fp;
-  time_t t;
-
-  if ((fp = fopen (fname, "w")) == 0) {
-    fprintf (stderr, "Error: cannot open %s\n", fname);
-    return;
-  }
-
-  fprintf (fp, "# Version 0.9\n");
-  time (&t);
-  fprintf (fp, "# Created %s", ctime (&t));
-  fprintf (fp, "Width %d\nHeight %d\n", q->width, q->height);
-  fprintf (fp, "Top %d\nLeft %d\n", q->top, q->left);
-  fprintf (fp, "Bpp %d\nContrast %d\n", q->bpp, q->contrast);
-  fprintf (fp, "Brightness %d\nWhitebal %d\n", q->brightness, q->whitebal);
-  fprintf (fp, "Port 0x%x\nScale %d\n", q->port, q->transfer_scale);
-  fclose (fp);
-}
diff --git a/sys/qcam/qcam-os.c b/sys/qcam/qcam-os.c
deleted file mode 100644 (file)
index 5a8f125..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/* qcam-Linux.c -- Linux-specific routines for accessing QuickCam */
-
-/* Version 0.1, January 2, 1996 */
-/* Version 0.5, August 24, 1996 */
-
-#define LOCALSTATEDIR ""
-//#define LOCALSTATEDIR "/var/run"
-
-/******************************************************************
-
-Copyright (C) 1996 by Scott Laird
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef TESTING
-#include <errno.h>
-#endif
-#include <sys/io.h>
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include "qcam.h"
-#include "qcam-Linux.h"
-
-int __inline__
-read_lpstatus (const struct qcam *q)
-{
-  return inb (q->port + 1);
-}
-
-int
-read_lpcontrol (const struct qcam *q)
-{
-  return inb (q->port + 2);
-}
-
-int
-read_lpdata (const struct qcam *q)
-{
-  return inb (q->port);
-}
-
-void
-write_lpdata (const struct qcam *q, int d)
-{
-  outb (d, q->port);
-}
-
-void
-write_lpcontrol (const struct qcam *q, int d)
-{
-  outb (d, q->port + 2);
-}
-
-int
-enable_ports (const struct qcam *q)
-{
-  if (q->port < 0x278)
-    return 1;                   /* Better safe than sorry */
-  if (q->port > 0x3bc)
-    return 1;
-  return (ioperm (q->port, 3, 1));
-}
-
-int
-disable_ports (const struct qcam *q)
-{
-  return (ioperm (q->port, 3, 0));
-}
-
-/* Lock port.  This is currently sub-optimal, and is begging to be
-   fixed.  It should check for dead locks.  Any takers? */
-
-/* qc_lock_wait
- * This function uses POSIX fcntl-style locking on a file created in the
- * /tmp directory.  Because it uses the Unix record locking facility, locks
- * are relinquished automatically on process termination, so "dead locks"
- * are not a problem.  (FYI, the lock file will remain after process
- * termination, but this is actually desired so that the next process need
- * not re-creat(2)e it... just lock it.)
- * The wait argument indicates whether or not this funciton should "block"
- * waiting for the previous lock to be relinquished.  This is ideal so that
- * multiple processes (eg. qcam) taking "snapshots" can peacefully coexist.
- * - Dave Plonka (plonka@carroll1.cc.edu)
- */
-int
-qc_lock_wait (struct qcam *q, int wait)
-{
-#if 1
-  static struct flock sfl;
-
-  if (-1 == q->fd) {            /* we've yet to open the lock file */
-    static char lockfile[128];
-
-    sprintf (lockfile, LOCALSTATEDIR "LOCK.qcam.0x%x", q->port);
-    if (-1 == (q->fd = open (lockfile, O_WRONLY | O_CREAT, 0666))) {
-      perror ("open");
-      return 1;
-    }
-#ifdef TESTING
-    fprintf (stderr, "%s - %d: %s open(2)ed\n", __FILE__, __LINE__, lockfile);
-#endif
-
-    /* initialize the l_type memver to lock the file exclusively */
-    sfl.l_type = F_WRLCK;
-  }
-#ifdef TESTING
-  if (0 != fcntl (q->fd, F_SETLK, &sfl))        /* non-blocking set lock */
-#else
-  if (0 != fcntl (q->fd, wait ? F_SETLKW : F_SETLK, &sfl))
-#endif
-  {
-#ifdef TESTING
-    perror ("fcntl");
-    if (EAGAIN != errno || !wait)
-      return 1;
-
-    fprintf (stderr, "%s - %d: waiting for exclusive lock on fd %d...\n",
-        __FILE__, __LINE__, q->fd);
-
-    if (0 != fcntl (q->fd, F_SETLKW, &sfl))     /* "blocking" set lock */
-#endif
-    {
-      perror ("fcntl");
-      return 1;
-    }
-  }
-#ifdef TESTING
-  fprintf (stderr, "%s - %d: fd %d locked exclusively\n", __FILE__, __LINE__,
-      q->fd);
-#endif
-
-#else
-  char lockfile[128], tmp[128];
-  struct stat statbuf;
-
-  sprintf (lockfile, LOCALSTATEDIR "/LOCK.qcam.0x%x", q->port);
-  sprintf (tmp, "%s-%d", lockfile, getpid ());
-
-  if ((creat (tmp, 0) == -1) ||
-      (link (tmp, lockfile) == -1) ||
-      (stat (tmp, &statbuf) == -1) || (statbuf.st_nlink == 1)) {
-#ifdef DEBUGQC
-    perror ("QuickCam Locked");
-    if (unlink (tmp) == -1)
-      perror ("Error unlinking temp file.");
-#else
-    unlink (tmp);
-#endif
-    return 1;
-  }
-
-  unlink (tmp);
-  if (chown (lockfile, getuid (), getgid ()) == -1)
-    perror ("Chown problems");
-#endif
-
-  return 0;
-}
-
-int
-qc_lock (struct qcam *q)
-{
-#if 1
-  return qc_lock_wait (q, 1 /*wait */ );
-#else
-  return qc_lock_wait (q, 0 /*don't wait */ );
-#endif
-}
-
-/* Unlock port */
-
-int
-qc_unlock (struct qcam *q)
-{
-  static struct flock sfl;
-
-#if 1
-  if (-1 == q->fd) {            /* port was not locked */
-    return 1;
-  }
-
-  /* clear the exclusive lock */
-  sfl.l_type = F_UNLCK;
-  if (0 != fcntl (q->fd, F_SETLK, &sfl)) {
-    perror ("fcntl");
-    return 1;
-  }
-#ifdef TESTING
-  fprintf (stderr, "%s - %d: fd %d unlocked\n", __FILE__, __LINE__, q->fd);
-#endif
-
-#else
-  char lockfile[128];
-
-  sprintf (lockfile, LOCALSTATEDIR "/LOCK.qcam.0x%x", q->port);
-  unlink (lockfile);            /* What would I do with an error? */
-#endif
-
-  return 0;
-}
-
-
-/* Probe for camera.  Returns 0 if found, 1 if not found, sets
-   q->port.*/
-
-int
-qc_probe (struct qcam *q)
-{
-  int ioports[] = { 0x378, 0x278, 0x3bc, 0 };
-  int i = 0;
-
-  /* Attempt to get permission to access IO ports.  Must be root */
-
-  while (ioports[i] != 0) {
-    q->port = ioports[i++];
-
-    if (qc_open (q)) {
-      perror ("Can't get I/O permission");
-      exit (1);
-    }
-
-    if (qc_detect (q)) {
-      fprintf (stderr, "QuickCam detected at 0x%x\n", q->port);
-      qc_close (q);
-      return (0);
-    } else
-      qc_close (q);
-  }
-
-  return 1;
-}
-
-
-/* THIS IS UGLY.  I need a short delay loop -- somthing well under a
-millisecond.  Unfortunately, adding 2 usleep(1)'s to qc_command slowed
-it down by a factor of over 1000 over the same loop with 2
-usleep(0)'s, and that's too slow -- qc_start was taking over a second
-to run.  This seems to help, but if anyone has a good
-speed-independent pause routine, please tell me. -- Scott */
-
-void
-qc_wait (int val)
-{
-  int i;
-
-  while (val--)
-    for (i = 0; i < 50000; i++);
-}
diff --git a/sys/qcam/qcam-os.h b/sys/qcam/qcam-os.h
deleted file mode 100644 (file)
index 46dcbe5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* qcam-linux.h -- Linux-specific routines for accessing QuickCam */
-
-/* Version 0.1, January 2, 1996 */
-/* Version 0.5, August 24, 1996 */
-
-
-/******************************************************************
-
-Copyright (C) 1996 by Scott Laird
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************/
-
-
diff --git a/sys/qcam/qcam.h b/sys/qcam/qcam.h
deleted file mode 100644 (file)
index 35b2dc2..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/* qcam.h -- routines for accessing the Connectix QuickCam */
-
-/* Version 0.1, January 2, 1996 */
-/* Version 0.5, August 24, 1996 */
-/* Version 0.7, August 26, 1996 */
-
-
-/******************************************************************
-
-Copyright (C) 1996 by Scott Laird
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL SCOTT LAIRD BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-******************************************************************/
-
-#ifndef _QCAM_H
-#define _QCAM_H
-
-#define QC_VERSION "0.91"
-
-/* One from column A... */
-#define QC_NOTSET 0
-#define QC_UNIDIR 1
-#define QC_BIDIR  2
-#define QC_SERIAL 3
-
-/* ... and one from column B */
-#define QC_ANY          0x00
-#define QC_FORCE_UNIDIR 0x10
-#define QC_FORCE_BIDIR  0x20
-#define QC_FORCE_SERIAL 0x30
-/* in the port_mode member */
-
-#define QC_MODE_MASK    0x07
-#define QC_FORCE_MASK   0x70
-
-#define MAX_HEIGHT 243
-#define MAX_WIDTH 336
-
-struct qcam {
-  int width, height;
-  int bpp;
-  int mode;
-  int contrast, brightness, whitebal;
-  int port;
-  int port_mode;
-  int transfer_scale;
-  int top, left;
-  int fd; /* lock file descriptor
-           * It was, unfortunately, necessary to add this member to the
-           * struct qcam to conveniently implement POSIX fcntl-style locking.
-           * We need a seperate lock file for each struct qcam, for instance,
-           * if the same process (using qcam-lib) is accessing multiple
-           * QuickCams on (of course) multiple ports.
-           * - Dave Plonka (plonka@carroll1.cc.edu)
-           */
-};
-
-typedef unsigned char scanbuf;
-
-/* General QuickCam handling routines */
-
-int qc_getbrightness(const struct qcam *q);
-int qc_setbrightness(struct qcam *q, int val);
-int qc_getcontrast(const struct qcam *q);
-int qc_setcontrast(struct qcam *q, int val);
-int qc_getwhitebal(const struct qcam *q);
-int qc_setwhitebal(struct qcam *q, int val);
-void qc_getresolution(const struct qcam *q, int *x, int *y);
-int qc_setresolution(struct qcam *q, int x, int y);
-int qc_getbitdepth(const struct qcam *q);
-int qc_setbitdepth(struct qcam *q, int val);
-int qc_getheight(const struct qcam *q);
-int qc_setheight(struct qcam *q, int y);
-int qc_getwidth(const struct qcam *q);
-int qc_setwidth(struct qcam *q, int x);
-int qc_gettop(const struct qcam *q);
-int qc_settop(struct qcam *q, int val);
-int qc_getleft(const struct qcam *q);
-int qc_setleft(struct qcam *q, int val);
-int qc_gettransfer_scale(const struct qcam *q);
-int qc_settransfer_scale(struct qcam *q, int val);
-int qc_calibrate(struct qcam *q);
-int qc_forceunidir(struct qcam *q);
-void qc_dump(const struct qcam *q, char *file);
-
-struct qcam *qc_init(void);
-int qc_initfile(struct qcam *q, char *fname);
-int qc_open(struct qcam *q);
-int qc_close(struct qcam *q);
-int qc_detect(const struct qcam *q);
-void qc_reset(struct qcam *q);
-void qc_set(struct qcam *q);
-scanbuf *qc_scan(const struct qcam *q);
-scanbuf *qc_convertscan(struct qcam *q, scanbuf *scan);
-void qc_writepgm(const struct qcam *q, FILE *f, scanbuf *scan);
-void qc_wait(int val);
-
-/* OS/hardware specific routines */
-
-int read_lpstatus(const struct qcam *q);
-int read_lpcontrol(const struct qcam *q);
-int read_lpdata(const struct qcam *q);
-void write_lpdata(const struct qcam *q, int d);
-void write_lpcontrol(const struct qcam *q, int d);
-int enable_ports(const struct qcam *q);
-int disable_ports(const struct qcam *q);
-int qc_unlock(struct qcam *q);
-int qc_lock(struct qcam *q);
-void qc_wait(int val);
-int qc_probe(struct qcam *q);
-
-/* Image processing routines */
-int fixdark(const struct qcam *q, scanbuf *scan);
-int qc_edge_detect(const struct qcam *q, scanbuf *scan, int tolerance);
-
-#endif /*! _QCAM_H*/
diff --git a/sys/qcam/qcamip.h b/sys/qcam/qcamip.h
deleted file mode 100644 (file)
index 3bab6fa..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * qcamip.h - Connectix QuickCam Image Processing routines
- *
- * Time-stamp: <02 Sep 96 11:19:27 HST edo@eosys.com>
- *
- * Version 0.2
- */
-
-/******************************************************************
-
-Copyright (C) 1996 by Ed Orcutt Systems
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, and/or distribute copies of the
-Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-1. The above copyright notice and this permission notice shall
-   be included in all copies or substantial portions of the
-   Software.
-
-2. Redistribution for profit requires the express, written
-   permission of the author.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT.  IN NO EVENT SHALL ED ORCUTT SYSTEMS BE LIABLE
-FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-******************************************************************/
-
-#ifndef _QCAMIP_H
-#define _QCAMIP_H
-#include "qcam.h"
-
-/* Auto exposure modes  */
-
-#define AE_ALL_AVG 0
-#define AE_CTR_AVG 1
-#define AE_STD_AVG 2
-
-/* Return value of image processing routines */
-
-#define QCIP_XPSR_OK        0
-#define QCIP_XPSR_RSCN      1
-#define QCIP_XPSR_ERR       2
-#define QCIP_XPSR_LUM_INVLD 3
-
-/* Prototypes for image processing routines  */
-
-int qcip_autoexposure(struct qcam *q, scanbuf *scan);
-int qcip_set_luminance_target(struct qcam *q, int val);
-int qcip_set_luminance_tolerance(struct qcam *q, int val);
-int qcip_set_luminance_std_target(struct qcam *q, int val);
-int qcip_set_luminance_std_tolerance(struct qcam *q, int val);
-int qcip_set_autoexposure_mode(int val);
-void qcip_histogram(struct qcam *q, scanbuf *scan, int *histogram);
-void qcip_display_histogram(struct qcam *q, scanbuf *scan);
-
-#endif /*! _QCAMIP_H*/
diff --git a/sys/wininet/Makefile.am b/sys/wininet/Makefile.am
deleted file mode 100644 (file)
index 816d868..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-plugin_LTLIBRARIES = libgstwininet.la
-
-libgstwininet_la_SOURCES = gstwininetsrc.c
-
-libgstwininet_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-libgstwininet_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) -lwininet
-libgstwininet_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstwininet_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-noinst_HEADERS = gstwininetsrc.h
-
diff --git a/sys/wininet/gstwininetsrc.c b/sys/wininet/gstwininetsrc.c
deleted file mode 100644 (file)
index 60d2944..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-/* GStreamer Windows network source
- * Copyright (C) 2008 Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-wininetsrc
- *
- * <refsect2>
- * <title>Example launch line</title>
- * |[
- * gst-launch-1.0 -v wininetsrc location="http://71.83.57.210:9000" ! application/x-icy,metadata-interval=0 ! icydemux ! mad ! audioconvert ! directsoundsink
- * ]| receive mp3 audio over http and play it back.
- * </refsect2>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gstwininetsrc.h"
-
-#include <string.h>
-
-#define DEFAULT_LOCATION "http://localhost/"
-#define DEFAULT_POLL_MODE FALSE
-#define DEFAULT_IRADIO_MODE TRUE
-
-enum
-{
-  PROP_0,
-  PROP_LOCATION,
-  PROP_POLL_MODE,
-  PROP_IRADIO_MODE
-};
-
-GST_DEBUG_CATEGORY_STATIC (gst_win_inet_src_debug);
-#define GST_CAT_DEFAULT gst_win_inet_src_debug
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-
-static void gst_win_inet_src_init_interfaces (GType type);
-static void gst_win_inet_src_uri_handler_init (gpointer g_iface,
-    gpointer iface_data);
-
-static void gst_win_inet_src_dispose (GObject * object);
-static void gst_win_inet_src_finalize (GObject * object);
-static void gst_win_inet_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_win_inet_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-
-static gboolean gst_win_inet_src_start (GstBaseSrc * basesrc);
-static gboolean gst_win_inet_src_stop (GstBaseSrc * basesrc);
-
-static GstFlowReturn gst_win_inet_src_create (GstPushSrc * pushsrc,
-    GstBuffer ** buffer);
-
-static void gst_win_inet_src_reset (GstWinInetSrc * self);
-
-GST_BOILERPLATE_FULL (GstWinInetSrc, gst_win_inet_src, GstPushSrc,
-    GST_TYPE_PUSH_SRC, gst_win_inet_src_init_interfaces);
-
-static void
-gst_win_inet_src_base_init (gpointer gclass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
-  gst_element_class_add_static_pad_template (element_class, &src_template);
-
-  gst_element_class_set_static_metadata (element_class,
-      "Windows Network Source", "Source/Network",
-      "Receive data as a client over the network via HTTP or FTP",
-      "Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>");
-}
-
-static void
-gst_win_inet_src_class_init (GstWinInetSrcClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
-  GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass);
-
-  gobject_class->dispose = gst_win_inet_src_dispose;
-  gobject_class->finalize = gst_win_inet_src_finalize;
-  gobject_class->get_property = gst_win_inet_src_get_property;
-  gobject_class->set_property = gst_win_inet_src_set_property;
-
-  gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_win_inet_src_start);
-  gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_win_inet_src_stop);
-  gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_win_inet_src_create);
-
-  g_object_class_install_property (gobject_class,
-      PROP_LOCATION, g_param_spec_string ("location", "Location",
-          "Location to read from", DEFAULT_LOCATION, G_PARAM_READWRITE));
-
-  g_object_class_install_property (gobject_class,
-      PROP_POLL_MODE, g_param_spec_boolean ("poll-mode", "poll-mode",
-          "Enable poll mode (keep re-issuing request)",
-          DEFAULT_POLL_MODE, G_PARAM_READWRITE));
-
-  g_object_class_install_property (gobject_class,
-      PROP_IRADIO_MODE, g_param_spec_boolean ("iradio-mode", "iradio-mode",
-          "Enable Internet radio mode "
-          "(extraction of shoutcast/icecast metadata)",
-          DEFAULT_IRADIO_MODE, G_PARAM_READWRITE));
-}
-
-static void
-gst_win_inet_src_init_interfaces (GType type)
-{
-  static const GInterfaceInfo uri_handler_info = {
-    gst_win_inet_src_uri_handler_init,
-    NULL,
-    NULL
-  };
-
-  g_type_add_interface_static (type, GST_TYPE_URI_HANDLER, &uri_handler_info);
-
-  GST_DEBUG_CATEGORY_INIT (gst_win_inet_src_debug, "wininetsrc",
-      0, "Wininet source");
-}
-
-static void
-gst_win_inet_src_init (GstWinInetSrc * self, GstWinInetSrcClass * gclass)
-{
-  self->location = g_strdup (DEFAULT_LOCATION);
-  self->poll_mode = DEFAULT_POLL_MODE;
-  self->iradio_mode = DEFAULT_IRADIO_MODE;
-
-  self->inet = NULL;
-  self->url = NULL;
-  self->cur_offset = 0;
-  self->icy_caps = NULL;
-}
-
-static void
-gst_win_inet_src_dispose (GObject * object)
-{
-  GstWinInetSrc *self = GST_WIN_INET_SRC (object);
-
-  gst_win_inet_src_reset (self);
-
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-gst_win_inet_src_finalize (GObject * object)
-{
-  GstWinInetSrc *self = GST_WIN_INET_SRC (object);
-
-  g_free (self->location);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_win_inet_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstWinInetSrc *self = GST_WIN_INET_SRC (object);
-
-  switch (prop_id) {
-    case PROP_LOCATION:
-      g_value_set_string (value, self->location);
-      break;
-
-    case PROP_POLL_MODE:
-      g_value_set_boolean (value, self->poll_mode);
-      break;
-
-    case PROP_IRADIO_MODE:
-      g_value_set_boolean (value, self->iradio_mode);
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_win_inet_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstWinInetSrc *self = GST_WIN_INET_SRC (object);
-
-  switch (prop_id) {
-    case PROP_LOCATION:
-      if (GST_STATE (self) == GST_STATE_PLAYING ||
-          GST_STATE (self) == GST_STATE_PAUSED) {
-        GST_WARNING_OBJECT (self, "element must be in stopped or paused state "
-            "in order to change location");
-        break;
-      }
-
-      g_free (self->location);
-      self->location = g_value_dup_string (value);
-      break;
-
-    case PROP_POLL_MODE:
-      self->poll_mode = g_value_get_boolean (value);
-      break;
-
-    case PROP_IRADIO_MODE:
-      self->iradio_mode = g_value_get_boolean (value);
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_win_inet_src_reset (GstWinInetSrc * self)
-{
-  if (self->url != NULL) {
-    InternetCloseHandle (self->url);
-    self->url = NULL;
-  }
-
-  if (self->inet != NULL) {
-    InternetCloseHandle (self->inet);
-    self->inet = NULL;
-  }
-
-  if (self->icy_caps != NULL) {
-    gst_caps_unref (self->icy_caps);
-    self->icy_caps = NULL;
-  }
-
-  self->cur_offset = 0;
-}
-
-static gboolean
-gst_win_inet_src_get_header_value_as_int (GstWinInetSrc * self,
-    const gchar * header_name, gint * header_value, gboolean log_failure)
-{
-  gchar buf[16] = { 0, };
-  DWORD buf_size = sizeof (buf);
-  gint *value = (gint *) buf;
-
-  strcpy (buf, header_name);
-
-  if (!HttpQueryInfo (self->url, HTTP_QUERY_CUSTOM | HTTP_QUERY_FLAG_NUMBER,
-          buf, &buf_size, NULL)) {
-    if (log_failure) {
-      DWORD error_code = GetLastError ();
-      const gchar *error_str = "unknown error";
-
-      if (error_code == ERROR_HTTP_HEADER_NOT_FOUND)
-        error_str = "ERROR_HTTP_HEADER_NOT_FOUND";
-
-      GST_WARNING_OBJECT (self, "HttpQueryInfo for header '%s' failed: %s "
-          "(0x%08lx)", header_name, error_str, error_code);
-    }
-
-    return FALSE;
-  }
-
-  *header_value = *value;
-  return TRUE;
-}
-
-static gboolean
-gst_win_inet_src_open (GstWinInetSrc * self)
-{
-  const gchar *extra_headers = NULL;
-
-  gst_win_inet_src_reset (self);
-
-  self->inet = InternetOpen (NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
-  if (self->inet == NULL)
-    goto error;
-
-  if (self->iradio_mode)
-    extra_headers = "Icy-MetaData:1";   /* exactly as sent by WinAmp, no space */
-
-  self->url = InternetOpenUrl (self->inet, self->location, extra_headers,
-      (extra_headers != NULL) ? -1 : 0, INTERNET_FLAG_NO_UI, (DWORD_PTR) self);
-  if (self->url == NULL)
-    goto error;
-
-  if (self->iradio_mode) {
-    gint value;
-
-    if (gst_win_inet_src_get_header_value_as_int (self, "icy-metaint", &value,
-            TRUE)) {
-      self->icy_caps = gst_caps_new_simple ("application/x-icy",
-          "metadata-interval", G_TYPE_INT, value, NULL);
-    }
-  }
-
-  return TRUE;
-
-error:
-  GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND, (NULL),
-      ("Could not open location \"%s\" for reading: 0x%08lx",
-          self->location, GetLastError ()));
-  gst_win_inet_src_reset (self);
-
-  return FALSE;
-}
-
-static gboolean
-gst_win_inet_src_start (GstBaseSrc * basesrc)
-{
-  GstWinInetSrc *self = GST_WIN_INET_SRC (basesrc);
-
-  return gst_win_inet_src_open (self);
-}
-
-static gboolean
-gst_win_inet_src_stop (GstBaseSrc * basesrc)
-{
-  gst_win_inet_src_reset (GST_WIN_INET_SRC (basesrc));
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_win_inet_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer)
-{
-  GstWinInetSrc *self = GST_WIN_INET_SRC (pushsrc);
-  GstBaseSrc *basesrc = GST_BASE_SRC (pushsrc);
-  GstBuffer *buf = NULL;
-  GstFlowReturn ret = GST_FLOW_OK;
-  DWORD bytes_read = 0;
-
-  do {
-    GstCaps *caps = GST_PAD_CAPS (GST_BASE_SRC_PAD (self));
-
-    if (self->icy_caps != NULL)
-      caps = self->icy_caps;
-
-    ret = gst_pad_alloc_buffer (GST_BASE_SRC_PAD (basesrc),
-        self->cur_offset, basesrc->blocksize, caps, &buf);
-
-    if (G_LIKELY (ret == GST_FLOW_OK)) {
-      if (InternetReadFile (self->url, GST_BUFFER_DATA (buf),
-              basesrc->blocksize, &bytes_read)) {
-        if (bytes_read == 0) {
-          if (self->poll_mode) {
-            if (gst_win_inet_src_open (self)) {
-              gst_buffer_unref (buf);
-              buf = NULL;
-            } else {
-              ret = GST_FLOW_ERROR;
-            }
-          } else {
-            GST_ERROR_OBJECT (self, "short read (eof?)");
-            ret = GST_FLOW_UNEXPECTED;
-          }
-        }
-      } else {
-        GST_ERROR_OBJECT (self, "InternetReadFile failed: 0x%08lx",
-            GetLastError ());
-
-        ret = GST_FLOW_ERROR;
-      }
-    }
-  }
-  while (bytes_read == 0 && ret == GST_FLOW_OK);
-
-  if (ret == GST_FLOW_OK) {
-    GST_BUFFER_SIZE (buf) = bytes_read;
-    self->cur_offset += bytes_read;
-
-    *buffer = buf;
-  } else {
-    if (buf != NULL)
-      gst_buffer_unref (buf);
-  }
-
-  return ret;
-}
-
-static GstURIType
-gst_win_inet_src_uri_get_type (void)
-{
-  return GST_URI_SRC;
-}
-
-static gchar **
-gst_win_inet_src_uri_get_protocols (void)
-{
-  static const gchar *protocols[] = { "http", "https", "ftp", NULL };
-
-  return (gchar **) protocols;
-}
-
-static const gchar *
-gst_win_inet_src_uri_get_uri (GstURIHandler * handler)
-{
-  GstWinInetSrc *src = GST_WIN_INET_SRC (handler);
-
-  return src->location;
-}
-
-static gboolean
-gst_win_inet_src_uri_set_uri (GstURIHandler * handler, const gchar * uri)
-{
-  GstWinInetSrc *src = GST_WIN_INET_SRC (handler);
-
-  g_free (src->location);
-  src->location = g_strdup (uri);
-  return TRUE;
-}
-
-static void
-gst_win_inet_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
-{
-  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
-
-  iface->get_type = gst_win_inet_src_uri_get_type;
-  iface->get_protocols = gst_win_inet_src_uri_get_protocols;
-  iface->get_uri = gst_win_inet_src_uri_get_uri;
-  iface->set_uri = gst_win_inet_src_uri_set_uri;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return gst_element_register (plugin, "wininetsrc",
-      GST_RANK_NONE, GST_TYPE_WIN_INET_SRC);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    wininet,
-    "Windows network plugins",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/wininet/gstwininetsrc.h b/sys/wininet/gstwininetsrc.h
deleted file mode 100644 (file)
index 0803d9e..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* GStreamer Windows network source
- * Copyright (C) 2008 Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_WIN_INET_SRC_H__
-#define __GST_WIN_INET_SRC_H__
-
-#include <windows.h>
-#include <wininet.h>
-#include <gst/base/gstpushsrc.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_WIN_INET_SRC \
-  (gst_win_inet_src_get_type ())
-#define GST_WIN_INET_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_WIN_INET_SRC, GstWinInetSrc))
-#define GST_WIN_INET_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_WIN_INET_SRC, GstWinInetSrcClass))
-#define GST_IS_WIN_INET_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_WIN_INET_SRC))
-#define GST_IS_WIN_INET_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_WIN_INET_SRC))
-
-typedef struct _GstWinInetSrc      GstWinInetSrc;
-typedef struct _GstWinInetSrcClass GstWinInetSrcClass;
-
-struct _GstWinInetSrc
-{
-  GstPushSrc push_src;
-
-  /* property storage */
-  gchar * location;
-  gboolean poll_mode;
-  gboolean iradio_mode;
-
-  /* state */
-  HINTERNET inet;
-  HINTERNET url;
-  guint64 cur_offset;
-  GstCaps * icy_caps;
-};
-
-struct _GstWinInetSrcClass
-{
-  GstPushSrcClass parent_class;
-};
-
-GType gst_win_inet_src_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_WIN_INET_SRC_H__ */
-
index 21c4110..508b3b5 100644 (file)
@@ -14,11 +14,11 @@ AM_TESTS_ENVIRONMENT += \
        GST_PLUGIN_SYSTEM_PATH_1_0=                             \
        GST_PLUGIN_PATH_1_0=$(top_builddir)/gst:$(top_builddir)/sys:$(top_builddir)/ext:$(GST_PLUGINS_LIBAV_DIR):$(GST_PLUGINS_UGLY_DIR):$(GST_PLUGINS_GOOD_DIR):$(GST_PLUGINS_BASE_DIR):$(GST_PLUGINS_DIR) \
        GST_PLUGIN_LOADING_WHITELIST="gstreamer@$(GST_PLUGINS_DIR):gst-plugins-base@$(GSTPB_PLUGINS_DIR):gst-plugins-good:gst-plugins-ugly:gst-libav:gst-plugins-bad@$(top_builddir)" \
-       GST_STATE_IGNORE_ELEMENTS="apexsink avdtpsrc camerabin dc1394src \
-           dccpclientsrc dccpclientsink dccpserversrc dccpserversink decklinksrc \
+       GST_STATE_IGNORE_ELEMENTS="avdtpsrc camerabin dc1394src \
+           decklinksrc \
            decklinksink dtlssrtpdec dtlssrtpenc dvbsrc dvbbasebin dfbvideosink festival fluidsynth \
-           linsyssdisrc linsyssdisink nassink kmssink \
-           rsndvdbin sdlaudiosink sdlvideosink vcdsrc rfbsrc vdpauyuvvideo vdpauvideoyuv \
+           kmssink \
+           rsndvdbin vcdsrc rfbsrc vdpauyuvvideo vdpauvideoyuv \
            vdpaumpegdec vdpaumpeg4dec vdpauh264dec vdpauvideopostprocess vdpausink neonhttpsrc"
 
 plugindir = $(libdir)/gstreamer-@GST_API_VERSION@
@@ -120,12 +120,6 @@ else
 check_x265enc=
 endif
 
-if USE_TIMIDITY
-check_timidity=elements/timidity
-else
-check_timidity=
-endif
-
 if USE_KATE
 check_kate=elements/kate
 else
@@ -247,7 +241,6 @@ check_PROGRAMS = \
        $(check_mplex)     \
        $(check_mssdemux) \
        $(check_ofa)        \
-       $(check_timidity)  \
        $(check_kate)  \
        $(check_opencv) \
        $(check_curl) \
@@ -446,9 +439,6 @@ elements_jifmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(EXIF_CFLAGS) $(AM_CFLAGS)
 elements_jifmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgsttag-$(GST_API_VERSION) $(GST_CHECK_LIBS) $(EXIF_LIBS) $(LDADD)
 elements_jifmux_SOURCES = elements/jifmux.c
 
-elements_timidity_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
-elements_timidity_LDADD = $(GST_BASE_LIBS) $(LDADD)
-
 elements_kate_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS)
 elements_kate_LDADD = $(GST_BASE_LIBS) $(LDADD)
 
diff --git a/tests/check/elements/timidity.c b/tests/check/elements/timidity.c
deleted file mode 100644 (file)
index 5c85b65..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/* GStreamer
- *
- * unit test for timidity/wildmidi
- *
- * Copyright (C) <2007> Stefan Kost <ensonic@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <unistd.h>
-
-#include <gst/check/gstcheck.h>
-#include <gst/base/gsttypefindhelper.h>
-
-
-GST_START_TEST (test_midi_typefind)
-{
-  const guint8 midi_header[] = {
-    0x4d, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x60, 0x4d, 0x54,
-    0x72, 0x6b, 0x00, 0x00
-  };
-  GstTypeFindProbability prob;
-  const gchar *type;
-  GstBuffer *buf;
-  GstCaps *caps = NULL;
-
-  buf = gst_buffer_new ();
-  GST_BUFFER_DATA (buf) = (guint8 *) midi_header;
-  GST_BUFFER_SIZE (buf) = sizeof (midi_header);
-  GST_BUFFER_OFFSET (buf) = 0;
-
-  caps = gst_type_find_helper_for_buffer (NULL, buf, &prob);
-  fail_unless (caps != NULL);
-  GST_LOG ("Found type: %" GST_PTR_FORMAT, caps);
-
-  type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
-  fail_unless_equals_string (type, "audio/midi");
-  fail_unless (prob > GST_TYPE_FIND_MINIMUM && prob <= GST_TYPE_FIND_MAXIMUM);
-
-  gst_buffer_unref (buf);
-  gst_caps_unref (caps);
-
-}
-
-GST_END_TEST;
-
-
-static Suite *
-timidity_suite (void)
-{
-  Suite *s = suite_create ("timidity");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_midi_typefind);
-
-  return s;
-}
-
-GST_CHECK_MAIN (timidity);
diff --git a/tests/icles/dccp/README b/tests/icles/dccp/README
deleted file mode 100644 (file)
index e76ead5..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-Applications
-
-If you want to compile the applications you will need to run this command-line:
-gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) <applicationName>.c -o <applicationName>
-
-To run:
-./<applicationName>
-
-
-Command-line
-
-###### Pipe to transmit a file #
-
-* Server:
-gst-launch -v filesrc location=file ! dccpserversink port=9011 ccid=2
-
-* Client:
-gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 ! filesink location=fileDist
-
-###### Pipe to transmit from the microphone #
-
-* Server:
-gst-launch -v alsasrc ! dccpserversink port=9011 ccid=2
-
-* Client:
-gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 caps="audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100, channels=(int)2" ! alsasink
-
-###### Pipe to transmit a MP3 #
-
-* Server:
-gst-launch -v filesrc location=music.mp3 ! mad ! dccpserversink port=9011 ccid=2
-
-* Client:
-gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 caps="audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100, channels=(int)2" ! alsasink
-
-###### Pipe to stream a MP3 #
-
-* Server:
-gst-launch -v filesrc location=music.mp3 ! mp3parse ! dccpserversink port=9011 ccid=2
-
-* Client:
-gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 ! decodebin ! alsasink
--- We also tested with mpg123, to use it: mpg123 dccp://localhost:9011
-
-###### Pipe to transmit a MP3 with dccp, speex and rtp #
-
-* Server:
-gst-launch -v filesrc location=music.mp3 ! mad ! audioconvert ! capsfilter caps="audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)1" ! speexenc ! rtpspeexpay ! dccpserversink port=9011 ccid=2
-
-* Client:
-gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 caps="application/x-rtp, media=(string)audio, payload=(int)110, clock-rate=(int)44100, encoding-name=(string)SPEEX, ssrc=(guint)152981653, clock-base=(guint)1553719649, seqnum-base=(guint)3680, encoding-params=(string)1" ! rtpspeexdepay ! speexdec ! alsasink
-
diff --git a/tests/icles/dccp/call/DCCPClient.c b/tests/icles/dccp/call/DCCPClient.c
deleted file mode 100644 (file)
index 5f7eb01..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-void
-start_dccpserversink_pipe (GstElement * object, gint socket, gpointer data)
-{
-  GstElement *dccpserversink = (GstElement *) data;
-  g_object_set (G_OBJECT (dccpserversink), "sockfd", socket, NULL);
-
-  g_print ("Setting pipelinesink to PLAYING\n");
-  GstElement *pipelinesink =
-      (GstElement *) gst_element_get_parent (dccpserversink);
-  gst_element_set_state (pipelinesink, GST_STATE_PLAYING);
-  gst_object_unref (pipelinesink);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GstElement *pipelinesink, *alsasrc, *dccpserversink;
-  GstElement *pipelinesrc, *alsasink, *dccpclientsrc;
-  GMainLoop *loop;
-  GstBus *bus;
-  GstCaps *caps;
-
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 2) {
-    g_print ("%s\n", "see usage: serverHost");
-    return -1;
-  }
-
-  /* create elements */
-  pipelinesink = gst_pipeline_new ("audio-sender");
-  alsasrc = gst_element_factory_make ("alsasrc", "alsa-source");
-  dccpserversink = gst_element_factory_make ("dccpserversink", "server-sink");
-  pipelinesrc = gst_pipeline_new ("audio-receiver");
-  alsasink = gst_element_factory_make ("alsasink", "alsa-sink");
-  dccpclientsrc = gst_element_factory_make ("dccpclientsrc", "client-source");
-
-
-  if (!pipelinesink || !alsasrc || !dccpserversink || !pipelinesrc || !alsasink
-      || !dccpclientsrc) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  caps =
-      gst_caps_from_string
-      ("audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100, channels=(int)2");
-  g_object_set (G_OBJECT (dccpclientsrc), "caps", caps, NULL);
-
-  g_object_set (G_OBJECT (dccpclientsrc), "host", argv[1], NULL);
-  /*g_object_set (G_OBJECT (dccpclientsrc), "ccid", 3, NULL);
-     g_object_set (G_OBJECT (dccpserversink), "ccid", 3, NULL); */
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipelinesink));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipelinesrc));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipelinesink), alsasrc, dccpserversink, NULL);
-  gst_element_link_many (alsasrc, dccpserversink, NULL);
-
-  gst_bin_add_many (GST_BIN (pipelinesrc), dccpclientsrc, alsasink, NULL);
-  gst_element_link (dccpclientsrc, alsasink);
-
-  g_signal_connect (dccpclientsrc, "connected",
-      (GCallback) start_dccpserversink_pipe, dccpserversink);
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting pipelinesrc to PLAYING\n");
-  gst_element_set_state (pipelinesrc, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipelinesink, GST_STATE_NULL);
-  g_print ("Deleting pipelinesink\n");
-  gst_object_unref (GST_OBJECT (pipelinesink));
-
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipelinesrc, GST_STATE_NULL);
-  g_print ("Deleting pipelinesrc\n");
-  gst_object_unref (GST_OBJECT (pipelinesrc));
-
-
-  return 0;
-}
diff --git a/tests/icles/dccp/call/DCCPServer.c b/tests/icles/dccp/call/DCCPServer.c
deleted file mode 100644 (file)
index fe0e34f..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-void
-start_dccpclientsrc_pipe (GstElement * object, gint socket, gpointer data)
-{
-  GstElement *dccpclientsrc = (GstElement *) data;
-  g_object_set (G_OBJECT (dccpclientsrc), "sockfd", socket, NULL);
-
-  g_print ("Setting pipelinesrc to PLAYING\n");
-  GstElement *pipelinesrc =
-      (GstElement *) gst_element_get_parent (dccpclientsrc);
-  gst_element_set_state (pipelinesrc, GST_STATE_PLAYING);
-  gst_object_unref (pipelinesrc);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GstElement *pipelinesink, *alsasrc, *dccpserversink;
-  GstElement *pipelinesrc, *alsasink, *dccpclientsrc;
-  GMainLoop *loop;
-  GstBus *bus;
-  GstCaps *caps;
-
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* create elements */
-  pipelinesink = gst_pipeline_new ("audio-sender");
-  alsasrc = gst_element_factory_make ("alsasrc", "alsa-source");
-  dccpserversink = gst_element_factory_make ("dccpserversink", "server-sink");
-  pipelinesrc = gst_pipeline_new ("audio-receiver");
-  alsasink = gst_element_factory_make ("alsasink", "alsa-sink");
-  dccpclientsrc = gst_element_factory_make ("dccpclientsrc", "client-source");
-
-
-  if (!pipelinesink || !alsasrc || !dccpserversink || !pipelinesrc || !alsasink
-      || !dccpclientsrc) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  caps =
-      gst_caps_from_string
-      ("audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100, channels=(int)2");
-  g_object_set (G_OBJECT (dccpclientsrc), "caps", caps, NULL);
-
-  /*g_object_set (G_OBJECT (dccpclientsrc), "ccid", 3, NULL);
-     g_object_set (G_OBJECT (dccpserversink), "ccid", 3, NULL); */
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipelinesink));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipelinesrc));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipelinesink), alsasrc, dccpserversink, NULL);
-  gst_element_link_many (alsasrc, dccpserversink, NULL);
-
-  gst_bin_add_many (GST_BIN (pipelinesrc), dccpclientsrc, alsasink, NULL);
-  gst_element_link (dccpclientsrc, alsasink);
-
-  g_signal_connect (dccpserversink, "connected",
-      (GCallback) start_dccpclientsrc_pipe, dccpclientsrc);
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting pipelinesink to PLAYING\n");
-  gst_element_set_state (pipelinesink, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipelinesink, GST_STATE_NULL);
-  g_print ("Deleting pipelinesink\n");
-  gst_object_unref (GST_OBJECT (pipelinesink));
-
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipelinesrc, GST_STATE_NULL);
-  g_print ("Deleting pipelinesrc\n");
-  gst_object_unref (GST_OBJECT (pipelinesrc));
-
-
-  return 0;
-}
diff --git a/tests/icles/dccp/call/README b/tests/icles/dccp/call/README
deleted file mode 100644 (file)
index ed53abd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-This application tests the socket sharing.
diff --git a/tests/icles/dccp/file/DCCPClientSaveFile.c b/tests/icles/dccp/file/DCCPClientSaveFile.c
deleted file mode 100644 (file)
index cdd7fe2..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *filesink, *dccpclientsrc;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 4) {
-    g_print ("%s\n", "see usage: serverHost serverPort location");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  filesink = gst_element_factory_make ("filesink", "file-sink");
-  dccpclientsrc = gst_element_factory_make ("dccpclientsrc", "client-source");
-
-
-  if (!pipeline || !filesink || !dccpclientsrc) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  g_object_set (G_OBJECT (dccpclientsrc), "host", argv[1], NULL);
-  g_object_set (G_OBJECT (dccpclientsrc), "port", atoi (argv[2]), NULL);
-  /*g_object_set (G_OBJECT (dccpclientsrc), "ccid", 3, NULL); */
-  g_object_set (G_OBJECT (filesink), "location", argv[3], NULL);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), dccpclientsrc, filesink, NULL);
-
-  gst_element_link (dccpclientsrc, filesink);
-
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/file/DCCPServerSendFile.c b/tests/icles/dccp/file/DCCPServerSendFile.c
deleted file mode 100644 (file)
index 768381f..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *filesrc, *dccpserversink;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: port mp3Location");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  filesrc = gst_element_factory_make ("filesrc", "file-source");
-  dccpserversink = gst_element_factory_make ("dccpserversink", "server-sink");
-
-
-  if (!pipeline || !filesrc || !dccpserversink) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  g_object_set (G_OBJECT (dccpserversink), "port", atoi (argv[1]), NULL);
-  /*g_object_set (G_OBJECT (dccpserversink), "ccid", 3, NULL); */
-  g_object_set (G_OBJECT (filesrc), "location", argv[2], NULL);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), filesrc, dccpserversink, NULL);
-
-  gst_element_link_many (filesrc, dccpserversink, NULL);
-
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mic/DCCPClientPlayMic.c b/tests/icles/dccp/mic/DCCPClientPlayMic.c
deleted file mode 100644 (file)
index 4cd0c3b..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *alsasink, *dccpclientsrc;
-  GstCaps *caps;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: serverHost serverPort");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-receiver");
-  alsasink = gst_element_factory_make ("alsasink", "alsa-sink");
-  dccpclientsrc = gst_element_factory_make ("dccpclientsrc", "client-source");
-
-  if (!pipeline || !alsasink || !dccpclientsrc) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  caps =
-      gst_caps_from_string
-      ("audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100, channels=(int)2");
-
-  g_object_set (G_OBJECT (dccpclientsrc), "caps", caps, NULL);
-  g_object_set (G_OBJECT (dccpclientsrc), "host", argv[1], NULL);
-  g_object_set (G_OBJECT (dccpclientsrc), "port", atoi (argv[2]), NULL);
-  /*g_object_set (G_OBJECT (dccpclientsrc), "ccid", 3, NULL); */
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), dccpclientsrc, alsasink, NULL);
-
-  gst_element_link (dccpclientsrc, alsasink);
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mic/DCCPServerMic.c b/tests/icles/dccp/mic/DCCPServerMic.c
deleted file mode 100644 (file)
index d401198..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *alsasrc, *dccpserversink;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 2) {
-    g_print ("%s\n", "see usage: port");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  alsasrc = gst_element_factory_make ("alsasrc", "alsa-source");
-  dccpserversink = gst_element_factory_make ("dccpserversink", "server-sink");
-
-
-  if (!pipeline || !alsasrc || !dccpserversink) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  g_object_set (G_OBJECT (dccpserversink), "port", atoi (argv[1]), NULL);
-  /*g_object_set (G_OBJECT (dccpserversink), "ccid", 3, NULL); */
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), alsasrc, dccpserversink, NULL);
-
-  gst_element_link_many (alsasrc, dccpserversink, NULL);
-
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mp3/DCCPClientPlayMP3.c b/tests/icles/dccp/mp3/DCCPClientPlayMP3.c
deleted file mode 100644 (file)
index ac55d25..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *alsasink, *dccpclientsrc;
-  GstCaps *caps;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: serverHost serverPort");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  alsasink = gst_element_factory_make ("alsasink", "alsa-sink");
-  dccpclientsrc = gst_element_factory_make ("dccpclientsrc", "client-source");
-
-  if (!pipeline || !alsasink || !dccpclientsrc) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  caps =
-      gst_caps_from_string
-      ("audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100, channels=(int)2");
-  g_object_set (G_OBJECT (dccpclientsrc), "caps", caps, NULL);
-  gst_object_unref (caps);
-
-  g_object_set (G_OBJECT (dccpclientsrc), "host", argv[1], NULL);
-  g_object_set (G_OBJECT (dccpclientsrc), "port", atoi (argv[2]), NULL);
-  /*g_object_set (G_OBJECT (dccpclientsrc), "ccid", 2, NULL); */
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), dccpclientsrc, alsasink, NULL);
-
-  gst_element_link_many (dccpclientsrc, alsasink, NULL);
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mp3/DCCPServerSendMP3.c b/tests/icles/dccp/mp3/DCCPServerSendMP3.c
deleted file mode 100644 (file)
index a7d9d5d..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *filesrc, *dccpserversink, *mad;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: port mp3Location");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  filesrc = gst_element_factory_make ("filesrc", "file-source");
-  mad = gst_element_factory_make ("mad", "mad");
-  dccpserversink = gst_element_factory_make ("dccpserversink", "server-sink");
-
-
-  if (!pipeline || !filesrc || !dccpserversink || !mad) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  g_object_set (G_OBJECT (dccpserversink), "port", atoi (argv[1]), NULL);
-  /*g_object_set (G_OBJECT (dccpserversink), "ccid", 2, NULL); */
-  g_object_set (G_OBJECT (filesrc), "location", argv[2], NULL);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), filesrc, mad, dccpserversink, NULL);
-
-  gst_element_link_many (filesrc, mad, dccpserversink, NULL);
-
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mp3Speex/DCCPClientPlaySpeexMP3.c b/tests/icles/dccp/mp3Speex/DCCPClientPlaySpeexMP3.c
deleted file mode 100644 (file)
index 4d260f2..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *alsasink, *rtpspeexdepay, *speexdec, *dccpclientsrc;
-  GstCaps *caps;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: serverHost serverPort");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  alsasink = gst_element_factory_make ("alsasink", "alsa-sink");
-  rtpspeexdepay = gst_element_factory_make ("rtpspeexdepay", "rtpspeexdepay");
-  speexdec = gst_element_factory_make ("speexdec", "speexdec");
-  dccpclientsrc = gst_element_factory_make ("dccpclientsrc", "client-source");
-
-  if (!pipeline || !alsasink || !rtpspeexdepay || !speexdec || !dccpclientsrc) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  caps =
-      gst_caps_from_string
-      ("application/x-rtp, media=(string)audio, payload=(int)110, clock-rate=(int)44100, encoding-name=(string)SPEEX, ssrc=(guint)152981653, clock-base=(guint)1553719649, seqnum-base=(guint)3680, encoding-params=(string)1");
-  g_object_set (G_OBJECT (dccpclientsrc), "caps", caps, NULL);
-  gst_object_unref (caps);
-
-  g_object_set (G_OBJECT (dccpclientsrc), "host", argv[1], NULL);
-  g_object_set (G_OBJECT (dccpclientsrc), "port", atoi (argv[2]), NULL);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), dccpclientsrc, rtpspeexdepay, speexdec,
-      alsasink, NULL);
-
-  gst_element_link_many (dccpclientsrc, rtpspeexdepay, speexdec, alsasink,
-      NULL);
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mp3Speex/DCCPServerSendSpeexMP3.c b/tests/icles/dccp/mp3Speex/DCCPServerSendSpeexMP3.c
deleted file mode 100644 (file)
index a5d9e0d..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *filesrc, *mad, *audioconvert, *capsfilter, *speexenc,
-      *rtpspeexpay, *dccpserversink;
-  GstCaps *caps;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: port mp3Location");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  filesrc = gst_element_factory_make ("filesrc", "file-source");
-  mad = gst_element_factory_make ("mad", "mad");
-  audioconvert = gst_element_factory_make ("audioconvert", "audioconvert");
-  capsfilter = gst_element_factory_make ("capsfilter", "capsfilter");
-  speexenc = gst_element_factory_make ("speexenc", "speexenc");
-  rtpspeexpay = gst_element_factory_make ("rtpspeexpay", "rtpspeexpay");
-  dccpserversink = gst_element_factory_make ("dccpserversink", "server-sink");
-
-
-  if (!pipeline || !filesrc || !dccpserversink || !mad || !audioconvert
-      || !capsfilter || !speexenc || !rtpspeexpay) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  g_object_set (G_OBJECT (dccpserversink), "port", atoi (argv[1]), NULL);
-  g_object_set (G_OBJECT (filesrc), "location", argv[2], NULL);
-
-  caps =
-      gst_caps_from_string
-      ("audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)1");
-  g_object_set (G_OBJECT (capsfilter), "caps", caps, NULL);
-  gst_object_unref (caps);
-
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), filesrc, mad, audioconvert, capsfilter,
-      speexenc, rtpspeexpay, dccpserversink, NULL);
-
-  gst_element_link_many (filesrc, mad, audioconvert, capsfilter, speexenc,
-      rtpspeexpay, dccpserversink, NULL);
-
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mp3Stream/DCCPClientPlayMP3Stream.c b/tests/icles/dccp/mp3Stream/DCCPClientPlayMP3Stream.c
deleted file mode 100644 (file)
index fb09e4b..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *alsasink, *mad, *audioconvert, *dccpclientsrc;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: serverHost serverPort");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender");
-  dccpclientsrc = gst_element_factory_make ("dccpclientsrc", "client-source");
-  mad = gst_element_factory_make ("mad", "mad");
-  audioconvert = gst_element_factory_make ("audioconvert", "audioconvert");
-  alsasink = gst_element_factory_make ("alsasink", "alsa-sink");
-
-  if (!pipeline || !alsasink || !mad || !audioconvert || !dccpclientsrc) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  g_object_set (G_OBJECT (dccpclientsrc), "host", argv[1], NULL);
-  g_object_set (G_OBJECT (dccpclientsrc), "port", atoi (argv[2]), NULL);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), dccpclientsrc, mad, audioconvert,
-      alsasink, NULL);
-
-  gst_element_link_many (dccpclientsrc, mad, audioconvert, alsasink, NULL);
-
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}
diff --git a/tests/icles/dccp/mp3Stream/DCCPServerSendMP3Stream.c b/tests/icles/dccp/mp3Stream/DCCPServerSendMP3Stream.c
deleted file mode 100644 (file)
index 2b090a2..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Leandro Melo de Sales <leandroal@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <gst/gst.h>
-
-static gboolean
-bus_call (GstBus * bus, GstMessage * msg, gpointer data)
-{
-
-  GMainLoop *loop = (GMainLoop *) data;
-
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-      g_print ("End-of-stream\n");
-      g_main_loop_quit (loop);
-      break;
-    case GST_MESSAGE_ERROR:{
-      gchar *debug;
-      GError *err;
-
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-
-      g_main_loop_quit (loop);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-int
-main (int argc, char *argv[])
-{
-
-  GMainLoop *loop;
-  GstBus *bus;
-  GstElement *pipeline, *filesrc, *mp3parse, *dccpserversink;
-
-  /* initialize GStreamer */
-  gst_init (&argc, &argv);
-  loop = g_main_loop_new (NULL, FALSE);
-
-  /* check input arguments */
-  if (argc != 3) {
-    g_print ("%s\n", "see usage: port mp3Location");
-    return -1;
-  }
-
-  /* create elements */
-  pipeline = gst_pipeline_new ("audio-sender"); /* create pipeline with the name audio-sender */
-  filesrc = gst_element_factory_make ("filesrc", "file-source");        /* create filesrc element with the name file-source */
-  mp3parse = gst_element_factory_make ("mp3parse", "mp3parse");
-  dccpserversink = gst_element_factory_make ("dccpserversink", "server-sink");
-
-
-  if (!pipeline || !filesrc || !mp3parse || !dccpserversink) {
-    g_print ("One element could not be created\n");
-    return -1;
-  }
-
-  g_object_set (G_OBJECT (dccpserversink), "port", atoi (argv[1]), NULL);
-  g_object_set (G_OBJECT (filesrc), "location", argv[2], NULL);
-
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, loop);
-  gst_object_unref (bus);
-
-  /* put all elements in a bin */
-  gst_bin_add_many (GST_BIN (pipeline), filesrc, mp3parse, dccpserversink,
-      NULL);
-  /* Link the elements at the pipeline */
-  gst_element_link_many (filesrc, mp3parse, dccpserversink, NULL);
-
-
-  /* Now set to playing and iterate. */
-  g_print ("Setting to PLAYING\n");
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  g_print ("Running\n");
-  g_main_loop_run (loop);
-
-  /* clean up nicely */
-  g_print ("Returned, stopping playback\n");
-  gst_element_set_state (pipeline, GST_STATE_NULL);
-  g_print ("Deleting pipeline\n");
-  gst_object_unref (GST_OBJECT (pipeline));
-
-  return 0;
-}