Search
j0ke.net Open Build Service
>
Projects
>
multimedia
:
SL12
>
xine-lib
> xine-lib-1.1.20-mjpegplugin.diff
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File xine-lib-1.1.20-mjpegplugin.diff of Package xine-lib (Revision 5)
Currently displaying revision
5
,
show latest
diff -uNr xine-lib-1.1.20.orig/configure xine-lib-1.1.20/configure --- xine-lib-1.1.20.orig/configure 2011-11-13 02:37:22.000000000 +0100 +++ xine-lib-1.1.20/configure 2011-11-13 17:40:51.568377304 +0100 @@ -34954,6 +34954,7 @@ echo " * video decoder plugins:" echo " - MPEG 1,2 - Amiga Bitplane" echo " - Raw RGB - Raw YUV" +echo " - Motion JPEG" if test "x$with_external_ffmpeg" = "xyes"; then echo " - ffmpeg (external library):" else diff -uNr xine-lib-1.1.20.orig/configure.ac xine-lib-1.1.20/configure.ac --- xine-lib-1.1.20.orig/configure.ac 2011-11-13 17:38:54.705413389 +0100 +++ xine-lib-1.1.20/configure.ac 2011-11-13 17:40:51.572377268 +0100 @@ -1109,6 +1109,28 @@ AC_SUBST([SDL_LIBS]) dnl --------------------------------------------- +dnl check for libjpeg +dnl --------------------------------------------- + +AC_ARG_ENABLE([jpeg], + AC_HELP_STRING([--disable-jpeg], [do not build JPEG support]), + [with_jpeg=$enableval], [with_jpeg=yes]) + +if test "x$with_jpeg" = "xyes"; then + AC_CHECK_HEADERS(jpeglib.h, + [ + AC_CHECK_LIB(jpeg,jpeg_start_decompress, + [ + AC_DEFINE(HAVE_JPEG,1,[Define this if you have libjpeg library installed]) + ]) + ]) +else + no_sdl=yes +fi +AM_CONDITIONAL(HAVE_JPEG, [test x"$with_jpeg" == x"yes"]) + + +dnl --------------------------------------------- dnl check for Libstk dnl --------------------------------------------- @@ -2845,6 +2867,7 @@ src/libxineadec/gsm610/Makefile src/libxineadec/nosefart/Makefile src/libreal/Makefile +src/mjpeg/Makefile src/post/Makefile src/post/planar/Makefile src/post/goom/Makefile @@ -3063,6 +3086,9 @@ dnl audio decoders echo " * audio decoder plugins:" echo " - GSM 06.10 - linear PCM" +if test x"$with_jpeg" == x"yes"; then + echo " - Motion JPEG (libjpeg based)" +fi if test "x$with_external_ffmpeg" = "xyes"; then echo " - ffmpeg (external library):" echo " - Windows Media Audio v1/v2/Pro" diff -uNr xine-lib-1.1.20.orig/src/Makefile.am xine-lib-1.1.20/src/Makefile.am --- xine-lib-1.1.20.orig/src/Makefile.am 2011-11-13 17:38:54.705413389 +0100 +++ xine-lib-1.1.20/src/Makefile.am 2011-11-13 17:40:51.572377268 +0100 @@ -27,6 +27,7 @@ libreal \ libfaad \ libmusepack \ + mjpeg \ post \ combined \ vdr diff -uNr xine-lib-1.1.20.orig/src/Makefile.in xine-lib-1.1.20/src/Makefile.in --- xine-lib-1.1.20.orig/src/Makefile.in 2011-11-13 02:37:24.000000000 +0100 +++ xine-lib-1.1.20/src/Makefile.in 2011-11-13 17:40:51.572377268 +0100 @@ -460,6 +460,7 @@ libreal \ libfaad \ libmusepack \ + mjpeg \ post \ combined diff -uNr xine-lib-1.1.20.orig/src/mjpeg/Makefile.am xine-lib-1.1.20/src/mjpeg/Makefile.am --- xine-lib-1.1.20.orig/src/mjpeg/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ xine-lib-1.1.20/src/mjpeg/Makefile.am 2011-11-13 17:40:51.572377268 +0100 @@ -0,0 +1,9 @@ +include $(top_srcdir)/misc/Makefile.common + +if HAVE_JPEG +xineplug_LTLIBRARIES = xineplug_decode_mjpeg.la +xineplug_decode_mjpeg_la_SOURCES = xine_mjpeg_decoder.c +xineplug_decode_mjpeg_la_LIBADD = $(XINE_LIB) -ljpeg +xineplug_decode_mjpeg_la_CFLAGS = $(VISIBILITY_FLAG) +xineplug_decode_mjpeg_la_LDFLAGS = $(xineplug_ldflags) +endif diff -uNr xine-lib-1.1.20.orig/src/mjpeg/Makefile.in xine-lib-1.1.20/src/mjpeg/Makefile.in --- xine-lib-1.1.20.orig/src/mjpeg/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +++ xine-lib-1.1.20/src/mjpeg/Makefile.in 2011-11-13 17:40:51.572377268 +0100 @@ -0,0 +1,751 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(top_srcdir)/misc/Makefile.common +subdir = src/mjpeg +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/_xine.m4 $(top_srcdir)/m4/aa.m4 \ + $(top_srcdir)/m4/arts.m4 $(top_srcdir)/m4/attributes.m4 \ + $(top_srcdir)/m4/directx.m4 $(top_srcdir)/m4/dl.m4 \ + $(top_srcdir)/m4/dvdnav.m4 $(top_srcdir)/m4/gas.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/ioctl_request.m4 $(top_srcdir)/m4/irixal.m4 \ + $(top_srcdir)/m4/isc-posix.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libFLAC.m4 $(top_srcdir)/m4/libfame.m4 \ + $(top_srcdir)/m4/libtool15.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/opengl.m4 $(top_srcdir)/m4/optimizations.m4 \ + $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/pthreads.m4 \ + $(top_srcdir)/m4/symbol.m4 $(top_srcdir)/m4/xv.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(xineplugdir)" +xineplugLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(xineplug_LTLIBRARIES) +xineplug_decode_mjpeg_la_DEPENDENCIES = $(XINE_LIB) +am__xineplug_decode_mjpeg_la_SOURCES_DIST = xine_mjpeg_decoder.c +am_xineplug_decode_mjpeg_la_OBJECTS = xineplug_decode_mjpeg_la-xine_mjpeg_decoder.lo +xineplug_decode_mjpeg_la_OBJECTS = \ + $(am_xineplug_decode_mjpeg_la_OBJECTS) +xineplug_decode_mjpeg_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(xineplug_decode_mjpeg_la_CFLAGS) $(CFLAGS) \ + $(xineplug_decode_mjpeg_la_LDFLAGS) $(LDFLAGS) -o $@ +am_xineplug_decode_mjpeg_la_rpath = -rpath \ + $(xineplugdir) +DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(xineplug_decode_mjpeg_la_SOURCES) +DIST_SOURCES = $(am__xineplug_decode_mjpeg_la_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +AAINFO = @AAINFO@ +AALIB_CFLAGS = @AALIB_CFLAGS@ +AALIB_CONFIG = @AALIB_CONFIG@ +AALIB_LIBS = @AALIB_LIBS@ +ACLOCAL = @ACLOCAL@ +ACLOCAL_DIR = @ACLOCAL_DIR@ +ALSA_CFLAGS = @ALSA_CFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AR = @AR@ +ARTS_CFLAGS = @ARTS_CFLAGS@ +ARTS_CONFIG = @ARTS_CONFIG@ +ARTS_LIBS = @ARTS_LIBS@ +AS = @AS@ +ASFLAGS = @ASFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CACA_CFLAGS = @CACA_CFLAGS@ +CACA_LIBS = @CACA_LIBS@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_CFLAGS = @DEBUG_CFLAGS@ +DEFS = @DEFS@ +DEPCOMP = @DEPCOMP@ +DEPDIR = @DEPDIR@ +DEPMOD = @DEPMOD@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTX_AUDIO_LIBS = @DIRECTX_AUDIO_LIBS@ +DIRECTX_CPPFLAGS = @DIRECTX_CPPFLAGS@ +DIRECTX_VIDEO_LIBS = @DIRECTX_VIDEO_LIBS@ +DLLTOOL = @DLLTOOL@ +DVDNAV_CFLAGS = @DVDNAV_CFLAGS@ +DVDNAV_CONFIG = @DVDNAV_CONFIG@ +DVDNAV_LIBS = @DVDNAV_LIBS@ +DYNAMIC_LD_LIBS = @DYNAMIC_LD_LIBS@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ESD_CFLAGS = @ESD_CFLAGS@ +ESD_LIBS = @ESD_LIBS@ +EXEEXT = @EXEEXT@ +EXTRA_X_CFLAGS = @EXTRA_X_CFLAGS@ +EXTRA_X_LIBS = @EXTRA_X_LIBS@ +FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ +FFMPEG_LIBS = @FFMPEG_LIBS@ +FFMPEG_POSTPROC_CFLAGS = @FFMPEG_POSTPROC_CFLAGS@ +FFMPEG_POSTPROC_LIBS = @FFMPEG_POSTPROC_LIBS@ +FIG2DEV = @FIG2DEV@ +FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ +FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ +FT2_CFLAGS = @FT2_CFLAGS@ +FT2_LIBS = @FT2_LIBS@ +FUSIONSOUND_CFLAGS = @FUSIONSOUND_CFLAGS@ +FUSIONSOUND_LIBS = @FUSIONSOUND_LIBS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLU_LIBS = @GLU_LIBS@ +GMSGFMT = @GMSGFMT@ +GNOME_VFS_CFLAGS = @GNOME_VFS_CFLAGS@ +GNOME_VFS_LIBS = @GNOME_VFS_LIBS@ +GOOM_LIBS = @GOOM_LIBS@ +GREP = @GREP@ +HAVE_BSDI_CDROM = @HAVE_BSDI_CDROM@ +HAVE_DARWIN_CDROM = @HAVE_DARWIN_CDROM@ +HAVE_FREEBSD_CDROM = @HAVE_FREEBSD_CDROM@ +HAVE_LINUX_CDROM = @HAVE_LINUX_CDROM@ +HAVE_SOLARIS_CDROM = @HAVE_SOLARIS_CDROM@ +HAVE_WIN32_CDROM = @HAVE_WIN32_CDROM@ +IMPURE_TEXT_LDFLAGS = @IMPURE_TEXT_LDFLAGS@ +INCLUDES = @INCLUDES@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IRIXAL_CFLAGS = @IRIXAL_CFLAGS@ +IRIXAL_LIBS = @IRIXAL_LIBS@ +IRIXAL_STATIC_LIB = @IRIXAL_STATIC_LIB@ +JACK_CFLAGS = @JACK_CFLAGS@ +JACK_LIBS = @JACK_LIBS@ +KSTAT_LIBS = @KSTAT_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBCDIO_CFLAGS = @LIBCDIO_CFLAGS@ +LIBCDIO_LIBS = @LIBCDIO_LIBS@ +LIBDTS_CFLAGS = @LIBDTS_CFLAGS@ +LIBDTS_LIBS = @LIBDTS_LIBS@ +LIBFAME_CFLAGS = @LIBFAME_CFLAGS@ +LIBFAME_CONFIG = @LIBFAME_CONFIG@ +LIBFAME_LIBS = @LIBFAME_LIBS@ +LIBFFMPEG_CPPFLAGS = @LIBFFMPEG_CPPFLAGS@ +LIBFLAC_CFLAGS = @LIBFLAC_CFLAGS@ +LIBFLAC_LIBS = @LIBFLAC_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBISO9660_LIBS = @LIBISO9660_LIBS@ +LIBMAD_CFLAGS = @LIBMAD_CFLAGS@ +LIBMAD_LIBS = @LIBMAD_LIBS@ +LIBMODPLUG_CFLAGS = @LIBMODPLUG_CFLAGS@ +LIBMODPLUG_LIBS = @LIBMODPLUG_LIBS@ +LIBMPEG2_CFLAGS = @LIBMPEG2_CFLAGS@ +LIBNAME = @LIBNAME@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSMBCLIENT_LIBS = @LIBSMBCLIENT_LIBS@ +LIBSTK_CFLAGS = @LIBSTK_CFLAGS@ +LIBSTK_LIBS = @LIBSTK_LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIBVCDINFO_CFLAGS = @LIBVCDINFO_CFLAGS@ +LIBVCDINFO_LIBS = @LIBVCDINFO_LIBS@ +LIBVCD_CFLAGS = @LIBVCD_CFLAGS@ +LIBVCD_LIBS = @LIBVCD_LIBS@ +LIBVCD_SYSDEP = @LIBVCD_SYSDEP@ +LINUX_CDROM_TIMEOUT = @LINUX_CDROM_TIMEOUT@ +LINUX_INCLUDE = @LINUX_INCLUDE@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +mkdir_p = @mkdir_p@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MKNOD = @MKNOD@ +MLIB_CFLAGS = @MLIB_CFLAGS@ +MLIB_LIBS = @MLIB_LIBS@ +MNG_LIBS = @MNG_LIBS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +NET_LIBS = @NET_LIBS@ +NOUNDEF = @NOUNDEF@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OPENGL_CFLAGS = @OPENGL_CFLAGS@ +OPENGL_LIBS = @OPENGL_LIBS@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PASS1_CFLAGS = @PASS1_CFLAGS@ +PASS2_CFLAGS = @PASS2_CFLAGS@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PULSEAUDIO_CFLAGS = @PULSEAUDIO_CFLAGS@ +PULSEAUDIO_LIBS = @PULSEAUDIO_LIBS@ +RANLIB = @RANLIB@ +RT_LIBS = @RT_LIBS@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_LIBS = @SDL_LIBS@ +SET_MAKE = @SET_MAKE@ +SGMLTOOLS = @SGMLTOOLS@ +SHELL = @SHELL@ +SPEC_VERSION = @SPEC_VERSION@ +SPEEX_CFLAGS = @SPEEX_CFLAGS@ +SPEEX_LIBS = @SPEEX_LIBS@ +STATIC = @STATIC@ +STRINGS = @STRINGS@ +STRIP = @STRIP@ +SUNDGA_CFLAGS = @SUNDGA_CFLAGS@ +SUNDGA_LIBS = @SUNDGA_LIBS@ +TAR_NAME = @TAR_NAME@ +THEORA_CFLAGS = @THEORA_CFLAGS@ +THEORA_LIBS = @THEORA_LIBS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +VISIBILITY_FLAG = @VISIBILITY_FLAG@ +VORBIS_CFLAGS = @VORBIS_CFLAGS@ +VORBIS_LIBS = @VORBIS_LIBS@ +W32_NO_OPTIMIZE = @W32_NO_OPTIMIZE@ +WAND_CFLAGS = @WAND_CFLAGS@ +WAND_LIBS = @WAND_LIBS@ +WAVPACK_CFLAGS = @WAVPACK_CFLAGS@ +WAVPACK_LIBS = @WAVPACK_LIBS@ +WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ +XCBSHM_CFLAGS = @XCBSHM_CFLAGS@ +XCBSHM_LIBS = @XCBSHM_LIBS@ +XCBXV_CFLAGS = @XCBXV_CFLAGS@ +XCBXV_LIBS = @XCBXV_LIBS@ +XCB_CFLAGS = @XCB_CFLAGS@ +XCB_LIBS = @XCB_LIBS@ +XGETTEXT = @XGETTEXT@ +XINERAMA_CFLAGS = @XINERAMA_CFLAGS@ +XINERAMA_LIBS = @XINERAMA_LIBS@ +XINE_ACFLAGS = @XINE_ACFLAGS@ +XINE_BIN_AGE = @XINE_BIN_AGE@ +XINE_BUILD_CC = @XINE_BUILD_CC@ +XINE_BUILD_DATE = @XINE_BUILD_DATE@ +XINE_BUILD_OS = @XINE_BUILD_OS@ +XINE_CONFIG_PREFIX = @XINE_CONFIG_PREFIX@ +XINE_DATADIR = @XINE_DATADIR@ +XINE_FONTDIR = @XINE_FONTDIR@ +XINE_FONTPATH = @XINE_FONTPATH@ +XINE_IFACE_AGE = @XINE_IFACE_AGE@ +XINE_LOCALEDIR = @XINE_LOCALEDIR@ +XINE_LOCALEPATH = @XINE_LOCALEPATH@ +XINE_LT_AGE = @XINE_LT_AGE@ +XINE_LT_CURRENT = @XINE_LT_CURRENT@ +XINE_LT_REVISION = @XINE_LT_REVISION@ +XINE_MAJOR = @XINE_MAJOR@ +XINE_MINOR = @XINE_MINOR@ +XINE_PLUGINDIR = @XINE_PLUGINDIR@ +XINE_PLUGINPATH = @XINE_PLUGINPATH@ +XINE_SCRIPTPATH = @XINE_SCRIPTPATH@ +XINE_SUB = @XINE_SUB@ +XMKMF = @XMKMF@ +XVMC_LIBS = @XVMC_LIBS@ +XV_CFLAGS = @XV_CFLAGS@ +XV_LIBS = @XV_LIBS@ +XXMC_LIBS = @XXMC_LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZLIB_CPPFLAGS = @ZLIB_CPPFLAGS@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_OBJC = @ac_ct_OBJC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +w32_path = @w32_path@ +XINE_LIB = $(top_builddir)/src/xine-engine/libxine.la +xineincludedir = $(includedir)/xine +xineplugdir = $(XINE_PLUGINDIR) +xineplug_ldflags = $(NOUNDEF) -avoid-version -module +xinepostdir = $(XINE_PLUGINDIR)/post +vidixdir = $(XINE_PLUGINDIR)/vidix +xineplug_LTLIBRARIES = xineplug_decode_mjpeg.la +xineplug_decode_mjpeg_la_SOURCES = xine_mjpeg_decoder.c +xineplug_decode_mjpeg_la_LIBADD = $(XINE_LIB) -ljpeg +xineplug_decode_mjpeg_la_CFLAGS = $(VISIBILITY_FLAG) +xineplug_decode_mjpeg_la_LDFLAGS = $(xineplug_ldflags) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/misc/Makefile.common $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/mjpeg/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/mjpeg/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-xineplugLTLIBRARIES: $(xineplug_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(xineplugdir)" || $(mkdir_p) "$(DESTDIR)$(xineplugdir)" + @list='$(xineplug_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(xineplugLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(xineplugdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(xineplugLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(xineplugdir)/$$f"; \ + else :; fi; \ + done + +uninstall-xineplugLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(xineplug_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(xineplugdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(xineplugdir)/$$p"; \ + done + +clean-xineplugLTLIBRARIES: + -test -z "$(xineplug_LTLIBRARIES)" || rm -f $(xineplug_LTLIBRARIES) + @list='$(xineplug_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +xineplug_decode_mjpeg.la: $(xineplug_decode_mjpeg_la_OBJECTS) $(xineplug_decode_mjpeg_la_DEPENDENCIES) + $(xineplug_decode_mjpeg_la_LINK) $(am_xineplug_decode_mjpeg_la_rpath) $(xineplug_decode_mjpeg_la_OBJECTS) $(xineplug_decode_mjpeg_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xineplug_decode_mjpeg_la-xine_mjpeg_decoder.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xineplug_decode_mjpeg_la-xine_mjpeg_decoder.lo: xine_mjpeg_decoder.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xineplug_decode_mjpeg_la_CFLAGS) $(CFLAGS) -MT xineplug_decode_mjpeg_la-xine_mjpeg_decoder.lo -MD -MP -MF $(DEPDIR)/xineplug_decode_mjpeg_la-xine_mjpeg_decoder.Tpo -c -o xineplug_decode_mjpeg_la-xine_mjpeg_decoder.lo `test -f 'xine_mjpeg_decoder.c' || echo '$(srcdir)/'`xine_mjpeg_decoder.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/xineplug_decode_mjpeg_la-xine_mjpeg_decoder.Tpo $(DEPDIR)/xineplug_decode_mjpeg_la-xine_mjpeg_decoder.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xine_mjpeg_decoder.c' object='xineplug_decode_mjpeg_la-xine_mjpeg_decoder.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xineplug_decode_mjpeg_la_CFLAGS) $(CFLAGS) -c -o xineplug_decode_mjpeg_la-xine_mjpeg_decoder.lo `test -f 'xine_mjpeg_decoder.c' || echo '$(srcdir)/'`xine_mjpeg_decoder.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(mkdir_p) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(xineplugdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-xineplugLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-xineplugLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-xineplugLTLIBRARIES + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-hook + +.MAKE: install-am install-data-am install-strip uninstall-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-xineplugLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-hook install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip \ + install-xineplugLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-hook uninstall-xineplugLTLIBRARIES + + +$(XINE_LIB): + @cd $(top_srcdir)/src/xine-engine && $(MAKE) + +install-data-hook: + @if test $$MAKELEVEL -le 4 ; then \ + if test -x "$(top_srcdir)/post-install.sh" ; then \ + $(top_srcdir)/post-install.sh ; \ + fi; \ + fi; \ + if test -x /usr/bin/chcon -a "`id -u`" -eq 0; then \ + list='$(xineplug_LTLIBRARIES)'; \ + for p in $$list; do \ + p="`echo $$p | sed -e 's/\.la$$/\.so/g;s|^.*/||'`"; \ + echo " chcon system_u:object_r:texrel_shlib_t $(DESTDIR)$(xineplugdir)/$$p"; \ + chcon system_u:object_r:texrel_shlib_t $(DESTDIR)$(xineplugdir)/$$p || :; \ + done; \ + list='$(xinepost_LTLIBRARIES)'; \ + for p in $$list; do \ + p="`echo $$p | sed -e 's/\.la$$/\.so/g;s|^.*/||'`"; \ + echo " chcon system_u:object_r:texrel_shlib_t $(DESTDIR)$(xinepostdir)/$$p"; \ + chcon system_u:object_r:texrel_shlib_t $(DESTDIR)$(xinepostdir)/$$p || :; \ + done; \ + fi + +pass1: + @$(MAKE) MULTIPASS_CFLAGS="$(PASS1_CFLAGS)" + +pass2: + @$(MAKE) MULTIPASS_CFLAGS="$(PASS2_CFLAGS)" + +debug: + @$(MAKE) CFLAGS="$(DEBUG_CFLAGS)" + +install-debug: debug + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + @list='$(SUBDIRS)'; for subdir in $$list; do \ + (cd $$subdir && $(MAKE) $@) || exit; \ + done; + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + +uninstall-hook: + @list='$(xineplug_LTLIBRARIES)'; for p in $$list; do \ + p="`echo $$p | sed -e 's/\.la$$/\.so/g;s|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(xineplugdir)/$$p"; \ + rm -f $(DESTDIR)$(xineplugdir)/$$p; \ + done; + @list='$(xinepost_LTLIBRARIES)'; for p in $$list; do \ + p="`echo $$p | sed -e 's/\.la$$/\.so/g;s|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(xinepostdir)/$$p"; \ + rm -f $(DESTDIR)$(xinepostdir)/$$p; \ + done; + @list='$(vidix_LTLIBRARIES)'; for p in $$list; do \ + p="`echo $$p | sed -e 's/\.la$$/\.so/g;s|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(vidixdir)/$$p"; \ + rm -f $(DESTDIR)$(vidixdir)/$$p; \ + done; + +mostlyclean-generic: + -rm -f *~ \#* .*~ .\#* + +maintainer-clean-generic: + -@echo "This command is intended for maintainers to use;" + -@echo "it deletes files that may require special tools to rebuild." + -rm -f Makefile.in +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -uNr xine-lib-1.1.20.orig/src/mjpeg/xine_mjpeg_decoder.c xine-lib-1.1.20/src/mjpeg/xine_mjpeg_decoder.c --- xine-lib-1.1.20.orig/src/mjpeg/xine_mjpeg_decoder.c 1970-01-01 01:00:00.000000000 +0100 +++ xine-lib-1.1.20/src/mjpeg/xine_mjpeg_decoder.c 2011-11-13 17:40:51.572377268 +0100 @@ -0,0 +1,397 @@ +/* + * Copyright (C) 2007 Marcus Meissner + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * $Id: xine_decoder.c,v 1.57 2006/07/10 22:08:29 dgp85 Exp $ + * + * stuff needed to turn libjpeg into a xine video decoder. + */ + +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <string.h> + +#include <jpeglib.h> + +#define LOG_MODULE "mjpeg_decoder" +#define LOG_VERBOSE + +#include "config.h" +#include "xine_internal.h" +#include "video_out.h" +#include "buffer.h" +#include "xineutils.h" + +static const uint8_t default_dht[420] = { + /* DHT(Define Huffman Table) */ + 0xFF,0xC4, + 0x01,0xA2, + 0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x01,0x00,0x03, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x10,0x00,0x02,0x01,0x03,0x03, + 0x02,0x04,0x03,0x05,0x05,0x04,0x04,0x00,0x00,0x01,0x7D,0x01,0x02,0x03,0x00,0x04, + 0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81, + 0x91,0xA1,0x08,0x23,0x42,0xB1,0xC1,0x15,0x52,0xD1,0xF0,0x24,0x33,0x62,0x72,0x82, + 0x09,0x0A,0x16,0x17,0x18,0x19,0x1A,0x25,0x26,0x27,0x28,0x29,0x2A,0x34,0x35,0x36, + 0x37,0x38,0x39,0x3A,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x53,0x54,0x55,0x56, + 0x57,0x58,0x59,0x5A,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x73,0x74,0x75,0x76, + 0x77,0x78,0x79,0x7A,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x92,0x93,0x94,0x95, + 0x96,0x97,0x98,0x99,0x9A,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xB2,0xB3, + 0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA, + 0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7, + 0xE8,0xE9,0xEA,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0x11,0x00,0x02, + 0x01,0x02,0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00,0x01,0x02,0x77,0x00,0x01, + 0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22, + 0x32,0x81,0x08,0x14,0x42,0x91,0xA1,0xB1,0xC1,0x09,0x23,0x33,0x52,0xF0,0x15,0x62, + 0x72,0xD1,0x0A,0x16,0x24,0x34,0xE1,0x25,0xF1,0x17,0x18,0x19,0x1A,0x26,0x27,0x28, + 0x29,0x2A,0x35,0x36,0x37,0x38,0x39,0x3A,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A, + 0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A, + 0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8A,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7, + 0xA8,0xA9,0xAA,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xC2,0xC3,0xC4,0xC5, + 0xC6,0xC7,0xC8,0xC9,0xCA,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xE2,0xE3, + 0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA +}; + + +typedef struct { + video_decoder_class_t decoder_class; +} mjpeg_class_t; + +typedef struct mjpeg_decoder_s { + video_decoder_t video_decoder; + + xine_stream_t *xstream; + + int64_t pts; + + xine_bmiheader bih; + + int output_sampling_rate; + int output_open; + int output_mode; + + uint8_t *buffer; + int bytes_in_buffer; + int maxbytes_in_buffer; + int skip_frames; + + + struct jpeg_decompress_struct jd; + struct jpeg_error_mgr jerr; + struct jpeg_source_mgr jsm; +} mjpeg_decoder_t; + +/* For the JPEG decompressor source manager. */ +static void _jpeg_init_source(j_decompress_ptr cinfo) { } + +static boolean _jpeg_fill_input_buffer(j_decompress_ptr cinfo) { + fprintf(stderr, "_jpeg_fill_input_buffer(): should not get here.\n"); + return FALSE; +} + +static void _jpeg_skip_input_data(j_decompress_ptr cinfo,long num_bytes) { + fprintf(stderr, "_jpeg_skip_input_data(): Skipping %ld bytes...\n", num_bytes); + cinfo->src->next_input_byte += num_bytes; + cinfo->src->bytes_in_buffer -= num_bytes; +} + +static boolean _jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired) { + fprintf(stderr, "_jpeg_resync_to_restart(desired=%d): Should not get here.\n",desired); + return FALSE; +} +static void _jpeg_term_source(j_decompress_ptr cinfo) { } + + +static void mjpeg_reset (video_decoder_t *this_gen) { + mjpeg_decoder_t *this = (mjpeg_decoder_t *) this_gen; + + this->pts = 0; + this->bytes_in_buffer = 0; + this->skip_frames = 0; +} + +static void mjpeg_flush (video_decoder_t *this_gen) { + mjpeg_decoder_t *this = (mjpeg_decoder_t *) this_gen; + + this->bytes_in_buffer = 0; + + lprintf ("flush\n"); +} + +static void mjpeg_discontinuity (video_decoder_t *this_gen) { + mjpeg_decoder_t *this = (mjpeg_decoder_t *) this_gen; + + this->bytes_in_buffer = 0; + this->pts = 0; +} + +static void mjpeg_decode_data (video_decoder_t *this_gen, buf_element_t *buf) { + struct vo_frame_s *frame; + mjpeg_decoder_t *this = (mjpeg_decoder_t *) this_gen; + int i, ret, havedht, offsetdqt; + uint8_t *cursamprow; + int minscanline=1000; + +#if 0 + fprintf (stderr, "decode data, decoder_flags: %x (", buf->decoder_flags); +#define X(x) if (BUF_FLAG_##x & buf->decoder_flags) fprintf (stderr,"BUF_FLAG_"#x", "); +X(FRAME_START); +X(FRAME_END); +X(HEADER); +X(PREVIEW); +X(END_USER); +X(END_STREAM); +X(FRAMERATE); +X(SEEK); +X(SPECIAL); +X(STDHEADER); +X(ASPECT); +#undef X + fprintf (stderr, ")\n"); +#endif + + if (buf->decoder_flags & BUF_FLAG_HEADER) { + if (buf->decoder_flags & BUF_FLAG_STDHEADER) { + memcpy ( &this->bih, buf->content, sizeof(xine_bmiheader) ); + /* FIXME: handle extra data? */ +#if 0 + fprintf (stderr,"stdheader:\n"); + fprintf (stderr,"Height: %d\n",this->bih.biHeight); + fprintf (stderr,"Width: %d\n",this->bih.biWidth); +#endif + /* the others are not terribly interesting for JPEG */ + return; + } + fprintf (stderr,"Non STD-header handling not done yet.\n"); + return; + } + + while (buf->size>this->maxbytes_in_buffer - this->bytes_in_buffer) { + uint8_t *newbuf; + newbuf = realloc (this->buffer, this->maxbytes_in_buffer*2); + if (!newbuf) { + return; /* Hmm. Not good. */ + } + this->maxbytes_in_buffer *= 2; + this->buffer = newbuf; + } + xine_fast_memcpy (&this->buffer[this->bytes_in_buffer], + buf->content, buf->size); + this->bytes_in_buffer += buf->size; + + if (!(buf->decoder_flags & BUF_FLAG_FRAME_END)) + return; + + /* OK - Decode! */ + + if (this->skip_frames > 0) { + this->skip_frames--; + this->bytes_in_buffer = 0; + return; + } + + havedht = 0; offsetdqt = 0; + for (i=0;i<this->bytes_in_buffer;i++) { + if (this->buffer[i] != 0xff) + continue; + i++; + if (i==this->bytes_in_buffer) break; + if (this->buffer[i] == 0xdb)/* DQT */ + offsetdqt = i-1; + if (this->buffer[i] == 0xc4) /* DHT */ + havedht = 1; + if (this->buffer[i] == 0xc0) /* SOF */ + break; + } + if (!havedht) { + /* FIXME: we could inject this more directly into libjpeg. + * Find out sometime how to... + */ + while (this->maxbytes_in_buffer - this->bytes_in_buffer < sizeof(default_dht)) { + uint8_t *newbuf; + newbuf = realloc (this->buffer, this->maxbytes_in_buffer*2); + if (!newbuf) { + /* Umm. how to handle out of memory situation here */ + return; + } + this->maxbytes_in_buffer *= 2; + this->buffer = newbuf; + } + memmove (this->buffer+offsetdqt+sizeof(default_dht), this->buffer+offsetdqt, this->bytes_in_buffer-offsetdqt); + memcpy (this->buffer+offsetdqt, default_dht, sizeof(default_dht)); + this->bytes_in_buffer += sizeof(default_dht); + } + + this->jsm.next_input_byte = this->buffer; + this->jsm.bytes_in_buffer = this->bytes_in_buffer; + + ret = jpeg_read_header(&this->jd,TRUE); + this->jd.out_color_space = JCS_YCbCr; + jpeg_start_decompress(&this->jd); + if (ret != JPEG_HEADER_OK) { + fprintf(stderr, "Jpeg image in stream has bad format, read header returned %d.\n",ret); + this->bytes_in_buffer = 0; + return; + } + + /* I am not fully sure we can assume that we get 4:1:1 YUV output. + * But I think we do with JCS_YCbCr. + */ + frame = this->xstream->video_out->get_frame (this->xstream->video_out, + this->jd.output_width, + this->jd.output_height, + (1.00*this->jd.output_width)/this->jd.output_height, + XINE_IMGFMT_YV12, + 0 + ); + + cursamprow = calloc(1,this->jd.output_width*this->jd.output_components); + while (this->jd.output_scanline < this->jd.output_height) { + uint8_t *y,*u,*v; + int i, curscanline; + int x = jpeg_read_scanlines(&this->jd,&cursamprow,1); + + /* it occasionaly starts at 1 and goes to height+1 for curious reasons */ + if (minscanline > this->jd.output_scanline) { + minscanline = this->jd.output_scanline; + if (minscanline) fprintf (stderr,"minscanline %d\n", minscanline); + } + curscanline = this->jd.output_scanline-minscanline; + if (x != 1) { + fprintf(stderr, "failed to read current scanline?\n"); + break; + } + y = frame->base[0]+frame->pitches[0]*curscanline; + u = frame->base[1]+frame->pitches[1]*(curscanline/2); + v = frame->base[2]+frame->pitches[2]*(curscanline/2); + for (i=0;i<this->jd.output_width;i++) { + y[i] = cursamprow[i*3+0]; + u[i/2] = cursamprow[i*3+1]; + v[i/2] = cursamprow[i*3+2]; + } + } + free (cursamprow); + + frame->pts = buf->pts; + frame->duration = buf->decoder_info[0]; + this->skip_frames = frame->draw(frame,this->xstream); + frame->drawn = 1; + frame->free(frame); + jpeg_finish_decompress(&this->jd); + this->bytes_in_buffer = 0; +} + +static void mjpeg_dispose (video_decoder_t *this_gen) { + mjpeg_decoder_t *this = (mjpeg_decoder_t *) this_gen; + + jpeg_destroy_decompress(&this->jd); + if (this->output_open) { + this->xstream->video_out->close (this->xstream->video_out, this->xstream); + this->output_open = 0; + } + if (this->buffer) free (this->buffer); + this->buffer = NULL; + free (this_gen); +} + +static video_decoder_t *open_plugin (video_decoder_class_t *class_gen, xine_stream_t *stream) { + mjpeg_decoder_t *this ; + + this = (mjpeg_decoder_t *) xine_xmalloc (sizeof (mjpeg_decoder_t)); + + this->video_decoder.decode_data = mjpeg_decode_data; + this->video_decoder.reset = mjpeg_reset; + this->video_decoder.flush = mjpeg_flush; + this->video_decoder.discontinuity = mjpeg_discontinuity; + this->video_decoder.dispose = mjpeg_dispose; + + this->output_open = 0; + this->bytes_in_buffer = 0; + this->skip_frames = 0; + this->xstream = stream; + + this->maxbytes_in_buffer = 16384; + this->buffer = malloc(this->maxbytes_in_buffer); + + this->jd.err = jpeg_std_error(&this->jerr); + jpeg_create_decompress(&this->jd); + + this->jsm.init_source = _jpeg_init_source; + this->jsm.fill_input_buffer = _jpeg_fill_input_buffer; + this->jsm.skip_input_data = _jpeg_skip_input_data; + this->jsm.resync_to_restart = _jpeg_resync_to_restart; + this->jsm.term_source = _jpeg_term_source; + this->jd.src = &this->jsm; + + stream->video_out->open(stream->video_out, stream); +#if 0 + caps = stream->video_out->get_capabilities (stream->video_out); + fprintf (stderr, "video out caps: %x\n", caps); +#endif + return &this->video_decoder; +} + +/* + * mjpeg plugin class + */ + +static char *get_identifier (video_decoder_class_t *this) { + return "mjpeg"; +} + +static char *get_description (video_decoder_class_t *this) { + return "libjpeg based mjpeg video decoder plugin"; +} + +static void dispose_class (video_decoder_class_t *this) { + free (this); +} + +static void *init_plugin (xine_t *xine, void *data) { + + mjpeg_class_t *this; + + this = (mjpeg_class_t *) xine_xmalloc (sizeof (mjpeg_class_t)); + + this->decoder_class.open_plugin = open_plugin; + this->decoder_class.get_identifier = get_identifier; + this->decoder_class.get_description = get_description; + this->decoder_class.dispose = dispose_class; + + return this; +} + +static uint32_t video_types[] = { + BUF_VIDEO_JPEG, + BUF_VIDEO_MJPEG, + 0 +}; + +static const decoder_info_t dec_info_video = { + video_types, /* supported types */ + 7 /* priority */ +}; + +const plugin_info_t xine_plugin_info[] EXPORTED = { + /* type, API, "name", version, special_info, init_function */ + { PLUGIN_VIDEO_DECODER, 18, "mjpeg", XINE_VERSION_CODE, &dec_info_video, init_plugin }, + { PLUGIN_NONE, 0, "", 0, NULL, NULL } +};