#!/bin/bash # # mplayer.SlackBuild # code: Vicious (michal@scxd.info); improvements: Zielony (e-pl@o2.pl) set -e # PACKAGE GENERAL INFO [EDIT] # Wymaga: libdca, libdvdread, libdvdnav, libdv, jack, libmpcdec, lame, ladspa, speex. PKGNAME=mplayer SKIN_NAME=Blue CODECS_NAME=essential VERSION=1.0rc2 CODECS_VERSION=20071007 SKIN_VERSION=1.7 URL=http://www7.mplayerhq.hu/MPlayer/releases/MPlayer-$VERSION.tar.bz2 CODECS_URL=http://www7.mplayerhq.hu/MPlayer/releases/codecs/essential-$CODECS_VERSION.tar.bz2 SKIN_URL=http://www7.mplayerhq.hu/MPlayer/skins/Blue-$SKIN_VERSION.tar.bz2 BUILD=2X ARCH=i686 CWD=`pwd` TMP=/tmp/$PKGNAME if [ -e $TMP/$PKGNAME-$VERSION/'configure.log' ]; then cd $TMP/$PKGNAME-$VERSION make else if [ ! -d $TMP/$PKGNAME-$VERSION ]; then rm -rf $TMP/package mkdir -p $TMP $TMP/package $TMP/package/install $TMP/package/usr/lib/codecs $TMP/package/usr/share/mplayer/Skin/default # PACKAGE DESCRIPTION [EDIT] cat << SLACKDESC | fmt -w $(( 80 - `echo $PKGNAME | wc -c` - 3 )) | perl -pe "s/^/$PKGNAME: /" > $TMP/package/install/slack-desc MPlayer (The Movie Player with essential codecs) MPlayer is a movie player which runs on many systems (see the documentation). It plays most MPEG/VOB, AVI, Ogg/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, RealMedia, Matroska, NUT, NuppelVideo, FLI, YUV4MPEG, FILM, RoQ, PVA files, supported by many native, XAnim, and Win32 DLL codecs. You can watch VideoCD, SVCD, DVD, 3ivx, DivX 3/4/5 and even WMV movies. This package contains essential codecs for MPlayer. Package prepared by Zielony (e-pl@o2.pl) SLACKDESC cd $TMP # step 1: DOWNLOAD SOURCE function download { PKGFNAME=`ls -t | grep -i $2*.t*z* | head -1` if [ -z $PKGFNAME ]; then ( wget -c $1 -P $TMP -O $2-$3.${1//*.} ) # step 2: UNPACK SOURCE AND COMPILE PKGFNAME=`ls -t | grep -i $2*.t*z* | head -1` fi EXTENSION=`echo ${PKGFNAME//*.}` if [ $EXTENSION = "bz2" ]; then tar jxvf $PKGFNAME -C $TMP else tar xvfz $PKGFNAME -C $TMP fi DIRNAME=`tar tf $PKGFNAME | head -1` echo $DIRNAME | grep '/' && DIRNAME=${DIRNAME%${DIRNAME#*/}} if [ $DIRNAME != $2-$3/ ]; then mv $DIRNAME $2-$3; fi } download $URL $PKGNAME $VERSION download $CODECS_URL $CODECS_NAME $CODECS_VERSION download $SKIN_URL $SKIN_NAME $SKIN_VERSION chown root:root $TMP -R fi cd $TMP/$PKGNAME-$VERSION if [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" elif [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" elif [ "$ARCH" = "i386" ]; then SLKCFLAGS="-O2 -march=i386 -mcpu=i686" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2" fi cat << 'PATCH' | patch -p0 -N Index: demux_audio.c =================================================================== --- libmpdemux/demux_audio.c (revision 24724) +++ libmpdemux/demux_audio.c (working copy) @@ -229,6 +229,8 @@ ptr += 4; comment = ptr; + if (&comment[length] < comments || &comment[length] >= &comments[blk_len]) + return; c = comment[length]; comment[length] = 0; Index: demux_mov.c =================================================================== --- libmpdemux/demux_mov.c (revision 24724) +++ libmpdemux/demux_mov.c (working copy) @@ -173,11 +173,12 @@ i=trak->chunkmap_size; while(i>0){ --i; - for(j=trak->chunkmap[i].first;jchunkmap[i].first, 0); + for(;jchunks[j].desc=trak->chunkmap[i].sdid; trak->chunks[j].size=trak->chunkmap[i].spc; } - last=trak->chunkmap[i].first; + last=FFMIN(trak->chunkmap[i].first, trak->chunks_size); } #if 0 @@ -235,6 +236,8 @@ s=0; for(j=0;jdurmap_size;j++){ for(i=0;idurmap[j].num;i++){ + if (s >= trak->samples_size) + break; trak->samples[s].pts=pts; ++s; pts+=trak->durmap[j].dur; @@ -246,6 +249,8 @@ for(j=0;jchunks_size;j++){ off_t pos=trak->chunks[j].pos; for(i=0;ichunks[j].size;i++){ + if (s >= trak->samples_size) + break; trak->samples[s].pos=pos; mp_msg(MSGT_DEMUX, MSGL_DBG3, "Sample %5d: pts=%8d off=0x%08X size=%d\n",s, trak->samples[s].pts, @@ -1568,8 +1573,7 @@ if( udta_len>udta_size) udta_len=udta_size; { - char dump[udta_len-4]; - stream_read(demuxer->stream, (char *)&dump, udta_len-4-4); + stream_skip(demuxer->stream, udta_len-4-4); udta_size -= udta_len; } } Index: stream_cddb.c =================================================================== --- stream/stream_cddb.c (revision 24724) +++ stream/stream_cddb.c (working copy) @@ -53,6 +53,7 @@ #include "version.h" #include "stream.h" #include "network.h" +#include "libavutil/intreadwrite.h" #define DEFAULT_FREEDB_SERVER "freedb.freedb.org" #define DEFAULT_CACHE_DIR "/.cddb/" @@ -453,8 +454,9 @@ } else { len = ptr2-ptr+1; } + len = FFMIN(sizeof(album_title) - 1, len); strncpy(album_title, ptr, len); - album_title[len-2]='\0'; + album_title[len]='\0'; } mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title); return 0; @@ -490,8 +492,9 @@ } else { len = ptr2-ptr+1; } + len = FFMIN(sizeof(album_title) - 1, len); strncpy(album_title, ptr, len); - album_title[len-2]='\0'; + album_title[len]='\0'; } mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title); return cddb_request_titles(cddb_data); Index: url.c =================================================================== --- stream/url.c (revision 24724) +++ stream/url.c (working copy) @@ -328,6 +328,7 @@ } } + tmp = NULL; while(i < len) { // look for the next char that must be kept for (j=i;j /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) ( gzip $TMP/package/usr/man/man?/* ) ( gzip $TMP/package/usr/man/pl/man?/* ) ( for i in `find $TMP/package/usr/man -type l -name *.1`; do ln -sf `readlink $i`.gz $i.gz rm $i done ) # step 4: CREATE PACKAGE & CLEAN TMP cd $TMP/package if [ `ls | wc -m` -le 8 ]; then echo "Brak plików pakietu!" else ( requiredbuilder -y -s $TMP/package/install $TMP/$PKGNAME-$VERSION ) makepkg -l y -c n $CWD/$PKGNAME-$VERSION-$ARCH-$BUILD.tgz rm -rf $TMP fi