diff --git a/NEWS b/NEWS index 32afc614e..e52bc5c17 100644 --- a/NEWS +++ b/NEWS @@ -22,7 +22,8 @@ ver 0.21 (not yet released) - sndio: new mixer plugin * require GCC 5.0 -ver 0.20.15 (not yet released) +ver 0.20.15 (2018/01/05) +* queue: fix crash after seek failure * resampler - soxr: clear internal state after manual song change * state file diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 208c6e1ae..c0b3dd4ca 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -2,8 +2,8 @@ + android:versionCode="14" + android:versionName="0.20.15"> diff --git a/python/build/libs.py b/python/build/libs.py index 8653ddb4c..0ad195798 100644 --- a/python/build/libs.py +++ b/python/build/libs.py @@ -1,3 +1,4 @@ +import re from build.project import Project from build.zlib import ZlibProject from build.autotools import AutotoolsProject @@ -5,8 +6,8 @@ from build.ffmpeg import FfmpegProject from build.boost import BoostProject libogg = AutotoolsProject( - 'http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.xz', - '5c3a34309d8b98640827e5d0991a4015', + 'http://downloads.xiph.org/releases/ogg/libogg-1.3.3.tar.xz', + '4f3fc6178a533d392064f14776b23c397ed4b9f48f5de297aba73b643f955c08', 'lib/libogg.a', [ '--disable-shared', '--enable-static', @@ -29,6 +30,9 @@ opus = AutotoolsProject( [ '--disable-shared', '--enable-static', ], + + # suppress "visibility default" from opus_defines.h + cppflags='-DOPUS_EXPORT=', ) flac = AutotoolsProject( @@ -58,6 +62,11 @@ libid3tag = AutotoolsProject( '--disable-debugging', ], autogen=True, + + edits={ + # fix bug in libid3tag's configure.ac which discards all but the last optimization flag + 'configure.ac': lambda data: re.sub(r'optimize="\$1"', r'optimize="$optimize $1"', data, count=1), + } ) libmad = AutotoolsProject( @@ -105,15 +114,223 @@ ffmpeg = FfmpegProject( '--disable-pixelutils', '--disable-network', '--disable-encoders', + '--disable-muxers', '--disable-protocols', '--disable-devices', '--disable-filters', + '--disable-filters', '--disable-v4l2_m2m', - # clang misinterprets the "B0" in hevc_mvs.c as binary - # literal, which breaks the build; but we don't need that - # video codec anyway + '--disable-parser=bmp', + '--disable-parser=cavsvideo', + '--disable-parser=dvbsub', + '--disable-parser=dvdsub', + '--disable-parser=dvd_nav', + '--disable-parser=flac', + '--disable-parser=g729', + '--disable-parser=gsm', + '--disable-parser=h261', + '--disable-parser=h263', + '--disable-parser=h264', + '--disable-parser=hevc', + '--disable-parser=mjpeg', + '--disable-parser=mlp', + '--disable-parser=mpeg4video', + '--disable-parser=mpegaudio', + '--disable-parser=mpegvideo', + '--disable-parser=opus', + '--disable-parser=vc1', + '--disable-parser=vp3', + '--disable-parser=vp8', + '--disable-parser=vp9', + '--disable-parser=png', + '--disable-parser=pnm', + '--disable-parser=xma', + + '--disable-demuxer=aqtitle', + '--disable-demuxer=ass', + '--disable-demuxer=bethsoftvid', + '--disable-demuxer=bink', + '--disable-demuxer=cavsvideo', + '--disable-demuxer=cdxl', + '--disable-demuxer=dvbsub', + '--disable-demuxer=dvbtxt', + '--disable-demuxer=h261', + '--disable-demuxer=h263', + '--disable-demuxer=h264', + '--disable-demuxer=ico', + '--disable-demuxer=image2', + '--disable-demuxer=jacosub', + '--disable-demuxer=lrc', + '--disable-demuxer=microdvd', + '--disable-demuxer=mjpeg', + '--disable-demuxer=mjpeg_2000', + '--disable-demuxer=mpegps', + '--disable-demuxer=mpegvideo', + '--disable-demuxer=mpl2', + '--disable-demuxer=mpsub', + '--disable-demuxer=pjs', + '--disable-demuxer=rawvideo', + '--disable-demuxer=realtext', + '--disable-demuxer=sami', + '--disable-demuxer=scc', + '--disable-demuxer=srt', + '--disable-demuxer=stl', + '--disable-demuxer=subviewer', + '--disable-demuxer=subviewer1', + '--disable-demuxer=swf', + '--disable-demuxer=tedcaptions', + '--disable-demuxer=vobsub', + '--disable-demuxer=vplayer', + '--disable-demuxer=webvtt', + '--disable-demuxer=yuv4mpegpipe', + + # we don't need these decoders, because we have the dedicated + # libraries + '--disable-decoder=flac', + '--disable-decoder=mp1', + '--disable-decoder=mp1float', + '--disable-decoder=mp2', + '--disable-decoder=mp2float', + '--disable-decoder=mp3', + '--disable-decoder=mp3adu', + '--disable-decoder=mp3adufloat', + '--disable-decoder=mp3float', + '--disable-decoder=mp3on4', + '--disable-decoder=mp3on4float', + '--disable-decoder=opus', + '--disable-decoder=vorbis', + + # audio codecs nobody uses + '--disable-decoder=atrac1', + '--disable-decoder=atrac3', + '--disable-decoder=atrac3al', + '--disable-decoder=atrac3p', + '--disable-decoder=atrac3pal', + '--disable-decoder=binkaudio_dct', + '--disable-decoder=binkaudio_rdft', + '--disable-decoder=bmv_audio', + '--disable-decoder=dsicinaudio', + '--disable-decoder=dvaudio', + '--disable-decoder=metasound', + '--disable-decoder=paf_audio', + '--disable-decoder=ra_144', + '--disable-decoder=ra_288', + '--disable-decoder=ralf', + '--disable-decoder=qdm2', + '--disable-decoder=qdmc', + + # disable lots of image and video codecs + '--disable-decoder=ass', + '--disable-decoder=asv1', + '--disable-decoder=asv2', + '--disable-decoder=apng', + '--disable-decoder=avrn', + '--disable-decoder=avrp', + '--disable-decoder=bethsoftvid', + '--disable-decoder=bink', + '--disable-decoder=bmp', + '--disable-decoder=bmv_video', + '--disable-decoder=cavs', + '--disable-decoder=ccaption', + '--disable-decoder=cdgraphics', + '--disable-decoder=clearvideo', + '--disable-decoder=dirac', + '--disable-decoder=dsicinvideo', + '--disable-decoder=dvbsub', + '--disable-decoder=dvdsub', + '--disable-decoder=dvvideo', + '--disable-decoder=exr', + '--disable-decoder=ffv1', + '--disable-decoder=ffvhuff', + '--disable-decoder=ffwavesynth', + '--disable-decoder=flic', + '--disable-decoder=flv', + '--disable-decoder=fraps', + '--disable-decoder=gif', + '--disable-decoder=h261', + '--disable-decoder=h263', + '--disable-decoder=h263i', + '--disable-decoder=h263p', + '--disable-decoder=h264', '--disable-decoder=hevc', + '--disable-decoder=hnm4_video', + '--disable-decoder=hq_hqa', + '--disable-decoder=hqx', + '--disable-decoder=idcin', + '--disable-decoder=iff_ilbm', + '--disable-decoder=indeo2', + '--disable-decoder=indeo3', + '--disable-decoder=indeo4', + '--disable-decoder=indeo5', + '--disable-decoder=interplay_video', + '--disable-decoder=jacosub', + '--disable-decoder=jpeg2000', + '--disable-decoder=jpegls', + '--disable-decoder=microdvd', + '--disable-decoder=mimic', + '--disable-decoder=mjpeg', + '--disable-decoder=mmvideo', + '--disable-decoder=mpl2', + '--disable-decoder=motionpixels', + '--disable-decoder=mpeg1video', + '--disable-decoder=mpeg2video', + '--disable-decoder=mpeg4', + '--disable-decoder=mpegvideo', + '--disable-decoder=mscc', + '--disable-decoder=msmpeg4_crystalhd', + '--disable-decoder=msmpeg4v1', + '--disable-decoder=msmpeg4v2', + '--disable-decoder=msmpeg4v3', + '--disable-decoder=msvideo1', + '--disable-decoder=mszh', + '--disable-decoder=mvc1', + '--disable-decoder=mvc2', + '--disable-decoder=on2avc', + '--disable-decoder=paf_video', + '--disable-decoder=png', + '--disable-decoder=qdraw', + '--disable-decoder=qpeg', + '--disable-decoder=rawvideo', + '--disable-decoder=realtext', + '--disable-decoder=roq', + '--disable-decoder=roq_dpcm', + '--disable-decoder=rscc', + '--disable-decoder=rv10', + '--disable-decoder=rv20', + '--disable-decoder=rv30', + '--disable-decoder=rv40', + '--disable-decoder=sami', + '--disable-decoder=sheervideo', + '--disable-decoder=snow', + '--disable-decoder=srt', + '--disable-decoder=stl', + '--disable-decoder=subrip', + '--disable-decoder=subviewer', + '--disable-decoder=subviewer1', + '--disable-decoder=svq1', + '--disable-decoder=svq3', + '--disable-decoder=tiff', + '--disable-decoder=mottiertexseqvideo', + '--disable-decoder=truemotion1', + '--disable-decoder=truemotion2', + '--disable-decoder=truemotion2rt', + '--disable-decoder=twinvq', + '--disable-decoder=utvideo', + '--disable-decoder=vc1', + '--disable-decoder=vmdvideo', + '--disable-decoder=vp3', + '--disable-decoder=vp5', + '--disable-decoder=vp6', + '--disable-decoder=vp7', + '--disable-decoder=vp8', + '--disable-decoder=vp9', + '--disable-decoder=vqa', + '--disable-decoder=webvtt', + '--disable-decoder=wmv1', + '--disable-decoder=wmv2', + '--disable-decoder=wmv3', + '--disable-decoder=yuv4', ], ) @@ -130,6 +347,7 @@ curl = AutotoolsProject( '--disable-ldap', '--disable-ldaps', '--disable-rtsp', '--disable-proxy', '--disable-dict', '--disable-telnet', '--disable-tftp', '--disable-pop3', '--disable-imap', '--disable-smtp', + '--disable-smb', '--disable-gopher', '--disable-manual', '--disable-threaded-resolver', '--disable-verbose', '--disable-sspi', diff --git a/python/build/project.py b/python/build/project.py index c79c4f5a1..087ca3d07 100644 --- a/python/build/project.py +++ b/python/build/project.py @@ -7,6 +7,7 @@ from build.tar import untar class Project: def __init__(self, url, md5, installed, name=None, version=None, base=None, + edits=None, use_cxx=False): if base is None: basename = os.path.basename(url) @@ -28,6 +29,7 @@ class Project: self.md5 = md5 self.installed = installed + self.edits = edits self.use_cxx = use_cxx def download(self, toolchain): @@ -47,7 +49,18 @@ class Project: parent_path = toolchain.src_path else: parent_path = toolchain.build_path - return untar(self.download(toolchain), parent_path, self.base) + path = untar(self.download(toolchain), parent_path, self.base) + + if self.edits is not None: + for filename, function in self.edits.items(): + with open(os.path.join(path, filename), 'r+t') as f: + old_data = f.read() + new_data = function(old_data) + f.seek(0) + f.truncate(0) + f.write(new_data) + + return path def make_build_path(self, toolchain): path = os.path.join(toolchain.build_path, self.base) diff --git a/src/queue/PlaylistControl.cxx b/src/queue/PlaylistControl.cxx index e0e07b87e..79bb87e41 100644 --- a/src/queue/PlaylistControl.cxx +++ b/src/queue/PlaylistControl.cxx @@ -212,8 +212,6 @@ playlist::SeekSongOrder(PlayerControl &pc, unsigned i, SongTime seek_time) { assert(queue.IsValidOrder(i)); - const DetachedSong *queued_song = GetQueuedSong(); - pc.LockClearError(); stop_on_error = true; error_count = 0; @@ -226,8 +224,6 @@ playlist::SeekSongOrder(PlayerControl &pc, unsigned i, SongTime seek_time) playing = true; current = i; - - queued_song = nullptr; } queued = -1; @@ -235,7 +231,7 @@ playlist::SeekSongOrder(PlayerControl &pc, unsigned i, SongTime seek_time) try { pc.LockSeek(std::make_unique(queue.GetOrder(i)), seek_time); } catch (...) { - UpdateQueuedSong(pc, queued_song); + UpdateQueuedSong(pc, nullptr); throw; }